106 Глава 2
многие классы и используют точки вставки для реализации регулярных действий
(связанных с безопасностью, обработкой ошибок и т. п.).
Представление — формализованное правило изменения структуры класса.
Парадигма АОП призвана прийти на смену объектно-ориентированному и
компонентному программированию и способствовать существенному повышению
качества программ, особенно их сопровождаемости. Она поддерживает мультипа-
радигмовую концепцию программирования, сущность которой состоит в том, что
разные аспекты проектируемой ПС могут быть реализованы в разных парадигмах
программирования.
В настоящее время существует несколько реализаций аспектно-
ориентированного программирования, наиболее известная из которых разработка
центра Xerox PARC – AspectJ (www.aspectj.org), поддерживающая АОП в рамках
языка Java. Новый релиз AspectJ 1.1 встраивается в такие системы разработки, как
Eclipse, Sun ONE Studio и Borland JBuilder. Другой исследовательский центр —
IBM Research — выпустил версию HyperJ (www.alphaworks.ibm.com/tech/hyperj) и
систему Cosmos (www.research.ibm.com/AEM/mdsoc.html) с гипертекстовой под-
держкой построения требований и диаграмм. Помимо Java новая парадигма АОП
поддерживается и в других языках, таких как Си, Си++, Squeak/Smalltalk, Perl,
Python, Ruby [41]. Идеи АОП продолжают развиваться в компании Intentional
Software идеологами этой парадигмы Грегором Кишалесом и Чарльзом Саймони.
АОП тесно связано с ментальным программированием (intentional
programming), генерирующим (порождающим, трансформационным) программиро-
ванием (generative programming, transformational programming).
Контекстно-ориентированное программирование (то же, что и аспектно-
ориентированное программирование). Суть контекстно-ориетированного програм-
мирования (context-oriented programming) состоит в применении аспектов, которые,
действуя на систему, изменяют ее поведение, причем код аспекта модифицируется
в зависимости от контекста, в котором он применяется. Модификация может быть
выполнена средствами метапрограммирования. Таким образом, можно рассматри-
вать идеи, заложенные в АОП, как средство структуризации идей метапрограмми-
рования, а само АОП – как одно из его возможных проявлений [42].
Для эффективной реализации аспектов в разных контекстах их применения
разработаны библиотеки расширений языков программирования для определенных
предметных областей. Они включают отдельные функции компиляторов, средств
оптимизации, редактирования, визуализации понятий, перестройки компонентов
компиляторов под новое языковое расширение, средства программирования на ос-
нове шаблонов и т.п. Библиотеки с такими возможностями получили название биб-
лиотек генерирующего типа. Пример - библиотека матриц, предоставляющая сред-
ства для вычисления выражений с массивами. Программирование с использовани-
ем таких библиотек относится к разряду стилей обобщенного (родового) програм-
мирования (generic programming).
Генерирующее (порождающее) программирование. На современном этапе
развития информационных технологий архитектурно-функциональный спектр ти-
пов программных компонентов очень широк (от утилит для мэйнфреймов до Web-
сервисов). Построение из них программных систем с нужными свойствами требует
решения задач классификации и типизации, идентификации архитектуры, специ-
фикации функций и интерфейсов, хранения, поиска, выбора, адаптации, интегра-