Date post: | 12-Jan-2016 |
Category: |
Documents |
Upload: | marcia-wilkins |
View: | 215 times |
Download: | 0 times |
1
Formal Specification of
Object-Oriented Design
Amnon H. EdenDepartment of Computer Science, University of Essex
Research seminar given at the Department of Computer Science, University of
Essex
25 October, 2003
2
Context
AbstractionsDesign Vs. Architecture
3
Levels of Abstraction
Architecture
Design
Implementation
while (true) doc := c - 1;d := d + 1;if c < 0 goto continue;
continue: ...
while (true) doc := c - 1;d := d + 1;if c < 0 goto continue;
continue: ...
4
Software ArchitectureAn emerging discipline
Origins: Perry & Wolf [92]
“Architectural Styles”: Shaw & Garlan [96]
Underlying formalisms Statecharts finite automata CSP
Architecture Description Languages (ADLs) ACME Rapide UniCon Wright, …
5
Implementations Programming languages Denotational/operational semantics Computational models
Turing machine, RAM machine, Abstract State Machines
Formal Languages Lambda calculus, sigma calculus, …
6
(Object-Oriented) Design Design Methodologies Notations Heuristics Design patterns
In particular: Gamma, Helm, Johnson & Vlissides [94]
Formalization?
7
Objectives Conceptual:
1. A formal ontology for OOD2. A formal specification language
Patterns Libraries & frameworks
3. Elegance4. Reasoning capabilities
Pragmatic Full integration with existing programming practice Tool support Visual specifications
8
Design Models
A Computational Model
9
Program & Design Model
class PMButton {}class WinButton {}
void exit() {}
class PMButton {}class WinButton {}
void exit() {}
interface Creator {}
class WinCreator: extends Creator {WinButton_FactoryMethod() {
// Creation:new WinButton;// Invocation: exit();
}}
interface Creator {}
class WinCreator: extends Creator {WinButton_FactoryMethod() {
// Creation:new WinButton;// Invocation: exit();
}}
class PMCreator: extends Creator {PMButton_FactoryMethod() {
// ...new PMButton;
}}
class PMCreator: extends Creator {PMButton_FactoryMethod() {
// ...new PMButton;
}}
PM-creator
Win-creator
Win-button
Win-button-factory-method
exit
PM-button-factory-method
defined-in
defined-in
creator
PM-button
A
10
Denotation Function
Given L OOPL, A Denotation: Modelling function
D : L UniverseD , RelationsD
Methods
Invoke
Create
Inherit
Classes
Classes, methods Abstract, Inherit,Create, Call, …
11
Axiomatic Semantics
Building Blocks of O-O Design
12
Hierarchy
AbstractFactory ConcreteFactories P()Abstract(AbstractFactory)Inherit(ConcreteFactories,AbstractFactory)
AbastractFactory
ConcreteFactories
A
Factories
Factories
13
Clans, Selection Operator
PrimitiveOperations1 Classes P()PrimitiveOperation1ClassesClasses
PrimitiveOperation1
14
Isomorphic Relations
Factories
CreateProductA
ProductA
Create Factories, ProductA
CreateProductA Create(CreateProductAProducts,
ProductA)
15
LePUS
TermsPredicatesOperator
16
Terms Constants: Belong to a given domain
EJBContext
Variables: Range over a given domainbean
17 / SameSignature
barx
foo(int)
A::foo(int)
B::foo(int)A::bar()X
A::bar()X
Auxiliary Domains P(X) Power set of X
P(X) {x | x X }
Domain of all hierarchies {h P() | Hierarchy(h)}
Domain of function signatures
18
PredicatesR(S,T) Total(R,S,T)
sS tT R(s,t)R(S,T) Isomorphic(R,S,T)
sS tT R(s,t) tT sS R(s,t)
Hierarchy(h) Abstract(r) ch, cr Inherit+(c,r)
Clan(F,C) DefinedIn(F,C) f1,f2F SameSignature(f1,f2)
Tribe(F,C) fF Tribe(f,C)
19
Selection Operator Given a signature s, set of signatures S:
sC Selects methods in cC with signature s Result is a clan
SC Selects clans in cC with signature s Result is a tribe
20
Specifications in LePUS
Design PatternsObject-Oriented Design
21
Factory-Method Pattern
ProductsCreators
factory-methods
ProductsProducts, Creators : FactoryMethods :
Produce(FactoryMethodsCreators,Products)Return(FactoryMethodsCreators,Products)
22
Observer Pattern
subject
Observers
Update(subject)concrete-
subject
getState
SetState
attach(observers)
notifyReferenceToMany(subject,Observers)Inherit(subject, concrete-subject)FirstArg(attach,observers)FirstArg(detach,observers)FirstArgupdateobservers,subject)Invoke(SetStateconcrete-observer, notifysubject)Invoke(notifysubject,updateObervers)Invoke(updateObervers,attachsubject)Invoke(updateObervers,detachsubject)Assign(attachsubject,sybject,observers)
subject, concrete-subject : observers : attach, detach, notify, update, get-state : SetState : P()
23
Visitor Pattern
Visitors
Visit(Elements)
Elements
accept(Visitors)
Concision: Three isomorphic relations, one total relation,
and many pages of documentation in one
diagram
FirstArg(AcceptElements,Visitors)FirstArg(VisitVisitors,Elements)Invocation(AcceptElements,VisitVisitors)Invocation(VisitVisitors,Elements)
Elements, Visitors : Accept : Visit : P()
24
DocumentationTaken from the description of the Enterprise JavaBeans™:
“Every bean obtains an EJBContext object, which is a reference directly to the container”
“A bean's home interface may declare zero or more create() methods, each of which must have corresponding ejbCreate() and ejbPostCreate() methods in the bean class. ”
Bean EJB Context
I
BeanHomeImp
Create Bean
G
ejbCreate
ejbPostCreate
BeanHomeInterface
ICreate Bean
25
Enterprise JavaBeans™
java.ejb.EJBObject
Bean
BeanInterface
IMethods
EJBContext
setEntityContext
BeanStub
Methods G
Rem
ote
Methods
I
BeanSkeleton
Methods G
I
Clients
Methods
26
Reasoning
27
Conformance (also Refinement)
observer
observable
I
Viewsupdate
(Observable)
addObserver(Observer)
notifyObservers
setChanged
ctors
model
Accessors
Mutators
update(Observable)
subject
Observers
Update(subject)concrete-
subject
getState
SetState
attach(observers)
notify
“Model-View-Controller” in Java Swing
... Conforms to the Observer pattern
28
creator, product : factory-method : Create(factory-methodfactory, product)Return(factory-methodfactory, product)
Projection
product
factoryfactory-method
product
factoryfactory-method
creator, product : P()factory-method : Create(factory-methodfactory, product)Return(factory-methodfactory, product)
29
ProductsCreators
factory-methods
Products
Creators
Factory-Methods
ProductsProducts
Factory Method Vs. Abstract FactoryThe difference is merely in the order of sets
Isomorphisms are preserved
30
Two-Tier Programming
Integrating Intentional With Extensional programming
31
Multiple Representations
TextViews
observer
observableI
ScrollViews
Update(Observable)
addObserver(Observer)
notifyObservers
C'tormodel
AccessorsMutators
update(Observable)
Update(Observable)
C'tor
subject
observers
update(subject)
attach(observers)
detach(observers)
notify
concrete-subject
Set-state
get-State
public class Observable { public synchronized void addObserver(Observer o) { ... } public void notifyObservers(Object arg) { ... }}
public class Observable { public synchronized void addObserver(Observer o) { ... } public void notifyObservers(Object arg) { ... }}
class MyObservable extends Observable {public void access() { ... }public void mutate() { ... notifyObservers(); }}
class MyObservable extends Observable {public void access() { ... }public void mutate() { ... notifyObservers(); }}
intrface Observer { void update(Observable); }
intrface Observer { void update(Observable); }
class ScrollView extends Scrollbar implements Observer { … }
class ScrollView extends Scrollbar implements Observer { … }
class TextView extends TextField implements Observer {public TextView(Counter c) { ... }public void update(Observable o, Object counter) { ... }}
class TextView extends TextField implements Observer {public TextView(Counter c) { ... }public void update(Observable o, Object counter) { ... }}
Source Code
Pattern
Design Model
observable
observers
update(observable)
attach(observers)
notify
model
Mutators
Accessors
Instance of a pattern
Extensional tier
Intentional tier
32
subject
observers
update(subject)
attach(observers)
detach(observers)
notify
concrete-subject
Set-state
get-State
Coordination
TextViews
observer
observableI
ScrollViews
Update(Observable)
addObserver(Observer)
notifyObservers
C'tormodel
AccessorsMutators
update(Observable)
Update(Observable)
C'tor
public class Observable { public synchronized void addObserver(Observer o) { ... } public void notifyObservers(Object arg) { ... }}
public class Observable { public synchronized void addObserver(Observer o) { ... } public void notifyObservers(Object arg) { ... }}
class MyObservable extends Observable {public void access() { ... }public void mutate() { ... notifyObservers(); }}
class MyObservable extends Observable {public void access() { ... }public void mutate() { ... notifyObservers(); }}
intrface Observer { void update(Observable); }
intrface Observer { void update(Observable); }
class ScrollView extends Scrollbar implements Observer { … }
class ScrollView extends Scrollbar implements Observer { … }
class TextView extends TextField implements Observer {public TextView(Counter c) { ... }public void update(Observable o, Object counter) { ... }}
class TextView extends TextField implements Observer {public TextView(Counter c) { ... }public void update(Observable o, Object counter) { ... }}
Source Code
Pattern
Design Model
observable
observers
update(observable)
attach(observers)
notify
model
Mutators
Accessors
Instance of a pattern
Coordination
33
Coordination: Part I
TextViews
observer
observableI
ScrollViews
Update(Observable)
addObserver(Observer)
notifyObservers
C'tormodel
AccessorsMutators
update(Observable)
Update(Observable)
C'tor
public class Observable { public synchronized void addObserver(Observer o) { ... } public void notifyObservers(Object arg) { ... }}
public class Observable { public synchronized void addObserver(Observer o) { ... } public void notifyObservers(Object arg) { ... }}
class MyObservable extends Observable {public void access() { ... }public void mutate() { ... notifyObservers(); }}
class MyObservable extends Observable {public void access() { ... }public void mutate() { ... notifyObservers(); }}
intrface Observer { void update(Observable); }
intrface Observer { void update(Observable); }
class ScrollView extends Scrollbar implements Observer { … }
class ScrollView extends Scrollbar implements Observer { … }
class TextView extends TextField implements Observer {public TextView(Counter c) { ... }public void update(Observable o, Object counter) { ... }}
class TextView extends TextField implements Observer {public TextView(Counter c) { ... }public void update(Observable o, Object counter) { ... }}
Source Code
Design Model
Parsing/Reverse engineering
34
Coordination: Part II
TextViews
observer
observableI
ScrollViews
Update(Observable)
addObserver(Observer)
notifyObservers
C'tormodel
AccessorsMutators
update(Observable)
Update(Observable)
C'tor
Design Model
observable
observers
update(observable)
attach(observers)
notify
model
Mutators
Accessors
Instance of a pattern
<observers, observer, TextView, ScrollView>
<observers.update,observer.update, TextView.update,
ScrollView.update>
…
35
subject
observers
update(subject)
attach(observers)
detach(observers)
notify
concrete-subject
Set-state
get-State
Coordination: Part III
observable
observers
update(observable)
attach(observers)
notify
model
Mutators
Accessors
Pattern
Instance of a pattern
<Observers, Observers><subject, observable><concrete-subject, model><Set-state, Mutators><Observers.update,
Observers.update>…
36
Tool Support The Software Architecture Lab, Concordia U. Architectural Reflection projects:
Visualization tool Specifications with a graphic editor
Parser for symbolic specifications Reverse engineering from Java
In collaboration with IBM Research Centre, Haifa
pattern AbstractFactory is FactoryMethods in P2(F), Creators in H, Products in P(H) where tribe (FactoryMethods, Creators), production <-> (FactoryMethods, Products), return_type <-> (FactoryMethods, Products).
pattern AbstractFactory is FactoryMethods in P2(F), Creators in H, Products in P(H) where tribe (FactoryMethods, Creators), production <-> (FactoryMethods, Products), return_type <-> (FactoryMethods, Products).
37
Implementation in Prolog LePUS is readily implemented in PROLOG:
Supported activities: Validation Application Recognition Discovery
FactoryMethod(hierarchy_structure (Creators_root, Creators_Leaves), hierarchy_structure (Products_root, Products_Leaves), FactoryMethods) :- clan(FactoryMethods,[Creators_root|Creators_Leaves]), isomorphic(production, FactoryMethods, [Products_root|Products_Leaves]).
FactoryMethod(hierarchy_structure (Creators_root, Creators_Leaves), hierarchy_structure (Products_root, Products_Leaves), FactoryMethods) :- clan(FactoryMethods,[Creators_root|Creators_Leaves]), isomorphic(production, FactoryMethods, [Products_root|Products_Leaves]).
38
Limitations “Design Models”: Static properties
Cannot give behavioural specifications
Relations are abstract Cannot represent more than
one relationships between (Journey, Location)
Journey Location
origin
destination
39
Future Directions Sample specifications
Common libraries & Frameworks
Behavioural specifications Use Gurevich’s Abstract State Machines (“evolving
algebras”)
Tool support Forward and reverse engineering
Formalization of the visual language Design visual primitives & operators Visual semantics & syntax
40
ReferencesD. E. Perry, A. L. Wolf (1992). "Foundation for the Study of
Software Architecture." ACM SIGSOFT Software Engineering Notes Vol. 17, No. 4.
M. Shaw, D. Garlan (1996). Software Architecture: Perspectives on an Emerging Discipline. Prentice Hall.
E. Gamma, R. Helm, R. Johnson, J. Vlissides (1994). Design Patterns: Elements of Reusable Object Oriented Software. Addison-Wesley
41
BibliographyFull text: http://www.eden-study.org/
Ontology : A. H. Eden Y. Hirshfeld, "Principles in Formal Specification of Object Oriented Architectures.“CASCON 2001, November 5-8, 2001, Toronto, Canada.
LePUS: A. H. Eden (2001). "Formal Specification of Object-Oriented Design." International Conference on Multidisciplinary Design in Engineering CSME-MDE 2001, November 21-22, 2001, Montreal, Canada.
Visual Notation: A. H. Eden (2002). “Design Schemata.” Submitted: Annals of Software Engineering, Special Volume on Software Visualization.
42
Bibliography (Cont.)The Patterns’ Wizard. A. H. Eden, J. Gil, A. Yehudai (1997).
"Precise Specification and Automatic Application of Design Patterns." Proceedings of the Twelve IEEE International Automated Software Engineering Conference (ASE 1997), Lake Tahoe, Nevada Los Alamos, IEEE Computer Society Press, Nov. 3-5, 1997.
Two-Tier Programming. A. H. Eden, J. Jahnke (2002) "Coordinating Software Evolution Via Two-Tier Programming," Coordination 2002, Lecture Notes in Computer Science 2315, pp. 149-159. Berlin: Springer-Verlag.
Intention/Locality. A. H. Eden (2002). “Architecture, Design, Implementation.” Submitted: Journal of Software and System Modeling (SoSyM). Berlin: Springer.