Source: https://wp.unil.ch/risk/files/2015/12/3.-Principes-de-programmation.pdf