Upload
yasuo
View
24
Download
0
Embed Size (px)
DESCRIPTION
Aspect Oriented Development. Alex Beatty. Introduction. Purpose Cross-cutting Concerns Join Points, Pointcuts , and Advices Weaving Invasive vs. Non-Invasive Static vs. Dynamic. Purpose. What is a cross-cutting concern? Examples Reduction of code tangling and code scattering - PowerPoint PPT Presentation
Citation preview
Aspect Oriented Development
Alex Beatty
Purpose Cross-cutting Concerns
Join Points, Pointcuts, and Advices Weaving
Invasive vs. Non-Invasive Static vs. Dynamic
Introduction
What is a cross-cutting concern? Examples
Reduction of code tangling and code scattering
Abstraction Obliviousness
Expert Development Object Reuse
Purpose
Join Point - Point in the base code that aspect code can utilized Examples
A method being called A method’s code being run Initialization
Join Points
User defined join point(s) to utilize aspect code with AspectJ examples
execution(!static * (Class1 || ClassA).*(..)); call(void Set*(int)); Explanation
Pointcuts
Basically a function before, after, and around key words
around has a special proceed() function Has access to some information from base
code Function name, parameters, return type, return
value
Advice
Static vs dynamic Compile-time vs load- or run-time
Invasive vs non-invasive Directly changing base code or not
Weaving
Logging Coordination Security Mutual Exclusion
Applications
Coordination
Init
buyers={ }
Auction.join(id)buyers=buyers union {id}
entry/doexit/
CollectBids
at(JoinTime)/price = Auction.getStartingPrice();buyers.callForProposal(price)
Auction.proposeBid(id,bid)[isFirstBid(id)]/placedBids = placedBids union id
CloseAuction
at(biddingTime)Auction.directBuy(id)
/Auction.decideWinner(&winner, &price)buyers=buyers - winnerbuyers.rejectProposal();winner.acceptProposal(winner,price)
Init
buyers={ }
Auction.join(id)buyers=buyers union {id}
CollectBids
at(JoinTime)/price = Auction.getStartingPrice();buyers.callForProposal(price)
Auction.proposeBid(id,bid)/buyers.callForProposal(bid)
CloseAuction
at(biddingTime)Auction.directBuy(id)
Auction.decideWinner(&winner, &price)buyers.acceptProposal(winner,price)
Silent Single Bid
Public English Style
Confusion about it’s role Anti-pattern: Action at a distance
Downsides
Java-based Pointcuts
Can use logical operators Can be named
Advices are formatted like java functions
AspectJ
pointcut functionExecution(): execution(!static * (Class1 || ClassA).*(..))
Name Join point type Join point specification
AspectJ Pointcuts
Name Shorter than the pointcut itself Can include parameters to capture access to
an object pointcut setter(Person p): target(p) && …
AspectJ Pointcuts
Methods and Constructors call(Signature) / execution(Signature)
AspectJ Pointcut Types
//before callPerson.walk();//after call
Private void walk(){//before execution//TODO: write function body//after execution}
Fields get(Signature) / set(Signature)
E.g. set(int Racer.*)
AspectJ Pointcut Types
private int id;… //before setid = 42;//after set
Instanceof checks and context exposure this(type or id) / target(type or id) / args(type
or id) E.g. args(newval), target(Racer)
Others http://eclipse.org/aspectj/doc/released/progguide/quick.html#qui
ck-pointcuts
AspectJ Pointcut Types
void around(Racer r): criticalSection(r){ int i = (int) r.getId(); …proceed(); …} thisJoinPoint
Can be used to get arguments, signature, target, etc thisJoinPoint.getArgs();
AspectJ Advices
Example of Mutual Exclusion Aspect
Questions
[1] Aspect-oriented software development. In Wikipedia. Retrieved October 20, 2013, from http://en.wikipedia.org/wiki/Aspect-oriented_software_development
[2] Rohit Sethi. “Aspect-Oriented Programming and Security”. Retrieved October 28, 2013, from
http://www.symantec.com/connect/articles/aspect-oriented-programming-and-security [3] Fuentes, Lidia; Sánchez, Pablo. “Aspect-Oriented Coordination”. In Science Direct. Retrieved from
http://www.sciencedirect.com/science/article/pii/S1571066107004926 [4] Aspect Weaver. In Wikipedia. Retrieved October 28, 2013, from
http://en.wikipedia.org/wiki/Aspect_weaver [5] Piveta, Eduardo Kessler; Zancanella, Luiz Carlos. “Aspect Weaving Strategies”. In Journal of Universal
Computer Science. Retrieved from http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.2.9460&rep=rep1&type=pdf
[6] The AspectJ Programming Guide. Retrieved October 28, 2013, from
http://eclipse.org/aspectj/doc/released/progguide/index.html
References