Разработка Android фреймворка для аспектно-ориентированного программирования | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 4 мая, печатный экземпляр отправим 8 мая.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №26 (130) декабрь 2016 г.

Дата публикации: 29.11.2016

Статья просмотрена: 80 раз

Библиографическое описание:

Данилов, С. В. Разработка Android фреймворка для аспектно-ориентированного программирования / С. В. Данилов. — Текст : непосредственный // Молодой ученый. — 2016. — № 26 (130). — С. 141-143. — URL: https://moluch.ru/archive/130/35901/ (дата обращения: 25.04.2024).



Аспектно-ориентированная парадигма программирования хорошо зарекомендовала себя при использовании в разработке высоконагруженных систем. Она позволяет создавать общую логику для разных классов, не связанных наследованием или агрегацией. Однако для платформы Android не существует реализации аспектного компилятора. Фреймворк ProxPects предназначен для создания аспектов и генерации прокси-объектов [1], при вызове методов которых будут применяться advice’ы аспектов.

Ключевые слова:Android, Java, аспектно-ориентированное программирование, фреймворк

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

Логирование, обработка исключений, управление транзакциями, кеширование [2] и ограничение времени выполнения — примеры сквозной функциональности. Другие примеры: трассировка; аутентификация и проверка прав доступа; контрактное программирование. Для программы, написанной в парадигме ООП, любая функциональность, по которой не была проведена декомпозиция, является сквозной.

Цель работы.

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

Описание фреймворка.

Принцип работы фреймворка:

− Для реализации сквозной логики необходимо иметь возможность перехватывать вызовы методов объектов. Для этого можно воспользоваться механизмом проксирования — создаётся InvocationHandler, управляющий процессом выполнения метода и имеющий доступ к оригинальному объекту.

− Вызов метода делится на три части: before, around и after. Каждый аспект также реализует три эти метода и может вернуть результат или создать исключение раньше, чем управление получит оригинальный объект.

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

Фреймворк обходит все методы интерфейса и обрабатывает их аннотации. Если аннотация помечена аннотацией @Aspect, то для этого метода будет создан обработчик вызова со списком аспектов, которым необходимо передать управление в случае вызова. При этом учитывается порядок аннотаций, а также наследование:

− Первым управление получает аспект, объявленный раньше, т. е. ближе к телу метода.

− Если один и тот же аспект применяется к родительскому классу и к классу наследнику, будут использованы параметры класса наследника.

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

Интерфейс InvocationHandler позволяет создавать checked исключения при обработке вызовов методов, однако в разработанном фреймворке аспектам прямо запрещается создание checked исключений, чтобы избежать ситуаций, когда в try-catch блок оборачивается метод в сигнатуре которого нет checked исключения. Таким образом все исключения, которые могут создавать аспекты, являются runtime исключениями и могут быть обработаны только в try-catch блоках для runtime исключений или в UncaughtExceptionHandler.

Рис. 1. Основные классы фреймворка

Реализованные аспекты.

Для тестирования возможностей фреймворка были реализованы следующие аспекты: Cacheable и Timeout.

Cacheable-аспект позволяет кэшировать результаты вызова метода. Ключом в кэше является список аргументов. Параметром аннотации является ttl — время хранения кэшированного значения (по умолчанию -1, бесконечное хранение).

Timeout-аспект позволяет ограничивать время выполнения метода, таким образом методы, которые могут выполнятся длительное/неограниченное время, гарантированно не превысят заданный разработчиком промежуток времени. Параметрами аннотации являются timeout (по умолчанию 1 секунда) — максимальное возможное время выполнение метода и maxParallel — количество возможных параллельных вызовов метода (по умолчанию 1).

Рис. 2. Пример использования аспекта Cacheable в JUnit-тесте

Результаты.

В результате разработки был создан фреймворк «ProxPects». Данный фреймворк позволяет использовать аспектно-ориентированную парадигму при разработке приложений для AndroidOS. Исходные коды фреймворка опубликованы в открытом репозитории GitHub. Фреймворк также можно подключить, используя Maven/Gradle через сервис jitpack.

Варианты развития фреймворка.

Прототип фреймворка «ProxPects» может быть доработан следующими улучшениями:

− Создание плагина для AOT компиляции, чтобы ускорить создание прокси-объектов и избежать runtime сканирования классов.

Использование CGLIB для создания прокси-объектов без необходимости создания java-интерфейса класса.

Литература:

  1. Java class Proxy // Docs Oracle. URL: https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Proxy.html (дата обращения: 27.11.2016).
  2. Transactions, Caching and AOP: understanding proxy usage in Spring // Spring. URL: https://spring.io/blog/2012/05/23/transactions-caching-and-aop-understanding-proxy-usage-in-spring (дата обращения: 27.11.2016).
Основные термины (генерируются автоматически): CGLIB, аспект, разработка приложений, AOT, вызов методов, исключение, параметр аннотации.


Ключевые слова

Фреймворк, Ява, Android, аспектно-ориентированное программирование, фреймворк, Java

Похожие статьи

Современные технологии управления фоновыми потоками...

По окончании потока данных Observable завершит свою работу, уведомляя соответствующим вызовом метода подписчика.

Современные подходы к разработке мобильных приложений для платформы Android.

Современные подходы к разработке мобильных приложений для...

Сорока В. Г., Сабурова В. И., Фатеев Д. С. Современные подходы к разработке мобильных приложений для платформы Android

Аннотация @GET указывает на то, что будет выполнен get-запрос.

Это делает метод observeOn() с параметром AndroidSchedulers.mainThread().

Использование семантической аннотации для управления...

Аннотирование требований с использованием семантической аннотации позволяет

Ключевые слова: управление требованиями, семантическое расстояние, разработка

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

Анализ методов разработки UX (User eXperience) для...

Обобщенный анализ методов проектирования и разработки автоматизированного составления расписания образовательных учреждений. Комбинация средств UML И CSP-OZ для разработки приложений баз данных.

Расширение отладочного интерфейса PyDbg для противодействия...

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

Сетевые атаки. Виды. Способы борьбы | Статья в сборнике...

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

И, наконец, злоумышленник анализирует характеристики приложений, работающих на хостах.

Особенности разработки языковых модулей для IDE NetBeans на...

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

Что, в свою очередь, позволяет использовать IDE NetBeans в качестве основной среды разработки веб-приложений на основе фреймворка RubyonRails.

Алгоритмы распознавания объектов | Статья в сборнике...

Выбор конкретных методов обусловлен, особенностями объекта, который требуется распознать. Часто бывает, что задача распознавания ставится неформальным образом — свойства искомого объекта задаются без строгих математических параметров.

Проверка корректности программного обеспечения

При разработке информационных систем очень важно контролировать качество программного обеспечения.

По этому стандарту качество можно рассматривать как совокупность различных аспектов.

Тестирование является динамическим методом проверки программ.

Похожие статьи

Современные технологии управления фоновыми потоками...

По окончании потока данных Observable завершит свою работу, уведомляя соответствующим вызовом метода подписчика.

Современные подходы к разработке мобильных приложений для платформы Android.

Современные подходы к разработке мобильных приложений для...

Сорока В. Г., Сабурова В. И., Фатеев Д. С. Современные подходы к разработке мобильных приложений для платформы Android

Аннотация @GET указывает на то, что будет выполнен get-запрос.

Это делает метод observeOn() с параметром AndroidSchedulers.mainThread().

Использование семантической аннотации для управления...

Аннотирование требований с использованием семантической аннотации позволяет

Ключевые слова: управление требованиями, семантическое расстояние, разработка

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

Анализ методов разработки UX (User eXperience) для...

Обобщенный анализ методов проектирования и разработки автоматизированного составления расписания образовательных учреждений. Комбинация средств UML И CSP-OZ для разработки приложений баз данных.

Расширение отладочного интерфейса PyDbg для противодействия...

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

Сетевые атаки. Виды. Способы борьбы | Статья в сборнике...

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

И, наконец, злоумышленник анализирует характеристики приложений, работающих на хостах.

Особенности разработки языковых модулей для IDE NetBeans на...

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

Что, в свою очередь, позволяет использовать IDE NetBeans в качестве основной среды разработки веб-приложений на основе фреймворка RubyonRails.

Алгоритмы распознавания объектов | Статья в сборнике...

Выбор конкретных методов обусловлен, особенностями объекта, который требуется распознать. Часто бывает, что задача распознавания ставится неформальным образом — свойства искомого объекта задаются без строгих математических параметров.

Проверка корректности программного обеспечения

При разработке информационных систем очень важно контролировать качество программного обеспечения.

По этому стандарту качество можно рассматривать как совокупность различных аспектов.

Тестирование является динамическим методом проверки программ.

Задать вопрос