CS 112 Introduction to Programming Inheritance Yang (Richard) Yang Computer Science Department Yale University 308A Watson, Phone: 432-6400

Slides:



Advertisements
Similar presentations
Class Hierarchy (Inheritance)
Advertisements

CS 211 Inheritance AAA.
Inheritance Inheritance Reserved word protected Reserved word super
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,
1 Inheritance Reserved word protected Reserved word super Overriding methods Class Hierarchies Reading for this lecture: L&L 8.1 – 8.5.
Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-2: Static Data; More Inheritance reading:
Copyright 2006 by Pearson Education 1 Building Java Programs Chapter 9: Inheritance and Interfaces.
CSE 143 Lecture 3 Inheritance slides created by Marty Stepp
Aalborg Media Lab 23-Jun-15 Inheritance Lecture 10 Chapter 8.
1 Inheritance Readings: Writing classes Write an Employee class with methods that return values for the following properties of employees at a.
Unit 011 Inheritance Recall What Inheritance is About The extends Keyword The Object Class Overriding versus Overloading What is Actually Inherited? Single.
1 Introduction to Inheritance Overview l Inheritance ensures Reusability l Example of Inheritance l What is actually Inherited? l Overloading Vs. Overriding.
Inheritance. © 2004 Pearson Addison-Wesley. All rights reserved 8-2 Inheritance Inheritance is a fundamental object-oriented design technique used to.
Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-1: Inheritance reading:
Copyright 2010 by Pearson Education Topic 31 - inheritance.
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.
CSC 142 Computer Science II Zhen Jiang West Chester University
Copyright 2008 by Pearson Education Building Java Programs Chapter 8 Lecture 19: encapsulation, inheritance reading: (Slides adapted from Stuart.
CS 112 Introduction to Programming Inheritance Hierarchy; Polymorphism Yang (Richard) Yang Computer Science Department Yale University 308A Watson, Phone:
Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-1: Inheritance reading:
Some Object-Oriented Programming (OOP) Review. Let’s practice writing some classes Write an Employee class with methods that return values for the following.
1 final (the keyword, not the exam). 2 Motivation Suppose we’ve defined an Employee class, and we don’t want someone to come along and muck it up  E.g.,
1 Building Java Programs Chapter 9: Inheritance and Interfaces These lecture notes are copyright (C) Marty Stepp and Stuart Reges, They may not be.
Inheritance. Inheritance is a fundamental object-oriented design technique used to create and organize reusable classes Chapter 8 focuses on: deriving.
Programming Abstractions Cynthia Lee CS106X. Inheritance Topics Inheritance  The basics › Example: Stanford GObject class  Polymorphism › Example: Expression.
Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-2: Static Data; More Inheritance reading:
Chapter 8 Inheritance. 2  Review of class relationships  Uses – One class uses the services of another class, either by making objects of that class.
Application development with Java Lecture 21. Inheritance Subclasses Overriding Object class.
Coming up: Inheritance
1 Inheritance Reserved word protected Reserved word super Overriding methods Class Hierarchies Reading for this lecture: L&L 9.1 – 9.4.
Copyright 2010 by Pearson Education Building Java Programs Chapter 9 Lecture 9-1: Inheritance reading: 9.1.
Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-2: Interacting with the Superclass ( super ) reading:
Inheritance in Java. Access Specifiers private keywordprivate keyword –Used for most instance variables –private variables and methods are accessible.
Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-2: Interacting with the Superclass ( super ); Discussion of Homework 9:
Classes, Interfaces and Packages
Java Software Solutions Lewis and Loftus Chapter 8 Copyright 1997 by John Lewis and William Loftus. All rights reserved. 1 Inheritance -- Introduction.
Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-2: Interacting with the Superclass ( super ); Discussion of Homework 9:
 Description of Inheritance  Base Class Object  Subclass, Subtype, and Substitutability  Forms of Inheritance  Modifiers and Inheritance  The Benefits.
Copyright 2008 by Pearson Education Building Java Programs Chapter 9: Inheritance and Interfaces Lecture 9-1.
Copyright 2009 by Pearson Education Building Java Programs Chapter 9: Inheritance and Interfaces Lecture 9-1.
CS 112 Introduction to Programming Object Relationship Analysis: Composition, Association, Inheritance Yang (Richard) Yang Computer Science Department.
CS 112 Introduction to Programming Class Inheritance Yang (Richard) Yang Computer Science Department Yale University 208A Watson, Phone:
CS 112 Introduction to Programming Method Overriding; Object Hierarchy; Event-Driven Programming Yang (Richard) Yang Computer Science Department Yale University.
1 Interacting with the superclass (continued) suggested reading:9.4.
Building Java Programs Chapter 9
Adapted from slides by Marty Stepp and Stuart Reges
Building Java Programs Chapter 9
The software crisis software engineering: The practice of developing, designing, documenting, testing large computer programs. Large-scale projects face.
Lecture 15: More Inheritance
Lecture 9-2: Interacting with the Superclass (super);
Week 8 Lecture -3 Inheritance and Polymorphism
Adapted from slides by Marty Stepp and Stuart Reges
The software crisis software engineering: The practice of developing, designing, documenting, testing large computer programs. Large-scale projects face.
Building Java Programs
Building Java Programs
Law firm employee analogy
Lecture 14: Inheritance Building Java Programs: A Back to Basics Approach by Stuart Reges and Marty Stepp Copyright (c) Pearson All rights reserved.
Building Java Programs
Topic 31 - inheritance.
Building Java Programs
Inheritance Readings: 9.1.
Lecture 15: Inheritance II
Building Java Programs
Building Java Programs
Building Java Programs
Chapter 11 Inheritance and Polymorphism Part 1
Building Java Programs
Building Java Programs
Building Java Programs
Presentation transcript:

CS 112 Introduction to Programming Inheritance Yang (Richard) Yang Computer Science Department Yale University 308A Watson, Phone:

2 Admin  Class project

3 Recap: OOP Analysis GeoMapRegion Polygon Color Point 1mm2 111m A composition relationship An association relationship

 Retrieve region m Batch: retrieve list of all regions m Specific: retrieve one specific region  Coloring m Map properties of a region to a color 4 Recap: OOP Analysis: Controller Structure

 Encapsulation is a key problem solving technique for large, complex problems  A good way to learn more is to read about designs of large-scale OOP software systems Recap: OOP Analysis

6 Software Design and Reuse  Question: What programming language feature(s) have we covered to allow software reuse?

7 Outline  Admin and recap  Class inheritance o why and how?

A Law Firm Problem: Setting  Consider the following law firm: m Work time policy: Employees work 40 hours / week. m Pay policy: Employees make a base salary of $50,000 per year, except that o legal secretaries make 10% extra over base per year, o marketers make 20% extra over base per year, o lawyers who reach partner level get bonus. m Vacation policy: Employees have 2 weeks of paid vacation leave per year, except that o lawyers get an extra week on top of base, o employees should use a yellow form to apply for leave, except for lawyers who use a pink form. 8

A Law Firm Problem: Setting Each type of employee has some job functions: Lawyers know how to sue. Marketers know how to advertise. Secretaries know how to prepare ordinary documents. Legal secretaries know how to prepare both ordinary documents and legal documents. 9

An Employee class public class Employee { public int hours() { return 40; // works 40 hours / week } public double pay() { return ; // $50, / year } public int vacationDays() { return 10; // 2 weeks' paid vacation } public String vacationForm() { return "yellow"; // use the yellow form } public String toString() { String result = "Hours: " + hours() + "\n"; result += "Pay: " + pay() + "\n"; result += "Vacation days: " + vacationDays() + "\n"; result += "Vacation Form: " + vacationForm() + "\n"; return result; } 10

Question: Writing class Secretary  Secretaries are employees who can prepare documents. 11

Secretary class: Attempt 1 public class Secretary { public int hours() { return 40; // works 40 hours / week } public double pay() { return ; // $50, / year } public int vacationDays() { return 10; // 2 weeks' paid vacation } public String vacationForm() { return "yellow"; // use the yellow form } public String toString() { String result += "Hours: " + hours() + "\n"; result += "Pay: ” + pay() + "\n"; result += "Vacation days: " + vacationDays() + "\n"; result += "Vacation Form: " + vacationForm() + "\n"; return result; } public void prepareDoc(String text) { System.out.println(“Working on Document: " + text); } } 12

Desire for code-sharing prepareDoc is the only unique behavior in Secretary. We'd like to be able to say: // A class to represent secretaries. public class Secretary { public void prepareDoc(String text) { System.out.println(“Work on Document: " + text); } 13

Inheritance  Inheritance: A way to allow a software developer to reuse classes by deriving a new class from an existing one m The existing class is called the parent class, or superclass, or base class m The derived class is called the child class or subclass.  As the name implies, the child inherits characteristics of the parent m The child class inherits every method and every data field defined for the parent class 14

15 Inheritance  Inheritance relationships are often shown graphically in a class diagram, with the arrow pointing to the parent class Inheritance should create an is-a relationship, meaning the child is a more specific version of the parent Animal - weight : int + getWeight() : int Bird + fly() : void - flySpeed : int

16 Inheritance  The child class inherits all methods and data defined for the parent class Animal - weight : int + getWeight() : int Bird - flySpeed : int + fly() : void weight = 120 getWeight() weight = 100 flySpeed = 30 getWeight() fly() an animal object a bird object

17 Deriving Subclasses: Syntax public class extends { } For example: class Animal { // class contents private int weight; public int getWeight() {…} } class Bird extends Animal { private int flySpeed; public void fly() {…}; }

Exercise: Implement Secretary 18

Improved Secretary code // A class to represent secretaries. public class Secretary extends Employee { public void prepareDoc(String text) { System.out.println(“Working on document: " + text); } }  By extending Employee, each Secretary object now: receives methods hours, pay, vacationDays, vacationForm, toString from Employee ’s definition automatically can be treated as an Employee by client code (seen later)  Now we only write the parts unique to each type. 19

20 Outline  Admin and recap  Class inheritance o why and how? o inheritance and object construction

21 Inheritance and Constructor  When constructing an object, Java makes sure that the constructor of the parent is first called  If no parent constructor called, Java automatically inserts super() as the first statement in the constructor of a child class: public class Secretary extends Employee { public Secretary () { // super() is automatically inserted System.out.println(“In Secretary()”); } … }

Example 22 public class Secretary extends Employee { public Secretary() { // super() is automatically inserted System.out.println(“In Secretary()”); } … } public class Employee { public Employee() { System.out.println(“In Employee()”); } … } public static void main(String[] args) { Secretary seth = new Secretary(); } In Employee() In Secretary() Output:

Exercise: Add Name to Employee public class Employee { private String name; public Employee(String name) { this.name = name; } … } 23

Problem with constructors  Now that we've added the constructor to the Employee class, our subclasses do not compile.  The short explanation: Once we write a constructor (that requires parameters) in the superclass, we must now write constructors for our employee subclasses as well.  The long explanation: (next couple slides)

25 The explanation  Constructors aren't inherited.  The Employee subclasses don't inherit the public Employee(String name) constructor.  After defining public Employee(String), Java sees that we have a constructor, and will no longer provide the default Employee constructor.  i.e., public Employee() is not defined unless we define it explicitly  But public Secretary() { // super() is automatically inserted but not defined // in Employee System.out.println(“In Secretary()”); }

26 super and Constructor  If you insert super(…) as the first statement in child’s constructor, Java will not insert the default parent constructor: public class Secretary extends Employee { public Secretary(String name) { super(name); System.out.println(“In Secretary()”); } … } public class Employee { private String name; public Employee(String name) { System.out.println(“In Employee()”); this.name = name; } … }

Example: Picture Type  Raster graphics. Basis for image processing.  Set of values. 2D array of Color objects (pixels).  API.

Exercise: Extending the Picture Type  Although the Picture class is quite useful already, it misses some useful filtering functions such as grayScale, scaling  Goal: create a new type InstaPic with all of the existing methods defined in Picture, with two additional methods: gray and scale 28

Monochrome Luminance  Monochrome luminance. Effective brightness of a color (NTSC formula): Y = 0.299r g b. import java.awt.Color; public class Luminance { public static double lum(Color c) { int r = c.getRed(); int g = c.getGreen(); int b = c.getBlue(); return.299*r +.587*g +.114*b; }

Grayscale Filter mandrill.jpg

Color Compatibility  Q. Which font colors will be most readable with which background colors on computer and cell phone screens?  A. Rule of thumb: difference in luminance should be  128. public static boolean compatible(Color a, Color b) { return Math.abs(lum(a) - lum(b)) >= 128.0; }

Scaling Filter mandrill.jpg (298-by-298)

Image Scaling  Goal. Shrink or enlarge an image to desired size.  Assume uniform strategy to convert from w s -by- h s to w t -by- h t : ? source image (w s -by-h s ) target image (w t -by-h t ) y (x,y) y  hs / ht)y  hs / ht)(x  w s / w t,

Scaling Filter  Scaling filter. Creates two Picture objects and two windows. % java Scale mandrill.jpg mandrill.jpg (298-by-298)

Back to Law Firm: Implementing the Lawyer class: Attempt 1 // A class to represent lawyers. public class Lawyer extends Employee { public void sue() { System.out.println("I'll see you in court!"); } 35

Problem  We want lawyers to inherit most behaviors from employee, but we want to replace parts with new behavior: o Lawyers get an extra week of paid vacation over base vacation (a total of 3). o Lawyers use a pink form when applying for vacation leave. 36

37 Defining Methods in the Child Class: Overriding Methods  A child class can (have the option to) override the definition of an inherited method in favor of its own m that is, a child can redefine a method that it inherits from its parent m the new method must have the same signature as the parent's method, but can have different code in the body  The method invoked is always the one defined in the child class, if the child class refines (overrides) a method

Lawyer class // A class to represent lawyers. public class Lawyer extends Employee { // overrides getVacationDays from Employee class public int vacationDays() { return 15; // 3 weeks vacation } // overrides getVacationForm from Employee class public String vacationForm() { return "pink"; } public void sue() { System.out.println("I'll see you in court!"); } 38

39 Overloading vs. Overriding  Overloading deals with multiple methods in the same class with the same name but different signatures  Overloading lets you define a similar operation in different ways for different data  Overriding deals with two methods, one in a parent class and one in a child class, that have the same signature  Overriding lets you define a similar operation in different ways for different object types

Marketer class – Exercise: Complete the Marketer class. Marketers can advertise and make 20% more than the base ($60,000 total). 40

Marketer class // A class to represent marketers. public class Marketer extends Employee { public void advertise() { System.out.println("Act while supplies last!"); } // override public double pay() { return ; // $60, / year } 41 Problem of design?

A Problem public class Marketer extends Employee { public double pay() { return ; }... } Problem: The Marketer‘s salaries are based on the Employee’s base salary (20% more than base), but the pay code does not reflect this. 42

Changes to Common Behavior  Imagine a company-wide change affecting all employees.  Example: Everyone is given a $10,000 raise due to inflation. The base employee salary is now $60,000. Marketers should now make $72,000.  We must modify our code to reflect this policy change. 43

Modifying the superclass // A class to represent employees in general (20-page manual). public class Employee { public int hours() { return 40; // works 40 hours / week } public double pay() { return ; // $60, / year }... }  Issue: the Marketer subclass is still incorrect. It has overridden pay to return another value.  Requirement: derived behavior is based on base behavior 44

Calling overridden methods Subclasses can call overridden methods with super super. ( ) – Exercise: Modify Marketer to derive pay for marketers from base pay. 45

Improved subclasses public class Marketer extends Employee { public void advertise() { System.out.println("Act now while supplies last!"); } // override and invoke the parent’s version public double pay() { return super.pay() * 1.2; } 46

Exercise: Revise Lawyer to Maintain Consistency 47

Solution public class Lawyer extends Employee { public String vacationForm() { return "pink"; } public int vacationDays() { return super.vacationDays() + 5; } public void sue() { System.out.println("I'll see you in court!"); } 48