Source: http://www.cs.stir.ac.uk/courses/ITNP090/lectures/pdf/6-UML4.pdf