Интернет магазин китайских планшетных компьютеров



Компьютеры - Аспектно-ориентированная разработка программного обеспечения - Обзор

22 января 2011


Оглавление:
1. Аспектно-ориентированная разработка программного обеспечения
2. Цели
3. Обзор



Суть аспектно-ориентированной разработки

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

Квантификация и забывчивость

Самое известное определение природы АОРПО принадлежит Филмену и Фридману, которые характеризовали АОРПО в виде записи аспектно-ориентированность = квантификация + забывчивость.

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

Вместо термина забывчивость часто используется понятие невторгаемости. Термин невторгаемость обозначает то, что аспекты могут добавить поведение к программе, не внося изменения в саму программу, но при этом не предполагает, что программа ничего не знают об аспектах.

Определение Филмена ориентации аспекта часто считают слишком ограниченным. Многие аспектно-ориентированные подходы используют аннотации, чтобы явно объявить указать расположение мест, где аспекты определяют поведение. Эти подходы требуют ручного контроля и модификации других модулей в системе и поэтому являются вторгающимися. Кроме того АОРПО не обязательно требует квантификации. Аспекты могут использоваться, чтобы изолировать функции, реализация которых была бы иначе перепутана с другими функциями. Такие аспекты не обязательно используют квантификацию во многих точках системы.

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

Понятия и терминология

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

Модель точки соединения

Точки соединения - точки в выполнении программы, такие как вызовы метода, где поведение, предоставленное аспектами, объединено. Точка соединения - точка в выполнении программы, которая используется, чтобы определить динамическую структуру сквозных проблем.

Модель точки соединения аспектно-ориентированного языка определяет типы точек соединения, которые поддерживаются аспектно-ориентированным языком и возможными точками столкновения между аспектами и базовыми модулями.

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

Примеры точек соединения

  • выполнение метода
  • вызов метода
  • доступ для чтения поля и доступ для записи
  • выполнение обработчика исключений
  • статическая и динамическая инициализация

Метод вызова точки соединения - это действия объекта, который получает этот вызов. Он включает все действия вызова от определения аргументов до возврата.

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

Объявление среза

Квантификация по точкам соединения определяется на уровне языка. Эта квантификация может быть неявной в структуре языка или может быть выражена, с использованием подобной запросу конструкции, называемой срезом. Срезы определены как предикат в синтаксическом дереве программы, и объявляет интерфейс, который ограничивает, какие элементы основной программы выбраны срезом. Срез выбирает определенные точки соединения и значения. Синтаксическая формулировка среза может изменяться в различных подходах. Обычно срез может составляться из других срезов с помощью булевых операторов И, ИЛИ и НЕ. С помощью подстановочных знаков выражения среза могут выбирать сразу многие события. Например, в синтаксисе AspectJ, срез move

pointcut move: call)

выбирает все вызовы к публичным методам Figure.

Срез cflow выбирает точки соединения, на основании того, возникают ли они в динамическом контексте других точек соединения. Например, в синтаксисе AspectJ cflow) выбирает каждую точку соединения, которая находится в динамическом контексте точек соединения, выбранных срезом move.

Срезы могут быть разделены на две категории:

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

Тела совета

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

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

Кроме того существуют более общие способы описать упорядочивание тел совета с помощью графиков частичного порядка.

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

Межтиповые описания

Межтиповые описания позволяют программисту изменять статическую структуру программы, такую как члены класса и иерархия классов. Они позвляют вставлять новые члены классов и опускать классы ниже в иерархии классов.

Аспекты

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

Объединение аспектов

Объединение аспектов - процесс согласования аспектов с другими модулями системы. Объединение аспектов производится специализированным компилятором, названным объединителем аспектов.

Пример

Рисунок 1 — Редактор рисунка в UML
Рисунок 2 — Аспектно-ориентированный редактор рисунка в UML

На рисунке 1 показан типичный пример сквозной проблемы в графическом редакторе, взятый от литературы по АОРПО. В нём показан абстрактный класс Shape, который может быть перемещен. Каждый раз, когда он перемещен, дисплей должен быть обновлен. Так же на рисунке 1 так же показаны два подкласса Shape: Line и Point, которые реализуют его функциональность. Проблема обновления дисплея рассеяна в реализации обоих подклассов. На рисунке 2 показана аспектно-ориентированная реализация той же самой системы, где функциональность обновления дисплея находится в отдельном аспекте.

Дескриптор среза move на рисунке 2 перехватывает выполнение методов moveBy подклассов Shape и вызывает обновления дисплея после того как их выполнение закончится. В результате проблема становится отдельным модулем, что облегчает развитие и поддержку системы.

Аспектно-ориентированная разработка требований

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

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

Аспектно-ориентированная архитектура системы

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

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

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

Аспектно-ориентированное проектирование имеет, как и любой другой вид проектирования программного обеспечения, целью характеризацию и спецификацию поведения и структуры системы. Его особенность при проектировании программного обеспечения заключается в том, что проблемы, которые будут рассеяными и запутанными в традиционных подходах, в нём могут быть отдельными модулями. Как правило, такой подход включает в себя процесс и язык. Процесс на основе требований создаёт модель проекта. Полученная в результате модель представляет собой набор отдельных проблем и связей между ними. Язык определяет конструкции, с помощью которых можно описать элементы, представленные в проекте, и отношения, которые могут существовать между ними. В частности конструкции позволяют описать модуль проблемы и спецификацию состава проблемы, учётом противоречий. Кроме того, проектирование на основе каждой проблемы-модуля сравнивается с обычным проектированием программного обеспечения.

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

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

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

Поддержка разработчиков приложений

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

  • основные концепции аспектно-ориентированного программирования
  • программирование на аспектно-ориентированных языках
  • составление программных компонентов, написаннных на любом языке с помощью аспектно-ориентированных методов композиции
  • среды аспектно-ориентированного программирования

Поддержка разработчиков языка

Области использования при поддержке построения аспектных языков:

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

Формальные методы для поддержки аспектно-ориентированной разработки

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

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

Каждый из вышеупомянутых методов может быть использован для:

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

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

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

Подпрограммное обеспечение и АОРПО в значительной степени дополняют друг друга. Их основные области использования:

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

Использование

  • IBM Websphere Application Server - сервер приложений Java. В нём используется ApectJ для изоляции функций различных вариантах.
  • JBoss Application Server - свободный сервер приложений java с открытым исходным кодом, который поддерживает Java EE. Ядро AS JBoss интегрировано с аспектно-ориентированным языком программирования JBoss. Сервер приложений использует AOP JBoss, чтобы развернуть службы, такие как управление безопасностью и управление транзакциями.
  • Oracle TopLink
  • SAP
  • Sun Microsystems использует AspectJ, чтобы оптимизировать разработку мобильных приложений для платформы Java ME.
  • Siemens Soarian - система управления медицинской информации. Soarian использует AspectJ, чтобы для реализации сквозных функций, таких как трассировка, аудит и мониторинг производительности в процессе быстрой разработки.
  • Motorola wi4 - системой сотовой инфраструктуры, которая поддерживает стандарт беспроводного широкополосного доступа WiMAX. Программное обеспечение управления wi4 разработано, с использованием аспектно-ориентированного расширения стандарта UML 2.0 называющегося WEAVR. WEAVR используется при разработки для отладки и тестирования.
  • ASML - производитель систем литографии для полупроводниковой отрасли. ASML использует аспектно-ориентированное расширение C под названием Mirjam, для реализации трассировки и профилирования.
  • Glassbox - агент поиска и устранения неисправностей для приложений Java, который автоматически диагностирует типичные проблемы. Модуль инспектора Glassbox контролирует работу виртуальной машины с Java с помощью AspectJ.
  • .NET 3.5 поддерживает аспектно-ориентированные проблемы с помощью Unity.


Просмотров: 2916


<<< Архитектура программного обеспечения
Внедрение зависимости >>>