Le funzioni che utilizzano il polimorfismo Ad-hoc possono eseguire codice differente per tipi differenti di argomenti e di conseguenza possono comportarsi in modo diverso a secondo del tipo.
Ci sono due generi di polimorfismo ad-hoc overloading("sovraccarico") e coercion("coercisione")
Nell' overloading viene utilizzato lo stesso nome di funzione per denotare funzioni differenti, e si utilizza il contesto(tipo parametri,tipo ritorno,..) per decidere a quale funzione riferisce una particolare istanza del nome.
Un preprocessing del programma andrà ad eliminare l’overloading assegnando nomi differenti alle diverse funzioni.
Es.
void print(int x)
void print(String x)
Vegono trasformati dal preprocessore in
void print_Int(int x)
void print_String(String x)
In questo senso l’overlodiang risulta essere una convenzione sintattica.
La coercion e’ invece una operazione semantica necessaria per convertire l’argomento di una funzione al tipo previsto per la stessa, in situazioni che potrebbero portare ad un errore sui tipi.
La coercion può' essere prevista staticamente, a compile-time, o dinamicamente, dà test a run-time sugli argomenti delle funzioni.
Il polimorfismo Ad-hoc, in questo esempio, può’ essere spiegato in tre modi differenti
Es. Abbiamo le seguenti espressioni:
3 + 4
3.0 + 4
3 + 4.0
3.0 + 4.0
1. l’ operando “+” e’ sovraccaricato quattro volte , uno per ogni combinazione di tipi di argomenti
2. l’ operando “+” e’ sovraccaricato due volte, quando l’argomento è di tipo intero o reale e l’argomento intero e “coerciso” al tipo reale
3. l’operatore “+” e’ definito solo per la somma sui reali e gli argomenti interi sono sempre “coercisi” ai corrispondenti reali
Bibliografia
[CW85] Luca Cardelli, Peter Wegner, "On Understanding Types, Data Abstraction, and Polymorphism", ACM Computer Surveys, December 1985.
Daniele Licari
Iscriviti a:
Commenti sul post (Atom)
Nessun commento:
Posta un commento