Classe astrattaUna classe astratta, nella programmazione orientata agli oggetti, è una classe che definisce una interfaccia senza implementarla completamente. Questo serve come base di partenza per generare una o più classi specializzate aventi tutte la stessa interfaccia di base, le quali potranno poi essere utilizzate indifferentemente (ovvero in modo polimorfico) da applicazioni che conoscono l'interfaccia base della classe astratta. CaratteristicheLa classe astratta da sola non può essere istanziata, viene progettata soltanto per svolgere la funzione di classe base (chiamata a volte anche classe genitrice) e da cui le classi derivate (chiamate anche classi figlie) possono ereditare i metodi. Le classi astratte sono usate anche per rappresentare concetti ed entità astratte. Le caratteristiche "incomplete" della classe astratta vengono condivise da un gruppo di sotto-classi figlie, che vi aggiungono caratteristiche diverse, in modo da colmare le "lacune" della classe base astratta. Le classi astratte possono essere considerate come super-classi che contengono metodi astratti, progettate in modo che le sotto-classi che ereditano da esse ne "estenderanno" le funzionalità implementandone i metodi. Il comportamento definito da queste classi è "generico". Prima che una classe derivata da una classe astratta possa essere istanziata essa ne deve implementare tutti i metodi astratti. Per sintetizzare, quando viene definita una classe astratta il programmatore deve tener presente che si tratta di una classe che non può essere istanziata direttamente; per fare ciò è necessario creare una classe derivata mediante l'ereditarietà. Questo processo di astrazione ha lo scopo di creare una struttura base che semplifica il processo di sviluppo del software o che indirizza la programmazione delle classi figlie. Al contrario, una classe concreta è una classe dalla quale possono essere create ("istanziate") entità chiamate "oggetti". La maggior parte dei linguaggi di programmazione orientati agli oggetti consente al programmatore di specificare, con apposite parole chiave, quali classi sono astratte, impedendo in modo automatico che su di esse vengano istanziati oggetti (ad esempio Java usa la keyword EsempiC++In C++ una funzione membro di una classe per la quale non viene fornita alcuna implementazione prende il nome di funzione virtuale pura, indicata esplicitamente concludendone la dichiarazione tramite la sintassi "= 0". Ad esempio: virtual bool draw() const = 0;
Una classe è implicitamente considerata astratta se:
class Base // classe astratta a causa della presenza della funzione "virtuale_pura()"
{
virtual void virtuale_pura() = 0;
};
class Derivata: public Base // classe astratta: eredita virtuale_pura() senza implementarla
{
<...eventuali altri campi e/o metodi...>
};
class Concreta: public Base // classe concreta: viene fornita un'implementazione per virtuale_pura()
{
virtual void virtuale_pura() override
{
<...implementazione...>
}
};
JavaIn Java sia i metodi astratti che le classi astratte sono indicati esplicitamente tramite la parola chiave public abstract class Veicolo_classe_astratta
{
public abstract void accendi();
}
public class Auto_4x4 extends Veicolo_classe_astratta // classe concreta, essendo fornita un'implementazione per il metodo accendi()
{
public void accendi()
{
System.out.println("veicolo acceso");
}
}
Una classe contenente almeno un metodo astratto è a sua volta astratta, e deve pertanto essere dichiarata come tale (l'assenza della parola chiave Un caso particolare di classi astratte in Java sono le cosiddette interfacce, dichiarate tramite la parola chiave
Bibliografia
Voci correlateCollegamenti esterni
|