Jump to content

Пойнткат

В аспектно-ориентированном программировании pointcut это набор точек соединения . Pointcut указывает, где именно применять советы , что позволяет разделить задачи и помогает модульизировать бизнес-логику. [1] Pointcuts часто указываются с использованием имен классов или методов, в некоторых случаях с использованием регулярных выражений, соответствующих имени класса или метода. Различные платформы поддерживают разные выражения Pointcut; Синтаксис AspectJ считается стандартом де-факто. Доступны платформы для различных языков программирования, таких как Java , Perl , Ruby и многих других, которые поддерживают pointcut.

Из-за ограничений различных языков программирования сквозные задачи не были модульными. Сквозная проблема относится к частям программного обеспечения, которые логически принадлежат одному модулю и влияют на всю систему: это может быть, например, безопасность или ведение журнала. [2] Аспектно-ориентированное программирование пытается решить эти сквозные проблемы, позволяя программистам писать модули, называемые аспектами, которые содержат фрагменты кода, выполняемые в определенный момент. Выражения, необходимые для выбора конкретной точки, привели к созданию выражений Pointcut.

Исполнение

[ редактировать ]

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

Предположим, есть приложение, в котором мы можем изменять записи в базе данных . Всякий раз, когда пользователи изменяют базу данных, мы хотим иметь журнал информации о том, кто изменяет записи. Традиционный способ регистрации — вызвать метод журнала непосредственно перед изменением базы данных. При аспектно-ориентированном программировании мы можем применить pointcut к методу «Изменить базу данных» и получить совет, вызываемый для регистрации необходимой информации. [3]

Выражения

[ редактировать ]

Ниже приведены некоторые важные выражения pointcut, поддерживаемые AspectJ . Эти выражения можно комбинировать с помощью логических операторов. [4]

execution(void User.setPassword(password))

Этот pointcut соответствует выполнению метода User.setPassword.

call(void User.getPassword())

Когда вызывается User.getPassword, этот pointcut сопоставляется.

handler(ArrayIndexOutOfBounds)

Pointcut будет соответствовать при наличии исключения ArrayIndexOutOfBounds.

this(UserType)

Pointcut будет соответствовать, если выполняющийся в данный момент объект имеет тип UserType.

target(UserType)

Pointcut будет соответствовать, если целевой объект имеет тип UserType.

within(UserType)

Pointcut будет соответствовать, если исполняемый код принадлежит UserType.

влияют на важные свойства программного обеспечения, такие как возможность развития Языки Pointcut отрицательно и понятность. Может возникнуть ситуация, когда необходимо выполнить рефакторинг для определения правильного аспекта, чего в целом не должно происходить, поскольку рефакторинг предназначен для того, чтобы сделать код чище. Он также не масштабируем , когда к одному и тому же коду нужно применить несколько аспектов, и каждый аспект требует отдельного рефакторинга. [5] В общем, каждый аспект будет тесно связан со структурой приложения, поскольку pointcut явно содержит сигнатуру метода, поэтому при изменении приложения необходимо также изменить pointcut. Это может быть довольно проблематично для разработчика. [5]

  1. ^ «Классификация языковых конструкций Pointcut» (PDF) . Проверено 29 декабря 2019 г.
  2. ^ «Введение в AspectJ» . Проверено 14 сентября 2016 г.
  3. ^ «JBoss AOP — Руководство пользователя» . docs.jboss.org . Проверено 14 сентября 2016 г.
  4. ^ «Соединение точек и точечных разрезов» . Проверено 14 сентября 2016 г.
  5. ^ Перейти обратно: а б «Индуктивно сгенерированные PointCuts для поддержки рефакторинга в аспекты». 2004. CiteSeerX   10.1.1.2.594 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: bdacd1c26de298cf83560a9e53cbcccf__1690258680
URL1:https://arc.ask3.ru/arc/aa/bd/cf/bdacd1c26de298cf83560a9e53cbcccf.html
Заголовок, (Title) документа по адресу, URL1:
Pointcut - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)