Differenza tra classe astratta e interfaccia

Classe astratta vs interfaccia

Classe astratta (o tipo) è un tipo di sistema di tipo nominativo dichiarato dal programma. Sebbene il nome implichi tale, una classe astratta può o non può includere metodi o proprietà astratti. La classe di distinzione fa riferimento a costrutti di linguaggio diversi che possono essere utilizzati per implementare tipi astratti. Le classi astratte possono essere caratterizzate da un problema di progettazione che si mantiene con la migliore programmazione orientata agli oggetti e dalle loro nature non finite.

Un'interfaccia è un tipo astratto che le classi devono implementare per specificare un'interfaccia (genericamente parlando). Le interfacce possono contenere solo firme del metodo e dichiarazioni costanti (sia statiche che definitive), mai definizioni di metodi. Le interfacce simulano più ereditarietà e sono utilizzate per codificare le somiglianze condivise tra vari tipi di classi.

I tipi astratti possono essere creati, significati o simulati in diversi modi. Un programmatore può significare i tipi astratti utilizzando la parola chiave abstract in modo esplicito, includendo uno o più metodi nella definizione della classe, ereditando da un altro tipo astratto senza sovrascrivere le funzionalità mancanti necessarie per completare la definizione della classe, o inviando un metodo particolare all'oggetto orientato linguaggio di programmazione noto come questo che non implementa direttamente il metodo.

Le interfacce possono essere definite usando metodi astratti. Le classi possono anche essere implementate in interfacce. Se una classe implementa un'interfaccia e non implementa tutti i suoi metodi, deve essere usato l'abstract del significante, altrimenti quel significante non è necessario (perché tutte le interfacce sono intrinsecamente astratte). Le classi possono anche implementare più interfacce.

Mentre le interfacce vengono utilizzate per specificare interfacce generiche, i tipi astratti possono essere utilizzati per definire e applicare il protocollo (che è un insieme di operazioni che devono supportare tutti gli oggetti che implementano il protocollo desiderato). I tipi astratti non si verificano nelle lingue senza sottotipizzazione. Poiché tali sottotipi sono costretti a implementare tutte le funzionalità necessarie, garantendo la correttezza dell'esecuzione del programma. Esistono diversi modi in cui possono essere creati tipi astratti: le classi base astratte complete sono classi che sono dichiarate esplicitamente come astratte o contengono metodi astratti (non implementati); I Common Lisp Object Systems includono i mixin basati sul sistema Flavors; Java, ovviamente; e Tratti, che funge da estensione per Smalltalk.

Sommario:
1. Classi astratte (o tipi) dichiarano programmi; le interfacce sono tipi astratti che tutte le classi devono implementare per specificare la loro interfaccia.
2. I tipi astratti possono essere indicati usando la parola chiave esplicitamente; le interfacce sono intrinsecamente astratte, quindi non è necessario che siano significati usando la parola chiave (a meno che una classe specifica non implementi un'interfaccia ma non ne implementi tutti i metodi).