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

кандидата физико-математических наук
Грачев, Михаил Константинович
город
Санкт-Петербург
год
2009
специальность ВАК РФ
05.13.11
Диссертация по информатике, вычислительной технике и управлению на тему «Разработка и реализация пользовательского интерфейса аспектно-ориентированного программирования»

Автореферат диссертации по теме "Разработка и реализация пользовательского интерфейса аспектно-ориентированного программирования"

САНКТ-ПЕТЕРБУРГСКИМ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

На правах рукописи

003490954

ГРАЧЕВ Михаил Константинович

РАЗРАБОТКА И РЕАЛИЗАЦИЯ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА АСПЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

05.13.11 — Математическое и программное обеспечение в числительных машин, комплексов и компьютерных сетей

АВТОРЕФЕРАТ

диссертации на соискание }ченой степени кандидата физико-математических наук

Санкт-Петербург 2009

2 3 ЯНВ 20:0

-^/Са?

003490954

Работа выполнена на кафедре информатики математико-механического факультета Санкт-Петербургского государственного университета.

Научный руководитель:

Официальные оппоненты:

доктор технических наук,

профессор САФОНОВ Владимир Олегович

доктор технических наук, профессор ЛИСС Александр Рудольфович (Санкт-Петербургский государственный электротехнический университет)

кандидат физико-математических наук, доцент КОЗНОВ Дмитрий Владимирович (Санкт-Петербургский государственный университет)

Ведущая организация:

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

Защита состоится " "^¿^изслД 2010 года в /6часов на заседании совета Д 212.232.51 по защите докторских и кандидатских диссертаций при Санкт-Петербургском государственном университете по адресу: 198504, Санкт-Петербург, Петродворец, Университетский пр.. д.28, математико-механический, факультет Санкт-Петербургского государственного университета, ауд. 405.

С диссертацией можно ознакомиться в Научной библиотеке Санкт-Петербургского государственного университета по адресу: 199034, Санкт-Петербург, Университетская наб., д. 7/9.

Автореферат разослан "¿3 " декабря 2009 года.

Ученый секретарь диссертационного совета,

доктор физико-математических наук. _,.

профессор И.К. Даугавет

ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ

Данная работа посвящена разработке и реализации пользовательского интерфейса инструментария для поддержки разработки в терминах методологии аспектно-ориентированного программирования (АОП) [6], а также механизмов и средств для эффективного применения методологии в разработке программного обеспечения (ПО).

Актуальность темы. Современный аспектно-ориентированный подход к разработке программного обеспечения представляет собой технологию для решения широкого круга задач, позволяющая уменьшить сложность разработки и сопровождения программных продуктов.

Подход к разработке ПО, основанный на аспектно-ориентированном программировании, обеспечивает эффективное повторное использование кода при реализации сквозной функциональности (cross-cutting concern) [6]. Рассредоточенные по коду программы фрагменты, отвечающие за реализацию некоторой функциональности (например, проверок значений параметров - parameter validation), выделяются из модулей программного продукта в отдельный модуль новой разновидности - аспект (aspect) [6]. После этого аспект внедряется (weave) [6] в целевую программу, в соответствии с заданным набором правил внедрения (weaving rules) [6]. Такой подход упрощает исходный код целевой программы.

Типичными примерами сквозной функциональности являются: протоколирование, аутентификация, профилирование, валидация значений параметров, поддержка безопасного параллельного исполнения.

Более сложным примером является расширение компилятора путем реализации некоторых новых языковых конструкций, например, новым типом операторов. Очевидно, все фазы компилятора - лексический анализ, синтаксический анализ, семантический анализ, оптимизация и генерация

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

Как показывает практика, применение АОП позволяет в значительной мере упростить и удешевить разработку программ, основанных на надежных и безопасных вычислениях (trustworthy computing - TWC) [7].

Теоретические основы АОП развиты многими исследователями, однако до сих пор не существует устоявшегося практического подхода к АОП, и зачастую даже базовые концепции АОП по-своему интерпретируются и используются различными исследователями. По сей день не появилось практически ни одного инструмента, который мог бы быть легко интегрирован в существующие среды и платформы для разработки ПО. Java-платформа является исключением из этого правила, благодаря широкой распространенности АОП-системы AspectJ, расширению AspectJ Development Tools и ряду других расширений, позволяющих интегрировать поддержку AspectJ в несколько наиболее популярных среди Java-программистов сред разработки (например, Eclipse).

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

Одной из важнейших целей данной работы являлась реализация Aspect.NET Framework — пользовательского интерфейса АОП-инструментария Aspect.NET на базе Microsoft.NET (новой широко

используемой многоязыковой платформе для разработки ПО).

4

Созданная автором подсистема интеллектуального пользовательского интерфейса АОП — Aspect.NET Framework — часть системы АОП Aspect.NET, реализованная как расширение (add-in) к интегрированной среде разработки Microsoft Visual Studio 2008, позволяющее в полной мере использовать возможности системы Aspect.NET.

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

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

1. Разработка методов реализации пользовательского интерфейса для инструментов АОП и их интеграции в современные среды для разработки программ.

2. Реализация пользовательского интерфейса Aspect.NET Framework на основе разработанных методов.

3. Реализация расширения Aspect.NET Framework для неявного применения АОП при решении некоторых типичных задач на примере расширения Aspect.log4net.

4. Использование подсистемы Aspect.NET Framework в рамках системы Aspect.NET при разработке программного продукта для решения ряда задач.

Научная новизна. Научная новизна работы обусловлена в первую очередь новизной АОП, а также новизной подхода TWC и методов применения АОП к TWC [7]. Научной новизной обладают также:

- разработанный и реализованный в диссертации метод управляемого пользователем внедрения аспектов (в настоящее время ни один из инструментов АОП, кроме Aspect.NET Framework, такой возможностью не обладает);

- принципы реализации инструмента Aspect.log4net, обеспечивающего неявное использование АОП для решения типовых задач разработки и сопровождения программ.

Теоретическая и практическая ценность. В рамках данной работы предложено и реализовано несколько оригинальных механизмов для поддержки АОП:

- управляемое пользователем применение аспектов;

- концепция создания мастеров для эффективного решения ряда типичных задач разработки и сопровождения программ с применением АОП;

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

Другие полученные результаты также являются новыми и дополняют результаты предшествующих работ.

Апробация работы. Основные результаты и выводы диссертации докладывались на следующих научных конференциях:

- ".NET Technologies 2006", г. Пльзень, Чехия;

"Технологии Microsoft в теории и практике программирования", Санкт-Петербургский Политехнический университет, 2006, 2007 и 2008 гг.;

международной конференции ШЕЕ, посвященной 110-летию изобретения радио (Санкт-Петербург, 2005);

- на семинаре регионального отделения IEEE в компаниях Корнинг (Санкт-Петербург, февраль 2007) и Motorola (Санкт-Петербург, ноябрь 2008);

- на семинарах кафедры информатики и лаборатории Java-технологии математико-механического факультета СПбГУ.

Система Aspect.NET, ключевым компонентом которой является разработанная подсистема применения аспектов, используется для решения исследовательских задач разработки программного обеспечения, а также для обучения современным технологиям программирования в университетах. Позитивный опыт и результаты внедрения подтверждаются многочисленными положительными отзывами пользователей системы. Наши разработки в сфере АОП активно используются коллегами из университета Форталеза (Бразилия), Миланского университета (Италия), Арабской Академии Информационных Технологий (Египет) и ряда других университетов.

Публикация результатов. Основные результаты диссертации отражены

в работах [1-5]. В работе 2 соискателю принадлежит описание основных

принципов, легших в реализацию созданной им первой версии

компоненты Aspect.NET Framework. В статье 3 соискателю принадлежит

описание разработанного им способа интеграции Aspect.NET Framework и

ядра системы Aspect.NET. В этой же работе соискатель описал отличия

второй версии компоненты Aspect.NET Framework от первой, а также

разработанные им примеры аспектов. В публикации 4 соискатель

описывает расширение компоненты Aspect.NET Framework надстройкой

Aspect.log4net для неявного применения АОП в задаче протоколирования.

В публикации' 5 соискатель дает обзор пользовательского интерфейса

системы Aspect.NET и подробно описывает механизм взаимодействия

7

Aspect.NET Framework с остальными частями системы на всех этапах применения аспектов. Остальные результаты в публикациях 2, 3, 4 и 5 принадлежат соавторам. Статья 1 опубликована в журнале, входящем в перечень ВАК.

ОСНОВНОЕ СОДЕРЖАНИЕ РАБОТЫ

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

В первой главе раскрывается актуальность АОП. Глава исследует текущее состояние проблемы и краткий обзор существующих подходов к проблеме. В главе содержится краткое изложение особенностей архитектуры и применения множества современных АОП-инструментариев для платформы Java и Microsoft .NET. В этой же главе проводится итоговое сравнение инструментариев.

Во второй главе детально рассматривается система Aspect.NET, концепции и принципы, положенные в основу разработки системы. Описана архитектура системы, механизмы работы ее компонент и взаимодействие меду ними. Приводится обзор основных технологий, использованных при создании инструментария Aspect.NET. Во второй части главы рассматривается метаязык определения аспектов в Aspect.NET.ML. В завершении главы приводятся примеры решения некоторых популярных задач при помощи АОП-методологии в рамках системы Aspect.NET.

Третья глава полностью посвящена разработанной соискателем Aspect.NET Framework, важнейшей подсистеме инфраструктуры Aspect.NET, отвечающей за взаимодействие с пользователем, а также связь всех остальных компонент системы между собой. Вторая часть данной

главы посвящена расширению Aspect.NET Framework, позволяющему существенно упростить применение функциональности Aspect.NET для конечных пользователей.

В главе рассмотрен новый подход к применению аспектов, реализованный в рамках проекта Aspect.NET — применение, управляемое пользователем (user-controlled weaving). Данный подход позволяет явно выделить стадию поиска точек присоединения и непосредственно применения аспекта. Между данными стадиями пользователю предлагается отфильтровать точки внедрения при помощи дерева точек внедрения (рис. 1)

Aspects Mnpoints visualization

Start Page WorkerClass.es . ^Testing Threads. Program

03 O TestingThreads Sf|H$ Program

-V voidMamf...)

Vocall TestingThreads.Program,Calculate @ line 31 01:/ void AspectProfiler,ActlonBeforeCall(System.String)-: 01-/ void AspectProfiler.ActionAfterCallCSystem.String) ->

Ei-t> " - ■"••■■■ ■ ' '■ : .

VOid C1void Aspect. AsyncCallAspect.TotalJoiningO -> %after S-H'S %can i esting i nreaos, wot ret uass .uosomeworK m ire r~ Qls? void AsyncCallAspect.WrapMethodWithAsyncCall(5ys; void WorkerSayingAspect.PrintWorkerGossipCSystem, j %call TestingThreads.WorkerClass.Do5omeWork@ line 4 01-/ void AsyncCallAspect.WrapMethodWithAsyncCailfSys 01r/ void WorkerSayingAspect.PrintWorkerGosslpCSystem.

.call ^Calculate

* Corsrnented

* applied lai

* After tjeav

* the зшяе £' V

class Program {

//static .

3tatic vo {

//Bati

/»if

Рис. 1. Дерево точек внедрения На примере Aspect.log4net продемонстрирован эффективный механизм на основе мастера (рис. 2) для пошагового добавления функциональности протоколирования в модули целевой программы с неявным для пользователя применением АОП и системы Aspect.NET. В рамках примера разъясняется простой и удобный механизм генерации правил внедрения аспектов квалифицированными программистами, не имеющими опыта работы с АОП и системой Aspect.NET.

Where cío you want to insert logging? Step 1; Select what to log and how to log

Step 2: Edit the rule description (did£ the underlined value) Apply logging defined by the rules below:

after *get "" method marked with ObsoteteAttribute attribute igs message "Obsolete method {method name} has been invoked" SÜSI 3S.Ü" read of a variable within ' class log message "Read value {variable value} {variable name} {variable type}"

Рис. 2. Мастер Азрес1.1с^4пе1

Проведенный эксперимент подтверждает эффективность и перспективность подхода. Расширяемость мастера новыми шаблонами правил свидетельствует о применимости данного подхода к другим трудоемких задачам разработки и сопровождения программ, помимо протоколирования.

Заключение содержит описание основных результатов, полученных в работе, а также перечень возможных направлений развития проекта Aspect.NET.

ОСНОВНЫЕ РЕЗУЛЬТАТЫ И ВЫВОДЫ

В ходе выполнения работы достигнуты следующие результаты:

1. Разработаны методы организации пользовательских интерфейсов для инструментов АОП, обеспечивающие надежность и наглядность процесса внедрения аспектов.

2. Реализована и интегрирована в Visual Studio 2008 подсистема Aspect.NET Framework, являющаяся пользовательским интерфейсом системы Aspect.NET.

3. Реализован инструмент Aspect.log4net, обеспечивающий неявное использование АОП для протоколирования.

4. Подсистема Aspect.NET Framework в составе системы Aspect.NET успешно использована для протоколирования и проектирования с пред- и постусловиями в крупном программном продукте объемом более 40 человеко-лет.

Все полученные результаты являются новыми.

Предложенный способ реализации АОП интерфейса, а именно, интеграция в наиболее распространенную среду разработки Microsoft Visual Studio 2008, позволил сделать использование системы Aspect .NET максимально комфортным для .NET-программистов. Обусловлено это тем, что нужды программистов полностью обеспечиваются данной средой разработки, а созданный соискателем Aspect.NET Framework органично расширяет возможности Visual Studio и прозрачно внедряется в процесс сборки проектов MSBuild. Ввиду того, что для платформы Microsoft .NET не существует аналогов пользовательского интерфейса для систем АОП, за базовый образец при создании соискателем было выбрано одно из немногих существующее расширение среды разработки Eclipse для Java-платформы под названием AspectJ Development Tools.

Созданный автором пользовательский интерфейс собрал в себе всю функциональность реализованную командой Грегора Кикжалеса в AspectJ Development Tools, такую как просмотр содержимого аспектов, раскрасчик аспектов, просмотр влияния аспекта на уровне текста исходного кода. Однако, помимо этого была добавлена возможность управляемого

пользователем применения аспектов с использованием графического пользовательского интерфейса.

К сожалению, реализованную соискателем надстройку Aspect.log4net трудно сравнивать с единственным аналогом — расширением АОП-инструментария PostSharp под названием Log4PostSharp (появившимся позднее). Причиной тому является то, что в Log4PostSharp жестко зафиксировано множество правил внедрения аспекта с протоколирующей функциональностью, отсутствует графический пользовательский интерфейс и интеграция с процессом сборки проектов. Стоит заметить, что множество шаблонов правил в Aspect.log4net можно с легкостью изменять, создавая специфичные мастера-расширения для решения разнообразных прикладных задач за счёт неявного применения АОП.

Апробация Aspect.NET Framework как части Aspect.NET на крупных программных продуктах позволила объективно оценить эффективность созданного соискателем расширения и методологии АОП как таковой. В частности, соискателем была достигнута возможность уменьшения исходного кода крупного программного продукта на 5% за счёт вынесения только протоколирующей функциональности в аспекты, а применение же Aspect.log4net позволило существенно снизить временные издержки, связанные с использованием АОП-инструментария.

ПУБЛИКАЦИИ АВТОРА ПО ТЕМЕ ДИССЕРТАЦИИ Статьи в журналах, рекомендованных ВАК:

1. Грачев М.К. Aspect.NET Framework и его применение в задаче протоколирования // Вестник С.-Петерб. ун-та., 2008, Сер. 10, Вып. 4, С. 118-126

Другие публикации:

2. Грачев М.К., Григорьев Д.А., Масленников А.И. Сафонов В.О. Aspect.NET: инструментарий аспектно-ориентированного программирования для платформы Microsoft.NET // Тезисы докладов конкурса-конференции "Технологии Microsoft в теории и практике программирования". СПб.: изд-во СПбГПУ, 2006, С. 111.

3. Грачев М.К., Григорьев Д.А., Масленников А.И. Сафонов В.О. Адаптация методологии АОП для практического применения на платформе Microsoft.NET // Тезисы докладов конкурса-конференции "Технологии Microsoft в теории и практике программирования". СПб.: изд-во СПбГПУ, 2007, С. 83.

4. Грачев М.К., Григорьев Д.А., Масленников А.И. Сафонов В.О. Адаптация методологии АОП для применения в задаче протоколирования на платформе Microsoft.NET // Тезисы докладов конкурса-конференции "Технологии Microsoft в теории и практике программирования". СПб.: изд-во СПбГПУ, 2008, С. 74.

5. Safonov V.O., Gratchev М.К., Grigoryev D.A., Maslennikov A.I. Aspect.NET — aspect-oriented toolkit for Microsoft.NET based on Phoenix and Whidbey. — ".NET Technologies 2006" International Conference full papers proceedings, Pilsen, Czech Republic, 2006, p. 1934.

Список литературы

6. Kiczales G., Lamping J., Mendhekar A.. Aspect-oriented programming // Proc. Of the European Conference on Object-oriented Programming (ECOOP) in Finland Springer-Verlag, June 1997. Heidelberg, Germany, 1997, p. 365-389.

7. Safonov V.O. Using aspect-oriented programming for trustworthy software development. Wiley Interscience. John Wiley & Sons, 2008, p. 338.

Подписано к печати 18.12.09. Формат 60x84 Vie . Бумага офсетная. Гарнитура Тайме. Печать цифровая. Печ. л. 1,0. Тираж 100 экз. Заказ 4573

Отпечатано в Отделе оперативной полиграфии химического факультета СПбГУ 198504, Санкт-Петербург, Старый Петергоф, Университетский пр., 26 Тел.: (812) 428-4043, 428-6919

Оглавление автор диссертации — кандидата физико-математических наук Грачев, Михаил Константинович

Введение.

Цели и задачи.

Причины возникновения проблемы и ее актуальность.

Глава 1. Инструменты АОП.

1.1 История вопроса и обзор источников информации об АОП.

1.2 Основные идеи АОП.

1.3 Обзор существующих инструментариев для поддержки АОП.

1.2.1 Система AspectJ.

1.2.2 Hyper/J.

1.2.3 Spring АОР.

1.2.4 Spring.NET АОР.

1.2.5 PostSharp.

1.2.6 NAspect.

1.2.7 Aspect#.

1.2.8 AspectDNG.:.

1.2.9 S2AOP.NET.

1.2.10 Wicca.

Глава 2. Система Aspect.NET.

2.1 Концепция и принципы разработки системы.

2.2 Архитектура Aspect.NET.

2.2.1 Основные технологии, использованные в реализации Aspect.NET.

2.3 Метаязык спецификации аспектов Aspect.NET.ML.

2.3.1 Определение аспекта.

2.3.2 Правила внедрения аспекта.

2.3.3 Самодокументирование аспектов: AspectDescription.

2.3.4 Непосредственное использование специализированных атрибутов Aspect.NET.

2.4 Примеры решения некоторых задач посредством Aspect.NET.

2.4.1 Поддержка транзакций.

2.4.2 Валидация параметров.

2.4.3 Перевод выполнения в поток пользовательского интерфейса.

2.4.4 Обеспечение работы с доменными объектами в ORM-системах.

Глава 3. Подсистема Aspect.NET Framework.

3.2.1 Организация пользовательского интерфейса для инструментариев АОП.

3.2.2 Реализация подсистемы Aspect.NET Framework.

3.2.3 Автоматизация задачи протоколирования при помощи инструмента Aspect. log4net.

3.2.4 Апробация Aspect.NET Framework и Aspect.log4net в составе системы Aspect.NET на практике.

Введение 2009 год, диссертация по информатике, вычислительной технике и управлению, Грачев, Михаил Константинович

За долгие годы существования и развития методологий программирования исследователями и практиками было создано значительное число различных подходов к созданию программного обеспечения (ПО). Без сомнения, наиболее признанным по праву считается объектно-ориентированный подход (ООП) [9]. За последние десятилетия он практически монопольно укоренился в сфере разработки ПО и является стандартом. Объектно-ориентированный подход решил огромное число проблем, существовавших в его предшественнике — процедурном подходе. Разбиение элементов предметной области на классы позволило многократно упростить и структурировать исходный код программ. Однако средствами ООП проблема структурированности все же не решается в лучшем виде. Всегда остается функциональность в рамках метода, класса или целых компонент, не поддающаяся вынесению и' подходящей локализации. Применяя, например, use-case анализ [11], можно вынести функциональность, решающую не более одной бизнес-задачи, из одного класса во множество элементарных классов, четко разграниченных с точки зрения выполняемых ими действий. Однако фрагменты исходного кода, обеспечивающие взаимодействие этого множества классов, все равно сохранятся и, более того, будут рассредоточены по исходному коду программы, ухудшая тем самым структурированность приложения и возможность его дальнейшей поддержки. Даже относительно удачное детальное проектирование модулей ПО практически не может решить эту задачу в рамках одной лишь ООП-методологии.

Аспектно-ориентированный подход к разработке ПО (другой вариант — аспектно-ориентированное программирование, АОП) [12, 13, 10] является технологией для решения широкого круга задач, позволяющей уменьшить сложность разработки и сопровождения программных продуктов.

Аспектно-ориентированный подход позволяет вынести сквозную функциональность (cross-cutting concerns) [12] — фрагменты, рассредоточенные по коду программы, отвечающие за реализацию некоторой функциональности, — из модулей программы, упрощая тем самым структуру исходного кода.

Вот типичные виды сквозной функциональности [10]:

• безопасность (security) — аутентификация пользователей и программ; авторизация (проверка полномочий для выполнения тех или иных действий); криптографические операции над данными с целью обеспечения их конфиденциальности и т.д.;

• надежность (reliability) — проверка инвариантов в классах, а также выполнения пред- и постусловий, обработка ошибок и т.д.;

• безопасность мпогопоточного выполнения кода (multi-threaded safety)1 — синхронизация по ресурсам или по событиям, выделение критических участков кода, взаимное исключение доступа к ним и др.;

• протоколирование и профилирование работы программы (logging and profiling) — трассировка начала и окончания выполнения каждой функции (каждого метода), вывод их аргументов и результатов, сбор и вывод статистической информации об исполнении различных фрагментов программы и т.д.

Более сложным примером является расширение компилятора путем реализации некоторых новых языковых конструкций, например, новых видов операторов. Очевидно, все фазы компилятора — лексический анализ, синтаксический анализ, семантический анализ, оптимизация и генерация кода — должны быть обновлены для этого. Это означает, что, помимо добавления набора новых модулей в существующий код компилятора, необходимо будет внедрить множество рассредоточенных фрагментов кода объявлений данных, функций, вызовов методов — чтобы связать воедино новые модули компилятора с уже существующими.

Теоретические основы АОП развиты множеством исследователей [11, 12, 36, 38], однако до сих пор не существует устоявшегося практического подхода, и зачастую даже базовые концепции АОП интерпретируются и используются разными авторами по-разному. По сей день не появилось инструментов, которые можно было бы легко интегрировать в существующие среды разработки ПО. Единственное исключение составляет система AspectJ [19, 39, 57] и ее расширение AspectJ Development Tools for Eclipse [63] для Java-платформы. Подобные средства для других платформ позволили бы создателям ПО использовать потенциал АОП в своих разработках, создавая более организованный, читаемый и сопровождаемый программный код.

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

Проект Aspect.NET разрабатывается группой исследователей математико-механического факультета под руководством и при непосредственном участии профессора Владимира Олеговича Сафонова с 2002 года. Цель этого проекта — создать современный АОП-инструмент на базе платформы Microsoft .NET [17], являющейся широко используемой многоязыковой платформой для разработки ПО. Кратко перечислим основные задачи проекта Aspect.NET.

• Создание полнофункционального инструментария для поддержки АОП на платформе .NET.

• Вклад в распространение методологии АОП в сообществе .NET.

• Создание базы для дальнейших исследований и разработок в области АОП.

Цели и задачи

Данная диссертация выполнена в рамках проекта Aspect.NET. В ней исследуются пользовательские интерфейсы в существующих АОП-инструментариях, предлагается ряд новых методов реализации пользовательского интерфейса АОП и описывается выполненная автором реализация предложенных методов.

Цели работы следующие.

1. Разработка методов реализации пользовательского интерфейса для инструментов АОП и их интеграции в современные среды для разработки программ.

2. Реализация пользовательского интерфейса Aspect.NET Framework на основе разработанных методов.

3. Реализация расширения Aspect.NET Framework для неявного применения АОП при решении некоторых типичных задач разработки и сопровождения программ.

4. Использование подсистемы Aspect.NET Framework в рамках системы Aspect.NET при разработке программного продукта для решения ряда задач.

Причины возникновения проблемы и ее актуальность

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

По оценкам, приведенным в работе [11], около 70% времени в проектах тратится на сопровождение и внесение изменений в готовый программный код, в связи с чем АОП и другие подобные подходы кажутся важными и перспективными. Сравнительно новая технология уже получила довольно широкое распространение, показав свою эффективность в ряде случаев.

Большинство инструментов для поддержки АОП разработано для Java-платформы (так или иначе все они связаны с технологией AspectJ). Авторы проекта Aspect.NET считают, что важным вкладом в развитие АОП могла бы послужить полноценная реализация этой методологии для современной и популярной платформы разработки — .NET. Реализация соответствующей среды разработки способна сыграть важную роль в привлечении разработчиков к использованию АОП-методологии на платформе .NET. Руководитель проекта Aspect.NET профессор В. О. Сафонов по-новому интерпретировал идеи Г. Кикжалеса, применяя их к широким возможностям платформы .NET.

Аспекты в системе Aspect.NET определяются при помощи описания классов со специальными аннотациями на метаязыке Aspect.NET ML [10, 16], независимого от выбранного языка .NET платформы. Одна из компонент Aspect.NET ответственна за конвертирование спецификаций на Aspect.NET ML-аннотаций в пользовательские атрибуты, предназначенные для использования другими компонентами Aspect.NET. Таким образом, информация об аспектах, включающая правила внедрения, хранится в виде пользовательских атрибутов в метаданных сборки. Такой подход обеспечивает независимость спецификации аспектов от их реализации.

Приведем пример описания аспекта в Aspect.NET. Аспект «Test» имеет одно действие «TestWriteAction», выводящее на консоль строку «test» перед вызовом любого метода с именем, начинающимся на «Write»: aspect Test public class Test rules before %call Write* public static void TestWriteAction()

Console.WriteLine("test");

Компоновщик Aspecl.NET реализован на основе инструментария построения оптимизирующих компиляторов Microsoft Phoenix RDK [28]. В частности, были использованы высокоуровневые сервисы и библиотеки (Phoenix API) для анализа, создания и модификации .NET-сборок. Компания Microsoft считает технологию Phoenix перспективной, что во многом повлияло на широту предоставленной функциональности и высокую производительность этой библиотеки.

Поиск точек внедрения и внедрение функциональности аспекта в Aspect.NET производятся статически, благодаря чему достигается максимальная производительность по сравнению с динамическим внедрением (Aspect#) и внедрением во время выполнения загрузки сборки (Weave.NET). Компоновщик работает в два прохода: поиск точек внедрения и собственно внедрение. Между двумя проходами пользователю предоставляется удобная и новая, по сравнению с другими инструментариями, возможность просмотреть найденные точки внедрения и отключить какие-либо нежелательные из них. Она достигается через реализованный нами графический интерфейс системы Aspect.NET Framework путем отображения иерархии найденных точек по модулям, классам, методам и параллельного отображения исходного кода целевого модуля (при условии наличия отладочной информации модуля).

Aspect.NET Framework реализован на основе Microsoft Visual Studio SDK [29] — наиболее функционально богатого API, который позволяет практически неограниченно настраивать и модернизировать среду разработки Microsoft Visual Studio: модифицировать обработчики любых событий среды разработки, преобразовывать окна, панели и мастера. Microsoft Visual Studio SDK дает возможность контролировать подсветку исходного кода и анализ языков программирования, разрабатывать и модифицировать отладчики для различных языков.

Процессы поиска и интеграции точек внедрения реализованы как задачи MSBuild [30] и запускаются незаметно для разработчика.

Заключение диссертация на тему "Разработка и реализация пользовательского интерфейса аспектно-ориентированного программирования"

Заключение

В ходе выполнения работы достигнуты следующие результаты:

1. Разработаны методы организации пользовательских интерфейсов для инструментов АОП, обеспечивающие надежность и наглядность процесса внедрения аспектов.

2. Реализована и интегрирована в Visual Studio 2008 подсистема Aspect.NET Framework, являющаяся пользовательским интерфейсом системы Aspect.NET.

3. Реализован инструмент Aspect.log4net, обеспечивающий неявное использование АОГ1 для протоколирования.

4. Подсистема Aspect.NET Framework в составе системы Aspect.NET успешно использована для протоколирования и проектирования с пред- и постусловиями в крупном программном продукте объемом более 40 человеко-лет.

Все полученные результаты являются новыми.

Предложенный способ реализации АОП интерфейса, а именно, интеграция в наиболее распространенную среду разработки Microsoft Visual Studio 2008, позволил сделать использование системы Aspect .NET максимально комфортным для .NET-программистов. Обусловлено это тем, что нужды программистов полностью обеспечиваются данной средой разработки, а созданный нами Aspect.NET Framework органично расширяет возможности Visual -Studio и прозрачно внедряется в процесс сборки проектов MSBuild. Ввиду того, что для платформы .NET не существует аналогов пользовательского интерфейса для систем АОП, за базовый образец при создании нами был выбран пользовательский интерфейс инструмента AspectJ для Java-платформы под названием AspectJ Development Tools.

Созданный нами пользовательский интерфейс собрал в себе всю функциональность, реализованную командой Грегора Кикжалеса в Aspect! Development Tools. Такую как, просмотр содержимого аспектов, раскрасчик аспектов, просмотр влияния аспекта на уровне текста исходного кода. Однако помимо этого была добавлена возможность управляемого пользователем внедрения аспектов с использованием графического пользовательского интерфейса.

К сожалению, реализованную соискателем надстройку Aspect.log4nct трудно сравнивать с единственным аналогом — расширением АОП-инструментария PostSharp под названием Log4PostSharp, появившимся позднее. Причиной тому является то, что в Log4PostSharp жестко зафиксировано множество правил внедрения аспекта с протоколирующей функциональностью, отсутствует графический пользовательский интерфейс и интеграция с процессом сборки проектов. Стоит заметить, что множество шаблонов правил в Aspect.log4net можно с легкостью изменять, создавая специфичные мастера-расширения для решения разнообразных прикладных задач за счёт неявного применения АОП.

Апробация Aspect.NET Framework как части Aspect.NET на крупных программных продуктах позволила объективно оценить эффективность созданного нами расширения и методологии АОП как таковой. В частности, нами была достигнута возможность уменьшения исходного кода крупного программного продукта на 11% за счёт вынесения проверки значений параметров методов и протоколирующей функциональности в аспекты, а применение Aspect. log4net позволило существенно снизить временные издержки, связанные с использованием АОП-инструментария.

Документация, примеры и дистрибутив системы доступны на сайте Microsoft Faculty Connection [72]. Результаты проекта были представлены на научных конференциях, опубликованы в международных и отечественных изданиях. Реализованный инструментарий был высоко оценен многими пользователями.

По теме диссертации опубликованы работы [1-4] и [8]. Статья [1] опубликована в журнале, входящем в перечень ВАК.

На данный момент нам видится ряд следующих перспективных задач дальнейшего развития темы.

Подсказки и контекстная помощь. Планируется добавить в Visual Studio контекстную помощь, которая, к примеру, будет раскрывать пользователю особенности языка Aspect.NET ML, а также помечать ошибочные предложения в редакторе исходного кода аспекта. Также пользу принесет и поддержка Visual Studio IntelliSense для Aspect.NET ML, то есть возможности подсказки возможных вариантов завершения набираемого пользователем Aspect.NET ML предложения. В AJDT for Eclipse подобная функциональность уже существует.

Кроме того в будущем планируется расширить панель редактора файлов Microsoft Visual Studio элементами управления на полях напротив строк, удовлетворяющих правилам аспектов. Эти элементы управления позволят еще более наглядно помечать указанные строки, а также более эффективно перемещаться от точек внедрения к правилам, породившим эти точки и наоборот.

Анализ и преобразование правил. Нам видится перспективным добавление к Aspect.NET Framework логики для автоматического упрощения правил либо приведения их удобочитаемому виду. Например, правило вида «(%after %call *) || (%after %call MyMethod)» очевидно, стоит привести к эквивалентному правилу «%after %call *».

В случае же если аспект разрабатывается специально для конкретной программы, возможность преобразования его правил с учетом структуры и особенностей результирующей программы также может оказаться востребованной. Например, если в программе есть всего две функции, с именами, начинающимися на «MyMethod»: «MyMethodl» и «MyMcthod2», то правило вида «(%after %call MyMethodl) || (%after %call MyMethod2)» можно было бы свернуть в более короткое «(%after %call MyMethod([l,2]{ 1}))» либо проделать обратную операцию — развернуть правило «(%after %call MyMethod*)» в «(%after %call MyMethodl) || (%after %call MyMethod2)». После такой замены к добавленному в код программы методу с именем, например, «MyMethod3» аспект применяться не будет.

Читатель правил. Аналогичная функциональность была описана в работе [54]. Читатель правил подразумевает возможность создания автоматического пояснения к правилу на адекватном человеческом языке. К примеру, правило вида «%call %before (private *.set*(.,int))>> можно пояснить следующей фразой: «before a call made to a private method with name starting with «set» defined on any type, and which last argument of an integer type». Подобная функциональность могла бы быть полезна для автоматического документирования исходного кода.

Интерактивное создание правила. Логичным развитием идеи мастера составления правил может стать функциональность, позволяющая создавать правила на основе существующих точек результирующей программы. К примеру, отмечая мышью те точки программы, на которые хотел бы повлиять разработчик аспекта создаваемым правилом. Подобная задача ввиду своей нетривиальности могла бы стать темой отдельного исследования.

Рефакторинг. В Visual Studio, начиная с версии 2005, появились встроенные возможности рефакторинга исходного кода программ, позволяющие осуществлять такие действия, как автоматическое переименование элементов программы, вычленение интерфейсов из классов, вынесение блоков кода в отдельные методы и ряд других полезных функций. Для более широкой поддержки Aspect.NET к этим функциям можно было бы добавить такие, как «преобразовать фрагмент кода программы в действие аспекта» и «выделить объявление данных программы во внедряемое объявление типа (inter-type declaration)». Поддержка хотя бы этих двух функций фактически позволяла бы говорить о поддержке базового механизма аспектизатора [8].

Библиография Грачев, Михаил Константинович, диссертация по теме Математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей

1. Грачев М.К. Aspect.NET Framework и его применение в задаче протоколирования. // Вестник Санкт-Петербургского Государственного Университета, 2008, Сер. 10, Вып. 4, С. 118-126.

2. Гамма Э., Хэлм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования: Паттерны проектирования. Пер. с англ.; Под ред. А. Слинкина. СПб.: Питер, 2001. 336 с.

3. С. Стелтинг, О. Маасен. Применение шаблонов Java. Библиотека профессионала. Издательство Вильяме, Санкт-Петербург, 2002, 567 с.

4. Е.А. Журавлев, В.А. Кирьянчиков. О возможности динамической интеграции аспектов в аспектно-ориентированном программировании.

5. Изв. СПбГЭТУ (ЛЭТИ) Сер. Информатика, управление и компьютерные технологии, 2002, Вып. 3, С. 81-86.

6. Booch G. Object-Oriented Analysis and Design with Applications. USA: Addison-Wesley, 2007, P. 430.

7. Safonov V.O. Using aspect-oriented programming for trustworthy software development. Wiley Interscience. John Wiley & Sons, 2008. P. 338.

8. Ivar Jacobson, Pan-Wei Ng, Aspect-Oriented Software Development with Use Cases. USA: Addison Wesley Professional, 2004, P. 464.

9. Kiczales G., Lamping J., Mendhekar A., Aspect-oriented programming. Proc. Of the European Conference on Object-oriented Programming (ECOOP) in Finland Springer-Verlag, June 1997. Heidelberg, Germany, 1997, Pp. 365389.

10. Greogor Kiczales Official Webpage. URL: http://www.cs.ubc.ca/-gregor/.

11. Safonov V. O. Aspect.NET: a new approach to aspect-oriented programming. NET Developer's Journal. 2003. 4. Pp. 36-40.

12. Safonov V. O. Aspect.NET: concepts and architecture. NET Developer's Journal. 2004, 10, Pp. 44-48.

13. Safonov V. O., Grigoriev D. Aspect.NET: concepts and architecture. NET Developer's Journal. 2005, 7, Pp. 28-33.

14. Simmons C., Rofail A. The Microsoft .Net Platform and Technologies. Indianapolis, USA: Prentice Hall PTR, 2001. P. 510.

15. Apache log4net Project Official Website. URL: http://logging.apache.org/log4net/.

16. Miles R., AspecU Cookbook. Cambridge, USA: O'Reilly, 2004. P. 354.

17. Flanagan D., Java in a Nutshell. Cambridge, USA: O'Reilly, 2005. Pp. 1224.

18. Weave.NET Project Officiai Webpage. URL: http://www.dsg.cs.tcd.ic/sites/ Weave.NET.html.

19. Puzzle.NET and NAspect Project Officiai Website. URL: http://www.puzzleframework.com/wikiengine/WikiPageViewer.aspx?ID=80.

20. Aspect# Project Officiai Webpage. URL: http://www.castIeproject.org/ AspectSharp/index.html.

21. Spring.NET Project Officiai Website. URL: http:// www.springframework.net/doc-latest/refercnce/html/ aop.html.

22. HyperJ Project Officiai Webpage. URL: http://www.research.ibm.com/ hyperspace/HyperJ/HyperJ.htm.

23. Frakes W. B. AOP Technologies and statement of the problem // Proc. of the 6th Intern. Conference on Software Reuse, ICSR-6. June 2000. Vienna, Austria, 2000, Pp. 390-397.

24. Wicca and Phx.Morph Project Official Webpage URL: http://www 1 .cs.columbia.edu/~eaddy/wicca/.

25. Microsoft Phoenix Project Official Webpage. URL: http://research.microsoft.com/phoenix.

26. Visual Studio SDK Description at MSDN Project Webpage. URL: http://msdn.microsoft.com/en-us/library/bb 166441 .aspx.

27. MSBuild Reference at MSDN Project Webpage. URL: http://msdn2.microsoft.com/en-us/library/0k6kkbsd.aspx.31. log4j Project Official Webpage. URL: http://dmi.ensica.fr/doc/Java/log4j/.

28. Campbell Т., Hassell J. Outlook 2007: Beyond the Manual. Berkeley, CA, USA: Apress, 2007. Pp. 47-51.

29. Aspect.NET Project Webpage at Microsoft Academic Resource Center. URL: https://www.academicresourcecenter.net/cuiTiculum/pfv.aspx?ID=6801.

30. The LOOM .NET Project Official Webpage. URL: http://www.dcl.hpi.uni-potsdam.de/research/loom/.

31. M. Blackstock. Aspect Weaving with C# and .NET. URL: http://www.cs.ubc.ca/ ~michael/publications/AOPNET5.pdf.

32. Xiong Y., Wan F. CCC: An Aspect Oriented Intermediate Language on .NET Platform. URL: http://www.Fit.ac.jp/~zhao/waosd2004/pdf/Xiong.pdf.

33. AOP.NET Project Official Webpage. URL: http://sourceforge.net/projects/aopnet/.

34. D. Lafferty, V. Cahill. Language Independent Aspect Oriented Programming. Proceedings of OOPSLA March 2003.

35. The AspectJ Project Official Website. URL: www.aspectj.org.

36. AspectWerkz Project Official Webpage. URL: http://aspectwerkz.codehaus.org/.

37. Чистяков В. R# метапрограммирование в .NET. // RSDN Magazine #5 — 2004. URL: http://rsdn.ru/projects/rshaф/article/ rsharpmag.xml.

38. M. Aksit, L. Bergmans, and S. Vural. An Object-Oriented Language-Database Integration Model: The Composition-Filters Approach. In Proceedings of the ECOOP'92 Conference, LNCS 615, Springer-Verlag, 1992.

39. K.Leiberherr. Component Enhancement: An Adaptive Reusability Mechanism for Groups of Collaborating Classes. In Information Processing'92, 12th World Computer Congress, Madrid, Spain, J. van Leeuwen (Ed.), Elsevier, 1992, Pp. 179-185.

40. Czarnecki K., Eisenecker U. Generative Programming: Methods, Tools, and Applications. Addison-Wesley, June 2000, P. 864.

41. Masuhara, J., Kiczales, G. Modeling Crosscutting in Aspect-Oriented Mechanisms. Proceedings of ECOOP'2003.

42. Hannemann, J., Kiczales, G. Overcoming the Prevalent Decomposition in Legacy Code. Proceedings of Workshop on Advanced Separation of Concerns, International Conference on Software Engineering (May 2001, Toronto, Canada).

43. Aspect Browser: Bill Griswold's Web pages (University of California, San Diego). URL: www.cs.ucsd.edu/users/wgg.

44. FEAT: Martin Robillard's and Gal Murphy's Web pages (University of British Columbia, Canada). URL: www.cs.ubc.ca/~mrobilla/feat/index.html.

45. Shukla, D., Fill, S. and Sells, D. Aspect-Oriented Programming Enables Better Code Encapsulation and Reuse. MSDN Magazine, March 2002.

46. Aspect-Oriented Software Development Network Official Website: www.aosd.net.

47. Rational Software Official Website. URL: http://www.rational.com.

48. Subject-Oriented Programming Project Official Webpage, IBM Thomas J. Watson Research Center, Yorktown Heights, New York. URL: http://www.research.ibm.com/sop/.

49. The TRESE Project Official Webpage, University of Twente, The Netherlands. URL: http://www.utwente.nl/ewi/trese/.

50. Ch. Simony. The Death of Computer Languages, The Birth of Intentional Programming, Microsoft Research, 1995. URL: http://research.microsoft.com/ pubs/view.aspx?trid=4.

51. Laddad, R., I want my aop!, part 1., 2002. URL: http://www.javaworld.com/ javaworld/jw-01-2002/j w-0118-aspect.html.

52. The Aspectl Programming Guide 1998-2002, Xerox Corporation.

53. I. Kiselev. Aspect-Oriented Programming with Aspectl. Indianapolis, IN, USA: SAMS Publishing, 2002. P. 288.

54. J. Hannemann, G. Kiczales. Design pattern implementations in Java and Aspect! OOPSLA 02, New York, USA, November 2002. Pp. 161-173.

55. M. Lippert, C Videira Lopes. A Study on Exception Detection and Handling Using Aspect-Oriented Programming. Xerox PARCTechnical Report P9910229 CSL-99-1, 1999.

56. B. Meyer. Applying Design by Contract. Prentive Hall, 1992.

57. Eick, S.G., J.L. Steffen, and E.E. Sumner, Seesoft A Tool For Visualizing Line Oriented Software Statistics. IEEE Transactions on Software Engineering, 1992. 18(11).

58. Clement A., Colyer A., Kersten M. Aspect-Oriented Programming with AJDT, Proceedings of Workshop on Analysis of Aspect-Oriented Software (2003, University of Darmstadt, Germany).

59. Richter, J. Applied Microsoft .NET Framework Programming. Microsoft Press, 2002, P. 640.

60. HyperJ Project Official Webpage. URL: http://www.research.ibm.com/ hyperspace/ HyperJ/HyperJ.htm.

61. AJDE for SunONE/NetBeans Official Webpage. URL: http://aspectj4netbean.sourceforge.net/.

62. AJDE for JBuilder Official Webpage. URL: http://aspectj4jbuildr.sourceforge.net/.

63. Eclipse AspectJ Development Tools Project Official Webpage. URL: http://www.eclipse.org/ajdt.

64. Eclipse Project Official Website. URL: http://www.eclipse.org.

65. Schildt H., C# 3.0: The Complete Reference. McGraw-Hill Osborne Media, December 2008, P. 912.

66. Mono Project Official Website. URL: http://mono-project.com.

67. Freeman E., Head First Design Patterns. O'Reilly, October 2004, P. 688.

68. Webpage of Aspect.NET on Microsoft Faculty Connection Website. URL: http://www.facultyresourcecenter.com/cumculum/pfv.aspx?ID=6801.

69. AspectDNG Project Official Webpage. URL: http://aspectdng.tigris.org/.

70. Basset P. Framing software reuse — lessons from real world. Practice Hall, 1996,384 c.

71. PostSharp Project Official Website. URL: http://www.postsharp.org/.

72. Log4PostSharp Project Official Webpage. URL: http://code.google.eom/p/postsharp-user-plugins/wiki/Log4PostSharp.