Language-Independent Detection of Object-Oriented Design Patterns - - PowerPoint PPT Presentation

language independent detection of object oriented design
SMART_READER_LITE
LIVE PREVIEW

Language-Independent Detection of Object-Oriented Design Patterns - - PowerPoint PPT Presentation

Language-Independent Detection of Object-Oriented Design Patterns Johan Fabry Vrije Universiteit Brussel, Programming Technology Lab johan.fabry@vub.ac.be 25 Aug 2003 Lang-Indep Detection of OO DP 1 Overview Research Goal DMP and Soul


slide-1
SLIDE 1

25 Aug 2003 Lang-Indep Detection of OO DP 1

Language-Independent Detection of Object-Oriented Design Patterns

Johan Fabry Vrije Universiteit Brussel, Programming Technology Lab johan.fabry@vub.ac.be

slide-2
SLIDE 2

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

slide-3
SLIDE 3

25 Aug 2003 Lang-Indep Detection of OO DP 3

ß Language-agnostic reasoning about OO programs ß 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

slide-4
SLIDE 4

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

slide-5
SLIDE 5

25 Aug 2003 Lang-Indep Detection of OO DP 5

‘Uses’ Layering:

Soul Layering

Inference Engine LiCoR MLI Code Repository

slide-6
SLIDE 6

25 Aug 2003 Lang-Indep Detection of OO DP 6

ß Logic query with a variable:

If class(?x)

Inference engine

Inference Engine LiCoR MLI Code Repository

slide-7
SLIDE 7

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

Inference Engine LiCoR MLI Code Repository

slide-8
SLIDE 8

25 Aug 2003 Lang-Indep Detection of OO DP 8

ß Link to the base-level:

allClasses ^Smalltalk allClasses

Meta Level Interface

Inference Engine LiCoR MLI Code Repository

slide-9
SLIDE 9

25 Aug 2003 Lang-Indep Detection of OO DP 9

ß Investigate the code:

allClasses …

Code Repository

Inference Engine LiCoR MLI Code Repository

slide-10
SLIDE 10

25 Aug 2003 Lang-Indep Detection of OO DP 10

We discuss changes in inverse order.

Soul to SoulJava

Inference Engine LicoR MLI Code Repository

slide-11
SLIDE 11

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

slide-12
SLIDE 12

25 Aug 2003 Lang-Indep Detection of OO DP 12

Java Code Browser

slide-13
SLIDE 13

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

slide-14
SLIDE 14

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

slide-15
SLIDE 15

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

slide-16
SLIDE 16

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 into account

Method Body Reification

slide-17
SLIDE 17

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

slide-18
SLIDE 18

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

slide-19
SLIDE 19

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)

slide-20
SLIDE 20

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

slide-21
SLIDE 21

25 Aug 2003 Lang-Indep Detection of OO DP 21

ß Lang specific naming and coding conventions ß Accessor method name:

ß Smalltalk: var name ß Java: ‘get’ + capitalized var name

Idioms

slide-22
SLIDE 22

25 Aug 2003 Lang-Indep Detection of OO DP 22

ß 4 patterns in 4 apps

Pattern Detection

JRefactory RefactoringBrowser Drawlets HotDraw Java Smalltalk

slide-23
SLIDE 23

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

slide-24
SLIDE 24

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

slide-25
SLIDE 25

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

slide-26
SLIDE 26

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

slide-27
SLIDE 27

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

slide-28
SLIDE 28

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

slide-29
SLIDE 29

25 Aug 2003 Lang-Indep Detection of OO DP 29

ß Feasible to reason about OO software in a language-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 Detection layer

Conclusion

slide-30
SLIDE 30

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

slide-31
SLIDE 31

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

slide-32
SLIDE 32

25 Aug 2003 Lang-Indep Detection of OO DP 32

LiCoR Structure

slide-33
SLIDE 33

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;}