La scorsa lezione abbiamo introdotto la programmazione orientata
agli oggetti e abbiamo spiegato cosa sia lincapsulazione.
In questa puntata parleremo, come promesso del secondo principio
cardine della programmazione orientata agli oggetti: lereditarietà.
Ereditarietà
Lereditarietà è un meccanismo messo a disposizione dai linguaggi
di programmazione orientati agli oggetti che consente al programmatore
di definire classi partendo da altre più semplici e generali. Luomo
conosce e classifica gli oggetti del mondo esterno utilizzando spesso,
anche se inconsciamente, il principio di ereditarietà. Esso consente
di sfruttare al meglio le risorse della nostro cervello evitando
di mantenere informazioni duplicate e usando le conoscenze già acquisite
come base di partenza per acquisirne altre.
Applicare il principio di ereditarietà ad un programma informatico è stata unimportante intuizione, in quanto ciò permetterà di raggiungere un livello di astrazione superiore e rappresenta un valido aiuto alla programmazione. Grazie allereditarietà, infatti, è possibile definire una classe (detta classe figlia o sottoclasse) come estensione di unaltra classe (spesso nota come superclasse o classe genitrice). Di questa, la classe figlia erediterà tutti gli attributi e tutti i metodi presenti; tuttavia si specializzerà definendone altri. La creazione di una classe figlia non avrà alcun effetto sulla superclasse da cui deriva. La superclasse continuerà ad esistere e continueranno ad esistere oggetti ad essa appartenenti. Una classe può generare più classi figlie, ognuna delle quali può generarne altre. È possibile, quindi, creare una gerarchia di classi ramificata a piacere, specializzando una classe di partenza anche molto generale.
Supponiamo di aver creato una classe Automobile. Essa avrà gli attributi comuni a tutte le macchine: ruote, sedili, cambio e quantaltro; tale classe sarà inoltre fornita di tutti i metodi di cui vorremo dotarla, per esempio giraDestra, giraSinistra, frena, accelera. Se volessimo creare una classe più specialistica, ad esempio la classe Fuoristrada, piuttosto che partire da zero possiamo sfruttare lereditarietà utilizzando la classe automobile. Infatti da questa possiamo far ereditare tutti gli attributi e i metodi, specializzandola e aggiungendo gli attributi trazioneIntegrale e argano ed il metodo avvolgiCavoArgano. Possiamo anche definire unaltra sottoclasse di Automobile, la classe Sationwagon per esempio, o specializzare ulteriormente la classe Fuoristrada, sviluppando la gerarchia secondo le esigenze dettate dal fine che ci poniamo.
La figura seguente mostra a scopo esemplificativo una possibile gerarchia di classi rappresentanti differenti mezzi di trasporto.

Ereditarietà e incapsulazione lavorano insieme e si
completano per creare un ambiente di programmazione più solido e
sicuro di quanto non sia possibile fare usando un tipo di linguaggio
di tipo strutturale. Infatti una gerarchia di classi ben costruita
rappresenta il mezzo per riutilizzare quel codice il cui sviluppo
e il cui collaudo sono verosimilmente costati notevole tempo e molta
fatica. Lincapsulazione permette invece che tale riutilizzo
sia possibile da parte di altri o che avvenga anche dopo molto tempo
non essendo necessaria una conoscenza approfondita di tutti i dettagli
implementativi.
Adesso che abbiamo appresso i principi e la filosofia che stanno
alla base della programmazione ad oggetti, siamo pronti per studiare
le istruzioni PHP che ci permetteranno di creare classi ed istanziare
oggetti. Di questo ci occuperemo a partire dalla prossima puntata.
Torna all'indice Generale del corso di Corso di PHP di Software Planet