@startuml Airplane "*" -- "1" Employee : serviceableBy > Airplane "*" -- "1" Hanger : storedIn > Airplane "*" -- "1" Person : ownedBy > Airplane "*" -- "1" Pilot : flyableBy > Hanger "*" -- "1" Employee : managedBy > Maintenance "*" -- "0..1" Employee : performedBy > Maintenance "*" -- "0..1" Airplane : performedOn > Person <|-- Corporation Person <|-- Employee Person <|-- Pilot class Airplane { {field} capacity {field} modelNumber {field} registrationNumber {field} weight {method} boolean storedIn(hanger) {method} Maintenance mostRecentMaintenance() {method} Date nextMaintenanceDueOn() {method} void storeIn(hanger) } class Maintenance { {field} workCode {field} startedAt {field} endedAt {method} Duration hours() } class Hanger { {field} number {field} capacity {field} location {method} boolean isFull() {method} boolean hasCapacityFor(airplane) } interface Person { {field} name {field} address {field} telephoneNumber {field} socialInsuranceNumber } class Pilot { {field} licenseNumber {field} restrictions {method} boolean canFly(airplane) {method} void fly(airplane) } class Employee { {field} salary {field} shift {method} boolean canService(airplane) {method} boolean hasServiced(airplane) {method} void beginMaintenanceOf(airplane) } class Corporation { } @enduml