Upload
arnold-page
View
237
Download
3
Embed Size (px)
Citation preview
面向方面的编程
Aspect Oriented Programming
23/4/21Institute of Computer Software
Nanjing University
1
摘要 Background and Motivation AOP AspectJ Summary
23/4/21Institute of Computer Software
Nanjing University
2
摘要 Background and Motivation AOP AspectJ Summary
23/4/21Institute of Computer Software
Nanjing University
3
Background and Motivation
Where OOP has brought us Reusability of components Modularity Less complex implementation Reduced cost of maintenance ……
Modularity is a universal advancement over structured programming that leads to clearer and better understood software
23/4/21Institute of Computer Software
Nanjing University
4
Modularity in Reality
Code from org.apache.tomcat
23/4/21Institute of Computer Software
Nanjing University
5
XML
Parsing
Red shows relevant lines of code
Nicely fits in one box
Good Modularity
Modularity in Reality
23/4/21Institute of Computer Software
Nanjing University
6
URL pattern matching
Pretty Good Modularity
fits in two boxes
Modularity in Reality
23/4/21Institute of Computer Software
Nanjing University
7
Logging
Red shows lines of code that handle logging
Not in just one place Not even in a small number of places
Bad Modularity
Code tangling and scattering
History of Programming Paradigms
In the beginning: Programming in whichever way. Monolithic programs
23/4/21Institute of Computer Software
Nanjing University
8
History of Programming Paradigms
Structured Programming Functional decomposition
23/4/21Institute of Computer Software
Nanjing University
9
Modularity
History of Programming Paradigms
Object-Oriented Programming Encapsulation & Inheritance
23/4/21Institute of Computer Software
Nanjing University
10
Modularity
Nice things of OOP
Modular structure Reuse
Class Design patterns Framework
23/4/21Institute of Computer Software
Nanjing University
11
Limitations of OOP
23/4/21Institute of Computer Software
Nanjing University
12
Some things cannot be modeled well in object hierarchies!!
A motivating example: Tracing
23/4/21Institute of Computer Software
Nanjing University
13
class Point{ void set (int x, int y){ TraceSupport.traceEntry(“Point.set”); this.x =x; this.y=y; TraceSupport.traceExit(“Point.set”); }}
Java API Example
23/4/21Institute of Computer Software
Nanjing University
14
package java.io;public class File implements java.io.Serializable{ private String path; … public boolean exists(){ SecurityManager security = System.getSecurityManager(); if(security!=null){ security.checkRead(path); } return exits0(); } public boolean canRead(){ SecurityManager security = System.getSecurityManager(); if(security!=null){ security.checkRead(path); } return canRead0(); }
Same code repeated 16 times in java.io.File
Crossing cutting concerns
23/4/21Institute of Computer Software
Nanjing University
15
What is a concern?
A particular goal, concept, or area of interest (requirement)
A software system contains: Business (application) logic concerns System-level concerns
23/4/21Institute of Computer Software
Nanjing University
16
Crosscutting Concerns
Crosscutting is how to characterize a concern than spans multiple units of OO modularity
Crosscutting concerns resist modularization using normal OO construct
23/4/21Institute of Computer Software
Nnjing University
17
Separation of Concerns (SoC)
Object-Oriented Programming separates and encapsulates some concerns Others end up tangled and scattered
Basic problem N dimensions of concerns 1 dimension of implementation structure Tyranny decomposition
23/4/21Institute of Computer Software
Nanjing University
18
Approaches to SoC
Composition Filters Multi-dimensional Separation of Concern
s Adaptive Programming Aspect-Oriented Programming
Was developed at Xerox PARC (施乐公司 帕洛阿尔托研究中心)
(Related) Meta-Object Protocol (MOP) Reflective programming, meta-object
protocol23/4/21
Institute of Computer SoftwareNanjing University
19
摘要 Background and Motivation AOP AspectJ Summary
23/4/21Institute of Computer Software
Nanjing University
20
The AOP Idea
Many cross-cuts aren’t random! They serve specific purposes They have well-defined structure
So…let’s capture the cross-cutting structure in a modular way to better support for “Separation of Concerns”
23/4/21Institute of Computer Software
Nanjing University
21
Two central problems AOP tries to solve
Code tangling One module,
many concerns
23/4/21Institute of Computer Software
Nanjing University
22
Code scattering One concern,
many modules
Example:
logging
Two central problems AOP tries to solve
23/4/21Institute of Computer Software
Nanjing University
23
AOP approach to SoC
23/4/21Institute of Computer Software
Nanjing University
24
Prism Analogy
23/4/21Institute of Computer Software
Nanjing University
25
Crosscutting concerns
Implement each concern separately
Weave concerns together
Basic Mechanisms of AOP
23/4/21Institute of Computer Software
Nanjing University
26
Aspect
Pointcut
Advice
Weaving
Summary so far
AOP is a software development technique that complements and extends OOP
Provides new and powerful ways to modularize “crosscutting concerns” Crosscutting concerns: Behavior that cuts
across class boundaries AspectJ is the leading implementation of
AOP that extends Java’s OOP model
23/4/21Institute of Computer Software
Nanjing University
27
摘要 Background and Motivation AOP AspectJ Summary
23/4/21Institute of Computer Software
Nanjing University
28
What is AspectJ?
A simple and practical aspect-oriented extension to Java
A general purpose AO language Based on over ten years of research at Xerox
PARC http://www.parc.com/research/projects/aspectj/defa
ult.html Launched in 1998
Transferred to Eclipse.org in 2002 http://www.eclipse.org/aspectj/
Latest version: AspectJ 1.6.1023/4/21
29
Design assumptions
Real Community Users Writing aspects Reading aspects Idioms How effective for concerns Modular, reusable and easy to develop and
maintain Java compatibility
Upward compatibility Platform compatibility Tool compatibility Programmer Compatibility
23/4/21Institute of Computer Software
Nanjing University
30
AspectJ Compilation Process
23/4/21Institute of Computer Software
Nanjing University
31
weavingApplication
System
Applicationmodules
.java or jar files
Aspects.aj files
ajc: javac extension
Dynamic VS Static crosscutting
Dynamic crosscutting define additional behavior to run at certain
well-defined points in the execution of the program
Static crosscutting modify the static structure of a program
(e.g., adding new methods, implementing new interfaces, modifying the class hierarchy)
23/4/21Institute of Computer Software
Nanjing University
32
Concepts in AspectJ
Join Points 连接点 Pointcut 切入点 Advice 通知 Aspect 方面 Introduce 引入
23/4/21Institute of Computer Software
Nanjing University
33
High level View of AspectJ
23/4/21Institute of Computer Software
Nanjing University
34
Java Program
AspectJ
Advice
pointcut advice body
join point
Join Points Model
Join point is a well-defined point in a program’s execution
Method call:
23/4/21Institute of Computer Software
Nanjing University
35
Public void move(int dx, int dy){
setX(_x+dx);
setY(_y+dy);
}
Method call join point
More Join Points
public void setX(int x){ _x = x;}
23/4/21Institute of Computer Software
Nanjing University
36
Method execution join point
Field set join point
All Join Points
method & constructor execution method & constructor call field get & set exception handler execution static & dynamic initialization dynamic joinpoints (cflow, cflowbelow)
23/4/21Institute of Computer Software
Nanjing University
37
Pointcuts
Pointcut: Predicate on join points: selecting a
collection of joinpoints Example: call (void Point.setX(int))
Wildcard characters are allowed. The following pointcut matches any method call to the methods of the class Point whose names begin with “set” call (void myPackage..*Point.set*());
23/4/21Institute of Computer Software
Nanjing University
38
Named Pointcuts
Can be a Named set of join points Capture all the executions of the
<void Point.setX(int)> or <void Point.setY(int)> method
23/4/21Institute of Computer Software
Nanjing University
39
pointcut move():
execution (void Point.setX(int)) ||
execution (void Point.setY(int));
Name and parameters
Executions of methods with the specified sig.
or
More on Pointcuts
Basic pointcuts and pointcuts composition
Pointcuts can be composed as boolean expressions with “&&”, “||” and “!”
Pointcuts can have arguments
23/4/21Institute of Computer Software
Nanjing University
40
Pointcut Designators
call, execution (method or constructor) get, set (field) within (type), withincode(method or
constructor) this, target (type or id) args(type or id list) cflow, cflowbelow(pointcut) handler, throwing (exception type) combine with ||, && and ! use *, + and .. wildcards bind arguments (autoboxing!), this, target
41
Advice
Code that runs before, after, or around (instead of) a join point
23/4/21Institute of Computer Software
Nanjing University
42
after() returning(): move() {
//code here runs after each move
}
Type of advice Pointcut it applies to
Advice Types in AspectJ
Before advice: runs at the moment join point is reached, before method runs
After advice: runs at the moment control returns through join point, just after method After, after returning, after throwing
Around advice: runs when join point is reached and has control over whether method itself runs at all
23/4/21Institute of Computer Software
Nanjing University
43
Aspects
Aspect HistoryUpdating{
pointcut move():
execution(voidPoint.setX(int)) ||
execution(voidPoint.setY(int));
after() returning: move() {
//code here runs after each move
}
}
23/4/21Institute of Computer Software
Nanjing University
44
Example:
Aspects
Mix everything we’ve seen up to now and put it one or more modular units called Aspects.
Looks a lot like a class! Can contain pointcuts, advice declarations,
methods, variables ….
23/4/21Institute of Computer Software
Nanjing University
45
How it works
Short answer: bytecode modification
23/4/21Institute of Computer Software
Nanjing University
46
A first example
23/4/21Institute of Computer Software
Nanjing University
47
What it does
23/4/21Institute of Computer Software
Nanjing University
48
Sample Code
AspectJ’s Introductions
An introduction is an aspect member that allows to Add methods to an existing class Add field to an existing class Extend an existing class with another Implement an interface in an existing class Convert checked exceptions into unchecked
exceptions
23/4/21Institute of Computer Software
Nanjing University
49
Introduction examples
public int foo.bar(int x); private int foo.counter; declare parents: mammal extends
animal; declare parents: MyThread implements
MyThreadInterface;
23/4/21Institute of Computer Software
Nanjing University
50
Some Advanced Topics
Aspect Extension (Inheritance) example
23/4/21Institute of Computer Software
Nanjing University
51
Some Advanced Topics
Aspect Creation (Association) Aspect instance
Single (static) vs. Multiple (dynamic) Default: Singleton, created when program
begins Object (Class) association:
perthis, pertarget Controlflow association
Percflow, percflowbelow Aspect & Advice Precedence & Interactions
23/4/21Institute of Computer Software
Nanjing University
52
Performance impact
See “Advice Weaving in AspectJ” “The implementation of advice weaving
introduces very little performance overhead when compared to the same functionality coded by hand.”
Does make it easy to create performance destroying code…
But allows powerful optimizations
23/4/21Institute of Computer Software
Nanjing University
53
AspectJ 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 a compile time declaration introduces a compile time
warning or error upon detection of certain usage patterns
an aspect is a module for handling crosscutting concerns Aspects are defined in terms of pointcuts, advice, and
introduction Aspects are reusable and inheritable
23/4/21Institute of Computer Software
Nanjing University
54
Dynamic AOP Systems
Creating aspects at run-time Specifying pointcuts at run-time Dynamic code translation (or some
special feature of the run-time environment)
Enabling/disabling aspects at run-time Pointcuts are dynamic: it can be decided
only at run-time whether advices have to be executed or not (based on run-time values, call-stack, etc.)
23/4/21Institute of Computer Software
Nanjing University
55
Other Java AOP sightings
AspectWerkz: load-time/run-time weaving, AOP constructs defined using javadoctags
BEA: AOP framework for Weblogic JBoss AOP framework
AOP with interceptors Spring framework
Limited AOP with proxies J2EE without EJB
AspectJ2EE JasCo …
23/4/21Institute of Computer Software
Nanjing University
56
Other Aspect-Oriented Languages
AspectC AspectC++ Aspect.Net Lightweight Python AOP AspectL(Lisp) AspectML AspectPHP
23/4/21Institute of Computer Software
Nanjing University
57
Middleware & System Level Applications
Security Transaction Persistence Mobility Realtime& Embedded Systems OS ……
23/4/21Institute of Computer Software
Nanjing University
58
AOSD
AOSD is a promising approach to encapsulate and modularize crosscutting concerns
AOSD is not a substitute of the OO paradigm but an extension to it.
23/4/21Institute of Computer Software
Nanjing University
59
AOSD
23/4/21Institute of Computer Software
Nanjing University
60
A fast development area
AOP Aspect-Oriented Programming
AOSD Aspect-Oriented Software Design
(Development) AORE (AOR)
Aspect-Oriented Requirements Engineering AOM
Aspect Oriented Modeling
23/4/21Institute of Computer Software
Nanjing University
61
Where to Get More Information
The AspectJ website http://eclipse.org/aspectj
AOSD website http://www.aosd.net
Books Mastering AspectJ AspectJ in Action
23/4/21Institute of Computer Software
Nanjing University
62
作业(本次作业不用提交) 运行 demo 程序,研究 AspectJ 的语法、编译
过程 注意:先安装 Eclipse AJDT 插件
思考为什么说 AOP 不会取代 OOP ,而是对OOP 的补充?
23/4/21Institute of Computer Software
Nanjing University
63