Le classi astratte

17 marzo 2006

Una classe astratta è un tipo particolare di classe di cui non si può creare una istanza con la parola chiave «new». Per essere utilizzata, infatti, deve essere obbligatoriamente ereditata. Mostriamo subito un esempio di classe astratta, partendo dal quale introdurremo una serie di importanti concetti:

public abstract class Figura
{
  protected string mNome;
  protected int mNumeroLati;

  public Figura(string Nome, int NumeroLati)
  {
    mNome = Nome;
    mNumeroLati = NumeroLati;
  }

  public string Nome
  {
    get { return mNome; }
  }

  public int NumeroLati {
    get { return mNumeroLati; }
  }

  public abstract double Perimetro { get; }
  public abstract double Area { get; }
  public abstract void Disegna();
}

Una classe astratta si dichiara con la parola chiave «abstract». Al suo interno possono essere definite variabili, metodi e proprietà, proprio come abbiamo fatto finora (nell’esempio sopra riportato, le variabili mNome e mNumeroLati, il costruttore, e le proprietà Nome e NumeroLati).

Oltre a ciò, è possibile dichiarare un’altra serie di metodi e proprietà che devono essere obbligatoriamente implementate dalle classi che ereditano da essa: i cosiddetti metodi e proprietà astratti.

Nel nostro caso, la classe che eredita da Figura deve fornire una implementazione delle proprietà Perimetro e Area (dalla definizione si comprende che saranno di sola lettura, se fossero state di lettura/scrittura avremmo avuto get; set;) e del metodo Disegna.

La classe Quadrato eredita correttamente da Figura:

public class Quadrato : Figura
{
  private double mLato;

  public Quadrato(int Lato) : base(“Quadrato”, 4)
  {
    mLato = Lato;
  }

  public override double Perimetro
  {
    get { return mLato * 4; }
  }

  public override double Area
  {
    get { return mLato * mLato; }
  }

  public override void Disegna()
  {
    //…
  }
}

Figura è la classe che racchiude le caratteristiche comuni ad ogni figura geometrica. La definizione fornita obbliga tutte le classi che ereditano da essa a ridefinire i metodi e le proprietà dichiarati abstract, altrimenti in fase di compilazione si otterrà un messaggio di errore in quanto alla dichiarazione del metodo non corrisponde nessuna azione concreta: nessun codice da eseguire.

Ad esempio, eliminando il metodo Disegna dalla classe Quadrato, la compilazione fallisce segnalando che ‘Quadrato’ non implementa il metodo astratto ereditato Figura.Disegna().

Per le classi astratte valgono le stesse considerazioni fatte a proposito dell’ereditarietà, ovvero se un metodo richiede una classe astratta come argomento, al suo posto potrà essere utilizzata una qualunque classe che eredita da essa.

In VB.NET una classe astratta si dichiara con MustInherit e un metodo astratto con MustOverride.

Fare clic qui per scaricare l’esempio che abbiamo realizzato; nel file ZIP è disponibile anche la classe triangolo.

Tutte le lezioni

1 ... 10 11 12 ... 26

Se vuoi aggiornamenti su Le classi astratte inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Le classi astratte

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy