Source: http://www.eecs.qmul.ac.uk/~william/CPD2018/OOP-practical-sheet.pdf