I linguaggi di programmazione come Java e C # supportano la programmazione orientata agli oggetti (OOP). Permette di costruire software usando oggetti. Ci sono molti oggetti in un sistema software o in un programma. Questi oggetti hanno attributi e metodi. Gli attributi descrivono le caratteristiche. I metodi descrivono le azioni che possono essere eseguite dall'oggetto. I dati vengono passati attraverso oggetti usando metodi. I valori richiesti vengono inviati tramite chiamate di metodo con parametri. L'effettiva implementazione del metodo si trova nella definizione del metodo. Esiste un collegamento tra una chiamata al metodo e una definizione del metodo. È conosciuto come vincolante. Esistono due tipi di binding. Sono legature statiche e rilegature dinamiche. Il differenza fondamentale tra il legame statico e il legame dinamico è quello, nel collegamento statico, l'associazione viene risolta in fase di compilazione mentre l'associazione dinamica viene risolta al momento dell'esecuzione, ovvero il tempo effettivo di esecuzione. Questo articolo discute la differenza tra questi due meccanismi vincolanti.
1. Panoramica e differenza chiave
2. Cos'è l'associazione statica
3. Cos'è il legame dinamico
4. Somiglianze tra legatura statica e rilegatura dinamica
5. Confronto affiancato - Legame statico e Rilegatura dinamica in forma tabulare
6. Sommario
Il collegamento è il collegamento tra una chiamata al metodo e definizioni di metodo.
Figura 01: associazione statica e rilegatura dinamica
Fare riferimento al seguente programma scritto in Java.
classe pubblica A
public void method1 ()
System.out.println ( “Metodo 1”);
public void method2 ()
System.out.println ( “Method2”);
public static void main (String [] args)
A obj = new A ();
obj.method1 ();
obj.method2 ();
Secondo il programma di cui sopra, viene creato un oggetto di tipo A. Quindi vengono chiamati method1 e method2. Identificare quale metodo dovrebbe richiedere l'esecuzione è noto come vincolante. L'istruzione obj.method1 () chiamerà method1 () e obj.method2 () chiamerà method2 (). Questo link è vincolante.
Nel binding statico, il binding viene risolto in fase di compilazione dal compilatore. È anche conosciuto come legatura anticipata. Il binding avviene prima che un programma venga effettivamente eseguito. Il legame statico si verifica nel sovraccarico del metodo. Fare riferimento al seguente programma scritto in Java.
calcolo del vuoto pubblico
somma void pubblica (int x, int y)
System.out.println ("Sum is", x + y);
somma vuoto pubblico (doppio x, doppio y)
System.out.println ("Sum is", x + y);
public static void main (String [] args)
Calcolo cal = new Calculation ();
cal.sum (2,3);
cal.sum (5.1, 6.4);
Secondo il programma precedente, quando si passano i due numeri interi, verrà invocato il metodo con due numeri interi. Quando si superano due valori doppi, verrà invocato il metodo corrispondente a due valori doppi. Questo processo di associazione avviene al momento della compilazione. Il compilatore sa che dovrebbe chiamare il metodo sum con due valori interi per cal.sum (2,3). Per cal (5.1.6.4), chiamerà il metodo sum con due valori double. Tutte le informazioni richieste sono note prima del runtime, quindi aumentano l'efficienza del programma e la velocità di esecuzione.
In Dynamic Binding il compilatore non risolve l'associazione in fase di compilazione. Il binding avviene in fase di esecuzione. È anche conosciuto come legatura tardiva. Il Binding dinamico si verifica in caso di override del metodo. Fare riferimento al programma scritto in Java.
public class Shape ()
public void draw ()
System.out.println ("Disegna forma");
la classe pubblica Circle () estende Shape
public void draw ()
System.out.println ("Disegna cerchio");
public class Triangle () estende Shape
public void draw ()
System.out.println ("Disegna il triangolo");
test di classe pubblica
public static void main (String [] args)
Forma s;
s = new Shape ();
s.draw ();
s = new Circle ();
s.draw ();
s = new Triangle ();
s.draw ();
Secondo il programma di cui sopra, la classe Shape ha un metodo draw (). Classe Circle e classe Triangle estende la classe Shape. Class Circle e class Triangle possono ereditare gli attributi e i metodi della classe Shape. Pertanto, class Shape è la classe super o genitore. Class Circle e Class Triangle sono sottoclassi o classi derivate. Queste classi hanno anche il metodo draw () con le loro stesse implementazioni. Pertanto, il metodo draw () nella super classe viene sovrascritto.
Nel metodo principale, vengono richiamati oggetti diversi. C'è una variabile di riferimento di tipo Shape, che è s. Quindi, s invoca il metodo in base alla classe specifica. Al momento della compilazione, il compilatore farà riferimento solo al metodo di disegno di super classe. Quando inizia l'esecuzione effettiva, porterà all'esecuzione di diversi metodi di disegno. Per prima cosa, s indicherà l'oggetto di tipo Shape. Pertanto, invocherà il metodo draw in classe Shape. Quindi la s punterà l'oggetto di tipo Circle, e invocherà il metodo draw della classe Circle. Infine, s si riferirà all'oggetto di tipo Triangolo e invocherà il metodo di disegno nella classe Triangle. Anche se la variabile di riferimento è di tipo Shape, l'associazione dipende dal tipo di oggetto. Questo concetto è noto come Dynamic Binding. Le informazioni vengono fornite in fase di esecuzione, quindi la velocità di esecuzione è più lenta rispetto al collegamento statico.
Legame statico e legatura dinamica | |
Static Binding è il tipo di binding che raccoglie tutte le informazioni richieste per chiamare una funzione durante la compilazione. | Dynamic Binding è il tipo di associazione che raccoglie tutte le informazioni richieste per chiamare una funzione durante il runtime. |
Tempo di legare | |
Il collegamento statico avviene al momento della compilazione. | L'associazione dinamica si verifica in fase di esecuzione. |
Funzionalità | |
Static Binding utilizza le informazioni sul tipo per il binding. | Il binding dinamico utilizza oggetti da risolvere per legare. |
Oggetto reale | |
Il binding statico non utilizza un oggetto reale per il binding. | Associazione dinamica, utilizzare l'oggetto effettivo per il binding. |
Sinonimi | |
Il legame statico è noto anche come legame precoce. | Il legame dinamico è noto anche come legame tardivo. |
Esecuzione | |
La velocità di esecuzione è veloce nel binding statico. | La velocità di esecuzione è bassa nel binding dinamico. |
Esempio | |
Il legame statico viene utilizzato nell'overload del metodo. | Il bind dinamico viene utilizzato nel metodo di sovrascrittura. |
Esiste un collegamento tra una chiamata al metodo e una definizione del metodo. È conosciuto come vincolante. Esistono due tipi di binding chiamati associazione statica e associazione dinamica. La differenza tra il collegamento statico e il collegamento dinamico è che nel collegamento statico, il legame viene risolto al momento della compilazione mentre l'associazione dinamica viene risolta al momento dell'esecuzione, ovvero il tempo effettivo di esecuzione. Poiché le informazioni richieste vengono fornite prima del runtime, il binding statico è veloce in esecuzione rispetto al collegamento dinamico.
È possibile scaricare la versione PDF di questo articolo e utilizzarlo per scopi offline come da nota di citazione. Si prega di scaricare la versione PDF qui: Differenza tra legatura statica e rilegatura dinamica
1.Java Interview 04 - Static Binding Vs Dynamic Binding, Mahika Tutorials, 27 dic. 2017. Disponibile qui