@startuml skinparam packageStyle file skinparam linetype ortho 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 Activity { abstract Activity { +name } abstract Project extends Activity { + dateBegin + dateEnd + hours[] } Project *- Person.ResearchAssociate (Project, Person.ResearchAssociate) .. Hours class Hours { + person + hours } class Course extends Project { + id + lecturer + ects } Course *-- Person.Lecturer class StudentProject extends Project { + supervisor + ects } StudentProject *-- Person.Supervisor class Programme { + student + activity[] + addActivity() + valid() } Programme *- Course Programme *- StudentProject Programme "1" *-- Person.Student } package Bachelorizer { class Bachelorizer { + programme[] + addProgramme(student,activity...) } Activity.Programme --* Bachelorizer } @enduml