Corso di PHP

Oggetti II

 

La scorsa lezione abbiamo introdotto la programmazione orientata agli oggetti e abbiamo spiegato cosa sia l’incapsulazione. In questa puntata parleremo, come promesso del secondo principio cardine della programmazione orientata agli oggetti: l’ereditarietà.

Ereditarietà
L’ereditarietà è 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. L’uomo 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 un’importante intuizione, in quanto ciò permetterà di raggiungere un livello di astrazione superiore e rappresenta un valido aiuto alla programmazione. Grazie all’ereditarietà, infatti, è possibile definire una classe (detta classe figlia o sottoclasse) come estensione di un’altra 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 quant’altro; 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 l’ereditarietà 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 un’altra 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. L’incapsulazione 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