Casino online











Mercato forex






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:
Public MustInherit Class Bicicletta
  Public Sub Frena()
  'Questa procedura dovrà essere ridefinita
  Public MustOverride Sub Pedala(ByVal Forza As UInt16)
  'Questa invece è standard per tutti
  Public Sub Gira(ByVal Direzione As UInt16)
End Class

'La bici con cambio eredita dallo stampo base di una bicicletta,
'ma può cambiare marcia
Public MustInherit Class Bici_con_cambio
  Inherits Bicicletta
  Public NumeroMarce As Byte
  Public MustOverride Sub CambiaMarcia(ByVal Marcia As Byte)
End Class

'La mountain-bike eredita dalla bici con cambio:
Public Class MountainBike
  Inherits Bici_con_cambio
  Public Sub New(ByVal Marce As Byte)
    NumeroMarce = Marce
  End Sub
  
  'Queste procedure sono ora ridefinite
  Public Overrides Sub Frena
    'codice
  End Sub
  
  Public Overrides Sub Pedala(ByVal Forza As UInt16)
    'codice
  End Sub
  
  Public Overrides Sub CambiaMarcia(ByVal Marcia As Byte)
    'codice
  End Sub
End Class

'La bici classica, invece, eredita solo da Bicicletta,
'poichè non dispone di un cambio
Public Class Bici_classica
  Inherits Bicicletta
  Public Overrides Sub Frena
    'codice
  End Sub
  
  Public Overrides Sub Pedala(ByVal Forza As UInt16)
    'codice
  End Sub
End Class 
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.


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.