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

Парадигмы программирования

Аспе́ктно-ориенти́рованное программи́рование (АОП) парадигма программирования , основанная на идее разделения функциональности для улучшения разбиения программы на модули .

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

Обоснование

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

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

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

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

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

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

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

Примечания

  1. . IBM. Дата обращения: 27 октября 2010. 5 февраля 2012 года.

Ссылки

  • . Дата обращения: 28 октября 2010.
  • . Дата обращения: 26 ноября 2011. 5 февраля 2012 года.
  • (англ.) . — раздел АОП в каталоге . Дата обращения: 28 октября 2010. 5 февраля 2012 года.

Литература

Источник —

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