::: mermaid classDiagram
class Employee{
+String name
+Int id
+IRole role
+IPayrollPolicy payroll_policy
+Address address
}
class IRole{
+work()
}
<<interface>> IRole
Employee *-- IRole
class ManagerRole{
+work()
}
ManagerRole --|> IRole
class DeveloperRole{
+work()
}
DeveloperRole --|> IRole
class BackEndDeveloperRole{
+work()
}
BackEndDeveloperRole --|> DeveloperRole
class FrontEndDeveloperRole{
+work()
}
FrontEndDeveloperRole --|> DeveloperRole
class DesignerRole{
+work()
}
DesignerRole --|> IRole
class SalespersonRole{
+work()
}
SalespersonRole --|> IRole
class Address{
+String street
+String city
+String state
+String country
}
Employee *-- Address
class IPayrollPolicy{
+Int payroll()
}
<<interface>> IPayrollPolicy
Employee *-- IPayrollPolicy
class SalaryPolicy{
+Int salary
+Int payroll()
}
SalaryPolicy --|> IPayrollPolicy
class CommissionPolicy{
+Int commission_per_sale
+Int sales_made
+Int payroll()
}
CommissionPolicy --|> SalaryPolicy
class HourlyPolicy{
+Int hour_rate
+Int hours_worked
+Int payroll()
}
HourlyPolicy --|> IPayrollPolicy
:::