Informatica 2 Lezione 3 Corso di laurea in matematica Informatica 2 Corso di laurea matematica...
-
Upload
giuseppe-neri -
Category
Documents
-
view
228 -
download
4
Transcript of Informatica 2 Lezione 3 Corso di laurea in matematica Informatica 2 Corso di laurea matematica...
Informatica 2 Lezione 3
Corso di laurea in matematicaInformatica 2
Corso di laurea matematicaindirizzo matematica per le applicazioni gestionali ed economiche
indirizzo matematica per le applicazioni tecnologiche e dell’ingegneria
Corso di laurea specialistica in matematica e applicazioni indirizzo matematica
ibilità dei dati
Università di camerino
Informatica 2 Lezione 3
Incapsulamento dei dati
• Nascondere le informazioni fornendo un’interfaccia
• Gli attributi di un oggetto, che ne rappresentano lo stato, sono nascoste all’interno dell’oggetto, accessibili solo ai metodi
• I metodi garantiscono la consistenza dello stato
• 4 diversi livelli di accesso a metodi e variabili
– public: accessibili a chiunque
– private: accessibili solo alla classe
– protected: accessibili a classe, sottoclassi e pacchetto
– senza modificatori: accessibili solo alle classi del pacchetto
• Consente modularità e flessibilità
Informatica 2 Lezione 3
Creare oggetti
• Gli oggetti vengono creati mediante uno speciale metodo di istanziazione, detto costruttore
• L’operatore new seguito dal nome della classe istanzia un nuovo oggetto con valori di default dei campi– new Rectangle()– Costruisce un rettangolo con i 4 campi al valore 0
• o con i valori passati come parametri – new Rectangle(5, 10, 15, 20)– Costruisce l’oggetto raffigurato prima
• Esempio TestRettangolo.java
Costruttore della classe Rectangle
Costruttore della classe Rectangle
Informatica 2 Lezione 3
Esempio Classe Rectangle
public class Rectangle { private int x1,y1,x2,y2;
public Rectangle() {}
public Rectangle(int x1,int y1,int x2,int y2){ this.x1=x1; this.y2=y2; this.x2=x2; this.y2=y2;
}public int getX1() { return x1;}public void setX1(int x1) {
this.x1 = x1;} // i metodi get e set per le altre variabili sono tralasciati per problemi di spazio.public int getArea(){
int area;int base = y2-y1;int altezza = x2-x1;return base * altezza;
} public static void main(String[] args) {
Rectangle r = new Rectangle();r.setX1(1);r.setY1(1);r.setX2(5);r.setY2(5);Rectangle r2 = new Rectangle(1,1,4,2);int area =r2.getArea();System.out.println("area r2 = "+ area + " area r = " + r.getArea());}
}
area r2 = 6 area r = 16
Informatica 2 Lezione 3
L’operatore new
• Si usa per istanziare nuovi oggetti di una classe
• È un operatore unario e viene prefisso al proprio argomento: un costruttore della classe
• new costruttore_classe() costituisce una espressione
• Produce un valore: un riferimento al nuovo oggetto creato della classe specificata dal costruttore
• Il riferimento viene generalmente salvato in una variabile mediante assegnamento
Rectangle rectangle = new Rectangle();
Rectangle r = new Rectangle(2,2,4,4);
Informatica 2 Lezione 3
Variabili e riferimenti
• L’istruzione di assegnamento per memorizzare un riferimento in una variabile
sinistra = destra;
• A sinistra del simbolo = è dichiarata una variabile di dato tipo e nome
• A destra è chiamato il costruttore della classe dichiarata come tipo della variabile che genera un riferimento ad un nuovo oggetto
• L’operatore di assegnamento = assegna il riferimento all’oggetto creato alla variabile
Rectangle rett = new Rectangle();
Informatica 2 Lezione 3
Oggetti e i loro riferimenti
• Gli oggetti creati sono collocati in un’area di memoria detta heap e sono accessibili mediante riferimenti
Point altoSinistra = new Point();
Point bassoDestra = new Point();
• Le variabili che rappresentano oggetti contengono il loro riferimento tramite cui possiamo accedere ai campi degli oggetti
bassoDestra.x = 112;
bassoDestra.y = 40;
Informatica 2 Lezione 3
1
Variabili
• Una variabile è un dato identificato da un identificatore, che rappresenta l’indirizzo della cella di memoria in cui il dato è archiviato
• Una variabile deve essere dichiarata, specificandone l’identificatore e il tipo di informazione che deve contenere
int totale;
int contatore, temp, risultato;
Più variabili possono essere specificate in un’unica dichiarazione
tipo del dato identificatore
Informatica 2 Lezione 3
1
Assegnamento
• Una istruzione di assegnamento modifica il valore di una variabile
totale = 55;
• Si possono assegnare solo valori compatibili con il tipo dichiarato
• Semantica operazionale:• L’espressione alla destra del simbolo = è valutata e il suo valore viene assegnato alla variabile a
sinistra
• L’eventuale valore precedente di totale è sovrascritto
Informatica 2 Lezione 3
Espressioni
• Le espressioni sono sequenze di operatori e di operandi secondo le regole sintattiche del linguaggio.
• Hanno un tipo complessivo determinato dagli operatori e dal tipo degli operandi.
• Danno luogo, in fase di esecuzione, a un valore.
• In particolare le espressioni di creazione di oggetti hanno come tipo la classe dell’oggetto costruito e in fase di esecuzione producono come valore un riferimento a un oggetto della classe specificata dal costruttore.
Informatica 2 Lezione 3
Inizializzazione
• Nella dichiarazione può essere già assegnato un valore iniziale alla variabile, mediante l’operatore d’assegnamento =
int somma = 0;
int base = 32, max = 149;
• Quando si richiama una variabile se ne usa il valore
Informatica 2 Lezione 3
Tipo di un dato
• Il tipo di una variabile specifica:
– la classe di valori che questa può assumere e
– l’insieme delle operazioni che possono essere effettuate su di essa.
• Ad esempio una variabile x di tipo intero può assumere come valori solo numeri interi
• su di essa possono essere effettuate soltanto le operazioni consentite per i numeri interi.
Informatica 2 Lezione 3
Tipi e astrazioni
• La nozione di tipo fornisce un’astrazione rispetto alla rappresentazione effettiva dei dati.
• Tutte le variabili sono rappresentate in memoria come sequenze di bit, che possono essere interpretate diversamente in base ai tipi.
• Il programmatore può utilizzare variabili di tipi differenti, senza necessità di conoscerne l’effettiva rappresentazione.
Informatica 2 Lezione 3
Variabili riferimento a un oggetto
• Una variabile può contenere un valore di un tipo primitivo o il riferimento a un oggetto
• Il nome di una classe può essere usato per dichiarare una variabile di riferimento a un oggetto
String titolo;• Nessun oggetto viene creato in questa dichiarazione• Si dichiara che la variabile di riferimento conterrà
l’indirizzo di un oggetto• L’oggetto stesso deve essere creato separatemente
titolo = new String (“Il manuale di Java”);
Informatica 2 Lezione 3
In memoria
• La dichiarazione di una variabile oggetto
Rectangle scatola;
non causa la sua inizializzazione, che va effettuata esplicitamente mediante l’operatore new:
Rectangle
20
15
10
5 x
y
height
width
scatola
scatola
Informatica 2 Lezione 3
Riferimenti a oggetti
• Il riferimento descrive la posizione dell’oggetto sullo heap
• Più variabili possono fare riferimento allo stesso oggetto
Rectangle scatola;
scatola = new Rectangle (5,10,15,20);
Rectangle contenitore = scatola;
• Ora scatola e contenitore si riferiscono allo stesso oggetto
Informatica 2 Lezione 3
import
• import … costituisce una direttiva per il compilatore e la Java Virtual Machine
• L’argomento della direttiva di importazione import indica che la classe da cercare fa parte di un package o libreria
• I separatori . indicano le directory in cui cercare
– prog.io.ConsoleOutputManager
– In ambiente UNIX: prog/io/ConsoleOutputManager.class
– In ambiente DOS/Windows: prog\io\ConsoleOutputManager.class
Informatica 2 Lezione 3
Esempio
import figure.geometriche.piane.Rectangle;
import Graph.2d.Draw;
class DisegnaFigure {
public static void main(String[] args) {
// crea rettangolo
Rectangle r = new Rectangle(5,5,10,10);
Draw penna = new Drow(r);
// diegna il rettangolo
d.drawFigure();
}
}
Informatica 2 Lezione 3
Errore comune
• Dimenticare l’inizializzazione di variabili oggetto
Rectangle mio_rettangolo;
-> mio_rettangolo.getArea();
Le istruzioni -> generano un errore: si applica un metodo a un oggetto che non esiste ancora
• La dichiarazione serve solo per creare la variabile oggetto, ma non per creare l’oggetto;
• La creazione va effettuata esplicitamente mediante la chimata all’operatore new
Informatica 2 Lezione 3
Costruttori vs metodi
• I costruttori sono metodi “speciali”
• I costruttori non possono essere invocati su oggetti esistenti
• I costruttori non vengono invocati come i metodi mediante l’operatore dot (.)
• I costruttori vengono invocati solo all’atto della generazione di un oggetto tramite l’operatore new
• Errore:
Rectangle rect;
-> rect.Rectangle(1,1,2,2,);
Informatica 2 Lezione 3
1
Concatenazione di stringhe
• L’operatore di concatenazione di stringhe + viene usato per appendere una stringa ad un altra
• Il simbolo + è anche usato per l’operazione di addizione aritmentica (polimorfismo)
– La funzione che viene eseguita dall’operatore + dipende dal tipo di informazione su cui opera
– Se entrambi gli operandi sono stringhe, o una è una stringa e l’altra è un numero, esegue la concatenazione di stringhe
– Se entrambi gli operandi sono numeri, allora li somma
• L’operatore + viene valutato da sinistra a destra
• Le parentesi possono essere usate per alterare l’ordine di esecuzion
Informatica 2 Lezione 3
1
Sequenze di escape
• Alcuni caratteri speciali possono dare luogo ad ambiguità
System.out.println (“Ti ho detto "Ciao“!");
• Il compilatore interpreta la seconda occorrenza di " come la fine della stringa letterale
• Una sequenza di escape è un insieme di caratteri che ne rappresenta uno speciale
• La sequenza di escape inizia con il carattere backslash \ e indica che il carattere che segue va trattato in modo speciale
System.out.println (“Ti ho detto \"Ciao\“!");
Informatica 2 Lezione 3
1
Sequenze di escape
• Alcune sequenze di escape in Java:
Sequenza
\b\t\n\r\"\'\\
Significato
backspacetabulazione
newlineritorno
virgolette doppievirgolettabackslash
Informatica 2 Lezione 3
1
La classe predefinita String
• Java mette a disposizione la classe predefinita String per rappresentare stringhe di caratteri
• Ogni stringa letterale, delimitata dai segni “, “ è un oggetto della classe String
– “ciao” è un oggetto costante di tipo stringa come 10 è una costante di tipo intero
Informatica 2 Lezione 3
Gli oggetti stringhe
titolo = new String ("Corso di Programmazione");
chiamata al costruttore
• Per istanziare l’oggetto stringa "Corso di Prog …"
• Un oggetto è un’istanza di una particolare classe
operatore di assegnamento
genera un riferimento da assegnare
variabile
Informatica 2 Lezione 3
Creare oggetti stringhe
• Per la sola classe String non è necessario invocare il costruttore new per creare un oggetto stringa (confusione tra operatori, che si applicano a tipi primitivi, e metodi che si applicano ad oggetti, tipi utente)
corso = “Programmazione";corso = new String (“Programmazione”);
• Speciale sintassi che vale solo per questa classe
System.out.println (“Prima le cose importanti");
• Il riferimento all’oggetto di tipo String creato implicitamente viene passato come parametro al metodo println
Informatica 2 Lezione 3
La classe String
• La classe String ha diversi metodi per manipolare stringhe
• Dato un oggetto della classe, possiamo usare l’operatore dot per invocare i metodi
corso.length()• Molti metodi riportano un valore mediante l’istruzione return– Come un intero o un nuovo oggetto di tipo String
Informatica 2 Lezione 3
Metodi per stringhe
Tipo di ritorno Nome del metodo Argomenti
String toUpperCase
char charAt int indice
String concat String con
int length
String substring int da, int a
int compareTo String conStr
String replace char v, char n
boolean startWith String prefisso
Informatica 2 Lezione 3
Prototipi e segnature
• La segnatura o firma di un metodo è costituita dal
– Nome del metodo
– I tipi dei parametri
• Per utilizzare un metodo occorre conoscerne anche il prototipo
– Segnatura
– Tipo del valore di ritorno
– Se il metodo non produce nulla si dichiara void il tipo del valore prodotto
• Overloading di metodi, stesso nome diversa segnatura
– Il compilatore sceglie il metodo in base agli argomenti usati
– Come il metodo + usato per sommare e concatenare
Informatica 2 Lezione 3
Esempi di prototipi
int compareTo(String)
boolean equals(String str)
int length()
String toUpperCase()
String substring(int, int)
Informatica 2 Lezione 3
Metodo toLowerCase
• Produce il riferimento a una nuova stringa costituita dagli stessi caratteri della stringa che esegue il metodo, con le eventuali lettere maiuscole trasformate in minuscole
Tipo prodotto Nome del metodo Argomenti
String toLowerCase nessuno
String s1 = "CIAO";
String s2 = s1.toLowerCase(); equivalente a:
String s2 = “CIAO".toLowerCase();
Informatica 2 Lezione 3
Nota bene …
CIAOparola
String parola = “CIAO”;
String nuovaParola = parola.toLowerCase()
ciaonuovaParola
Informatica 2 Lezione 3
Metodo length
• Produce un int , cioè un numero intero, uguale alla lunghezza della stringa rappresentata dall’oggetto che esegue il metodo.
Tipo prodotto Nome del metodo Argomenti
int length
“ciao”.length() produce il valore intero 4
Informatica 2 Lezione 3
Metodo concat
• Produce un riferimento alla stringa ottenuta concatenando alla stringa che esegue il metodo la stringa fornita come argomento.
Tipo prodotto Nome del metodo Argomenti
String concat String
String risposta = “Ciao ".concat(nome).concat("!");
String risposta = “Ciao ".concat(nome.concat("!"));
Informatica 2 Lezione 3
Metodo substring
• Produce il riferimento a una stringa formata dai caratteri che vanno dalla posizione x fino alla posizione y -1 della stringa che esegue il metodo.
Tipo prodotto Nome del metodo Argomenti
String substring int, int
"distruggere“ 11 caratteri d è in posizione 0 , l’ultima e in posizione 10
"distruggere".substring(2, 9) restituisce la stringa “strugge”
Informatica 2 Lezione 3
Metodo substring
• Produce un riferimento a una stringa formata da tutti i caratteri della stringa che esegue il metodo che si trovano tra la posizione specificata nell’argomento e la fine della stringa.
Tipo prodotto Nome del metodo Argomenti
String substring int
"distruggere".substring(8) restituisce la stringa “ere”