Che cos’è la gerarchia di classe?

Una gerarchia di classi, chiamata anche tassonomia di classi, è un gruppo di classi correlate che sono collegate tramite l’ereditarietà per fare cose simili. La parte superiore della gerarchia può essere una singola classe base da cui derivano tutte le altre classi inferiori, oppure la gerarchia può avere più classi base le cui funzionalità si uniscono in seguito in una o più classi derivate. Le relazioni tra le classi possono essere illustrate come alberi e anche ogni albero più piccolo all’interno della grande tassonomia può essere considerato una gerarchia.

Non tutte le gerarchie di classi possono avere più radici e la struttura di qualsiasi gerarchia di classi dipende in gran parte dal linguaggio in cui è scritta. Il C++ consente l’ereditarietà multipla, quindi è possibile creare gerarchie complesse con più radici e più alberi che si fondono l’uno nell’altro. Java®, d’altra parte, è limitato all’ereditarietà singola, quindi le sue relazioni di classe sono generalmente più semplici, costruite come alberi relativamente autonomi con una singola radice. L’ereditarietà dell’interfaccia può aggiungere complessità a una gerarchia di classi in Java®, ma le interfacce non vengono quasi mai richiamate in un framework così complesso che sarebbe come unire gli alberi.

I componenti di una gerarchia di classi possono variare per tipo e funzione, purché le regole del linguaggio siano sempre seguite rispetto all’ereditarietà. Le classi in una gerarchia possono essere pubbliche, protette, astratte, concrete o virtuali. Possono essere utilizzate anche interfacce, funzioni globali e amici. A seconda del linguaggio del computer, alcuni di questi tipi possono prestarsi meglio all’ereditarietà rispetto ad altri. In generale, le gerarchie sono molto flessibili e possono essere utilizzate in molti modi per molti scopi.

Non ci sono regole rigide riguardo a dove particolari tipi di classi devono essere collocati in una gerarchia. Qualsiasi classe può concepibilmente essere uno dei tipi sopra menzionati. In generale, le ultime classi nella gerarchia che non hanno classi derivate sottostanti dovrebbero essere pubbliche e concrete. Tuttavia, poiché possono esistere anche gerarchie di classi puramente astratte, questa è solo una regola empirica.

Sebbene una gerarchia di classi possa essere uno strumento utile per organizzare il codice e incapsulare funzionalità, possono esserci momenti in cui scavare troppo in profondità in una gerarchia può effettivamente confondere il codice, piuttosto che chiarirlo e renderlo più facile da mantenere. Costruire una solida relazione tra molte classi richiede una certa lungimiranza; mentre inizialmente potrebbe essere più facile suddividere il codice in tanti piccoli pezzi, questi piccoli pezzi potrebbero diventare più difficili da gestire in seguito. Se costruita correttamente, una gerarchia di classi aiuta sia gli sviluppatori che gli utenti a determinare come funzionano le classi. Se è costruito senza manutenzione e chiarezza in mente, i molti livelli di ereditarietà possono essere fonte di confusione da guardare indietro e capire.