Presentation is loading. Please wait.

Presentation is loading. Please wait.

面向方面的编程 Aspect Oriented Programming 2015-10-4 Institute of Computer Software Nanjing University 1.

Similar presentations


Presentation on theme: "面向方面的编程 Aspect Oriented Programming 2015-10-4 Institute of Computer Software Nanjing University 1."— Presentation transcript:

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


Download ppt "面向方面的编程 Aspect Oriented Programming 2015-10-4 Institute of Computer Software Nanjing University 1."

Similar presentations


Ads by Google