PROGRAMMAZIONE 2 5. Dynamic dispatch
|
|
|
- Adelmo Giuliani
- 8 anni fa
- Просмотров:
Транскрипт
1 PROGRAMMAZIONE 2 5. Dynamic dispatch PR Cosa significa? La dichiarazione di una variabile non determina in maniera univoca il >po dell oggeao che la variabile riferisce Cerchiamo di capire quale è il problema Class B extends class A // L estensione riscrive il metodo m( ) Supponiamo di creare un oggeao di >po A A a = new A( ) e di fare diverse operazioni su a che coinvolgono anche aliasing con oggem di >po B. Poi invochiamo a.m( ). Quale metodo è effemvamente invocato? PR
2 Esempio (in un unico file) public class DynamicBindingTest { public sta>c void main(string[ ] args) { Vehicle vehicle = new Car( ); // Il >po sta@co è Vehicle // il >po dinamico è Car vehicle.start( ); //Quale metodo viene invocato? // Quello di Car o quello di Vehicle? class Vehicle { public void start( ) { System.out.println("Inside start method of Vehicle"); class Car extends Vehicle { public void start( ) { System.out.println("Inside start method of Car"); PR Esempio (in un unico file) public class DynamicBindingTest { public sta>c void main(string[ ] args) { Vehicle vehicle = new Car( ); // Il >po sta@co è Vehicle // il >po dinamico è Car vehicle.start( ); //Quale metodo viene invocato? // Quello di Car o quello di Vehicle? class Vehicle { public void start( ) { Output: Inside start method of Car System.out.println("Inside start method of Vehicle"); class Car extends Vehicle { public void start( ) { System.out.println("Inside start method of Car"); PR
3 Intuizione Invocazione obj.m( ) A tempo di esecuzione viene u>lizzato il >po dinamico dell oggeao obj per determinare nella gerarchia delle classi quale è il metodo più specifico da invocare PR B è un so#o$po di A A e B includono la definizione del metodo m A a = new A ( ); B b = new B ( ); a.m( ); b.m( ); a = b; a.m( ); Viene invocato il metodo della classe A Viene invocato il metodo della classe B Viene invocato il metodo della classe B PR
4 Dynamic Dispatch Viene ricercato il metodo lungo la gerarchia a par>re dal >po dinamico dell oggeao A Tipo sta>co Tipo dinamico a A a = new A( ); B b = new B( ); B Tipo sta>co b a.m( ); b.m( ); Tipo dinamico PR Dynamic Dispatch Viene ricercato il metodo lungo la gerarchia a par>re dal >po dinamico dell oggeao A Tipo sta>co Tipo dinamico a A a = new A( ); B b = new B( ); B Tipo sta>co b a.m( ); b.m( ); a = b; Tipo dinamico Tipo sta>co di a è A Tipo dinamico di a è B PR
5 Sta>c vs dynamic Il compilatore usa i >pi sta>ci per determinare la correaezza delle invocazioni dei metodi La macchina virtuale usa il >po dinamico per determinare l effemvo metodo da invocare PR La tabella dei metodi Per comprendere gli esempi preceden> va estesa la ASM di Java con un ulteriore componente: la tabella dei metodi (a volte chiamata tabella della classe) La tabella con>ene il codice dei metodi defini> nella classe, e tuae le componen> sta>che definite nella classe stessa La tabella con>ene un puntatore alla classe padre L insieme delle tabelle è pertanto un albero (per quale ragione?) PR
6 Esempio public class Counter { private int x; public Counter( ) { x = 0; public void incby(int d) { x = x + d; public int get( ) { return x; public class Decr extends Counter { private int y; public Decr (int inity) { super( ); y = inity; public void dec( ) { incby(-y); PR Tabella dei metodi Le tabelle dei metodi sono allocate sullo heap (memoria dinamica) L invocazione del metodo costruaore determina l allocazione sullo heap della tabella dei metodi associata alla classe dell oggeao creato (se non è già presente) Ogni oggeao sullo heap con>ene un puntore alla tabella dei metodi del suo >po dinamico PR
7 Dispatch L invocazione del metodo o.m( ) u>lizza il puntatore alla tabella dei metodi per effeauare l operazione di dispatch ricerca sulla gerarchia dell oggeao a par>re dalla tabella dei metodi associata al >po dinamico dell oggeao o da notare l u>lizzo di this per determinare l oggeao che invoca il metodo PR public class Counter extends Object { private int x; public Counter( ) { super( ); this.x = 0; public void incby(int d) { this.x = this.x + d; public int get( ) { return this.x; public class Decr extends Counter { private int y; public Decr (int inity) { super( ); this.y = inity; public void dec() { this.incby(-this.y); // nel main Decr d = new Decr(2); d.dec( ); int x = d.get(); PR
8 Animazione dell esecuzione PR PR
9 public Decr (int inity) { super( ); this.y = inity; PR PR
10 NB: il codice della con>nuazione è memorizzato sullo stack PR Invocazione a super PR
11 PR Si esegue la con>nuazione PR
12 Si conclude la fase di inizializzazione con l assegnamento al campo y PR Viene allocato sullo stack l ambiente che con>ene il legame per la variabile d col >po dinamico Decr PR
13 Invocazione tramite dynamic dispatch e ricerca del metodo su gerarchia dinamica PR Invocazione del metodo PR
14 PR PR
15 PR
Programmazione Java Struttura di una classe, Costruttore, Riferimento this
Programmazione Java Struttura di una classe, Costruttore, Riferimento this [email protected] http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento
La Gestione della Memoria. Carla Binucci e Walter Didimo
La Gestione della Memoria Carla Binucci e Walter Didimo Esecuzione di programmi Java L esecuzione di un programma Java richiede: la compilazione del codice Java in bytecode Java (un linguaggio macchina
INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
Lezione 9 programmazione in Java Classi come contenitori
Lezione 9 programmazione in Java Classi come contenitori Nicola Drago [email protected] Dipartimento di Informatica Università di Verona Anteprima Gestione della Memoria Dati dinamici e statici Il passaggio
Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo
Esempi al calcolatore su: 1) 2) Subtyping e polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il
Esercizi della lezione 5 di Java
Esercizi della lezione 5 di Java Esercizio 5 Create il tipo di dato Counter dell Esercizio 1 come sottoclasse del tipo di dato SimpleCounter. Esercizio 1 Create un tipo di dato Counter che abbia: un valore
14 - Metodi e Costruttori
14 - Metodi e Costruttori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()
Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Ereditarietà (Inheritance) RIASSUMIAMO DALLA SCORSA
Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
Esercitazione 2: Java Thread. Java Thread. Java Thread. Un thread:
Esercitazione 2: Thread Un thread è un singolo flusso sequenziale di controllo all interno di un processo Un thread (o processo leggero) è un unità di esecuzione che condivide codice e dati con altri thread
Programmazione con Java
Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:
Perché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
Definizione di classi. Walter Didimo
Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Sintassi e Semantica Riferimenti versione 2.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali
Programmazione a Oggetti Lezione 7 Il linguaggio Java: aspetti generali Sommario Obiettivi di JAVA Portabilità: produrre codice eseguibile su più piattaforme (JVM) Affidabilità: Evitare il più possibile
Le basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
Riassunto. La programmazione OO. Oggi. Esempio
Riassunto La programmazione OO Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ [email protected] Programmazione, lezione 17 29 novembre
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
18 - Classi parzialmente definite: Classi Astratte e Interfacce
18 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
Linguaggi di Programmazione I Lezione 10
Linguaggi di Programmazione I Lezione 10 Prof. Marcello Sette mailto://[email protected] http://sette.dnsalias.org 8 maggio 2008 Array 3 Dichiarazione...........................................................
Marco Faella Introduzione al corso
Marco Faella Introduzione al corso 1 Lezione n. Parole chiave: Java Corso di Laurea: Informatica Insegnamento: Linguaggi di Programmazione II Email Docente: [email protected] A.A. 2009-2010 Linguaggi
Programmazione ad oggetti
Programmazione ad oggetti OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.
Introduzione. Java. Esempio. Esempio
Java polimorfismo G. Prencipe [email protected] Introduzione È un altro degli ingredienti fondamentali della OOP Permette di organizzare il codice e la leggibilità e di ottenere programmi estensibili
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1
Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1 Gerarchia delle classi Una sottoclasse eredita metodi, variabili, etc. dalla superclasse... Per
Prova d Esame Compito A
Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private static int counter=0; private int code; public
