aspect-oriented software development - lorelore.ua.ac.be/teaching/sem2lic/aosdhandoutsbw.pdf · 1...

24
1 VUB Programming Technology Lab Aspect-oriented Software Development An Introduction Johan Brichau Inno.com 2 VUB Programming Technology Lab Talk Contents Separation of Concerns – Broader Context of AOSD Aspect-orientation – Definition, History Ready-to-use Technologies – An overview Research activities AspectJ demo

Upload: doxuyen

Post on 07-Aug-2019

228 views

Category:

Documents


0 download

TRANSCRIPT

1

VUB Programming Technology Lab

Aspect-orientedSoftware Development

AnIntroduction

Johan Brichau

Inno.com 2 VUB Programming Technology Lab

Talk Contents

• Separation of Concerns– Broader Context of AOSD

• Aspect-orientation– Definition, History

• Ready-to-use Technologies– An overview

• Research activities• AspectJ demo

2

Inno.com 3 VUB Programming Technology Lab

Talk Contents

• Separation of Concerns• Aspect-orientation• Ready-to-use Technologies• Research activities• AspectJ demo

Inno.com 4 VUB Programming Technology Lab

Separation of Concerns

• E.W. Dijkstra, Parnas• Organize code according to common

functionality– Modular programming– Need for programming language mechanisms

• enforce encapsulation of module internals• provide module composition mechanisms

• Benefits:– Manage complexity– Fewer defects, easier to localize defects– Reusability– Ability to respond to market changes

3

Inno.com 5 VUB Programming Technology Lab

Structured Programming

• Tangling from explicit gotos• Recognized common control structures

– capture in more explicit form

• Resulting code– more clear, easier to write, maintain, debug etc.

i = 1TEST: if i < 4 then goto BODY else goto END

BODY: print(i) i = i + 1 goto TESTEND:

i = 1while (i < 4) { print(i) i = i + 1}

Inno.com 6 VUB Programming Technology Lab

But… still tangled main () { draw_label(“Haida Art Browser”); m = radio_menu( {“Whale”, “Eagle”, “Dogfish”}); q = button_menu({“Quit”}); while ( ! check_buttons(q) ) { n = check_buttons(m); draw_image(n); } }

draw_label (string) { w = calculate_width(string); print(string, WINDOW_PORT); set_x(get_x() + w); }

draw_image (img) { w = img.width; h = img.height; do (r = 0; r < h; r++) do (c = 0; c < w; c++) WINDOW[r][c] = img[r][c]; }

radio_menu(labels) { i = 0; while (i < labels.size) { radio_button(i); draw_label(labels[i]); set_y(get_y() + RADIO_BUTTON_H); i++; } }

draw_circle (x, y, r) { %%primitive_oval(x, y, 1, r); }

radio_button (n) { draw_circle(get_x(), get_y(), 3); }

button_menu(labels) { i = 0; while (i < labels.size) { draw_label(labels[i]); set_y(get_y() + BUTTON_H); i++; } }

4

Inno.com 7 VUB Programming Technology Lab

Group functionality… main () { draw_label(“Haida Art Browser”); m = radio_menu( {“Whale”, “Eagle”, “Dogfish”}); q = button_menu({“Quit”}); while ( ! check_buttons(q) ) { n = check_buttons(m); draw_image(n); } }

draw_label (string) { w = calculate_width(string); print(string, WINDOW_PORT); set_x(get_x() + w); }

draw_image (img) { w = img.width; h = img.height; do (r = 0; r < h; r++) do (c = 0; c < w; c++) WINDOW[r][c] = img[r][c]; }

radio_menu(labels) { i = 0; while (i < labels.size) { radio_button(i); draw_label(labels[i]); set_y(get_y() + RADIO_BUTTON_H); i++; } }

draw_circle (x, y, r) { %%primitive_oval(x, y, 1, r); }

radio_button (n) { draw_circle(get_x(), get_y(), 3); }

button_menu(labels) { i = 0; while (i < labels.size) { draw_label(labels[i]); set_y(get_y() + BUTTON_H); i++; } }

Inno.com 8 VUB Programming Technology Lab

…into Modules… main () { draw_label(“Haida Art Browser”); m = radio_menu( {“Whale”, “Eagle”, “Dogfish”}); q = button_menu({“Quit”}); while ( ! check_buttons(q) ) { n = check_buttons(m); draw_image(n); } }

draw_label (string) { w = calculate_width(string); print(string, WINDOW_PORT); set_x(get_x() + w); }

draw_image (img) { w = img.width; h = img.height; do (r = 0; r < h; r++) do (c = 0; c < w; c++) WINDOW[r][c] = img[r][c]; }

radio_menu(labels) { i = 0; while (i < labels.size) { radio_button(i); draw_label(labels[i]); set_y(get_y() + RADIO_BUTTON_H); i++; } }

draw_circle (x, y, r) { %%primitive_oval(x, y, 1, r); }

radio_button (n) { draw_circle(get_x(), get_y(), 3); }

button_menu(labels) { i = 0; while (i < labels.size) { draw_label(labels[i]); set_y(get_y() + BUTTON_H); i++; } }

But: variations on modulesare incredibly complex

5

Inno.com 9 VUB Programming Technology Lab

…Object-orientation

display: boxes, labelsclick: highlight

display: boxes, maybe checks, labelsclick: set/clear

display: circle, maybe dots, labelsclick: set/clear AND clear others

ToggleButtonMenu

CheckBoxMenu RadioButtonMenu

Menu

ButtonMenu

display: <promise>click: <promise>

click: set/clear

Inno.com 10 VUB Programming Technology Lab

But…

6

Inno.com 11 VUB Programming Technology Lab

But… (example)

Where is logging in Apache web server ?• Not in one place• Not even in a small number of places

Inno.com 12 VUB Programming Technology Lab

Crosscutting Concerns

• Concern– ‘Something the programmer should care about’– Ideally implemented in one single module

• Crosscutting– Implementation is spread across other modules– Difficult to understand, change, maintain, etc…

• Tyranny of the Dominant Decomposition– Given one of many decompositions of the

problem…• Mostly core functionality concerns

– …some subproblems (concerns) cannot bemodularized

• Non-functional, functional, added later on,…

7

Inno.com 13 VUB Programming Technology Lab

Tangling -> Structurei = 1while (i < 5) { print(i) i = i + 1}

structuredcontrol

constructs

i = 1TEST: if i < 5 then goto BODY else goto END

BODY: print(i) i = i + 1 goto TESTEND:

menus

graphics

simple_browser modules withnarrow

interfaces

main () { draw_label(“Haida Browser”); m = radio_menu( {“Whale”, “Eagle”, “Dogfish”}); q = button_menu({“Quit”}); while ( ! check_buttons(q) ) { n = check_buttons(m); draw_image(n); } }

draw_label (string) { w = calculate_width(string); print(string, WINDOW_PORT); set_x(get_x() + w); }

draw_image (img) { w = img.width; h = img.height; do (r = 0; r < h; r++) do (c = 0; c < w; c++) WINDOW[r][c] = img[r][c]; }

radio_menu(labels) { i = 0; while (i < labels.size) { radio_button(i); draw_label(labels[i]); set_y(get_y() + RADIO_BUTTON_H); i++; } }

draw_circle (x, y, r) { %%primitive_oval(x, y, 1, r); }

radio_button (n) { draw_circle(get_x(), get_y(), 3); }

button_menu(labels) { i = 0; while (i < labels.size) { draw_label(labels[i]); set_y(get_y() + BUTTON_H); i++; } }

aspects

AbstractButton

Button ToggleButton

RadioButtonCheckBox

classification &specialization

of objects

menus

graphics

simple_browser

Inno.com 14 VUB Programming Technology Lab

Talk Contents

• Separation of Concerns• Aspect-orientation• Ready-to-use Technologies• Research activities• AspectJ demo

8

Inno.com 15 VUB Programming Technology Lab

Aspect-orientation

• Modularize crosscutting concerns– Code scattering (one concern in many modules)

– Code Tangling (one module, many concerns)

Inno.com 16 VUB Programming Technology Lab

Examples?

• What is an Aspect? vs. What is an Object?• Non-functional aspects

– Synchronisation– Logging– Error Handling– Persistence– Real-time issues

• Functional aspects– Coloring of figures in a drawing application– User interface– Personalisation of E-commerce application

9

Inno.com 17 VUB Programming Technology Lab

AO History

• Reflection– Meta-object protocol (MOP)

• Control over method invocation, instance creation,etc…

– Often used to implement crosscutting concerns– Considered too powerful and too difficult

• AOSD– Provide necessary abstractions to implement

crosscutting concerns• Instead of all reflection possibilities

– Is often implemented through MP and reflection

Inno.com 18 VUB Programming Technology Lab

AO History

• Domain-specific Aspect Languages– Language targeted towards one kind of aspect

• COOL & RIDL (Synchronisation)• RG (Loop fusion optimization)

– describe a concern– Easy to understand– But

• Limited in expressiveness• New Language for each kind of aspect??

• General-purpose Aspect Languages– More-general aspects possible– describe ‘crosscutting’

10

Inno.com 19 VUB Programming Technology Lab

COOL example

class Stack {push(…);pop(…);

…}

coordinator BoundedStackCoord {

selfexclusive {pop,push};mutexclusive {pop,push};

…}

Synchronisation code is separatedusing an aspect language withsynchronisation primitives

Inno.com 20 VUB Programming Technology Lab

AO Technologies

• Well known general AO technologies– AspectJ (Aspect-oriented Programming)– HyperJ (Multidimensional SoC)– DemeterJ (Tree traversals)– Composition Filters (Message adapters)

• Many more Academic Prototypes– JAC (Dynamic AOP in Java)– AspectC (AOP in C)– AspectS/Andrew/Soul (AOP in Smalltalk)

• Different crosscutting => different solution

11

Inno.com 21 VUB Programming Technology Lab

AOP Terminology

• Base program– (Object-oriented) program

• Aspect– Modularization of a crosscutting concern

• Weaver– Composes (Compiles) the aspect into the base

program

• Joinpoint– Particular point in the base program where the

aspect can be woven

Inno.com 22 VUB Programming Technology Lab

AOP Example

class Buffer { char[] data; int nrElements; Semaphore sema;

bool isEmpty() { bool returnVal; sema.lock(); returnVal = nrElements == 0; sema.unlock(); return returnVal; }}

Synchronization concern

Functionality concern

Code tangling

12

Inno.com 23 VUB Programming Technology Lab

AOP Example

When a Buffer object receives the messageisEmpty, first make sure the object is not beingaccessed by another thread through the get or putmethods

Inno.com 24 VUB Programming Technology Lab

AOP Example

When a Buffer object receives the messageisEmpty, first make sure the object is not beingaccessed by another thread through the get or putmethods

When to execute the aspect (joinpoints)Composition of when and what (weaver directive)What todo at the joinpoint (aspect functionality)

13

Inno.com 25 VUB Programming Technology Lab

AOP Example

before : reception(Buffer.isEmpty){ sema.lock();}

after : reception(Buffer.isEmpty){ sema.unlock();}

class Buffer { char[] data; int nrElements;

bool isEmpty() { bool returnVal; returnVal = nrElements == 0; return returnVal; } }

Inno.com 26 VUB Programming Technology Lab

Talk Contents

• Separation of Concerns• Aspect-orientation• Ready-to-use Technologies

– AspectJ• Example• Development-time Aspects

– HyperJ– DemeterJ– Sina (Composition Filters)

• Research activities• AspectJ demo

14

Inno.com 27 VUB Programming Technology Lab

AspectJ

• Extension of Java with support for aspects• Aspects can introduce extra behaviour

around joinpoints.– Method calls– Assignments– Method Executions– Exception throws– …

• Integration in Emacs, Jbuilder, Forte4J,Eclipse

Inno.com 28 VUB Programming Technology Lab

Example: figure editor

operations thatmove elements

factory methodsDisplay

*

2Point

getX()getY()setX(int)setY(int)move(int, int)

Line

getP1()getP2()setP1(Point)setP2(Point)move(int, int)

Figure

makePoint(..)makeLine(..)

FigureElement

move(int, int)

15

Inno.com 29 VUB Programming Technology Lab

Joinpoints in AspectJ

a Line

a Point

returning orthrowing

dispatch

dispatch

key points in dynamic call graph

a method call

returning or throwinga method execution

returning or throwinga method execution

imagine l.move(2, 2)

Inno.com 30 VUB Programming Technology Lab

Joinpoint terminology

• several kinds of join points– method & constructor call– method & constructor execution– field get & set– exception handler execution– static & dynamic initialization

a Line

dispatch

method calljoin points

methodexecutionjoin points

16

Inno.com 31 VUB Programming Technology Lab

Pointcuts

each time there is a <void Line.setP1(Point)>or <void Line.setP2(Point)> method call

or

a “void Line.setP2(Point)” call

name and parametersa “void Line.setP1(Point)” call

pointcut move(): call(void Line.setP1(Point)) || call(void Line.setP2(Point));

Inno.com 32 VUB Programming Technology Lab

After advice

pointcut move(): call(void Line.setP1(Point)) || call(void Line.setP2(Point));

after() returning: move() { <code here runs after each move> }

a Line

after advice runs“on the way back out”

an aspect defines aspecial class that cancrosscut other classes

aspect History Updating {

}

17

Inno.com 33 VUB Programming Technology Lab

Development-time aspects

• Turn debugging/tracing on/off withoutediting classes

• Debugging/tracing disabled with noruntime cost

• Can save debugging/tracing codebetween uses

• Easy to be sure it is off

Debugging and tracing

Inno.com 34 VUB Programming Technology Lab

Object / Macro vs Aspect

• using an objectcaptures tracingsupport, but doesnot capture itsconsistent usage byother objects

• using an aspectcaptures theconsistent usage ofthe tracing supportby the objects

TraceSupport TraceSupport

18

Inno.com 35 VUB Programming Technology Lab

HyperJ

• No base program– Different views on one program– Compose different views– One concern per view

Expression view methods

Literalview methods

BinaryOP view methods

Display

Expression get/set methods

Literal get/set methods

BinaryOP get/set methods

Kernel

Expression check methods

Literal check methods

BinaryOP check methods

Checker

Inno.com 36 VUB Programming Technology Lab

HyperJ vs AspectJ

• Weaving– Both at compile-time

• Joinpoints– HyperJ: static locations in source

(static joinpoint model)– AspectJ: static and dynamic locations

(dynamic joinpoint model)

• Aspects?– HyperJ: different views on OO program– AspectJ: OO program + aspects

19

Inno.com 37 VUB Programming Technology Lab

DemeterJ: traversals

BusRoute BusStopList

BusStopBusList

Bus PersonList

Person

passengers

buses

busStops

waiting

0..*

0..*

0..*

find all persons waiting at any bus stop on a bus route

OO solution:one methodfor each redclass

Inno.com 38 VUB Programming Technology Lab

DemeterJ: traversals

• Describe traversal– Language primitives to describe complex Visitor

Design Patterns– In terms of graph of classes

• Program robust towards changes in classhierarchy/relationships

• Special case of AspectJ aspects– Maybe even domain-specific aspect-language for

traversals…

20

Inno.com 39 VUB Programming Technology Lab

Composition Filters (Sina)

• Extend Object with Filters (Modular Units)• Filters intercept Messages

• Conditions on messages• Extra behaviour on messages

• Also possible in AspectJ• Different Model

BaseObject

Error Handling Filter

Contract Enforcer Filter

message

Inno.com 40 VUB Programming Technology Lab

Aspect Visualisation

• Aspect Browser– Aspect classifier

• FEAT– Code ‘Surfer’ to classify crosscutting concerns

21

Inno.com 41 VUB Programming Technology Lab

Inno.com 42 VUB Programming Technology Lab

Talk Contents

• Separation of Concerns• Aspect-orientation• Ready-to-use Technologies• Research activities• AspectJ demo

22

Inno.com 43 VUB Programming Technology Lab

Research in AO

• Active Research Community– Over 50 research groups participated in proposal for

European network on AOSD– ±200 participants at first two AOSD Conferences– AOSD workshops at conferences– Many academic prototypes– Many open problems and questions

• Research Topics– Many research in alternative implementations– AO design– Composition and interference of Aspects– Dynamic aspects– …

Inno.com 44 VUB Programming Technology Lab

Belgian Research

• Separation of Business Rules from coreapplication using AspectJ– Augustina Cibran, Maja D’Hondt (VUB)– Models business rules using standard OO

techniques– Coupling of business rules and base program

with aspectJ

23

Inno.com 45 VUB Programming Technology Lab

Belgian Research

• Composable Aspect-specific Languages– Johan Brichau (VUB)– Combine advantages of domain-specific and

general-purpose aspect-languages.– Tackle issues of composition

• Intentional crosscut expressions– Kris Gybels (VUB)– Use a logic programming language (Prolog) to

describe how an aspect crosscuts a baseprogram

Inno.com 46 VUB Programming Technology Lab

Belgian Research

• Runtime Aspect Composition forDistributed Systems– Eddy Truyen (KUL)– Composition of services required from a system.

Each service is an aspect

• Security Aspects– Bart De Win (KUL)– Use aspects to modularize security

• Arriba Research Project– UIA / VUB / RUG– Use aspect technology for code instrumentation

24

Inno.com 47 VUB Programming Technology Lab

Talk Contents

• Separation of Concerns• Aspect-orientation• Ready-to-use Technologies• Research activities• AspectJ demo

Inno.com 48 VUB Programming Technology Lab

The End

http://www.aosd.net

Johan [email protected]

Programming Technology LabVrije Universiteit Brussel

October 2001 issue of Communications of the ACM

Know more ?