Source: https://www.redcad.org/members/tarak.chaari/cours/POO.pdf