370 likes | 483 Views
Teaching with Patterns. Matthias Felleisen Daniel Jackson. Patterns in the Classroom: The Rice Experience. Matthias Felleisen Northeastern University. Patterns in Courses . graduate Course (fall 94/spring 95) junior-level PL course junior-level PD/FM course second-semester course.
E N D
Teaching with Patterns Matthias Felleisen Daniel Jackson Kestrel
Patterns in the Classroom: The Rice Experience Matthias Felleisen Northeastern University Kestrel
Patterns in Courses • graduate Course (fall 94/spring 95) • junior-level PL course • junior-level PD/FM course • second-semester course Kestrel
Patterns in Courses • graduate Course (94) • junior-level PL course • junior-level PD/FM course • second-semester course Kestrel
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 Kestrel
Design Recipes & Some Context • From Recipes to Patterns • Pattern Coverage • Some Exepriences Kestrel
210: Design Recipes & Context Kestrel
Design Recipes to be designed in out How do we wire the “program” to the rest of the world? Kestrel
Design Recipes • radical model-view separation • design “internals” of programs • use “internal” data, not “external” information • teacher provides view Kestrel
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 Kestrel
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 Kestrel
From Class Definitions to Function Templates • the structure of class definitions • the structure of function templates Kestrel
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) Kestrel
Design Recipes: Class Definitions (2) (define-struct spider (name size legs)) A spider is a structure: (make-spider symbol number number) Kestrel
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 Kestrel
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 … …)) Kestrel
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. Kestrel
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 Kestrel
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 Kestrel
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? Kestrel
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 Kestrel
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 potential inputs structures? Kestrel
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? Kestrel
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) … ])) Kestrel
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 Kestrel
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 Kestrel
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 Kestrel
212: From Recipes to Patterns Kestrel
Design Patterns • introduce Java • use design recipes to organize classes and methods • explain code as instances of design patterns Kestrel
Scheme to Java: Class Hierarchy List of zoo animals Empty Cons: animal list of zoo animals • A list of zoo animals is either • empty • (cons animal a-list-of-zoo-animals) Kestrel
Scheme to Java: Code Allocation List of zoo animals Empty: … Cons: animal 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) … ])) Kestrel
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 Interpreter Pattern (Composite) Empty: … Cons: animal list of zoo animals Kestrel
Which Patterns • Interpreter • Composite • Template and Hook • Command • Factory • Abstract Factory (Virtual Constructor) • State • (and a few more on occasion) Kestrel
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 Kestrel
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 Kestrel
312: Design, and Reason about, Sw • the aha course • students understand why and when patterns matter • the reward for going thru 212, 212 Kestrel
Programs have a place in the curriculum it is not in the first year (except for coding in this style). Kestrel