Università di camerino Corso di laurea in matematica Informatica 2 Corso di laurea matematica indirizzo 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 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; 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
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 tipo del dato identificatore int totale; int contatore, temp, risultato; Più variabili possono essere specificate in un’unica dichiarazione Informatica 2 Lezione 3
Assegnamento Una istruzione di assegnamento modifica il valore di una variabile totale = 55; 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 Si possono assegnare solo valori compatibili con il tipo dichiarato 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: scatola Rectangle 20 15 10 5 x y height width 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
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
System.out.println (“Ti ho detto "Ciao“!"); 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
Sequenze di escape Alcune sequenze di escape in Java: Sequenza \b \t \r \" \' \\ Significato backspace tabulazione newline ritorno virgolette doppie virgoletta backslash Informatica 2 Lezione 3
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 Per istanziare l’oggetto stringa "Corso di Prog …" Un oggetto è un’istanza di una particolare classe operatore di assegnamento titolo = new String ("Corso di Programmazione"); variabile chiamata al costruttore genera un riferimento da assegnare 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 concat String con int length substring int da, int a compareTo String conStr 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 … CIAO ciao parola nuovaParola String parola = “CIAO”; String nuovaParola = parola.toLowerCase() 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 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” Informatica 2 Lezione 3