demeter interfaces: ap without surprises prof. karl lieberherr and therapon skotiniotis, jeffrey...

45
Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Upload: alan-singleton

Post on 12-Jan-2016

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces: AP without Surprises

Prof. Karl Lieberherrand

Therapon Skotiniotis, Jeffrey Palm

Page 2: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 2

Sustaining change

• Software systems continuously evolve

• Software engineers developed principles to ease evolution – Interfaces – Information hiding – Black-Box principle

• Support alterations without affecting clients.

Page 3: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 3

Second view: Working with incomplete information

• Scientists (e.g., biologists) need to reason about reactive systems (e.g., cells or organs or organisms) which are incompletely known.

• How can we specify behavior without knowing the details of the structure.

• Define interface that captures the scope of the allowed details.

Page 4: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 4

Sustaining change

• Can we sustain changes to interfaces?– information-hiding is good to protect against

changes in data representation. – Does not help with changes to interfaces.

• Need to protect against interface changes.• AP lets the program recover from (or adapt

to) interface changes. – This is similar to the shyness metaphor in the

Law of Demeter (LoD): structure evolves over time, thus communicate with just a subset of the visible objects.

Page 5: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 5

Decoupling of Interface

– Black-box Principle: the representation of objects can be changed without affecting clients.

– AP Principle: the interface of objects can be changed within certain parameters without affecting clients.

• AP Principle builds on top of the Black-Box principle.

• AOP Principle: the interface or implementation of objects can be changed within certain parameters without affecting aspect clients.

Page 6: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 6

Role of Demeter Interfaces• Make precise what

is meant by “within certain parameters”.– Static verification

• Demeter Interface controls how interface is allowed to change.

AP Principle

Black-box Principle

AOP Principle

: controls changes to

Paradigm/Impl.

Interface

Client

AdaptiveDemeterInterface

DemeterClient

ObjectOriented

Interface

Client

AspectOriented

AspectInterface

AspectClient

Page 7: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 7

Outline

• Introduction to AP (in DAJ)• Problems with AP • Solution: Demeter Interfaces• Evaluation of Demeter Interfaces

– Solve AP problems– Higher modularity and reuse

• Future challenges of Demeter Interfaces

Page 8: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 8

Introduction to AP

• An AP program is made up of :– a data structure – a traversal

specification– a computation

• For OO programs – class graph

(Class Diagram)– traversal

( DSL language) – visitor

(Specialized Class)

Page 9: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 9

Class graph in DAJ

• Textual notation for specifying the class graph

F G

A

C = <d>D [<f> F] <e>E.

A : F G

D

E

C

e

d

Ff

1

0..1

1

Page 10: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 10

Class graph in DAJ (cont)

• The textual notation also defines an input grammar. – Text in double quotes denotes syntax tokens.

C = “date” <d>D “event”<e>E.

D = <m> int “/” <d> int “/” <y> int.

E = String.

date 10/11/2006 event Party

Event.cd

Input.txt

Page 11: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 11

Strategy specifications in DAJ

• Defines a navigation specification on a class graph. – Target to sourcefrom A to B

– With explicit intermediate nodes and edgesfrom A via C to B from A bypassing C to B from A via -> C,d,D to B

– Abstracting nodes with “*” patternfrom A via C to *

Page 12: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 12

Visitors in DAJ

• Specialized classes with methods that are executed before or after a node is reached

class BalancedParenthesis{ int openParen = 0;int closeParen = 0;

void before(OpenParen op){ openParen++;}void after(CloseParen co) { closeParen++;}int return(){ return openParen – closeParen;}

}

Before traversing an object of type OpenParen

After traversing an object of type CloseParen

Value returned by the Visitor at the end of the traversal

Page 13: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 13

Putting it all together

• Traversal files hold traversal specifications that link visitors to strategies.

aspect CheckParens { declare strategy: toAll:"from Expression to *"; declare traversal: int unbalanced():

toAll(BalancedParenthesis); }

• Traversal files are extensions to AspectJ’s aspects. • Traversal methods become (public) methods of their

source classes

Page 14: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 14

AP, what is it good for?

• Removes hard-coded structural information. – {x = a.b.c.d.f;}

• Encapsulates structural traversal concerns, increasing code modularity.

• Programs remain “correct” after certain modifications to the underlying data structure.

Page 15: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 15

Running example in DAJ

• A simple equation system.– each equation defines a new variable– variables have global scope

( x = 5; y = (x − 2); z = ((y−x) + (y+9)))

• Implement a semantic checker – Each used variable must have been defined.

Page 16: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 16

Class Diagram for simple equations

EqSystem Equation

Compound Simple

Expr

Op

Add Times…

Numerical Variable

IdentInteger

lrand

rran

drhs

lhs

op

OpenParen CloseParen

0..1 0..1

*

Page 17: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 17

Class Graph for simple equations

EqSystem Equation

Compound Simple

Expr

Op

Add Times…

Numerical Variable

IdentInteger

lrand

rran

d

rhs

op

lhs

OpenParen CloseParen

0..1 0..1

*

Page 18: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 18

Writing the strategy

• A simple equation system– each equation defines a new variable– Variables have global scope

• Capture definitions – Left-hand-side of equation defines one

variable• Capture variable references

– Right-hand-side of equation may refer to variable(s) multiple times.

Page 19: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 19

Writing the strategy: DefinedIdents

• Capture definitions – Left-hand-side of equation defines one

variable

from EqSystem via ->*,lhs,*

to Variable

Page 20: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 20

Defined variables.EqSystem Equation

Compound Simple

Expr

Op

Add Times…

Numerical Variable

IdentInteger

lrand

rran

d

rhs

op

lhs

OpenParen CloseParen

0..1 0..1

*

Page 21: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 21

Writing the strategy:UsedIdents

• Capture variable references– Right-hand-side of equation can refer to

variable(s) multiple times.

from EqSystem

via −>*,rhs,*

to Variable

Page 22: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 22

Referenced variables.EqSystem Equation

Compound Simple

Expr

Op

Add Times…

Numerical Variable

IdentInteger

lrand

rran

d

rhs

op

lhs

OpenParen CloseParen

0..1 0..1

*

Page 23: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 23

Traversal Files

• Visitors collect definitions and references.

aspect SemanticChecker { declare strategy: definedIds:"from EqSystem via ->*,lhs,* to Variable"; declare strategy: usedIds:"from EqSystem via ->*,rhs,* to Variable"; declare traversal:void getDefined():definedIds(CollectDef); declare traversal:void getUsed():usedIds(CollectDef); }

class CollectDef { void before(Variable v){System.out.println(v.toString());}}

Page 24: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 24

Withstanding change

• Our program still works after – Changing infix notation to postfix or prefix

• We are really changing the order of members definitions in Compound

– Refactor Compound and move llrand and rrand to classes denoting math operators• This does not affect our paths to defined and

used variables

– Adding new operations, e.g., exponentiation • Variable references are now in the exponent

field but our strategies can deal with it!

Page 25: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 25

Problems with AP

• Hard coded name dependencies– Altering class (or edge) names that strategies or

visitors depend on, e.g., lhs or Variable

• Harder to understand AP code– Larger class graphs have too much “noise”

• AP code dependency on implicit assumptions– Adding one argument functions introduces two

variable definitions with different scopes.– AP program compiles fine but gives wrong

results

Page 26: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 26

Demeter Interfaces

• An interface between class graph and adaptive code.

Demeter Interface

Visitor

ClassGraph

Traversal File

Page 27: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 27

Demeter Interfaces

• Interface Class Graph– An abstraction

on Class Graphs

• Accepts a list of traversal files

di ExprICG with SemanticChecker{ ESystem = List(Definition). Definition = <def> DThing ”=” <body> Body.Body = List(UThing).UThing = Thing.DThing = Thing.Thing = .List(S) ˜ ”(” S ”)”.}

List(s) defines collections whose elements are of type SA list of traversal files that will

use this Demeter Interface

Page 28: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 28

Interface Class Graph (ICG)

ESystem

Definition

Body DThing

UThing Thing

• Contains only the relevant nodes and edges – For a semantic

checker, definitions and references

• Strategies are defined on the ICG

• Visitors use classes in the ICG

body def

*

*

Page 29: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 29

Strategies

ESystem

Definition

Body DThing

UThing Thing

• Defined entities – gdefinedIds = from ESystem via DThing to Thing

– gusedIds =from ESystem via UThing to Thing

ESystem

Definition

Body DThing

UThing Thing

ESystem

Definition

Body DThing

UThing Thing

*

*

Page 30: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 30

Constraints• Recall

– One new variable per equation

– unique(from Definition via DThing to Thing)

• Strategies are non-empty– nonempty(gdefinedIds)– nonempty(gusedIds)

ESystem

Definition

Body DThing

UThing Thing

unique

*

*

Page 31: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 31

Constraints• Define conditions that need to hold of

the underlying data structure in terms of paths.

• Language of constraints provides – unique(s) , nonempty(s), – subset(s1,s2), equal(s1,s2)

• Logical connectives– && || !

Page 32: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 32

Traversal Files and constraints

aspect SemanticChecker with DVisitor{ declare strategy: gdefinedIdents:

”from ESystem via DThing to Thing”. declare strategy: gusedIdents: ”from ESystem via UThing to Thing”. declare strategy definedIdent: ”from Definition via DThing to Thing”. declare traversal:void printDefined():gdefinedIdents(DVisitor); declare traversal:void printUsed():gusedIdents(DVisitor);

declare constraints: unique(definedIdent), nonempty(gusedIdents), nonempty(gdefinedIdents).}

Accepts a list of Visitors that will be used in traversals

Constraints on strategies make implicit assumptions

about the class graph explicit

Page 33: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 33

Visitors

• Visitors remain unchanged.

class CollectDef { void before(Variable v){System.out.println(v.toString());}}

Page 34: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 34

Connecting Demeter Interfaces

with a concrete class graph• Class graphs have to explicitly state

which Demeter Interfaces they implement

• Provide a mapping to the ICG entities for each Demeter Interface a class graph implements.

Page 35: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 35

All ICG entities need to be mapped

ESystem

Definition

Body DThing

UThing Thing

EqSystem Equation

Compound Simple

Expr

Op

Add Times…Numerical Variable

IdentInteger

lrand

rran

d

rhs lhsop

OpenParen CloseParen0..1 0..1

*

*

* Equation

Variable

Compound Simple

Expr

VariableVariable

Equation

Variable

Page 36: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 36

Mappingscd InfixEQSystem implements ExprICG {EquationSystem = <eqs> List(Equation).// Same as before.

for ExprICG ( use EquationSystem as ESystem, use Equation as Definition, use Expr as Body, use (−>*,lhs,Variable) as DThing, use (−>*,rhs,* to Variable) as UThing, use Variable as Thing)}

List of implemented Demeter Interfaces

One mapping for each implemented Demeter Interface

We can map 1. A class to a class

use Variable as Thing

2. An edge to an edgeuse ->A,b,B as ->F,g,G

3. A strategy to a classuse ->*,lhs,Variable as DThing

Page 37: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 37

A bit on implementation

• Phase I– AP code can be

developed and statically checked

• Phase II– Mappings

expanded and re-verify constraints

Page 38: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 38

Surprise!

• No hard coded name dependencies– Mapping decouples naming dependencies

• Easier to understand AP code– No more noise, the ICG, traversal files and

visitors have all the information (Phase I)

• No more implicit assumptions– Constraints have made these explicit and

statically verifiable! (Phase I and Phase II)– Naïve addition of one argument functions

gives a compile time error, unique fails.

Page 39: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 39

Modularity

• Demeter Interfaces – Provides an explicit interface – Smaller interface between AP code and

the rest of the system– Hides class graph information that is

irrelevant to AP code– Linguistic units for Demeter Interfaces

Page 40: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 40

Reuse

• Multiple Demeter Interfaces can be used on a single class graph

• Multiple mappings of the a Demeter Interface on the same class graph

• Easier reuse of Demeter Interfaces across different class graphs– Reuse of traversals and visitor code.

Page 41: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 41

Future Challenges

• Extend mapping mechanism– Partly defined mappings and use of

inference/unification.

• Composition of Demeter Interfaces– Attachment at leaf nodes– Attachment at intermediate nodes– Composition exposes certain details of the new

composite interface while hiding others

• Interfaces for general purpose Aspects.– Sequence diagrams as an abstraction of the

dynamic call graph.

Page 42: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 42

Interfaces for general purpose AOP

• Aspects add/replace behavior based on messages between objects

• Specify the communication protocol between components (abstraction of dynamic call graph)– Expose/hide messages to/from aspects

• Constraints on communication protocol – Stop aspects form breaking invariants.– Runtime verification

Page 43: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 43

Conclusions

• Demeter Interfaces: Sustain change / control uncertainty about structure of objects

• Aspect Interfaces: Sustain change / control uncertainty about behavior and structure of objects

Page 44: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 44

DIs and partial information

• DIs are about programming with partial information about object structure.

• DIs are about knowing exactly what you can depend on in the details of the object structure that you don’t know yet.

Page 45: Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm

Demeter Interfaces @ ETH 45

Demeter Interfaces

• By nature hard to define• Define the scope of validity of a

generic piece of software where many details are left open

• The Demeter Interface limits the possibility for the details.