Interfețe în programarea Delphi 101

În Delphi, „interfața” are două semnificații distincte. În jargonul OOP, puteți gândi o interfață ca o clasă fără implementare. În Delphi, secțiunea de interfață de definire a unității este utilizată pentru a declara orice secțiuni publice de cod care apar într-o unitate. Acest articol va explica interfețele dintr-o perspectivă OOP.

Dacă doriți să creați o aplicație solidă într-un mod în care codul dvs. să poată fi menținut, reutilizabil și flexibil, natura OOP a Delphi vă va ajuta să conduceți primele 70% din traseu. Definirea interfețelor și implementarea acestora va ajuta cu restul de 30%.

Clasele abstracte

Vă puteți gândi la o interfață ca la o clasă abstractă, cu toată implementarea eliminată și tot ceea ce nu este public eliminat. O clasă abstractă din Delphi este o clasă care nu poate fi instantanată - nu puteți crea un obiect dintr-o clasă marcată drept abstract.

Să aruncăm o privire la o declarație de interfață de exemplu:

tip
IConfigChanged = interfață[ '0D57624C-CDDE-458b-A36C-436AE465B477']
procedură ApplyConfigChange;
Sfârșit;

IConfigChanged este o interfață. O interfață este definită la fel ca o clasă, cuvântul cheie „interfață” este folosit în loc de „clasă”. Valoarea Ghid care urmează cuvântul cheie de interfață este utilizată de compilator pentru a identifica în mod unic interfața. Pentru a genera o nouă valoare GUID, trebuie doar să apăsați Ctrl + Shift + G în Delphi IDE. Fiecare interfață pe care o definiți are nevoie de o valoare Ghid unică.

O interfață din OOP definește o abstractizare - un șablon pentru o clasă reală care va implementa interfața - care va implementa metodele definite de interfață. O interfață nu face nimic, ci are o semnătură pentru interacțiunea cu alte clase sau interfețe (de implementare).

Implementarea metodelor (funcții, proceduri și metode Get / Set proprietate) se face în clasa care implementează interfața. În definiția interfeței, nu există secțiuni de aplicare (private, publice, publicate etc.) totul este public. Un tip de interfață poate defini funcții, proceduri (care vor deveni în cele din urmă metode ale clasei care implementează interfața) și proprietăți. Când o interfață definește o proprietate trebuie să definească metodele get / set - interfețele nu pot defini variabile.

Ca și în clase, o interfață poate moșteni de la alte interfețe.

tip
IConfigChangedMore = interfață(IConfigChanged)
procedură ApplyMoreChanges;
Sfârșit;

Programare

Majoritatea dezvoltatorilor Delphi când se gândesc la interfețe se gândesc la programarea COM. Cu toate acestea, interfețele sunt doar o caracteristică OOP a limbajului - nu sunt legate în mod specific de COM. Interfețele pot fi definite și implementate într-o aplicație Delphi fără a atinge COM deloc.

Punerea în aplicare

Pentru a implementa o interfață trebuie să adăugați numele interfeței la instrucțiunea de clasă, ca în:

tip
TMainForm = clasă(TForm, IConfigChanged)
public
procedură ApplyConfigChange;
Sfârșit;

În codul de mai sus, un formular Delphi numit „MainForm” implementează interfața IConfigChanged.

Avertizare: când o clasă implementează o interfață trebuie să implementeze toate metodele și proprietățile sale. Dacă nu reușiți / uitați să implementați o metodă (de exemplu: ApplyConfigChange) o eroare de timp de compilare "Identificator nedeclarat E2003: 'ApplyConfigChange'" o să se întâmple.
Avertizare: dacă încercați să specificați interfața fără valoarea GUID, veți primi: "Tip E2086 'IConfigChanged' nu este încă complet definit".