Polymorphism
11/09/2015
Hsuan-Tien Lin (林軒田) htlin@csie.ntu.edu.tw
Department of Computer Science
& Information Engineering
National Taiwan University ( 國立台灣大學資訊工程系)
Hsuan-Tien Lin (NTU CSIE) Polymorphism 0/21
Polymorphism: The Motto
One Thing,
Many Shapes...
Hsuan-Tien Lin (NTU CSIE) 1/21
One Variable, Many Values
1 b y t e a ;
2 s w i t c h( 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 interpretationHsuan-Tien Lin (NTU CSIE) 2/21
One Class, Many Instances
1 S t u d e n t s ;
2 i f ( s e q u a l s s t u d e n t 1 )
3 show ( score1 ) ;
4 e l s e i f ( s e q u a l s s t u d e n t 2 )
5 show ( score2 ) ;
6 . . .
7 e l s e i f ( s e q u a l s s t u d e n t 1 0 0 )
8 show ( score100 ) ;
•
better ways?•
mechanism? data abstractionHsuan-Tien Lin (NTU CSIE) 3/21
One Method Name, Many Parameter Lists
1 / / no o v e r l o a d i n g
2 System . o u t . p r i n t S t r i n g ( " abc " ) ;
3 System . o u t . p r i n t I n t ( 3 ) ;
4 System . o u t . p r i n t D o u b l e ( 4 . 0 ) ;
5 / / o v e r l o a d i n g
6 System . o u t . p r i n t ( " abc " ) ;
7 System . o u t . p r i n t ( 3 ) ;
8 System . o u t . p r i n t ( 4 . 0 ) ;
•
mechanism? signature by name + parameter typesHsuan-Tien Lin (NTU CSIE) 4/21
A Twist in Method Overloading
1 / / o v e r l o a d i n g
2 System . o u t . p r i n t ( " abc " ) ;
3 System . o u t . p r i n t ( 3 ) ;
4 System . o u t . p r i n t ( 4 . 0 ) ;
5 / / a t w i s t ( o f course , n o t e x a c t l y workable )
6 S t r i n g ( " abc " ) . p r i n t ( ) ;
7 I n t e g e 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)Hsuan-Tien Lin (NTU CSIE) 5/21
Polymorphic Behavior
•
all cases above: some polymorphic behavior• BUT almost no one calls them real “polymorphism”
Why Not?
Hsuan-Tien Lin (NTU CSIE) 6/21
Polymorphic Behavior on Known Stuff
•
polymorphic behavior ofknown primitive-type variables
•
polymorphic behavior ofknown classes (extended types)
•
polymorphic behavior ofknown parameter types
Hsuan-Tien Lin (NTU CSIE) 7/21
Unknown Stuff: Future Extensions
Backward Compatibility
inheritance hierarchyForward Advance
newly added variables/methods
Hsuan-Tien Lin (NTU CSIE) 8/21
Polymorphism of Instance Content
one
advanced content, many compatible
ways to accessHsuan-Tien Lin (NTU CSIE) 9/21
Polymorphism of Instance References
one
compatible reference, many advanced
contents to point toHsuan-Tien Lin (NTU CSIE) 10/21
Reference Upcast versus Reference Downcast
1 CSIEProfessor c = new CSIEProfessor ( ) ;
2 P r o f e s s o r p = c ;
3 / / P r o f e s s o r p = new CSIEProfessor ( ) ;
Upcast
simple (backward compatibility)
1 CSIEProfessor c = new CSIEProfessor ( ) ;
2 P r o f e s s o r p = c ;
3 CSIEProfessor c2 = ( CSIEProfessor ) p ;
Downcast
need to check whether content fits (forward ad- vance)
need RTTI (run-time type information/identifica- tion) to make downcast work
(where did we see it?)
Hsuan-Tien Lin (NTU CSIE) 11/21
Content/Reference Polymorphism: Summary
backward compatibility handled
forward advance: only via downcast (RTTI)
simpler mechanism for forward advance?
Hsuan-Tien Lin (NTU CSIE) 12/21
Our Needs in Forward Advance
•
new instance variables for advanced state•
new instance methods to manipulate new variables•
give new meanings to existing instance variables•
give new meanings to existing instance methods•
write an “updated but compatible” version of existing methodHsuan-Tien Lin (NTU CSIE) 13/21
Method Overriding (Virtual Function)
calls the updated version through an upper-level reference
Hsuan-Tien Lin (NTU CSIE) 14/21
Method Invocation Polymorphism
one method (via upper-level refer- ence),
many possible extended behaviors
Hsuan-Tien Lin (NTU CSIE) 15/21
Object.equals
1 c l a s s C o o r d i n a t e extends O b j e c t {
2 double x , y ;
3
4 boolean e q u a l s ( O b j e c t o ) {
5 i f ( o i n s t a n c e o f C o o r d i n a t e ) {
6 C o o r d i n a t e c = ( C o o r d i n a t e ) 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 }
Hsuan-Tien Lin (NTU CSIE) 16/21
Object.toString
1 C o o r d i n a t e c = new C o o r d i n a t e ( ) ;
2 System . o u t . p r i n t l n ( c ) ;
Hsuan-Tien Lin (NTU CSIE) 17/21
Twist Revisited
1 System . o u t . p r i n t ( " abc " ) ;
2 System . o u t . p r i n t ( 3 ) ;
3 System . o u t . p r i n t ( 4 . 0 ) ;
4 / / a t w i s t ( o f course , n o t e x a c t l y workable )
5 S t r i n g ( " abc " ) . p r i n t ( ) ;
6 I n t e g e 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 internally calling the updated Object.print() (actually, Object.toString()) without overloading
Hsuan-Tien Lin (NTU CSIE) 18/21
V-Table: A Possible Mechanism of Method Overriding
again, not the only mechanism
Hsuan-Tien Lin (NTU CSIE) 19/21
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.ClassHsuan-Tien Lin (NTU CSIE) 20/21
Summary on Polymorphism
•
one thing, many shapes•
important in strongly-typed platforms with inheritance•
view from content: one advanced content with many compatible access•
view from reference: one compatible reference can point to many advanced contents•
view from method: one compatible method “contract”, many different method “realization”Hsuan-Tien Lin (NTU CSIE) 21/21