AspectJ

**AspectJ** — bul PARC tárepinen jaratılǵan, Java programmalastırıw tili ushın aspektke baǵdarlanǵan programmalastırıw (AOP) keńeytpesi. Ol Eclipse Foundation ashıq kodlı proektlerinde jeke hám de Eclipseke integraciyalanǵan túrde qoljetimli. AspectJ aqırǵı paydalanıwshılar ushın ápiwayılılıq hám qolaylılıqqa ayrıqsha itibar beriw arqalı AOP ushın keń tarqalǵan de-fakto standartqa aylandı. Ol Javaǵa uqsas sintaksisti paydalanadı hám óziniń birinshi járiyalanǵan relizinen, 2001-jıldan baslap, kesip ótiwshi strukturanı kórsetiw ushın IDE integraciyaların óz ishine alǵan.

## Tildiń ápiwayı táriypi
Barlıq jaramlı Java programmaları sonday-aq jaramlı AspectJ programmaları da bolıp tabıladı, biraq AspectJ baǵdarlamashılarǵa aspektler dep atalatuǵın arnawlı konstrukciyalardı anıqlawǵa imkaniyat beredi. Aspektler standart klasslar ushın qoljetimsiz bolǵan bir neshe obyektlerdi óz ishine alıwı múmkin. Olar:

; Keńeytpe metodları
: Baǵdarlamashıǵa aspekt ishinen bar bolǵan klasslarǵa metodlar, maydanlar yamasa interfeysler qosıwǵa imkaniyat beredi. Bul mısal Point klassına `acceptVisitor` (vizitor úlgisin qarań) metodın qosadı:

: 
```aspectj
aspect VisitAspect {
    void Point.acceptVisitor(Visitor v) {
        v.visit(this);
    }
}
```


; Kesiw noqatları
: Baǵdarlamashıǵa birlesiw noqatların (programma orınlanıwındaǵı anıq belgilengen waqıtlar, mısalı, metodtı shaqırıw, obyekt jaratıw yamasa ózgeriwshige kiriw) kórsetiwge imkaniyat beredi. Barlıq kesiw noqatları berilgen birlesiw noqatınıń sáykes keletuǵının anıqlaytuǵın ańlatpalar (kvantifikaciyalar) bolıp tabıladı. Mısalı, bul kesiw noqatı atı `set` penen baslanatuǵın `Point` tipindegi obyekttegi hár qanday nusqa metodınıń orınlanıwına sáykes keledi:

: 
```aspectj
pointcut set() : execution(* set*(..) ) && this(Point);
```


; Keńesler
: Baǵdarlamashıǵa kesiw noqatı menen sáykes kelgen qosılıw noqatında orınlanatuǵın kodtı kórsetiwge imkaniyat beredi. Háreketler kórsetilgen qosılıw noqatınan aldın, keyin yamasa átirapında orınlanıwı múmkin. Bul jerde, keńes joqarıda járiyalanǵan kesiw noqatın paydalanıp, Point-te bir nárse ornatılǵan sayın displeydi jańalaydı:

: 
```aspectj
after () : set() {
    Display.update();
}
```


AspectJ sonday-aq kesiw noqatına tiykarlanǵan statikalıq tekseriwlerdiń sheklengen túrlerin hám aspektlerdi qayta paydalanıwdı (miyrasxorlıq arqalı) qollap-quwatlaydı. Tildi anaǵurlım tolıq táriyiplew ushın AspectJ Programmalastırıw Qollanbasın qarań.

## AspectJ sáykesligi hám implementaciyaları
AspectJ kóp usıllar menen, sonıń ishinde derekti toqıw yamasa bayt-kodtı toqıw arqalı hám tikkeley virtual mashinada (VM) ámelge asırılıwı múmkin. Barlıq jaǵdaylarda, AspectJ programması Java VM-inde isleytuǵın durıs Java programmasına aylanadı. Aspektler tásir etken klasslar tásir etilmegen klasslar menen binar-úylesimli (tásir etilmegen originallar menen kompilyaciyalanǵan klasslar menen sáykes qalıw ushın). Bir neshe implementaciyalardı qollap-quwatlaw texnologiya ózgergen sayın tildiń ósiwine imkaniyat beredi, al Java menen sáykes bolıwı platformanıń qoljetimliligin támiyinleydi.

Onıń tabısınıń gilti — tildi qolaylı etetuǵın hám programmalardı ornalastırıwǵa múmkinshilik beretuǵın injenerlik hám til sheshimleri boldı. Dáslepki Xerox AspectJ implementaciyası derekti toqıwdı paydalandı, bul derek kodına kiriwdi talap etti. Xerox kodtı Eclipse-ke usınǵanda, AspectJ Eclipse Java kompilyatorı hám BCEL-ge tiykarlanǵan bayt-kod toqıwshısın paydalanıp qayta ámelge asırıldı, solay etip baǵdarlamashılar ekilik (.class) formasındaǵı kod ushın aspektler jaza alatuǵın boldı. Usı waqıtta AspectJ tili inkremental kompilyaciya hám júklew waqtında toqıw ushın áhmiyetli bolǵan hárbir klass modeli menen sheklendi. Bul IDE integraciyaların Java sıńarlarınday tez juwap beretuǵın etti hám baǵdarlamashılarǵa qurıw processin ózgertpesten aspektlerdi ornalastırıwǵa imkaniyat berdi. Bul, AspectJ sabırsız Java baǵdarlamashıları hám kárxana dárejesindegi ornalastırıwlar ushın qolaylı bolǵanlıqtan, qollanıwshılardıń sanın arttırdı. Sonnan berli Eclipse toparı ónimdarlıqtı hám durıslıqtı arttırdı, AspectJ tilin generics hám annotaciyalar sıyaqlı Java 5 til ózgesheliklerin qollap-quwatlaytuǵın etip jańaladı hám AspectWerkz-ten annotaciya stilindegi taza-java aspektlerin integraciyaladı.

Eclipse joybarı komanda qatarı hám Ant interfeyslerin de qollap-quwatlaydı. Baylanıslı Eclipse proekti AspectJ ushın Eclipse IDE qollap-quwatlawın (AspectJ Development Tools (AJDT) dep ataladı) hám basqa kesiwshi struktura támiyinlewshilerin turaqlı túrde jaqsıladı. Xerox olardı ashıq kodqa shıǵarǵanda, emacs, NetBeans hám JBuilder ushın IDE qollap-quwatlawı toqtap qaldı, biraq Oracle JDeveloper ushın qollap-quwatlaw payda boldı. IDE qollap-quwatlawı AspectJ paydalanatuǵın Java baǵdarlamashıları hám kesiwshi máselelerdi túsinip alıwı ushın tiykarǵı áhmiyetke iye boldı.

BEA aspektke baǵdarlanǵan keńeytpeler ushın sheklengen VM qollap-quwatlawın usındı, biraq barlıq Java VM-lerinde qollap-quwatlanatuǵın keńeytpeler ushın Sunnıń Java Community Process arqalı kelisimge keliw kerek boladı (Java SE 5-ten baslap qoljetimli java.lang.instrument paketin de qarań — bul JVM júklew waqtındaǵı instrumentaciyası ushın ulıwma tiykar).

Aspektke baǵdarlanǵan tillerdiń semantikası hám implementaciyasına akademiyalıq qızıǵıwshılıq AspectJ shıqqannan berli onıń dógereginde boldı. AspectJ-diń jetekshi izertlew implementaciyası — bul AspectBench Compiler yamasa abc; ol tildiń sintaksisi hám semantikasın ózgertiw ushın keńeytpelerdi qollap-quwatlaydı hám AspectJ toparınıń keń paydalanıwshılar bazasına baylanıslı endi qollap-quwatlay almaytuǵın kóplegen AOP tájiriybeleri ushın tiykar bolıp tabıladı.

Kóplegen baǵdarlamashılar AspectJ-di basqa proektler, ásirese Spring AOP ushın múmkinshilik beretuǵın texnologiya retinde tabadı. Sıńar Spring proekti, Spring Roo, óziniń tiykarǵı kod generaciyası shıǵıwı retinde AspectJ túrler aralıq járiyalanıwların avtomat túrde saqlaydı.

## Tariyxı hám úles qosıwshılar
Gregor Kiczales aqıbetinde AspectJ-di islep shıqqan Xerox PARC toparın basladı hám basqardı. Ol «kesiwshi» terminin oylap taptı. Toparda tórtinshi bolǵan Kris Maeda «aspektke baǵdarlanǵan programmalastırıw» terminin oylap taptı. Djim Hugunin hám Erik Hilsdeyl (Xerox PARC toparınıń 12 hám 13-aǵzaları) dáslepki kompilyator hám toqıwshı injenerleri boldı, Mik Kersten IDE integraciyasın ámelge asırdı hám Adrian Kolyer hám Endryu Klement penen birge Eclipse AJDT proektin basladı. Adrian Kolyerdan keyin, Endryu Klement proekt jetekshisi hám AspectJ-diń tiykarǵı úles qosıwshısı boldı. AJDT sonnan berli bólek proekt retinde toqtatılıp, qollap-quwatlawdı ańsatlastırıw ushın Eclipse AspectJ ulıwma proektine ótkizildi. Degen menen, AspectJ da, AJDT da ele de bólek derek repozitoriyalarında saqlanadı.

2021-jılı Aleksandr Krigish joybarǵa qosıldı, dáslep úles qosıwshı, keyin kommiter hám qollap-quwatlawshı retinde. 2021-jıl mart ayınan baslap, ol tiykarınan jalǵız qollap-quwatlawshı bolıp tabıladı. 2024-jıldan baslap, ol sonıń menen birge AspectJ hám AJDT proektleriniń rásmiy jetekshisi.

AspectBench Compiler Oksford universiteti Esaplaw Laboratoriyasınıń Programmalastırıw Quralları Toparı, McGill universitetiniń Sable Izertlew Toparı hám Kompyuter Ilimindegi Tiykarǵı Izertlewler Instituti (BRICS) tárepinen birgelikte islep shıǵılǵan hám qollap-quwatlanadı.

### AspectWerkz
AspectWerkz Java ushın dinamikalıq, jeńil hám joqarı ónimli AOP/AOSD freymvorkı edi. Ol AspectJ proektine biriktirilgen, bul proekt AspectJ 5-ten baslap AspectWerkz funkcional imkaniyatların qollap-quwatlaydı.

Yonas Boner hám Aleks Vasseur AspectWerkz proektin injenerlik etti hám keyinirek AspectJ proektine, ol AspectWerkz annotaciya stilin hám júklew waqtında toqıwdı qollap-quwatlawdı biriktirgende úles qostı.

5-versiyasınan aldınǵı AspectJ-den ayırmashılıǵı, AspectWerkz Javaǵa hesh qanday jańa til konstrukciyaların qospadı, kerisinshe Java annotaciyaları ishinde aspektlerdi járiyalawdı qollap-quwatladı. Ol proektti qurıw waqtında, klasstı júklew waqtında, sonday-aq orınlanıw waqtında klasslardı toqıw ushın bayt-kod modifikaciyasın paydalanadı. Ol standartlastırılǵan JVM dárejesindegi API-lerdi paydalanadı. Aspektler Java annotaciyaları (Java 5 penen kirgizilgen), Java 1.3/1.4 arnawlı doclet yamasa ápiwayı XML anıqlama faylı arqalı anıqlanıwı múmkin.

AspectWerkz proksiler ushın tap sol aspektlerdi paydalanıw ushın API usınadı, solay-etip proksiler menen tanıs paydalanıwshılar ushın tegis ótiwdi támiyinleydi.

AspectWerkz biypul programmalıq támiynat. LGPL stilindegi licenziya AspectWerkz 2.0-ni kommerciyalıq hám ashıq kodlı proektlerde de paydalanıwǵa imkaniyat beredi.

## Derekler

__BÖLİDİMÖNDEMEW__