An Interface Mechanism for Encapsulating Weaving in Class-based AOP

26
1 An Interface Mechanism for Encapsulating Weaving in Class- based AOP Naoyasu Ubayashi (Kyushu Institute of Technology) Akihiro Sakai (Kyushu Institute of Technology) Tetsuo Tamai (University of Tokyo) March 12, 2007 SPLAT2007

description

SPLAT2007. An Interface Mechanism for Encapsulating Weaving in Class-based AOP. Naoyasu Ubayashi(Kyushu Institute of Technology) Akihiro Sakai(Kyushu Institute of Technology) Tetsuo Tamai(University of Tokyo) March 12, 2007. Today’s my talk. - PowerPoint PPT Presentation

Transcript of An Interface Mechanism for Encapsulating Weaving in Class-based AOP

Page 1: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

1

An Interface Mechanism for Encapsulating Weaving in Class-based AOP

Naoyasu Ubayashi (Kyushu Institute of Technology)Akihiro Sakai (Kyushu Institute of Technology)Tetsuo Tamai (University of Tokyo)

March 12, 2007

SPLAT2007

Page 2: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

2

Today’s my talk

The notion of interface is important in module compositions.

It is also important in AO weaving. We provide a new interface

mechanism Weaving-interface. This introduces a new weaving

mechanism based on component-and-connector architecture.

Page 3: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

3

Image of our idea

ConcernComponent

(class)

ConcernComponent

(class)

ConcernComponent

(class)

ConcernComponent

(class)

weaving I/F

connector

connector

weaving I/F weaving I/F

weaving I/F Concern weavingby connectors

Page 4: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

4

Outline

1. Motivation2. Weaving-interface & ccJava3. Example programs4. Implementation5. Related work6. Conclusion

Page 5: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

5

1. Motivation

Page 6: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

6

Interface in OOP A client of a class has only to be aware

of methods exposed by an interface of the class.

A class can be modified without being aware of the client if the class does not change the interface.

client of a class

component (class)programmer

component (class)programmer

interface

interface

Page 7: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

7

However, in AOP …

It is not necessarily easy for a programmer to understand the overall behavior of a woven program because a weaving modifies the behavior of a method defined in a class.

Page 8: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

8

Our approach

A programmer who defines a weaving has only to be aware of weaving-interfaces.

A programmer of the class can change its implementation without being aware of the client if the class conforms to its weaving-interfaces.

programmerwho connects components

component (class)programmer

component (class)programmer

weaving-interfaceComponentComponent

ComponentComponentConnectorConnector

Page 9: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

9

2. Weaving-interface & ccJava

Page 10: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

10

Example --- Figure editor

interface Shape { public void moveBy(int dx, int dy);}

class Point implements Shape { int x, y; public int getX() { return x; } public int getY() { return y; } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } public void moveBy(int dx, int dy) { x += dx; y += dy; }}

class Line implements Shape { Point p1, p2; public Point getP1() { return p1; } public Point getP2() { return p2; } public void setP1(Point p1) { this.p1 = p1; } public void setP2(Point p2) { this.p2 = p2; } public void moveBy(int dx, int dy) { p1.x += dx; p1.y += dy; p2.x += dx; p2.y += dy; }}

class Display { public static void update() { /* the detail is ommited */ }}

compose threeconcern components - Point - Line - Display

ComponentComponent

ComponentComponent

ComponentComponent

Page 11: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

11

AO weaving based oncomponent-connector architecture

classDisplay

classPoint

classLine

classLogging

wDisplay wPoint wLine

wLogging

redraw

logging

export program points(update)

import program points(at set*, moveBy)

ComponentComponent

Weaving-interfaceWeaving-interface

ConnectorConnector

Page 12: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

12

ccJava --- a language for supporting weaving-interfaces

public w_interface wPoint { pointcut change(): execution(void setX(int)) || execution(void setY(int)) || execution(void moveBy(int, int)); import before(), after() returning, around() : change();}

public w_interface wLine { pointcut change(): execution(void setP1(Point)) || execution(void setP2(Point)) || execution(void moveBy(int, int)); import before(), after() returning, around() : change();}

public w_interface wDisplay { pointcut redraw(): execution(void update()); import before(), after() returning : redraw(); export redraw();} weave {

class Pointimplements wPoint; class Line implements wLine; class Display implements wDisplay; connect(port1:wDisplay.redraw, port2:{wPoint || wLine}.change) { after() returning : port2 { port1.proceed(); }}

A class must implement methods or fields related exposed by pointcuts.

Only the program points selected by pointcuts are target of weaving.

ccJava: Class-based Crosscutting language for Java

Weaving-interfaceWeaving-interface

ConnectorConnector

Page 13: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

13

3. Example programs

Page 14: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

14

Example (1) --- Method composition

public w_interface wColor { pointcut change() : execution(void setColor(int)); export change();}

public w_interface wPoint { pointcut change(): execution(void setX(int)) || execution(void setY(int)) || execution(void moveBy(int, int)); import before(), after() returning, around() : change();}

weave { class Color implements wColor; class Pointimplements wPoint; connect(port1:wColor.change, port2:wPoint.change){ around() : port2 { port2.proceed(); port1.proceed();}}}

Weaving-interfaceWeaving-interface

ConnectorConnector

Color

setColor

Point

setXsetYmoveBy

behavioralcomposition

ComponentComponent

Page 15: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

15

Example (2) --- Inter-type declaration

public w_interface wColor { pointcut color_property() : field(int color) || method(void setColor(int))|| method(int getColor()); export color_property();}

public w_interface wColorPoint extends wPoint { pointcut thisClass() : class(this); import introduce() : thisClass();}

weave { class Color implements wColor; class Pointimplements wColorPoint; connect(port1:wColor.color_property, port2:wColorPoint.thisClass) { introduce() : port2 from port1; }}

Weaving-interfaceWeaving-interface

ConnectorConnector

Color

setColorgetColor

Point

setXsetYmoveBy

structuralcomposition

ComponentComponent

color

Point

setXsetYmoveBysetColorgetColor

color

Page 16: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

16

Example (3) --- Software evolution with ccJava

class Point implements Shape { int x, y; public int getX() { return x; } public int getY() { return y; } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } public void moveByPlus (int dx, int dy) { x += dx; y += dy; }}

weave { class Pointimplements wPoint replacing moveBy with moveByPlus; class Line implements wLine; class Display implements wDisplay; connect(port1:wDisplay.redraw, port2:{wPoint || wLine}.change){ after() returning : port2 { port1.proceed();}}}

class Point implements Shape { int x, y; public int getX() { return x; } public int getY() { return y; } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } public void moveBy(int dx, int dy) { x += dx; y += dy; }}

version 1 version 2ComponentComponent ComponentComponent

ConnectorConnector

Weaving-interfaces do not have to be modified !

Page 17: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

17

Example (4) --- Interface for dealing with multiple classes

public w_interface wChange { pointcut change(): execution(void set*(..)) || execution(void moveBy(int, int)); import before(), after() returning, around() : change();}

weave { class Pointimplements wChange; class Line implements wChange; class Display implements wDisplay; connect(port1:wDisplay.redraw, port2:wChange.change){ after() returning : port2 { port1.proceed(); } }}

The scope of the weaving impact is limited to classes that implement wChange.

We have only to look at Point and Line.

Weaving-interfaceWeaving-interface

ConnectorConnector

Page 18: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

18

4. Implementation

Page 19: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

19

Compiler construction

ccJava code(weaving-interface)

Java code (class)

ccJava parser

AspectJ codegenerator

AspectJ code (aspect)

Aspect-Factoryclass generator

AspectJ weaver

executable program

ccJava compiler

Page 20: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

20

Generated code

aspect wPoint { Display display = new DisplayFactory.getInstance();

pointcut change(): execution(void Point.setX(int)) || execution(void Point.setY(int)) || execution(void Point.moveBy(int, int)); after() returning: change() { display.update(); }}

public class DisplayFactory { private static Display instance = new Display(); public static Display getInstance { return instance; }}

generated aspect

generated factoryclass

weave { class Display implements wDisplay factory UserDefinedFactory; /* other definitions are omitted */}

If a programmer wants to define a specific factory class, …

Page 21: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

21

5. Related work

Page 22: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

22

Related work

Aspect-aware interface [Kiczales, et al. 2005]

Open modules [Aldrich2005] Crosscutting programming

interface (XPI) [Sullivan, et al. 2005]

Page 23: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

23

Expressiveness for crosscutting descriptions

NAW NOC NOC/NAW

AspectJ 1 2 2ccJava as an open module 2 2 1ccJava using wildcard1 2 2

NWA: number of aspects or weaving-interfacesNOC: number of classes

Page 24: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

24

Traceability of weaving impact

NOC IFW NOIF

AspectJ 1 all aspects number of aspectsAAIF(*)1 AAIF 1ccJava 1 weaving-I/Fs number of weaving-IFs

* AAIF: Aspect-aware Interface

NOC: number of classesIFW: impact factors for weavingNOIF: number of impact factors

number of all aspects > number of implemented weaving-IFs

Page 25: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

25

6. Conclusion

Page 26: An Interface Mechanism for Encapsulating Weaving in Class-based AOP

26

Conclusion

A new interface mechanism Weaving-interface

A new weaving mechanism based on component-and-connector architecture

Flexible Weaving Mechanism !