




































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Java: elementi base del linguaggio. Paradigma OOP e suoi principi. Riferimenti e contenuti di un oggetto.
Tipologia: Slide
1 / 44
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!





































In offerta
Una variabile riferimento è una variabile il cui tipo è un tipo riferimento. Tipico esempio: oggetto appartenente a una classe
Una variabile riferimento non contiene memoria dell‟oggetto ma solo del riferimento ad esso.
In pratica, viene allocata un‟area di memoria per l‟oggetto e la variabile contiene l‟indirizzo di questa area di memoria.
Una variabile riferimento si usa in tre contesti:
Memorizzare il riferimento di un nuovo oggetto String s1 = “Hello!”; Indicare l‟oggetto destinatario di un messaggio int n1 = s1.length(); Come argomento di un metodo o costruttore System.out.println(s1);
Si veda ad esempio: String s1 = “Valore = ” + s2.compareTo(s3);
tipo int
“Hello!”
1 7 2 5
x
3 4 9 0
y
3 4 9 0
x
3 4 9 0
x = y y
tipo String
x
y x = y
x
y
“Hello!”
int x = 5; x = 18;
String s = “Hello!”; s = “Ciao!!”;
“Hello!” s “Hello!”
s
“Ciao!!”
il valore originario di x (cioè 5) viene sovrascritto dal nuovo valore, 18 viene creato un nuovo oggetto String ; non viene sovrascritto il valore, ma solo il riferimento
l‟oggetto stringa non più referenziato sarà deallocato dal garbage collector
String s1 = “Hello!”; String s2 = s1; s2 = “Ciao!”;
“Hello!”
s
s
“Ciao!”
il riferimento di s1 resta all‟oggetto String “Hello!” (ancora valido, perché referenziato)
Per creare una copia di un oggetto, un assegnamento non è un buon metodo (copia semplicemente il riferimento).
Per creare davvero una copia si usa tipicamente il metodo clone , implementato in molte classi di libreria. MyClass objOne = ...; MyClass objTwo = (MyClass) objOne.clone();
Se una variabile riferimento è pari a null, l‟oggetto referenziato non esiste: non è possibile invocarne un metodo. Se si chiama un oggetto il cui riferimento è pari a null , il compilatore ritorna un errore ( NullPointerException ). Differenza tra oggetto vuoto e oggetto nullo! Il primo è un oggetto effettivamente esistente (ma vuoto), il secondo non esiste per nulla.
Esempio illuminante: stringa vuota vs. nulla.
String s1, s2; int x; s1 = “”; // s1 è la stringa vuota s2 = null; // s2 è null (lo era già prima) x = s1.length(); // OK.. ritorna 0 x = s2.length(); // NO.. NullPointerException
Il tipo char rappresenta caratteri.
Viene usato lo standard UNICODE, uno schema di codifica uniforme multi-lingua per un set di caratteri molto più esteso dell‟ASCII.
I valori si scrivono tra apici: „ ‟
Caratteri arbitrari possono essere indicati dalla sequenza \u seguita da 4 cifre esadecimali, tutto tra apici. Ad esempio: „\u2122‟ = ™
Java implementa tutte le modalità del C per le istruzioni condizionali e i cicli.
Costrutti if [ else ], switch ,? : sono identici
ricordare che else chiude sempre l‟ if subito precedente;
Cicli for , while , do..while : identici
anche nella possibilità di inserire effetti collaterali dai cicli si può anche uscire con break e continue ; Java inoltre può usare break con etichetta (sconsigliati)
Però Java possiede anche operatori & e | che, a differenza del C, sono analoghi a && e ||, solo che forzano l‟evoluzione completa dell‟espressione (no lazy evaluation).
Che cosa deve rappresentare un oggetto della classe? Quali operazioni deve essere in grado di eseguire?
La classe deve essere progettata, per quanto possibile, in modo indipendente dalle applicazioni che la utilizzeranno, al fine di garantirne la portabilità.
Progettare una classe significa definire:
cosa : aspetti e semantiche pubblici della classe come : implementazione dei metodi supportati
La parte che deve essere resa nota è solo il “cosa”: definizione di ciò che il progettista assicura che la classe fa.
Questo rappresenta il contratto della classe tra il progettista e l‟utilizzatore.
Coerenza : una classe dovrebbe riguardare una singola entità fisica e operazioni simili
Separazione dei compiti : una singola entità può essere, se opportuno, divisa in più classi tra loro correlate, invece di una classe sola
Information hiding : i dati della classe non dovrebbero essere accessibili direttamente, ma solo tramite metodi (primato dei metodi sui dati, interazione tramite metodi)