1 novembre 20021 I nomi in Java F. Bombi 1 novembre 2002.

Slides:



Advertisements
Presentazioni simili
Costruttori e Distruttori
Advertisements

Recupero debito quarto anno Primo incontro
26/10/2004Laboratorio di Programmazione - Luca Tesei1 Variabili e Oggetti Lo spazio di memoria di Java Le API di Java.
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Punto della situazione Da dove veniamo, dove andiamo.
Massa Laura Mela Enrica
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
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Appunti a cura di Giovanni Cantone, con la collaborazione di Anna Lomartire e la partecipazione di Giuseppe Calavaro 1 06/06/2006UNIROMA2-ING OOP Programmazione.
Tipi di dato e controllo del flusso Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA.
Allocazione dinamica della memoria
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
Introduzione al linguaggio Java
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Derivazione tra classi
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Oggetti e dati primitivi
Approfondimento delle classi
Selezione (=scelta) con “if-else”
Java base III: Array e Stringhe
AN FI Array Array in Java. AN FI Array Dichiarazione di array in Java [ ]; //oppure u [] ; int a[]; int[] a; u La dimensione non è specificata.
AN Fondam98 Puntatori Azioni e procedure Assegnamenti, indirizzi e puntatori.
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori. Lapproccio classico consiste nellinse- rire controlli.
Programmazione in Java
JAVA Franco Bombi 8 ottobre FB Introduzione Java è un linguaggio di impiego generale, basato su classi e orientato agli oggetti Java.
Ereditarietà e Polimorfismo
30 ottobre Mergesort F. Bombi 30 ottobre 2002.
Diagramma di flusso del problema del Supermercato.
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
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.
Corso JAVA Lezione n° 12 Istituto Statale di Istruzione Superiore “F. Enriques”
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Le eccezioni F. Bombi 01/11/ Errori e situazioni impreviste situazioni eccezionali In un programma situazioni eccezionali possono.
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.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Ricerca sequenziale in un array di interi
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
Lezione n° 07 - Esercitazione
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Lezioni 1-2.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Si vuole realizzare una classe Java PhotoGallery che rappresenta una galleria di fotografie online. Ogni PhotoGallery ha una url (rappresentata da una.
Programmazione ad oggetti
Il linguaggio C Puntatori e dintorni.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Strutture di controllo Esercizi!. Utilizzare i metodi: I modi per poter richiamare un metodo, di una classe (ad esempio SavitchIn) sono due. 1) E’ sempre.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
Programmazione in Java
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
1 Progettare un Tipo di Dato Astratto. 2 Scelte di Progetto (astrazione) 4 Caratteristiche degli oggetti –Modificabilità 4 Scelta delle operazioni –Realizzare.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
1 Java secondo contatto Nel tunnel una luce…. 2 Esercizio - Contatore Definire la classe Contatore con le seguenti caratteristiche:  Il metodo getValore.
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.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

1 novembre I nomi in Java F. Bombi 1 novembre 2002

2 Le variabili Una variabile è una posizione in memoria alla quale è associato un determinato tipo che può essere o un tipo primitivo o un riferimento Una variabile ha sempre un valore compatibile con il suo tipo Il valore di una variabile può essere modificato da un’assegnazione oppure da un operatore di incremento ( ++ ) o decremento ( -- )

1 novembre I 7 tipi di variabili Variabile di classe: un campo di una classe con l’attributo static Variabile di esemplare: un campo di una classe senza l’attributo static Componenti di un array: sono variabili senza nome che vengono create quando si crea un array destinate a contenere i singoli elementi dell’array Parametro di un metodo: nome di un argomento che verrà passato al metodo Parametro di un costruttore Parametro di un gestore di eccezione Variabile locale: variabile dichiarata all’interno di un blocco

1 novembre Variabile di classe Una variabile di classe viene creata al momento in cui la classe viene caricata nella memoria della macchina virtuale e in assenza di indicazione contraria viene inizializzata a 0, false o null Di una variabile di classe esiste un solo esemplare condiviso da tutti gli oggetti della classe L’uso di variabili di classe è limitato a casi molto specifici ad esempio per costanti simboliche condivise oppure per contare quanti esemplari di una classe sono stati creati o per segnalare ad altri esemplari di una classe che si è invocato un metodo class A { static int vs; public A () {vs++;} … } … A uno = new A(); … A due = new A(); … System.out.println(A.vs);

1 novembre Variabili di esemplare Le variabili di esemplare (instance variable) rappresentano il caso più comune di campo di una classe Un nuova variabile di esemplare viene creata ogni volta che si crea un esemplare della classe che la contiene, in assenza di indicazione contraria, le variabili di esemplare sono sempre inizializzate a 0, false o null Un variabile di esemplare cessa di esistere quando l’oggetto che la contiene non è più indirizzato da un riferimento (lo spazio di memoria è a questo punto soggetto a garbage collection)

1 novembre Componenti di un array Le componenti di un array sono variabile senza nome che vengono create al momento della creazione dell’array. Sono inizializzati a 0, false o null Fare attenzione che se si crea un array di oggetti la creazione dell’array crea solo i riferimenti agli oggetti (inizializzati a null ) e non gli oggetti che dovranno essere esplicitamente creati uno per uno class coppia { int a; int b;} … coppia[] v = new coppia[4]; v[0].a = 25; // null pointer class coppia { int a; int b;} … coppia[] v = new coppia[4]; for(int i=0;i<4;i++) v[i] = new coppia(); v[0].a = 25; // OK

1 novembre I parametri Un parametro attribuisce un nome all’interno di un metodo all’argomento con il quale il metodo viene invocato Un parametro viene creato al momento dell’invocazione del metodo e cessa di esistere quando si conclude il blocco che costituisce il corpo del metodo Un parametro viene inizializzato con il valore dell’argomento usato al momento della chiamata del metodo Java di conseguenza utilizza sempre e solo il passaggio dei parametri per valore class a { void m(int i) { int locale; locale = i*i; } … a x = new a(); int k = 25; x.m(k); x.m(3); parametro argomento i = k = 25

1 novembre // Il passaggio dei parametri in Java public class Param { public static void main (String[] arg) { int i = 1; int j = 2; System.out.println("Prima: i= " + i + " j= " + j); scambia(i, j); System.out.println("Dopo1: i= " + i + " j= " + j); Integer ii = new Integer(i); Integer jj = new Integer(j); scambia(ii, jj); System.out.println("Dopo2: i= " + ii + " j= " + jj); MioInt iii = new MioInt(); iii.valore = i; MioInt jjj = new MioInt(); jjj.valore = j; scambia(iii, jjj); System.out.println("Dopo3: i= " + iii + " j= " + jjj); } static void scambia (int x, int y) { int tmp = x; x = y; y = tmp; } static void scambia (Integer x, Integer y) { Integer tmp = x; x = y; y = tmp; } static void scambia (MioInt x, MioInt y) { int tmp = x.valore; x.valore = y.valore; y.valore = tmp; } class MioInt { int valore; public String toString() { return Integer.toString(valore); } }

1 novembre int i = 1; int j = 2; 1 i 2 j scambia(i, j); static void scambia (int x, int y) { int tmp = x; x = y; y = tmp; } ? x ? y inizializza ? tmp al ritorno del metodo scambia le variabili i e j sono immutate

1 novembre Integer ii = new Integer(1); Integer jj = new Integer(2); ii jj scambia(ii,jj); inizializza x y al ritorno del metodo scambia i riferimenti ii e jj sono immutati 1 2 static void scambia (Integer x, Integer y) { Integer tmp = x; x = y; y = tmp; } tmp

1 novembre Valore ? jjj Valore ? iii MioInt iii = new MioInt(); iii.valore = 1; MioInt jjj = new MioInt(); jjj.valore = 2; scambia(iii, jjj); al ritorno del metodo scambia i riferimenti iii e jjj non sono cambiati sono però stati scambiati i campi inizializza x y 1 2 tmp static void scambia (MioInt x, MioInt y) { int tmp = x.valore; x.valore = y.valore; y.valore = tmp; } 1 2 1

1 novembre Come ritornare un valore Il meccanismo del passaggio dei parametri ad un metodo essendo per valore è unidirezionale, il parametro viene inizializzato con l’argomento al momento della chiamata, se il parametro viene modificato l’argomento rimane immutato Un metodo può restituire una sola variabile con la clausola return, il tipo di valore restituito deve essere indicato nella dichiarazione del metodo

1 novembre Uso di variabili globali All’interno di una classe due metodi possono scambiarsi dati utilizzando un campo della classe come variabile condivisa o globale Questa forma di comunicazione non può essere usata fra metodi di classi diverse in quanto gli esemplari di classi diverse non accedono agli stessi campi Ricordarsi infine che un metodo quando è invocato conosce i campi dell’esemplare della classe individuata dal riferimento usato per invocare il metodo

1 novembre argomento actual parameter parametro reale parametro formal parameter parametro formale all’attivazione o chiamata del metodo il valore dell’argomento viene utilizzato per inizializzare il corrispondente parametro return valore; Alla terminazione del metodo il controllo iene passato al punto di chiamata. I valore dei parametri vengono persi (ma non vengono persi eventuali effetti collaterali). Il metodo può restituire un singolo valore

1 novembre I nomi in Java

1 novembre Pacchetti (package) Una applicazione Java si compone di uno o più pacchetti sottopacchetti Un pacchetto è un insieme di file (unità compilabili), un pacchetto può essere organizzato gerarchicamente in sottopacchetti pacchetto senza nome In assenza di indicazioni contrarie i file contenuti nel directory di lavoro costituiscono un pacchetto senza nome liste Se si esclude l’esempio delle liste (la cui realizzazione è organizzata in un sottopacchetto) tutti gli esempi visti a lezione sono realizzati come pacchetti senza nome

1 novembre I nomi in Java nomi Tutte le entità usate in un programma Java sono individuate da nomi composti da stringhe, dette identificatori, di caratteri alfanumerici con il primo carattere alfabetico dichiarato Ogni nome deve essere dichiarato prima di essere usato, la dichiarazione specifica l’entità cui il nome si riferisce e chi può accedere al nome qualificandolo scope Ogni nome semplice è riconosciuto in una porzione del programma detta il suo scope contesto Il significato di un nome è stabilito dal contesto nel quale viene usato

1 novembre Le entità individuate da un nome possono essere – Una classe – Un’interfaccia – Un membro di una classe (campo o metodo) – Un parametro di un metodo, di un costruttore o di un gestore di eccezione – Una variabile locale semplice Un nome semplice è costituito da un solo identificatore qualificato Un nome qualificato è costituito da più identificatori separati da un public class Coppia implements Comparable { public Comparable chiave; …} public interface Stack { void push (Object x); …} public class Coppia implements Comparable { public Comparable chiave; … public String toString () { return chiave.toString() + ":" + attributo.toString(); } public String toString () { return chiave.toString() + ":" + attributo.toString(); }} public class Coppia implements Comparable { … public Coppia (Comparable c, Object a) { chiave = c; attributo = a; } public Coppia (Comparable c, Object a) { chiave = c; attributo = a; } public int compareTo (Object x) { return chiave.compareTo(((Coppia)x).chiave); } public int compareTo (Object x) { return chiave.compareTo(((Coppia)x).chiave); }} public static void main (String[] arg) throws IOException public static void main (String[] arg) throws IOException { BufferedReader in = new BufferedReader(new FileReader(arg[0])); { BufferedReader in = new BufferedReader(new FileReader(arg[0])); int n = 0; int n = 0; int somma = 0; int somma = 0; … while ((str = in.readLine()) != null) while ((str = in.readLine()) != null) { token = new StringTokenizer(str, ":"); { token = new StringTokenizer(str, ":"); int matricola = Integer.parseInt(token.nextToken()); int matricola = Integer.parseInt(token.nextToken()); String nome = token.nextToken(); String nome = token.nextToken(); dati[n++] = new Studente(nome, matricola); dati[n++] = new Studente(nome, matricola); }

1 novembre Lo scope Lo scope di una dichiarazione è la regione di un programma nell’ambito della quale ci si può riferire ad una entità con il nome semplice Lo scope del nome di una classe è l’intero pacchetto nel quale la classe compare Lo scope di un membro di una classe è l’intera classe nella quale è dichiarato Lo scope di un parametro di un metodo o di un costruttore è l’intero corpo del metodo o del costruttore Lo scope di una variabile locale dichiarata in un blocco si estende fino alla fine del blocco for Lo scope di una variabile locale dichiarata nell’inizializzazione di un ciclo for si estende al solo corpo del ciclo public class Coppia implements Comparable { public Object attributo; public Coppia (Comparable c, Object a) { chiave = c; attributo = a; } public Coppia (Comparable c, Object a) { chiave = c; attributo = a; } public int compareTo (Object x) { return chiave.compareTo(((Coppia)x).chiave); } public int compareTo (Object x) { return chiave.compareTo(((Coppia)x).chiave); } public String toString () { return chiave.toString() + ":" + attributo.toString(); } public String toString () { return chiave.toString() + ":" + attributo.toString(); } public Comparable chiave; public Comparable chiave;} int[] r = c.contiene(); int[] r = c.contiene(); for (int i = 0; i < r.length; i++) for (int i = 0; i < r.length; i++) System.out.print(r[i] + ", "); System.out.print(r[i] + ", "); System.out.println(); System.out.println(); c.togli(1); c.togli(1); r = c.contiene(); r = c.contiene(); for (int i = 0; i < r.length; i++) for (int i = 0; i < r.length; i++) System.out.print(r[i] + ", "); System.out.print(r[i] + ", "); System.out.println(); System.out.println(); for (int i = 0; i < 32; i++) for (int i = 0; i < 32; i++) if (c.appartiene(i)) if (c.appartiene(i)) System.out.print("1"); System.out.print("1"); else else System.out.print("0"); System.out.print("0");

1 novembre Il controllo dell’accesso nomi qualificati L’uso di nomi qualificati consente di controllare l’accesso ai membri di una classe indipendentemente dallo scope, si danno 4 casi: – default – default: accesso a livello di package – public – public : accesso da qualsiasi punto – private – private : accesso possibile solo dall’interno della classe nella quale il nome è dichiarato – protected – protected : accesso a livello di package e nelle sottoclassi che estendono la classe In genere i campi di una classe sono private (o protected) in quanto si vuole che solo i metodi della classe possano modificare il valore dei campi mentre i metodi sono public perché devono poter essere utilizzati dall’esterno della classe

1 novembre Oscurare una dichiarazione La dichiarazione di un nome all’interno di un blocco contenuto in un altro blocco può oscurare la dichiarazione più esterna In genere è bene evitare di dichiarare la stessa variabile in blocchi diversi con significati diversi per evitare confusione (il compilatore non si confonde ma il lettore può rimanere confuso)

1 novembre public class StackAr implements Stack { private Object[] v; private int sp; private int sp; private static final int MAX = 10; private static final int MAX = 10; public StackAr () public StackAr () { sp = 0; { sp = 0; Object[] v = new Object[MAX]; Object[] v = new Object[MAX]; } public StackAr (int max) public StackAr (int max) { sp = 0; { sp = 0; v = new Object[max]; v = new Object[max]; } public void push (Object x) { v[sp++] = x; } public void push (Object x) { v[sp++] = x; } public Object pop () throws Underflow public Object pop () throws Underflow { if (sp == 0) { if (sp == 0) throw new Underflow("Pop di stack vuoto"); throw new Underflow("Pop di stack vuoto"); else else return v[--sp]; return v[--sp]; } public Object testa () throws Underflow public Object testa () throws Underflow { if (sp == 0) { if (sp == 0) throw new Underflow("Testa di stack vuoto"); throw new Underflow("Testa di stack vuoto"); else else return v[sp-1]; return v[sp-1]; } public boolean vuoto () { return sp == 0; } public boolean vuoto () { return sp == 0; }}