La programmazione ad oggetti -2

Il concetto di Sotto Classe

Nell’esempio precedente, si è vista la metodologia di definizione della classe come elemento fondamentale della nuova metodologia OOP. L’abilità dello sviluppatore che realizza classi sta nel definire classi più generiche possibili in modo da poter poi eventualmente derivare delle sotto classi come casi specifici della classe di livello superiore che si definisce superclasse.
In senso generico in UML lo scherma di una superclasse con una sottoclasse può essere formalizzato come riportato in figura.

Esempio di classi e sottoclassi

Nello schema UML si evidenzia la relazione di generalizzazione ovvero la classe più generale possibile è “Veicoli a motore” che possiede i suoi attributi e metodi, poi da essa si possono derivare due sottoclassi con ulteriori attributi e metodi aggiuntivi caratteristici di quelle sottoclassi “Auto” e “Motoveicoli”. Questo è il secondo elemento di novità della programmazione OOP ovvero l’ereditarietà la possibilità di derivare classi a partire da altre o attraverso generalizzazione.
Questo approccio è molto potente perché permette un adattamento delle classi che non corrispondendo in pieno alle esigenze dello sviluppatore possono essere derivate.
Appare evidente che potrebbe capitare che alcuni metodi e/o attributi della sottoclasse e/o superclasse devono essere sostituiti per mutate esigenze di utilizzo.
L’esempio mostrato mostra un tipico problema che si presenta con l’ereditarietà ovvero quella dell’istanziamento dell’oggetto giusto.
In altri termini immaginiamo di dover istanziare sia un oggetto “auto” che “motoveicolo” a partire dalla superclasse o viceversa come occorre procedere in questo caso ?
L’ereditarietà porta con se due modalità per aggirare il problema l’overloarding dei metodi, e l’overriding. La prima parola significa “sovraccarticamento” ovvero la possibilità di dichiarare più metodi con lo stesso nome ma con argomenti diversi.
Il secondo termine “overriding” è la sovrapposizione di metodi ad altri.

Nel nostro caso per poter utilizzare entrambi gli oggetti “auto” e “motoveicoli” a partire dalla superclasse occorre definire due metodi che inizializzano in modo corretto i due oggetti.
Questo argomento sarà oggetto di ampia trattazione, nei paragrafi successivi.