PDA

View Full Version : Ereditarietà e polimorfismo... ho capito giusto?


Abadir_82
26-09-2009, 17:17
Ciao.

Ho seguito un corso aziendale in cui si è parlato velocamente anche di ereditarietà e polimorfismo.
Cercando un po' in google ho "costruito" questo esempio per capire le differenze tra i due:

- Definisco una classe figura con delle proprietà e dei metodi.
- Tramite l'ereditarietà posso creare un oggetto cerchio ed un oggetto quadrato di tipo figura che ne ereditano i metodi e proprietà.
- Tramite polimorfismo posso calcolare l'area delle due classi correttamente in quanto oggetti appartenenti alla stessa classe reagiscono diversamente allo stesso messaggio (usando metodi differenti).

Dite che può stare? Ho capito giusto?

PGI-Bis
27-09-2009, 00:33
L'esempio calza sia l'ereditarietà sia per il polimorfismo ma per quest'ultimo forse non nel modo che ti aspetti.

La premessa è che in tanto qualcosa è polimorfico in quanto può essere usato in un contesto in cui è richiesto qualcos'altro. E' questo che lo rende poli-morfico.

La relazione che c'è tra ereditarietà e polimorfismo sta in ciò che l'ereditarietà è un tipo di polimorfismo, detto polimorfismo inclusivo.

Infatti, se hai un tipo figura ed un tipo cerchio che eredita da figura allora cerchio potrà essere usato ovunque sia richiesta una figura. Cerchio è poli-morfico.

Il fatto che l'invocazione di un metodo dichiarato da figura comporti l'esecuzione del metodo definito in cerchio, quando cerchio sia usato in luogo di figura, è un tipo di polimorfismo detto per sovraccarico. Qui ciò che è polimorfico è il nome della funzione (ereditata e ridefinita):

figura.calcolaArea

calcolaArea è il nome della funzione ma questo nome ha tante forme - ancora poli-morfico - quanti sono i diversi tipi di figura che posso avere (cerchio, quadrato, ellisse e via dicendo). Quale sia la forma concretamente usata dipende dal contesto: se figura è un cerchio allora sarà il calcolaArea del cerchio, se è un rettangolo sarà il calcolaArea del rettangolo eccetera.

Questo tipo di polimorfismo si ottiene con il cosidetto collegamento dinamico.

Abadir_82
28-09-2009, 15:22
Mille grazie, ora è un po' più chiaro :)