Аспекттік бағдарламалауда нүктелер кесу және оның мәні
Pointcut
Аспекттік бағдарламалауда pointcut – қосылу нүктелері жиыны. Кеңес қолданылатын жерді анықтайды, бизнес-логиканы модулдендіреді. Java, Perl үшін қолдау бар.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Аспектке бағытталған бағдарламалауда, нүктелі кесу – бірігу нүктелерінің жиынтығы. Нүктелі кесу кеңестерді нақты қай жерде қолдану керектігін көрсетеді, бұл мәселелерді бөлуге және бизнес-логиканы модулдеуге көмектеседі. Нүктелі кесулер көбінесе сыныптардың немесе әдістердің аттарын пайдаланып, кейде сыныптың немесе әдістің атына сәйкес келетін реттегіш өрнектер арқылы анықталады. Әртүрлі фреймворктер әртүрлі нүктелі кесу өрнектерін қолдайды; AspectJ синтаксисі – де-факто стандарт саналады. Нүктелі кесуді қолдайтын Java, Perl, Ruby және тағы да көптеген бағдарламалау тілдері үшін фреймворктер бар.
In aspect oriented programming, a pointcut is a set of join points. Pointcut specifies where exactly to apply advice, which allows separation of concerns and helps in modularizing business logic. Pointcuts are often specified using class names or method names, in some cases using regular expressions that match class or method name. Different frameworks support different Pointcut expressions; AspectJ syntax is considered as de facto standard. Frameworks are available for various programming languages like Java, Perl, Ruby, and many more which support pointcut.
Өмірбаян
Түрлі бағдарламалау тілдеріндегі шектеулерге байланысты, жалпыға ортақ мәселе модульденбеген. Жалпыға ортақ мәселе дегеніміз – логикалық жағынан бір модульге жататын, бірақ тұтас жүйеге әсер ететін бағдарламалық құралдың бөліктері, мысалы, қауіпсіздік немесе журналдау. Аспектке бағытталған бағдарламалау, бағдарламашыларға белгілі бір жерде орындалатын кодты қамтитын "аспект" деп аталатын модульдерді жазуға мүмкіндік беру арқылы осы жалпыға ортақ мәселелерді шешуге тырысады. Белгілі бір жерді анықтау үшін қажетті өрнектер "Pointcut өрнектерінің" пайда болуына әкелді.
Due to limitations in various programming languages, cross cutting concern has not modularized. Cross cutting concern refers to parts of software that logically belong to one module and affect the whole system: this could be security or logging, for example. Aspect oriented programming tries to solve these cross cutting concerns by allowing programmers to write modules called aspects, which contain pieces of code executed at particular point. The expressions required to select a particular point led to creation of Pointcut Expressions.
Атқару
Бағдарлама орындалуы нүктелі кесуде сипатталған бірігу нүктелерінің біріне жеткен кезде, нүктелі кесумен байланысты кодтың бір бөлігі (кеңес деп аталады) орындалады. Бұл бағдарламашыға қалыптан тыс мінез-құлыққа қосымша кодты қайда және қашан орындау керектігін анықтауға мүмкіндік береді. Нүктелі кесулер қолданыстағы бағдарламалық жасақтамаға аспектілерді қосуға, сондай-ақ мәселелерді анық бөліп, бағдарламалық жасақтаманы жобалауға мүмкіндік береді, онда бағдарламашы әртүрлі аспектілерді біртұтас қолданбаға енгізеді.
Whenever the program execution reaches one of the join points described in the pointcut, a piece of code associated with the pointcut (called advice) is executed. This allows a programmer to describe where and when additional code should be executed in addition to already defined behavior. Pointcut permits the addition of aspects to existing software, as well as the design of software with a clear separation of concerns, wherein the programmer weaves (merges) different aspects into a complete application.
Мысал
Деректер қорындағы жазбаларды өзгерте алатын қолданба бар делік. Пайдаланушылар деректер қорын өзгертетін кезде, жазбаларды кім өзгертіп жатқаны туралы ақпаратты тіркегіміз келеді. Деректерді журналға жазудың дәстүрлі жолы – деректер қорын өзгертуден бірден бұрын журналдау әдісін шақыру. Аспектке бағытталған бағдарламалау арқылы біз «Деректер қорын өзгерту» әдісіне нүктелік кесім қолданып, қажетті ақпаратты тіркеу үшін шақырылатын кеңес ала аламыз.
Suppose there is an application where we can modify records in a database. Whenever users modify the database, we want to have a log of information regarding who is modifying the records. The traditional way to log is to call a log method just before modifying the database. With aspect oriented programming, we can apply pointcut to the Modify Database method and have an advice that is called to log the required information.
Сындар
Тоқтап кесу тілдері бағдарламалық жасақтаманың эволюцияға қабілеттілігі және түсініктілігі сияқты маңызды қасиеттеріне кері әсер етеді. Дұрыс аспектіні анықтау үшін кодты қайта құру қажет болуы мүмкін, бірақ бұл жалпы жағдайда болмауы керек, себебі қайта құру – кодты жақсарту үшін жасалады. Егер бір кодқа бірнеше аспект қолданылуы керек болса және әр аспектке жеке қайта құру талап етілсе, мұндай жағдайда масштабтау қиынға соғады. Жалпы алғанда, әрбір аспект бағдарлама құрылымымен тығыз байланысты болады, өйткені тоқтап кесулер әдістің қолтаңбасын нақты көрсетеді, сондықтан бағдарлама өзгерген кезде тоқтап кесуді де өзгерту қажет. Бұл әзірлеуші үшін үлкен қиындық тудыруы мүмкін.
Pointcut languages impact important software properties like evolvability and comprehensibility in a negative way. There might be a possibility where there is a need to perform refactoring to define a correct aspect, which in general should not happen since refactoring is to make code cleaner. It is also not scalable when there are multiple aspects to be applied on the same code and each aspect requires a different refactoring. In general every aspect will be tightly coupled with an application's structure as the pointcuts explicitly contain a method's signature, so when an application changes the pointcut needs to be changed as well. This can be quite problematic for a developer.