Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Pointcut
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
In [[aspect-oriented programming]], a '''pointcut''' is a set of [[join point]]s. A pointcut specifies where exactly to apply an [[Advice in aspect-oriented programming|advice]], which allows separation of concerns and helps in modularizing business logic.<ref>{{Cite web|url=https://pp.ipd.kit.edu/uploads/publikationen/stoerzer05splat.pdf|title=A Classification of Pointcut Language Constructs|last=|first=|date=|website=|publisher=|access-date=29 December 2019}}</ref> Pointcuts are often specified using class names or method names, in some cases using regular expressions that match class or method names. Different frameworks support different Pointcut expressions; [[AspectJ]] syntax is considered as de facto standard. Frameworks are available for various programming languages like [[Java (programming language)|Java]], [[Perl]], [[Ruby (programming language)|Ruby]], and many more which support pointcuts. == Background == Due to limitations in various programming languages, [[cross-cutting concern]] has not modularized. Cross-cutting concern refers to parts of software that logically belong to one module and affect the whole system: this could be security or logging, for example.<ref>{{Cite web|url=https://eclipse.org/aspectj/doc/next/progguide/starting-aspectj.html|title=Introduction to AspectJ|last=|first=|date=|website=|publisher=|access-date=14 September 2016}}</ref> [[Aspect-oriented programming]] tries to solve these cross cutting concerns by allowing programmers to write modules called aspects, which contain pieces of code executed at particular point. The expressions required to select a particular point led to creation of Pointcut Expressions. ==Execution== Whenever the program execution reaches one of the join points described in the pointcut, a piece of code associated with the pointcut (called advice) is executed. This allows a programmer to describe where and when additional code should be executed in addition to already-defined behavior. Pointcut permits the addition of aspects to existing software, as well as the design of software with a clear [[separation of concerns]], wherein the programmer [[aspect weaver|weaves]] (merges) different aspects into a complete application. == Example == Suppose there is an application where we can modify records in a [[database]]. Whenever users modify the database, we want to have a log of information regarding who is modifying the records. The traditional way to log is to call a log method just before modifying the database. With aspect-oriented programming, we can apply pointcut to the Modify Database method and have an advice that is called to log the required information.<ref>{{Cite web|url=http://docs.jboss.org/aop/1.0/aspect-framework/userguide/en/html_single/index.html#what|title=JBoss AOP - User Guide|website=docs.jboss.org|access-date=2016-09-14}}</ref> == Expressions == Following are some important pointcut expressions supported by [[AspectJ]]. These expressions can be combined using logical operators.<ref>{{Cite web|url=https://eclipse.org/aspectj/doc/next/progguide/language-joinPoints.html|title=Join Points and Pointcuts|last=|first=|date=|website=|publisher=|access-date=14 September 2016}}</ref> <syntaxhighlight lang="java"> execution(void User.setPassword(password)) </syntaxhighlight> This pointcut matches execution of the User.setPassword method. <syntaxhighlight lang="java"> call(void User.getPassword()) </syntaxhighlight> When User.getPassword is called, this pointcut is matched. <syntaxhighlight lang="java"> handler(ArrayIndexOutOfBounds) </syntaxhighlight> Pointcut will match when there is an ArrayIndexOutOfBounds exception <syntaxhighlight lang="java"> this(UserType) </syntaxhighlight> Pointcut will match when the object currently executing is of UserType. <syntaxhighlight lang="java"> target(UserType) </syntaxhighlight> Pointcut will match when the target object is of UserType. <syntaxhighlight lang="java"> within(UserType) </syntaxhighlight> Pointcut will match when the code executing belongs to UserType. == Criticisms == Pointcut languages impact important software properties like [[evolvability]] and comprehensibility in a negative way. There might be a possibility where there is a need to perform [[Code refactoring|refactoring]] to define a correct aspect, which in general should not happen since refactoring is to make code cleaner. It is also not [[scalable]] when there are multiple aspects to be applied on the same code and each aspect requires a different refactoring.<ref name=":0">{{Cite CiteSeerX |title=Inductively generated PointCuts to support refactoring to Aspects |year=2004 |citeseerx = 10.1.1.2.594}}</ref> In general every aspect will be tightly coupled with an application's structure as the pointcuts explicitly contain a method's signature, so when an application changes the pointcut needs to be changed as well. This can be quite problematic for a developer.<ref name=":0" /> ==References== {{reflist}} ==External links== *Paper "[http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.59.1936 Back to the Future: Pointcuts as Predicates over Traces]" by [[Karl Klose]] and [[Klaus Ostermann]] *Paper "[http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.1.9857 Remote Pointcut - A Language Construct for Distributed AOP]" by [[Muga Nishizawa]], [[Shigeru Chiba]] and [[Michiaki Tatsubori]] *Paper "[http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.96.974 Datalog as a Pointcut Language in Aspect-Oriented Programming]" *Paper "[http://www.ccs.neu.edu/research/demeter/biblio/unified.html Expressiveness and Complexity of Crosscut Languages]" by [[Karl J. Lieberherr]], [[Jeffrey Palm]] and [[Ravi Sundaram]] {{aosd}} [[Category:Aspect-oriented software development]] [[Category:Aspect-oriented programming]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Aosd
(
edit
)
Template:Cite CiteSeerX
(
edit
)
Template:Cite web
(
edit
)
Template:Reflist
(
edit
)