Parametric Aspects. Parametric Aspects. A way to design-pattern A way to design-pattern implementation (...and others)? implementation (...and others)? Jordi Alvarez Jordi Alvarez Open University of Catalonia Open University of Catalonia Barcelona - Spain Barcelona - Spain [email protected][email protected]
18
Embed
Parametric Aspects. A way to design-pattern implementation (...and others)? Jordi Alvarez Open University of Catalonia Barcelona - Spain [email protected].
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Parametric Aspects.Parametric Aspects.A way to design-pattern implementation A way to design-pattern implementation
(...and others)?(...and others)?
Jordi AlvarezJordi AlvarezOpen University of CataloniaOpen University of Catalonia
Certain problems cannot be adequately solved with OO+AOP
•Example 1: Some design patterns in GoF can be implemented in an abstract way using AOP, but others not.
•Example 2: For some problems (like EJB development) we still need to provide a lot of redundant code.
Motivation
Goal: provide aspect language extensions that allow to provide reusable implementations with no redundant code for a broader range of problems than that provided nowadays by OO+AOP.
(Our) Solution
•Adapt parametric-type ideas to separation of concerns.
•This should be done in a very flexible way and allow powerful results!
class ComponentFactory plays AbstractFactory; ...}
Parameterized/template classes
class <ProductSet>Factory extends<AbstractFactory> {
…}
Parameterized/template classes
Multiple generation of classes
aspect ComponentFactoryP ext. FP { ... class-set A plays ProductSet { ... } class-set B plays ProductSet {... }}
class AFactory extends ComponentFactory { …}
class BFactory extends ComponentFactory { …}
ProductSet=BProductSet=A
Method generation from roles / Multiple generation of roles
class <AbstractFactory> {
public abstract <AbstractProduct> create<AbstractProduct>();}
abstract class CompFact {
public abstract Window createWindow();
public abstract ScrollBar createScrollBar();
public abstract Button createButton();}
aspect ComponentFactoryPattern extends FactoryPattern { class ComponentFactory plays AbstractFactory; class Window plays AbstractProduct; class ScrollBar plays AbstractProduct; class Button plays AbstractProduct; ...}
Parameterized/template methods
Evaluable at compile-timeShould allow class hierarchy traversal
class <ProductSet>Factory extends<AbstractFactory> {
public … create<AbstractProduct>() { return new <subclasses(AbstractProduct) & members(ProductSet)>(); }
}
class AFactory … { … return new AWindow(); … return new AScrollBar(); … return new AButton();}
class BFactory … { … return new AWindow(); … return new AScrollBar(); … return new AButton();}
aspect ComponentFactoryPattern extends FP { class Window plays AbstractProduct; class ScrollBar plays AbstractProduct; class Button plays AbstractProduct; class-set A plays ProductSet { AWindow, AScrollBar, AButton; } class-set B plays ProductSet { ... } }