Source: https://www.labri.fr/perso/zemmari/ens/M2IRE/c2_programmation_objet.pdf