250 likes | 361 Views
Aspect-Oriented Programming. Coming up…. What is AOP? Why do we need AOP? How does AOP work? Hello World. What is AOP?. Part of AOSD An extension of OOP extracting cross-cutting functional units of systems
E N D
Coming up… • What is AOP? • Why do we need AOP? • How does AOP work? • Hello World
What is AOP? • Part of AOSD • An extension of OOP extracting cross-cutting functional units of systems • A means of programming such functional units separate from other code, which are then ‘woven’ together • An attempt at promoting good SE practices within OOP
Why do we need AOP? Situation in a typical O-O system: • A single requirement implemented by multiple components (tangling) • A single component may include elements of multiple requirements (scattering) • Change could require understanding and changing many components • This impacts on software reuse
Tangling example – sharedbuffer Tangled buffer management code Tangled synchronisation code Source: Sommerville, I. (2007)
Scattering example – patient records Source: Sommerville, I. (2007) The highlighted operations implement secondary concerns for the system, such as keeping patient and consultant details anonymous If the policy regarding anonymity changed, we would need to recode each version of anonymise() throughout the system
The AOP approach Three key stages: • Aspectual Decomoposition • Concern Implementation • Aspectual Recomposition
How are concerns identified? A prism Source: Laddad, R. (2003)
Concern Types • Functional • related to specific functionality to be included in the system • in a train control system, a specific functional concern is train braking • Functional • Quality of Service • Policy • System • Organisational • Quality of Service • related to the non-functional behaviour of a system • performance, reliability, availability • Policy • related to the overall policies that govern the use of the system • security, safety, concerns related to business rules • System • related to attributes of the system as a whole • maintainability, configurability • Organisational • related to organisational goals and priorities • producing a system within budget, making use of existing software assets, maintaining the reputation of an organisation
Concern Classifications • Core • Functional concerns that directly relate to the primary purpose of a system. • Secondary • Functionality that shares information with the core concerns • Functionality that satisfies NFRs • Cross-cutting • Concerns that apply to the system as a whole
Cross-cutting example New customer req. Customer management req. Account management req. Security req. Cross-cutting concerns Recovery req. Core concerns Source: Sommerville, I. (2007)
Implementing Concerns • Core • Classes & Operations • Cross-cutting / Secondary • Aspects • Advice; Join Points; Pointcuts
Aspect • Aspects are similar to classes in that they can: • include data members and operations • have access specifications • declare themselves to be abstract • extend classes and abstract aspects and implement interfaces • be embedded inside classes and interfaces as nested aspects • They are dissimilar in that they cannot: • be directly instantiated • inherit from concrete aspects • be marked as privileged
Join Point • Any identifiable execution point in a system • A call to a method • The method’s execution • Assignment to a variable • Return statement • Object construction • Conditional check • Comparison • Exception handler • Loops • Not all may be exposed by each AOP language • AspectJ does not expose loops
Pointcut • Pointcuts capture, or identify, one or more join points • && || • Need not be given a name • Anonymous pointcutsmust be specified as part of advice • Can include wildcards
Advice • The code to be executed at a join point • The join point must have been selected by a pointcut • Can be defined as: • Before • After • Around
O-O Hello World > javacMessageCommunicator.java Test.java > java test Wanna learn AspectJ Harry, having fun?
A-O Hello World pointcut advice > ajc MessageCommunicator.java MannersAspect.java Test.java > java Test Hello! Wanna learn AspectJ? Hello! Harry, having fun?
A-O Hello World 2 > ajc MessageCommunicator.java MannersAspect.java Hindi Salutation.java Test.java > java Test Hello! Wanna learn AspectJ? Hello! Harry-ji, having fun?
How do we get a working program? Source: Laddad, R. (2003)
Benefits of AOP • Cleaner responsibilities of the individual module • Higher modularisation • Easier system evolution • Late binding of design decisions • More code reuse • Improve time-to-market • Reduced costs of feature implementation
Realities of AOP • Program flow is hard to follow • Doesn’t solve any new problems • Breaks encapsulation
Terms to remember • Advice • the code implementing a concern • Aspect • program abstraction defining a cross-cutting concern. Includes a definition of one or more pointcutsand the advice associated with that concern • Join point • an event in a program where the advice associated with an aspect may be executed • Join point model • set of events referenced in a pointcut • Pointcut • aspect statement defining join points where the associated aspect advice should be executed • Weaving • incorporation of advice code at specified join points by an aspect weaver
Useful Sources Books • Laddad, R. (2003), AspectJ in Action, Manning Publications Co. • Sommerville, I. (2007), Software Engineering, 8th edition, Pearson Education Ltd. Online • The AspectJ Project - http://www.eclipse.org/aspectj/ Video • GoogleTechTalks (2007), Aspect Oriented Programming: Radical Research in Modularity. Available at: http://www.youtube.com/watch?v=cq7wpLI0hco