A35. Classi Astratte e Sigillate
Classi Astratte
Le classi astratte sono speciali classi che devono essere marcate con la keyword MustInherit. Questa espressione inglese significa "Deve
ereditare" e fa comprendere, quindi, che classi del genere non possono essere utilizzate per altro scopo tranne che venire ereditate.
In un certo modo, si può dire che costituiscano lo schelettro per altri oggetti. Si può comprendere la loro funzionalità con un esempio.
Ammettiamo di essere i sovrintendenti di una fabbrica dove vengono costruite e assemblate biciclette. Ebbene, noi siamo a conoscenza
che per costruirne una ci vuole, essenzialmente, un telaio di metallo (non sottilizziamo tanto sul materiale) e questo deve perciò essere
un elemento comune a tutte le biciclette. Inoltre, ogni bicicletta, per essere tale, ha bisogno di pedali, di ruote, di freni e di una
catena che trasmetta il movimento rotatorio dei pedali alle ruote. Ma di bici esistono tanti modelli differenti: da corsa, mountain-bike,
classiche, con i cambi multipli, a 5 ,6 o 7 marce ecc. Le classi astratte sono come il telaio delle biciclette, i suoi metodi sono i freni,
le ruote, la catena e i pedali della bicilette, che ogni modello, poi, interpreta secondo le proprie esigenze. I suoi membri possono
perciò essere dichiarati MustOverride, ossia che devono per forza essere modificati tramite polimorfismo. Ogni classe derivata ridefinisce
quei metodi a seconda delle proprie esigenze, tuttavia non è necessario che ogni metodo venga definito MustOverride, poichè ci sono
alcuni elementi comuni (come l'azione del girare o del frenare) che sono sempre gli stessi, il cui codice si adegua perfettamente al
comportamento di tutte le classi derivate. Riprendendo l'esempio ciclistico:
L'uso di queste classi non è sempre molto chiaro, poichè esse sono poco usate, o impiegate solo in applicazioni professionali. Il compito principale di una classe astratta è definire un tipo generico, un archetipo, che non esiste mai veramente: infatti si può definire la classe astratta Animale, ma non potrà mai esistere un animale "generico", piuttosto sarà un individuo specifico (un gatto, un cane, un rospo, un ornitorinco, eccetera), che deriva le sue caratteristiche (o le ridefinisce) da Animale.Public MustInherit Class BiciclettaPublic Sub Frena()'Questa procedura dovrà essere ridefinita Public MustOverride Sub Pedala(ByVal ForzaAs UInt16)' Questa invece è standard per tutti Public Sub Gira(ByVal DirezioneAs UInt16)End Class 'La bici con cambio eredita dallo stampo base di una bicicletta, 'ma può cambiare marcia Public MustInherit Class Bici_con_cambioInherits BiciclettaPublic NumeroMarceAs Byte Public MustOverride Sub CambiaMarcia(ByVal MarciaAs Byte )End Class 'La mountain-bike eredita dalla bici con cambio: Public Class MountainBikeInherits Bici_con_cambioPublic Sub New (ByVal MarceAs Byte ) NumeroMarce = MarceEnd Sub ' Queste procedure sono ora ridefinite Public Overrides Sub Frena' codice End Sub Public Overrides Sub Pedala(ByVal ForzaAs UInt16)' codice End Sub Public Overrides Sub CambiaMarcia(ByVal MarciaAs Byte )' codice End Sub End Class 'La bici classica, invece, eredita solo da Bicicletta, 'poichè non dispone di un cambio Public Class Bici_classicaInherits BiciclettaPublic Overrides Sub Frena' codice End Sub Public Overrides Sub Pedala(ByVal ForzaAs UInt16)' codice End Sub End Class
Classi Sigillate
Le classi sigillate (sealed), al contrario di quelle astratte, non possono mai venire ereditate: esistono e sono fini a loro stesse.
Vengono dichiarate con la keyword NotInheritable (ossia "non ereditabile"), ma sono raramente utili sul piano pratico. Una classe che esponga
solo metodi statici potrebbe, ad esempio, essere definita in questo modo. Anche gli oggetti immutabili sono buoni candidati per essere classi
sigillate: infatti, se venissero ereditati, alcuni metodi o proprietà della classe derivata potrebbero compromettere l'effettiva immutabilità
del tipo. L'esempio più comune di classi di questo tipo è String.
The Totem's Lair - Copyright (C) 2009
È vietata la riproduzione sia totale che parziale del sito.



