Аспектно-ориентированное программирование
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 4 мая 2020 года; проверки требуют 5 правок.
Аспе́ктно-ориенти́рованное программи́рование (АОП) —
модули
.
Xerox PARC под руководством Грегора Кичалеса (Gregor Kiczales). Ими же было разработано аспектно-ориентированное расширение для языка Java, получившее название AspectJ
— (2001 год).
Обоснование
Существующие парадигмы программирования —
модули, классы, но некоторую функциональность с помощью предложенных методов невозможно выделить в отдельные сущности. Такую функциональность называют сквозной (от англ. scattered — разбросанный или англ.
tangled — переплетённый), так как её реализация распределена по различным модулям программы. Сквозная функциональность приводит к рассредоточенному и запутанному коду, сложному для понимания и сопровождения.
Ведение
лога и обработка исключений — типичные примеры сквозной функциональности. Другие примеры: трассировка; аутентификация и проверка прав доступа; контрактное программирование (в частности, проверка пред- и постусловий). Для программы, написанной в парадигме ООП, любая функциональность, по которой не была проведена декомпозиция
, является сквозной.
Однако, как утверждают некоторые авторы[1], АОП может успешно применяться и для решения задач защиты, многопоточности, управления транзакциями и многих других.
Основные концепции
Все языки АОП предоставляют средства для выделения сквозной функциональности в отдельную сущность. Так как AspectJ является родоначальником этого направления, используемые в этом расширении концепции распространились на большинство языков АОП.
Основные понятия АОП:
- Аспект (англ. aspect) — модуль или класс, реализующий сквозную функциональность. Аспект изменяет поведение остального кода, применяя совет в точках соединения, определённых некоторым срезом.
- Совет (англ. advice) — средство оформления кода, которое должно быть вызвано из точки соединения. Совет может быть выполнен до, после или вместо точки соединения.
- Точка соединения (полям объектав качестве точек соединения.
- Срез (сигнатуры) и допускают их повторное использование с помощью переименования и комбинирования.
- Внедрение (англ. introduction, введение) — изменение структуры класса и/или изменение иерархии наследования для добавления функциональности аспекта в инородный код. Обычно реализуется с помощью некоторого метаобъектного протокола (англ. metaobject protocol, MOP).
Примечания
- ↑ Мифы и реальности АОП . IBM. Дата обращения: 27 октября 2010. Архивировано 5 февраля 2012 года.
Ссылки
- «Аспектно-ориентированное программирование (с Валентином Павловым)» . Дата обращения: 28 октября 2010.
- Аспектно-ориентированное программирование . Дата обращения: 26 ноября 2011. Архивировано 5 февраля 2012 года.
- Open Directory Project (англ.). — раздел АОП в каталоге. Дата обращения: 28 октября 2010. Архивировано 5 февраля 2012 года.
Литература
Для улучшения этой статьи желательно:
|