Care este esența de interfețe de programare

administrator de sistem Linux

Interfața este de fapt regulile de interacțiune.
Clasa care implementează interfața trebuie să pună în aplicare toate metodele sale.
În interfața vă descrie o metodă de semnături, adică, specificați că moștenitorul de clasă trebuie să fie capabil să facă, dar el va face acest lucru, el decide pentru sine.






Deci, sunteți sigur că, dacă o clasă implementează o interfață specială, toate obiectele din această clasă au un anumit set de metode.
PLO - o lume de abstracțiuni :) Să-l în sine :) Interfețe Yeshe este o abstracție ne permite să se separe descrierea realziatsii.

„Vino cu numele clasei corect“ - astfel încât să nu se poate face „moștenitori“ pentru a pune în aplicare funcționalitate.

Interfețele sunt situate pe clasele de nivel superior, ca să spunem așa. Ei implicit „uni“ clase similare pentru unele trăsătură comună, și sunt obligate (în conformitate cu logica aplicației) pentru a implementa aceste sau alte metode.

P.S: programatorii vor completa și corectate.

„În interfața vă descrie o metodă de semnături, adică, specificați că moștenitorul de clasă trebuie să fie capabil să facă, dar el va face, el decide pentru sine.
Deci, sunteți sigur că, dacă o clasă implementează o interfață specială, toate obiectele din această clasă au un anumit set de metode. "

De ce nu pot face acest lucru în mod direct în sala de clasă? De ce interfață? I și fără ea poate fi sigur că facilitățile vor avea funcționalele care descriu metodele din clasa. De ce am nevoie de cineva (interfață) are de spus ce metode îmi dau seama? Dacă știu că trebuie să descrie jocul (), atunci eu pot face acest lucru chiar în sala de clasă, care nu utilizează interfața. Și așa că am putea face cu toți cei care doresc o piesă de teatru (). Nu este clar ce beneficii specifice?

Uită-te la ea de cealaltă parte.
Ai da pe cineva soluție și lăsați-l să „extindă“. Dar, în scopul de a asigura compatibilitatea pe partea ta, trebuie să fie sigur că totul se va face mai târziu folosind interfața pe care le-ați dat, va avea un set de metode (toate obiectele).
Dacă le descrie în sala de clasă și otnasleduete - este posibil ca metoda de punere în aplicare specifică Danae nu este potrivit pentru obiect. Nu poți reglementa în nici un fel metoda ar trebui să facă. Interfața este doar necesară pentru acest regulament.

Eu spun interfețele sunt necesare nu și pentru cei care sunt „mai jos“, iar pentru cei care sunt „pe partea de sus“.
Acest acord pe de o parte vi se oferă funcționalitatea și interfața, la rândul său, sunteți de acord să pună în aplicare interfața pentru a utiliza această opțiune.

Kosvennnym plus în toate acestea este un comportament previzibil al obiectului. Știind cum se implementează interfața, știi deja ceva despre comportamentul său.







Fără interfață (ca și concept) de neconceput trei dintre cele patru concepte principale ale OOP.

Mai exact, Java interfețe, deoarece sunt necesare entități separate, pentru că nu există nici o moștenire multiplă. În C ++ și multe alte limbi, cu suport pentru moștenire de interfață multiplă ca o entitate separată nu (clasa virtuală pură - un caz special al clasei abstracte de obicei).

Da, acest lucru se face este codul uman poate fi citit. Programul de lumină, care nu este foarte multe linii de cod, nu prea complicat pentru percepția umană, și programe care au mii de linii de cod, are în consecință, este necesar să se împartă în fișiere într-un singur fișier sunt condiții de „ce să fac?“, în timp ce alții „, cum se face „?.

Există principiul modularitate, care spune că programul poate fi împărțit în module sau unități. Blocul conține fișierele antet și fișierele executabile pe care le-am menționat mai devreme.

În cazul în care programul este imens si vei sti despre el dinainte, atunci trebuie să se rupă în prealabil în module. De ce sau de ce nu? Primul motiv este codul de acceptare om, care a fost deja discutată, iar al doilea va fi mult mai ușor de a găsi erori în codul sursă pe care le scrie, și ei vor.

P.S. Chiar și atunci când scrie ceva sau pune întrebări pot fi împărțite în blocuri de text, așa cum am scris, deci este mai ușor percepută decât ceea ce este scris pe movila. nu-i așa?

În primul rând trebuie să înțelegeți imediat că interfața este un caz special al unei clase. Dar, în Java, are un singur cuvânt cheie, dar C ++ este doar o clasă cu nici o implementare. Prin urmare, interfața stabilește un standard pur și simplu pentru a lucra cu o grămadă de diferite implementări.

De exemplu, interfața Iterable spune că clasa implementează interfața sunt elementele și pot fi de peste într-o buclă de asteptare următoarea metodă (). Acest lucru înseamnă că, dacă creați un fel de recipient sau de colectare, puteți implementa Iterable. Nu inventa propriile metode de lucru cu containere. Astfel, există un standard comun - interfață pentru a lucra cu containere.

Și dacă faci un joc, puteți crea o unitate de interfață, stabilind astfel o anumită clase de comportament. De exemplu, unitatea trebuie să aibă în mod necesar atack metoda (), isDead () etc.

Și apoi, în ciclul de a face inspecția tuturor unităților:
buclă (.) if (unit.isDead ())
removeFromMap (unitate);
>

Și, desigur, unitatea poate fi doar o clasă sau o clasă abstractă care implementează Atack și isDead, dar poate fi isDead numai, deoarece acestea ataca fiecare tip de unitate în mod individual și necesită propria implementare. Ie Am ajuns la faptul că interfața este, de asemenea, un caz special de o clasă abstractă.

Ie aici deja intră în vigoare polimorfism, și anume, de fapt, interfețe da polimorfism. Ei bine, în Java, ei, de asemenea, vă permit să facă moștenire multiplă, sau cu alte cuvinte, întrebați clasa câteva proprietăți de comportament, de exemplu, Unitatea poate, de asemenea, Iterable, astfel poate fi dat la unități și echipamente pentru a sorta elementele din ea.

Și, în consecință, în cazul în care unitatea pe care o va avea o clasă sau o clasă abstractă, care a moștenit unitate în Java, pur și simplu nu se poate da, de asemenea, moștenitorul comportament Iterable dacă Iterable va fi, de asemenea, de clasă.

OrcWarrior implementează Unitatea, Iterable - astfel încât să puteți

OrcWarrior extinde Unitatea, Iterable - la fel ca în Java este imposibil, dar este posibil în C ++, și Unitatea Iterable și apoi vor fi întotdeauna declarate ca fiind o clasă.

Din acest motiv, în Java nu este moștenire de bun venit și compoziția. Ie pentru ce de fiecare dată pentru a realiza Unit.isDead, în cazul în care acesta este un standard? Prin urmare, se creează o clasă și spune UnitAI făcut următoarele:

Clasa de OrcWarrior implementează Unitatea, Iterable UnitAI ai;

Interfața Unitate de atac void ();
UnitAI getAI ();
>

Aceasta se numește compoziție, și anume, în OrcWarrior, HumanWarrior te șunt UnitAI, care a fost deja pusă în aplicare isDead, și, astfel, nu este necesar de fiecare dată să-l pună în aplicare același cod. În C ++, acest lucru nu se poate face, există suport pentru moștenire multiplă, dar are dezavantajele sale. Cu toate acestea, deoarece compoziția are un pro / contra.