polymorphism - 國立臺灣大學htlin/course/oop13... · polymorphism hsuan-tien lin department of...
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/1.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/2.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/3.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/4.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/5.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/6.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/7.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/8.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/9.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/10.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/11.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/12.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/13.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/14.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/15.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/16.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/17.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/18.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/19.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/20.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/21.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/22.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/23.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/24.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/25.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051913/6003d09887915f00cd5f2a15/html5/thumbnails/26.jpg)
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