Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Аспектно-ориентированная разработка программного обеспечения - Обзор22 января 2011Оглавление: 1. Аспектно-ориентированная разработка программного обеспечения 2. Цели 3. Обзор Суть аспектно-ориентированной разработкиОсновной задачей аспектно-ориентированной разработки программного обеспечения является исследование и внедрение новых способов для модульной разработки программного обеспечения. Подходы аспектно-ориентированного программирования предлагают обобщённые методы разделения проблем на модули в проекте, коде, документации и других вещах, разработанных во время жизненного цикла программного обеспечения. Такие модули проблем называют аспектами. В некоторых подходах основную проблему выбирают как базу. Различные подходы обеспечивают различную гибкость относительно набора аспектов. Квантификация и забывчивостьСамое известное определение природы АОРПО принадлежит Филмену и Фридману, которые характеризовали АОРПО в виде записи аспектно-ориентированность = квантификация + забывчивость. Забывчивость обозначает, что у программа нет знает, какие аспекты изменяют её, тогда как квантификация обозначает, что аспекты могут влиять на многие части в програмы. Вместо термина забывчивость часто используется понятие невторгаемости. Термин невторгаемость обозначает то, что аспекты могут добавить поведение к программе, не внося изменения в саму программу, но при этом не предполагает, что программа ничего не знают об аспектах. Определение Филмена ориентации аспекта часто считают слишком ограниченным. Многие аспектно-ориентированные подходы используют аннотации, чтобы явно объявить указать расположение мест, где аспекты определяют поведение. Эти подходы требуют ручного контроля и модификации других модулей в системе и поэтому являются вторгающимися. Кроме того АОРПО не обязательно требует квантификации. Аспекты могут использоваться, чтобы изолировать функции, реализация которых была бы иначе перепутана с другими функциями. Такие аспекты не обязательно используют квантификацию во многих точках системы. Поэтому особенности аспектно-ориентированной разработки лучше характеризуются модульным принципом реализации сквозных проблем, абстракциями аспектно-ориентированных языков, которые позволяют использовать модульность, и аспектно-ориентированными операторами. Понятия и терминологияАспектно-ориентированные подходы оказывают необходимые средства для того, чтобы отделить проблемы в отдельные модули, названные аспектами. Аспект - модуль, который инкапсулирует проблему. Большинство аспектно-ориентированных языков поддерживает неизменяющее введение поведения в базовую программу и квантификацию по точкам в программе, где это поведение должно быть представлено. Такие точки называют точками соединения. Модель точки соединенияТочки соединения - точки в выполнении программы, такие как вызовы метода, где поведение, предоставленное аспектами, объединено. Точка соединения - точка в выполнении программы, которая используется, чтобы определить динамическую структуру сквозных проблем. Модель точки соединения аспектно-ориентированного языка определяет типы точек соединения, которые поддерживаются аспектно-ориентированным языком и возможными точками столкновения между аспектами и базовыми модулями. Динамическая интерпретация точек соединения позволяет представить информацию о времени выполнения, такую как вызывающая сторона или вызываемый метода от точки соединения до соответствующего среза. В настоящее время есть различные модели точки соединения, большинство из которых все еще разрабатываются. Они в сильно зависят от базового языка программирования и аспектно-ориентированного языка. Примеры точек соединения
Метод вызова точки соединения - это действия объекта, который получает этот вызов. Он включает все действия вызова от определения аргументов до возврата. Многие подходы АОП реализуют поведение аспекта перехватами в теневых точках соединения, которые является статической проекцией точки соединения в коде программы. Объявление срезаКвантификация по точкам соединения определяется на уровне языка. Эта квантификация может быть неявной в структуре языка или может быть выражена, с использованием подобной запросу конструкции, называемой срезом. Срезы определены как предикат в синтаксическом дереве программы, и объявляет интерфейс, который ограничивает, какие элементы основной программы выбраны срезом. Срез выбирает определенные точки соединения и значения. Синтаксическая формулировка среза может изменяться в различных подходах. Обычно срез может составляться из других срезов с помощью булевых операторов И, ИЛИ и НЕ. С помощью подстановочных знаков выражения среза могут выбирать сразу многие события. Например, в синтаксисе AspectJ, срез move pointcut move: call) выбирает все вызовы к публичным методам Figure. Срез cflow выбирает точки соединения, на основании того, возникают ли они в динамическом контексте других точек соединения. Например, в синтаксисе AspectJ cflow) выбирает каждую точку соединения, которая находится в динамическом контексте точек соединения, выбранных срезом move. Срезы могут быть разделены на две категории:
Тела советаТело совета - код, который выполняется, когда точка соединения достигнута. Совет выделяет в отдельный модуль функциональные детали проблемы. Моменты, в которые тела советов, зависящие от аспектов, выполняются могут быть различные, в том числе:
Кроме того существуют более общие способы описать упорядочивание тел совета с помощью графиков частичного порядка. Когда выполнение точки соединения удовлетворяет выражению среза, выполняются основа и код совета, связанный с точкой соединения. Совет может взаимодействовать с остальными система через экземпляр точки соединения, имеющий информацию о контексте события, которое инициировало совет, например параметры вызова метода или целевой объект вызова. Межтиповые описанияМежтиповые описания позволяют программисту изменять статическую структуру программы, такую как члены класса и иерархия классов. Они позвляют вставлять новые члены классов и опускать классы ниже в иерархии классов. АспектыАспект - модуль, который инкапсулирует проблему. Аспект составлен из срезов, тел советов и межтиповых описаний. В некоторых подходах аспект может также содержать классы и методы. Объединение аспектовОбъединение аспектов - процесс согласования аспектов с другими модулями системы. Объединение аспектов производится специализированным компилятором, названным объединителем аспектов. ПримерНа рисунке 1 показан типичный пример сквозной проблемы в графическом редакторе, взятый от литературы по АОРПО. В нём показан абстрактный класс Shape, который может быть перемещен. Каждый раз, когда он перемещен, дисплей должен быть обновлен. Так же на рисунке 1 так же показаны два подкласса Shape: Line и Point, которые реализуют его функциональность. Проблема обновления дисплея рассеяна в реализации обоих подклассов. На рисунке 2 показана аспектно-ориентированная реализация той же самой системы, где функциональность обновления дисплея находится в отдельном аспекте. Дескриптор среза move на рисунке 2 перехватывает выполнение методов moveBy подклассов Shape и вызывает обновления дисплея после того как их выполнение закончится. В результате проблема становится отдельным модулем, что облегчает развитие и поддержку системы. Аспектно-ориентированная разработка требованийАспектно-ориентированная разработка требований сосредотачивается на идентификации, спецификации и представлении сквозных свойств на уровне требований. Примерами таких свойств является безопасность, мобильность, доступность и необходимость работы в реальном времени. Сквозные свойства - требования, варианты использования или возможности, которые серьёзно влияют на другие требования или части архитектуры. Аспектно-ориентированные подходы разработки требований - методы, которые явно учитывают функциональные и нефункциональные сковзные проблемы в дополнение к несквозным. Поэтому эти подходы сосредотачиваются на систематической и модульной трактовке, объяснении, составлении и прослеживании сквозных функциональных и нефункциональных проблем через подходящие абстракции, представления и механизмы составления, адаптированные в соответствии с областью разработки требований. Аспектно-ориентированная архитектура системыАспектно-ориентированная архитектура системы сосредотачивается на локализации и спецификации сквозных проблем в архитектуре проектов. Сквозные проблемы, которые появляются на архитектурном уровне, не могут быть построены из модулей с помощью изменения архитектуры программного обеспечения, с помощью обычных архитектурных абстракций. Аспектно-ориентированные языки архитектуры системы предлагают механизмы, позволяющие точно идентифицировать, специфицировать и оценить аспекты на уровне архитектуры проекта. Аспектно-ориентированная архитектура начинается с наблюдения, с помощью которого нужно идентифицировать, специфицировать и оценить аспекты на уровне архитектуры проекта. Аспектная архитектура даёт описывает шагов для идентификации архитектурных аспектов. Эта информация используется, для того чтобы перепроектировать имеющуюся архитектуру, так чтобы архитектурные аспекты были явно определены. Аспектно-ориентированное проектированиеАспектно-ориентированное проектирование имеет, как и любой другой вид проектирования программного обеспечения, целью характеризацию и спецификацию поведения и структуры системы. Его особенность при проектировании программного обеспечения заключается в том, что проблемы, которые будут рассеяными и запутанными в традиционных подходах, в нём могут быть отдельными модулями. Как правило, такой подход включает в себя процесс и язык. Процесс на основе требований создаёт модель проекта. Полученная в результате модель представляет собой набор отдельных проблем и связей между ними. Язык определяет конструкции, с помощью которых можно описать элементы, представленные в проекте, и отношения, которые могут существовать между ними. В частности конструкции позволяют описать модуль проблемы и спецификацию состава проблемы, учётом противоречий. Кроме того, проектирование на основе каждой проблемы-модуля сравнивается с обычным проектированием программного обеспечения. Аспектно-ориентированное программированиеАОП включает методы программирования и инструменты, которые поддерживают модульность проблем на уровне исходного кода. Так же как и любой другой язык программирования, аспектно-ориентированный язык обычно состоит из двух частей: спецификация языка и реализация. Следовательно, есть две соответствующих области применения: поддержка разработчиков языка и поддержка разработчиков приложений. Поддержка разработчиков приложений Аспектно-ориентированный подход обеспечивает реализацию проблем и способы, как составить эти независимо реализованные проблемы. Но поскольку основным руководством для разработчиков приложений является спецификация такого языка, то не гарантируется, что разработчик приложений сделает высококачественные аспектно-ориентированные программы. Основные области использования:
Поддержка разработчиков языка Области использования при поддержке построения аспектных языков:
Формальные методы для поддержки аспектно-ориентированной разработкиФормальные методы могут использоваться как для семантического определения аспектов, так и для анализа и проверки аспектно-ориентированных систем. Аспектно-ориентированное программирование расширяет нотации программирования с помощью модулей аспекта, которые изолируют объявление того, когда аспект должен быть применен и какие действия должны быть выполнены, когда это условие достигнуто. Экспертиза формальных семантических определений конструкций аспекта полезны разработчикам языка, для того чтобы дать глубокое понимание различий среди конструкций. Аспекты могут снижать надежность системы, в которую они включены, и, кроме того, могут нарушить работу важных частей системы, которые нормально работали без аспектов. Кроме того аспекты добавляют необходимые сквозные свойства к системе. В результате возникают проблемы о правильности работы аспектов и проверке. Основные виды экспертизы:
Каждый из вышеупомянутых методов может быть использован для:
Некоторые подходы уже используются на языках аспекта, а другие все еще находятся на стадии исследования и не готовы к обычному промышленному применению. Однако, их понимание важно для разработчиков языка, чтобы эффективно использовать аспекты, особенно в случаях, где важна безопасность. Аспектно-ориентированное подпрограммное обеспечениеПодпрограммное обеспечение и АОРПО в значительной степени дополняют друг друга. Их основные области использования:
Использование
Просмотров: 2916
|