Source: https://conan.iwr.uni-heidelberg.de/data/teaching/oopfsc_ss2018/slides8.pdf