Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Safonov / AMPN_course_7.pptx
Скачиваний:
100
Добавлен:
16.04.2015
Размер:
425.38 Кб
Скачать

Архитектуры и модели программ и знаний

Лекция 7

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

Сафонов Владимир Олегович

Профессор кафедры информатики Заведующий лабораторией Java-технологии

(http://polyhimnie.math.spbu.ru/jtl)

Санкт-Петербургский государственный университет

Email: vosafonov@gmail.com

WWW: http://www.vladimirsafonov.org

Аспектно-ориентированное программирование (АОП)

Модульная функциональность (common concern) –

выразима некоторой обобщенной процедурой

(подпрограммой, классом и т.д.)

Сквозная функциональность (cross-cutting concern) –

реализация “пронизывает” код всей программы, рассредоточена по ней (например, security)

АОП – подход к программированию, основанный на

модуляризации сквозной функциональности

А.Л. Фуксман (Ростовский университет, 1979):

Технология вертикального слоения – предшественник АОП

1995, Xerox PARC: Gregor Kiczales и его группа

сформулировали основные понятия АОП; выпущена первая версия AspectJ – расширение Java средствами поддержки АОП

Конец 1990-х гг., IBM Research: HyperJ – многомерная

декомпозиция функциональностей; еще одно расширение Java для АОП (сложно для понимания и использования)

Разработаны сотни инструментов АОП – ANGIE, AMT, …

Aspect.NET

(C) Сафонов В.О. 2012

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

Аспекты

Аспект – реализация сквозной функциональностиАспект – особая разновидность модуля,

предназначенная для использования путем внедрения (weaving) фрагментов его кода в другие модулиПримеры аспектов:

- Реализация МП-безопасности в существующей библиотеке

- Реализация новой языковой конструкции исходного языка в компилятореТаким образом, аспекты фактически уже стали

повседневной необходимостью в программировании, однако до сих пор они внедряются и извлекаются “вручную”, без подходящих инструментов – отсюда трудности при сопровождении и развитии программПрименение АОП в облачных вычислениях и

сервисно-ориентированной архитектуре: Добавление новой функциональности (services, mash-ups)Потенциальная опасность АОП: “слепое”

(неуправляемое) внедрение аспектов может привести к ненадежности программы. Метод решения проблемы: user-controlled weaving (Aspect.NET)

(C) Сафонов В.О. 2012

Структура определения аспекта (Aspect.NET)

Имя аспектаПараметры аспекта (не обязательны) –

параметризованные аспекты удобныДанные аспектаМодули аспекта

Действия аспекта, с соответствующими

правилами их внедрения в целевое приложениеВозможны отдельные наборы правил

внедрения, которые могут использоваться различными аспектами

(C) Сафонов В.О. 2012

Аспекты – статические или динамические?

Первая точка зрения на аспекты:

Внедрение аспектов должно выполняться статическиВторая: Внедрение аспектов выполняется

динамически, во время выполнения if Condition then Action

Второй подход очень напоминает контрольные точки в отладчиках – известен много летНаша точка зрения: мы придерживаемся

статического подхода, но динамический подход может быть также реализован

(C) Сафонов В.О. 2012

Аспекты в AspectJ (1/2)

AspectJ: Xerox PARC (1995) -> Univ. of British

Columbia, Canada (2003), руководитель проекта: Gregor Kiczales

AspectJ – аспектно-ориентированное расширение

Java (имеет свой компилятор с расширенного языка, визуализатор аспектов и т.д.)

Pointcut (разрез) – определение правила

внедрения в аспекте, использующее шаблоны имен сущностей в целевом приложении, - либо отдельная

группа подобных правил, вне аспекта, которую могут использовать несколько аспектов

Join points (точки присоединения)– конкретные

точки в коде конкретного целевого приложения, в которые будет выполнено внедрение аспектаAdvices (фактически – действия)– действия

аспекта, которые должны быть выполнены в точках

внедрения (C) Сафонов В.О. 2012

Аспекты в AspectJ (2/2)

Аспекты в AspectJ могут внедряться

несколькими способами – на уровне исходного кода, байт-кода, во время выполнения при загрузке классаВнедрение нового определения в другой

модуль; это определение будет видимым только для аспекта, так что нарушения инкапсуляции не происходит

around S A -> B - стиль AspectJ

модификации кода во время выполнения

(самомодифицируемый код). Однако иногда такие модификации полезны

Наша точка зрения: AspectJ – мощный

инструмент, но несколько сложен в использовании и потенциально небезопасен. Может возникнуть много проблем нарушения принципов(C) Сафонов В.О. TWC2012

Аспекты в Aspect.NET

Статический подход к внедрению аспектов очень

важен: он улучшает понимание процесса изменения

целевой программы

Аспекты для .NET должны быть языково-независимыми,

в соответствии с общими принципами .NET

Использование custom-атрибутов

Синтаксический сахар: простой язык АОП-аннотаций

(Aspect.NET.ML), конвертируемых в атрибуты АОП на языке реализации

Аспектизация (классический термин – aspect mining):

конвертирование не аспектно-ориентированных

программ в аспектно-ориентированные (извлечение и “раскрашивание” аспектов)

Aspect GUI (Aspect.NET Framework): интеграция с Visual

Studio.NET; простота; возможность управлять

процессом внедрения аспектов и отменять

нежелательные точки внедрения

Сайт проекта Aspect.NET (Aspect.NET 2.1):

http://www.facultyresourcecenter.com/curriculum/pfv.aspx?I D=6801

(C) Сафонов В.О. 2012

Подходы к АОП

Расширение существующего языка (AspectJ, Aspect#) Требуют разработки специального компилятора с

расширенного языка

Динамическое внедрение (вставки и изменение кода при исполнении) - Loom.NET, RAIL:

- Пользователь не знает, какой код фактически исполняется

- Низкая производительностьСтатическое внедрение аспекта на уровне двоичной

сборки (assembly) - Aspect.NET:

- Высокая производительность - Результирующий код может быть визуализирован

(Reflector, ildasm)

- Многие общие инструменты .NET могут работать с полученными сборками

(C) Сафонов В.О. 2012

Цели Aspect.NET

Aspect.NET позволяет определить аспекты – особые модули, реализующие сквозную функциональность и предназначенные для внедрения в целевые приложения.

Выделение сквозной функциональности в аспекты улучшает структуру кода.Aspect.NET реализован как расширение (add-in) Visual Studio.NET 2005 (Whidbey), позволяет использовать АОП в удобной интегрированной среде, наряду с другими возможностями разработки программ в Visual Studio.NET

(C) Сафонов В.О. 2012

Соседние файлы в папке Safonov