Source: https://www.irif.fr/~emiquey/enseignement/poo3/TD6.pdf