Programmazione orientata agli oggetti in ANSI-C. Ereditarietà multipla

Poichè stiamo pensando di usare l'ANSI-C non possiamo nascondere il fatto che ereditarietà significa includere una struttura all'inizio di un'altra. L'up-casting è la chiave per riutilizzare un metodo della superclasse sugli oggetti della sottoclasse.

Effettuare l'up-cast da un cerchio a un punto significa effettuare il casting dell'indirizzo all'inizio della struttura; il valore dell'indirizzo non cambia.

Se includiamo due o più strutture in qualche altra struttura, e se vogliamo effettuare qualche manipolazione degli indirizzi durante lìup-casting, chiameremo il risultato ereditarietà multipla: un oggetto può comportarsi come se appartenesse a più classi. L'ereditarietà multipla però, anche se appare comoda, impone che in fase di progetto si presti particolare attenzione a cosa si sta modellando. Attenzione, inoltre, deve essere posta quando si devono effettuare operazioni di manipolazione degli indirizzi prima di riutilizzare i metodi delle superlcassi.

Le cose possono complicarsi notevolmente in modo molto rapido. Consideriamo un testo e un rettangolo, ognuno con un punto di riferimento ereditato. Possiamo mixarli assieme per creare un pulsante – la domanda sarà se il pulsante dovrà ereditare un solo punto di riferimento oppure due punti di riferimento.

Il nostro approccio di fare tutto in ANSI-C ha un vantaggio significativo: non viene oscurata – a differenza del C++ - che l'eredità multipla o no avviene sempre per inclusione. L'inclusione, comunque, può avvenire anche per aggregazione. Non è chiaro per nulla se l'ereditarietà multipla sia davvero così utile al programmatore da giustificare un maggior grado di complessità nell'implementazione del codice.

Noi preferiamo mantenere le cose e i concetti semplici e continueremo a parlare di eredità semplice. Il Capitolo 14 mostrerà come uno dei principali usi dell'ereditarietà multipla – il merge delle librerie – può comunque essere realizzato con aggregazioni e messaggi.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend