- Аспектно-ориентированное программирование
-
Парадигмы программирования - Агентно-ориентированная
- Компонентно-ориентированная
- Конкатенативная
- Декларативная (контрастирует с Императивной)
- Событийно-ориентированная
- Комбинаторная
- Императивная (контрастирует с Декларативной)
- Предметно-ориентированная
- Метапрограммирование
- Автоматизация процесса программирования
- Обобщённое программирование
- Рефлексивно-ориентированная
- Итерационная
- Параллельная
- Структурная
Методология АОП была предложена группой инженеров исследовательского центра Xerox PARC под руководством Грегора Кичалеса (Gregor Kiczales). Ими же было разработано аспектно-ориентированное расширение для языка Java, получившее название AspectJ — (2001 год).
Содержание
Обоснование
Существующие парадигмы программирования — процедурное, модульное, объектно-ориентированное программирование (ООП) и предметно-ориентированное проектирование — предоставляют определённые способы для разделения и выделения функциональности: функции, модули, классы, но некоторую функциональность с помощью предложенных методов невозможно выделить в отдельные сущности. Такую функциональность называют сквозной (от англ. scattered разбросанный или англ. tangled переплетённый), так как её реализация распределена по различным модулям программы. Сквозная функциональность приводит к рассредоточенному и запутанному коду, сложному для понимания и сопровождения.
Ведение лога и обработка ошибок — типичные примеры сквозной функциональности. Другие примеры: трассировка; авторизация и проверка прав доступа; контрактное программирование (в частности, проверка пред- и постусловий). Для программы, написанной в парадигме ООП, любая функциональность, по которой не была проведена декомпозиция, является сквозной.
Однако, как утверждают некоторые авторы[1], АОП может успешно применяться и для решения задач защиты, многопоточности, управления транзакциями и многих других.
Основные концепции
Все языки АОП предоставляют средства для выделения сквозной функциональности в отдельную сущность. Так как AspectJ является родоначальником этого направления, используемые в этом расширении концепции распространились на большинство языков АОП.
Основные понятия АОП:
- Аспект (англ. aspect) — модуль или класс, реализующий сквозную функциональность. Аспект изменяет поведение остального кода, применяя совет в точках соединения, определённых некоторым срезом.
- Совет (англ. advice) — средство оформления кода, который должен быть вызван из точки соединения. Совет может быть выполнен до, после или вместо точки соединения.
- Точка соединения (англ. join point) — точка в выполняемой программе, где следует применить совет. Многие реализации АОП позволяют использовать вызовы методов и обращения к полям объекта в качестве точек соединения.
- Срез (англ. pointcut) — набор точек соединения. Срез определяет, подходит ли данная точка соединения к данному совету. Самые удобные реализации АОП используют для определения срезов синтаксис основного языка (например, в AspectJ применяются Java-сигнатуры) и позволяют их повторное использование с помощью переименования и комбинирования.
- Внедрение (англ. introduction, введение) — изменение структуры класса и/или изменение иерархии наследования для добавления функциональности аспекта в инородный код. Обычно реализуется с помощью некоторого метаобъектного протокола (англ. metaobject protocol, MOP).
Реализации
- Для .NET:
- PostSharp
- Aspect.NET
- LOOM.NET
- Puzzle.NAspect
- AspectDNG
- Aspect#
- Encase
- Compose*
- Seasar.NET
- DotSpect (.SPECT)
- Как часть функциональности The Spring.NET Framework
- Для Object Pascal:
- Для Java:
- AspectJ
- AspectWerkz (Now merged with AspectJ)
- Byte Code Engineering Library
- CaesarJ
- Dynaop
- JAC
- Jakarta Hivemind
- Javassist Home Page
- JAsCo
- JAML
- JBoss AOP
- Object Teams
- PROSE
- Reflex
- The AspectBench Compiler for AspectJ (abc)
- Как часть функциональности The Spring Framework
- Seasar
- The JMangler Project
- InjectJ
- Для JavaScript:
- AOP плагин для библиотеки jQuery
- Ajaxpect
- AOP Fun with JavaScript (замещено проектом Ajaxpect)
- Dojo — Dojo Toolkit
- Aspectes
- Для Python:
- Для ActionScript 2/3:
- Для Perl:
- Для Common Lisp:
- Для Cocoa:
- Для ColdFusion:
Примечания
- ↑ Мифы и реальности АОП (рус.). IBM. Архивировано из первоисточника 5 февраля 2012. Проверено 27 октября 2010.
Ссылки
- «Аспектно-ориентированное программирование (с Валентином Павловым)» (рус.). Архивировано из первоисточника 5 февраля 2012. Проверено 28 октября 2010.
- Аспектно-ориентированное программирование (рус.). Архивировано из первоисточника 5 февраля 2012. Проверено 26 ноября 2011.
- Open Directory Project (англ.). — раздел АОП в каталоге. Архивировано из первоисточника 5 февраля 2012. Проверено 28 октября 2010.
Литература
Для улучшения этой статьи желательно?: - Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное.
Категория:- Парадигмы программирования
Wikimedia Foundation. 2010.
Полезное
Смотреть что такое "Аспектно-ориентированное программирование" в других словарях:
Аспектно-ориентированное сборочное программирование — разновидность сборочного программирования, основанная на сборке полнофункциональных приложений из многоаспектных компонентов, инкапсулирующих различные варианты реализации. См. также: Объектно ориентированное программирование Технологии… … Финансовый словарь
Контекстно-ориентированное программирование — Ссылки по теме Выхованец В.С., Иосенкин В.Я. Понятийный анализ и контекстная технология программирования Бочаров Н.В. Концепция контекстно ориентированного программирования Бочаров Н.В. Механика интеллектуально реагирующих сред Связанные … Википедия
Объектно-ориентированное программирование — Эта статья во многом или полностью опирается на неавторитетные источники. Информация из таких источников не соответствует требованию проверяемости представленной информации, и такие ссылки не показывают значимость темы статьи. Статью можно… … Википедия
Субъектно-ориентированное программирование — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная … Википедия
Компонентно-ориентированное программирование — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная … Википедия
Событийно-ориентированное программирование — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная … Википедия
Аспектно-ориентированная разработка программного обеспечения — В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете … Википедия
Программирование — Эта статья должна быть полностью переписана. На странице обсуждения могут быть пояснения. У этого термина существуют и другие значения, см. Программи … Википедия
Парадигма (программирование) — Парадигма программирования это совокупность идей и понятий, определяющая стиль написания программ. Парадигма, в первую очередь, определяется базовой программной единицей и самим принципом достижения модульности программы. В качестве этой единицы … Википедия
Структурное программирование — Эта статья или раздел нуждается в переработке. Пожалуйста, улучшите статью в соответствии с правилами написания статей … Википедия