В аспекте-ориентированного программирования , A срез точек представляет собой набор точек соединения . Pointcut указывает, где именно применять совет , что позволяет разделить проблемы и помогает в модульной бизнес-логике. [1] Pointcut часто указываются с использованием имен классов или имен методов, в некоторых случаях с использованием регулярных выражений, соответствующих имени класса или метода. Различные платформы поддерживают разные выражения Pointcut; Синтаксис AspectJ считается стандартом де-факто. Фреймворки доступны для различных языков программирования, таких как Java , Perl , Ruby и многих других, которые поддерживают pointcut.
Задний план
Из-за ограничений в различных языках программирования сквозная задача не разделена на модули. Межсекторальное беспокойство относится к частям программного обеспечения, которые логически принадлежат одному модулю и влияют на всю систему: например, это может быть безопасность или ведение журнала. [2] Аспектно-ориентированное программирование]] пытается решить эти сквозные проблемы, позволяя программистам писать модули, называемые аспектами, которые содержат фрагменты кода, выполняемые в определенной точке. Выражения, необходимые для выбора конкретной точки, привели к созданию Pointcut Expressions.
Исполнение
Каждый раз, когда выполнение программы достигает одной из точек соединения, описанных в pointcut, выполняется фрагмент кода, связанный с pointcut (называемый advice). Это позволяет программисту описать, где и когда должен выполняться дополнительный код в дополнение к уже определенному поведению. Pointcut позволяет добавлять аспекты к существующему программному обеспечению, а также разрабатывать программное обеспечение с четким разделением задач , при этом программист объединяет (объединяет) различные аспекты в законченное приложение.
Пример
Предположим, есть приложение, в котором мы можем изменять записи в базе данных . Каждый раз, когда пользователи изменяют базу данных, мы хотим иметь журнал с информацией о том, кто изменяет записи. Традиционный способ ведения журнала - это вызов метода журнала непосредственно перед изменением базы данных. С аспектно-ориентированным программированием мы можем применить pointcut к методу Modify Database и получить совет, который вызывается для регистрации необходимой информации. [3]
Выражения
Ниже приведены некоторые важные выражения pointcut, поддерживаемые AspectJ . Эти выражения можно комбинировать с помощью логических операторов. [4]
выполнение ( void User . setPassword ( пароль ))
Этот pointcut соответствует выполнению метода User.setPassword.
вызов ( void User . getPassword ())
Когда вызывается User.getPassword, этот pointcut сопоставляется.
обработчик ( ArrayIndexOutOfBounds )
Pointcut будет соответствовать при возникновении исключения ArrayIndexOutOfBounds
это ( UserType )
Pointcut будет соответствовать, когда выполняемый в данный момент объект имеет тип пользователя.
цель ( UserType )
Pointcut будет соответствовать, когда целевой объект имеет тип пользователя.
внутри ( UserType )
Pointcut будет соответствовать, когда выполняемый код принадлежит UserType.
Критика
Языки Pointcut отрицательно влияют на важные свойства программного обеспечения, такие как развиваемость и понятность. Может существовать вероятность, когда необходимо выполнить рефакторинг для определения правильного аспекта, чего в общем случае не должно происходить, поскольку рефакторинг должен сделать код более чистым. Он также не масштабируется, когда к одному и тому же коду нужно применить несколько аспектов, и каждый аспект требует отдельного рефакторинга. [5] В общем, каждый аспект будет тесно связан со структурой приложения, поскольку pointcut явно содержит сигнатуру метода, поэтому, когда приложение изменяет, pointcut также необходимо изменить. Это может быть довольно проблематично для разработчика. [5]
Рекомендации
- ^ «Классификация языковых конструкций Pointcut» (PDF) . Проверено 29 декабря 2019 .
- ^ «Введение в AspectJ» . Проверено 14 сентября 2016 года .
- ^ «JBoss AOP - Руководство пользователя» . docs.jboss.org . Проверено 14 сентября 2016 .
- ^ «Точки соединения и вырезы» . Проверено 14 сентября 2016 года .
- ^ а б «Индуктивно сгенерированные PointCuts для поддержки рефакторинга аспектов». CiteSeerX 10.1.1.2.594 . Цитировать журнал требует
|journal=
( помощь )
Внешние ссылки
- Статья Карла Клозе и Клауса Остерманна « Назад в будущее: точки как предсказания, а не следы »
- Статья Муга Нисидзава , Сигеру Чиба и Мичиаки Тацубори " Remote Pointcut - языковая конструкция для распределенного АОП "
- Статья « Каталог данных как точечный язык в аспектно-ориентированном программировании ».
- Статья Карла Дж. Либерхерра , Джеффри Палма и Рави Сундарама « Выразительность и сложность сквозных языков »