CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A....

8
CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A. 2007-08 25/02/2008 Alessandra Toninelli [email protected]

Transcript of CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A....

Page 1: CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A. 2007-08 25/02/2008 Alessandra Toninelli alessandra.toninelli@unibo.it.

CdL Ingegneria Elettronica, Telecomunicazionied Automazione

Fondamenti di Informatica LBA.A. 2007-08

25/02/2008 Alessandra Toninelli [email protected]

Page 2: CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A. 2007-08 25/02/2008 Alessandra Toninelli alessandra.toninelli@unibo.it.

Definire una classe Java Una classe contiene solo due categorie di

elementi

1. Variabili di classe o di istanza (fields o campi)2. Metodi (il costruttore è un metodo speciale)

Tutto il codice che scriviamo deve appartenere aduna di queste due categorie

Java è un linguaggio OO – non procedurale!25/02/2008 2

Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08

Page 3: CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A. 2007-08 25/02/2008 Alessandra Toninelli alessandra.toninelli@unibo.it.

Il costruttore

25/02/2008 3Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08

E’ possibile definire più costruttori per una stessa classe (overriding del metodo)

E’ possibile chiamare un costruttore della stessa classe dentro un altro costruttore this.costruttore(); Ma deve essere la prima istruzione

E’ possibile chiamare il costruttore della superclasse super();

Page 4: CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A. 2007-08 25/02/2008 Alessandra Toninelli alessandra.toninelli@unibo.it.

Inizializzazione dei campi Dove si inizializzano i campi di una classe?

Due possibili alternative:1. Nella dichiarazione del campo (ma in una sola

istruzione!)2. All’interno di un metodo (tipicamente il

costruttore)

Java fornisce una inizializzazione di default Ad es. un boolean è false, un nuovo oggetto è

null25/02/2008

Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08 4

Page 5: CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A. 2007-08 25/02/2008 Alessandra Toninelli alessandra.toninelli@unibo.it.

private Counter ore;

public Clock (){ ore = new Counter();}

Esempio

25/02/2008Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08 5

private Counter ore = new

Counter();

public Clock (){ }

Inizalizzazione nel

costruttore

Dichiarazione +

inizalizzazione

private Counter ore;

ore = new Counter();

public Clock (){ }

NO !

Page 6: CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A. 2007-08 25/02/2008 Alessandra Toninelli alessandra.toninelli@unibo.it.

E allora dove inizializzare?

25/02/2008 6Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08

I campi con tipi di dato primitivo possono essere inizializzati insieme alla dichiarazione

Gli oggetti è opportuno inizializzarli nel costruttore

EccezioneIl caso in cui non siamo sicuri che ogni costruttore inizializzi i campi (ma è un caso raro… quindi usiamo il costruttore!!!)

Page 7: CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A. 2007-08 25/02/2008 Alessandra Toninelli alessandra.toninelli@unibo.it.

JVM – Creazione di un oggetto

25/02/2008 7Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08

JVM assegna gli argomenti passati con il costruttore ai campi del nuovo oggetto creato

Cerca il costruttore e ne legge la prima istruzione

Se il costruttore inizia con l’invocazione ad un altro costruttore, JVM esegue quel costruttore

Se il costruttore inizia con l’invocazione al costruttore di una superclasse, JVM esegue quel costruttore

Page 8: CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A. 2007-08 25/02/2008 Alessandra Toninelli alessandra.toninelli@unibo.it.

JVM – Creazione di un oggetto

25/02/2008 8Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08

JVM cerca le definizioni dei campi ed eseguele inizializzazioni nell’ordine in cui sono scritte

Solo dopo aver eseguito tali inizializzazioniesegue il restante codice del costruttore Eventuale re-inizializzazione dei campi

Restituisce il riferimento all’oggetto creato