Aspect Oriented Programming Jan 14 2019 Programming paradigms Procedural programming Functional programming Proving a theorem by finding values for the free variables Prolog Object oriented programming OOP Evaluating a function defined in terms of other functions Lisp ML OCaml Logic programming Executing a set of commands in a given sequence Fortran C Cobol Organizing a set of objects each with its own set of responsibilities Smalltalk Java C to some extent Aspect oriented programming AOP Executing code whenever a program shows certain behaviors AspectJ a Java extension Does not replace O O programming but rather complements it 2 The problem Some programming tasks cannot be neatly encapsulated in objects but must be scattered throughout the code Examples Logging tracking program behavior to a file Profiling determining where a program spends its time Tracing determining what methods are called when Session tracking session expiration Special security management The result is crosscuting code the necessary code cuts across many different classes and methods 3 Example class Fraction int numerator int denominator public Fraction multiply Fraction that traceEnter multiply new Object that Fraction result new Fraction this numerator that numerator this denominator that denominator result result reduceToLowestTerms traceExit multiply result return result Now imagine similar code in every method you might want to trace 4 Consequences of crosscutting code Redundant code Difficult to reason about Non explicit structure The big picture of the tangling isn t clear Difficult to change Same fragment of code in many places Have to find all the code involved and be sure to change it consistently and be sure not to break it by accident Inefficient when crosscuting code is not needed Adapted from www parc xerox com research csl projects aspectj downloads PARC Workshop2002 ppt 5 AspectJTM AspectJ is a small well integrated extension to Java AspectJ modularizes crosscutting concerns Based on the 1997 PhD thesis by Christina Lopes A Language Framework for Distributed Programming That is code for one aspect of the program such as tracing is collected together in one place The AspectJ compiler is free and open source AspectJ works with JBuilder Fort Eclipse probably others Best online writeup http www eclipse org aspectj Parts of this lecture were taken from the above paper 6 Terminology A join point is a well defined point in the program flow A pointcut is a group of join points Advice is code that is executed at a pointcut Introduction modifies the members of a class and the relationships between classes An aspect is a module for handling crosscutting concerns Aspects are defined in terms of pointcuts advice and introduction Aspects are reusable and inheritable Each of these terms will be discussed in greater detail 7 The Figure Element example 8 Example I A pointcut named move that chooses various method calls Advice code that runs before the move pointcut pointcut move call void FigureElement setXY int int call void Point setX int call void Point setY int call void Line setP1 Point call void Line setP2 Point before move System out println About to move Advice that runs after the move pointcut after move System out println Just successfully moved 9 Join points A join point is a well defined point in the program flow We want to execute some code advice each time a join point is reached We do not want to clutter up the code with explicit indicators saying This is a join point AspectJ provides a syntax for indicating these join points from outside the actual code A join point is a point in the program flow where something happens Examples When a method is called When an exception is thrown When a variable is accessed 10 Pointcuts Pointcut definitions consist of a left hand side and a right hand side separated by a colon The left hand side consists of the pointcut name and the pointcut parameters i e the data available when the events happen The right hand side consists of the pointcut itself Example pointcut pointcut setter call void setX int The name of this pointcut is setter The pointcut has no parameters The pointcut itself is call void setX int The pointcut refers to any time the void setX int method is called 11 Example pointcut designators I When a particular method body executes When a method is called call void Point setX int When an exception handler executes execution void Point setX int handler ArrayOutOfBoundsException When the object currently executing i e this is of type SomeType this SomeType 12 Example pointcut designators II When the target object is of type SomeType When the executing code belongs to class MyClass target SomeType within MyClass When the join point is in the control flow of a call to a Test s no argument main method cflow call void Test main 13 Pointcut designator wildcards It is possible to use wildcards to declare pointcuts execution Chooses the execution of any method regardless of return or parameter types call set Chooses the call to any method named set regardless of return or parameter type In case of overloading there may be more than one such set method this pointcut picks out calls to all of them 14 Pointcut designators based on types You can select elements based on types For example execution int call setY long Chooses the call to any setY method that takes a long as an argument regardless of return type or declaring type call Point setY int Chooses the execution of any method with no parameters that returns an int Chooses the call to any of Point s setY methods that take an int as an argument regardless of return type call new int int Chooses the call to any classes constructor so long as it takes exactly two ints as arguments 15 Pointcut designator composition Pointcuts compose through the operations or and and not Examples target Point call int call within Line within Point Chooses any call to any method where the call is made from the code in Point s or Line s type declaration within execution new int Chooses any call to an int method with no arguments on an instance of Point regardless of its name Chooses the execution of any constructor taking exactly one int argument regardless of where the call is made from this Point call int Chooses any method call to an int method when the executing object is any type except Point 16 Pointcut designators based on modifiers call public execution static Chooses any execution of a non static method execution
View Full Document