Aspektke baǵdarlanǵan programmalastırıw
Esaplaw texnikasında, aspektke baǵdarlanǵan programmalastırıw (AOP) — bul kesip ótiwshi máselelerdi ajıratıwǵa imkaniyat beriw arqalı modullikti arttırıwǵa umtılatuǵın programmalastırıw paradigması. Ol bunı kodtı ózgertpesten, bar kodqa minez-qulıq (keńes) qosıw arqalı ámelge asıradı, onıń ornına qaysı kodtıń ózgertiletuǵının bólek, «kesiw noqatı» specifikaciyası arqalı kórsetedi, mısalı, «funkciya atı 'set' penen baslanǵanda, barlıq funkciya shaqırıwların jazıp al». Bul biznes logikası ushın oraylıq bolmaǵan minez-qulıqlardı (mısalı, jurnalǵa jazıw) tiykarǵı funkciyalar kodın shatastırmay, programmaǵa qosıwǵa imkaniyat beredi.
AOP derek kodı dárejesinde máselelerdiń modullestiriliwin qollap-quwatlaytuǵın programmalastırıw usılların hám quralların óz ishine aladı, al aspektke baǵdarlanǵan programmalıq támiynattı islep shıǵıw — bul pútin bir injenerlik tártibi.
Aspektke baǵdarlanǵan programmalastırıw programma logikasın bir pútin funkcional tarawlarǵa (máseleler dep ataladı) bóliwdi talap etedi. Derlik barlıq programmalastırıw paradigmaları máselelerdi bólek, ǵárezsiz birliklerge gruppalaw hám inkapsulyaciyalawdıń belgili bir dárejesin qollap-quwatlaydı, bunı usı máselelerdi ámelge asırıw, abstraktlastırıw hám biriktiriw ushın paydalanıwǵa bolatuǵın abstrakciyalardı (mısalı, funkciyalar, proceduralar, moduller, klasslar, metodlar) usınıw arqalı ámelge asıradı. Geypara máseleler programmanıń bir neshe abstrakciyaların «kesip ótedi» hám bul implementaciya túrlerine sáykes kelmeydi. Bul máseleler kesiwshi máseleler yamasa gorizontal máseleler dep ataladı.
Jurnalǵa jazıw kesiwshi máseleniń mısalı bolıp tabıladı, sebebi jurnalǵa jazıw strategiyası sistemanıń jurnalǵa jazılatuǵın hárbir bólimine tásir etiwi kerek. Sonlıqtan jurnalǵa jazıw barlıq jurnalǵa jazılatuǵın klasslar hám metodlardı kesip ótedi.
Barlıq AOP implementaciyalarında hárbir máseleni bir orında inkapsulyaciyalaytuǵın ayırım kesiwshi ańlatpalar bar. Implementaciyalar arasındaǵı ayırmashılıq usınılǵan konstrukciyalardıń kúshi, qáwipsizligi hám qolaylılıǵında. Mısalı, kesiwshi máselelerdiń sheklengen túrin ańlatıw ushın metodlardı kórsetetuǵın uslap alıwshılar, tip qáwipsizligi yamasa sazlaw ushın kóp qollap-quwatlawsız. AspectJ-de bir neshe bunday ańlatpalar bar hám olardı aspekt dep atalǵan arnawlı klassqa inkapsulyaciyalaydı. Mısalı, aspekt kesiw noqatı (belgili bir qosılıw noqatınıń sáykes keletuǵının anıqlaytuǵın) dep atalǵan kvantifikaciya yamasa sorawda kórsetilgen hár túrli qosılıw noqatlarında (programmadaǵı noqatlar) keńes (qosımsha háreket) qollanıw arqalı tiykarǵı kodtıń (programmanıń aspekt emes bólimi) háreketin ózgerte aladı. Aspekt sonday-aq basqa klasslarǵa aǵzalar yamasa ata-analar qosıw sıyaqlı ekilik sáykes keletuǵın strukturalıq ózgerisler de kirgize aladı.
Tariyxı
AOP bir neshe tikkeley aldınǵıǵa iye: refleksiya hám metaobyekt protokolları, subyektke baǵdarlanǵan programmalastırıw, Kompoziciya Filtrleri hám Adaptiv Programmalastırıw[1].
Gregor Kiczales hám onıń Xerox PARC-daǵı kásiplesleri AOP-niń anıq koncepciyasın islep shıqtı hám bunnan keyin Javaǵa AspectJ AOP keńeytpesin jarattı. IBM izertlew toparı til dizaynı usılı ornına qural usılın qabıl etti hám 2001-jılı Hyper/J hám Másele Manipulyaciyası Ortalıǵın usındı, olar keń tarqalmadı.
Usı maqaladaǵı mısallar AspectJ-di qollanadı.
Microsoft Transaction Server Enterprise JavaBeans-ten keyin AOP-niń birinshi iri qollanılıwı dep esaplanadı[2][3].
Motivaciya hám tiykarǵı koncepciyalar
Ádette, aspekt kod retinde shashırańqı yamasa aralasıp ketken boladı, bul onı túsinip alıwdı hám qollap-quwatlawdı qıyınlastıradı. Ol funkciya (mısalı, jazıp barıw) onıń funkciyasın paydalanıwı múmkin bolǵan bir qatar baylanıssız funkciyalar boyınsha tarqalǵanlıǵı sebepli shashırańqı boladı, múmkin tolıǵı menen baylanıssız sistemalarda yamasa hár túrli tillerde jazılǵan. Solay etip, jurnalǵa jazıwdı ózgertiw barlıq tásir etilgen modullerdi ózgertiwdi talap etiwi múmkin. Aspektler tek olar ańlatılǵan sistemalardıń tiykarǵı funkciyası menen ǵana emes, al bir-biri menen de aralasıp ketedi. Bir máseleni ózgertiw sonlıqtan barlıq aralasqan máselelerdi túsinip alıwdı yamasa ózgerislerdiń tásirin shıǵarıp alıwǵa bolatuǵın qanday da bir qurallarǵa iye bolıwdı talap etedi.
Mısalı, bir esaptan ekinshisine aqsha ótkiziw ushın konceptual jaqtan júdá ápiwayı metodı bar bank qosımshasın qarastırayıq. Java tilindegi bunday mısal tómendegishe kórinedi:
sealed class BankingException
extends Exception
permits InsufficientFundsException, UnauthorisedUserException {
// ...
}
public class Bank {
public void transfer(Account fromAcc, Account toAcc, int amount) throws BankingException {
if (fromAcc.getBalance() < amount) {
throw new InsufficientFundsException();
}
fromAcc.withdraw(amount);
toAcc.deposit(amount);
}
}
Degen menen, bul ótkeriw metodı ornalastırılǵan qosımsha talap etetuǵın ayırım esaplawlardı itibarǵa almaydı, mısalı, aǵımdaǵı paydalanıwshınıń bul operaciyanı orınlawǵa huqıqı bar ekenin tekseriw, tosınarlı maǵlıwmat joytıwınıń aldın alıw ushın maǵlıwmatlar bazası tranzakciyaların inkapsulyaciyalaw hám diagnostika maqsetinde operaciyanı jurnalǵa jazıw.
Derekler
- ↑ "Adaptive Object Oriented Programming: The Demeter Approach with Propagation Patterns" Karl Liebherr 1996 presents a well-worked version of essentially the same thing (Lieberherr subsequently recognized this and reframed his approach).
- ↑ ; Chris SellsEssential.NET: The common language runtime. Addison-Wesley Professional, 4 November 2002 — 206 bet. ISBN 978-0-201-73411-9.
- ↑ ; SriganeshMastering Enterprise JavaBeans. John Wiley and Sons, 1 January 2005 — 285 bet. ISBN 978-0-7645-8492-3.