language-independent detection of object-oriented design patterns
TRANSCRIPT
![Page 1: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/1.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 1
Language-IndependentDetection of Object-Oriented
Design Patterns
Johan FabryVrije Universiteit Brussel, Programming Technology Lab
![Page 2: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/2.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 2
ß Research Goalß DMP and Soulß Soul to SoulJavaß Base-Level Reificationß Design Pattern Detectionß Conclusion & Future Work
Overview
![Page 3: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/3.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 3
ß Language-agnostic reasoning about OOprogramsß Validate research in different OO -
languagesß Soul: Reasoning about Smalltalk (coding
conventions, DP, bad smells, …)ß Clear separation language indep / depß Validation: ST + Java detect BPP, DP
Research Goal
![Page 4: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/4.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 4
ß DMP:ß Declarative language at meta-levelß OO language at base levelß Meta-level programs reason about structure of
base-level
ß Soul:ß Meta-level prolog-like programming languageß Smalltalk code can be embedded in prolog code
DMP and Soul
![Page 5: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/5.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 5
‘Uses’ Layering:
Soul Layering
InferenceEngine LiCoR MLI Code
Repository
![Page 6: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/6.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 6
ß Logic query with a variable:If class(?x)
Inference engine
InferenceEngine LiCoR MLI Code
Repository
![Page 7: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/7.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 7
ß Appropriate rule is triggered:class(?c) if variable(?c),
generate(?c,[ExplicitMLI current allClasses)])
LiCoR
InferenceEngine LiCoR MLI Code
Repository
![Page 8: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/8.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 8
ß Link to the base-level:allClasses
^Smalltalk allClasses
Meta Level Interface
InferenceEngine LiCoR MLI Code
Repository
![Page 9: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/9.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 9
ß Investigate the code:allClasses…
Code Repository
InferenceEngine LiCoR MLI Code
Repository
![Page 10: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/10.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 10
We discuss changes in inverse order.
Soul to SoulJava
InferenceEngine LicoR MLI Code
Repository
![Page 11: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/11.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 11
ß Use Frost to parse Java Codeß Assume correct java code !ß Java 1.0 (+epsilon) parser
ß Java Code = parse treesß .java ‘File in’ in File Browserß Java Code Browser
Java Code Repository
![Page 12: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/12.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 12
Java Code Browser
![Page 13: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/13.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 13
ß Uses Java Code Repository
ß Implementsß all methods of ST MLIß methods for interface support
MLI For Java
![Page 14: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/14.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 14
ß Namespace [name|super|sub|classes]ß ->Through MLI
ß Class [name|super|sub|ns|methods|iv]ß ->Through MLI
ß InstVar [name|inClass|type]ß ->Through MLI
ß Method [name|arglist]ß ->Through MLI
Base-Level Reification
![Page 15: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/15.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 15
ß Method bodies = logic parse tree formß Smalltalk: count set: 0 =send(variable([#count])),[#set:],<[0]>)
ß Java: count.set(0) =send(variable([#count])),[#set],<[0]>)
ß Allows for easy verification:isMessageSend(send(?receiver,?message,?arguments))
Method Body Reification
![Page 16: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/16.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 16
ß But Java has more PT elements!ß if-then-else, while, for, …
ß Introduce new logic functor for eachß Logic Java Parse trees have different form!ß No transformation to ‘ST-compatible’ formß Logic PT as similar as possible to Java codeß Needed for later work: Java PT manipulations
ß Users of parse tree must take this intoaccount
Method Body Reification
![Page 17: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/17.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 17
ß PTT: Specific layer in LiCoRß Recursively traverses parse treesß Called with:ß ?found predicateß ?process predicateß ?env for results
ß Provide lang-spec implementation
Parse Tree Traversal Layer
![Page 18: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/18.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 18
ß PTT: Specific layer in LiCoRß Recursively traverses parse treesß Called with:ß ?found predicateß ?process predicateß ?env for results
ß Provide lang-spec implementation
Parse Tree Traversal Layer
isMessageSend
![Page 19: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/19.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 19
ß PTT: Specific layer in LiCoRß Recursively traverses parse treesß Called with:ß ?found predicateß ?process predicateß ?env for results
ß Provide lang-spec implementation
Parse Tree Traversal Layer
messageSendMessage(send(?rec,?msg,?args),?args)
![Page 20: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/20.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 20
ß PTT: Specific layer in LiCoRß Recursively traverses parse treesß Called with:ß ?found predicateß ?process predicateß ?env for results
ß Provide lang-spec implementation
Parse Tree Traversal Layer
![Page 21: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/21.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 21
ß Lang specific naming and codingconventions
ß Accessor method name:ß Smalltalk: var nameß Java: ‘get’ + capitalized var name
Idioms
![Page 22: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/22.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 22
ß 4 patterns in 4 apps
Pattern Detection
JRefactoryRefactoringBrowser
DrawletsHotDraw
JavaSmalltalk
![Page 23: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/23.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 23
Double Dispatch
ß One language-independent ruleß Two idiom rulesß selfReferenceß varName
ß HotDraw: 0, Drawlets:3ß RefactoringBrowser: 17, JRefactory 174
Best Practice Patterns
![Page 24: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/24.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 24
Getting Method
ß One language-independent ruleß Two idiom rulesß methodSelectorß gettingMethodName
ß HotDraw: 35/75, Drawlets:33/270ß RBrowser: 125/531, JRefactory 134/721
Best Practice Patterns
![Page 25: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/25.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 25
Template Method
ß Three language-independent rulesß Three idiom rulesß abstractSelector, abstractMethodß selfReference
ß HotDraw Fig: 3, Drawlets Fig: 42 (19 I)ß RBrowser: 43, JRefactory: 50
Design Patterns
![Page 26: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/26.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 26
Template Method
ß Three language-independent rulesß Three idiom rulesß abstractSelector, abstractMethodß selfReference
ß HotDraw Fig: 3, Drawlets Fig: 42 (19 I)ß RBrowser: 43, JRefactory: 50
Design Patterns
Takes care of interfaces in Java
![Page 27: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/27.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 27
Template Method
ß Three language-independent rulesß Three idiom rulesß abstractSelector, abstractMethodß selfReference
ß HotDraw Fig: 3, Drawlets Fig: 42 (19 I)ß RBrowser: 43, JRefactory: 50
Design Patterns
![Page 28: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/28.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 28
Visitor
ß Two language-independent rulesß Use double-dispatch rule
ß Zero idiom rules
ß HotDraw: 0, Drawlets: 0ß RBrowser: 14, JRefactory: 174
Design Patterns
![Page 29: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/29.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 29
ß Feasible to reason about OO software in alanguage-independent way
ß Soul to SoulJavaß Source Code Repository (Parser & Storage)ß Meta-level Interface (Implement API)ß Parse tree & traversal (Convertor & Logic Rules)ß Idiom layer (As Needed)
ß Growth Idiom Layer < growth Detectionlayer
Conclusion
![Page 30: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/30.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 30
ß More pattern detection rulesß Easy / Tricky / Too language-specific
ß New languagesß Small impact on current language-indep rules
ß New language versionsß Reasoning about Java Bytecodesß Type inferencingß Language-Independent code generationß From UML, pattern descriptions
Future Work
![Page 31: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/31.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 31
ß Static Typing vs Dynamic Typingß No Type Inferencing (Yet)ß Types in var declarations: 1 idiom rule
ß Interfacesß Not widely used in patterns: 1 idiom rule
ß Accuracy of detectionß No false positives, no false negativesß Similar limitations as other approaches
FAQ
![Page 32: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/32.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 32
LiCoR Structure
![Page 33: Language-Independent Detection of Object-Oriented Design Patterns](https://reader036.vdocuments.us/reader036/viewer/2022062419/55a182111a28abec098b47ce/html5/thumbnails/33.jpg)
25 Aug 2003 Lang-Indep Detection of OO DP 33
public void getFoo(){if (foo == null)foo = factory.boot();
return foo;}
public void getFoo() {foo = factory.boot(foo == null);return foo;}