6 dec 2001kestrel1 teaching with patterns matthias felleisen daniel jackson
TRANSCRIPT
6 Dec 2001
Kestrel 1
Teaching with Patterns
Matthias FelleisenDaniel Jackson
6 Dec 2001
Kestrel 2
Patterns in the Classroom: The Rice Experience
Matthias FelleisenNortheastern University
6 Dec 2001
Kestrel 3
Patterns in Courses
• graduate Course (fall 94/spring 95)
• junior-level PL course
• junior-level PD/FM course
• second-semester course
6 Dec 2001
Kestrel 4
Patterns in Courses
• graduate Course (94)
• junior-level PL course
• junior-level PD/FM course
• second-semester course
6 Dec 2001
Kestrel 5
Rice’s Introductory Year
• Comp 210: Design Recipes (HtDP) – majors and non-majors – assumes no background– uses Scheme and some Java
• Comp 212: Design Patterns (GoF)– majors mostly (plus some C++ non-majors)– assumes 210-like background– uses some Scheme and Java
6 Dec 2001
Kestrel 6
• Design Recipes & Some Context
• From Recipes to Patterns
• Pattern Coverage
• Some Exepriences
6 Dec 2001
Kestrel 7
210: Design Recipes & Context
6 Dec 2001
Kestrel 8
Design Recipes
to be designedin out
How do we wire the “program” to the rest of the world?
6 Dec 2001
Kestrel 9
Design Recipes
• radical model-view separation
• design “internals” of programs
• use “internal” data, not “external” information
• teacher provides view
6 Dec 2001
Kestrel 10
Design Recipes
• understand classes of data – representation of (external) information as
data in your favorite language
• understand “program” as function – that is triggered by events– that consumes/produces data
• most important: connect class definition and function definition
6 Dec 2001
Kestrel 11
The Basic Design Recipe
• data analysis and class definition
• contract, purpose statement, header
• in-out (effect) examples
• function template
• function definition
• testing, test suite development
6 Dec 2001
Kestrel 12
From Class Definitions to Function Templates
• the structure of class definitions
• the structure of function templates
6 Dec 2001
Kestrel 13
Design Recipes: Class Definitions
• use rigorous language, not formalism
• naïve set theory– basic sets: numbers, chars, booleans– intervals– (labeled) products, that is, structures – (tagged) unions– self-references– mutual references – vectors (natural numbers)
6 Dec 2001
Kestrel 14
Design Recipes: Class Definitions (2)
(define-struct spider (name size legs))
A spider is a structure:
(make-spider symbol number number)
6 Dec 2001
Kestrel 15
Design Recipes: Class Definitions (3)
A zoo animal is either • a spider• an elephant • a giraffe • a mouse • …
Each of these classes of animals has its own definition
6 Dec 2001
Kestrel 16
Design Recipes: Class Definitions (4)
A list of zoo animals is either • empty• (cons animal a-list-of-zoo-animals)
Let’s make examples: • empty (by definition)• (cons (make-spider ‘Asterix 1 6) empty)• (cons (make-spider ‘Obelix 99 6) (cons … …))
6 Dec 2001
Kestrel 17
Design Recipes: Class Definitions (5)
(define-struct child (name father mother))
A family tree is either • ‘unknown • (make-child symbol a-family-tree a-family-tree-2)
Many, if not most, interesting class definitions are self-referential.
6 Dec 2001
Kestrel 18
Design Recipes: Function Templates (Structure)
• a function template reflects the structure of the class definitions
• this match helps – designers guide the process– readers comprehend– teachers diagnose weaknesses– modifiers/maintainers analyze or change
6 Dec 2001
Kestrel 19
Design Recipes: Templates (2)
• is it a basic class?
• is it a union?
• is it a structure?
• is it self-referential?
• “domain knowledge”
• case analysis
• extract field values
• annotate for recursion
6 Dec 2001
Kestrel 20
Design Recipes: Templates (3)
A list of zoo animals is either • empty• (cons animal a-list-of-zoo-animals)
;; fun-for-zoo : list-of-zoo-animals -> ???(define (fun-for-zoo a-loZA) … )
is it a union?
6 Dec 2001
Kestrel 21
Design Recipes: Templates (4)
A list of zoo animals is either • empty• (cons animal a-list-of-zoo-animals)
;; fun-for-zoo : list-of-zoo-animals -> ???(define (fun-for-zoo a-loZA) (cond [ <<condition>> <<answer>> ] [ <<condition>> <<answer>> ]))
what are the sub-classes
6 Dec 2001
Kestrel 22
Design Recipes: Templates (5)
A list of zoo animals is either • empty• (cons animal a-list-of-zoo-animals)
;; fun-for-zoo : list-of-zoo-animals -> ???(define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) <<answer>> ] [ (cons? a-loZA) <<answer>> ]))
are any of the potentialinputs structures?
6 Dec 2001
Kestrel 23
Design Recipes: Templates (6)
A list of zoo animals is either • empty• (cons animal a-list-of-zoo-animals)
;; fun-for-zoo : list-of-zoo-animals -> ???(define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) … ] [ (cons? a-loZA) … (first a-loZA) … … (rest a-loZA) … ]))
is the class definition self-referential?
6 Dec 2001
Kestrel 24
Design Recipes: Templates (7)
A list of zoo animals is either • empty• (cons animal a-list-of-zoo-animals)
;; fun-for-zoo : list-of-zoo-animals -> ???(define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) … ] [ (cons? a-loZA) … (first a-loZA) … … (rest a-loZA) … ]))
6 Dec 2001
Kestrel 25
Design Recipes: Defining Functions
• templates remind beginners of all the information that is available– which cases– which field values, argument values – which natural recursions are computed
• the goal of function definitions is– to compute with the available values – to combine the computed effects
6 Dec 2001
Kestrel 26
Design Recipes: Overview
• basic data, intervals of numbers • structures • unions• self-reference in class description • mutual references • generative recursion• special attributes:
– accumulators– effects
• abstraction of designs
6 Dec 2001
Kestrel 27
Design Recipes: Conclusion
• get students used to discipline from DAY ONE
• use scripted question-and-answer game until they realize they can do it on their own
6 Dec 2001
Kestrel 28
212: From Recipes to Patterns
6 Dec 2001
Kestrel 29
Design Patterns
• introduce Java
• use design recipes to organize classes and methods
• explain code as instances of design patterns
6 Dec 2001
Kestrel 30
Scheme to Java: Class Hierarchy
A list of zoo animals is either • empty• (cons animal a-list-of-zoo-animals)
List of zoo animals
Empty Cons: animal list of zoo animals
6 Dec 2001
Kestrel 31
Scheme to Java: Code Allocation
;; fun-for-zoo : list-of-zoo-animals -> ???(define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) … ] [ (cons? a-loZA) … (first a-loZA) … … (rest a-loZA) … ]))
List of zoo animals
Empty: …
Cons: animal list of zoo animals
6 Dec 2001
Kestrel 32
Scheme to Java: Code Allocation
;; fun-for-zoo : list-of-zoo-animals -> ???(define (fun-for-zoo a-loZA) (cond [ (empty? a-loZA) … ] [ (cons? a-loZA) … (first a-loZA) … … (rest a-loZA) … ]))
List of zoo animals
Empty: …
Cons: animal list of zoo animals
Interpreter Pattern(Composite)
6 Dec 2001
Kestrel 33
Which Patterns
• Interpreter• Composite• Template and Hook • Command • Factory• Abstract Factory (Virtual Constructor)• State • (and a few more on occasion)
6 Dec 2001
Kestrel 34
How about MVC?
• 210– DrScheme implements MVC in REPL– TeachPacks implements GUI MVC
• 212– DrJava implements MVC– we implement MVC for students
• 312– Students implement MVC directly
6 Dec 2001
Kestrel 35
312: Designing, and Reasoning about, Sw
• reasonably large programs, present and discuss programs in class
• maintain your own code over the course of a month or two
• switch code, modify code of others
6 Dec 2001
Kestrel 36
312: Design, and Reason about, Sw
• the aha course
• students understand why and when patterns matter
• the reward for going thru 212, 212
6 Dec 2001
Kestrel 37
Programs have a place in the curriculumit is not in the first year (except for coding in this style).