polymorphism - 國立臺灣大學htlin/course/oop13... · polymorphism hsuan-tien lin department of...

26
Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 0 / 26

Upload: others

Post on 22-Sep-2020

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Polymorphism

Hsuan-Tien Lin

Department of CSIE, NTU

OOP Class, April 8, 2013

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 0 / 26

Page 2: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Polymorphism: The Motto

One Thing, Many Shapes......

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 1 / 26

Page 3: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

One Variable, Many Values

1 char a ;2 swi tch ( a ) {3 case 1:4 r e t u r n 1 ∗ 1;5 case 2:6 r e t u r n 2 ∗ 2;7 case 3:8 r e t u r n 3 ∗ 3;9 . . .

10 case 127:11 r e t u r n 127 ∗ 127;12 }

better ways?mechanism? raw memory interpretation

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 2 / 26

Page 4: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

One Class, Many Instances

1 Student s ;2 i f ( s equals student1 )3 show ( score1 ) ;4 else i f ( s equals student2 )5 show ( score2 ) ;6 . . .7 else i f ( s equals student100 )8 show ( score100 ) ;

better ways?mechanism? data abstraction

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 3 / 26

Page 5: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

One Method Name, Many Parameter Lists

1 / / no over load ing2 System . out . p r i n t S t r i n g ( " abc " ) ;3 System . out . p r i n t I n t ( 3 ) ;4 System . out . p r in tDoub le ( 4 . 0 ) ;5 / / over load ing6 System . out . p r i n t ( " abc " ) ;7 System . out . p r i n t ( 3 ) ;8 System . out . p r i n t ( 4 . 0 ) ;

mechanism? signature by name + parameter types

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 4 / 26

Page 6: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

A Twist in Method Overloading

1 / / over load ing2 System . out . p r i n t ( " abc " ) ;3 System . out . p r i n t ( 3 ) ;4 System . out . p r i n t ( 4 . 0 ) ;5 / / a t w i s t ( o f course , not exac t l y workable6 S t r i n g ( " abc " ) . p r i n t ( ) ;7 I n t ege r ( 3 ) . p r i n t ( ) ;8 Double ( 4 . 0 ) . p r i n t ( ) ;

mechanism? just write print() for every class (we’ll see)

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 5 / 26

Page 7: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Polymorphic Behavior

all cases above: some polymorphic behaviorBUT almost no one calls them real “polymorphism”

Why Not?

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 6 / 26

Page 8: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Polymorphic Behavior on Known Stuff

polymorphic behavior of known primitive-type variablespolymorphic behavior of known classes (extended types)polymorphic behavior of known parameter types

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 7 / 26

Page 9: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Unknown Stuff: Future Extensions

Backward Compatibilityinheritance hierarchy

Forward Advancenewly added variables/methods

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 8 / 26

Page 10: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Polymorphism of Instance Content

one advanced content, many compatible ways toaccess

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 9 / 26

Page 11: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Polymorphism of Instance References

one compatible reference, many advanced contentsto point to

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 10 / 26

Page 12: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Reference Upcast versus Reference Downcast

1 CSIEProfessor c = new CSIEProfessor ( ) ;2 Professor p = c ;3 / / Professor p = new CSIEProfessor ( ) ;

Upcastsimple (backward compatibility)

1 CSIEProfessor c = new CSIEProfessor ( ) ;2 Professor p = c ;3 CSIEProfessor c2 = ( CSIEProfessor ) p ;

Downcastneed to check whether content fits (forward advance)

need RTTI (run-time type information/identification) to makedowncast work (where did we see it?)

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 11 / 26

Page 13: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Content/Reference Polymorphism: Summary

backward compatibility handled

forward advance: only via downcast (RTTI)

simpler mechanism for forward advance?

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 12 / 26

Page 14: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Our Needs in Forward Advance

new instance variables for advanced statenew instance methods to manipulate new variablesgive new meanings to existing instance variablesgive new meanings to existing instance methodswrite an “updated but compatible” version of existing method

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 13 / 26

Page 15: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Method Overriding (Virtual Function)

calls the updated version through anupper-level reference

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 14 / 26

Page 16: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Method Invocation Polymorphism

one method (via upper-level reference),many possible extended behaviors

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 15 / 26

Page 17: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Object.equals

1 c lass Coordinate extends Object {2 double x , y ;3

4 bool equals ( Object o ) {5 i f ( o ins tanceo f Coordinate ) {6 Coordinate c = ( Coordinate ) o ;7 r e t u r n ( c . x == t h i s . x && c . y == t h i s . y ) ;8 }9 r e t u r n f a l s e ;

10 }11 }

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 16 / 26

Page 18: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Object.toString

1 Coordinate c = new Coordinate ( ) ;2 System . out . p r i n t l n ( c ) ;

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 17 / 26

Page 19: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Twist Revisited

1 System . out . p r i n t ( " abc " ) ;2 System . out . p r i n t ( 3 ) ;3 System . out . p r i n t ( 4 . 0 ) ;4 / / a t w i s t ( o f course , not exac t l y workable5 S t r i n g ( " abc " ) . p r i n t ( ) ;6 I n t ege r ( 3 ) . p r i n t ( ) ;7 Double ( 4 . 0 ) . p r i n t ( ) ;

System.out.print(Object) can have polymorphic behavior by internallycalling the updated Object.print() (actually, Object.toString()) withoutoverloading

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 18 / 26

Page 20: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

V-Table: A Possible Mechanism of Method Overriding

again, not the only mechanism

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 19 / 26

Page 21: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

RTTI revisited

all we need is a link to the class area (stores name, vtable, etc.)where is the link? java.lang.Object

how to access? Object.getClass()

each area is an instance of java.lang.Class

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 20 / 26

Page 22: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Summary on Polymorphism

one thing, many shapesimportant in strongly-typed platforms with inheritanceview from content: one advanced content with many compatibleaccessview from reference: one compatible reference can point to manyadvanced contentsview from method: one compatible method “contract”, manydifferent method “realization”

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 21 / 26

Page 23: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Abstract Class (1/3)

1 p u b l i c c lass Professor ( ) {2 p u b l i c vo id teach ( ) {3 System . out . p r i n t l n ( " not sure o f what to teach ! " ) ;4 }5 }6 c lass CSIEProfessor extends Professor {7 p r i v a t e vo id teach_oop ( ) { /∗ l a l a l a ∗ / }8 p u b l i c vo id teach ( ) { teach_oop ( ) ; }9 }

10 c lass EEProfessor extends Professor {11 p r i v a t e vo id teach_elec ( ) { /∗ l u l u l u ∗ / }12 p u b l i c vo id teach ( ) { teach_elec ( ) ; }13 }14 / / i n o ther places15 Professor p = new Professor ( ) ;16 p . teach ( ) ; / / not sure o f what to teach !

teach is a place-holder in Professor, expected to be overriddenallows constructing a professor without any teaching ability!—absurd in some senseH.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 22 / 26

Page 24: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Abstract Class (2/3)

1 p u b l i c abs t r ac t c lass Professor ( ) {2 p u b l i c abs t r ac t vo id teach ( ) ;3 }4 c lass CSIEProfessor extends Professor {5 p r i v a t e vo id teach_oop ( ) { /∗ l a l a l a ∗ / }6 p u b l i c vo id teach ( ) { teach_oop ( ) ; }7 }8 c lass EEProfessor extends Professor {9 p r i v a t e vo id teach_elec ( ) { /∗ l u l u l u ∗ / }

10 p u b l i c vo id teach ( ) { teach_elec ( ) ; }11 }12 / / i n o ther places13 Professor p = new Professor ( ) ; / / hahaha ! !14 Professor p = new CSIEProfessor ( ) ; / / okay

teach is a place-holder in Professor, expected to be overriddenbut cannot construct a pure Professor instance anymore!

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 23 / 26

Page 25: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Key Point: Abstract Class

a contract for future extensions

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 25 / 26

Page 26: Polymorphism - 國立臺灣大學htlin/course/oop13... · Polymorphism Hsuan-Tien Lin Department of CSIE, NTU OOP Class, April 8, 2013 H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013

Final Words

static final variable: accessed through class, and assignedonce (in declaration or static constructor)final instance variable: accessed through instance, andassigned once (in declaration or every instance constructor)final instance method: cannot be overriden (≈ assigned once)static final method: cannot be hidden by inheritance (≈assigned once)final class: cannot be inherited (and hence all methods final)

H.-T. Lin (NTU CSIE) Polymorphism OOP 04/08/2013 26 / 26