How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias...
Transcript of How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias...
![Page 1: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/1.jpg)
How to DesignClass Hierarchies
Matthias FelleisenPLT
Northeastern University, Boston
1
![Page 2: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/2.jpg)
The Team
Robert FindlerMatthew Flatt
Shriram Krishnamurthi
Kathy GrayViera Proulx
2
![Page 3: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/3.jpg)
Thesis
Teaching FP first is the ideal introduction toOOP.
A first year that teaches one semester of FPfollowed by another semester of OOP producesthe best OO programmers.
3
![Page 4: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/4.jpg)
Background
How to Design Programs• 10 years of FP in first year & high schools
• “Structure & Interpretation of the Computer ScienceCurriculum” [FDPE’03, JFP’04]
• building the “bridge” to the “real world”
Aimed at whaťs best for students in the long run
4
![Page 5: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/5.jpg)
College Timeline
Year 1
co-op
Year 2 Year 3 Year 4 Year 5
first job
PrinciplesPreparation for Industry
5
![Page 6: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/6.jpg)
The First Year
Year 1
Principles for OO:- computation- programming- relevant
Principles:- computation- programming- easy!
co-op
Year 2 ...
6
![Page 7: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/7.jpg)
The First Year
Year 1
Principles:- OOP- à la HtDCH
& Java syntax
Principles:- FP- à la HtDP
co-op
Year 2 ...
7
![Page 8: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/8.jpg)
Part I: What is OOP? — A Quiz
Or, why you should believe that FP,our wonderful “church,” and OOP,the essence of evil “state,” can haveanything to do with each other(from a 2004 conference)
8
![Page 9: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/9.jpg)
Who Said This?
Though [it] came from many motivations, twowere central. ... [T]he small scale one was tofind a more flexible version of assignment,and then to try to eliminate it altogether.
(1993)
9
![Page 10: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/10.jpg)
Who Said This?
Though [it] came from many motivations, twowere central. ... [T]he small scale one was tofind a more flexible version of assignment,and then to try to eliminate it altogether.
Alan Kay, History of Sma!tal" (1993)
10
![Page 11: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/11.jpg)
Who Said This?
Favor immutability. (2001)
11
![Page 12: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/12.jpg)
Who Said This?
Favor immutability.Joshua Bloch, Effective Java (2001)
12
![Page 13: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/13.jpg)
Who Said This?
Use value objects when possible. (2001)
13
![Page 14: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/14.jpg)
Who Said This?
Use value objects when possible.Kent Beck, Test Driven Developmen! (2001)
14
![Page 15: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/15.jpg)
Who Said This?
It is unfortunate that much of what is called“object-oriented programming” today is simplyold style programming with fancier constructs.Many programs are loaded with“assignment-style” operations now done bymore expensive attached procedures.
(1993)
15
![Page 16: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/16.jpg)
Who Said This?
It is unfortunate that much of what is called“object-oriented programming” today is simplyold style programming with fancier constructs.Many programs are loaded with“assignment-style” operations now done bymore expensive attached procedures.
Alan Kay, History of Sma!tal" (1993)
16
![Page 17: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/17.jpg)
Part II: How to Design Programs
Or, how should you teach FP in thefirst semester
17
![Page 18: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/18.jpg)
Functional Programming is Obvious
(define-datatype tree tree? [Leaf (value integer?)] [Node (left tree?) (right tree?)]) ; tree → integer; add up the numbers in the given tree(define (sum t) (cases tree t [Leaf (v) v] [Node (l r) (+ (sum l) (sum r))]))
EoPL (2e) Scheme
18
![Page 19: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/19.jpg)
Functional Programming is Obvious(even for the parenthetically challenged)
type tree = Leaf of int | Node of tree * tree
(* tree → integer add up the numbers in the given tree *)let rec sum(t) = match t with Leaf(i) -> i | Node(l,r) -> sum(l) + sum(r)
OCaml
19
![Page 20: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/20.jpg)
Is It Really for the Novice?
• What does a novice take away from this?
• What carries over to the industrial PLs (Java++, Perl)?
• Recursion? Types? Interactive exploration (repl)?
• How to write an interpreter?
• ... for a language you aren’t allowed to use?
20
![Page 21: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/21.jpg)
A Great Novice Experience
• “I learned solid principles of programming.”
• “I know that this is useful, even if I didn’t ‘use’ it.”
• “Everything I learned after that is more popular, but noteven remotely as convenient or powerful.”
• “It changed my life.”
21
![Page 22: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/22.jpg)
How HtDP Produces Results
HtDP teaches
• The Design Recipe: data, data, data
• Abstraction as editing
• Organizing programs
22
![Page 23: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/23.jpg)
The Design Recipe
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
23
![Page 24: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/24.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
Write a program to check whether an ant is athome.... An ant has a weight and a location in thezoo.... Home is the cartesian origin.
24
![Page 25: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/25.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
Write a program to check whether an ant is athome.... An ant has a weight and a location in thezoo.... Home is the cartesian origin.
“Real world”: information“Computational world”: representations
Programmer’s job: pick a representation⇒ determines rest of recipe
25
![Page 26: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/26.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
Write a program to check whether an ant is athome.... An ant has a weight and a location in thezoo.... Home is the cartesian origin.
atomicdata
intervals /enumerations structs unions ...
26
![Page 27: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/27.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
Write a program to check whether an ant is athome.... An ant has a weight and a location in thezoo.... Home is the cartesian origin.
; A posn is; (make-posn num num)(define-struct posn (x y)) ; An ant is; (make-ant num posn)(define-struct ant (weight loc)) (make-ant 0.001 (make-posn 4 5))(make-ant 0.007 (make-posn 3 17))
27
![Page 28: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/28.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
; An ant is; (make-ant num posn)(define-struct ant (weight loc))
; ant-at-home? : ant -> bool
28
![Page 29: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/29.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
; An ant is; (make-ant num posn)(define-struct ant (weight loc))
; ant-at-home? : ant -> bool; Check whether ant a is home
29
![Page 30: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/30.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
; An ant is; (make-ant num posn)(define-struct ant (weight loc))
; ant-at-home? : ant -> bool; Check whether ant a is home(define (ant-at-home? a) ...)
30
![Page 31: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/31.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
; An ant is; (make-ant num posn)(define-struct ant (weight loc))
; ant-at-home? : ant -> bool; Check whether ant a is home(define (ant-at-home? a) ...)
(ant-at-home? (make-ant 0.001 (make-posn 0 0)))"should be" true(ant-at-home? (make-ant 0.001 (make-posn 1 1)))"should be" false
31
![Page 32: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/32.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
; An ant is; (make-ant num posn)(define-struct ant (weight loc))
; ant-at-home? : ant -> bool; Check whether ant a is home(define (ant-at-home? a) ... (ant-weight a) ... (ant-loc a) ...)
(ant-at-home? (make-ant 0.001 (make-posn 0 0)))"should be" true(ant-at-home? (make-ant 0.001 (make-posn 1 1)))"should be" false
32
![Page 33: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/33.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
; An ant is; (make-ant num posn)(define-struct ant (weight loc))
; ant-at-home? : ant -> bool; Check whether ant a is home(define (ant-at-home? a) ... (ant-weight a) ... (posn-at-home? (ant-loc a)) ...)
data reference ⇒ template reference Add templates for referenced data,if needed, and implement body forreferenced data
(ant-at-home? (make-ant 0.001 (make-posn 0 0)))"should be" true(ant-at-home? (make-ant 0.001 (make-posn 1 1)))"should be" false
33
![Page 34: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/34.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
; An ant is; (make-ant num posn)(define-struct ant (weight loc))
; ant-at-home? : ant -> bool; Check whether ant a is home(define (ant-at-home? a) ... (ant-weight a) ... (posn-at-home? (ant-loc a)) ...) (define (posn-at-home? p) ... (posn-x p) ... (posn-y p) ...)
(ant-at-home? (make-ant 0.001 (make-posn 0 0)))"should be" true(ant-at-home? (make-ant 0.001 (make-posn 1 1)))"should be" false
34
![Page 35: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/35.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
; An ant is; (make-ant num posn)(define-struct ant (weight loc))
; ant-at-home? : ant -> bool; Check whether ant a is home; ; ; ;
(define (ant-at-home? a) ... (ant-weight a) ... (posn-at-home? (ant-loc a)) ...)
; ; (define (posn-at-home? p) ... (posn-x p) ... (posn-y p) ...)
; (define (ant-at-home? a) (posn-at-home? (ant-loc a)))(define (posn-at-home? p) (and (= (posn-x p) 0) (= (posn-y p) 0))) (ant-at-home? (make-ant 0.001 (make-posn 0 0)))"should be" true(ant-at-home? (make-ant 0.001 (make-posn 1 1)))"should be" false
35
![Page 36: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/36.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
; An ant is; (make-ant num posn)(define-struct ant (weight loc))
; ant-at-home? : ant -> bool; Check whether ant a is home; ; ; ;
(define (ant-at-home? a) ... (ant-weight a) ... (posn-at-home? (ant-loc a)) ...)
; ; (define (posn-at-home? p) ... (posn-x p) ... (posn-y p) ...)
; (define (ant-at-home? a) (posn-at-home? (ant-loc a)))(define (posn-at-home? p) (and (= (posn-x p) 0) (= (posn-y p) 0))) (ant-at-home? (make-ant 0.001 (make-posn 0 0)))"should be" true(ant-at-home? (make-ant 0.001 (make-posn 1 1)))"should be" false
36
![Page 37: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/37.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
; An ant is; (make-ant num posn) ; A posn is; (make-posn num num)
(define (ant-at-home? a) ... (ant-weight a) ... (posn-at-home? (ant-loc a)) ...) (define (posn-at-home? p) ... (posn-x p) ... (posn-y p) ...)
37
![Page 38: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/38.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
type tree = Leaf of int | Node of tree * tree
38
![Page 39: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/39.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
type tree = Leaf of int | Node of tree * tree
39
![Page 40: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/40.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
type tree = Leaf of int | Node of tree * tree
(* tree → integer add up numbers in t *)let rec sum(t) = match t with Leaf(i) -> ... i ... | Node(l,r) -> ... sum(l) ... sum(r) ...
40
![Page 41: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/41.jpg)
1 Datarepresentation
2 Purpose& contract
3 Functionalexamples
4 Template(inventory)
5 Bodyimplementation
6 Test(examples)
type tree = Leaf of int | Node of tree * tree
(* tree → integer add up numbers in t *)let rec sum(t) = match t with Leaf(i) -> ... i ... | Node(l,r) -> ... sum(l) ... sum(r) ...
41
![Page 42: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/42.jpg)
Shapes of Data and Templates
; An animal is either; - snake; - dillo; - ant ; A snake is; (make-snake sym num sym) ; A dillo is; (make-dillo num bool) ; An ant is; (make-ant num posn) ; A posn is; (make-posn num num)
(define (feed-animal a) (cond [(snake? a) ... (feed-snake a) ...] [(dillo? a) ... (feed-dillo a) ...] [(ant? a) ... (feed-ant a) ...]))
(define (feed-snake s) ... (snake-name s) ... (snake-weight s) ... (snake-food s) ...) (define (feed-dillo d) ... (dillo-weight d) ... (dillo-alive? d) ...) (define (feed-ant a) ... (ant-weight d) ... (feed-posn (ant-loc d)) ...) (define (feed-posn p) ... (posn-x p) ... (posn-y p) ...)
42
![Page 43: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/43.jpg)
The Design Recipe
• Scales to mutually referential datatypes and hierarchies
• Supplemented by “iterative refinement”
• Students easily process files/directories, grammars, riversystems, etc. after a few weeks.
43
![Page 44: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/44.jpg)
Functional Abstraction
map is obvious:
; increase : (list-of num) → (list-of num); increase each number by one
(define (increase alon) (cond [(empty? alon) empty] [else (cons (add1 (first alon))
(increase (rest alon)))]))
⇒ (define (increase alon) (map add1 alon))
44
![Page 45: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/45.jpg)
Functional Abstraction
map is obvious, even in OCaml:
(* increase : int list → int list increase each number by one *)
let rec increase l = match l with [] -> [] | first::rest -> add1(first)::increase(rest)
⇒ let increase l = List.map add l
45
![Page 46: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/46.jpg)
Functional Abstraction
Is abstraction really obvious?
• How do students create abstractions?
• How do they use this knowledge in C#?
• How do they know what abstractions exist in ML?
• How should this be of use in Java?
46
![Page 47: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/47.jpg)
Abstraction as Editing
Programming is like writing — it needs editing
• Editing is called abstraction
• Recognize common patterns and abstract
• Learn to reuse abstractions
47
![Page 48: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/48.jpg)
Abstraction as Editing
; (list-of num) -> (list-of num); increase each of the numbers by 1(define (increase alon) (cond [(empty? alon) empty] [else (cons (add1 (first alon))
(increase (rest alon)))])) ; tests(equal? (increase (list 1 2 3))
(list 2 3 4))
; (list-of posn) -> (list-of num); extract the X coordinate from each(define (extract alop) (cond [(empty? alop) empty] [else (cons (posn-x (first alop))
(extract (rest alop)))])) ; tests(equal? (extract (list (make-posn 2 3)))
(list 2))
48
![Page 49: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/49.jpg)
Abstraction as Editing
; (list-of num) -> (list-of num); increase each of the numbers by 1(define (increase alon) (cond [(empty? alon) empty] [else (cons (add1 (first alon))
(increase (rest alon)))])) ; tests(equal? (increase (list 1 2 3))
(list 2 3 4))
; (list-of posn) -> (list-of num); extract the X coordinate from each(define (extract alop) (cond [(empty? alop) empty] [else (cons (posn-x (first alop))
(extract (rest alop)))])) ; tests(equal? (extract (list (make-posn 2 3)))
(list 2))
49
![Page 50: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/50.jpg)
Abstraction as Editing
; (list-of num) -> (list-of num); increase each of the numbers by 1(define (increase alon) (cond [(empty? alon) empty] [else (cons (add1 (first alon))
(increase (rest alon)))])) ; tests(equal? (increase (list 1 2 3))
(list 2 3 4))
; (list-of posn) -> (list-of num); extract the X coordinate from each(define (extract alop) (cond [(empty? alop) empty] [else (cons (posn-x (first alop))
(extract (rest alop)))])) ; tests(equal? (extract (list (make-posn 2 3)))
(list 2))
; (list-of X) (X -> num) -> (list-of num); apply afun to each(define (do-to-all alox afun) (cond [(empty? alon) empty] [else (cons (afun (first alox))
(do-to-all (rest alox)))]))
50
![Page 51: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/51.jpg)
Abstraction as Editing
; (list-of num) -> (list-of num); increase each of the numbers by 1(define (increase alon) (do-to-all add1 alon))
; tests(equal? (increase (list 1 2 3))
(list 2 3 4))
; (list-of posn) -> (list-of num); extract the X coordinate from each(define (extract alop) (do-to-all posn-x alop))
; tests(equal? (extract (list (make-posn 2 3)))
(list 2))
; (list-of X) (X -> num) -> (list-of num); apply afun to each(define (do-to-all alox afun) (cond [(empty? alon) empty] [else (cons (afun (first alox))
(do-to-all (rest alox)))]))
51
![Page 52: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/52.jpg)
Program Organization
Eventually, even novice programs get large
• Rules for how to create programs
• Rules for how to organize them
Design recipes empower students;programming rules restric! them
52
![Page 53: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/53.jpg)
Program Organization
• One task, one function
• Keep functions small
• Keep like data together
• Name functions properly
53
![Page 54: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/54.jpg)
Program Organization
(define-struct worm (head body)); Worm = (make-worm Segment (Listof Segment)); interpretation: head, followed by growth segments ; worm-move : Worm Direction -> Worm; move the worm one step in the given direction ; worm-grow : Worm Posn -> Worm; grow the worm by one body segment, head moves to Posn; accumulator style ; worm-image : Worm -> Image
54
![Page 55: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/55.jpg)
Program Organization
(define-struct worm (head body)); Worm = (make-worm Segment (Listof Segment)); interpretation: head, followed by growth segments ; worm-move : Worm Direction -> Worm; move the worm one step in the given direction ; worm-grow : Worm Posn -> Worm; grow the worm by one body segment, head moves to Posn; accumulator style ; worm-image : Worm -> Image
55
![Page 56: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/56.jpg)
Program Organization
(define-struct worm (head body)); Worm = (make-worm Segment (Listof Segment)); interpretation: head, followed by growth segments ; worm-move : Worm Direction -> Worm; move the worm one step in the given direction ; worm-grow : Worm Posn -> Worm; grow the worm by one body segment, head moves to Posn; accumulator style ; worm-image : Worm -> Image
...and the same for worm Segments...
...and the same for for Food...
...and then the binary functions...
56
![Page 57: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/57.jpg)
First Semester Summary
FP in the first semester is about data representations:
• Design systematically to data definition
• Abstract systematically and use abstractions
• Organize programs systematically
57
![Page 58: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/58.jpg)
Part III: How to Design Data in OOP
Or, how should you transition fromFP to OOP
58
![Page 59: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/59.jpg)
From FP to OOP
Start with data:
; A posn is; (make-posn num num)(define-struct posn (x y))
class Posn { int x; int y; Posn(int x, int y) { this.x = x; this.y = y; }}
59
![Page 60: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/60.jpg)
From FP to OOP
Start with data:
; A posn is; (make-posn num num)(define-struct posn (x y))
Posnint xint y
60
![Page 61: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/61.jpg)
From FP to OOP
; An ant is; (make-ant num posn) ; A posn is; (make-posn num num)
Antfloat weightPosn loc
Posnint xint y
61
![Page 62: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/62.jpg)
From FP to OOP
; An animal is either; - snake; - dillo; - ant ; A snake is; (make-snake sym num sym) ; A dillo is; (make-dillo num bool) ; An ant is; (make-ant num posn) ; A posn is; (make-posn num num)
Animal
SnakeString namefloat weightString food
Dillofloat weightboolean alive
Antfloat weightPosn loc
Posnint xint y
62
![Page 63: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/63.jpg)
From FP to OOP
type tree = Leaf of int | Node of tree * tree
Tree
Leafint val
NodeTree leftTree right
63
![Page 64: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/64.jpg)
From FP to OOP
type tree = Leaf of int | Node of tree * tree
Tree
Leafint val
NodeTree leftTree right
And so on (for mutually referential data definitions)...
64
![Page 65: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/65.jpg)
From Functions to Methods
; An animal is either; - snake; - dillo; - ant; ... ; animal-is-lighter? : animal num -> bool(define (animal-is-lighter? a n) (cond
[(snake? a) (snake-is-lighter? s n)] [(dillo? a) (dillo-is-ligheter? s n)] [(ant? a) (ant-is-lighter? s n)]))
; snake-is-lighter? : snake num -> bool(define (snake-is-lighter? s n) ...) ; dillo-is-lighter? : dillo num -> bool(define (dillo-is-lighter? d n) ...) ; ant-is-lighter? : ant num -> bool(define (ant-is-lighter? a n) ...)
interface Animal { boolean isLighter(double n);} class Snake extends Animal { ... boolean isLighter(double n) { ... }} class Dillo extends Animal { ... boolean isLighter(double n) { ... }} class Ant extends Animal { ... boolean isLighter(double n) { ... }} 65
![Page 66: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/66.jpg)
From Functions to Methods
Data definition turns into classdeclarations
; An animal is either; - snake; - dillo; - ant; ... ; animal-is-lighter? : animal num -> bool(define (animal-is-lighter? a n) (cond
[(snake? a) (snake-is-lighter? s n)] [(dillo? a) (dillo-is-ligheter? s n)] [(ant? a) (ant-is-lighter? s n)]))
; snake-is-lighter? : snake num -> bool(define (snake-is-lighter? s n) ...) ; dillo-is-lighter? : dillo num -> bool(define (dillo-is-lighter? d n) ...) ; ant-is-lighter? : ant num -> bool(define (ant-is-lighter? a n) ...)
interface Animal { boolean isLighter(double n);} class Snake extends Animal { ... boolean isLighter(double n) { ... }} class Dillo extends Animal { ... boolean isLighter(double n) { ... }} class Ant extends Animal { ... boolean isLighter(double n) { ... }} 66
![Page 67: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/67.jpg)
From Functions to Methods
Variant functions turn into variantmethods — all with the samecontract after the implicit argument
; An animal is either; - snake; - dillo; - ant; ... ; animal-is-lighter? : animal num -> bool(define (animal-is-lighter? a n) (cond
[(snake? a) (snake-is-lighter? s n)] [(dillo? a) (dillo-is-ligheter? s n)] [(ant? a) (ant-is-lighter? s n)]))
; snake-is-lighter? : snake num -> bool(define (snake-is-lighter? s n) ...) ; dillo-is-lighter? : dillo num -> bool(define (dillo-is-lighter? d n) ...) ; ant-is-lighter? : ant num -> bool(define (ant-is-lighter? a n) ...)
interface Animal { boolean isLighter(double n);} class Snake extends Animal { ... boolean isLighter(double n) { ... }} class Dillo extends Animal { ... boolean isLighter(double n) { ... }} class Ant extends Animal { ... boolean isLighter(double n) { ... }} 67
![Page 68: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/68.jpg)
From Functions to Methods
Function with variant-based condturns into just an abstractmethod declaration
; An animal is either; - snake; - dillo; - ant; ... ; animal-is-lighter? : animal num -> bool(define (animal-is-lighter? a n) (cond
[(snake? a) (snake-is-lighter? s n)] [(dillo? a) (dillo-is-ligheter? s n)] [(ant? a) (ant-is-lighter? s n)]))
; snake-is-lighter? : snake num -> bool(define (snake-is-lighter? s n) ...) ; dillo-is-lighter? : dillo num -> bool(define (dillo-is-lighter? d n) ...) ; ant-is-lighter? : ant num -> bool(define (ant-is-lighter? a n) ...)
interface Animal { boolean isLighter(double n);} class Snake extends Animal { ... boolean isLighter(double n) { ... }} class Dillo extends Animal { ... boolean isLighter(double n) { ... }} class Ant extends Animal { ... boolean isLighter(double n) { ... }} 68
![Page 69: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/69.jpg)
How to Design Classes & Interfaces
• We (ought to) know this much
• Data types via interpreter/composite patterns
• Design recipe process produces instances of thosepatterns — students can tackle anything
• Students see FP mechanics (conditional) vs. OOPmechanics (dynamic dispatch)
69
![Page 70: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/70.jpg)
Part IV: How to Design Hierarchies
Or, why the principles of FP à laHtDP produce class hierarchies
70
![Page 71: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/71.jpg)
Method Abstraction
Duplication of code in method bodies:
AClass
A m(B x) { ... x ... }A n(B x, C y) { ... x ... }
71
![Page 72: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/72.jpg)
Method Abstraction
Duplication of code in method bodies:
• Handle as in FP
AClass
A q(B x, D z) { ... x ... }A m(B x) { return q(x, new D(42)); }A n(B x, C y) { return q(x, y.p()); }
Of course, iťs clumsy without λ...
72
![Page 73: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/73.jpg)
Field Abstraction
Animal
SnakeString namefloat weightString food
Dillofloat weightboolean alive
Antfloat weightPosn loc
Posnint xint y
73
![Page 74: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/74.jpg)
Field Abstraction
Animal
SnakeString namefloat weightString food
Dillofloat weightboolean alive
Antfloat weightPosn loc
Posnint xint y
74
![Page 75: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/75.jpg)
Field Abstraction
Animal Animalfloat weight
SnakeString nameString food
Dilloboolean alive
AntPosn loc
Posnint xint y
75
![Page 76: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/76.jpg)
Deep Hierarchies
Animal Animalfloat weight
SnakeString nameString food
Dilloboolean alive
AntPosn loc
Posnint xint y
Boa...
Rattlesnake...
76
![Page 77: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/77.jpg)
Deep Hierarchies
Snake...
Boaboolean yummy(Animal a) { ... }boolean CanEat(Animal a) { return a.smaller(this.weight*10) && a.slower(100) && yummy(a);}
Rattlesnakeboolean yummy(Animal a) { ... }boolean CanEat(Animal a) { return a.smaller(this.weight*5) && a.slower(120) && yummy(a);}
77
![Page 78: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/78.jpg)
Deep Hierarchies
Snake...
Boaboolean yummy(Animal a) { ... }boolean CanEat(Animal a) { return a.smaller(this.weight*10) && a.slower(100) && yummy(a);}
Rattlesnakeboolean yummy(Animal a) { ... }boolean CanEat(Animal a) { return a.smaller(this.weight*5) && a.slower(120) && yummy(a);}
78
![Page 79: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/79.jpg)
Deep Hierarchies
Snake...abstract boolean yummy(Animal a);boolean CanEatWFacts(Animal a, int wf, int sd) { return a.smaller(this.weight*wf) && a.slower(sd) && yummy(a);}
Boaboolean yummy(Animal a) { ... }boolean CanEat(Animal a) { return CanEatWFacts(a, 10, 100);}
Rattlesnakeboolean yummy(Animal a) { ... }boolean CanEat(Animal a) { return CanEatWFacts(a, 5, 120);}
Result: the template-hook pattern — via reasoning, not ad hocprocess
79
![Page 80: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/80.jpg)
More Abstraction for Class Hierarchies
• Abstraction inside of classes/hierarchies
• Abstraction from a client-only perspective
• Abstraction over traversals of collections ( map, fold, etc. )
All of these steps yield code that is pattern-based
⇒ theory and practice coincide!
80
![Page 81: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/81.jpg)
Part V: Encapsulated State
Or, without hiding andencapsulating state, it can’t be realOOP — right?
81
![Page 82: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/82.jpg)
Encapsulated State
OOP proponents argue that OOP is about state:
• It is about hidden and encapsulated state
• It is about manipulating state
They’re right!
82
![Page 83: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/83.jpg)
State: Whaťs Wrong with this Program?
// represent the world of a Worm Game: Worm, Food, and the Bounding Boxclass WormWorld extends World { Worm w; Food f; Box b; WormWorld(Worm w, Food f, Box b) { ... }
// what happens when the clock ticks World onTick() { return okWorld(w.nextWorld()); }
// what happens when the player presses a key World onKeyEvent(String ke) { return okWorld(w.changeDirection(ke)); }
// create a new world from the new worm, unless it ran into a wall // or ate itself World okWorld(Worm newWorm) { if (newWorm.canEat(this.f) && this.ate(newWorm)) return new WormWorld(newWorm.eat(this.f),f.create(this.b),b) else ... }
// did the worm encounter food and eat it? boolean ate(Worm w) { ... } ...
83
![Page 84: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/84.jpg)
State: Whaťs Wrong with this Program?
// represent the world of a Worm Game: Worm, Food, and the Bounding Boxclass WormWorld extends World { private Worm w; private Food f; private Box b; private WormWorld(Worm w, Food f, Box b) { ... }
// override: what happens when the clock ticks public World onTick() { return okWorld(w.nextWorld()); }
// override: what happens when the player presses a key public World onKeyEvent(String ke) { return okWorld(w.changeDirection(ke)); }
// create a new world from the new worm, unless it ran into a wall // or ate itself private World okWorld(Worm newWorm) { if (newWorm.canEat(this.f) && this.ate(newWorm)) return new WormWorld(newWorm.eat(this.f),f.create(this.b),b) else ... }
// did the worm encounter food and eat it? private boolean ate(Worm w) { ... } ...
Iťs missingsome keywords
84
![Page 85: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/85.jpg)
Encapsulation Means Privacy
• Hiding & encapsulating state means privacy
• Introduce when programs get large enough and studentshave a sense of invariants
Encapsulation does no! imply a litany of assignment statements
85
![Page 86: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/86.jpg)
Manipulating State: Methods produce Worlds
• Manipulating state means that some methods produce anew instance of the world
• Introduce this topic when you have an I/O library thatdoesn’t change state
Manipulating state does no! imply a litany of assignment statements
86
![Page 87: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/87.jpg)
State and “Real” Programs
• Our students regularly design interactive programswithout a single assignment statement
class WormWorld extends World { ... // what happens when the player presses a key public World onKeyEvent(String ke) { ... } ...}
• Schemers accept the occasional assignment statement asnecessary — and thaťs really OOP
87
![Page 88: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/88.jpg)
Part VI: Experience
88
![Page 89: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/89.jpg)
In the Classroom
• Development time: 3 years
• Test teaching at Northeastern: 6 semesters, 4instructors (mostly Proulx)
• Test teaching at UChicago: 1 summer semester (Gray)
• Teacher/college workshops: 2 summers (Proulx & Gray)
• A dozen teachers in high schools, small colleges
89
![Page 90: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/90.jpg)
Evaluation
Northeastern University:
• Four follow-up faculty have testified that the new cropof students are !astly better than the previous ones
• It works for several instructors, so iťs not the“enthusiasm of the inventor” (he doesn’t teach it)
High School:
• Teachers report strong AP results
Chicago:
• Too early for results
90
![Page 91: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/91.jpg)
Objections
Common objection: iťs FP in Java syntax
Our reply:
• See quotes at the beginning of the talk — this is True OOPTM
• We emphasize what OOP is all about for real programming:design of classes and hierarchiesabstractionencapsulation
• Yes, the occasional assignment statement helps
91
![Page 92: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/92.jpg)
Summary
92
![Page 93: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/93.jpg)
What Doesn’t Work
• SICP-style approaches: teaching how to implement OOin an FP
• Cartwright (at Rice) approach: teaching how tointerpret an FPL in an OOPL
Students must know suchprinciples, but it doesn’t teach OOP
93
![Page 94: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/94.jpg)
What Works
Take OOP seriously
• Iťs about the systematic design of classes
• Iťs about the systematic design of hierarchies
• Iťs about server/provider vs. client/consumer
• Iťs best seen as FP with grouping, privacy, and novelforms of abstraction
94
![Page 95: How to Design Class Hierarchies - Semantic Scholar · How to Design Class Hierarchies Matthias Felleisen PLT Northeastern University, Boston 1. The Team ... Background How to Design](https://reader033.fdocuments.in/reader033/viewer/2022060215/5f05e10d7e708231d4152c41/html5/thumbnails/95.jpg)
To produce the best OOprogrammers, teach FP,
and then move on
HtDP and HtDCH demonstrate thisapproach with successful results
Thanks!
95