University of British Columbia
Software Practices Lab
Uniform Support for Modeling
Crosscutting Structure
Maria TkatchenkoGregor Kiczales
Work supported by IBM and NSERC.
AOSD 2005 2
Crosscutting in a ‘UML’ Model
Advice:advise
method(Subject.change(…)):“moving concern”
AOSD 2005 3
Crosscutting in a ‘UML’ Model
AOSD 2005 4
Crosscutting in a ‘UML’ Model
Role Binding:
bind Line.moveBy, Point.moveBy, Point.setX, Point.setY
to Subject.change
AOSD 2005 5
Crosscutting in a ‘UML’ Model
Advice:advise
method(Subject.change(…)):“moving concern”
Role Binding:
bind Line.moveBy, Point.moveBy, Point.setX, Point.setY
to Subject.change
AOSD 2005 6
Related Work• [Katara, Mikkonen, ‘02]
– hierarchy of related refinements– merge sequences for composed behaviour
• [Lions et.al.,’02]– AOP in UML through use of meta-modeling in
OpenTool/UML
• [Baniassad, Clarke, ‘04]– modeler identifies and binds aspects (themes)– throughout lifecycle of project
• [Kande et.al.,’02]– first-class aspects in UML
AOSD 2005 7
Terminology
• Model– as in modeling, UML, MDD, meta-model…
• JPM– as in join point model– supports the above crosscutting models
AOSD 2005 8
Goals• Foundation for modeling crosscutting structure
– Compositional• different model elements• different crosscutting perspectives
– Simple• uniform• linear in number of crosscutting views (not exponential)• relatively easy to add new kind of crosscutting
• Simplifies implementation of modeling tool– directly benefits for modeling tool implementer, meta-
modeler• i.e. would it be easier to add pattern support with this approach?
– indirectly benefits modeler
AOSD 2005 9
What JPM (Join Point Model) Supports That
• JPMs are fundamental mechanism for support of crosscutting
• A simple JPM for UML– (for now, taking freedom to change the UML
meta-model)
• JPMs have three parts [Masuhara, ‘03]• Join points• Identifying join points• Semantic effect
AOSD 2005 10
JPM
• Join points– model elements– Class, Method, Field, Advice in Class Diagram– Method Call, Sequence (focus of control) in Sequence Diagram– uniform, but 2 JPs per crosscutting interaction
• Identifying join points– signatures, type patterns, pointcuts…
• Semantic effect– each has particular declaration semantics
• declare a class, method, sequence, advice…
• Weaver– based on Eclipse EMF framework– collects crosscutting among the elements– what elements crosscut each other?
AOSD 2005 11
Meta-Model
FieldDecl MethodDecl AdviceDecl
ClassMemberDeclClassDecl SequenceDecl MethodCallDecl
ClassDiagramMemberDecl SequenceDiagramMemberDecl
Declaration
JoinPoint
crosscutByList: List<JoinPoint>
AOSD 2005 12
Crosscutting in the weaver
(<jp>, <jp>, <jp>, <jp>, <jp>, <jp>, …)
AOSD 2005 13
Crosscutting in the weaver
(<jp>, <jp>, <jp>, <jp>, <jp>, <jp>, …)
AOSD 2005 14
Crosscutting in the weaver
(…<jp>, …)
(… <jp>, …)
• every element has
crosscutByList
• two join points per
crosscutting interaction
AOSD 2005 15
Crosscutting in the weaver
Role Binding:
bind Line.moveBy, Point.moveBy, Point.setX, Point.setY
to Subject.change
(<jp>, <jp>, <jp>, <jp>, <jp>, <jp>, …)
• same thing happens
for all kinds of cc
AOSD 2005 16
Crosscutting in the weaverAdvice:advise
method(Subject.change(…)):“moving concern”
Role Binding:
bind Line.moveBy, Point.moveBy, Point.setX, Point.setY
to Subject.change
• how is advice
affected by role
binding?
(<jp>, <jp>, <jp>, <jp>, <jp>, <jp>, …)
(<jp>, <jp>, <jp>,…)
AOSD 2005 17
Crosscutting in the weaverAdvice:advise
method(Subject.change(…)):“moving concern”
Role Binding:
bind Line.moveBy, Point.moveBy, Point.setX, Point.setY
to Subject.change
• how is advice
affected by role
binding?
(<jp>, <jp>, <jp>, <jp>, <jp>, <jp>, …)
(<jp>, <jp>, <jp>,…)
( <jp>, <jp>,…)
AOSD 2005 18
Implementation• Simple staged approach to weaving
1. role binding2. inter-type declarations3. sequence diagrams4. advice
• Simplifies semantic interactions– advice depends on roles, but not vice versa
• Each pass records– relevant semantic information
• type and method inheritance tables– additions to crosscutByList of each JP
AOSD 2005 19
Use of woven information
• Question: how to find out whether an element has advice applied to it?
boolean hasAdvice(Decl decl) {
for (Decl otherDecl:
decl.getCrosscutByList())
if (otherDecl instanceof AdviceDecl)
return true;
return false;
AOSD 2005 20
Use of woven information
• Question: how to build the complete (possible) cflow of a call C
for C and any calls in its sequence diagram, repeat containedCalls(call)
List containedCalls(Call c1) {List result;
for (Decl c2: c1.getCrosscutByList()) if (c2 instanceof Call && c1.getSignature().matches(c2.getSignature()) { result.add(c2); result.addAll(containedCalls(c2));
} }
AOSD 2005 21
Status of work
• Done so far– JPM design– UML meta-model– UML language– Implementation: weaver
• Prototype• Modular
– Simplified: reasonable subset of UML• no methodReceipt, methodReturn join points in
Sequence Diagrams• no other diagrams
AOSD 2005 22
Summary
• Simple approach to modeling crosscutting– for existing and new kinds of crosscutting
• Simple and modular implementation
• Approach consists of– JPM– extension to the UML meta-model– weaver
University of British Columbia
Software Practices Lab
Uniform Support for Modeling
Crosscutting Structure
QUESTIONS?