Source: http://www2.ift.ulaval.ca/~dupuis/Programmation orientee objets/Chap. I/Chap. I - Introduction.pdf