Аспектно-ориентированное программирование
Материал из Википедии — свободной энциклопедии
Эту статью следует викифицировать.
Пожалуйста, оформите её согласно правилам оформления статей.
|
Аспектно-ориентированное программирование (АОП) — парадигма программирования, основанная на идее разделения функциональности, особенно сквозной функциональности, для улучшения разбиения программы на модули.
Методология контекстно-ориентированного программирования была предложена группой инженеров исследовательского центра Xerox PARC под руководством Грегора Кикзалеса (Gregor Kiczales). Ими же был разработан первый, и наиболее успешный до сих пор, контекстно-ориентированный язык программирования AspectJ.
Существующие парадигмы программирования, такие как процедурное программирование и объектно-ориентированное программирование, предоставляют некоторые способы для разделения и выделения функциональности, например, функции, объекты, классы, пакеты, но некоторую функциональность с помощью предложенных методов невозможно выделить в отдельные сущности. Такую функциональность называют сквозной, так как её реализация разбросана по различным модулям программы. Сквозная функциональность приводит к рассредоточенному и запутанному коду. Запутанным называется такой код, в котором одновременно реализована различная функциональность.
Трассировка — типичный пример сквозной функциональности. Другие примеры: контрактное программирование, в частности проверка пред- и пост-условий, обработка ошибок, реализация систем безопасности. Если рассматривать программу написанную с помощью ООП, то любая функциональность, по которой не происходила декомпозиция программы, является сквозной.
Все языки АОП предоставляют способы для выделения сквозной функциональности в отдельную сущность. Различие между ними заключается в удобстве, безопасности и области применения средств, которые они предоставляют. Наиболее популярный на данный момент язык АОП — AspectJ. Используемые в нем понятия распространились на большинство языков АОП.
Основные понятия AspectJ:
- Точка выполнения (англ. JoinPoint) — определенная точка выполнения программы.
- Срез (англ. PointCut) — набор точек выполнения программы.
- Применение (англ. Advice) — состоит из условий применения и реализации функциональности. Условия применения определяют до, после или вместо какого среза надо вставить требуемую функциональность.
- Аспект (англ. Aspect) — модуль AspectJ.
- Представление (англ. Introduction) — метод изменения структуры класса путем введения новых полей и методов, а также изменения иерархии наследования.
[править] Реализации
|
|