Early Binding o Late Binding quale dei due implementa il Polimorfismo?

Giorgio Borelli

tecniche di programmazione OOP per implementare il polimorfismoChi mastica OOP (Object Oriented Programming - Programmazione orientata agli ogetti) sà bene cosa sia il Polimorfismo, il quale costituisce uno dei tre pilastri fondamentali della OOP, gli altri due sono l'Eredità e l'Incapsulamento.

Per Polimorfismo s'intende la capacità di classi derivate d'implementare lo stesso metodo della classe madre con comportamenti diversi, infatti polimorfico deriva dal greco e letteralmente significa "avere molte forme". I linguaggi procedurali come il Pascal o il C sono "monomorfi", in quanto le loro funzioni implementano un solo tipo o meglio un solo comportamento, con linguaggi OOP quali C#, VB.NET, Java o lo stesso C++ il concetto di polimorfismo (strettamente legato al tipo) assume concettualmente un'importanza fondamentale in quanto consente di approssimare la realta con maggiore efficacia, con il Polimorfismo infatti possiamo mandare agli oggetti (instanze di classi) lo stesso messaggio ed ottenere da essi comportamenti diversi, sul modello della vita reale, in cui termini simili determinano azioni diverse, in base al contesto in cui vengono utilizzati.

L'obiettivo principale del Polimorfismo è quello di aggiungere flessibilità e favorire il riuso del codice (in questi casi non potremmo fare affidamento sul compilatore per scoprire errori di uso dei tipi nella compilazione).

Ma come implementare il Polimorfismo nella programmazione ad oggetti? E cosa sono il late binding e l'early binding? E come sono legati al polimorfismo?

Il Polimorfismo si può implementare, o meglio ottenere in due modi: con dei metodi in overload (early binding) o tramite eredità (late binding).

 

come si ottiene il polimorfismo nella programmazione orientata agli ogetti

 

Polimorfismo con Early Binding

Un metodo in overload non è altro che un metodo che porta lo stesso nome di un'altro e si differenzia da questo per il numero e tipo dei parametri e/o per il tipo di ritorno, quindi metodi con lo stesso nome ma signature sostanzialmente differenti.

Definire metodi in overload all'interno di una classe è una forma di polimorfismo, poichè a nomi uguali del metodo, ad es. "FaiQualcosa", possono corrispondere comportamenti diversi e ritornare tipi diversi. In questo caso l'aggancio fra il programma chiamante e la funzione chiamata é ritardato dal momento dalla compilazione a quello dell'esecuzione, perché solo in quella fase il programma può conoscere la funzione selezionata, in base ai dati che condizionano il flusso del programma stesso. La scelta, tuttavia, avviene all'interno di un insieme ben definito di funzioni, diverse l'una dall'altra per tipo e numero di parametri e tipo di ritorno, ma sempre funzioni diverse anche se con lo stesso nome.

Questo tipo di comportamento si chiama early binding, perchè sebbene l'aggancio alla funzione avviene a run-time a seconda del flusso dati, il puntatore nascosto this, introdotto dal compilatore, differenzia gli argomenti delle funzioni, e quindi questa sorta di polimorfismo che abbiamo esaminato finora é solo apparente: non si tratta di polimorfismo vero e proprio, ma soltanto di overload, cioè di un meccanismo che, come sappiamo, permette al programma di riconoscere e differenziare la funzione già in fase di compilazione (early binding).

 

Polimorfismo con Late Binding

Il "vero" polimorfismo deve essere associato al late binding, tramite Eredità delle classi, la differenziazione di comportamento degli oggetti in risposta allo stesso messaggio non deve essere statica e predefinita, ma dinamica, cioè deve essere determinata dal contesto del programma in fase di esecuzione. Ciò é realizzabile solo nell'ambito di una stessa famiglia di classi, e quindi il "vero" polimorfismo non può prescindere dall'eredità e si applica a funzioni-membro, con lo stesso nome, che appartengono sia alla classe base che alle sue derivate ma che implementano comportamenti differenti.

 

Chiunque voglia aggiungere qualcosa o porre una domanda su "Early Binding o Late Binding quale dei due implementa il Polimorfismo?" può farlo tramite i commenti, ogni contributo sarà ben accetto.

Categorie: Programmazione

Tags:

Aggiungi Commento

biuquote
Loading