Crosscutting Capabilities for Java and AspectJ through DJ

Slides:



Advertisements
Similar presentations
Object Oriented Programming
Advertisements

Aspect Oriented Programming. AOP Contents 1 Overview 2 Terminology 3 The Problem 4 The Solution 4 Join point models 5 Implementation 6 Terminology Review.
1 Shyness in Programming Karl Lieberherr Demeter Research Group Northeastern University Boston.
1 Shyness in Programming Karl Lieberherr Demeter Research Group Northeastern University Boston.
University of British Columbia Software Practices Lab CAS Seminar 06 Fluid AJ - A Simple Fluid AOP Tool Terry Hon Gregor Kiczales.
1 Model Interface Implementation for Two-Way Obliviousness in Aspect-Oriented Modeling Presented by Wuliang Sun Department of Computer Science Baylor University.
Aspect Oriented Programming (AOP) in.NET Brent Krueger 12/20/13.
Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm.
Aspect Oriented Programming Razieh Asadi University of Science & Technology Mazandran Babol Aspect Component Based Software Engineering (ACBSE)
Integrating Independent Components with On-Demand Remodularization based on OOPSLA 2002 paper by Mira Mezini Klaus Ostermann Prepared by Karl Lieberherr.
©Ian Sommerville 2006Software Engineering, 8th edition. Chapter 32 Slide 1 Aspect-oriented Software Development 1.
Expression evaluation E : S | C. S = int. C = Op E E. Op : A | M. A = “+”. M = “*”.
Aspect Oriented Programming Sumathie Sundaresan CS590 :: Summer 2007 June 30, 2007.
Take-Home Final COM 3205 Fall Stamp Coupling Def: data structure is passed as parameter, but called method operates on only some of the` individual.
Hello.java Program Output 1 public class Hello { 2 public static void main( String [] args ) 3 { 4 System.out.println( “Hello!" ); 5 } // end method main.
Slides for Gregor Kiczales Two versions –short version: Crosscutting capabilities for Java and AspectJ through DJ (4 viewgraphs only) –long version: Controlling.
AOSD1 Aspect-Oriented Software Design Karl Lieberherr Theo Skotiniotis.
Not only mark-up languages! There are other many other grammar formalisms and tools than XML. Some of them standardized (ASN). Even XML does not always.
AOP-1 Aspect Oriented Programming. AOP-2 Aspects of AOP and Related Tools Limitation of OO Separation of Concerns Aspect Oriented programming AspectJ.
John J. Sung TA Consulting. Motivation for TraversalJ KL Enterprises identified AOP Enter into the AOP market early Add value by adding traversals to.
System Body Thing * * Definition Fig. UML1 def body Ident S D T B definitions things.
AOP Foundations Doug Orleans Karl Lieberherr. What we did earlier AOP languages have the following main elements: –a join point model (JPM) wrt base PL.
Features of AOP languages AOP languages have the following main elements: –a join point model (JPM) wrt base PL –a specification language for expressing.
System Body Thing * * Definition Fig. UML1 def body Ident S D T B definitions things.
Pattern Language for AP1 Pattern Language for Adaptive Programming (AP) Karl Lieberherr Northeastern University.
Adaptive Software Kevin Cella Graduate Seminar 02/04/2005.
Demeter Aspects We study techniques for the emerging area of Aspect-Oriented Software Development and focus on the following areas:  Aspectual Collaborations.
Chapter 13 ATM Case Study Part 2: Implementing an Object-Oriented Design Java How to Program, 8/e (C) 2010 Pearson Education, Inc. All rights reserved.
Demeter Interfaces: AP without Surprises Prof. Karl Lieberherr and Therapon Skotiniotis, Jeffrey Palm.
Translating Traversals to AspectJ. Outline Motivation Demeter Process for Traversals AspectJ Translation Process.
DJ: traversal-visitor-style programming in Java Josh Marshall/ Doug Orleans Want to add more on traversal through collections and Aspectual Components.
Problem with Java and how it causes a problem for DJ.
AOP/cross-cutting What is an aspect?. An aspect is a modular unit that cross-cuts other modular units. What means cross-cutting? Apply AOP to AOP. Tease.
Why Should You Care About Aspect-Oriented Programming? Karl Lieberherr CCIS.
Methods.
UBC software modularity group 1/14/02 UCSD1 Discussion with Kiczales at UBC Ontology of AOP Ontology is the study of what there is, an inventory of what.
COM1205 TraversalJ Project* Pengcheng Wu Feb.25,2003.
AO Mechanisms in Demeter1 Discussion with Gregor Kiczales at UBC Ontology of AOP Ontology is the study of what there is, an inventory of what exists. An.
Talk only to your friends that share the same concerns (Law of Demeter for Concerns) Midterm Review February 2004.
Pattern Language for AP1 Pattern Language for Adaptive Programming (AP) Karl Lieberherr Northeastern University.
Features of AOP languages AOP languages have the following main elements: –a join point model (JPM) wrt base PL –a specification language for expressing.
Chapter 0: Introduction
Viewgraphs for Semantics
Pattern Language for Adaptive Programming (AP)
Chapter 16 UML Class Diagrams.
Structure and Interpretation of an Aspect Language for Datatype
Aspect-Oriented Programming with the Eclipse AspectJ plug-in
Discussion with Gregor Kiczales at UBC
For John.
Demeter Aspects Who We Are Aspectual Collaborations
Adaptive Object-Oriented Software Development
Object-Oriented Design
Software Design and Development
Chapter 18: Refining Analysis Relationships
ADAPTIVE PROGRAMMING Sezen ERDEM December 2005.
Software Design and Development
Midterm Review CSU 670 Spring 2004.
Lecture 21: Crosscutting Aspect-Oriented Programming Background
Better Separation of Crosscutting Concerns with Aspectual Components
Protocols CS 4311 Wirfs Brock et al., Designing Object-Oriented Software, Prentice Hall, (Chapter 8) Meyer, B., Applying design by contract, Computer,
Requirements for better object-oriented design and programming languages Could be organized better.
APPCs revisited 2/25/2019 APPCs revisited.
AOSD and the Law of Demeter: Shyness in Programming
CLASSES, AND OBJECTS A FIRST LOOK
Software Development CSU 670 Karl Lieberherr
Objects, components, and Frameworks with UML
Karl Lieberherr Doug Orleans
Adaptive Programming in JAsCo
Presentation transcript:

Crosscutting Capabilities for Java and AspectJ through DJ Demeter Team

Expanding Definitions Strat: Literal | Intersection | Variable. Literal = String. Reduce to: Strat : Literal

Similar to: Expression evaluation E : S | C. S = int. C = Op <arg1> E <arg2> E. Op : A | M. A = . M = . Only want: E : S.

Class graph: Find undefined things Fig. UML1 Class graph: Find undefined things definedThings Ident System * Thing * usedThings * * def S T Definition body Body D B definedThings= from System bypassing Body to Thing usedThings = from System through Body to Thing

M1: Equation System Fig. Eq1 EquationSystem equations Equation_List Ident * Variable lhs Equation Numerical rhs Expression_List Simple args Expression * op Add Compound

CS1: UML class diagram Grammar Fig. G1 CS1: UML class diagram Grammar 0..* Entry EParse entries Grammar BParse Production Body rhs parts Part lhs 0..* NonTerm Concrete Abstract

YOUR PROJECT class graph

Java Program: Adaptive Method with DJ class System{ String id = “from Thing to edu.neu.ccs.demeter.Ident”; void repUndef(ClassGraph cg){ checkDefined(cg, getDefThings(cg));} HashSet getDefThings(ClassGraph cg){ String definedThings = "from System bypassing Body to Thing"; Visitor v = new Visitor(){ HashSet return_val = new HashSet(); void before(Thing v1){ return_val.add(cg.fetch(v1, id) );} public Object getReturnValue(){return return_val;}}; cg.traverse(this, definedThings, v); return (HashSet)v.getReturnValue(); } repUndef is a modular unit of crosscutting implementation. Ad-hoc implementation may cut across 100 classes. green: traversal black bold: structure purple: advice red: parameters

Java Program: Adaptive Method with DJ void checkDefined(ClassGraph cg, final HashSet classHash){ String usedThings = ”from System through Body to Thing"; cg.traverse(this, usedThings, new Visitor(){ void before(Thing v){ Ident vn = cg.fetch(v, vi); if (!classHash.contains(vn)){ System.out.println("The object "+ vn + " is undefined."); }}});} }

Control Tangling and Scattering of Class Structure, Traversals and Traversal Advice

Aspect-Oriented Programming Separating the following cross-cutting concerns: Object Structure Traversals through Objects Advice on Traversals New behaviors based on collaborating objects Focus on those four concerns only. They appear frequently.

overall graph: object structure; green graph: traversal; purple: advice Why crosscutting? r=0; Route1:BusRoute :BusList buses busStops :BusStopList Bus15:DieselPowered passengers CentralSquare:BusStop waiting :PersonList :PersonList Joan:Person Paul:Person Seema:Person r++; r++; Eric:Person

Why aspects: Oblivious Object Structure does not have to know about traversals and advice on traversals Traversals don’t have to know about advice on traversals Advice on Traversals has to know minimally about object structure and traversals

Ad-hoc Implementation of three concerns Leads to lots of tangled code with numerous disadvantages The question is not how to eliminate the tangling but how to reduce it AOP is about tangling control the implementation of crosscutting concerns Crosscutting will always lead to some tangling at code level

Example Check whether all used entities are defined. Object structure, traversal (basically an introduction), advice on traversal

Find undefined things definedThings System * Thing * usedThings * * Definition Body definedThings= from System bypassing Body to Thing usedThings = from System through Body to Thing

M1: Equation System Fig. Eq1 EquationSystem equations Equation_List Ident * Variable lhs Equation Numerical rhs Expression_List Simple args Expression * op Add Compound

Name map Definition ClassDef Production Equation

High-level description It is useful to have a high-level description of the collaboration besides the Java source code. Useful documentation. Ultimately we are interested in the executable form of the collaboration (Java source code).

Collaboration with strategies collaboration checkDef { role System { out repUndef(){(uses getDefThings, checkDefined)}; getDefThings(){(uses definedThings)}; checkDefined(){(uses usedThings)}; in definedThings = from System bypassing Body to Thing; in usedThings = from System through Body to Thing; } role Body { } role Thing { } role Definition { } }

Collaboration with strategies collaboration COLLECT { role System { out HashSet collect(){}; defined(){(uses collect, definedThings)}; used(){(uses collect, usedThings)}; in definedThings = from System bypassing Body to Thing; in usedThings = from System through Body to Thing; } role Body { } role Thing { } role Definition { } }

Use of collaboration: Adapter Need to provide the expected methods (in methods) and provide name map. name map: System : EquationSystem Definition : Equation Body : Expression Thing : Variable expected methods: in definedThings // use default in usedThings // use default

What is an aspect? An aspect is a modular unit of crosscutting implementation. A Java method is a modular unit. Can we make a Java method an aspect? Yes, we call such methods adaptive methods. They cut across many classes in an ad-hoc implementation.

Java Program: Adaptive Method class System{ String id = “from Thing to edu.neu.ccs.demeter.Ident”; void repUndef(ClassGraph cg){ checkDefined(cg, getDefThings(cg));} HashSet getDefThings(ClassGraph cg){ String definedThings = "from System bypassing Body to Thing"; Visitor v = new Visitor(){ HashSet return_val = new HashSet(); void before(Thing v1){ return_val.add(cg.fetch(v1, id) );} public Object getReturnValue(){return return_val;}}; cg.traverse(this, definedThings, v); return (HashSet)v.getReturnValue(); } green: traversal black bold: structure purple: advice red: parameters

Java Program: Adaptive Method void checkDefined(ClassGraph cg, final HashSet classHash){ String usedThings = ”from System through Body to Thing"; cg.traverse(this, usedThings, new Visitor(){ void before(Thing v){ Ident vn = cg.fetch(v, id); if (!classHash.contains(vn)){ System.out.println("The object "+ vn + " is undefined."); }}});} }

After applying name map For now we manually edit the Java program.

Java Program with less tangling class EquationSystem{ String id = “from Variable to edu.neu.ccs.demeter.Ident”; void repUndef(ClassGraph cg){ checkDefined(cg, getDefThings(cg));} HashSet getDefThings(ClassGraph cg){ String definedThings = "from EquationSystem bypassing Expression to Variable"; Visitor v = new Visitor(){ HashSet return_val = new HashSet(); void before(Variable v1){ return_val.add(cg.fetch(v1, id) );} public Object getReturnValue(){return return_val;}}; cg.traverse(this, definedThings, v); return (HashSet)v.getReturnValue(); } green: traversal black bold: structure purple: advice red: parameters

Java Program with less tangling void checkDefined(ClassGraph cg, final HashSet classHash){ String usedThings = ”from EquationSystem through Expression to Variable"; cg.traverse(this, usedThings, new Visitor(){ void before(Variable v){ Ident vn = cg.fetch(v, id); if (!classHash.contains(vn)){ System.out.println("The object "+ vn + " is undefined."); }}});} }

Tangling is localized Scattering eliminated Instead of having code spread across several classes, it is localized in one class. Java program is describing the abstract pattern behind the computation of interest: checking whether used entities are defined. Tangling control through abstraction of patterns. We abstract away from structure.

CS1: UML class diagram ClassG definedThings = from ClassG bypassing Body to ClassName CS1: UML class diagram ClassG 0..* Entry EParse entries ClassG BParse ClassDef Body parts Part className 0..* ClassName Concrete Abstract

CS1:UML class diagram ClassG usedThings = from ClassG through Body to ClassName CS1:UML class diagram ClassG 0..* Entry EParse entries ClassG BParse ClassDef Body parts Part className 0..* ClassName Concrete Abstract

M1: Equation System Fig. Eq1 EquationSystem equations Equation_List Ident * Variable lhs Equation Numerical rhs Expression_List Simple args Expression * op Add Compound

M1: Equation System definedThings = from EquationSystem Fig. Eq2 bypassing Expression to Variable Fig. Eq2 M1: Equation System EquationSystem equations Equation_List Ident * lhs Equation Variable Numerical rhs Simple args Expression Expression_List S T * op Add Compound D B

M1: Equation System usedThings = from EquationSystem Fig. Eq3 through Expression to Variable Fig. Eq3 M1: Equation System EquationSystem equations Equation_List Ident * lhs Equation Variable Numerical rhs Simple args Expression Expression_List S T * op Add Compound D B

Equation System Object Fig. Eq4 Equation System Object equations es:EquationSystem els:Equation_List i1:Ident lhs e1:Equation v1:Variable rhs i2:Ident v2:Variable

M1: Equation System usedThings = from EquationSystem through Expression to Variable Example: x = 1.0 . y = (+ x 4.0). z = (* x y). M1: Equation System EquationSystem = <equations> List(Equation). Equation = <lhs> Variable “=“ <rhs> Expression “.”. Variable = Ident. Expression : Simple | Compound. Simple : Variable | Numerical. Compound = “(“ Op <args> List(Expression) “)”. Op : Add | Mul. Add = “+”. Mul = “*”. Numerical = float.

M1: Equation System definedThings= from EquationSystem bypassing Expression to Variable Example: x = 1.0 . y = (+ x 4.0). z = (* x y). M1: Equation System EquationSystem = <equations> List(Equation). Equation = <lhs> Variable “=“ <rhs> Expression “.”. Variable = Ident. Expression : Simple | Compound. Simple : Variable | Numerical. Compound = “(“ Op <args> List(Expression) “)”. Op : Add | Mul. Add = “+”. Mul = “*”. Numerical = float.

CS1: UML class diagram Grammar Fig. G1 CS1: UML class diagram Grammar 0..* Entry EParse entries Grammar BParse Production Body rhs parts Part lhs 0..* NonTerm Concrete Abstract

CS1: UML class diagram Grammar Fig. G2 definedThings = from Grammar bypassing Body to NonTerm CS1: UML class diagram Grammar 0..* Entry EParse entries Grammar BParse Production Body rhs parts Part lhs 0..* NonTerm S T Concrete Abstract D B

CS1:UML class diagram Grammar usedThings = from Grammar through Body to NonTerm Fig. G3 CS1:UML class diagram Grammar 0..* Entry EParse entries Grammar BParse Production Body rhs parts Part lhs 0..* NonTerm S T Concrete Abstract D B

What DJ adds to AspectJ Point cut definitions based on connectivity in class graph. Define point cuts by specifying a (traversal) program based on class graph. Point cut reduction (high-level point cut designator): free programmer from details of class graph.

Context Switch Textbook and project: Chapter 7: Before The Project Chapter 6: While You are Coding