Аспектно-ориентированное программирование

Материал из Википедии — свободной энциклопедии
Парадигмы программирования

Аспе́ктно-ориенти́рованное программи́рование (АОП) —

модули
.

Xerox PARC под руководством Грегора Кичалеса (Gregor Kiczales). Ими же было разработано аспектно-ориентированное расширение для языка Java, получившее название AspectJ
 — (2001 год).

Обоснование

Существующие парадигмы программирования —

модули, классы, но некоторую функциональность с помощью предложенных методов невозможно выделить в отдельные сущности. Такую функциональность называют сквозной (от англ. scattered — разбросанный или англ.
 tangled — переплетённый), так как её реализация распределена по различным модулям программы. Сквозная функциональность приводит к рассредоточенному и запутанному коду, сложному для понимания и сопровождения.

Ведение

лога и обработка исключений — типичные примеры сквозной функциональности. Другие примеры: трассировка; аутентификация и проверка прав доступа; контрактное программирование (в частности, проверка пред- и постусловий). Для программы, написанной в парадигме ООП, любая функциональность, по которой не была проведена декомпозиция
, является сквозной.

Однако, как утверждают некоторые авторы[1], АОП может успешно применяться и для решения задач защиты, многопоточности, управления транзакциями и многих других.

Основные концепции

Все языки АОП предоставляют средства для выделения сквозной функциональности в отдельную сущность. Так как AspectJ является родоначальником этого направления, используемые в этом расширении концепции распространились на большинство языков АОП.

Основные понятия АОП:

  • Аспект (англ. aspect) — модуль или класс, реализующий сквозную функциональность. Аспект изменяет поведение остального кода, применяя совет в точках соединения, определённых некоторым срезом.
  • Совет (англ. advice) — средство оформления кода, которое должно быть вызвано из точки соединения. Совет может быть выполнен до, после или вместо точки соединения.
  • Точка соединения (
    полям объекта
    в качестве точек соединения.
  • Срез (
    сигнатуры
    ) и допускают их повторное использование с помощью переименования и комбинирования.
  • Внедрение (англ. introduction, введение) — изменение структуры класса и/или изменение иерархии наследования для добавления функциональности аспекта в инородный код. Обычно реализуется с помощью некоторого метаобъектного протокола (англ. metaobject protocol, MOP).

Примечания

  1. Мифы и реальности АОП. IBM. Дата обращения: 27 октября 2010. Архивировано 5 февраля 2012 года.

Ссылки

Литература