lezione 09 - polimorfismo · cc by diapositiva 33 alessandro ursomando. ˝ ˘ ˝ ˘ ˇ 7 ˘ ˘ ˘...
Transcript of lezione 09 - polimorfismo · cc by diapositiva 33 alessandro ursomando. ˝ ˘ ˝ ˘ ˇ 7 ˘ ˘ ˘...
OOP
Introduzione al polimorfismo
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 2
LE TRE CARATTERISTICHEFONDAMENTALI DELLA OOP
� OOP
����������������
������������� �������������
����������������
�������������� ���������� ����
��� ����������
� �� ���� �
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 3
� OOP
���� �� ���� ����� ��� ������������������
�������� ������������������������ ��������� ����������� ����������
POLIMORFISMO
������������������������������
����������
������ �� ���� ������� ��
���������������������������
�������������� ��
�������������������������� ���� ��������������
��������� ��� �������������������
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 4
� OOP
���� �� ���� ����� ��� ������������������
�������� ������������������������ ��������� ����������� ����������
POLIMORFISMO
����� ��������������������������
����������
������ �� ���� �������������
���������������������������
������ ������������������ ������������
������������������� ���� ��������������
�� ������ ���������������� �
OOP
Polimorfismo dei metodi
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 6
� OOP
POLIMORFISMO DEI METODI
�������������� �������� �� ���� ����� ��� ������������������
�������� ������������������������ ��������� ����������� ����������
���!������ ���������������������������
"������������ ��� �� ��������������������� �������
���� �����#��� ������������� ������ ��� ���������
$�� �� �������������������#��������� ���#�����������
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 7
� OOP
Manager
...
Impiegato
...
Persona
...
POLIMORFISMO DEI METODIMEDIANTE OVERRIDING
%������������!����������� ������� �����
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 8
%���������������� ������ ������� ��&��
�# ������� ���!������� ������ ������������������� �
�#������� ���!������� ������ �������������������
Manager
...
Impiegato
...
Persona
...
� OOP
Impiegato
...
+ String toString()
...
Persona
...
+ String toString()
...
POLIMORFISMO DEI METODIMEDIANTE OVERRIDING
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 9
Manager
...
Impiegato
...
Persona
...
� OOP
Impiegato
...
+ String toString()
...
Persona
...
+ String toString()
...
POLIMORFISMO DEI METODIMEDIANTE OVERRIDING
����������� ��� �������� ���������� ������ ��������� ��������� �������� �������� ��
������ ��� ��������������� ��� ���������������� ��� ����������
%������������!�����������������
��!��������������������
Invoca (implicitamente)la toString di Persona
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 10
Manager
...
Impiegato
...
Persona
...
� OOP
Impiegato
...
+ String toString()
...
Persona
...
+ String toString()
...
POLIMORFISMO DEI METODIMEDIANTE OVERRIDING
����������� ��� �������� ���������� ������ ��������� ��������� �������� �������� ��
������ ��� ��������������� ��� ���������������� ��� ����������
%������������!�����������������
��!��������������������
Invoca (implicitamente)la toString di Impiegato
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 11
Manager
...
Impiegato
...
Persona
...
� OOP
Impiegato
...
+ String toString()
...
Persona
...
+ String toString()
...
POLIMORFISMO DEI METODIMEDIANTE OVERRIDING
����������� ��� �������� ���������� ������ ��������� ��������� �������� �������� ��
������ ��� ��������������� ��� ���������������� ��� ����������
%������������!�����������������
��!��������������������
Invoca anch’essa (implicitamente)la toString di Impiegato
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 12
Manager
...
Impiegato
...
Persona
...
� OOP
Impiegato
...
+ String toString()
...
Persona
...
+ String toString()
...
POLIMORFISMO DEI METODIMEDIANTE OVERRIDING
����������� ��� �������� ���������� ������ ��������� ��������� �������� �������� ��
������ ��� ��������������� ��� ���������������� ��� ����������
%������������!�����������������
��!��������������������
"��������� ����� �������������� ������������
�������������� ���!�����������������
����������������������������� ���������� ������
��������� �����&� ���������������
'� ����������������������
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 13
� OOP
%������������!����������� ������� �����
����������� ��� ��������� ������������������ �������� ��
%������������!�����������������
��!��������������������
��� ���� ������������������ ���� ���������������
(�������
���������� ����� �������������� ������������
�������������� ���!�����������������
����������������������������� ���������� ������
��������� �����&� ����������������
Manager
...
+ int getBustaPaga()
...
Impiegato
...
+ int getBustaPaga()
...
POLIMORFISMO DEI METODIMEDIANTE OVERRIDING
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 14
� OOP
POLIMORFISMO DEI METODIMEDIANTE OVERLOADING
)�������� ����������������������������������
���������� �����������������#��������������������� �����
���������� ���� ���������#������������������� ������� ����� �
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 15
� OOP
POLIMORFISMO DEI METODIMEDIANTE OVERLOADING ORIZZONTALE
Data
...
+ int confrontaCon(Data)
+ int confrontaCon(int, int, int)
...
%������������!������ �����
�������� ��� ����� ������ ������� ����� ��
%������������!�����������������
��!��������������������
��� ����� ��!�����"���������� ����� ��!�����"����#$%$�#&'��
"��������� ����� ���������������
������������������������
�������������� ���!�����������������
������������������������ ������
�������#���� ���������������&� ����������������
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 16
� OOP
POLIMORFISMO DEI METODIMEDIANTE OVERLOADING VERTICALE
%������������!����������� ������� �����
��������� ��� ������ �������(��) ���� �����(�� ��
%������������!�����������������
��!��������������������
������$(%��) ����*�$+�$�(��
"��������� ����� ���������������
���� ����������������
�������������� ���!�����������������
����������������������������� ���������� ������
��������� �����&� ����������������
Punto3d
...
+ void set(int, int, int)
...
Punto
...
+ void set(int, int)
...
OOP
Polimorfismo delle classi
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 18
INTRODUZIONE
� OOP � POLIMORFISMO DELLE CLASSI
*����������� ������������� �������� �� ���� ����� ��� ������������������
�������� ������������������������ ��������� ����������� ����������
)���������������� ���������������� ���������� ��� �� ���
������������ ����� ������������������ ����� �������
+ �������������� ������� ������� ��� ��+
�����������������������!����� ������������������������������ ������
",&������� ��-��������������������������� ������������
��������������������� �� �������� ����������� ������
��������������������� �����
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 19
CASTING TRA CLASSI
� OOP � POLIMORFISMO DELLE CLASSI
Gatto
...
Animale
...
%������������!����������� ������� �����
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 20
CASTING TRA CLASSI
� OOP � POLIMORFISMO DELLE CLASSI
Gatto
...
Animale
...,���������,������ ��� ,������� ��-���� ��-���� ���� -����� ��
��,������ ���-�����
%������������!�����������������
��!����������������
.�� �/��������� ������0������������������������� �������������
�#��������������� ��������� ����������������������� �
$�� ��������������������������������� �� ��������
����������������
��������������������!�������������
(#���������������� ����������������������������������1
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 21
POLIMORFISMO DELLE CLASSI
� OOP
%������������!����������� ������� �����
Animale {ABSTRACT}
Gatto Asino
%����������������������������������2���� ����������������
Animale {ABSTRACT}
+ String getVerso() {ABSTRACT}
Gatto
+ String getVerso()
Asino
+ String getVerso()
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 22
Animale {ABSTRACT}
+ String getVerso() {ABSTRACT}
Gatto
+ String getVerso()
Asino
+ String getVerso()
POLIMORFISMO DELLE CLASSI
� OOP
��������� ������� ������� ����!����������������
,�������.� ��� -����� ��
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 23
Animale {ABSTRACT}
+ String getVerso() {ABSTRACT}
Gatto
+ String getVerso()
Asino
+ String getVerso()
POLIMORFISMO DELLE CLASSI
� OOP
��������� ������� ������� ����!����������������
,�������.� ��� -����� ��
%������ ����������������!�������������������������� �� �����������3
,�������.��! � ��/
.� ��� -����� ��0����� /
.� ��� ,����� ��0������ ���. ���1�������
Dichiaro la var x di tipo Animale
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 24
Animale {ABSTRACT}
+ String getVerso() {ABSTRACT}
Gatto
+ String getVerso()
Asino
+ String getVerso()
POLIMORFISMO DELLE CLASSI
� OOP
��������� ������� ������� ����!����������������
,�������.� ��� -����� ��
%������ ����������������!�������������������������� �� �����������3
,�������.��! � ��/
.� ��� -����� ��0����� /
.� ��� ,����� ��0������ ���. ���1�������
se succede qualcosa
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 25
Animale {ABSTRACT}
+ String getVerso() {ABSTRACT}
Gatto
+ String getVerso()
Asino
+ String getVerso()
POLIMORFISMO DELLE CLASSI
� OOP
��������� ������� ������� ����!����������������
,�������.� ��� -����� ��
%������ ����������������!�������������������������� �� �����������3
,�������.��! � ��/
.� ��� -����� ��0����� /
.� ��� ,����� ��0������ ���. ���1�������
x punta a un’istanza di Gatto
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 26
Animale {ABSTRACT}
+ String getVerso() {ABSTRACT}
Gatto
+ String getVerso()
Asino
+ String getVerso()
POLIMORFISMO DELLE CLASSI
� OOP
��������� ������� ������� ����!����������������
,�������.� ��� -����� ��
%������ ����������������!�������������������������� �� �����������3
,�������.��! � ��/
.� ��� -����� ��0����� /
.� ��� ,����� ��0������ ���. ���1�������
altrimenti
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 27
Animale {ABSTRACT}
+ String getVerso() {ABSTRACT}
Gatto
+ String getVerso()
Asino
+ String getVerso()
POLIMORFISMO DELLE CLASSI
� OOP
��������� ������� ������� ����!����������������
,�������.� ��� -����� ��
%������ ����������������!�������������������������� �� �����������3
,�������.��! � ��/
.� ��� -����� ��0����� /
.� ��� ,����� ��0������ ���. ���1�������
x punta a un’istanza di Asino
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 28
Animale {ABSTRACT}
+ String getVerso() {ABSTRACT}
Gatto
+ String getVerso()
Asino
+ String getVerso()
POLIMORFISMO DELLE CLASSI
� OOP
��������� ������� ������� ����!����������������
,�������.� ��� -����� ��
%������ ����������������!�������������������������� �� �����������3
,�������.��! � ��/
.� ��� -����� ��0����� /
.� ��� ,����� ��0������ ���. ���1�������
in entrambi i casi recupera il verso
dell’animale x
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 29
)� ����!������ ���������������
�����������������������4�����#�����������0�����
�������������!��������������������������
!�������������������2����� ������� ��5
������ ����������������������������� �/�
���������������������2�����
POLIMORFISMO DELLE CLASSI
� OOP
��������� ������� ������� ����!����������������
,�������.� ��� -����� ��
%������ ����������������!�������������������������� �� �����������3
,�������.��! � ��/
.� ��� -����� ��0����� /
.� ��� ,����� ��0������ ���. ���1�������
�������� ��� �&�
�������������������� ���������&
�����������4�����#��������
���0����������������
���������������������� ��� ��
���������2����� �������
$#��������4���������������������������� �/�������������� ������������������� ������
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 30
)� ����!������ ���������������
�����������������������4�����#�����������0�����
�������������!��������������������������
!�������������������2����� ������� ��5
������ ����������������������������� �/�
���������������������2�����
POLIMORFISMO DELLE CLASSI
� OOP
��������� ������� ������� ����!����������������
,�������.� ��� -����� ��
%������ ����������������!�������������������������� �� �����������3
,�������.��! � ��/
.� ��� -����� ��0����� /
.� ��� ,����� ��0������ ���. ���1�������
�������� ��� �&�
�������������������� ���������&
�����������4�����#��������
���0����������������
���������������������� ��� ��
���������2����� �������
.��� �������������������������������� �����
��������������6� � �������� ����������������������������� ������
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 31
$�������� ���� ����������������
�� ������ ����� �������������������������� ������
COS’È IL BINDING DINAMICO?� OOP � POLIMORFISMO
���������� ������ ������������������ ������!�����
�� ���������������������������� �������������� ������#�����������
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 32
.������������ ������������������������������ ��� ��
����������7����� ������ ��������������������������� �������
BINDING STATICO
� OOP � POLIMORFISMO
������� ������� ���� .��/
0
!������� �2���3�22���44��! ������������
�����������
8����������������������������
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 33
.������������ ������������������������������ ��� ��
����������7����� ������ ��������������������������� �������
BINDING STATICO
� OOP � POLIMORFISMO
������� ������� ���� .��/
0
!������� �2���3�22���44��! ������������
�����������
8����������������������������
+����!������� �2���3�22���44�+�(������! ������������+�%�������������������
(�'��������� ������� ���� .��/(�&����� (�+��0 questa invocazione di funzione
era mappata con un’istruzione di basso livello del tipo
jump 326
��1����������� ������ ���������������� ��
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 34
������&� �����������������������6� � ��������&������������������ ���
Animale {ABSTRACT}
+ String getVerso() {ABSTRACT}
Gatto
+ String getVerso()
Asino
+ String getVerso()
COS’È IL BINDING DINAMICO?� OOP � POLIMORFISMO
,�������.��! � ��/
.� ��� -����� ��0����� /
.� ��� ,����� ��0������ ���. ���1�������
All’indirizzo di quale getVerso() dovremmo spedire l’esecuzione?
8��������������1
���������� �����������9��
����� ������:�� ���
�!��������������������;����
�����������������������������������������
$���������������;����
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 35
Animale {ABSTRACT}
+ String getVerso() {ABSTRACT}
Gatto
+ String getVerso()
Asino
+ String getVerso()
BINDING DINAMICO
� OOP � POLIMORFISMO
,�������.��! � ��/
.� ��� -����� ��0����� /
.� ��� ,����� ��0������ ���. ���1�������
%������������� ������ �&�!�����&
���������������#��� �������������������
���������������������
��������������������;�����
All’indirizzo di quale getVerso() dovremmo spedire l’esecuzione?
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 36
.. PAUSA ..
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 37
UN ARGOMENTO IN SOSPESO
� OOP � POLIMORFISMO
����������������������� ����
����������������������� �����
������ �� ��������������������������
�������������������
����������������� ��������
��������������� ����������������
�������� ������������������������������
������������������� ����<
������������������� ���� ���
����������������� � �� ��������������������
�������������������������������
OOP
Polimorfismo avanzato
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 39
"������������������������ &�
��������� ���� ������� �� ��������� ����� ������� �����&�
��������������������� ����������������� �
���#����������������������� ��������������"�6� � �
������������ ��� �������!������ �� �������������������
POLIMORFISMO AVANZATO
� OOP
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 40
POLIMORFISMO AVANZATO
� OOP
Animale
Asino Corvo SqualoGatto
%������������!����������� ������� ������
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 41
POLIMORFISMO AVANZATO
� OOP
Animale
Asino Corvo SqualoGattoGatto
...
+ String getColorePelo()
...
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 42
CAST ESPLICITO
� OOP � POLIMORFISMO AVANZATO
Animale
Asino Corvo SqualoGattoGatto
...
+ String getColorePelo()
...
%�)=�80�>).$�%�="
(����������� ��������� ����!������
��������������������������� ������ ���
����������������������#�����������
��������� �����
,���������,������ ��� -����� ��,���������,������ ��� -����� �� -�������-���� ��-�������,�������
,���������,������ ��� -����� �� -�������-���� ��-�������,������������� �����-���� ���"������������
Supponiamo di voler invocare il metodo getColorePelo()
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 43
COLLEZIONI ETEROGENEE
� OOP � POLIMORFISMO AVANZATO
Animale
Asino Corvo SqualoGattoGatto
...
+ String getColorePelo()
...
%"$$>?�"8��>=>*"0>8>>
@����������� �������� ����
���������������������������� �����
����� �����&���<��������������
������������� ��� ���� �����
���������������� ������������
,������56������������� ,������5�226�,������56������������� ,������5�226� ,������56������������� ,������5�226� �������5(�6������-����� ��
,������56������������� ,������5�226� �������5(�6������-����� ���������5'&6������,����� ��
,������56������������� ,������5�226� �������5(�6������-����� ���������5'&6������,����� ���������5&�6������"��7�� ��
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 44
INSTANCEOF
� OOP � POLIMORFISMO AVANZATO
Animale
Asino Corvo SqualoGattoGatto
...
+ String getColorePelo()
...
�8)=�8%>"'
.�������� ���������� ���������������
��������������� ����� ������������
��������� ��������������� ���
,������56������������� ,������5�226�,������56������������� ,������5�226� ,������56������������� ,������5�226� �! ��������5�6������� ��! -������/
0
,������56������������� ,������5�226� �! ��������5�6������� ��! -������/
-�������-���� ��-������������5�6�
0
,������56������������� ,������5�226� �! ��������5�6������� ��! -������/
-�������-���� ��-������������5�6������� �����-���� ���"������������
0
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 45
GETCLASS
� OOP � POLIMORFISMO AVANZATO
Animale
Asino Corvo SqualoGattoGatto
...
+ String getColorePelo()
...
0>=%$�))
.��� ���� ������� ��������������������
����������������������
��������������"�6� � ����%����
,������56������� ,������5�226�,������56������� ,������5�226� ,������56������� ,������5�226� �! ��5�6 ���"���������586 ���"������/
0
,������56������� ,������5�226� �! ��5�6 ���"���������586 ���"������/
0
CC BY
ALESSANDRO URSOMANDODIAPOSITIVA 46
� OOP
%��#������������!���������������������!������ ��� ���������������������
���������������� ���������������1
POLIMORFISMO
2����!������!������������������ ��� ������������ ���&� ��������������������&
�#������������ ��� ����������������%���� ��������������������������������������������
��� �����������!�����
������������������� ������������
#����
������������������� ���������������� �&
����������������������������������������&
����������������������������������������� �����������&
������������������������������������������� ���� ����
���������!������ ��������������������������������� ����� �
���������� � ��������������������� ��������� ����� ������������ ��