teaching inter-object design patterns to freshmen prasun dewan unc-chapel hill

89
Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

Upload: ignacio-batterton

Post on 14-Dec-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Console Input and Output

Page 27: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

Console Input and JOption Output

Page 28: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

Console Input,Output and JOption Output

Page 29: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

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

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

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

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

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

Monolithic Inetractor Drawbacks

MixedUIConsoleUI

MixedUI

Counter MultipleUI

Duplicated input code

Page 35: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Assignments: Design-Patterns in the Medium

Tokenizer

Evaluator

Iter

ator

Page 50: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

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

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

Assignments: Design-Patterns in the Medium

Spreadesheet Model

Interactor

Page 53: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

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

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

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

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

The End

Page 58: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

AConsoleInteractorJOptionViewAConsoleInteractor

CounterJOptionView

Recursive Composition

AnObservableCounter

ConsoleController Console View

Page 59: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

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

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

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

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

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

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

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

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

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

Rocket Observer

Rocket added observer before view

Page 69: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

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

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

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

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

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
Page 75: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

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

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

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

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

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

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

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

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

Teaching Design Patterns to Freshmen

Prasun Dewan

UNC-Chapel Hill

Page 84: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

Teaching Design Patterns to Freshmen

• Recurrin

•UNC-Chapel Hill

Page 85: Teaching Inter-Object Design Patterns to Freshmen Prasun Dewan UNC-Chapel Hill

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

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

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

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

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