Class Inheritance Victor Norman CS104. Reading Quiz, Q1 In the first reading, the author uses the following classes to illustrate Subclassing: A.Shape,

Slides:



Advertisements
Similar presentations
More on Classes Inheritance and Polymorphism
Advertisements

Python Objects and Classes
ABSTRACT CLASSES AND INTERFACES. Abstract methods You can declare an object without defining it: Person p; Similarly, you can declare a method without.
CS 211 Inheritance AAA.
CS 106 Introduction to Computer Science I 04 / 11 / 2008 Instructor: Michael Eckmann.
1 Inheritance and Polymorphism. 2 This section is not required material!!!!  A note about inheritance… It’s not normally covered in 101 It will be gone.
Objectives Introduction to Inheritance and Composition (Subclasses and SuperClasses) Overriding (and extending), and inheriting methods and constructors.
Classes and Object- Oriented... tMyn1 Classes and Object-Oriented Programming The essence of object-oriented programming is that you write programs in.
SE-1020 Dr. Mark L. Hornick 1 Inheritance and Polymorphism: Abstract Classes The “not quite” classes.
The Bridge Pattern.. Intent Decouple an abstraction from its implementation so that the two can vary independently Also known as: Handle/Body.
CS 106 Introduction to Computer Science I 11 / 26 / 2007 Instructor: Michael Eckmann.
More about classes and objects Classes in Visual Basic.NET.
Inheritance. Extending Classes It’s possible to create a class by using another as a starting point  i.e. Start with the original class then add methods,
Inheritance Chapter 8.
CS 106 Introduction to Computer Science I 11 / 20 / 2006 Instructor: Michael Eckmann.
CS 106 Introduction to Computer Science I 11 / 15 / 2006 Instructor: Michael Eckmann.
Arrays, Loops weeks 4-6 (change from syllabus for week 6) Chapter 4.
CS 106 Introduction to Computer Science I 04 / 21 / 2008 Instructor: Michael Eckmann.
OOP! POO! Spelled backwards. Intro to OOP What is OOP?  Stands for Object Oriented Programming  Create different types of objects which can do multiple.
Chapter 10 Classes Continued
©TheMcGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 1 Introduction to Object-Oriented Programming and Software Development.
Abstraction: Polymorphism, pt. 1 Abstracting Objects.
(c) University of Washington03-1 CSC 143 Java Inheritance Reading: Ch. 10.
(c) University of Washington04-1 CSC 143 Java Inheritance Example (Review)
Abstract classes and Interfaces. Abstract classes.
UFCEUS-20-2 : Web Programming Lecture 5 : Object Oriented PHP (1)
Inheritance. Inhertance Inheritance is used to indicate that one class will get most or all of its features from a parent class. class Dog(Pet): Make.
Inheritance: Section 9.1, 9.2 Victor Norman CS106.
1 Java Inheritance. 2 Inheritance On the surface, inheritance is a code re-use issue. –we can extend code that is already written in a manageable manner.
CS 106 Introduction to Computer Science I 04 / 25 / 2007 Instructor: Michael Eckmann.
Unit 4 Prototype Summary prepared by Kirk Scott 1.
Data Structures for Scenes, The Basics of Scene Graphs Glenn G. Chappell U. of Alaska Fairbanks CS 481/681 Lecture Notes Friday,
CS 450: COMPUTER GRAPHICS PORTRAIT OF AN OPENGL PROGRAM SPRING 2015 DR. MICHAEL J. REALE.
Object-Oriented Software Development F Software Development Process F Analyze Relationships Among Objects F Class Development F Class Design Guidelines.
Oct 15, 2007Sprenkle - CS1111 Objectives Creating your own functions.
Collecting Things Together - Lists 1. We’ve seen that Python can store things in memory and retrieve, using names. Sometime we want to store a bunch of.
CS 106 Introduction to Computer Science I 04 / 23 / 2010 Instructor: Michael Eckmann.
Chapter 12 Object Oriented Design.  Complements top-down design  Data-centered view of design  Reliable  Cost-effective.
Object Oriented Software Development
Software Engineering CS3003 Lecture 4 Code bad smells and refactoring.
Inheritance Notes Chapter 6 1. Inheritance  you know a lot about an object by knowing its class  for example what is a Komondor? 2
Inheritance. Inheritance - Introduction Idea behind is to create new classes that are built on existing classes – you reuse the methods and fields and.
CS 350 – Software Design Expanding Our Horizons – Chapter 8 The traditional view of objects is that they are data with methods. Sometimes objects could.
CS 106 Introduction to Computer Science I 04 / 18 / 2008 Instructor: Michael Eckmann.
Coming up: Inheritance
29-July-2002cse Inheritance © 2002 University of Washington1 Inheritance CSE 142, Summer 2002 Computer Programming 1
Midterm Review Important control structures Functions Loops Conditionals Important things to review Binary Boolean operators (and, or, not) Libraries (import.
Objective You will be able to define the basic concepts of object-oriented programming with emphasis on objects and classes by taking notes, seeing examples,
Lecture 8: Advanced OOP Part 2. Overview Review of Subtypes Interfaces Packages Sorting.
Chapter 17 Q and A Victor Norman, et al. CS104. What is Object-oriented Programming? Q: What is object-oriented programming? A: It means defining classes/objects,
OOP in Java : © W. Milner 2005 : Slide 1 Java and OOP Part 3 – Extending classes.
Terms and Rules II Professor Evan Korth New York University (All rights reserved)
1 Inheritance and Polymorphism Chapter 11 Spring 2007 CS 101 Aaron Bloomfield.
Class Inheritance Victor Norman CS104. The Problem What is the basic problem that inheritance tries to solve? Answer: Two types (classes) may have lots.
 The word static is used to declare either a ________ variable or method.  Why do we use statics?  What is Polymorphism? class In general, we use a.
CSC 108H: Introduction to Computer Programming Summer 2011 Marek Janicki.
The Object-Oriented Thought Process Chapter 1
CS-104 Final Exam Review Victor Norman.
CS 5010 Program Design Paradigms "Bootcamp" Lesson 9.3
Inheritance "Question: What is the object oriented way of getting rich? Answer: Inheritance.“ “Inheritance is new code that reuses old code. Polymorphism.
Object Oriented Programming (OOP) LAB # 8
Week 6 Object-Oriented Programming (2): Polymorphism
LESSON 13 – INTRO TO ARRAYS
CISC101 Reminders Assn 3 due tomorrow, 7pm.
Review of Previous Lesson
Object-Oriented PHP (1)
Terry Scott University of Northern Colorado 2007 Prentice Hall
*Lecture based on notes from SICP
Presentation transcript:

Class Inheritance Victor Norman CS104

Reading Quiz, Q1 In the first reading, the author uses the following classes to illustrate Subclassing: A.Shape, Circle, Line B.Pet, Dog, Cat C.Furniture, Table, Chair D.Beam, Ibeam, Hbeam

Reading Quiz, Q2 If you have defined the class Dog to be a subclass of class Pet and have created a variable dog this way: dog = Dog(“Spot”, True) then the following calls isinstance(dog, Pet) isinstance(dog, Dog) will return… A.True, True B.False, True C.True, False D.False, False

Reading Quiz, Q3 If we have a class Vehicle with a method status() defined in it, and a class Motorcycle that is a subclass of Vehicle, then we can create a Motorcycle instance and call the status() method on it because… A.Motorcycle uses Vehicle. B.Motorcycle initializes Vehicle. C.Motorcycle inherits status() from Vehicle. D.Motorcycle overrides status() in Vehicle.

The Problem What is the basic problem that inheritance tries to solve? Answer: Two types (classes) may have lots of similar code. Inheritance is a way to reuse code, thus removing duplicate code.

Drawing Man and Woman class Man: def __init__(self, x, y): self._x = x self._y = y def draw(self): self.drawHead() self.drawBody() self.drawArms() self.drawLegs() def drawHead(self): # code for drawArms # code for drawBody def drawLegs(self): class Woman: def __init__(self, x, y): self._x = x self._y = y def draw(self): self.drawHead() self.drawBody() self.drawArms() self.drawLegs() def drawHead(self): # code for drawArms # code for drawBody def drawLegs(self):

Lots of duplicate code So what? Who cares? Duplicate code  – more places to make errors – more places to fix errors – inconsistent fixes – more typing – more places to add new code

Solution: a Person class instead of Man/Woman class Person: def __init__(self, x, y, gen): self._x = x self._y = y self._gender = gen def draw(self): self.drawHead() self.drawBody() self.drawArms() self.drawLegs() # drawHead, Body, Arms code… def drawLegs(self): if self._gender == "F": self.drawSkirtAndLegs() else: self.drawHairyLegs() def drawHairyLegs(self): def drawSkirtAndLegs(self): class Man: def __init__(self, x, y): self._x = x self._y = y def draw(self): self.drawHead() self.drawBody() self.drawArms() self.drawLegs() # drawHead, Body, Arms code… def drawLegs(self):

Evaluate this solution + Much less code in Person than in Man + Woman. + Only 1 class. (Less is almost always better.) − Does not scale well: Consider: adding Alien now: 3 legs, that bend backwards. def drawLegs(self): if self._gender == “F”: self.drawSkirtAndLegs() elif self._gender == “M”: self.drawHairyLegs() elif self._gender == “A”: self.drawAlienLegs() If we decide to drawHeads differently we need a big if-elif-elif again… and same for drawBody()…

Solution: class inheritance Keep Person, and make Man, Woman, and Alien be subclasses Person Man Woman Alien

Terminology Person is the superclass, or base class, or parent class. Man, Woman, Alien are subclasses, derived classes, or child classes. Subclasses inherit from or are derived from superclasses. Want all common attributes and methods/code “pushed” up the hierarchy. – e.g., Man, Woman, Alien all have x, y location: should be stored in Person superclass.

Person Class Code class Person: # an abstract base class. def __init__(self, x_loc, y_loc, gender): self._x = x_loc self._y = y_loc self._gender = gender def draw(self): self.drawHead() self.drawBody() self.drawArms() self.drawLegs() # def drawHead, drawBody, drawArms, etc. # NOTE: No drawLegs() code here. Only in # derived classes. Also, don’t really need # to store gender anymore.

Man class Man(Person): def __init__(self, x_loc, y_loc): Person.__init__(self, x_loc, y_loc, "M") def drawLegs(self): # code to draw hairy bowlegged legs wearing jeans. “A Man is-a Person” Call superclass constructor, passing in reference to self, location and gender drawLegs() implemented here – not in superclass

Woman, Alien from person import * # assuming Person is in person.py class Woman(Person): def __init__(self, x_loc, y_loc): Person.__init__(self, x_loc, y_loc, “F”) def drawLegs(self): # code to draw legs under a nice modest skirt. class Alien(Person): def __init__(self, x_loc, y_loc): Person.__init__(self, x_loc, y_loc, "A") def drawLegs(self): # code to draw 3 legs.

Using this code barack = Man(10, 20) beyonce = Woman(30, 40) e_t = Alien(50, 60) beings = [ barack, beyonce, e_t ] for be in beings: be.draw()

Now, you try it! We want to create a program that the user can use to draw shapes, etc. We need to model these shapes: – Circle – Square – Rectangle – Line – Triangle What is the relationship between classes? (the class hierarchy) What attributes will each class have? What methods will each class have?

myro.py details myro library provides move(), motors(), turnLeft(), turnRight(), setLEDs(), beep(), etc. – When you call move(), you are actually calling robot.move(): robot is a pre-defined global object. Also, provides a class definition: class Scribbler: def __init__(self): … def init(self, comport=None): … def turnLeft(self, time): … def beep(self, time, freq1, freq2=None): …

What we did last week We defined ScribPoint – attributes: _x, _y – getX(), getY(), setX(), setY() – Just held the coordinates. Not much fcnality. We defined goToPoint(from, to): – from and to were ScribPoint objects. – used our turnDegrees(), which called turnLeftDegrees() or turnRightDegrees(), which used globally pre-defined robot object.

Analysis of this solution ScribPoint has very little functionality. We had to make the robot turn east after moving to a new point. – More turns  more inconsistent results. Had to pass in to goToPoint() where the robot was.

Better way Wouldn’t it be loverly if – the robot could “remember” where it is and what angle it is pointing at. But, how to do this? Two options: – Have a class that “has-a” a reference to a Scribbler object and keeps track of this stuff, or, – Have a class that “is-a” Scribbler object, adding the functionality and attributes. Latter is Class Inheritance.

CS104Scribbler A CS104Scribbler “is-a” Scribbler. – inherits from it. from myro import * # imports Scribbler defn. class CS104Scribbler(Scribbler): def __init__(self, comport=“COM40”, x=0, y=0, angle=0): Scribbler.__init__(self, comport) # code to store x, y, angle.

Result We can move goToPoint(), turnDegrees(), etc., into CS104Scribbler class.  Can write this nice code: scrib = CS104Scribbler() # uses COM40 scrib.goToPoint(16, 12) scrib.goToPoint(0, 0) Nice and compact and readable. goToPoint() does not have to “turn east” after each move, because object can remember what angle it is pointing.

Additional Benefits We could write code to control 2 robots: scrib1 = CS104Scribbler(“COM40”) scrib2 = CS104Scribbler(“COM41”) # send different messages to robots scrib1.beep(3, 660, 770) scrib2.beep(3, 440, 487)

Extra Slides…

New class or child class? Q: If a class needs a couple attributes belonging to another class, is it better to make a child class or a completely new class? A: If it is just attributes, just make a new class. If it is attributes and a bunch of functionality, make a subclass.

When to subclass? Q: When would it be better to use the Parent and Child class rather than defining methods in one class? A: 1) You might need to be able to make objects of both kinds of classes. 2) You might have the Parent class well tested – so you don’t want to alter it. 3) You anticipate that you might need another child class of the parent.

SortedSet Q: I am wondering why a whole separate class is created for some of these functions. For stuff like SortedSet, the case can be made, but I feel like we can accomplish the same thing with a “plain old list” and functions contained in that class. A: I agree. The example is a bit contrived. I would have started from scratch with a class containing a list.

SortedSet (2) Q: So the "sort" method is created just to prevent people from sorting the already sorted set? And why wouldn't we want to reverse it? A: Right. sort’s code consists of pass. This is done so that it is efficient, instead of trying to sort an already sorted list. You don’t want to reverse it because then it is not sorted anymore. NOTE: when you find you are “undefining” methods provided by the superclass, this should be an indication that you’ve made a poor inheritance decision.

How to see defined methods? Q: Is there a way to see all the preexisting methods for a parent class? A: Best way is to do >>> help(class) in interactive mode.

What does this do? Q: Are we modifying the class Television or the class DeluxeTV with this def? class DeluxeTV(Television): def __init__(self): Television.__init__(self) self._favorites = [ ] A: You are modifying the DeluxeTV class – adding _favorites to it.

__setitem__ Q: What is going on with the __setitem__ method? A: __setitem__ is called when you do indexing: __setitem__(...) x.__setitem__(i, y) x[i]=y

Example class Vic: def __init__(self): self._l = [] def __setitem__(self, loc, item): if len(self._l) > loc: self._l[loc] = item else: numItemsToAdd = loc - len(self._l) for i in range( numItemsToAdd): self._l.append(0) self._l.append(item) v = Vic() v[0] = "hi" v[3] = "hello" print v._l OUTPUT: ['hi', 0, 0, 'hello']

“Inner” classes Q: Is it possible to have a class in a class? A: It is possible, but I’ve never had to do it.