Il linguaggio Java Formalismo ad alto livello... Permette di descrivere programmi basandosi su concetti primitivi “sofisticati” (file, finestre, tabelle, liste, ecc.) ...basato su una notazione testuale familiare Codice sorgente Simile, nella sintassi e nelle istruzioni al linguaggio C queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Codice Sorgente I programmi Java sono suddivisi in “classi” Le classi sono descritte all’interno di file di testo con estensione “.java” Ogni file contiene una sola classe Il nome file deve coincidere con il nome della classe queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Un esempio Hello.java public class Hello { // Il programma più semplice public static void main(String[] args) { // Stampa un messaggio sul video System.out.println(“Hello Java”); } } queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Compilazione Scrittura Compilazione J 1001 0110 110.. .java .class Codice sorgente ByteCode queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esecuzione Esecuzione 1001 0110 110.. .class ByteCode queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Gli strumenti di Java La macchina virtuale Il compilatore Gli ambienti di sviluppo La documentazione Il debugger queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Macchina virtuale (1) Applicazione tradizionale Applicazione Java Macchina Virtuale Sistema Operativo Hardware queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Macchina virtuale (2) Astrazione di un elaboratore “generico” Ambiente di esecuzione delle applicazioni Java Esempio: java Hello Responsabilità: Caricamento classi dal disco Verifica consistenza codice Esecuzione applicazione queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Il compilatore J 1001 0110 110.. Traduzione dei sorgenti testuali in bytecode Linguaggio della macchina virtuale Java Esempio: javac Hello.java queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Ambienti di sviluppo Il codice sorgente Java è composto da testo Un editor qualsiasi è sufficiente Si possono usare ambienti integrati per lo sviluppo (IDE) Offrono strumenti per la redazione, la compilazione, l’esecuzione e la ricerca degli errori queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esempi Eclipse http://www.eclipse.org JCreator http://www.jcreator.com BlueJ http://www.bluej.org queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Documentazione (1) Strumento necessario alla sopravvivenza del programmatore Java!! Raccolta di informazioni relative alle classi appartenenti alle librerie standard di Java http://java.sun.com/docs/ queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Documentazione (2) Per ogni classe: Descrizione funzionale Elenco di attributi: funzionalità, caratteristiche Elenco dei metodi: funzionalità, parametri in ingresso, valori di ritorno, … queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Il debugger Strumento ausiliario al programmatore Monitorare l’esecuzione di una applicazione Analisi dei valori assunti dalle variabili, i metodi della classe, … Comando jdb.exe queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Dove si usa Java? Apparati di rete Cellulari e PC palmari PC client Server Elettrodomestici queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Java nei sistemi Embedded Segmento di mercato in forte crescita: Milioni di PC connessi ad Internet Centinaia di milioni di telefoni cellulari Miliardi di elettrodomestici Vengono usate librerie specifiche JavaCard, Java Micro Edition, … queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Programmi Java Java è un linguaggio ad oggetti L’unità minima di programmazione è la classe Un programma Java utilizza una o più classi Per ora, consideriamo programmi formati da una sola classe Un solo file sorgente Il nome del file coincide con il nome della classe L’estensione del file è “.java” queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Formato generale Prova.java public class Prova { /* qui vengono riportati attributi e metodi della classe … */ } Stesso nome! queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html main(…): la porta sul mondo Java public static void main(String[] args){ /* istruzioni ... */ } Punto di ingresso di ogni applicazione Invocato automaticamente dalla VM Java queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 1 – il primo programma Hello.java public class Hello { public static void main(String[] args) { System.out.println("Hello"); } } queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Dichiarazioni Introducono l’utilizzo di una variabile Formato generale <Tipo> <Nome> ‘;’ <Tipo> <Nome> ‘=’ <ValoreIniziale> ‘;’ Esempi char c; int i = 10; long l1, l2; Opzionale La mancata dichiarazione è un errore sintattico queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Tipi: una forma per i dati Variabili e parametri sono caratterizzati da un tipo che ne precisa/limita l’uso Possono contenere solo valori conformi al proprio tipo Esistono tipi Semplici (primitivi) Composti (classi) – le vedremo più avanti queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Usare le variabili (1) Si può dichiarare una variabile ovunque nel codice di un metodo Bisogna farlo, però, prima di usarla Visibilità limitata al blocco di istruzioni in cui è dichiarata Le variabili devono essere inizializzate! int a; Errore! La variabile “a” non è stata int b = a; inizializzata, e il suo valore è casuale queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Usare le variabili (2) Ad una variabile può essere assegnato: Un valore costante Il risultato di una formula Esempi int i = 1, j = 5; i = (5*j) % 10; long l = 10L; char c1 = ‘a’, c2 = ‘\u0062’; boolean b = false; queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Tipi primitivi Numerici interi byte, short, int, long o esempio: int a; //variabile chiamata "a" di tipo intero Numerici reali float, double o esempio: float b; variabile "b" di tipo reale Non numerici boolean, char o esempio: char c; variabile "c" di tipo singolo carattere queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Tipi numerici interi (1) Valori ammissibili byte {-128 ... 127} short {-32768 ... 32767} int {-2147483648 ... 2147483647} long {-9.22 E18 ... 9.22E18} queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Tipi numerici interi (2) Operazioni consentite aritmetiche +, -, *, /, %, ++, --, >> logiche (bit a bit) ^, &, |, ~, <<, >>> confronto ==, !=, >, >=, <, <= queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Tipi numerici reali Valori float {±3.403E38} 6 cifre significative double {±1.798E308} 15 cifre significative Operazioni aritmetiche (+, -, *, /) confronto (==, !=, >, >=, <, <=) queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 2 – tipi numerici scrivere un programma che: date due variabili intere "a" e "b" calcoli e visualizzi la loro somma, prodotto, differenza, rapporto date due variabili di tipo float "c" e "d" calcoli e visualizzi la loro somma, prodotto, differenza, rapporto data la variabile di tipo byte "e", che modifica occorre fare al programma per permettere di memorizzare nella variabile "e" il valore 1000? queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html if-then-else permette di verificare se una condizione è vera esempio: if (A>0) //la parola "then" è sottintesa! System.out.println("A è maggiore di 0"); else //l'else invece non è sottinteso System.out.println("A non è maggiore di 0"); se più di un'istruzione va eseguita nel then o nell'else si usano le parentesi graffe: if(A>0) { System.out.println("A è maggiore di zero"); B=Math.sqrt(A);//B contiene la radice quadrata di A } queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 3 – tipi numerici date due variabili di tipo intero X e Y se X>Y visualizzare "X è maggiore di Y" se Y>X visualizzare "Y è maggiore di X" queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 4 – tipi numerici date tre variabili intere "a", "b" e "c": se a<0 stampare il risultato di b+c se a=0 stampare il risultato di b*c se a>0 stampare il risultato di b/c nelle condizioni (ad esempio in quella dell'if) l'uguaglianza si scrive con il simbolo "==" esempio: if(a==0) serve a controllare se il valore di a è uguale a zero queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 5 scrivere un programma Java che, dato un numero intero X, visualizza sulla console la parola "pari" se il numero è pari o "dispari" se non lo è utilizzare l'operatore % che corrisponde all'operazione "resto della divisione per" ad esempio: 10%2=0 5%2=1 queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html while permette di ripetere una sequenza di operazioni fintanto che una condizione è vera esempio: int a=0; // a vale 0 while(a<10) // fintanto che a è minore di 10 { System.out.println(a+","); // visualizza a a=a+1; // incrementa a di 1 } come nel caso dell'if-then-else se la sequenza di istruzioni da ripetere è più lunga di 1 vanno usate e parentesi graffe per delimitarle queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 5b scrivere un programma Java che data una variabile intera "a" di valore positivo calcoli e visualizzi la somma di tutti gli interi positivi minori o uguali ad "a" esempio: a vale 9 il programma dovrà visualizzare 20 perché: 2+4+6+8=20 e 2<=9, 4<=9, 6<=9, 8<=9 modificare l'esercizio in modo da sommare solo gli interi positivi pari minori o uguali ad "a" queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 5c scrivere un programma Java che data una variabile intera "a" di valore positivo maggiore di 2 calcoli "a!" (cioè "a fattoriale) a!=a*(a-1)*(a-2)*......*2*1 esempio: a=4 il programma deve visualizzare 24 perché: a!=4!=4*3*2*1=24 queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Tipi non numerici: boolean Valori {false, true} Operazioni logiche (&&, ||, !) confronto (==, !=) queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 6 – tipo boolean date le variabili "a" e "b" intere e le variabili boolean: somma moltiplicazione sottrazione divisione calcolare e visualizzare il risultato delle 4 operazioni base se e solo se le corrispondenti variabili booleane hanno valore "true" queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Tipi non numerici: char Rappresentazione dei caratteri secondo lo standard Unicode Lettere di vari alfabeti arabo, armeno, bengalese, cirillico, greco, latino, ... Simboli diacritici, punteggiatura, matematici, tecnici, ... queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Tipi non numerici: char Rappresentazione su due byte Le costanti sono indicate tra apici semplici (‘a’) I valori non stampabili sono rappresentati nel formato unicode (‘\u27AF’) Operazioni confronto (==, !=, >,>=, <, <=) queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 7 – tipo char un certo contratto di lavoro può essere di tipo 'a' o 'b' se è di tipo 'a' lo stipendio mensile è di 1500€ se è di tipo 'b' lo stipendio mensile è di 2000€ assegnare ad una variabile char il tipo di contratto a seconda del tipo di contratto assegnare ad una variabile intera l'ammontare mensile dello stipendio visualizzare il reddito annuale complessivo queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Commenti Servono a documentare un programma (o una sua parte) Racchiusi da “/*” e “*/” “//” inizia un commento che termina a fine riga Usati sempre troppo poco! queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esempio max.java public class max { public static void main(String[] args) { int x,y; /* x e y sono di tipo "int"*/ x=1; y=10; if(x>y) //questo è un if-then-else! System.out.println("X"); else System.out.println("Y"); } } queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Input da tastiera per leggere dei dati da tastiera in Java si usa l'oggetto Scanner all'inizio del programma (prima della dichiarazione della classe) bisogna scrivere: import java.util.*; esempio, lettura di una variabile intera: Scanner sc = new Scanner(System.in); System.out.println("Inserire il valore di N: "); int n = sc.nextInt(); sc.close(); //l'oggetto di classe Scanner va chiuso quando non serve più queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Input da tastiera leggere un intero: int I = sc.nextInt(); leggere un double: double D = sc.nextDouble(); leggere un boolean: boolean B = sc.nextBoolean(); leggere un char: [è un caso particolare!] char C = sc.next().charAt(0); queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 7b scrivere un programma java che legge da tastiera i valori di 4 varibaili: "i" di tipo intero, "d" di tipo double, "b" di tipo boolean e "c" di tipo char il programma, dopo averli letti, deve visualizzare sullo schermo i valori delle 4 variabili queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Il tipo String non è un tipo primitivo ma una classe! si usa per trattare più di un carattere alla volta una stringa di testo (cioè una variabile di tipo String) è una sequenza di caratteri (cioè una sequenza di char) esempio: String s; //dichiarazione di una stringa s="Hello world!"; //assegnazione del valore System.out.println("valore di s: "+s); //visualizza s queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Inserimento di stringhe per inserire il valore di una stringa da tastiera: Scanner scanner = new Scanner(System.in); String s; //dichiarazione di una stringa s=scanner.next(); // <---inserimento da tastiera! System.out.println("valore di s: "+s); //visualizza s queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 7c scrivere un programma Java che: chiede di inserire il Nome chiede di inserire il Cognome visualizza la frase "Ciao <Nome> <Cognome>!" queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Confronto tra stringhe l'uguaglianza (o differenza) tra stringhe non si controlla con == e != l'uguaglianza si controlla con: nome_stringa.equals("valore"); controlla se la stringa nome_stringa vale "valore" la differenza si controlla con: !nome_stringa.equals("valore"); controlla se la stringa nome_stringa non vale "valore" queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 7d come nell'esercizio 7c richiedere l'inserimento di nome e cognome dopo aver inserito nome e cognome visualizzare: "ti chiami <nome> <cognome>, è corretto?" se l'utente inserisce "sì" terminare il programma se l'utente inserisce qualsiasi cosa diversa da "sì" ricominciare l'inserimento di nome e cognome da capo queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Array un array, o vettore, è una sequenza indicizzata di elementi tutti dello stesso tipo esempi: un array di 10 interi: o 2,4,6,8,10,12,14,16,18,20 un array di 5 char: o 'f','m','s','g','p' un array di 3 stringhe: o "casa","auto","albero" queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Array in Java un array va prima dichiarato: <tipo>[] <nome>; esempio: int[] interi; //un array di interi String[] parole; //un array di stringhe di testo poi va inizializzato usando l'operatore new, specificando quanti elementi contiene: interi=new int[10]; //l'array contiene 10 interi parole=new String[3]; //l'array contiene 3 stringhe di testo queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Array in Java si usano le parentesi quadre per accedere ai singoli elementi dell'array, numerati da zero in poi: interi[0]=0; //il primo elemento dell'array vale zero parole[2]="hello"; //il terzo elemento dell'array si può sapere quanti elementi contiene un array usando la funzione "length": interi.length; //restituisce la lunghezza dell'array: 10 parole.length; //restituisce la lunghezza dell'array: 3 queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 7e dichiarare e inizializzare un array di 10 interi utilizzando un ciclo while, chiedere in input da tastiera uno alla volta i valori dei 10 interi dopo che tutti e 10 i valori sono stati inseriti visualizzarli tutti di seguito, separati dalla virgola queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Inizializzazione diretta abbiamo visto che l'operatore new permette di creare array di qualsiasi lunghezza: studenti=new String[75]; esiste un altro modo per inizializzare un array definendo direttamente i valori che contiene: int [] array = new int[] {100,200,300}; l'istruzione sopra dichiara un array e allo stesso tempo lo inizializza con tre valori; ciò equivale a: int [] array =new int[3]; array[0]=100;array[1]=200;array[2]=300; queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 7f usando l'inizializzazione diretta dichiarare e inizializzare un array di 6 elementi interi contenente i valori 10, 22, 15, 43, 1, 18 leggere i valori dell'array con un ciclo while e visualizzarli queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 7g dichiarare un array settimana di 7 elementi di tipo String contenente i seguenti valori nell'ordine indicato: lunedì, martedì, mercoledì, giovedì, venerdì, sabato, domenica visualizzare, grazie a un ciclo while, i giorni della settimana in ordine inverso, dalla domenica al lunedì queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Scambio di valore problema: date due variabili dello stesso tipo V1 e V2 scambiare i loro valori soluzione: creare una terza variabile "di appoggio" Vapp, e poi copiare V1 in Vapp (Vapp=V1;) copiare V2 in V1 (V1=V2;) copiare Vapp in V2 (V2=Vapp) queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 7h scrivere un programma Java che: 1. 2. 3. 4. 5. date due variabili dello stesso tipo richieda l'inserimento dei loro valori da tastiera visualizzi i loro valori effettui lo scambio tra i loro valori visualizzi i loro valori dopo lo scambio queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Algoritmi di ordinamento semplice problema: dato un array di N elementi (siano numeri interi o con la virgola, o stringhe) in ordine qualsiasi ordinare gli elementi in ordine crescente (o decrescente) esistono numerose soluzioni: selection (o simple) sort bubble sort quick sort ... queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Selection (Simple) sort il più semplice algoritmo di ordinamento idea: cercare l'elemento più piccolo in tutto l'array scambiarlo con l'elemento in prima posizione partendo ora dal secondo elemento dell'array cercare di nuovo l'elemento più piccolo (ignorando quindi quello in prima posizione) scambiarlo con l'elemento in seconda posizione proseguire così fino all'esaurimento di tutto l'array queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 7i scrivere un programma Java per: definire ed inizializzare un array A contenente elementi di un qualsiasi tipo (usare la tecnica degli esercizi 7f e 7g) visualizzare il contenuto di A ordinare A usando l'algoritmo del Selection Sort visualizzare il contenuto di A queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Metodi in Java un metodo è una funzione che permette di riutilizzare lo stesso codice in più punti di un programma senza doverlo riscrivere ogni volta da capo in Java esistono due tipi di metodi: metodi statici metodi di classe (li vedremo più avanti in queste slide) queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Metodi statici il main è un metodo statico un metodo statico consiste in una sequenza di istruzioni che svolgono un determinato compito: ha un nome può avere dei parametri può restituire un valore può contenere uno o più un commenti è "simile" ad una funzione in C/C++ queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Metodi statici esempio di dichiarazione di un metodo statico: // dichiarazione di un metodo: public static tipo nome (tipo1 par1, ..., tipoN parN){ // variabili locali ... //istruzioni del metodo } queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Parametri un metodo (statico o di classe) può avere dei parametri servono a "passare" dei dati dall'esterno del metodo all'interno del metodo per ogni parametro vanno specificati: nome tipo all'interno del metodo il parametro viene gestito come una variabile locale queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Parametri esempio: public class operazioni{ public static void add(int x, int y) { System.out.println("x+y="+(x+y)); } public static void sub(int x, int y) { System.out.println("x-y="+(x-y)); } public static void main(String[] args) { int n1=10,n2=15; add(n1,n2); sub(n1,n2); } } queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Variabili locali i metodi (statici e di classe) possono utilizzare variabili: servono a memorizzare risultati intermedi dichiarate nel corpo del metodo durata temporanea: quando termina l'esecuzione del metodo, la variabile viene distrutta queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Variabili locali esempio: public class prodotto{ public static void prezzo(double g, int euro_g) { double tara=5; System.out.println("prezzo="+((g-tara)*euro_g)); } } la variabile locale "tara" viene definita e quindi può essere usata dentro al metodo "prezzo" queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Variabili di ritorno un metodo (statico o di classe) può restituire un valore (o più valori) di ritorno il valore di ritorno di un metodo viene usato dal metodo chiamante va specificato il tipo del valore restituito dal metodo se il metodo non torna nessun valore va specificato il tipo void il main è un metodo che non ritorna nulla queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html public class Test { //questo metodo calcola il //quadrato di una variabile static int quadrato(int a) { int c = a*a; return c; } public static void main(String[] args) { int i = quadrato(12); System.out.println(i); } } queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 8 scrivere un metodo statico ipocalc che date le lunghezze dei cateti di un triangolo rettangolo calcoli la lunghezza dell'ipotenusa e la restituisca chiamare il metodo statico ipocalc nel metodo main passando i valori dei cateti al metodo ipocalc e visualizzare la lunghezza dell'ipotenuta calcolata dal metodo queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 8b nell'esercizio 7i (ordinamento di un vettore) definire un metodo statico ordinaVettore con due parametri: un vettore di interi un intero che indica la lunghezza del vettore trsferire le istruzioni dell'algoritmo di ordinamento all'interno del metodo chiamare il metodo per ordinare il vettore queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 8c definire due metodi con lo stesso nome: contaVocali il primo metodo contaVocali prende in input un vettore di char e la lunghezza del vettore il secondo metodo contaVocali prende in input una stringa di testo entrambi i metodi restituiscono il numero di vocali contenute nel vettore di char (il primo metodo) o nella stringa di testo (il secondo metodo) per la stringa sfruttare i due metodi seguenti: nomeStringa.length(); che ritorna la lunghezza della stringa nomeStringa nomeStringa.charAt(N); che ritorna il carattere alla posizione N all'interno della stringa nomeStringa queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Convenzioni sui nomi le classi hanno nomi che iniziano con la lettera maiuscola metodi, attributi e variabili hanno l’iniziale minuscola se un qualsiasi nome è composto da più parole giustapposte, l’iniziale di ogni parola successiva alla prima è maiuscola int contatoreNumeroOccorrenze = 0; class CentraleTelefonica { } queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 9 – anno bisestile un anno è bisestile se è divisibile per 4 e inoltre: qualora sia divisibile per 100 deve essere anche divisibile per 400 2004 è bisestile perché è divisibile per 4 e non per 100 1900 non è bisestile perché è divisibile per 4, è divisibile per 100 ma non per 400 2000 è bisestile perché è divisibile per 4, per 100 e per 400 queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 9 – anno bisestile seguendo le convenzioni sui nomi di Java definire un metodo bisestile che dato un anno A restituisce true se l'anno A è bisestile o false altrimenti queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Modellare la realtà STATO via1: verde via2: rosso STATO motore:acceso velocità: 0 COMPORTAMENTO Parti! Frena! Sterza! queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Modellare la realtà un oggetto del mondo reale può essere modellato attraverso il suo: stato o l’insieme dei parametri caratteristici che contraddistinguono un oggetto in un dato istante comportamento o descrive come si modifica lo stato a fronte degli stimoli provenienti dal mondo esterno queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Programmazione ad oggetti paradigma di programmazione basato sulla nozione di oggetto: stato o un insieme di attributi che determinano in quale stato si trova in un certo momento l'oggetto o esempio: l'oggetto semaforo ha un attributo "colore" che può valere "rosso", "arancione" o "verde" comportamento o un insieme di metodi che provocano la variazione degli attributi (e quindi dello stato) dell'oggetto o esempio: dopo che l'oggetto semaforo quando si trova nello stato "rosso" per 1 minuto passa allo stato "verde" queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Classi una classe costituisce il “progetto” di un oggetto: nome della classe nomi e valori iniziali degli attributi nomi, e parametri metodi una classe non è un tipo primitivo in java una classe si definisce con: <visibilità> class <nomeClasse> { ..... } dove la visibilità può essere private o pubblic e la descrizione della classe è scritta tra le parentesi graffe queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Oggetti definita una classe, è possibile costruire uno o più oggetti di quella classe gli oggetti vengono detti “istanze” della classe in Java per costruire un oggetto si usa l'operatore new: o new NomeClasse ( ); ogni nuovo oggetto “vive” all’interno della memoria del calcolatore qui viene memorizzato il suo stato oggetti differenti occupano spazi differenti nella memoria queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Operatore new a differenza delle variabili di tipo primitivo gli oggetti vanno esplicitamente creati prima di essere usati esempio: String nome="mario"; definisce ed assegna un valore alla stringa mario mentre: className ABC; definisce una variabile di classe "className" prima di poter usare la variabile ABC dovremo creare un nuovo oggetto di classe "className": ABC=new className(); queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Stato di un oggetto un oggetto ha un proprio stato: insieme dei valori assunti dagli attributi dell’oggetto i metodi di un oggetto permettono di modificarne lo stato all’atto della costruzione di un oggetto, occorre assegnare un valore ai diversi attributi è il compito di un metodo particolare, detto costruttore queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Attributi gli attributi di un oggetto ne descrivono lo stato sono delle variabili "locali" (di qualunque tipo) esempio: public class Automobile{ public String marca,modello; public int cilindrata; Passeggero[] pass; } un oggetto di classe "Automobile" è descritto da una "marca" e un "modello" di tipo testuale, da una "cilindrata" di tipo numerico intero e da un array "pass" di oggetti di classe Passeggero queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Metodi (di classe) abbiamo visto in precedenza cosa sono e come si usano i metodi statici un metodo di classe è una "funzione" applicabile solo agli oggetti della classe in cui viene dichiarato ha accesso a tutti gli attributi della classe conseguenza: i metodi servono a modifica lo stato di un oggetto esempio: public class Studente{ public int numeroEsami; //attributo public void superaEsame(){ //metodo numeroEsami=numeroEsami+1; } } queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Metodi un metodo (di classe), in generale, può operare liberamente sull’oggetto su cui viene invocato modificandone lo stato (cioè gli attributi) chiamando altri metodi effettuando calcoli restituendo risultati queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Eseguire un metodo a partire dal nome di un oggetto di una certa classe, è possibile eseguire i relativi metodi con la notazione: nomeOggetto.nomeMetodo(...); nelle parentesi si indicano gli eventuali parametri il metodo è costituito da un insieme di istruzioni il chiamante attende il completamento del metodo, poi prosegue la propria elaborazione queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Parametri un metodo (di classe o statico) può avere parametri internamente, appaiono come variabili locali il loro valore viene fornito dal chiamante come le variabili, i parametri hanno un tipo nel caso di parametri di tipo primitivo all’interno del parametro viene memorizzata una copia del valore indicato dal chiamante eventuali modifiche compiute dal metodo sul valore non si ripercuotono sul chiamante se il tipo non è primitivo (una classe ad esempio) il parametro contiene una copia del riferimento all’oggetto passato come parametro le eventuali modifiche sullo stato dell’oggetto sono visibili al chiamante queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Valori di ritorno i metodi (di classe o statici) possono restituire un valore il tipo del valore ritornato viene dichiarato prima del nome del metodo double calcolaPerimetro() { … } il valore ritornato può essere assegnato ad una variabile occorre che la variabile sia compatibile con il tipo del valore ritornato alcuni metodi non ritornano nulla in questo caso dichiarano di ritornare il tipo predefinito void void setRaggio(double r) { … } queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Metodi di tipo set e get metodi di tipo set servono ad alterare lo stato dell’oggetto di solito hanno parametri e non ritornano nulla per convenzione hanno un nome tipo: o void setXyz(<parametri>); metodi di tipo get permettono di conoscere lo stato di un oggetto di solito non hanno parametri e ritornano il valore letto per convenzione hanno un nome tipo: o <tipoRitornato> getXyz(); queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Costruttore metodo che inizializza gli attributi di una classe sintassi particolare: ha lo stesso nome della classe non indica nessun tipo di ritorno, non restituisce valori class Cerchio { double r; Cerchio() { r=1.0; } } queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Costruttore e parametri il costruttore assegna valori di default agli attributi se ha dei parametri può usarli per assegnare dei valori particolari agli attributi chi invoca il costruttore in questo caso deve fornire i parametri richiesti una classe può avere molti costruttori sono distinguibili attraverso il numero ed il tipo di parametri richiesti queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Costruttore e parametri class Poligono { double lato; int numeroLati; Poligono(int n) { numeroLati=n; lato=1.0; } Poligono p; } p= new Poligono(3); queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Classi pubbliche se una classe C è public: si possono istanziare oggetti di classe C in qualsiasi altra classe esempio: public class Bicicletta{ public String nomeModello; ... } file: Bicicletta.java //la classe Veicolo può istanziare oggetti di classe Bicicletta public class Veicolo{ public Bicicletta [] biciclette; } file: Veicolo.java queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Classi private se una classe C è privata: si possono istanziare oggetti di classe C solo all'interno della classe X in cui la classe C è definita esempio: //la classe Veicolo può istanziare oggetti di public class Veicolo{ private class Bicicletta{ public String nomeModello; ... } public Bicicletta [] biciclette; } file: Veicolo.java queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Classi private se una classe C è privata: non si possono istanziare oggetti di classe C in altre classi esempio: private class Bicicletta{ public String nomeModello; ... } file: Bicicletta.java //la classe Veicolo può istanziare oggetti di classe Bicicletta public class Veicolo{ public Bicicletta [] biciclette; } file: Veicolo.java queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Attributi pubblici se un attributo è pubblico: si può accedere al valore di quell'attributo (leggerlo, modificarlo) da qualsiasi classe esempio: public class Bicicletta{ public String nomeModello; ... } public class Veicolo{ public Bicicletta B1; Veicolo(){ B1.nomeModello="nessuno"; } } file: Bicicletta.java file: Veicolo.java queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Attributi private se un attributo è privato: si può accedere al valore di quell'attributo (leggerlo, modificarlo) solo nella classe di cui fa parte esempio: public class Bicicletta{ file: Bicicletta.java private String nomeModello; public void setNomeModello(String nome){ nomeModello=nome; } } public class Veicolo{ public Bicicletta B1; Veicolo(){ B1.setNomeModello("nessuno"); } } file: Veicolo.java queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Attributi private se un attributo è privato: si può accedere al valore di quell'attributo (leggerlo, modificarlo) solo nella classe di cui fa parte esempio: public class Bicicletta{ file: Bicicletta.java private String nomeModello; public void setNomeModello(String nome){ nomeModello=nome; } } public class Veicolo{ public Bicicletta B1; Veicolo(){ B1.nomeModello="nessuno"; } } file: Veicolo.java queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Operatore this la parola this in Java indica l'oggetto nel quale ci si trova si solito è sottinteso ma si può scrivere esplicitamente per rendere più chiaro il programma esempio: public class Bicicletta{ private String nomeModello; public void setNomeModello(String nomeModello){ this.nomeModello=nomeModello; } } queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 10 definire una classe Studente con i seguenti attributi pubblici: nome, cognome, matricola (testuali) anno di iscrizione e numero di esami superati (numerici) definire: un costruttore che, dati nome, cognome e matricola dello studente, assegni di default ogni nuovo studente al primo anno con zero esami superati un metodo rinnovaIscrizione() che aumenta di 1 il numero di anno di iscrizione dello studente un metodo esameSuperato() che aumenta di 1 il numero di esami superati dello studente in un file separato definire il main ed istanziare uno o più oggetti di classe studente e testare il corretto funzionamento di costruttore e metodi queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 10b nell'esercizio 10 rendere privati gli attributi nome, cognome e matricola definire dei pubblici metodi per leggere il contenuto degli attributi privati: getNome() getCognome() getMatricola() modificare di conseguenza il main in modo da usare i 3 metodi definiti sopra queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Array di oggetti come con i tipi primitivi anche con le classi si possono definire degli array: Automobile[] parcoAuto; la variabile parcoAuto è un array di oggetti di classe Automobile l'inizializzazione si fa come per i tipi primitivi: parcoAuto=new Automobile[10]; la variabile parcoAuto è un array di 10 oggetti di classe Automobile ma trattandosi di oggetti ogni singolo elemento dell'array va poi creato a parte: while (c<10){ parcoAuto[c]=new Automobile(); c=c+1; } queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 11 si consideri la seguente interazione: Quanti professori? 2 Inserimento professore numero 0: Nome? maurizio Congome? mancini Email? [email protected] Dipartimento: dibris Anzianità: 8 Inserimento professore numero 1: Nome? mario Congome? rossi Email? [email protected] Dipartimento: dime Anzianità: 2 Quanti studenti? 3 Inserimento studente numero 0: Nome? luigi Congome? bianchi Email? [email protected] Matricola: 123456 Inserimento studente numero 1: Nome? giuseppe Congome? verdi Email? [email protected] Matricola: 1111 Inserimento studente numero 2: Nome? antonio Congome? gialli Email? [email protected] Matricola: 9999999 ***Università Professori Nome: maurizio Cognome: mancini Email: [email protected] Dipartimento: dibris Anzianità: 8 Nome: mario Cognome: rossi Email: [email protected] Dipartimento: dime Anzianità: 2 Studenti Nome: luigi Cognome: bianchi Email: [email protected] Matricola: 123456 Anno di iscrizione: 1 Esami sostenuti: 0 Nome: giuseppe Cognome: verdi Email: [email protected] Matricola: 1111 Anno di iscrizione: 1 Esami sostenuti: 0 Nome: antonio Cognome: gialli Email: [email protected] Matricola: 9999999 Anno di iscrizione: 1 Esami sostenuti: 0 queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html Esercizio 11 scrivere un programma Java che permetta di inserire professori e studenti di un'università e poi li visualizzi ogni professore o studente: ha nome, cognome, indirizzo email ogni studente: ha matricola, anno di iscrizione, esami sostenuti ogni professore: appartiene ad un dipartimento, ha una certa anzianità per le caratteristiche comuni (nome, cognome, email) definire un'unica classe "anagrafica" da usare sia per i professori che per gli studenti queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html