Transcript Slides
Lecture 21: Inheritance CS200: Computer Science University of Virginia Computer Science David Evans http://www.cs.virginia.edu/evans Menu • • • • Objects Review Inheritance PS5: Databases PS6 17 March 2003 CS 200 Spring 2003 2 Objects • When we package state and procedures together we have an object • Programming with objects is object-oriented programming 17 March 2003 CS 200 Spring 2003 3 make-number (define make-number (lambda (n) (lambda (message) (cond ((eq? message 'value) (lambda (self) n)) Why don’t we just use n? ((eq? message 'add) (Well see why later today.) (lambda (self other) (+ (ask self 'value) (ask other 'value)))))))) 17 March 2003 CS 200 Spring 2003 4 ask Lecture 20: (define (ask object message) (object message)) (define (ask object message . args) (apply (object message) object args)) 17 March 2003 CS 200 Spring 2003 5 (define make-number (lambda (n) (lambda (message) (cond ((eq? message 'value) (lambda (self) n)) ((eq? message 'add) (lambda (self other) (+ (ask self 'value) (ask other 'value)))))))) > (define san (make-number 3)) > (ask san 'value) 3 > (ask san 'add (make-number 4)) 7 17 March 2003 global environment + : #<primitive:+> make-number: san: n: 3 parameters: body: ((lambda … parameters: message body: (cond ((eq? … CS 200 Spring 2003 6 There are many kinds of numbers… • • • • Whole Numbers (0, 1, 2, …) Integers (-23, 73, 0, …) Fractions (1/2, 7/8, …) Floating Point (2.3, 0.0004, 3.14159) • But they can’t all do the same things – We can get the denominator of a fraction, but not of an integer 17 March 2003 CS 200 Spring 2003 7 make-fraction (define make-fraction (lambda (numerator denominator) (lambda (message) (cond ((eq? message 'value) (lambda (self) (/ numerator denominator)) ((eq? message 'add) (lambda (self other) (+ (ask self 'value) (ask other 'value))) ((eq? message ‘get-numerator) (lambda (self) numerator)) ((eq? message ‘get-denominator) (lambda (self) denominator)) ))))) 17 March 2003 CS 200 Spring 2003 Same as in make-number 8 Why is redefining add a bad thing? • Cut-and-paste is easy but… • There could be lots of number methods (subtract, multiply, print, etc.) • Making the code bigger makes it harder to understand • If we fix a problem in the number add method, we have to remember to fix the copy in make-fraction also (and real, complex, float, etc.) 17 March 2003 CS 200 Spring 2003 9 Inheritance 17 March 2003 CS 200 Spring 2003 10 make-fraction (define (make-fraction numer denom) (let ((super (make-number #f))) (lambda (message) (cond ((eq? message 'value) (lambda (self) (/ numer denom))) ((eq? message 'get-denominator) (lambda (self) denom)) ((eq? message 'get-numerator) (lambda (self) numer)) (else (super message)))))) 17 March 2003 CS 200 Spring 2003 11 Using Fractions > (define half (make-fraction 1 2)) > (ask half 'value) 1/2 > (ask half 'get-denominator) 2 > (ask half 'add (make-number 1)) 3/2 > (ask half 'add half) 1 17 March 2003 CS 200 Spring 2003 12 > (trace ask) > (trace eq?) > (ask half 'add half) |(ask #<procedure> add #<procedure>) | | | | | | | | | | (eq? #f (eq? #f (eq? #f (eq? #f (eq? #t add value) add get-denominator) add get-numerator) add value) add add) 17 March 2003 | (ask #<procedure> value) | |(eq? value value) | |#t | 1/2 | (ask #<procedure> value) | |(eq? value value) | |#t | 1/2 |1 1 CS 200 Spring 2003 13 make-number make-fraction > (trace ask) > (trace eq?) > (ask half 'add half) |(ask #<procedure> add #<procedure>) | | | | | | | | | | (eq? #f (eq? #f (eq? #f (eq? #f (eq? #t add value) add get-denominator) add get-numerator) add value) add add) 17 March 2003 | (ask #<procedure> value) | |(eq? value value) | |#t | 1/2 | (ask #<procedure> value) | |(eq? value value) | |#t | 1/2 |1 1 CS 200 Spring 2003 14 Inheritance Inheritance is using the definition of one class to make another class make-fraction uses make-number to inherit the behaviors of number 17 March 2003 CS 200 Spring 2003 15 • English A Fraction is a kind of Number. Number • C++ Fraction is a derived class whose base class is Number • Java Fraction Fraction extends Number. • Eiffel Fraction inherits from Number. Note: people sometimes draw this different ways • Beta Fraction is a subpattern of Number. • Smalltalk (72) Didn’t have inheritance! 17 March 2003 CS 200 Spring 2003 16 CS 200: Number Fraction inherits from Number. Fraction is a subclass of Number. Fraction The superclass of Fraction is Number. 17 March 2003 CS 200 Spring 2003 17 Inheritance and Subtyping • Inheritance: reusing the implementation of one object to make a new kind of object • Often confused with subtyping which is saying one kind of object can be used where another kind of object is expected – CS200 won’t cover subtyping (take CS201J) – We will cover types (Class 29) 17 March 2003 CS 200 Spring 2003 18 PS5 How are commercial databases different from what you implemented for PS5? UVa’s Integrated Systems Project to convert all University information systems to use an Oracle database was originally budgeted for $58.2 Million (starting in 1999). Actual cost is likely to be $100 Million. http://www.virginia.edu/isp/ 17 March 2003 CS 200 Spring 2003 19 Real Databases • Atomic Transactions: a transaction may involve many modifications to database tables, but the changes should only happen if the whole transaction happens (e.g., don’t charge the credit card unless the order is sent to the shipping dept) • Security: limit read/write access to tables, entries and fields • Storage: need to efficiently store data on disk, provide backup mechanisms • Scale: to support really big data tables, real databases do lots of clever things 17 March 2003 CS 200 Spring 2003 20 How big are big databases? • Microsoft TerraServer – Claimed biggest in 1998 – Aerial photos of entire US (1 meter resolution) 17 March 2003 CS 200 Spring 2003 21 Rotunda You are here 17 March 2003 Amphitheater CS 200 Spring 2003 22 You are here AFC? 17 March 2003 CS 200 Spring 2003 Picture from 2 Apr 199423 Big Databases • Microsoft TerraServer – 3.3 Terabytes (claimed biggest in 1998) – 1 Terabyte = 240 Bytes ~ 1 Trillion Bytes • Wal-Mart – 285 Terabytes • Stanford Linear Accelerator (BaBar) – 500 Terabytes (30 KB per particle collision) 17 March 2003 CS 200 Spring 2003 24 PS6 Make an adventure game programming with objects 17 March 2003 CS 200 Spring 2003 25 object PS6 Classes physical-object mobile-object thing student inherits from person which inherits from mobile-object which inherits from physical-object which inherits from object. 17 March 2003 person student CS 200 Spring 2003 place make-class is the procedure for constructing objects in the class class police-officer 26 object PS6 Objects physical-object mobile-object thing person student Alyssa P. Hacker place Cabal Hall Recursa (make-place name) evaluates to an object that is an instance of the class place. police-officer Are there class hierarchies like this in the real world or just in fictional worlds like Charlottansville? 17 March 2003 CS 200 Spring 2003 28 Microsoft Foundation Classes CButton inherits from CWnd inherits from CObject “A button is a kind of window is a kind of object” 17 March 2003 CS 200 Spring 2003 29 Node PathInterpolator Interpolator Selector RotationPathInterpolator Leaf SceneGraphObject Not at all uncommon to have class hierarchies like this! Java Class Hierarchy Diagram 173D March 2003 CS 200 Spring 2003 http://java.sun.com/products/java-media/3D/collateral/j3dclass.html 30 Charge • PS5 – Return now, comments will be available Wednesday • PS6 – Programming with Objects • Wednesday and Friday: – How will solving the (generalized) Cracker Barrel Peg Board puzzle help cure cancer? 17 March 2003 CS 200 Spring 2003 31