1 / 26

Inheritance in Object-Oriented Programming

Learn about inheritance in object-oriented programming and how it allows classes to inherit behaviors from other classes. See examples of inheritance in creating fractions from numbers.

pevans
Download Presentation

Inheritance in Object-Oriented Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. David Evans http://www.cs.virginia.edu/evans Lecture 23: Inheritance CS200: Computer Science University of Virginia Computer Science

  2. Menu • Objects Review • Inheritance • PS6 CS 200 Spring 2003

  3. Objects • When we package state and procedures together we have an object • Programming with objects is object-oriented programming CS 200 Spring 2003

  4. make-number (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)))))))) Why don’t we just use n? (Well see why later today.) CS 200 Spring 2003

  5. ask Lecture 22: (define (ask object message) (object message)) (define (ask object message . args) (apply (object message) object args)) CS 200 Spring 2003

  6. (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)))))))) global environment + : #<primitive:+> make-number: san: > (define san (make-number 3)) > (ask san 'value) 3 > (ask san 'add (make-number 4)) 7 3 n : parameters: body: ((lambda … parameters: message body: (cond ((eq? … CS 200 Spring 2003

  7. 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 CS 200 Spring 2003

  8. 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)) ))))) Same as in make-number Note: our add method evaluates to a number, not a fraction object (which would be better). CS 200 Spring 2003

  9. 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.) CS 200 Spring 2003

  10. Inheritance CS 200 Spring 2003

  11. 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)))))) CS 200 Spring 2003

  12. 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 CS 200 Spring 2003

  13. > (trace ask) > (trace eq?) > (ask half 'add half) |(ask #<procedure> add #<procedure>) | (eq? add value) | #f | (eq? add get-denominator) | #f | (eq? add get-numerator) | #f | (eq? add value) | #f | (eq? add add) | #t | (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. make-number make-fraction > (trace ask) > (trace eq?) > (ask half 'add half) |(ask #<procedure> add #<procedure>) | (eq? add value) | #f | (eq? add get-denominator) | #f | (eq? add get-numerator) | #f | (eq? add value) | #f | (eq? add add) | #t | (ask #<procedure> value) | |(eq? value value) | |#t | 1/2 | (ask #<procedure> value) | |(eq? value value) | |#t | 1/2 |1 1 CS 200 Spring 2003

  15. Inheritance Inheritance is using the definition of one class to make another class make-fraction uses make-number to inherit the behaviors of number CS 200 Spring 2003

  16. Number • English A Fraction is a kind of Number. • C++ Fraction is a derived class whose base class is Number • Java Fraction extends Number. • Eiffel Fraction inherits from Number. • Beta Fraction is a subpattern of Number. • Smalltalk (72) Didn’t have inheritance! Fraction Note: people sometimes draw this different ways CS 200 Spring 2003

  17. CS 200: Fraction inherits from Number. Fraction is a subclass of Number. The superclass of Fraction is Number. Number Fraction CS 200 Spring 2003

  18. Inheritance and Subtyping • Inheritance: reusing the definition of one class to make a new kind of class make-fraction uses make-number “fraction inherits from number” • Often confused with subtyping which is saying one kind of object can be used where another kind of object is expected CS 200 Spring 2003

  19. Subtyping • Subtyping is very important in statically typed languages (like C, C++, C#, Java, Pascal) where you have to explicitly declare a type for all variables: method Number add (Number n) { … } • CS200 won’t cover subtyping (although we will talk more about types later) Because of subtyping, either a Number or a Fraction (subtype of Number) could be passed as the argument CS 200 Spring 2003

  20. PS6Make an adventure game programming with objectsMany objects in our game have similar properties and behaviors, so we use inheritance. CS 200 Spring 2003

  21. object PS6 Classes physical-object place make-class is the procedure for constructing objects in the class class mobile-object thing person student inherits from person which inherits from mobile-object which inherits from physical-object which inherits from object. police-officer student CS 200 Spring 2003

  22. object PS6 Objects physical-object place Cabal Hall mobile-object Recursa (make-place name) evaluates to an object that is an instance of the class place. thing person police-officer student Alyssa P. Hacker CS 200 Spring 2003

  23. Are there class hierarchies like this in the real world or just in fictional worlds like Charlottansville? CS 200 Spring 2003

  24. Microsoft Foundation Classes CButton inherits from CWnd inherits from CObject “A button is a kind of window is a kind of object” CS 200 Spring 2003

  25. RotationPathInterpolator PathInterpolator Interpolator Node Behavior Leaf Object SceneGraphObject Not at all uncommon to have class hierarchies like this! Java 3D Class Hierarchy Diagram http://java.sun.com/products/java-media/3D/collateral/j3dclass.html CS 200 Spring 2003

  26. Charge • PS6 • Programming with Objects • Due Date change: • Previously Monday, now due Friday 26 March • Or, turn in Monday without doing questions 7 and 8 • Friday: Is there anything that cannot be computed? CS 200 Spring 2003

More Related