Topic 6 Inheritance and Inheritance and Polymorphism, Study notes of Computer science

Answer: Inheritance. “ “Inheritance is new code that reuses old code Inheritance is new code that reuses old code. Polymorphism is old code that reuses new ...

Typology: Study notes

2021/2022

Uploaded on 09/27/2022

astur
astur 🇬🇧

4.3

(7)

227 documents

1 / 12

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Topic
6
Topic
6
Inheritance and
Inheritance
and
Polymorphism
"Question: What is the object oriented way of
getting rich?
A
nswer: Inheritance.
Inheritance is new code that reuses old code
Inheritance
is
new
code
that
reuses
old
code
.
Polymorphism is old code that reuses new code.”
CS 307 Fundamentals of
Computer Science Inheritance and Polymorphism 1
Outline
Explanation of inheritance.
Using inheritance to create a SortedIntList.
Explanation of polymorphism.
Using polymorphism to make a more generic
Using
polymorphism
to
make
a
more
generic
List class.
CS 307 Fundamentals of
Computer Science Inheritance and Polymorphism 2
CS 307 Fundamentals of
Computer Science Inheritance and Polymorphism 3
Main Tenets of OO Programming
Encapsulation
abs
tr
ac
ti
o
n
,
inf
o
rm
a
ti
o
n hi
d
in
g
abs ac o , o a o d g
Inheritance
code reuse specialization
"
New code using old
code
reuse
,
specialization
New
code
using
old
code."
Polymorphism
Polymorphism
do X for a collection of various types of objects,
where X is
different
depending on the type of
where
X
is
different
depending
on
the
type
of
object
"
Old code using new code
"
CS 307 Fundamentals of
Computer Science Inheritance and Polymorphism 4
Old
code
using
new
code
.
pf3
pf4
pf5
pf8
pf9
pfa

Partial preview of the text

Download Topic 6 Inheritance and Inheritance and Polymorphism and more Study notes Computer science in PDF only on Docsity!

Topic

Topic

Inheritance andInheritance and

Polymorphism

"Question: What is the object oriented way ofgetting rich?Answer: Inheritance.““Inheritance is new code that reuses old code

Inheritance is new code that reuses old code.

Polymorphism is old code that reuses new code.”

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

1

Outline

Explanation of inheritance.

Using inheritance to create a SortedIntList.

Explanation of polymorphism.

Using polymorphism to make a more genericUsing

polymorphism to make a more generic

List class.

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

Explanation of InheritanceExplanation

of Inheritance

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

3

Main Tenets of OO Programming

Encapsulation

  • abstraction, information hiding

abs

ac o ,

o

a o

d

g

Inheritance

code reuse specialization "New code using old

  • code reuse, specialization

New code using old

code."

Polymorphism

Polymorphism

  • do X for a collection of various types of objects,

where X is

different

depending on the type of

where X is

different

depending on the type of

object

  • "Old code using new code "

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

Old

code using new code.

Things and Relationships

Obj

t

i

t d

i

l

d

t

Object oriented programming leads to programs that are models

ti

d l

f thi

i

th

l

ld

  • sometimes models of things in the real world– sometimes models of contrived or imaginary things

There are many types of relationships between

There are many types of relationships between the things in the models

chess piece has a position

  • chess piece has a position– chess piece has a color

chess piece moves (changes position)

  • chess piece moves (changes position)– chess piece is taken– a rook is a type of chess pieceCS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

5

a

rook is a type of chess piece

The “has-A” Relationship

Objects are often made up of many parts or have sub data.

  • chess piece: position, color– die: result, number of sides

This “has-a” relationship is modeled by composition

p

  • the instance variables or fields internal to objects

Encapsulation captures this conceptEncapsulation

captures this concept

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

The “is-a” relationship

Another type of relationship found in the real world

  • a rook is a chess piece– a queen is a chess piece– a student is a person– a faculty member is a person– an undergraduate student is a student

“is-a” usually denotes some form of

is a

usually denotes some form of

specialization

it is not the same as

“has-a”

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

7

it

is not the same as

has-a

Inheritance

The “is-a” relationship, and the specialization that accompanies it, is modeled in objectoriented languages via

inheritance

Classes can inherit from other classes

  • base inheritance in a program on the real world

things being modeled

  • does “an A is a B” make sense? Is it logical?

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

Inheritance in Java

If

l

h

d

d

t i

l d

th

If a class header does not include the extends clause the class extends the Obj

t

class by default

Obj

ect

class

by default

public class Die

i

ll

l

  • Object

i

s an ancestor to all classes

  • it is the only class that does not extend some

th

l

other class

A class extends exactly one other class

  • extending two or more classes is

multiple

inheritance.

Java does not support this directly,

th

it

I t

f

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

13

rather it uses

I

nterfaces

.

Overriding methods

any method that is not

final

may be

overridden by a descendant class

y

same signature as method in ancestor

may not reduce visibility

may not reduce visibility

may use the original method if simply want to

dd

b h

i

t

i ti

add more behavior to existing

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

Attendance Question 2

What is output when the

main

method is run?

public class Foo{

public static void

main(String[] args){

Foo f1 = new Foo();System.out.println( f1.toString() );

}

}}

A.

B

null

B

null

C. Unknown until code is actually run.D. No output due to a syntax error.E. No output due to a runtime error.

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

15

p

Shape Classes

D

l

l

ll d

Declare a class called

ClosedShape

  • assume all shapes have x and y coordinates– override

Object

's version of

toString

Possible sub classes of

ClosedShape

  • Rectangle– Circle– Ellipse– Square

Square

Possible hierarchy

ClosedShape

<

Rectangle

<

Square

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

ClosedShape

<

Rectangle

<-

Square

A ClosedShape class

p

ublic

class

ClosedShape

p

p

{

private

double

myX;

private

double

myY;

public

ClosedShape()

public

ClosedShape()

{

this(0,0);

}

public

ClosedShape

(double

x,

double

y)

{

myX

x;

{

myX

=

x;

myY

=

y;

}

bli

i

i

()

public

String

toString()

{

return

"x:

"

getX()

"

y:

"

getY();

}

public

double

getX(){

return

myX;

}

p

g

y

public

double

getY(){

return

myY;

}

}//

Other

methods

not

shown

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

17

Constructors



Constructors handle initialization of objects



Constructors handle initialization of objects



When creating an object with one or more ancestors (everytype except Object) a chain of constructor calls takes place

yp

p

j

)

p



The reserved word

super

may be used in a constructor to

call a one of the parent's constructors

t b

fi

t li

f

t

t

  • must be first line of constructor



if no parent constructor is explicitly called the default, 0parameter constructor of the parent is calledp

p

  • if no default constructor exists a syntax error results



If a parent constructor is called another constructor in thesame class ma

no be called

same class may no be called

  • no

super();this();

allowed. One or the other, not both

  • good place for an initialization method CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

A Rectangle Constructor

public class Rectangle extends ClosedShape{

private double myWidth;private double myHeight;public Rectangle( double x, double y,

double width, double height )

g

{

super(x,y);// calls the 2 double constructor in// ClosedShape

p

myWidth = width;myHeight = height;

}

// other methods not shown

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

19

}

A Rectangle Class

public

class

Rectangle

extends

ClosedShape

{

private

double

myWidth;

private

double

myHeight;

public

Rectangle()

{

this(

0);

{

this(0, 0);

} public

Rectangle(double

width,

double

height)

{

myWidth

=

width;

myHeight

=

height;

} public

Rectangle(double

x,

double

y,

double

width

double

height)

double

width, double

height)

{

super(x,

y);

myWidth

=

width;

myHeight

=

height;

} public

String

toString()

{

return

super.toString()

"

width

"

myWidth

"

height

"

myHeight;

}

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

}

}

Access Modifiers and

InheritanceInheritance



public

  • accessible to all classes

accessible to all classes



private

  • accessible only within that class. Hidden from all sub

y

classes.



protected

ibl

b

l

ithi

th

k

d

ll

  • accessible by classes within the same

p

ackage

and all

descendant classes



Instance variables

should

be private

p



protected methods are used to allow descendant classes to modify instance variables in ways other

l

't

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

25

classes can't

Why private Vars and not protected?

In general it is good practice to make instance variables privateinstance variables private

  • hide them from your descendants

if

thi k d

d

t

ill

d t

  • if you think descendants will need to access

them or modify them provide protected methodsto do thisto do this

Why?

Consider the following example

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

Required update

public class GamePiece{

private Board myBoard;private Position myPos;private Position myPos;// whenever my position changes I must

y p

g

// update the board so it knows about the changeprotected void alterPos( Position newPos ){

Position oldPos = myPos;myPos = newPos;myPos

newPos;

myBoard.update( oldPos, myPos );

}

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

27

Creating a SortedIntListCreating

a SortedIntList

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

A New Class

Assume we want to have a list of ints, but that the ints must always be maintained inascending order

[-7, 12, 37, 212, 212, 313, 313, 500]sortedList.get(0)

returns the min

sortedList.get( list.size() – 1 )

returns the max

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

29

Implementing

SortedIntList

Do we have to write a whole new class?

Assume we have an

IntList

class.

Which of the following methods would have to be changed?to be c a ged

add(int value)int get(int location)int get(int location)String toString()int size()int size()int remove(int location)

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

Overriding the

add

Method

First attempt

Problem?

solving with

protected

What

protected

really means

What

protected

really means

solving with insert method

double edged sort

  • double edged sort

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

31

Problems

What about this method?

void

insert(int

location,

int

val)

What about this method?

void

insertAll(int

location

void

insertAll(int

location,

IntList

otherList)

SortedIntList

is not the cleanest

SortedIntList

is

not the cleanest

application of inheritance.

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

What’s the Output?

ClosedShape s = new ClosedShape(1,2);System.out.println( s.toString() );s

ne

Rectangle(

3

4

s = new Rectangle(2, 3, 4, 5);System.out.println( s.toString() );s = new Circle(4, 5, 10);s

new Circle(4, 5, 10);

System.out.println( s.toString() );s = new ClosedShape();System.out.println( s.toString() );

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

37

Method LookUp



To determine if a method is legal the compiler looks in theclass based on the declared type

  • if it finds it great, if not go to the super class and look there

if it finds it great, if not go to the super class and look there

  • continue until the method is found, or the Object class is reached

and the method was never found. (Compile error)



To determine which method is actually executed the runTo

determine which method is actually executed the run

time system

  • starts with the actual run time class of the object that is calling the

methodmethod

  • search the class for that method– if found, execute it, otherwise go to the super class and keep looking– repeat until a version is found

repeat until a version is found



Is it possible the runtime system won’t find a method?

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

38

Attendance Question 4

What is output by theWhat is output by thecode to the right whenrun?

public

class

Animal{

public

String

bt(){

return

"!";

}

}

A.

!!live

B.

!eggegg

public

class

Mammal

extends

Animal{

public

String

bt(){

return

"live";

}

}

gg gg

C.

!egglive

D

public

class

Platypus

extends

Mammal{

public

String

bt(){

return

"egg";}

}

D

E.

eggegglive

} Animal

a

=

new

Animal();

Animal

a

=

new

Platypus();

Mammal

m

=

new

Platypus();

System.out.print(

a1.bt()

);

System.out.print(

a2.bt()

);

System.out.print(

m1.bt()

);

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

39

Why Bother?

I h

it

ll

t

d l

Inheritance allows programs to model relationships in the real world

if th

f ll

th

d l it

b

i

  • if the program follows the model it may be easier

to write

Inheritance allows code reuse

Inheritance allows code reuse

  • complete programs faster (especially large

programs)programs)

Polymorphism allows code reuse in another way (We will explore this next time)

y (

p

Inheritance and polymorphism allow programmers to create

g

eneric algorithms

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

40

p

g

g

g

Genericity

O

f th

l

f OOP i

th

t

f

One of the goals of OOP is the support of code reuse to allow more efficient programdevelopmentdevelopment

If a algorithm is essentially the same, but the code would vary based on the data typecode would vary based on the data typegenericity allows only a single version of thatcode to existcode to exist

  • some languages support genericity via

templates

in Java, there are 2 ways of doing thisin

Java, there are 2 ways of doing this

  • polymorphism and the inheritance requirement• generics

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

41

the createASet example

public Object[] createASet(Object[] items){

/*pre: items != null, no elementsof items = nullpost: return an array of Objectspost:

return an array

of Objects

that represents a set of the elementsin items. (all duplicates removed)

/

*/

{5, 1, 2, 3, 2, 3, 1, 5} -> {5, 1, 2, 3} CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

createASet examples

String[]

sList

=

{"Texas",

"texas",

"Texas",

"Texas",

"UT",

"texas"};

Object[]

sSet

=

createASet(sList);

for(int

i

=

0;

i

<

sSet.length;

i++)

System.out.println(

sSet[i]

);

Object[]

list

=

{"Hi",

1,

4,

3.3,

true,

new

ArrayList(),

"Hi",

3.3,

4};

Object[]

set

createASet(list);

Object[]

set

=

createASet(list);

for(int

i

=

0;

i

<

set.length;

i++)

System.out.println(

set[i]

);

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism

43

A Generic List ClassA

Generic List Class

CS 307 Fundamentals ofComputer Science

Inheritance and Polymorphism