@startuml abstract class Person { +name } abstract class Employee extends Person { +ssn +email } class Tap extends Employee { } class Vip extends Employee { } class Dean extends Vip { } class ResearchAssociate extends Vip { +field } class Supervisor extends ResearchAssociate { } class Lecturer extends ResearchAssociate { } class Student extends Person { } abstract class Org { +name } interface Place { +address } class University implements Place class University extends Org { } class Faculty extends Org { } Faculty -* University Faculty "1" *- Dean class Institute implements Place class Institute extends Org { } Institute -* Faculty Intitute *- ResearchAssociate abstract Project { +name +dateBegin +dateEnd } class ProjectHours { } ProjectHours "1" *-- Project ProjectHours o-- ResearchAssociate interface ProvidesEcts { +ects } class Course implements ProvidesEcts class Course extends Project { +id +name +hoursWeekly } Course -- Lecturer class StudentProject implements ProvidesEcts class StudentProject extends Project { } StudentProject --o Vip StudentProject -- Supervisor class Programme { addActivity() valid() } Programme o- Course Programme o- StudentProject Programme --* Student class Bachelorizer { } Bachelorizer --> Programme @enduml