Download presentation
Presentation is loading. Please wait.
Published byArnold Page Modified over 9 years ago
1
面向方面的编程 Aspect Oriented Programming 2015-10-4 Institute of Computer Software Nanjing University 1
2
摘要 Background and Motivation AOP AspectJ Summary 2015-10-4 Institute of Computer Software Nanjing University 2
3
摘要 Background and Motivation AOP AspectJ Summary 2015-10-4 Institute of Computer Software Nanjing University 3
4
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 2015-10-4 Institute of Computer Software Nanjing University 4
5
Modularity in Reality Code from org.apache.tomcat 2015-10-4 Institute of Computer Software Nanjing University 5 XML Parsing Red shows relevant lines of code Nicely fits in one box Good Modularity
6
Modularity in Reality 2015-10-4 Institute of Computer Software Nanjing University 6 URL pattern matching Pretty Good Modularity fits in two boxes
7
Modularity in Reality 2015-10-4 Institute 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
8
History of Programming Paradigms In the beginning: Programming in whichever way. Monolithic programs 2015-10-4 Institute of Computer Software Nanjing University 8
9
History of Programming Paradigms Structured Programming Functional decomposition 2015-10-4 Institute of Computer Software Nanjing University 9 Modularity
10
History of Programming Paradigms Object-Oriented Programming Encapsulation & Inheritance 2015-10-4 Institute of Computer Software Nanjing University 10 Modularity
11
Nice things of OOP Modular structure Reuse Class Design patterns Framework 2015-10-4 Institute of Computer Software Nanjing University 11
12
Limitations of OOP 2015-10-4 Institute of Computer Software Nanjing University 12 Some things cannot be modeled well in object hierarchies!!
13
A motivating example: Tracing 2015-10-4 Institute 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”); }
14
Java API Example 2015-10-4 Institute 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
15
Crossing cutting concerns 2015-10-4 Institute of Computer Software Nanjing University 15
16
What is a concern? A particular goal, concept, or area of interest (requirement) A software system contains: Business (application) logic concerns System-level concerns 2015-10-4 Institute of Computer Software Nanjing University 16
17
Crosscutting Concerns Crosscutting is how to characterize a concern than spans multiple units of OO modularity Crosscutting concerns resist modularization using normal OO construct 2015-10-4 Institute of Computer Software Nnjing University 17
18
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 2015-10-4 Institute of Computer Software Nanjing University 18
19
Approaches to SoC Composition Filters Composition Filters Multi-dimensional Separation of Concerns Multi-dimensional Separation of Concerns Adaptive Programming Adaptive Programming Aspect-Oriented Programming Was developed at Xerox PARC (施乐公司 帕洛阿尔托研究中心) (Related) Meta-Object Protocol (MOP) Reflective programming, meta-object protocol 2015-10-4 Institute of Computer Software Nanjing University 19
20
摘要 Background and Motivation AOP AspectJ Summary 2015-10-4 Institute of Computer Software Nanjing University 20
21
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” 2015-10-4 Institute of Computer Software Nanjing University 21
22
Two central problems AOP tries to solve Code tangling One module, many concerns 2015-10-4 Institute of Computer Software Nanjing University 22 Code scattering One concern, many modules Example: logging
23
Two central problems AOP tries to solve 2015-10-4 Institute of Computer Software Nanjing University 23
24
AOP approach to SoC 2015-10-4 Institute of Computer Software Nanjing University 24
25
Prism Analogy 2015-10-4 Institute of Computer Software Nanjing University 25 Crosscutting concerns Implement each concern separately Weave concerns together
26
Basic Mechanisms of AOP 2015-10-4 Institute of Computer Software Nanjing University 26 Aspect Pointcut Advice Weaving
27
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 2015-10-4 Institute of Computer Software Nanjing University 27
28
摘要 Background and Motivation AOP AspectJ Summary 2015-10-4 Institute of Computer Software Nanjing University 28
29
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/default.html http://www.parc.com/research/projects/aspectj/default.html Launched in 1998 Transferred to Eclipse.org in 2002 http://www.eclipse.org/aspectj/ http://www.eclipse.org/aspectj/ Latest version: AspectJ 1.6.10 2015-10-4 29
30
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 2015-10-4 Institute of Computer Software Nanjing University 30
31
AspectJ Compilation Process 2015-10-4 Institute of Computer Software Nanjing University 31 weaving Application System Application modules.java or jar files Aspects.aj files ajc: javac extension
32
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) 2015-10-4 Institute of Computer Software Nanjing University 32
33
Concepts in AspectJ Join Points 连接点 Pointcut 切入点 Advice 通知 Aspect 方面 Introduce 引入 2015-10-4 Institute of Computer Software Nanjing University 33
34
High level View of AspectJ 2015-10-4 Institute of Computer Software Nanjing University 34 Java Program AspectJ Advice pointcut advice body join point
35
Join Points Model Join point is a well-defined point in a program’s execution Method call: 2015-10-4 Institute of Computer Software Nanjing University 35 Public void move(int dx, int dy){ setX(_x+dx); setY(_y+dy); } Method call join point
36
More Join Points public void setX(int x){ _x = x; } 2015-10-4 Institute of Computer Software Nanjing University 36 Method execution join point Field set join point
37
All Join Points method & constructor execution method & constructor call field get & set exception handler execution static & dynamic initialization dynamic joinpoints (cflow, cflowbelow) 2015-10-4 Institute of Computer Software Nanjing University 37
38
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*()); 2015-10-4 Institute of Computer Software Nanjing University 38
39
Named Pointcuts Can be a Named set of join points Capture all the executions of the or method 2015-10-4 Institute 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
40
More on Pointcuts Basic pointcuts and pointcuts composition Pointcuts can be composed as boolean expressions with “&&”, “||” and “!” Pointcuts can have arguments 2015-10-4 Institute of Computer Software Nanjing University 40
41
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
42
Advice Code that runs before, after, or around (instead of) a join point 2015-10-4 Institute of Computer Software Nanjing University 42 after() returning(): move() { //code here runs after each move } Type of advice Pointcut it applies to
43
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 2015-10-4 Institute of Computer Software Nanjing University 43
44
Aspects Aspect HistoryUpdating{ pointcut move(): execution(voidPoint.setX(int)) || execution(voidPoint.setY(int)); after() returning: move() { //code here runs after each move } 2015-10-4 Institute of Computer Software Nanjing University 44 Example:
45
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 …. 2015-10-4 Institute of Computer Software Nanjing University 45
46
How it works Short answer: bytecode modification 2015-10-4 Institute of Computer Software Nanjing University 46
47
A first example 2015-10-4 Institute of Computer Software Nanjing University 47
48
What it does 2015-10-4 Institute of Computer Software Nanjing University 48 Sample Code
49
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 2015-10-4 Institute of Computer Software Nanjing University 49
50
Introduction examples public int foo.bar(int x); private int foo.counter; declare parents: mammal extends animal; declare parents: MyThread implements MyThreadInterface; 2015-10-4 Institute of Computer Software Nanjing University 50
51
Some Advanced Topics Aspect Extension (Inheritance) example 2015-10-4 Institute of Computer Software Nanjing University 51
52
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 2015-10-4 Institute of Computer Software Nanjing University 52
53
Performance impact See “Advice Weaving in AspectJ”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 2015-10-4 Institute of Computer Software Nanjing University 53
54
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 2015-10-4 Institute of Computer Software Nanjing University 54
55
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.) 2015-10-4 Institute of Computer Software Nanjing University 55
56
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 …… 2015-10-4 Institute of Computer Software Nanjing University 56
57
Other Aspect-Oriented Languages AspectC AspectC++ Aspect.Net Lightweight Python AOP AspectL(Lisp) AspectML AspectPHP 2015-10-4 Institute of Computer Software Nanjing University 57
58
Middleware & System Level Applications Security Transaction Persistence Mobility Realtime& Embedded Systems OS …… 2015-10-4 Institute of Computer Software Nanjing University 58
59
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. 2015-10-4 Institute of Computer Software Nanjing University 59
60
AOSD 2015-10-4 Institute of Computer Software Nanjing University 60
61
A fast development area AOP Aspect-Oriented Programming AOSD Aspect-Oriented Software Design (Development) AORE (AOR) Aspect-Oriented Requirements Engineering AOM Aspect Oriented Modeling 2015-10-4 Institute of Computer Software Nanjing University 61
62
Where to Get More Information The AspectJ website http://eclipse.org/aspectj AOSD website http://www.aosd.net Books Mastering AspectJ AspectJ in Action Google 2015-10-4 Institute of Computer Software Nanjing University 62
63
作业(本次作业不用提交) 运行 demo 程序,研究 AspectJ 的语法、编译过程 注意:先安装 Eclipse AJDT 插件 思考为什么说 AOP 不会取代 OOP ,而是对 OOP 的补充? 2015-10-4 Institute of Computer Software Nanjing University 63
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.