Polimorfismo

Il termine polimorfismo indica la possibilità di implementare in modo speciale metodi e proprietà eredidati dalla classe base mantenendone il nome. Vediamo subito un esempio di quanto detto:

Public Class ProdottoBase   Private Const dIVA As Decimal = 0.2
‘…

Public Overridable Function IVA(ByVal Prezzo As Decimal) As Decimal
‘Calcola l’IVA sul prezzo specificato.
Return (Prezzo * dIVA)
End Function
End Class

Public Class AltroProdotto
Inherits ProdottoBase
Private Const dIVA As Decimal = 0.18
Private Const Tassa As Decimal = 0.1 ‘Tassa sul prodotto.
‘…

Public Overrides Function IVA(ByVal Prezzo As Decimal) As Decimal
‘Calcola l’IVA sul prezzo specificato e aggiunge la tassa sul prodotto.
Return (Prezzo * dIVA) + (Prezzo * Tassa)
End Function
End Class

Notiamo che la Function IVA è definita sia nella classe ProdottoBase sia nella classe AltroProdotto, che eredita da ProdottoBase. Il comportamento della funzione, tuttavia, è diverso, dal momento che in AltroProdotto all’IVA viene aggiunta una tassa. A seconda che si dichiari un oggetto di tipo ProdottoBase o di tipo AltroProdotto, verrà richiamata la funzione IVA corrispondente.
Per fare questo abbiamo usato il polimorfismo; la funzione IVA nella classe base è stata dichiarata usando la parola chiave Overridable: con essa si indica a Visual Basic che è possibile avere un’altra definizione per la stessa funzione in una classe derivata. In AltroProdotto, infatti, IVA è stata definita specificando Overrides: in tal modo si dice che tale funzione sovrascrive un metodo con lo stesso nome che è stato definito nella classe base.
C’è anche un altro modo per sfruttare il polimorfismo, ovvero usando la parola chiave Shadows che, letteralmente, nasconde una definizione della classe base con lo stesso nome. L’esempio sopra riportato, usando Shadows, diventa:

Public Class ProdottoBase
Public Function IVA(ByVal Prezzo As Decimal) As Decimal
‘…
End Function
End Class

Public Class AltroProdotto
Inherits ProdottoBase

Public Shadows Function IVA(ByVal Prezzo As Decimal) As Decimal
‘…
End Function
End Class

Come si vede, nella classe base la parola chiave Overridable è sparita, mentre in AltroProdotto la Function IVA è preceduta da Shadows.

E’ importante notare che, usando la coppia Overridable e Overrides, il metodo che sovrascrive una routine della classe base deve avere non solo lo stesso nome, ma anche lo stesso numero di argomenti e dello stesso tipo. Invece, usando Shadows, è possibile ridefinire un metodo modificandone il tipo, il numero di argomenti, ecc; con Shadows si può addirittura nascondere una variabile della classe base con un intero metodo nella classe derivata.
Questa rapida panoramica sul polimorfismo non può coprire tutti gli aspetti della tematica, per approfondire i quali si rimanda alla Guida in linea. I concetti forniti sono comunque più che sufficienti per utilizzare con successo il polimorfismo nei proprio programmi.

Strettamente collegato con il polimorfismo è l’overloading, altra importante caratteristica dei linguaggi di programmazione orientati agli oggetti, che sarà discussa nella prossima Lezione.

Both comments and pings are currently closed.

Comments are closed.