Inversion of control e Dependency Injection

Classi astratte ed Interfacce

Una delle domande che solitamente mi viene posta nell’ambito della programmazione ad oggetti riguarda l’utilizzo di classi astratti e di interfacce.

Cosa sono le classi astratte? E le interfacce? Quando usare una o l’altra?

Un pò di confusione può essere generata dal fatto che una classe astratta senza alcuna implementazione può assomigliare sotto certi aspetti ad un’interfaccia. Esistono però alcune differenze sostanziali.

Cos’è una classe astratta?

Una classe astratta è una classe che non può essere istanziata. Ma perchè una classe non dovrebbe essere istanziabile? Perchè una classe astratta deve essere necessariamente ereditata. Il vantaggio di utilizzare una classe astratta è quello di poter impostare l’ereditarietà tra classi, forzando una sorta di contratto e regole nell’implementazione. Allo stesso modo consente di determinare la gerarchia tra classi.

Quando dichiariamo una classe astratta stiamo dichiarando una classe che potrebbe avere uno o più metodi implementati ma ALMENO un metodo astratto.

Cos’è un’interfaccia?

Un’intefaccia NON è una classe. E non ha un’implementazione. Al suo interno contiene solo la firma dei metodi che dovranno essere implementati nelle classi che la ereditano.

Un’interfaccia contiene quindi un’insieme di metodi che sono implementati, ma che dovranno essere implementati dalle classi che le implementano.

In C# una classe NON può ereditare da più classi, ma da più interfacce.

Le interfacce consentono di utilizzare l’ereditarietà multipla in C#, che diversamente non sarebbe possibile.

Se in una classe astratta tutti i metodi sono astratti, siamo in presenza di un’interfaccia.

Possiamo riassumere le differenze tra classi astratte ed interfacce nel seguente modo:

Ereditarietà multipla Una classe può ereditare solo da una classe astratta Una classe può ereditare da più interfacce
Implementazione di default Una classe astratta può contenere delle implementazioni dei metodi Un’interfaccia non fornisce alcuna implementazioni dei metodi (solo la loro firma)
Modificatori di accesso Una classe astratta può avere al suo interno modificatori di accesso dei suoi metodi, proprietà, ecc. Un’interfaccia non può utilizzare modificatori di accesso per metodi, proprietà, ecc.
Proprietà e costanti Una classe astratta può contenere proprietà e costanti Un’interfaccia non può contenere proprietà e costanti

Pubblicato da

Andrea Merlin

Laureato in informatica, diversi corsi di specializzazione legati allo Sviluppo Software e alla Computer forensics. Appassionato di nuove tecnologie, amo la programmazione, la Business Intelligence e tematiche legate alla Privacy.Sempre alla ricerca di nuove idee, stimoli … e progetti da seguire!Amo trascorrere il tempo libero in Val Borbera, un piccolo angolo del Piemonte, in provincia di Alessandria.