Sąsajų apibrėžimas ir įgyvendinimas „Delphi“

Į Delfi, „sąsaja“ turi dvi skirtingas reikšmes. Į OOP žargonu, jūs galite galvoti apie sąsają kaip klasę, kurioje nėra įdiegimo. „Delphi“ vieneto apibrėžimo sąsajos skyrius naudojamas deklaruoti bet kokias viešas kodo dalis, atsirandančias vienete. Šis straipsnis paaiškins sąsajas iš OOP perspektyvos.

Jei ketinate sukurti tvirtą programą taip, kad jūsų kodas būtų prižiūrimas, pakartotinai naudojamas ir lankstus, OOP „Delphi“ gamta padės jums nuvažiuoti pirmuosius 70% jūsų maršruto. Apibrėžti sąsajas ir jas įgyvendinti padės likę 30 proc.

Abstrakčios klasės

Galite įsivaizduoti sąsają kaip abstrakčią klasę, kurioje pašalinta visa diegimas ir pašalinta visa, kas nėra vieša. Abstrakčioji klasė Delfi yra klasė, kurios negalima įgyvendinti akimirksniu - negalite sukurti objekto iš klasės, pažymėtos kaip abstrakti.

Pažvelkime į sąsajos deklaracijos pavyzdį:

tipo
IConfigChanged = sąsaja['{0D57624C-CDDE-458B-A36C-436AE465B477}']
procedūra „ApplyConfigChange“;
galas;

IConfigChanged yra sąsaja. Sąsaja apibrėžiama panašiai kaip klasė, vietoj „klasės“ naudojamas raktinis žodis „sąsaja“. „Guid“ reikšmę, kuri seka sąsajos raktiniu žodžiu, kompiliatorius naudoja sąsajai unikaliai identifikuoti. Norėdami sugeneruoti naują GUID reikšmę, tiesiog paspauskite „Ctrl“ + „Shift“ + G „Delphi IDE“. Kiekvienai jūsų apibrėžtai sąsajai reikalinga unikali „Guid“ reikšmė.

instagram viewer

OOP sąsaja apibrėžia abstrakciją - faktinės klasės, kuri įgyvendins sąsają, šabloną, kuris įgyvendins sąsajos apibrėžtus metodus. Sąsaja faktiškai nieko nedaro, ji turi tik parašą sąveikai su kitomis (įgyvendinančiomis) klasėmis ar sąsajomis.

Metodų (funkcijų, procedūrų ir nuosavybės „Get / Set“ metodų) diegimas atliekamas toje klasėje, kurioje įgyvendinama sąsaja. Sąsajos apibrėžime nėra apimties skyrių (privačių, viešų, paskelbtų ir tt), viskas yra vieša. Sąsajos tipas gali apibrėžti funkcijas, procedūras (kurios ilgainiui taps klasės, įgyvendinančios sąsają, metodais) ir savybes. Kai sąsaja apibrėžia savybę, ji turi apibrėžti gavimo / nustatymo metodus - sąsajos negali apibrėžti kintamųjų.

Kaip ir klasės, sąsaja gali paveldėti iš kitų sąsajų.

tipo
IConfigChangedMore = sąsaja(IConfigChanged)
procedūra „ApplyMoreChanges“;
galas;

Programavimas

Daugelis „Delphi“ kūrėjų, galvodami apie sąsajas, galvoja apie COM programavimą. Tačiau sąsajos yra tik opus kalbos bruožas - jos nėra tiesiogiai susietos su COM. Sąsajas galima apibrėžti ir įgyvendinti „Delphi“ programoje, visiškai neliečiant COM.

Įgyvendinimas

Norėdami įdiegti sąsają, prie klasės teiginio turite pridėti sąsajos pavadinimą, kaip nurodyta:

tipo
TMainForm = klasė(„TForm“, „IConfigChanged“)
viešai
procedūra „ApplyConfigChange“;
galas;

Aukščiau pateiktame kode Delphi forma, pavadinta „MainForm“, įgyvendina sąsają „IConfigChanged“.

Įspėjimas: kai klasė įgyvendina sąsają, ji turi įgyvendinti visus savo metodus ir savybes. Jei nepavyksta / pamiršite įdiegti metodą (pavyzdžiui: „ApplyConfigChange“), sudarykite laiko klaidą "E2003 nedeklaruojamas identifikatorius: 'ApplyConfigChange'" įvyks.
Įspėjimas: jei bandysite nurodyti sąsają be GUID vertės, gausite: "E2086 tipas 'IConfigChanged' dar nėra visiškai apibrėžtas".

Pavyzdys

Apsvarstykite MDI programą, kurioje vartotojui vienu metu gali būti rodomos kelios formos. Kai vartotojas keičia programos konfigūraciją, daugumai formų reikia atnaujinti ekraną - rodyti / slėpti kai kuriuos mygtukus, atnaujinti etikečių antraštes ir kt. Jums reikės paprasto būdo, kaip pranešti visoms atidarytoms formoms, kad pasikeitė programos konfigūracija. Ideali darbo priemonė buvo sąsaja.

Kiekviena forma, kurią reikia atnaujinti pakeitus konfigūraciją, įdiegs „IConfigChanged“. Kadangi konfigūracijos ekranas rodomas modališkai, uždarant kitą kodą užtikrinama, kad būtų praneštos visos „IConfigChanged“ diegimo formos ir vadinama „ApplyConfigChange“:

procedūra „DoConfigChange“ ();
var
cnt: sveikasis skaičius;
icc: IConfigChanged;
prasideda
dėl cnt: = 0 į -1 + ekranas. „FormCount“ daryti
prasideda
jei Atramos (Ekranas. Formos [cnt], „IConfigChanged“, ICC) tada
icc. „ApplyConfigChange“;
galas;
galas;

Atramos funkcija (apibrėžta „Sysutils.pas“) nurodo, ar nurodytas objektas ar sąsaja palaiko nurodytą sąsają. Kodas kartojasi per ekraną. Formų rinkinys (objekto „TScreen“) - visos formos, kurios šiuo metu rodomos programoje. Jei forma Ekranas. Formos [cnt] palaiko sąsają, „Supports“ grąžina paskutinio parametro parametro sąsają ir grąžina „true“.

Todėl, jei forma įgyvendina „IConfigChanged“, ICC kintamasis gali būti naudojamas, norint iškviesti sąsajos metodus, kuriuos įgyvendina forma. Žinoma, atminkite, kad kiekviena forma gali būti savo skirtingą „ApplyConfigChange“ procedūros įgyvendinimą.

Protėviai

Bet kuri klasė, kurią apibrėžiate Delfyje, turi turėti protėvį. „TObject“ yra pagrindinis visų objektų ir komponentų protėvis. Aukščiau pateikta idėja taikoma ir sąsajoms, o „IInterface“ yra pagrindinė visų sąsajų klasė. „IInterface“ apibūdina 3 metodus: „QueryInterface“, „_AddRef“ ir „_Release“.

Tai reiškia, kad mūsų „IConfigChanged“ taip pat turi tuos 3 metodus, tačiau mes jų neįgyvendinome. Taip yra todėl, kad „TForm“ paveldi iš „TComponent“, kuris jau įgyvendina „IInterface“ už jus! Kai norite įdiegti sąsają klasėje, kurią paveldi iš „TObject“, įsitikinkite, kad jūsų klasė paveldi iš „TInterfacedObject“. Kadangi „TInterfacedObject“ yra „TObject“, įgyvendinantis „IInterface“. Pavyzdžiui:

TMyClass = klasė(„InteracedObject“, IConfigChanged)
procedūra „ApplyConfigChange“;
galas;

Apibendrinant, IUnknown = IInterface. „IUnknown“ yra skirtas COM.

instagram story viewer