@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 <<abstract>> {
+ name: String
}

class ResearchAssociate extends Person {
+ field: String
}

class Student extends Person

}

package Activity {

abstract Activity <<abstract>> {
+ name: String
}

class Course extends Activity {
+ {static} id: int
+ lecturer: ResearchAssociate
+ ects: int
}
Course "1..*" *-- Person.ResearchAssociate

class StudentProject extends Activity {
+ supervisor: ResearchAssociate
+ ects: int
}
StudentProject "1" *-- Person.ResearchAssociate

}

package Bachelorizer {

class Programme {
+ student: Student
+ activities: Activity[]
+ addActivity(): void
+ valid()
}
Programme o-- Activity.Course
Programme o-- Activity.StudentProject
Programme "1" *-- Person.Student

class Bachelorizer {
+ programme: Programme
}
Bachelorizer -- Programme

}

@enduml