Interfacce nella programmazione Delphi 101

In Delphi, "interfaccia" ha due significati distinti. Nel gergo OOP, puoi pensare a un'interfaccia come a una classe senza implementazione. Nella sezione dell'interfaccia di definizione dell'unità Delphi viene utilizzata per dichiarare qualsiasi sezione pubblica di codice che appare in un'unità. Questo articolo spiegherà le interfacce da una prospettiva OOP.

Se hai intenzione di creare un'applicazione solida in modo che il tuo codice sia mantenibile, riutilizzabile e flessibile, la natura OOP di Delphi ti aiuterà a guidare il primo 70% del tuo percorso. Definire le interfacce e implementarle aiuterà il restante 30%.

Classi astratte

Puoi pensare a un'interfaccia come a una classe astratta con tutta l'implementazione eliminata e tutto ciò che non è pubblico rimosso. Una classe astratta in Delphi è una classe che non può essere istanziata: non è possibile creare un oggetto da una classe contrassegnata come astratta.

Diamo un'occhiata a una dichiarazione di interfaccia di esempio:

genere
IConfigChanged = interfaccia[ '0D57624C-CDDE-458B-A36C-436AE465B477']
procedura ApplyConfigChange;
fine;

Il IConfigChanged è un'interfaccia. Un'interfaccia è definita in modo molto simile a una classe, viene utilizzata la parola chiave "interfaccia" anziché "classe". Il valore Guid che segue la parola chiave dell'interfaccia viene utilizzato dal compilatore per identificare in modo univoco l'interfaccia. Per generare un nuovo valore GUID, basta premere Ctrl + Maiusc + G nell'IDE Delphi. Ogni interfaccia definita richiede un valore Guid univoco.

Un'interfaccia in OOP definisce un'astrazione, un modello per una classe effettiva che implementerà l'interfaccia, che implementerà i metodi definiti dall'interfaccia. Un'interfaccia in realtà non fa nulla, ha solo una firma per l'interazione con altre classi o interfacce (implementanti).

L'implementazione dei metodi (funzioni, procedure e proprietà Get / Set metodi) viene eseguita nella classe che implementa l'interfaccia. Nella definizione dell'interfaccia, non ci sono sezioni di ambito (private, pubbliche, pubblicate, ecc.) Tutto è pubblico. Un tipo di interfaccia può definire funzioni, procedure (che alla fine diventeranno metodi della classe che implementa l'interfaccia) e proprietà. Quando un'interfaccia definisce una proprietà, deve definire i metodi get / set - le interfacce non possono definire le variabili.

Come per le classi, un'interfaccia può ereditare da altre interfacce.

genere
IConfigChangedMore = interfaccia(IConfigChanged)
procedura ApplyMoreChanges;
fine;

Programmazione

Molti sviluppatori Delphi quando pensano alle interfacce pensano alla programmazione COM. Tuttavia, le interfacce sono solo una funzionalità OOP del linguaggio, non sono specificamente legate a COM. Le interfacce possono essere definite e implementate in un'applicazione Delphi senza toccare COM.

Implementazione

Per implementare un'interfaccia è necessario aggiungere il nome dell'interfaccia all'istruzione class, come in:

genere
TMainForm = classe(TForm, IConfigChanged)
pubblico
procedura ApplyConfigChange;
fine;

Nel codice sopra un modulo Delphi chiamato "MainForm" implementa l'interfaccia IConfigChanged.

avvertimento: quando una classe implementa un'interfaccia, deve implementare tutti i suoi metodi e proprietà. Se non si riesce / si dimentica di implementare un metodo (ad esempio: ApplyConfigChange) un errore di compilazione "Identificatore non dichiarato E2003: 'ApplyConfigChange'" si verificherà.
avvertimento: se provi a specificare l'interfaccia senza il valore GUID riceverai: "Il tipo E2086 'IConfigChanged' non è ancora completamente definito".