Due principi di programmazione orientata agli oggetti (leggi qui sull’astrazione e sull’incapsulamento), ne mancano ancora due! Oggi daremo un’occhiata all’ereditarietà. Rispetto all’astrazione e all’incapsulamento, l’ereditarietà è un po’ più diretta (secondo la mia opinione personale).
Come gli altri principi dell’OOP, l’ereditarietà ha lo scopo di ottimizzare il lavoro dei programmatori. Il ruolo che l’ereditarietà gioca in questa ottimizzazione è quello di permettere agli ingegneri software di creare gerarchie di classi, dove le classi e gli oggetti ereditano proprietà e comportamenti dalla loro classe madre (o super). Una classe che eredita da una classe madre (o super) è chiamata sottoclasse o classe figlia, e gli oggetti che ricevono proprietà e comportamenti da un genitore attraverso l’ereditarietà sono chiamati oggetti figli.
In che modo questo è utile? Una grande parte dell’utilità dell’ereditarietà è la riusabilità. Userò Noè e l’arca come esempio. Per quelli di voi che non conoscono la storia, la Terra è minacciata da un’inondazione mondiale e Noè costruisce un’arca per conservare due di ogni animale terrestre sulla Terra in modo che possano sopravvivere alla tempesta. Supponiamo che Noè voglia usare un programma software che lo aiuti a tenere traccia di tutti gli animali sull’arca e dei loro vari bisogni.
Creare una classe unica per ogni singolo animale diventerebbe rapidamente molto ripetitivo perché ci sono alcune proprietà e comportamenti che si applicano ad ogni singolo animale, da un topo ad un elefante. Le funzioni condivise potrebbero includere feed( ), hydrate( ), cleanEnclosure( ). Invece di creare questi attributi condivisi più e più volte per ogni animale, potremmo invece creare una classe madre Animal! Questa classe genitore conterrebbe le proprietà e i comportamenti universali per tutti gli animali e ci eviterebbe di dover creare quelle funzioni condivise all’infinito.
In questo modo, un elefante, un topo e uno scimpanzé avrebbero tutti la loro classe figlio che erediterebbe dalla classe madre Animal. Inoltre, Noah potrebbe continuare a costruire su questi attributi ereditati per personalizzare ulteriormente queste classi come necessario. Infine, l’ereditarietà ci permette di limitare le possibilità di errore umano che potrebbero sorgere inserendo manualmente queste funzioni condivise.
La prossima settimana: polimorfismo!