• 沒有找到結果。

Polymorphism 11/09/2015 Hsuan-Tien Lin (

N/A
N/A
Protected

Academic year: 2022

Share "Polymorphism 11/09/2015 Hsuan-Tien Lin ("

Copied!
22
0
0

加載中.... (立即查看全文)

全文

(1)

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

(2)

Polymorphism: The Motto

One Thing,

Many Shapes...

Hsuan-Tien Lin (NTU CSIE) 1/21

(3)

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 interpretation

Hsuan-Tien Lin (NTU CSIE) 2/21

(4)

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 abstraction

Hsuan-Tien Lin (NTU CSIE) 3/21

(5)

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 types

Hsuan-Tien Lin (NTU CSIE) 4/21

(6)

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

(7)

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

(8)

Polymorphic Behavior on Known Stuff

polymorphic behavior of

known primitive-type variables

polymorphic behavior of

known classes (extended types)

polymorphic behavior of

known parameter types

Hsuan-Tien Lin (NTU CSIE) 7/21

(9)

Unknown Stuff: Future Extensions

Backward Compatibility

inheritance hierarchy

Forward Advance

newly added variables/methods

Hsuan-Tien Lin (NTU CSIE) 8/21

(10)

Polymorphism of Instance Content

one

advanced content, many compatible

ways to access

Hsuan-Tien Lin (NTU CSIE) 9/21

(11)

Polymorphism of Instance References

one

compatible reference, many advanced

contents to point to

Hsuan-Tien Lin (NTU CSIE) 10/21

(12)

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

(13)

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

(14)

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 method

Hsuan-Tien Lin (NTU CSIE) 13/21

(15)

Method Overriding (Virtual Function)

calls the updated version through an upper-level reference

Hsuan-Tien Lin (NTU CSIE) 14/21

(16)

Method Invocation Polymorphism

one method (via upper-level refer- ence),

many possible extended behaviors

Hsuan-Tien Lin (NTU CSIE) 15/21

(17)

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

(18)

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

(19)

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

(20)

V-Table: A Possible Mechanism of Method Overriding

again, not the only mechanism

Hsuan-Tien Lin (NTU CSIE) 19/21

(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.Class

Hsuan-Tien Lin (NTU CSIE) 20/21

(22)

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

參考文獻

相關文件

• check type information very strictly by compiler (as opposed to single-object polymorphism): ensure type safety in JVM. Note: type information erased

One way to select a procedure to accelerate convergence is to choose a method whose associated matrix has minimal spectral radius....

•  Flux ratios and gravitational imaging can probe the subhalo mass function down to 1e7 solar masses. and thus help rule out (or

One way to select a procedure to accelerate convergence is to choose a method whose associated matrix has minimal spectral

• Each student might start from a somewhat different point of view and experience the encounters with works of art and ideas in a different way... Postmodern

Machine Learning for Modern Artificial Intelligence.. Hsuan-Tien

• Many people travel for gaining respect from others and a satisfying social status because one with plenty of travel experience and knowledge of different countries is

Hsuan-Tien Lin (NTU CSIE) Machine Learning Basics