Approfondimento delle classi

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Oggetti Java.
Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
PUNTATORI Introduzione
Universita di Camerino
Università di camerino
Massa Laura Mela Enrica
1 Semantica Operazionale di un frammento di Java: lo stato.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
eliana minicozzi linguaggi1a.a lezione2
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Derivazione tra classi
Soluzione Esercizio - Classe Vettore
Oggetti e dati primitivi
Programmazione Corso di laurea in Informatica
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Dichiarazione di classi Programmazione Corso di laurea in Informatica.
nome: sequenza di caratteri usata per denotare un oggetto
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
IL CONCETTO DI PACKAGE Una applicazione è spesso composta di molte classi (eventualmente correlate) Un package è un gruppo di classi che costi- tuiscono.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Ereditarietà e Polimorfismo
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A /02/2008 Alessandra Toninelli
Unità Didattica 3 Linguaggio C
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
Oggetti in C# Lezione 1 Classi ed istanze Oggetti in C# - Lezione 1.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
CORSO DI PROGRAMMAZIONE II Lezione 22
Programmazione ad oggetti
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Classi ed Oggetti in Java (Cenni). Richiami Cenni sull’ Implementazione, Macchine Astratte, Compilatore, Interprete Ruolo delle Classi in Java Oggetti.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Strutture e Classi.
1 Java secondo contatto Nel tunnel una luce…. 2 Esercizio - Contatore Definire la classe Contatore con le seguenti caratteristiche:  Il metodo getValore.
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
30/10/01Array 1  Un array e’ una struttura dati che contiene piu’ valori del medesimo tipo.  La lunghezza di un array e’ stabilita quando l’array viene.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Approfondimento delle classi Programmazione Corso di laurea in Informatica

Riferimenti Il riferimento a un oggetto contiene l’indirizzo di memoria dell’oggetto Descriviamo l’indirizzo come un puntatore all’oggetto PezzoScacchi alfiere = new PezzoScacchi(); alfiere AA2003/04 © M.A. Alberti Programmazione Classi 2

Assegnamento L’istruzione di assegnamento effettua una copia di un valore e o archivia in una variabile Per i tipi primitivi: num2 = num1; Prima num1 5 num2 12 Dopo num1 5 num2 AA2003/04 © M.A. Alberti Programmazione Classi 2

Assegnamento Per variabili riferimenti a oggetti, l’istruzione di assegnamento copia l’indirizzo di memoria: alfiere_2 = alfiere_1; Prima Dopo alfiere_1 alfiere_2 alfiere_1 alfiere_2 AA2003/04 © M.A. Alberti Programmazione Classi 2

Alias Due o più riferimenti allo stesso oggetto si chiamano alias Un oggetto e i suoi dati possono essere visti mediante variabili diverse, che lo referenziano Gli alias sono utili, ma devono essere usati con cautela Cambiare lo stato di un oggetto (le sue variabili) tramite un riferimento, causa il cambiamento anche per tutti gli altri alias AA2003/04 © M.A. Alberti Programmazione Classi 2

Garbage Collection Quando un oggetto non ha più un riferimento non può più essere referenziato da alcun programma L’oggetto diventa inaccessibile e quindi inutile si chiama garbage (spazzatura) Java effettua una raccolta automatica e periodica degli oggetti inutili (garbage collection) Per rendere nuovamente utilizzabile per usi futuri lo spazio di memoria che l’oggetto occupava In altri linguaggi è responsabilità del programmatore effettuare il rilascio della memoria occupata da oggetti non referenziati e quindi inaccessibili AA2003/04 © M.A. Alberti Programmazione Classi 2

I costruttori Un costruttore è uno speciale metodo per creare nuovi oggetto di una data classe Nello scrivere un costruttore, ricordare che: Deve avere lo stesso nome della classe Non riporta alcun valore Di conseguenza non ha alcun tipo di rientro, neanche void Spesso inizializza i valori delle variabili di istanza Non è sempre necessario definire un costruttore di una classe AA2003/04 © M.A. Alberti Programmazione Classi 2

Costruttori di default Il costruttore di default non ha argomenti e crea l’oggetto senza inizializzare i membri di d’istanza Class Roccia { int i; } Roccia granito = new Roccia(); Il costruttore di default può essere invocato anche se non è stato esplicitamente definito AA2003/04 © M.A. Alberti Programmazione Classi 2

Costruttori di default Se vengono definiti esplicitamente dei costruttori, con o senza parametri, allora non è possibile usare quello di default Class Fiore { Fiore (int i) {…}; Fiore (String s) {…}; } Fiore rosa = new Fiore(); Causa un errore in compilazione AA2003/04 © M.A. Alberti Programmazione Classi 2

La parola chiave this Quando si invoca un metodo su un oggetto, il riferimento all’oggetto è un parametro implicito del metodo All’interno di un metodo per indicare questo parametro implicito si usa this La parola this genera il riferimento all’oggetto corrente Spesso può essere sottointesa AA2003/04 © M.A. Alberti Programmazione Classi 2

Esempi d’uso di this La parola this è necessaria in alcuni casi Class Fiori { int petali; Fiori cresci() { this.petali++; return this; } this restituisce il riferimento all’oggetto corrente Fiori rosa = new Fiori(); rosa.cresci().cresci().stampa(); AA2003/04 © M.A. Alberti Programmazione Classi 2

Chiamare costruttori da costruttori Può essere utile definire più di un costruttore e richiamarne uno dentro all’altro Si usa this() this() con argomenti indica la chiamata al costruttore determinata dagli argomenti Dopo aver usato this per costruire l’oggetto corrente, sempre this consente di riferirlo Fiori.java e TestFiori.java AA2003/04 © M.A. Alberti Programmazione Classi 2

Metodi statici I metodi statici sono dichiarati mediante il modificatore static Il metodo main è static ed è invocato dal sistema senza creare un oggetto L’ordine dei modificatori può essere cambiato, ma per convenzione i modificatori di visibilità vengono prima public static void AA2003/04 © M.A. Alberti Programmazione Classi 2

Il modificatore static I metodi statici o anche metodi di classe possono essere invocati tramite il nome della classe piuttosto che il nome di un oggetto Il modificatore static può anche essere applicato alle variabili Associa le variabili o i metodi alla classe piuttosto che agli oggetti I metodi statici possono fare riferimento a variabili dichiarate static e a variabili locali AA2003/04 © M.A. Alberti Programmazione Classi 2

Significato di static Nei metodi dichiarati con il modificatore static non è possibile riferirsi all’oggetto corrente con this Perché non c’é nessun oggetto corrente Non si possono chiamare metodi non statici all’interno di metodi statici Non ci si può riferire a membri d’istanza I metodi statici non si riferiscono a oggetti Hanno la semantica di una funzione globale AA2003/04 © M.A. Alberti Programmazione Classi 2

Metodi statici class Helper public static int triple (int num) { int result; result = num * 3; return result; } class Helper Un metodo è static, viene invocato tramite il nome della classe int valore = Helper.triple (5); Può anche essere invocato tramite il riferimento a un oggetto Helper x = new Helper(); int valore = x.triple (5); Il riferimento al metodo è risolto in modo statico durante la compilazione AA2003/04 © M.A. Alberti Programmazione Classi 2

Variabili statiche Le variabili dichiarate con il modificatore static si chiamano anche variabili di classe In generale ogni oggetto reclama lo spazio per le proprie variabili d’istanza Mentre esiste solo una copia di una variabile static Lo spazio di memoria necessario per le variabili statiche è allocato appena viene caricata la classe in cui è dichiarata AA2003/04 © M.A. Alberti Programmazione Classi 2

Variabili statiche CountInstances.java MyClass.java Gli oggetti di una stessa classe condividono l’accesso alle variabili statiche della classe Cambiare il valore di una variabile statica in un oggetto implica il cambiamento per tutti gli oggetti della classe Metodi e variabili statiche spesso lavorano congiuntamente CountInstances.java MyClass.java AA2003/04 © M.A. Alberti Programmazione Classi 2

Classi annidata Una classe oltre a contenere dati e metodi può contenere altre classi Una classe dichiarata all’interno di un altra si chiama classe annidata Classe esterna Classe annidata AA2003/04 © M.A. Alberti Programmazione Classi 2

Classi annidata Una classe annidata ha accesso alle variabili e ai metodi della classe esterna, anche se sono dichiarate private La classe esterna e la classe annidata condividono quindi le informazioni La classe annidata è protetta dalla classe in cui è definita dall’uso esterno AA2003/04 © M.A. Alberti Programmazione Classi 2

Classi annidate Una classe annidata produce un file bytecode separato in compilazione Es. La compilazione di una classe annidata dichiarata con il nome Interna in una classe di nome Esterna produce i file bytecode Esterna.class Esterna$Interna.class Le classi annidate possono essere dichiarate statiche Allora non possono fare riferimento a variabili e metodi d’istanza Una classe annidata e non statica si chiama anche classe interna AA2003/04 © M.A. Alberti Programmazione Classi 2

Inizializzazione con il costruttore I membri d’istanza sono spesso inizializzati dai costruttori Anche se il compilatore li inizializza con valori di default in ogni caso public class Contatore { int i; Contatore() { i = 999; } Il membro i viene inizializzato a 0 e poi a 999 all’atto della creazione di un oggetto AA2003/04 © M.A. Alberti Programmazione Classi 2

Ordine d’inizializzazione L’ordine d’inizializzazione dei membri è determinato dall’ordine in cui sono definiti nella classe. I membri sono inizializzati prima che venga invocato alcun metodo – anche i costruttori OrdineInizializzazione.java Alcuni oggetti sono dichiarati in ordine sparso, ma saranno instanziati tutti prima dell’invocazione el costruttore AA2003/04 © M.A. Alberti Programmazione Classi 2

Inizializzazione dati statici I dati statici sono archiviati in un unico segmento di memoria Vengono inizializzati secondo l’ordine di definizione al momento della creazione del primo oggetto della classe o quando avviene il primo accesso static In quest’ultimo caso il compilatore deve caricare la classe e così facendo inizializza i dati statici InizializzazioneStatica.java AA2003/04 © M.A. Alberti Programmazione Classi 2