Archivi tag: class

eredità pericolosa

Nella programmazione object oriented l’ereditarietà è una cosa piuttosto complicata da utilizzare. Se non si vogliono fare pasticci è bene riflettere prima di scrivere il codice. Soprattutto tenendo conto del significato di Classe, Oggetto ed Istanza.
Ecco un esempio apparentemente semplice che in realtà nasconde un’insidia non semplice da risolversi.

Classi:
SpecieProtette
Orso
Panda

Panda è una sottoclasse delle classe SpecieProtette.
Panda è una sottoclasse della classe Orso.
La situazione sembrerebbe ben rappresentata così:

orso_panda

Quando andiamo a creare istanze delle varie classi avremo la seguente situazione:
Un’istanza di Panda e Orso è un singolo animale.
Un’istanza di SpecieProtette è una Specie.
Ad esempio:
Istanze di Panda: An-An, Chu-Chu, Ling-Ling.
Istanze di Orso: Yoghi, Bubu, Teddy.
Istanze di SpecieProtette: Topo muschiato, Castoro maculato, Mantide lamellata.

E’ corretto dire: Ling-Ling è un’istanza di Panda e quindi di Orso.
E’ errato dire: Ling-Ling è un’istanza di Panda e quindi di SpecieProtette perché un’istanza di SpecieProtette NON è un singolo esemplare.
Quindi  pur essendo Panda una sottoclasse di Orso e di SpecieProtette sembra che le sue istanze ereditino da Orso ma non da SpecieProtette.
Trovate l’errore e la soluzione.