Source: http://www-igm.univ-mlv.fr/~forax/ens/java-avance/cours/pdf/poo3-modele%20d