teaching inter-object design patterns to freshmen prasun dewan unc-chapel hill
TRANSCRIPT
![Page 1: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/1.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Prasun Dewan
UNC-Chapel Hill
![Page 2: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/2.jpg)
Teaching Inter-Object Design Patterns to Freshmen
• Recurring theme in programming– Not captured by a programming construct
• Components– Problem context– Abstract solution– Motivation for solution
![Page 3: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/3.jpg)
Teaching Inter-Object Design Patterns to Freshmen
• Intra-Object– Abstract algorithms in individual objects– e.g. Loop patterns (Astrachan ’98)
• Inter-Object– Abstract ways in which multiple objects work
together– e.g. Observer, Façade (Gamma et al ’95)
![Page 4: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/4.jpg)
Teaching Inter-Object Design Patterns to Freshmen
• Intra-Object– Abstract algorithms in individual objects– e.g. Loop patterns (Astrachan ’98)
• Inter-Object– Abstract ways in which multiple objects work
together– e.g. Observer, Façade (Gamma et al ’95)
![Page 5: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/5.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Facade
Iterator
Interactor
Composite
MVC
Factory
Class Object
Interface
Inheritance
Observer
![Page 6: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/6.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Facade
Iterator
Interactor
Composite
MVC
Factory
ObserverClass Object
Interface
Inheritance
![Page 7: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/7.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
Class Object
Interface
Inheritance
![Page 8: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/8.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
Monolithic, single- object programs
Class Object
Interface
Inheritance
![Page 9: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/9.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
Class Object
Interface
Inheritance
Modular, multiple- object programs
![Page 10: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/10.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
Implicit pattern
Class Object
Interface
Inheritance
![Page 11: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/11.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
Exact mimicking
Class Object
Interface
Inheritance
![Page 12: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/12.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
Matching vs. using
Class Object
Interface
Inheritance
![Page 13: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/13.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
Matching vs. using
Class Object
Interface
Inheritance
![Page 14: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/14.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Matching vs. using
Class Object
Interface
Inheritance
Example Exercise
![Page 15: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/15.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Exercise
Matching vs. using
Class Object
Interface
Inheritance
Example
![Page 16: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/16.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Explicit pattern
Class Object
Interface
Inheritance
Example Exercise
![Page 17: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/17.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
Class Object
Interface
Inheritance
![Page 18: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/18.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
Class Object
Interface
Inheritance
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Dec
orat
or
Bridge BuilderFacade
Iterator
Interactor
Composite
MVC
Factory
Observer
Dec
orat
or
Bridge Builder
![Page 19: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/19.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
Compiler Toolkit
Complex & Abstract
Class Object
Interface
Inheritance
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Dec
orat
or
Bridge BuilderFacade
Iterator
Interactor
Composite
MVC
Factory
Observer
Dec
orat
or
Bridge Builder
Large
![Page 20: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/20.jpg)
Diff. Approach
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
Compiler Toolkit
Class Object
Interface
Inheritance
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Dec
orat
or
Bridge BuilderFacade
Iterator
Interactor
Composite
MVC
Factory
Observer
Dec
orat
or
Bridge Builder
Large
Complex & Abstract
![Page 21: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/21.jpg)
Diff. Approach
Teaching Inter-Object Design Patterns to Freshmen
Example ExerciseConcrete
Class Object
Interface
Inheritance
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Dec
orat
or
Bridge BuilderFacade
Iterator
Interactor
Composite
MVC
Factory
Observer
Dec
orat
or
Bridge Builder
Small (1 slide)
Before
After
![Page 22: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/22.jpg)
Diff. Approach
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
? ?
Concrete
Class Object
Interface
Inheritance
Before
After
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Dec
orat
or
Bridge BuilderFacade
Iterator
Interactor
Composite
MVC
Factory
Observer
Dec
orat
or
Bridge Builder
Medium (2 wk hw)Small (1 slide)
![Page 23: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/23.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
Counter Search
Concrete
Class Object
Interface
Inheritance
Before
After
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Facade
Iterator
Interactor
Composite
MVC
Factory
ObserverBefore
After
Medium (2 wk hw)
![Page 24: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/24.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
Counter Search
Concrete
Class Object
Interface
Inheritance
Before
After
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
![Page 25: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/25.jpg)
Counter
• Can add arbitrary positive/negative value to an integer.
• Different user interfaces.
![Page 26: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/26.jpg)
Console Input and Output
![Page 27: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/27.jpg)
Console Input and JOption Output
![Page 28: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/28.jpg)
Console Input,Output and JOption Output
![Page 29: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/29.jpg)
Pattern-free Implementation
public class ConsoleUI { static int counter = 0; public static void main(String[] args) {
while (true) { int nextInput = readInt(); if (nextInput == 0) return; counter += nextInput; System.out.println("Counter: " + counter);}
}}
![Page 30: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/30.jpg)
Model/Interactor Separation
ConsoleUI
MixedUI
Counter MultipleUI
Model
Model has no UI code and only semantics!
Interactor
Interactor
Interactor
![Page 31: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/31.jpg)
Composing Model and Interactor
public static main (String args[]) (new AConsoleUI()).interact (new ACounter());}
![Page 32: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/32.jpg)
Counter Modelpublic class ACounter implements Counter {
int counter = 0;public void add (int amount) {
counter += amount;}public int getValue() {
return counter;}
}
• Code reusability• Less duplication• Fewer changes
![Page 33: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/33.jpg)
Interactor
public class AConsoleUI implements ConsoleUI { public void interact (Counter counter) {
while (true) { int nextInput = readInt(); if (nextInput == 0) return; counter.add(nextInput); System.out.println("Counter: " + counter.getValue());}
}}
Shared model code
Input
Output
![Page 34: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/34.jpg)
Monolithic Inetractor Drawbacks
MixedUIConsoleUI
MixedUI
Counter MultipleUI
Duplicated input code
![Page 35: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/35.jpg)
MVC Pattern
Controller View
Model
Per
form
s In
put
Per
form
s O
utpu
t
Write methods
Read methods
![Page 36: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/36.jpg)
Controller View
MVC Pattern in Counter
Modeladd() getValue()
Per
form
s In
put
Per
form
s O
utpu
t
![Page 37: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/37.jpg)
Multiple Views and Controllers
Model
Controller 1
Controller 2
Controller 3
Controller M
View 1
View 2
View 3
View N
![Page 38: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/38.jpg)
Syncing Controllers & View
Model
Controller 1
Controller 2
Controller 3
Controller M
View 1
View 2
View 3
View N
![Page 39: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/39.jpg)
Observer/Observable Pattern
Model
Changed object notifies views
ObservableObserver
Controller 1
Controller 2
Controller 3
Controller M
View 1
View 2
View 3
View N
![Page 40: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/40.jpg)
MVC Pattern
Controller View
Model
Per
form
s In
put
Per
form
s O
utpu
t
Write methods
Read methods
Notification method
![Page 41: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/41.jpg)
Observable Modelpublic class AnObservableCounter extends ACounter implements ObservableCounter {
Vector observers = new Vector();public void addObserver(CounterObserver observer) {
observers.addElement(observer);observer.update(this);
}public void removeObserver(CounterObserver observer) {
observers.removeElement(observer);}void notifyObservers() { for (int observerNum = 0; observerNum < observers.size(); observerNum++)
((CounterObserver) observers.elementAt(observerNum)).update(this);}public void add (int amount) {
super.add(amount);notifyObservers();
}}
![Page 42: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/42.jpg)
Console View
public class ACounterConsoleView implements CounterObserver {public void update(ObservableCounter counter) {
System.out.println("Counter: " + counter.getValue());}
}
![Page 43: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/43.jpg)
Console Controller
public class ACounterController implements CounterController { public void processInput(Counter counter) {
while (true) {int nextInput = readInt();if (nextInput == 0) return;counter.add(nextInput);
} }}
![Page 44: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/44.jpg)
Console Mainpublic static main (String args[]) Counter model = new ACounter(); model.addObserver (new AConsoleView()))); (new ACounterController()).processInput(model);}
Input Code Shared
![Page 45: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/45.jpg)
Console Mainpublic static main (String args[]) Counter model = new ACounter(); model.addObserver (new AConsoleView()))); (new ACounterController()).processInput(model);}
Composition code duplicated
![Page 46: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/46.jpg)
Facade
Façade Pattern
Controller View
ModelWrite methods
Read methods
Notification method
Interactor
![Page 47: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/47.jpg)
Console Interactor/Facade
public class AConsoleInteractor implements ConsoleInteractor {public void interact (ObservableCounter model) {
model.addObserver(new ACounterConsoleView());(new ACounterController()).processInput(model);
}
![Page 48: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/48.jpg)
Interactor-based Main
public static main (String args[]) (new AConsoleInteractor()).interact(new ACounter());}
![Page 49: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/49.jpg)
Assignments: Design-Patterns in the Medium
Tokenizer
Evaluator
Iter
ator
![Page 50: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/50.jpg)
Assignments: Design-Patterns in the Medium
Fac
ade Tokenizer
Evaluator
Iter
ator
![Page 51: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/51.jpg)
Assignments: Design-Patterns in the Medium
Fac
ade Tokenizer
Evaluator
Iter
ator
A1
Fac
ade Tokenizer
Evaluator
Iter
ator
Obs
erve
r
B2
![Page 52: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/52.jpg)
Assignments: Design-Patterns in the Medium
Spreadesheet Model
Interactor
![Page 53: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/53.jpg)
Classroom Experience
• 2003– 37 students– 10 freshmen– 1 high school junior
• Pre-requisite: conventional programming– Primitive types– Arrays– Loops– Procedures
• O-O programming– Classes– Interfaces– Inheritance
• Design patterns– MVC, observer,
façade, interactor– iterator, factory,
composite– visitor, adapter, proxy
![Page 54: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/54.jpg)
Evaluation
• Overall class performance very good– 33 out of 37 students finished spreadsheet
• Freshmen were more enthusiastic and had better grades
• High school junior had highest score in first midterm
• “Enthusiasm and intellect more important than background and college experience”
![Page 55: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/55.jpg)
Evaluation: Survey of 27 students
Pattern Not well understood
Memorable Forgettable
Iterator 0 5 1
MVC 6 8 3
Observer 5 7 4
Composite 0 9 0
Factory 3 7 3
Facade 2 9 2
![Page 56: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/56.jpg)
Conclusions• To fully understand patterns need before and after pattern use
comparison with exact code changes shown.
• It is possible to present in classroom MVC, interactor, façade, iterator, composite, and factory design patterns in the small– Each interface/class fits in a slide
• This experience can be used to exercise design patterns in the medium– A single project incrementally created in 2-week assignments.
– Spreadsheet project had about 40 classes/interfaces
• More patterns and experience needed.
• More details: http://www.cs.unc.edu/~dewan/comp114/
![Page 57: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/57.jpg)
The End
![Page 58: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/58.jpg)
AConsoleInteractorJOptionViewAConsoleInteractor
CounterJOptionView
Recursive Composition
AnObservableCounter
ConsoleController Console View
![Page 59: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/59.jpg)
Observer/Observable Pattern
Observable 1
Observer 1
Observer 2
Observer 3
Observer NObservable 2
Notification Method
![Page 60: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/60.jpg)
Console Controller And View Main
package main;import models.AnObservableCounter;import facades.AConsoleControllerAndView;public class ACounterMain {
public static void main(String[] args) { (new AConsoleControllerAndView()).edit(new
AnObservableCounter());
}}
![Page 61: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/61.jpg)
Console Controller And JOption View Main
package main;import models.AnObservableCounter;import facades.AConsoleControllerAndJOptionView;public class ACounterMain {
public static void main(String[] args) { (new AConsoleContollerAndJOptionView()).edit(new
AnObservableCounter());}
}
![Page 62: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/62.jpg)
ConsoleControllerAndJView Facadepackage facades;import models.ObservableCounter;import models.CounterObserver;import controllers.ACounterController;import controllers.CounterController;import views.ACounterJOptionView;public class AConsoleControllerAndJOptionView implements CounterInteractor {
public void edit(ObservableCounter model) {CounterObserver view = new ACounterJOptionView();model.addObserver(view);CounterController controller = new ACounterController();controller.setModel(model);controller.processInput();
}}
![Page 63: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/63.jpg)
Model/Interactor Pattern
Interactor
Model
Arbitrary UI unaware methods
Computation code
UI Code
![Page 64: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/64.jpg)
Main with two views
package main;import models.AnObservableCounter;import facades.AConsoleControllerAndViewAndJOptionView;public class ACounterMain {
public static void main(String[] args) { (new AConsoleControllerAndViewAndJOptionView()).edit(new
AnObservableCounter());}
}
![Page 65: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/65.jpg)
Facade over facade
package facades;import models.ObservableCounter;import models.CounterObserver;import views.ACounterJOptionView;public class AConsoleContollerAndViewAndJOptionView implements CounterInteractor {
public void edit(ObservableCounter model) {model.addObserver(new ACounterJOptionView());(new AConsoleContollerAndView()).edit(model);
}}
![Page 66: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/66.jpg)
Main with two views and OEpackage main;import models.AnObservableCounter;import bus.uigen.ObjectEditor;import facades.AConsoleControllerAndViewAndJOptionView;public class ACounterMain {
public static void main(String[] args) { ObservableCounter model = new AnObservableCounter();
(new ObjectEditor()).edit(model);(new ConsoleControllerAndViewAndJOptionView()).edit(model);
}}
![Page 67: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/67.jpg)
Observers that are not views
• Spreadsheet cell observes cells on which it depends..
• Monitoring of appliance usage– Each time I do setChannel() on TV event
logged.
• Any big brother app!
• Counter observer?
![Page 68: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/68.jpg)
Rocket Observer
Rocket added observer before view
![Page 69: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/69.jpg)
AConsoleControllerAndView
Instances created and composed
AnObservableCounter
ACounterController ACounterConsole View
ARocket
ARocketLauncher
![Page 70: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/70.jpg)
Rocket Interface
package models;import models.CounterObserver;public interface Rocket extends CounterObserver {
public void launch() ;}
![Page 71: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/71.jpg)
Rocket Launching Facade
package models;import models.ObservableCounter;public class ARocket implements Rocket {
public void update(ObservableCounter counter) {if (counter.getValue() == 0)
launch();}public void launch() {
System.out.println("LIFT OFF!!!");}
}
![Page 72: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/72.jpg)
Rocket Launching Facade
package facades;import models.ObservableCounter;import models.CounterObserver;import models.ARocket;import facades.AConsoleContollerAndView;public class ARocketLaunchCountDown implements CounterInteractor {
public final int INITIAL_COUNTER_VALUE = 10;public void edit(ObservableCounter counter) {
counter.add(INITIAL_COUNTER_VALUE);CounterObserver rocket = new ARocket();counter.addObserver(rocket);(new AConsoleContollerAndView()).edit(counter);
}}
![Page 73: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/73.jpg)
Rocket launching mainpackage main;import models.AnObservableCounter;import models.ARocketLauncher;import facades.ARocketLaunchCountDown;public class ACounterMain {
public static void main(String[] args) { (new ARocketLaunchCountDown()).edit(new AnObservableCounter());
}}
![Page 74: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/74.jpg)
![Page 75: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/75.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Example Exercise
? ?Small
?
? ?Medium
Interface
Inheritance
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Class ObjectFacade
Iterator
Interactor
Composite
MVC
Factory
Observer
Class ObjectFacade
Iterator
Interactor
Composite
MVC
Factory
Observer
Class ObjectFacade
Iterator
Interactor
Composite
MVC
Factory
Observer
Class ObjectFacade
Iterator
Interactor
Composite
MVC
Factory
Observer
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
![Page 76: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/76.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
4 vs. ?? pages
Class Object
Interface
Inheritance
![Page 77: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/77.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Facade
Iterator
Interactor
Composite
MVC
Factory
Observer
4 vs. ?? pages
Class Object
Interface
Inheritance
![Page 78: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/78.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Class Object
Interface
InheritanceFacade
Iterator
Interactor
Composite
MVC
Factory
Observer
![Page 79: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/79.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Class Object
Interface
InheritanceFacade
Iterator
Interactor
Composite
MVC
Factory
Observer
![Page 80: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/80.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Class Object
Interface
Inheritance
Example Exercise
Modular
![Page 81: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/81.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Class Object
Interface
Inheritance
Example Exercise
![Page 82: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/82.jpg)
Teaching Inter-Object Design Patterns to Freshmen
Facade
Iterator
Interactor
Composite
MVC
Factory
Class Object
Interface
Inheritance
![Page 83: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/83.jpg)
Teaching Design Patterns to Freshmen
Prasun Dewan
UNC-Chapel Hill
![Page 84: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/84.jpg)
Teaching Design Patterns to Freshmen
• Recurrin
•UNC-Chapel Hill
![Page 85: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/85.jpg)
Teaching Inter-Object Design Patterns to Freshmen
• Recurring theme in programming– Not captured by a programming construct
• Design pattern == framework == architecture
• Components– Problem context– Abstract solution– Pros/cons of solution
![Page 86: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/86.jpg)
Motivates Model/UI Separation
ConsoleUI
MixedUI
Counter MultipleUI
Model
Model has no UI code and only semantics!
![Page 87: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/87.jpg)
Counter Modelpublic class ACounter implements Counter {
int counter = 0;public void add (int amount) {
counter += amount;}public int getValue() {
return counter;}
}
• Code reusability• Less duplication• Fewer changes
![Page 88: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/88.jpg)
Interactor/Model Pattern
ModelWrite methods
Read methods
Notification method
Interactor
aka Model/View Pattern
Per
form
s In
put
Per
form
s O
utpu
t
![Page 89: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill](https://reader035.vdocuments.us/reader035/viewer/2022062515/56649c905503460f9494a331/html5/thumbnails/89.jpg)
Console UI
public class ConsoleUI { static Counter counter = new ACounter(); public static void main(String[] args) {
while (true) { int nextInput = readInt(); if (nextInput == 0) return; counter.add(nextInput); System.out.println("Counter: " + counter.getValue());}
}}
Shared model code
Input
Output