Source: https://www.enib.fr/~buche/data/POO_2014/pooArticle.pdf