370 likes | 502 Vues
Explore how patterns in design recipes and class definitions can revolutionize teaching computer programming, illustrated through the Rice University's curriculum. Learn the basics, templates, and structures to connect program elements effectively.
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