Se si conosce qualcosa riguardo ad una categoria di cose,
automaticamente si conosce qualcosa che è possibile trasferire ad altre
categorie che, in qualche modo, discendono dalla categoria che
conosciamo. Chiariamo meglio questo concetto.
Ad esempio, se si conosce qualcosa su un animale generico (ad esempio
si sa che un animale mangia, dorme, è nato, si sposta da un luogo ad un
altro…, ecc.), potremo dire che tutte le sottocategorie di animali
(rettili, anfibi, mammiferi, ecc.) erediteranno le stesse
caratteristiche.
Tale meccanismo, in Analisi Object Oriented, viene definito come: Ereditarietà
Un esempio di ereditarietà
Una classe figlia (o sottoclasse) può ereditare gli attributi e le
operazioni da un'altra classe (che viene definita classe padre o super
classe) che sarà sempre più generica della classe figlia.
Nella generalizzazione, una classe figlia può rappresentare un valido
sostituto della classe padre. Cioè, in qualunque posto appaia la classe
padre, sarebbe possibile far apparire la classe figlia. Il viceversa
non è, invece, vero.
In UML l'ereditarietà viene rappresentata con una linea che connette la
classe padre alla classe discendente e dalla parte della classe padre
si inserisce un triangolo (una freccia).
Se ragioniamo dal punto di vista dell'associazione, l'ereditarietà può essere vista come un tipo di associazione.
Come devono fare gli analisti per scoprire l'ereditarietà di una o più
classi? L'analista deve far si che gli attributi e le operazioni per
una classe siano generali e si applichino a parecchie altre classi (le
sottoclassi) che, a loro volta, potranno "specializzare" la classe
padre aggiungendo attributi e operazioni propri. Un'altra possibilità è
che l'analista noti che due o più classi hanno un numero di attributi
ed operazioni in comune.
Le classi che non permettono di istanziare nessun tipo di oggetto sono
dette classi astratte. In UML una classe astratta si indica scrivendo
il suo nome in corsivo.
Riassumendo si può dire che una classe può ereditare attributi
ed operazioni da un'altra classe. La classe che eredita è figlia della
classe (padre) da cui prende gli attributi e le operazioni. Le classi
astratte sono utilizzate soltanto come classi base per l'ereditarietà e
non forniscono alcun oggetto implementabile.