И не ми пука, Java за забавление, която е зависимостта инжекция, инверсия на контрол и защо е възникнал
Х клас зависи от клас Y, ако едно от следните условия:
* X е-а Y и призовава
* X е-а Y
* X зависи от някои клас Z, което зависи Y (принцип преходност) на
X зависи от Y не означава, че Y зависи от X. Ако има двете функции, тя се нарича цикличен зависимост: X не може да се използва без Y, и обратно. Наличието на голям брой кръгли зависимости в обектно-ориентирана програма може да бъде не индикатор оптималната софтуер строителството.
Ако X (от клас X) призовава методи за обект обект Y е (от клас Y), тогава X зависи от Y. Зависимостта може да бъде обърната чрез въвеждане на трети клас, а именно интерфейс клас I, които трябва да съдържа всички методи, които х може да причини у. В допълнение, Y трябва да изпълнява интерфейс I. The X и Y в момента и двамата са зависи от I и клас X вече не зависи от клас Y; се приема, че X не изпълнява Y.
Това изключение зависимост клас X на Y чрез въвеждане на интерфейс I се казва инверсия на контрол (или Зависимост инжекция).
Трябва да се отбележи, че Y може да зависи от други класове. Преди промяната зависи от Y X, така че X непряко зависи от всички класове, които зависят от Y. Прилагане Инверсия на контрол задвижвания всичко това косвено зависимостта бяха разделени - не само зависимостта на X на Y. Новият интерфейс съм на всичко, независима.
Това, което е ясно, че е тъмно. Аз лично се разбере какво е написано тук, но все пак трябва да се прецежда. И това, което ще бъде на баба ми да влезе в всичко това?
Винаги съм вярвал (и вярвам), че е необходимо да се започне с историята на нещо. Само след като се мине през целия път на еволюция, можем ясно да се разбере защо е бил изобретен този инструмент и това е така, а не иначе. Когато се преоткрива колелото, по-добре да разбере защо тя се върти.
Така че ние започнем от самото начало. И в началото е имало процесуална език за програмиране. Процедури, написани за процесор (dliiiinnye такива процедури). Подпрограма (други процедури) се появи в резултат трябва да използвате вече написан част от код на друго място (обикновено поради мързел). Но това е от особен интерес за нас - Просто исках да си спомни времето, когато кодът е силно свързани.
Малко по-късно стигнахме до обектно-ориентиран език за програмиране с капсулиране му от zdorovski въздействие върху този много "силна свързаност" (в посока на отслабване, разбира се). Сега думи protsedurschika код интегрирани в някои от код хранилището (класовете), заедно обединени от един принцип - "заедно с използване на данни - живеят заедно (в класната стая)", а само малка част от тези процедури (и правилните методи за методи за обработка на данни ) е видима за външния свят - те става известен публично. Всички други методи, използвани в клас, но не се вижда отвън - частни. Сега програмистът решава кой код на класа може да се използва повторно в други класове (публични методи), и това, което не е (частни практики).
Трябва да се въведе нова концепция на интерфейса - като на снимачната площадка на публичните методи на класа, както и, в резултат на код повторна употреба чрез интерфейса на класа - зависимостта на класове. Сега кодът е свързана силно или не, са дошли да се определят най-вече от степента на класове зависимост.
Е, когато връзка едностранно, но има моменти, когато комуникацията е двупосочна. Apple знае за червея и червея знаете за една ябълка, и заедно всички те знаят за мен, за да събере една хапка тази ябълка. Сложно. На първо място да се отървете от двупосочна зависимост от към едностранно. Така че Кушанската ябълка червей, без да разберат, и аз ги и двете яде, без да иска разрешение от тях.
Въпреки това, за решаване на всички двустранна комуникация програмист още заключи, че един начин съобщението и може да бъде нежелана, особено между определен брой класове има някакъв подобен абстракция (наличие на идентични групи методи за обработка на данни - т.е. общ интерфейс части).
Тук е необходимо да се въведе понятието интерфейс и изпълнение. Батерия - интерфейс. И нейното изпълнение може да бъде различна: Alkaline, 777, NiMH, Li-йонна, U235, или нещо друго. Параметрите на която твърдят, че този обект - "батерия" е методът на височината на обекта, цилиндрична форма, напрежение ellektrichesogo ток при полюсите. като два полюса, единият от които подутини. Фразата "това е батерията" (или по-точно, този обект се държи като батерия), в ООП трябва да се разбира като обектът изпълнява "батерия" интерфейс.
Тъй като липсва връзката между конкретната реализация и клиент код, който я използва. в класациите често е боядисана, както следва:
Беше ли:
И няколко различни изпълнения по някакъв начин
Сега всичко зависи от интерфейса. Този подход за въвеждането на промени в зависимост интерфейс, наречен инверсия на контрол. При този подход, интерфейсът трябва да се разбира като договор с описание на това как да се държат като един обект, ако иска да бъде използван от друг.
Но това не е толкова просто. Е, ако ние можем напълно да замени в класа на клиента всички места, в които е споменато в класа реализацията на своя интерфейс. Но може да остане поне едно място, където все пак ще бъдат отнесени към клас-реализация. Това е мястото, където се създава изпълнението на класа. Тя ще изглежда по следния начин:
Батерия AlkalaynovayaBatareyka = нов ();
Зависимост сега се определя от тази на един ред и да можем да го направим в отделен метод (и съща фабрика)
обществен окончателен клас FabrikaBatareek
публично статично poluchitBatareyku батерия (тип TipBatareyki)
Е, това е може би защото аз съм в темата и текстът е написан, "Какво е Зависимост инжекция?". По принцип, вие все още може да улови на въпроса "как да се използва зависимостта инжекция" или "Зависимост инжекция е прост", е вероятно, че инжектирането на израза Зависимост отида аз малко по-високо :) Но най-важното е да не се прекалява, защото Google не е глупав и може да се види, че правя така наречените сив оптимизация и просто забранени. Ако не сте забелязали.
В общи линии, появата на този пост, по-скоро следствие от вашето обучение, а не случайно. Така че ви благодаря Макс!
Добра статия. само отрязани най-интересното място :(
Така някога. Нищо, ще дойде време и аз ще добавя.
Ако се интересувате от нещо друго, напишете какво - ми по-мотивирани да се опише това, което е вече след прилагане на пост ще бъде от полза.
Ех. Най-интересното място спря.
Ако имаш в продължаването на блог чрез прикрепване препратка към него тук :)
ATP
Внимание четец
В този блог да споделя моя опит. Не си струва да опитате всичко, което е описано тук - тя може да бъде вредно за вас или на хората около вас. Отговорност за използването на който и да е от идеите, описани в блога - изцяло се носи от читателя.
Как да намерите статия в блога?
Аз yuzayu Google за това, в което съм въведете двете думи "и не ме интересува", както и че част от това, което търсех - това е по-бързо. пример