Source: https://cran.r-project.org/doc/contrib/Genolini-S4tutorialV0-5en.pdf