Source: https://www.csd.uoc.gr/~hy109/resources/abstraction.pdf