🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Classi Astratte in C#

Codegrind Team•Jul 22 2023

Le classi astratte sono un concetto avanzato della programmazione orientata agli oggetti (OOP) che consentono di definire una classe base incompleta da cui derivare classi concrete. Una classe astratta può contenere metodi astratti (senza implementazione) e metodi concreti. Le classi concrete derivate da una classe astratta devono implementare tutti i metodi astratti della classe base. In questa lezione, esploreremo in dettaglio cos’è una classe astratta, come definirla e come usarla in C#.

ProprietĂ  delle Classi Astratte

  1. Definizione: Una classe astratta è una classe che non può essere istanziata direttamente. Serve come modello da cui derivare classi concrete.

  2. Metodi Astratti: Le classi astratte possono contenere metodi astratti, che sono dichiarazioni di metodi senza implementazione. Le classi derivate devono fornire l’implementazione di questi metodi.

  3. Metodi Concreti: Oltre ai metodi astratti, una classe astratta può anche contenere metodi concreti, ovvero metodi con implementazione predefinita.

Definizione di una Classe Astratta

Per dichiarare una classe astratta, utilizziamo la parola chiave abstract.

Esempio di Definizione di una Classe Astratta:

abstract class Forma
{
    public abstract double CalcolaArea(); // Metodo astratto
    public void MostraInfo() // Metodo concreto
    {
        Console.WriteLine("Questa è una forma.");
    }
}

Nell’esempio sopra, Forma è una classe astratta che contiene un metodo astratto CalcolaArea() e un metodo concreto MostraInfo().

Utilizzo di Classi Derivate

Le classi derivate da una classe astratta devono implementare tutti i metodi astratti ereditati.

Esempio di Utilizzo di Classi Derivate:

class Rettangolo : Forma
{
    public double Larghezza { get; set; }
    public double Altezza { get; set; }

    public override double CalcolaArea()
    {
        return Larghezza * Altezza;
    }
}

Vantaggi delle Classi Astratte

Le classi astratte consentono di definire una struttura di base comune per classi derivate. Questo promuove il riuso del codice e la coerenza nell’implementazione dei metodi astratti. Inoltre, le classi astratte permettono di fornire implementazioni di base per metodi concreti, contribuendo alla consistenza tra le classi derivate.

Differenze tra Classi Astratte e Interfacce

Le classi astratte e le interfacce sono strumenti per la creazione di gerarchie di classi, ma ci sono alcune differenze chiave:

  • Una classe astratta può avere membri concreti (metodi con implementazione), mentre un’interfaccia può solo definire firme di metodi.
  • Una classe può implementare piĂą interfacce, ma può derivare da una sola classe astratta.
  • Le interfacce possono essere utilizzate per rappresentare una contratto che deve essere rispettato dalle classi che le implementano.
  • Le classi astratte possono fornire un’implementazione di base per metodi concreti, mentre le interfacce richiedono che le classi che le implementano forniscono l’implementazione di tutti i metodi.

Conclusione

Le classi astratte sono un potente strumento nella programmazione orientata agli oggetti per definire classi di base incompleti da cui derivare classi concrete. Attraverso i metodi astratti, le classi astratte possono specificare firme di metodi che le classi derivate devono implementare. Utilizzando le classi astratte, è possibile creare gerarchie di classi più strutturate, promuovendo la coerenza e il riuso del codice.