L'ereditarietà

Il concetto di ereditarietà è già stato introdotto parlando dei principi della programmazione O.O.

L’ereditarietà, infatti, è uno dei principi fondamentali della programmazione orientata agli oggetti (OOP), che consente di creare nuove classi a partire da classi esistenti, permettendo, alle nuove classi, di ereditare attributi e metodi già definiti.
Abbiamo anche detto, affrontando le associazioni tra classi UML, che si configura ogni volta che tra due classi UML si individua una associazione di specializzazione/generalizzazione, ossia una associazione di tipo IS-A.
Abbiamo, inoltre, aggiunto che la classe da cui si eredita si chiama classe base o padre o superclasse e la classe che eredita (specializza) si chiama classe derivata o figlia o sottoclasse.

Sulla base di quanto premesso, aggiungiamo che si può ricorrere all'ereditarietà per diverse ragioni, riconducibili principalmente alle due situazioni che seguono:

  • abbiamo una classe già definita e dobbiamo realizzare una nuova classe i cui oggetti possono essere considerati, a tutti gli effetti, oggetti della prima classe, con caratteristiche e funzionalità aggiuntive
  • siamo in fase di progettazione iniziale di una applicazione ed individuiamo che alcune tipologie di oggetti presentano caratteristiche e funzionalità comuni, per cui può essere utile implementare le parti comuni in una classe (base) e derivare da essa le altre classi con le sole caratteristiche e funzionalità specifiche (derivate).
L’ereditarietà offre numerosi vantaggi nello sviluppo software:
  • Riutilizzo del codice: evita la duplicazione di codice, permettendo di sfruttare caratteristiche e funzionalità già implementate
  • Maggiore manutenibilità: le modifiche apportate alla superclasse si riflettono automaticamente nelle sottoclassi
  • Estendibilità: consente di specializzare, ossia di aggiungere caratteristiche e funzionalità senza modificare il codice esistente e funzionante
  • Chiarezza logica e concettuale: aiuta a rappresentare in modo naturale gerarchie e relazioni tra oggetti del mondo reale
L’ereditarietà, inoltre, favorisce il polimorfismo, permettendo di trattare oggetti diversi, che derivano da classi comuni, come se fossero dello stesso tipo (della classe base).