• 沒有找到結果。

OOPClass,April8,2013 Hsuan-TienLin Polymorphism

N/A
N/A
Protected

Academic year: 2022

Share "OOPClass,April8,2013 Hsuan-TienLin Polymorphism"

Copied!
26
0
0

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

全文

(1)

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

(2)

Polymorphism: The Motto

One Thing, Many Shapes...

(3)

One Variable, Many Values

1 char 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

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

(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

(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

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

(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)

(7)

Polymorphic Behavior

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

Why Not?

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

(8)

Polymorphic Behavior on Known Stuff

polymorphic behavior ofknown primitive-type variables polymorphic behavior ofknown classes (extended types) polymorphic behavior ofknown parameter types

(9)

Unknown Stuff: Future Extensions

Backward Compatibility inheritance hierarchy

Forward Advance

newly added variables/methods

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

(10)

Polymorphism of Instance Content

one advanced content, many compatible ways to access

(11)

Polymorphism of Instance References

onecompatible reference, many advanced contents to point to

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

(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 advance)

(13)

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

(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

(15)

Method Overriding (Virtual Function)

calls the updated version through an upper-level reference

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

(16)

Method Invocation Polymorphism

one method (via upper-level reference),

many possible extended behaviors

(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 b o o l 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 }

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

(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 ) ;

(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

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

(20)

V-Table: A Possible Mechanism of Method Overriding

(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

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

(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”

(23)

Abstract Class (1/3)

1 p u b l i c c l a s s P r o f e s s o r ( ) {

2 p u b l i c v o i d t eac h ( ) {

3 System . o u t . p r i n t l n ( " n o t sure o f what t o te ach ! " ) ;

4 }

5 }

6 c l a s s CSIEProfessor extends P r o f e s s o r {

7 p r i v a t e v o i d teach_oop ( ) { / ∗ l a l a l a ∗ / }

8 p u b l i c v o i d t eac h ( ) { teach_oop ( ) ; }

9 }

10 c l a s s EEProfessor extends P r o f e s s o r {

11 p r i v a t e v o i d t e a c h _ e l e c ( ) { / ∗ l u l u l u ∗ / }

12 p u b l i c v o i d t eac h ( ) { t e a c h _ e l e c ( ) ; }

13 }

14 / / i n o t h e r p l a c e s

15 P r o f e s s o r p = new P r o f e s s o r ( ) ;

16 p . t eac h ( ) ; / / n o t sure o f what t o tea ch !

teachis a place-holder in Professor, expected to be overridden allows constructing a professor without any teaching ability!

—absurd in some sense

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

(24)

Abstract Class (2/3)

1 p u b l i c a b s t r a c t c l a s s P r o f e s s o r ( ) {

2 p u b l i c a b s t r a c t v o i d t eac h ( ) ;

3 }

4 c l a s s CSIEProfessor extends P r o f e s s o r {

5 p r i v a t e v o i d teach_oop ( ) { / ∗ l a l a l a ∗ / }

6 p u b l i c v o i d t eac h ( ) { teach_oop ( ) ; }

7 }

8 c l a s s EEProfessor extends P r o f e s s o r {

9 p r i v a t e v o i d t e a c h _ e l e c ( ) { / ∗ l u l u l u ∗ / }

10 p u b l i c v o i d t eac h ( ) { t e a c h _ e l e c ( ) ; }

11 }

12 / / i n o t h e r p l a c e s

13 P r o f e s s o r p = new P r o f e s s o r ( ) ; / / hahaha ! !

14 P r o f e s s o r p = new CSIEProfessor ( ) ; / / okay

(25)

Key Point: Abstract Class

acontract for future extensions

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

(26)

Final Words

static finalvariable: accessed through class, and assigned once (in declaration or static constructor)

finalinstance variable: accessed through instance, and assigned once (in declaration or every instance constructor) finalinstance method: cannot be overriden (≈ assigned once) static finalmethod: cannot be hidden by inheritance (≈

assigned once)

finalclass: cannot be inherited (and hence all methods final)

參考文獻

相關文件

Instead of assuming all sentences are labeled correctly in the training set, multiple instance learning learns from bags of instances, provided that each positive bag contains at

Structured programming 14 , if used properly, results in programs that are easy to write, understand, modify, and debug.... Steps of Developing A

• This program constructs an instance of the device and prints out its properties, such as detected.. daughterboards, frequency range,

 “A manager of a school shall, at least once in every 12 months, make to the incorporated management committee of the school a written declaration which (a) states the particulars

An instance associated with ≥ 2 labels e.g., a video shot includes several concepts Large-scale Data. SVM cannot handle large sets if using kernels

private methods effectively not inherited be- cause not “visible” to the subclass.. More on Access Permissions:

/** Class invariant: A Person always has a date of birth, and if the Person has a date of death, then the date of death is equal to or later than the date of birth. To be

= special contextual bandit + verified instances as rewards.. Good Properties of Greedy. Case 1: positive