@startuml ' mimick visual style of UML @ Classroom <10.1007/978-3-319-12742-2> skinparam packageStyle file hide circle skinparam classAttributeIconSize 0 package Person { abstract Person { + name: String } abstract Employee extends Person { + {static} ssn: int + email: String } class Tap extends Employee class Vip extends Employee class Dean extends Vip class ResearchAssociate extends Vip { + field: String } class Supervisor extends ResearchAssociate class Lecturer extends ResearchAssociate class Student extends Person } package Org { abstract Org { + name: String } interface Place { + address: String } 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: String } abstract Project extends Activity { + dateBegin: date + dateEnd: date + hours: VipHours[] } Project *- Person.ResearchAssociate (Project, Person.ResearchAssociate) .. VipHours class VipHours { + person: Vip + hours: int } class Course extends Project { + {static} id: int + lecturer: Lecturer + ects: int } Course *-- Person.Lecturer class StudentProject extends Project { + supervisor: Supervisor + ects: int } StudentProject *-- Person.Supervisor class Programme { + student: Student + activities: Activity[] + addActivity(): void + valid() } Programme *- Course Programme *- StudentProject Programme "1" *-- Person.Student } package Bachelorizer { class Bachelorizer { + programmes: Programme[] + addProgramme(): void } Activity.Programme --* Bachelorizer } @enduml