Când se utilizează interfețe pentru programarea, vr-online - gratuit de e-zine pentru toți

Când se utilizează interfețe pentru programarea, vr-online - gratuit de e-zine pentru toți

Programarea interfetelor - acesta este cazul, atunci când se poate invarti o teorie a modului în care acestea funcționează, dar cititorul va înțelege esența numai atunci când vede rezultatele cu proprii mei ochi, care este în practică. Și de aceea am decis să arăt câteva exemple de unde și cum pot beneficia de interfața.







Dar, mai întâi, încă destul de un pic de teorie și cuvinte. Clasa - o descriere și punerea în aplicare a obiectului. Obiect - o instanță a acestei clase, și anume, obiectul este creat pe baza descrierii, pe care le scrie în clasa.

Clasa poate efectua o acțiune și el poate avea proprietăți - care este tot ceea ce declarați cu cuvântul cheie static (în C ca limbi). Astfel de metode sunt numite fără nici o inițializare suplimentare și există proprietăți într-un singur exemplar.

Obiectele - sunt exemple de clase. Puteți crea două obiecte din aceeași clasă, și ei vor avea același set de caracteristici (metode / proprietăți), numai valorile proprietatilor vor fi diferite. Modificarea valorilor proprietăților unui obiect, nu atingeți celălalt. Proprietățile și metodele de obiecte - care este tot ceea ce nu declara statice.
Dacă știți și să înțeleagă diferența, e foarte bine.

Interface - o descriere a modului de a efectua o acțiune. El nu poate fi proprietățile și el nu poate face nimic singur, dar el face o sarcină foarte importantă - a spus - deoarece este posibil de a provoca anumite acțiuni pentru a obține rezultate. Programarea este adesea menționată ca un protocol. Interfața definește protocolul de comunicare, dar nu o pune în aplicare. Și de ce avem nevoie de un protocol de punere în aplicare fără? Este foarte necesar, și să ne uităm la unele cazuri - când și unde poate veni la îndemână.

Interfețe pentru plug-in-uri

Cel mai simplu exemplu - plug-in. Îmi amintesc, înainte de apariția de interfețe în Delphi am pervertit, iar una dintre aceste perversiuni am arătat în prima carte Delphi ochii de hacker. Ce este un plug-in? Este un obiect care efectuează anumite acțiuni. Programul principal (cod principal) nu le pasa cum se face o acțiune, și poate chiar și pe un tambur care se întâmplă acolo. Sarcina noastră este doar de a oferi o oportunitate de a crea plug-in aplicații, și trebuie să știm cum să rulați un plug-in pentru a rula. Deci, avem nevoie pentru a descrie protocolul ca va comunica unul cu celălalt cod și extinderea plugin. Pentru a descrie această interfață:

Aș vrea să-mi cer scuze pentru eventualele amprente și erori în cod. I-am scris aceasta recenzie de pe iPad în OneNote, care nu are un compilator și verifica pentru erori în C # cod. Aceasta este doar o interfață cu o metodă și o face absolut nimic. El nu are nici o realizare metoda getTest. Aici multe întrebări - și FIG este necesar? Nu este mai bine să declare o clasă abstractă și moștenesc ea? Și nu în grabă, toată distracția înainte. Acum putem declara o clasă care va descrie casa si casa poate pune în aplicare protocolul nostru:







În același mod ca și clase moștenesc din alte clase, ei pot moșteni și interfețe. În acest caz, casa va moșteni interfața. Pentru a corecta o astfel de clasă, acesta trebuie să Bat toate metodele care sunt declarate în raport, și acestea ar trebui să fie deschis, în caz contrar sens zero, de la ei. Acum putem crea interfața de clasă Acasă:

test de IInterface = nou Acasă (); Deoarece casa implementează protocolul nostru, atunci tranzacția este absolut legal. Deși nu beneficii speciale pentru a fi văzut, dar am ajuns la punctul în care razele sale vor începe să facă drum prin întuneric. Faptul că moștenirea dublă este interzisă în C #. Ce se întâmplă dacă pluginul trebuie să moștenească de la unele clasă? Dacă doriți să pună în aplicare de expansiune sub forma unei baze de clasă abstractă, dezvoltatorii care vor scrie extensii, nu vor fi în măsură să declare o clasă care va moșteni clasa, iar clasa de care au nevoie. Va trebui să utilizați denaturare, care nu este în valoare de lumânare. Deci, nu avem nevoie de o clasă abstractă, avem nevoie de numele interfeței. În acest caz, programator poate scrie oricare din clasa ta de a implementa interfața noastră, și totul va funcționa.

Să ne uităm la un cod complet de un posibil exemplu:

În acest exemplu, am creat două clase complet diferite - și o casă de rață. Ele pot fi derivate din orice altă clasă, și poate fi destul de diferite, dar ele sunt încă similare în care pune în aplicare același protocol (interfață), și asta e tot ce avem nevoie. În programul său, putem crea o listă de interfețe:

Listtests = o nouă listă ();

Această listă, care este format din obiecte de orice clasă, dar toate dau seama de interfață de interfață. Apoi am crea o rață, iar casa a fost adăugat din listă și executați o buclă care efectuează metoda getTest.

Lucrul la nivel de interfață, luați un pas privind punerea în aplicare și a obiectelor. Există programatori care iubesc să scrie aproape toate prin interfețe. Aceasta are propria semnificație. Gluma aici este că, dacă aveți nevoie pentru a scrie o clasa, un server FTP, nu puteți crea un obiect în mod direct, și de a folosi interfata:

În acest caz, avem doar o singură metodă la FtpFlient, deci este greu de imaginat un beneficiu, dar imaginați-vă că zeci de metode de clasă. Ce se întâmplă dacă te-ai decis să nu susțină propriul lor cod client FTP, și la partea de dezvoltare? În acest software terță parte pot fi alte metode, iar acest lucru este în cazul în care te afli într-un fund complet, dacă utilizați în mod direct obiectele.

Când utilizați interfețe, trebuie doar să pună în aplicare o clasa care implementeaza IFtpInterface si schimba o linie de inițializare. Toate magic funcționează.

Nu folosesc interfețe peste tot, oriunde, dar încerc să le aplice în cazul în care lucrez cu codul terță parte. Dacă munca Delphi cu baze de date a fost realizată prin interfețe, tranziția de la BDE la ADO.NET sau dbExpress ar fi simplu. Dar, din moment ce acest lucru nu este, aș fi în locul tău, m-am adresat la baza prin intermediul interfețelor. La crearea de interfață descrie metodele din punctul de vedere al clientului. Nu este nevoie să copieze metodele existente deja în ADO.NET, descrie interfața, astfel încât metodele păreau clare clientului.

Interfețe noi și de testare cod de ajutor. Din nou, luați ultimul exemplu în cazul în care avem o metodă principală care efectuează o acțiune, și descarcă fișierul pe server.

- Știm că componenta FtpClient funcționează și pentru a testa la pacientii cu pot fi teste individuale.
- teste de unitate trebuie să fie cât mai simplu posibil, și verificați funcția de ceva, mai degrabă decât doar să fie difuzate.
- Metoda de încercare care descarcă ceva pe server, nu foarte rapid (în funcție de viteza de acces de fișiere FTP și dimensiunea) și disconfort, pentru că după executarea metodei va trebui să fie descărcate de pe FTP și verificați conținutul.

Toate acestea se rezolvă prin utilizarea interfețe.

Deci, noi numim o metodă în realitate:

Și acest lucru este în testele unitare.

boo nu are conceptul unei metode care clasa îl va da și el nu-i pasă. Pentru el, cel mai important lucru ca un parametru pentru a fi trecut o clasă care implementează o interfață cunoscută la o metodă destul de clară și necesară. Cod flexibil și ușor să se adapteze la diferite condiții.

Are fiecare clasă trebuie să scrie o punere în aplicare metoda UploadFile? Același lucru în fiecare clasă va fi o mulțime de aceeași conexiune FTP și transferul de date cod de inițializare.

Codul duplicarea este minim, iar flexibilitatea este mai abruptă decât cea a Alina Kabaeva. Iar atunci când consideră că clasele pot moșteni orice număr de interfețe, putem combina unele dintre funcțiile din aceeași clasă. Acest lucru are nevoie de multe ori să fie făcut în controlerele, iar modelul este mai bine pentru a realiza un obiectiv clar în fiecare clasă.