@startuml skinparam packageStyle file package Person { abstract Person { +name } abstract 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 } package Org { abstract Org { +name } interface Place { +address } class University implements Place class University extends Org class Faculty extends Org Faculty --* University Faculty "1" *- Person.Dean class Institute implements Place class Institute extends Org Institute --* Faculty Institute *- Person.ResearchAssociate } package Project { abstract Project { +name +dateBegin +dateEnd } class ProjectHours ProjectHours "1" *-- Project ProjectHours o-- Person.ResearchAssociate interface ProvidesEcts { +ects } class Course implements ProvidesEcts class Course extends Project { +id +name +hoursWeekly } Course -- Person.Lecturer class StudentProject implements ProvidesEcts class StudentProject extends Project StudentProject --* Person.Supervisor class Programme { addActivity() valid() } Programme o- Course Programme o- StudentProject Programme --* Person.Student } package Bachelorizer { class Bachelorizer Bachelorizer --> Project.Programme } @enduml