Introduzione
Risultano molto comuni, situazioni in cui diverse classi condividono gli stessi attributi. Il questo caso si può utilizzare il concetto di ereditarietà creando relazioni di sotto classi e super classi, proprio come in Java e nella [[programmazione ad oggetti in generale.
Tutti gli attributi, associazioni e le molteplicità della super-classe sono ereditati dalla sottoclasse.
Costrutto is-a
Il costrutto is-a indica che una classe è sottoclassi di una solo altra classe, premettendo alla sotto classe di ereditare le caratteristiche della classe madre.
Esempio
Ovviamente possiamo avere relazioni is-a a più livelli: transitività
Rispetto a Java l’ereditarietà in UML è molto più potente perché permette, infatti permette ad un oggetto di essere istanza di due classi, ad esempio:
L’oggetto Anna
è un istanza di Studente
, ma anche di Lavoratore
, a sua volta, essendo queste ultime sottoclassi di Persona
, è anche implicitamente istanza di Persona
. L’insieme delle sue classi più speci che è {Studente, Lavoratore}
.
Costrutto della Generalizzazione
I diagrammi delle classi UML offrono un costrutto più complesso della relazione is-a, il costrutto della generalizzazione.
Permette di definire che le istanze di una classe possono essere istanze di più classi figlie secondo uno stesso criterio concettuale.
Criteri {disjoint} e {complete}
Normalmente una istanza della classe base può essere istanza di più di una sottoclasse di una stessa generalizzazione.
Ad esempio in questo esempio una persona può essere: Studente
, Lavoratore
, Studente e Lavoratore
, ne Studente ne Lavoratore
.
É possibile porre delle limitazioni a questi comportamenti attraverso il criterio {disjoint} ed il criterio {complete}.
Criterio {disjoint}
In questo caso la generalizzazione di
genere
è disgiunta, ovvero una istanza diUomo
non può essere anche istanza diDonna
.Quindi una
Persona
o è unUomo
o è unaDonna
, o non ène Uomo ne una Donna
.
Criterio {complete}
In questo caso la generalizzazione di
genere
è completa, ovvero ogni istanza diPersona
deve essere anche istanza di almeno una sottoclasse traUomo
eDonna
.Quindi una persona o è un
Uomo
o è unaDonna
, o èsia Uomo e Donna
.
Sia {disjoint} e {complete}
In questo caso la generalizzazione di
genere
è sia completa e disgiunta, ovvero ogni istanza diPersona
deve essere anche istanza di esattamente una sottoclasse traUomo
eDonna
.Quindi una persona o è un
Uomo
o è unaDonna
.
Ereditarietà Multipla
Una classe può essere sottoclasse di più classi. Il meccanismo dell’ereditarietà vale come sempre.