Inheritance and OOP: Inheritance and OOP Chapter 11
Chapter Contents: Chapter Contents Chapter Objectives
11.1 Introductory Example: A Trip to the Aviary
11.2 Inheritance and Polymorphism
11.3 Example: Geological Classification
11.4 Example: An O-O Payroll Program
11.5 Graphical/Internet Java: A Function Plotter
Chapter Objectives: Chapter Objectives Learn how classes are designed and built
Learn about inheritance and polymorphism
Illustrate the power of inheritance and polymorphism with case studies
Use OOD to develop a function-plotting GUI application
Objects: Objects Organized into groups with similar characteristics
they are said to be related by a common characteristic
Object-Oriented programming seeks to provide mechanisms for modeling these relationships
this is where the Java word extends is used
11.1 Intro Example: A Trip to the Aviary: 11.1 Intro Example: A Trip to the Aviary Consider a collection of birds which have different properties
name
color (some of the same name are of different colors)
they eat different things
they make different noises
some make multiple kinds of sounds We seek a program to simulate this collection
Design Sketch: Design Sketch Key is to design a Bird class hierarchy.
Strategy
design classes for objects
identify characteristics classes have in common
design superclasses to store common characteristics
Hierarchy: Hierarchy Bird
call: ? color:? food:? movement:? WalkingBird
call: ? color:? food:? movement:walked FlyingBird
call: ? color:? food:? movement:flew Goose
call: honk color: gray food: bugs Ostrich
call: neek-neek color: brown food: grass Parrot
call: Squawk color:? food: fruit Owl
call:? color:? food:mice TalkingParrot . . .
Coding: Coding Note Bird class, Figure 11.1
Attributes common to all birds
color
food
movement
Features of Bird Class: Features of Bird Class Note attribute missing but getCall() method present
myCall varies in random fashion for different kinds of birds
getCall() is an abstract method –no definition in the Bird class for the method
Note toString() method invokes getCall() even though not defined
classes which extend Bird will so provide
Subclasses: Subclasses // FlyingBird provides subclass of Bird
abstract class FlyingBird extends Bird
{
public FlyingBird (String color,
String food) { super (color, food, 'flying'); }
}
Subclasses: Subclasses // Parrot provides subclass of FlyingBird
class Parrot extends FlyingBird
{
public Parrot(String color) { super(color, 'fruit'); }
public String getCall() { return 'Squawk!'; }
}
Aviary Class: Aviary Class Note source code, Figure 11.1
Array of Bird objects
Initialized as individual subclass objects Ostrich, Goose, Parrot, etc.
Random element of array chosen
assigned to Bird handle, aBird
when aBird printed, toString method prints specifics unique to the subclass type of bird chosen
11.2 Inheritance and Polymorphism: 11.2 Inheritance and Polymorphism Declaring subclasses class B extends A { . . . }
means class B is a specialization of class A
the 'is a' relationship exists
a B object is an A object Superclass Subclass
Inheritance: Inheritance Other names:
superclass also called 'parent class'
subclass also called 'child class'
These names help understand concept of inheritance
Child class inherits characteristics of parent class
attributes
methods
Inheritance: Inheritance When we say … class TalkingParrot extends Parrot
{ … }
then a TalkingParrot object inherits all Parrot attributes
(which, in turn, inherits both FlyingBird and Bird attributes)
In general, descendant classes inherit the attributes of ancestor classes
Results of Inheritance: Results of Inheritance Used to eliminate redundant coding
When we send toString() message to a Goose or Parrot or TalkingParrot object
none of these classes implement the toString() method
but … they inherit it from Bird
toString() need not be redefined in the subclasses
Handles and extends: Handles and extends Consider the declaration: Bird abird = new Goose();
this is legal
a Goose object 'is a' Bird object
Contrast Goose aGoose = new Bird('gray', 'walking', 'bugs');
this is NOT legal
A Bird object is not necessarily a Goose object
extends is unidirectional.
A extends B does NOT imply that B extends A
Polymorphism: Polymorphism Consider Bird bird1 = new Parrot('green'),
bird2 = new TalkingParrot('red',phrases);
A call to .getFood() uses the method from class Bird
Contrast invocation of .getCall()
uses methods specific to the classes Parrot and TalkingParrot
When a method is called
system looks for local method of that name
otherwise it looks for an inherited method
Polymorphism: Polymorphism A method defined in a class is inherited by all descendants of that class
When a message is sent to an object to use method m(), any messages that m() sends will also be sent to the same object
If the object receiving a message does not have a definition of the method requested, an inherited definition is invoked
If the object receiving a message has a definition of the requested method, that definition is invoked Principles:
Java Hierarchy: Java Hierarchy The classes we have been using throughout the whole text are organized into a hierarchy
Object is the common ancestor
every class inherits characteristics of this class
for example: clone(), equals(), getClass() and toString()
Every class must fit within the Java class hierarchy
Object-Orient Design (OOD): Object-Orient Design (OOD) Identify the problem's objects
if an object cannot be represented by an existing type, design a class to do so
if two or more classes share common attributes, design a hierarchy
Identify the operations If an operation cannot be performed with an existing operator or method
define a method to do so
store the method within a class hierarchy to enable inheritance
Organize the objects and operations into an algorithm
O-O Design Issues: O-O Design Issues Using the extends relationship: A class B should extend another class A if and only if
B 'is a' specialized version of A and …
All messages that can be sent to A can be appropriately sent to B
Abstract Methods and Classes: Abstract Methods and Classes Define a 'generic method' within the class to provide a default behavior
subclasses override it as necessary
Declare the method within the class as abstract
leave it up to the subclasses Suppose we need to be able to send a message to a class but there is no clear way to define the corresponding method in that class.
Solutions:
Attribute Variables vs. Methods: Attribute Variables vs. Methods
If an attribute value can be stored in a variable and retrieved in a method …
Do so in such a way as to exploit inheritance and avoid redundant coding. Should we represent a class attribute using an attribute variable and accessor method or only a method?
Principle:
Initializing Inherited Attributes: Initializing Inherited Attributes The super() method can only be invoked by another constructor method
It must be the first statement in that method
inherited attribute variables must be initialized before any non inherited attribute variables How can a child class constructor initialize the attribute variables it inherits from its parent class … it is not permitted to access directly the private attribute variables ??? Rules for invoking a constructor in a parent class:
Accessing Private Information from an Ancestor Class: Accessing Private Information from an Ancestor Class When the ancestor class declares an attribute as private
both users and descendents of the class are prevented from accessing the attribute
Java provides the protected modifier
users of the class are prevented
descendents of the class are allowed to access the attribute
Invoking an Inherited Method of the Same Name: Invoking an Inherited Method of the Same Name We know that an inherited method can be overridden by another method of the same name
most local (overriding) method takes precedence
Occasionally we wish to call the inherited method
If B extends A and both have a method m()
The m() method for A can be called from inside B
Use the syntax super.m()
11.3 Example: Geological Classification: 11.3 Example: Geological Classification Problem: rocks classified according to nature of origin
Sedimentary
Igneous
Metamorphic
We seek a program that given the name of a rock, displays a simple geological classification
Objects: Objects
Strategy: Strategy Create a class for each kind of rock
Note that classification is a characteristic of rocks
represent classification with a String attribute
supply a getClassification() method
Summarize relationships with class hierarchy diagram
Rock Class Hierarchy: Rock Class Hierarchy
Operations: Operations At the very least, each class should have:
A constructor
Accessor methods for class attributes
A toString() method to facilitate output
Also:
getDescription() method in each class
Attribute variable and accessor for which of the three categories
Coding: Coding Class declarations, Figures 11.12 through 11.16
Algorithm
Prompt user for name of rock
Read name into rockString
Build instance of class whose name is stored in rockString
Display result of sending that object the getDescription() message
Coding: Coding Note the program did not use if-else-if to determine which class to use based on input
Instead it used Class class aclass = (Rock) Class.forName(rockString).newInstance(); Main program, Figure 11.1 creates an actual instance of the class and reference to it
Constructing an Object from a String: Constructing an Object from a String Returns instance of class whose name stored in StringVariable
Created using default constructor of that class
newInstance returns that instance as an Object
It must be cast into appropriate type (usually nearest ancestor) Form:
class.forName(StringVariable).newInstance()
Where: StringVariable refers to a String containing the name of a class
Purpose:
11.4 Example: An O-O Payroll Program: 11.4 Example: An O-O Payroll Program Consider a program to generate monthly paychecks for employees.
Includes different kinds of workers, paid different ways
managers andamp; programmers, salary
secretaries andamp; consultants, hourly
Program should read sequence of employees from file, compute pay, print paycheck
Objects: Objects
Analysis: Analysis Common attributes
salary for managers, programmers
hours and hourly wage for secretaries and consultants
name, id, pay, etc. for all employees
Suggests superclass of Employee, subclasses of:
Salaried employee
manager
programmer Hourly employee
Consultant
secretary
Hierarchy: Hierarchy
Operations: Operations
File Format: File Format First line contains number of employees to be read from file
Subsequent lines contain info in employee records
note that different kinds of records contain different kinds of attributes
salaried employee records have salary
hourly employee records have both hours and wages
Algorithm: Algorithm Read the sequence of employee records from input file into employee array
For each index i of employee
build a paycheck for employee[i]
output that paycheck
Note class declarations, Figures 11.18 through 11.23, PayrollGenerator program, Figure 11.23
Program Expansion: Program Expansion If company hires an employee of a new type (say janitor)
build a Janitor class that extends SalariedEmployee or HourlyEmployee
Add the janitor data to the file
Note the simplicity of the expansion
no other modifications necessary to the program
11.5 Graphical/Internet Java:A Function Plotter: 11.5 Graphical/Internet Java: A Function Plotter We seek a program for use in a mathematics class
plots the graph of a function
helps visualize function behavior
Program allows user to:
choose a function to be plotted
specify range of values
Program should be easily expandable for including new functions
Behavior: Behavior Function Plotter Function X max 4.0 Y max 4.0 X min 4.0 Y min 4.0 Colors (Clear)
Hierarchies: Hierarchies FunctionPanel will extend CartesianPanel
CartesianPanel already extends JPanel
Make the functions we will graph to be objects
build a class to represent each
this makes future expansion easily done
take advantage of polymorphism
Polymorphism: Polymorphism Each function class has a polymorphic valueAt() method
given an x-value, returns corresponding y-value for that function
Function myFunction = (Function)Class.forName (functionName).newInstance(); . . . y = myFunction.valueAt(x);
Coding: Coding Parent class Function, source code Figure 11.25
Subclasses for different functions, source code Figures 11.26 through 11.29
Class ColoredFunction, source code Figure 11.30
uses a wrapper class that encapsulates Function and Color into a single class
FunctionPanel Class: FunctionPanel Class Its only attribute variable is the Function it draws (see Figure 11.31)
Methods
constructor
accessor
mutator
clear() to erase function
the paintComponent() to draw the function
The actionPerformed() Method: The actionPerformed() Method JButton, JComboBox, etc are components that fire ActionEvents
must implement ActionListener interface
also define actionPerformed() method
Use instanceof operator
determines which action user performed
Figure 11.33 shows coding