Этот раздел кратко познакомит Вас с основными возможностями AspectJ, которые встретятся далее в этой главе. Эти возможности – ядро языка, но тем не менее не полное его описание.
Особенности языка мы рассмотрим на примере простого графического редактора, где есть фигуры (Figure) состоящие из частей FigureElements, которые, в свою очередь, могут быть либо точками (Point) либо линиями (Line). Класс Figure предоставляет фабричные функции (имеется в виду GoF Abstract Factory, прим перев). Существует, также, класс Display. Большинство примеров данной главы базируются на данной системе.

UML для системы FigureEditor
Основным фактором, побуждающим использовать AspectJ (или использовать AOP в целом), является понимание того, что существуют проблемы, которые плохо решаемы при помощи традиционных методологий программирования. Рассмотрим, к примеру, проблему обеспечения безопасности некоторого приложения. По своей природе, безопасность пронизывает множество модулей системы. Более того, в силу постоянной эволюции системы, безопасность должна равномерно охватывать и все новые модули системы. Сама система безопасности тоже может эволюционировать. Путь использования традиционных подходов для решения таких проблем как политика безопасности является сложным и порождает множество ошибок.
Концепции, вроде безопасности, пронизывают элементарные части системы. В ООП языках, элементарная часть системы является классом. Но в ООП языках внедрение сквозных концепций является затруднительным, так как приходится изменять сами классы, что в свою очередь, делает повторное использование кода практически невозможным. Такие классы сложно улучшать, от них сложно наследоваться, потом такие классы неконтролируемо распространяются по всей системе… короче – не удобно и все тут.
Аспектно - ориентированное программирование – способ обобщения сквозного подхода, равно как ООП является способом обобщения общих концепций предметной области. AspectJ – реализация АОП для Java.
AspectJ добавляет в Java лишь одну новую концепцию – join point - в реальности, это лишь название для уже существующей в Java концепции. А также добавлены еще несколько новых конструкций – pointcut, advice, объявление inter-type и aspects. (я даже не буду пытаться перевести эти, всем понятные термины на русский язык, чтобы не быть оплеванным – прим переводчика ). Pointcuts и Advice влияют на выполнение программы динамически, определения inter-type на иерархию классов системы статически, а аспекты инкапсулируют эти новые конструкции.
Join point – явно определенная точка программы. Pointcut консолидирует набор join point и данных в них. Часть кода advice будет выполнена в том случае, когда будет достигнута join point. Это были динамические составляющие AspectJ.
AspectJ содержит различные виды inter-type определений, которые позволяют разработчику модифицировать статическую структуру программы, а именно – члены классов и зависимости между классами.
AspectJ's aspect является базовой сущностью сквозного подхода. Их поведение напоминает Java классы, но может содержать pointcuts, advice и определения inter-type.
(Далее по тексту будут использоваться слова джоинпоинт, поинткат, адвайс, аспект, интертайп – прим перев.)
В разделах, которые последуют прямо сейчас, мы собираемся рассмотреть джинпоинты и то, как их объединять в поинткаты. Потом мы рассмотрим адвайс: код, который запускается в момент достижения поинтката. Мы рассмотрим, как комбинировать поинткаты и адвайсы в аспекты – базовые сущности AspectJ, которые доступны для повторного использования и наследования. И, наконец, мы рассмотрим, как использовать интертайп определения для обеспечения сквозного подхода в контексте классов программы.


0 comments:
Post a Comment