Una classe può ereditare un'implementazione dell'interfaccia?
La realizzazione dell'interfaccia esprime che una classe X
implementa un'interfaccia I
. La classe X
può quindi, come qualsiasi altra classe, essere ulteriormente specializzata lasciando che altre classi ereditino da esso.
Il tuo diagramma UML
Potresti quindi avere un'interfaccia Contract
e avere diverse implementazioni come Freelancer
o Staff
. E naturalmente Staff
potrebbe avere due specializzazione FullTime
e PartTime
come prevedi:
Tuttavia,ilparttimepotrebberichiedereun'ulteriorespecializzazione,adesempioametàgiornata,ungiornoallasettimana,duegiorniallasettimana,ecc...Ladomandaè:is-aStaff
aFullTime
oaPartime
?OhaunostaffaFullTime
oaPartTime
pianificazioneoorariodilavoro?Inoltre,unliberoprofessionistanonavrebbeunaspecializzazionesimile?Ciòpotrebberendereilmodellodiclassemoltodensoerigido.
Laregoladelpollicedice
Prefer composition over inheritance
Quindi, se non sei sicuro al 100% che l'ereditarietà sia realmente necessaria, preferisci usare invece la composizione, in modo da avere un'associazione tra Staff
e WorkSchedule
.
La classe WorkSchedule
potrebbe definire le proprietà che caratterizzano la pianificazione del lavoro in modo flessibile. Naturalmente, potrebbe essere ulteriormente specializzato se ritenuto utile.