Și nu-mi pasă de Java pentru distracție, care este dependenta de injectare, inversare de control și de ce a luat naștere

Clasa X depinde de clasa Y, în cazul în care una dintre următoarele condiții:
* X are-un Y și o numește
* X este Y
* X depinde de unele Z clasă, care depinde de Y (principiul tranzitivității)







X depinde de Y nu înseamnă că Y depinde de X. Dacă există ambele funcții, aceasta se numește o dependență ciclică: X nu poate fi utilizat fără Y, și vice-versa. Existența unui număr mare de dependențe circulare într-un program orientat-obiect poate fi un indicator nu construcția de software optime.

Dacă x (clasa X) numește metode ale unui y obiect obiect (clasa Y), atunci X depinde de Y. Dependența poate fi inversată prin introducerea unei a treia clasă, și anume o clasă de interfață I, care trebuie să conțină toate metodele care x poate cauza y. În plus, Y trebuie să pună în aplicare interfața I. X și Y sunt acum depind de nivelul I și clasa X nu mai depinde de clasa Y; se presupune că X nu implementează Y.

Această excepție în funcție de clasa X pe Y, prin introducerea unei interfete I se spune Inversarea de control (sau Dependență Injection).

Trebuie remarcat faptul că Y s-ar putea depinde de alte clase. Înainte de schimbarea depinde de Y X, deci X dependentă în mod indirect pe toate clasele de care depind de Y. Aplicarea Inversarea de control actuatoare toate acestea dependență indirectă au fost rupte - nu numai dependența de X pe Y. Noua interfață am nimic independent.
Lucru este clar că este întuneric. Înțeleg personal ce este scris aici, dar încă mai trebuie să tulpina. Și ce ar fi bunica mea să intre în toate astea?

Am crezut întotdeauna (și cred) că este necesar să se înceapă cu istoria ceva. Numai după ce trece tot drumul de evoluție, putem înțelege în mod clar de ce a fost inventat acest instrument și este așa și nu altfel. Atunci când re-inventa roata, a înțelege mai bine de ce se învârte.

Deci pornim de la început. Și la început a existat un limbaj de programare procedural. Proceduri scrise pentru un procesor (dliiiinnye astfel de proceduri). O subrutină (alte proceduri) apar ca rezultat necesitatea de a utiliza un deja scris o bucată de cod în altă parte (de obicei, din cauza lene). Dar acest lucru este de puțin interes pentru noi - am vrut doar să-și amintească un moment în care codul a fost puternic legat.

Și nu-mi pasă de Java pentru distracție, care este dependenta de injectare, inversare de control și de ce a luat naștere


Puțin mai târziu, am venit cu limbaj de programare orientat-obiect cu încapsularea decât impactul zdorovski asupra acestui „conexitate puternic“ foarte (în direcția de slăbire, desigur). Acum, cuvinte protsedurschika cod integrat în unele din magazia de cod (clasele), împreună unite printr-un singur principiu - „împreună, folosind date - locuiesc împreună (în clasă),“ și doar o mică parte a acestor proceduri (și metodele corecte pentru metodele de prelucrare a datelor ) este vizibil pentru lumea exterioară - au devenit cunoscute în mod public. Toate celelalte metode utilizate în clasă, dar nu este vizibil din exterior - privat. Acum programator decide care codul clasei pot fi refolosite în alte clase (metode publice), și ceea ce nu este (practici private).

Și nu-mi pasă de Java pentru distracție, care este dependenta de injectare, inversare de control și de ce a luat naștere

Acesta ar trebui să introducă un nou concept al interfeței - ca set de metode publice ale unei clase, și, ca urmare a reutilizării codului prin interfața clasei - dependența de clase. Acum, codul este legat puternic sau nu, au ajuns să se definească în principal pe gradul de clase de dependență.






Și nu-mi pasă de Java pentru distracție, care este dependenta de injectare, inversare de control și de ce a luat naștere

Ei bine, atunci când fețe-conexiune, dar sunt momente în care comunicarea este în ambele sensuri. Apple a știe despre viermele și viermele știu despre un măr, și împreună au cu toții despre mine, pentru a aduna o mușcătură acest măr. Complicat. În primul rând a scăpa de două sensuri dependența față de o singură față. Așa că Kushan de mere vierme fără să o știe, și le-am mâncat amândoi, fără a cere permisiunea lor.

Și nu-mi pasă de Java pentru distracție, care este dependenta de injectare, inversare de control și de ce a luat naștere


Cu toate acestea, rezolvarea tuturor programator comunicării bilaterale încă ajuns la concluzia că o singură cale de comunicare și poate fi, de asemenea, nedorite, în special între un număr finit de clase există unele abstracție similară (prezența unor grupuri identice de metode de prelucrare a datelor - adică părți interfață comune).

Aici este necesar să se introducă conceptul de interfață și implementare. Baterie - interfață. Și punerea sa în aplicare pot fi diferite: alcaline, 777, NiMH, Li-ion, U235, sau altceva. Parametrii pe care pretind că acest obiect - „baterie“ este metoda de înălțimea obiectului, forma cilindrica, tensiunea curentului ellektrichesogo la poli. având doi poli, dintre care unul umflaturi. Expresia „este bateria“ (sau mai corect, acest obiect se comportă ca un acumulator), în OEP ar trebui să fie înțeles ca obiect implementează „baterie“ interfață.

Și nu-mi pasă de Java pentru distracție, care este dependenta de injectare, inversare de control și de ce a luat naștere

Și nu-mi pasă de Java pentru distracție, care este dependenta de injectare, inversare de control și de ce a luat naștere

Deoarece lipsește relația dintre special, punerea în aplicare și codul de client pe care-l folosește. in topuri este de multe ori pictate după cum urmează:
Acesta a fost:

Și nu-mi pasă de Java pentru distracție, care este dependenta de injectare, inversare de control și de ce a luat naștere

Și mai multe implementări diferite într-un fel

Și nu-mi pasă de Java pentru distracție, care este dependenta de injectare, inversare de control și de ce a luat naștere

Acum, totul depinde de interfață. Această abordare la introducerea modificărilor în interfața de dependență numit Inversarea de control. În această abordare, interfața trebuie să fie înțeleasă ca un contract cu o descriere a modului în care să se comporte ca un singur obiect, dacă el vrea să fie utilizat de alta.

Dar acest lucru nu este atât de simplu. Ei bine, dacă putem înlocui complet client din clasa toate locurile în care clasa de realizare menționată pe interfața sa. Dar pot rămâne cel puțin un loc în care toate la fel se va face referire la o clasă de realizare. Acesta este locul în care este creată implementarea clasei. Se va arata ceva de genul:

Baterie AlkalaynovayaBatareyka = new ();


Dependența este acum determinată de aceasta linie si o putem face într-o metodă separată (fabrica unică)

FabrikaBatareek publice clasa finală

baterie poluchitBatareyku publică statică (de tip TipBatareyki)

Ei bine, probabil, pentru că eu sunt în subiect și textul este scris, „Ce este Dependență de injecție?“. În principiu, puteți captura în continuare întrebarea „cum se utilizează Dependență de injecție“ sau „injectare Dependență este un simplu,“ este probabil ca injectia fraza Dependență mă duc un pic mai mare :) Dar lucrul cel mai important este să nu exagerați, pentru că Google nu este prost și se poate vedea că fac așa-numitul optimizare gri și pur și simplu interzise. Dacă nu ați observat.

În general, apariția acestui post, mai degrabă o consecință a formării dumneavoastră, mai degrabă decât o coincidență. Deci, vă mulțumesc Max!

Articol bun. taie doar la locul cel mai interesant :(

Deci vreodată. Nimic, timpul va veni și voi adăuga.

Dacă ne interesează altceva, scrie ceea ce - mi mai motivați pentru a descrie ceea ce este deja în urma administrării unui post va beneficia.

Eh. Locul cel mai interesant sa oprit.
Dacă aveți în continuarea blog-ul prin atașarea o referire la ea aici :)
ATP

cititor Atenție

În acest blog am împărtășesc experiența mea. Nu merită nimic încercând descris aici - poate fi dăunătoare pentru tine sau cei din jurul tău. Responsabilitatea pentru utilizarea oricăreia dintre ideile descrise în blog - revine în întregime cu cititorul.

Cum de a găsi un articol pe blog?

Am yuzayu Google pentru aceasta, în care introduc cele două cuvinte „și nu-mi pasă,“ și că o parte din ceea ce am fost în căutarea - este mai rapid. exemplu