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

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

Перейти к: навигация, поиск

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

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

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

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

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

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

  • Точка выполнения (англ. JoinPoint) — определенная точка выполнения программы.
  • Срез (англ. PointCut) — набор точек выполнения программы.
  • Применение (англ. Advice) — состоит из условий применения и реализации функциональности. Условия применения определяют до, после или вместо какого среза надо вставить требуемую функциональность.
  • Аспект (англ. Aspect) — модуль AspectJ.
  • Представление (англ. Introduction) — метод изменения структуры класса путем введения новых полей и методов, а также изменения иерархии наследования.

[править] Реализации

[править] Внешние ссылки