Кіріспе

AspectJ – Java бағдарламалау тіліне арналған аспекттік бағдарламалау (AOP) кеңейтуі, PARC-те жасалған. Ол Eclipse Foundation ашық бастапқы кодты жобаларында қолжетімді, дербес түрде де, Eclipse-ке интеграцияланған күйде де. AspectJ қарапайымдылық пен соңғы пайдаланушылар үшін қолдануға ыңғайлылығын баса назар аудара отырып, AOP үшін де-факто стандартқа айналды. Ол Java-ға ұқсас синтаксисті қолданады және 2001 жылы алғаш рет жарияланғалы бері көлденең құрылымды көрсетуге арналған IDE интеграцияларын қамтиды.

Қатысушылық және іске асыру

AspectJ көптеген тәсілдермен іске асырылуы мүмкін, оның ішінде бастапқы кодты тоқу, байт-кодты тоқу және тікелей виртуалды машинада (VM). Барлық жағдайларда AspectJ бағдарламасы Java VM-де жұмыс істейтін жарамды Java бағдарламасы болады. Аспекттерге әсер ететін кластар, әсер етпеген кластармен екі жақты үйлесімді болады (әсер етпеген түпнұсқалармен құрастырылған кластармен үйлесімділікті сақтау үшін). Көптеген іске асыруларды қолдау, технология өзгерген сайын тілдің өсуіне мүмкіндік береді, ал Java үйлесімділігі платформаның қолжетімділігін қамтамасыз етеді. Оның табысының кілті – тілді пайдалануға ыңғайлы және бағдарламаларды орнатуға болатын инженерлік және тілдік шешімдер. Xerox AspectJ-дің бастапқы іске асырылуы бастапқы кодқа қол жеткізуді қажет ететін бастапқы тоқуды қолданды. Xerox Eclipse-ке кодты берген кезде AspectJ Eclipse Java компиляторы және BCEL негізіндегі байт-код тоқушысы арқылы қайта іске асырылды, бұл әзірлеушілерге кодты екілік (.class) түрінде аспекттерді жазуға мүмкіндік берді. Сол кезде AspectJ тілі инкременттік компиляция және жүктеу уақытында тоқу үшін қажетті сыныптық модельді қолдаумен шектелген еді. Бұл IDE интеграцияларын Java-дағы әріптестерімен бірдей жылдам әрекет етуге мүмкіндік берді және әзірлеушілерге құрастыру процесін өзгертпей аспекттерді орнатуға рұқсат берді. Бұл AspectJ-ді Java бағдарламалаушылары мен кәсіптік деңгейдегі енгізулер үшін қолдануға болатындықтан, қабылданудың артуына әкелді. Содан бері Eclipse тобы өнімділікті және дұрыстықты арттырды, AspectJ тілін Java 5 тілінің мүмкіндіктері, мысалы, generics және аннотацияларды қолдау үшін жаңартты және AspectWerkz-тен таза Java аспекттерін біріктірді. Eclipse жобасы командалық жол және Ant интерфейстерін қолдайды. Eclipse жобасының бірі AspectJ (AspectJ Development Tools (AJDT)) және басқа да кросс-капсулалық құрылымды қамтамасыз етушілерге арналған Eclipse IDE қолдауын жақсартты. Emacs, NetBeans және JBuilder үшін IDE қолдауы Xerox оларды ашық кодқа енгізген кезде тоқтап қалды, бірақ Oracle-тің JDeveloper-іне қолдау пайда болды. IDE қолдауы AspectJ-ді пайдаланатын және кросс-капсулалық мәселелерді түсінетін Java бағдарламалаушылары үшін маңызды болды. BEA аспектке бағытталған кеңейтулер үшін шектеулі VM қолдауын ұсынды, бірақ барлық Java VM-де қолдау табатын кеңейтулер үшін Sun-ның Java Community Process арқылы келісім қажет (Java SE 5-тен бастап қол жетімді java.lang.instrument пакеті де JVM жүктеу уақытында құралдарды енгізу үшін ортақ негіз болып табылады). AspectJ-дің шығуынан бері аспектке бағытталған тілдердің семантикасы мен іске асырылуына академиялық қызығушылық танытуда. AspectJ-дің жетекші ғылыми-зерттеулік іске асырылуы AspectBench компиляторы немесе abc болып табылады; ол тілдің синтаксисі мен семантикасын өзгертуге мүмкіндік беретін кеңейтулерді қолдайды және AspectJ тобының қазіргі қолдау көрсете алмайтын көптеген AOP эксперименттерінің негізін құрайды, оның кең пайдаланушы базасын ескере отырып. Көптеген бағдарламашылар AspectJ-ді басқа жобалар үшін мүмкіндік беретін технология ретінде табады, ең танымал Spring AOP. Spring Roo деген туысқан жоба AspectJ интертиптік декларацияларын негізгі кодты генерациялаудың нәтижесі ретінде автоматты түрде сақтайды.

Тарих және еңбектері

Грегор Кицалес Xerox PARC командасын бастады және басқарды, нәтижесінде AspectJ әзірленді. Ол "қиылысқандық" (crosscutting) терминін енгізді. Командадағы төртінші адам Крис Меда "аспектіге бағытталған бағдарламалау" (aspect oriented programming) терминін енгізді. Джим Хугунин мен Эрик Хилсдейл (Xerox PARC командасының 12 және 13 мүшелері) бастапқы компилятор және тоқу (weaving) инженерлері болды, ал Мик Керстен IDE интеграциясын іске асырып, Адриан Кольер мен Эндрю Клементпен бірге Eclipse AJDT жобасын бастады. Адриан Кольерден кейін Эндрю Клемент AspectJ жобасының жетекшісі және негізгі үлескері болды. AJDT кейіннен жеке жоба ретінде тоқтатылып, техникалық қызмет көрсетуді оңайлату үшін Eclipse AspectJ шатыр жобасына біріктірілді. Дегенмен, AspectJ және AJDT әлі де бөлек код сақтағыштарында (source repositories) қолдауға алынуда. 2021 жылы Александр Кригиш жобаға қосылды, алдымен үлескер ретінде, содан кейін коммиттер және ұстаушы ретінде. 2021 жылдың наурыз айынан бері ол негізінен жалғыз ұстаушы болып табылады. 2024 жылдан бастап ол AspectJ және AJDT жобаларының ресми жетекшісі болып табылады. AspectBench компиляторы Оксфорд университетінің Есептеу зертханасындағы Бағдарламалау құралдары тобы, Макгилл университетінің Sable зерттеу тобы және Компьютерлік ғылымдағы негізгі зерттеулер институты (BRICS) арасындағы бірлескен жұмыс нәтижесінде әзірленді және қолдауға алынуда.

AspectWerkz-тің атауы

AspectWerkz – Java үшін динамикалық, жеңіл және жоғары өнімді AOP/AOSD фреймворкі болды. AspectJ 5 нұсқасынан бастап AspectWerkz функционалдығын қолдайтын AspectJ жобасымен біріктірілді. Джонас Бонер мен Алекс Вассер AspectWerkz жобасын жасады, ал кейін AspectWerkz аннотация стилін және жүктеу кезінде тоқу мүмкіндігін қосылғанда AspectJ жобасына үлес қосты. AspectJ-дің 5 нұсқасына дейінгі нұсқаларынан айырмашылығы, AspectWerkz Java тіліне жаңа синтаксистік құрылымдарды қоспады, бірақ Java аннотациялары арқылы аспектілерді жариялауды қолдады. Ол жоба құрылымының, сыныпты жүктеудің және орындалу уақытында сыныптарды тоқу үшін байт-кодын өзгертуді пайдаланады. Стандартталған аспектілерді Java 5 нұсқасымен енгізілген Java аннотацияларын, Java 1.3/1.4 үшін арнайы doclet немесе қарапайым XML анықтама файлы арқылы анықтауға болады. AspectWerkz проксилер үшін де сол аспектілерді пайдалануға мүмкіндік беретін API ұсынады, бұл проксилермен таныс пайдаланушыларға оңай көшуге мүмкіндік беретін түсінікті тәжірибе ұсынады. AspectWerkz – ақысыз бағдарламалық қамтамасыз ету. LGPL лицензиясы AspectWerkz 2.0-ны коммерциялық және ашық кодты жобаларда пайдалануға рұқсат береді.