programmi java - maurizio mancinijava è un linguaggio ad oggetti l'unità minima di...
TRANSCRIPT
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
ProgrammiJava
§ 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
CodiceSorgente
§ i programmi Java sono scritti all'interno di "classi" § ogni classe è definita in un file di testo con
estensione .java § il nome del 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
Unesempio
public class HelloWorld { // Il programma più semplice
public static void main(String[] args) { // Stampa un messaggio sul video
System.out.println(“Hello, world!”); }
}
HelloWorld.java
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Compilazione
J
.java Codice
sorgente
1001 0110 110..
.class ByteCode
Scrittura Compilazione
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Ilcompilatore
§ traduzione del sorgente in bytecode § comando:
javac HelloWorld.java § in Eclipse la compilazione è automatica e
nascosta all'utente
J 1001 0110 110..
Compilatore
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Ambien:disviluppo
§ il codice sorgente Java è un testo semplice § un editor di testo qualsiasi è sufficiente (Notepad)
§ si possono usare ambienti integrati per lo sviluppo (IDE) § offrono strumenti per la scrittura, 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
Stru=uradiunaclasse
§ una classe ha: § un nome (che coincide col nome del file .java) § un insieme di attributi (volendo vuoto) § un insieme di metodi (volendo vuoto)
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Schemadiunaclasse
NomeClasse
tipo1 nomeAttributo1 .... tipoN nomeAttributoN
metodo1 .... metodoM
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Unaclassevuota
§ l'esempio più semplice di classe:
ClasseVuota
(insieme vuoto di attributi e metodi)
public class ClasseVuota{ }
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Primeclassieilmetodomain
§ a scopo didattico è utile inizialmente considerare delle classi contenenti: § zero attributi § un solo metodo: il metodo "statico" main
§ dopo i primi programmi verranno considerate classi con insiemi non vuoti di attributi e metodi diversi dal metodo main
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Primeclassieilmetodomain
NomeClasse
(insieme vuoto di attributi)
metodo main
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Ilmetodomain
§ il metodo main: § è una "funzione", un pezzo di codice Java § è statico, cioè non dipende dall'oggetto all'interno del
quale si trova (vedremo i metodi statici più avanti) § è pubblico (vedremo cosa significa più avanti) § non ritorna nulla (void) § riceve in input un array di stringhe § viene richiamato automaticamente nel momento in cui
si avvia il programma Java § sintassi:
§ public static void main(String [] args){}
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Esercizio1
§ definire una classe con il solo metodo main che scrive sulla console di output la stringa "Hello, world!"
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Esercizio1– passo1
§ per prima cosa disegno lo schema della classe:
HelloWorld
main
System.out.println("Hello, world!");
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Esercizio1– passo2
§ poi inizio a tradurre lo schema in un programma Java § la cornice più esterna diventa l'istruzione class:
HelloWorld
main
System.out.println("Hello, world!");
public class HelloWorld { }
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
§ poi considero il metodo main e il suo contenuto:
Esercizio1– passo3
HelloWorld
main
System.out.println("Hello, world!");
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world!"); }
}
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Dichiarazionedivariabile
§ precede obbligatoriamente l’utilizzo di una variabile
§ sintassi alternative: § <tipo> <nome>;§ <tipo> <nome> = <valoreIniziale>;
§ esempi § char c; § int i = 10; § long l1, l2;
Opzionale
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Tipi
§ variabili (e parametri dei metodi, che vedremo più avanti) sono caratterizzati da un tipo che ne precisa/limita l’uso
§ le variabili possono contenere solo valori conformi al proprio tipo
primitivi o base
aggregati
byte omogenei eterogenei int
array classi
boolean char long
double short float
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Tipibase
§ numerici interi § byte, short, int, long
§ esempio: int a; //variabile chiamata "a" di tipo intero
§ numerici reali § float, double
§ esempio: float b; variabile "b" di tipo reale
§ non numerici § boolean, char
§ 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
Tipinumericiinteri
§ 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
Tipinumericiinteri
§ operazioni ammissibili § aritmetiche
+, -, *, /, %, ++, --, >> § logiche
^, &, |, ~, <<, >>> § confronto
==, !=, >, >=, <, <=
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Tipinumericireali
§ valori ammissibili: § float {±3.403E38}
6 cifre significative § double {±1.798E308}
15 cifre significative § operazioni ammissibili:
§ aritmetiche (+, -, *, /) § confronto (==, !=,
>, >=, <, <=)
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Usarelevariabili
§ si può dichiarare una variabile ovunque nel corpo di un metodo § la "visibilità" è limitata al blocco di istruzioni in cui è
dichiarata § le variabili devono essere sempre inizializzate!
§ int a; § int b = a;
la variabile "a" non è stata inizializzata, e il suo valore è casuale, ma attenzione: Eclipse non segnala alcun errore!
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Usarelevariabili
§ ad una variabile può essere assegnato: § un valore esplicito § il risultato del calcolo di una formula
§ esempi § int i = 1, j = 5; //valori semplici § i = (5*j) % 10; //formula § long l = 10L; //valore semplice § char c1 = 'a', c2 = ‘\u0062’; //valori semplici § boolean b = false; //valore semplice
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Outputdida:suconsole
§ è il tipo più semplice di output § permette di visualizzare testi e numeri nella
finestra in cui è stato avviato il programma Java § formato:
§ System.out.println( ); § System.out.print( );
§ tra le parentesi scriviamo il testo e/o le variabili da visualizzare
§ esempio: § System.out.println("il valore di A è: "+A);
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Outputdida:suconsole
§ il "+" ci permette di concatenare più di un testo o variabile: § int A=10; int B=3; § System.out.println("Il prodotto di A per B è "+(A*B)+"!");
§ nell'esempio viene prima calcolato A*B e poi il testo iniziale ("Il prodotto...") viene concatenato al risultato di A*B e al testo finale ("!") prima di essere visualizzato sulla console di output
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Esercizio2–:pinumerici
§ 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", assegnare alla
variabile il valore 1000 e verificare, che Eclipse segnala un errore in corrispondenza dell'assegnazione
§ 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
§ sintassi: § if (<condizione>) {
<istruzioni da eseguire se la condizione è vera> } else { <istruzioni da eseguire se la condizione è falsa> }
§ le parentesi graffe si possono omettere nel caso racchiudano una singola istruzione
§ l'else e le relative parentesi si possono omettere (nel caso si tratta quindi di un if-then)
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
Esercizio3–:pinumerici
§ 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
Esercizio4–:pinumerici
§ 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
Esercizio5
§ 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-do
§ sintassi: while (<condizione>){ <corpo del while> }
§ le parentesi graffe si possono omettere se racchiudono una singola istruzione
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
while-do
§ 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 {//la parola "do" è sottintesa! 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
Esercizio6
§ 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
do-while
§ sintassi: do { <corpo del do> } while (<condizione>);
§ le parentesi graffe si possono omettere se racchiudono una sola istruzione
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
do-while
§ come il while-do, permette di ripetere una sequenza di operazioni fintanto che una condizione è vera ma, a differenza del while-do, questa sequenza viene eseguita almeno una volta
§ esempio: § int a=0; // a vale 0
do{ System.out.println(a+","); // visualizza a
a=a+1; // incrementa a di 1 }while(a<=10);//ripeti il Do se a è <= 10
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Esercizio7
§ scrivere un programma Java che data una variabile intera "a" di valore positivo maggiore di 2 calcoli "a!" (cioè "a fattoriale)
§ scrivere due versioni del programma: § una che utilizza il while-do § un'altra che utilizza il do-while
§ 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
Tipinonnumerici: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
Esercizio8–:poboolean
§ 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
Tipinonnumerici:char
§ Rappresentazione dei caratteri secondo lo standard Unicode § Lettere di vari alfabeti
arabo, armeno, bengalese, cirillico, greco, latino, ... § Simboli
diacritici, punteggiatura, matematici, tecnici, ... § Operazioni
§ confronto (==, !=, >,>=, <, <=)
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Esercizio9–:pochar
§ 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
Commen:
§ 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
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"); }
}
max.java
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Inputdatas:era
§ 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
Inputdatas:era
§ permette di ricevere dei dati dall'utente per memorizzarli nelle variabili del programma
§ 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
Esercizio10
§ 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:poString
§ in realtà non è un tipo base ma un aggregato costituito da una sequenza di char
§ tuttavia lo studiamo insieme ai tipi base § 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
Inserimentodistringhe
§ 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
Esercizio11
§ 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
Confrontotrastringhe
§ 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
Esercizio12
§ come nell'esercizio 11 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
§ non è un tipo base, è un tipo aggregato contenente dati omogenei
§ un array, o vettore, è una sequenza indicizzata di elementi tutti dello stesso tipo
§ esempi: § un array di 10 interi:
§ 2,4,6,8,10,12,14,16,18,20 § un array di 5 char:
§ 'f','m','s','g','p' § un array di 3 stringhe:
§ "casa","auto","albero"
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Array(ove=ori)inJava
§ sintassi: <tipo> [] <nomeArray>; <nomeArray> = new <tipo>[<numeroElementi>];
§ esempio: § int[] interi; //un array di interi§ String[] parole; //un array di stringhe di testo
§ un array 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(ove=ori)inJava
§ 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
Esercizio13
§ 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
Inizializzazionedire=a§ 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: <tipo> [] <nomeArray> = new <tipo> [] {e1, ..., eN};
§ esempio: 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
Esercizio14
§ 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
Esercizio15
§ 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
Scambiodivalore
§ 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
Esercizio16
§ scrivere un programma Java che: 1. date due variabili dello stesso tipo 2. richieda l'inserimento dei loro valori da tastiera 3. visualizzi i loro valori 4. effettui lo scambio tra i loro valori 5. 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
Algoritmidiordinamento
§ 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
Selec:on(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
Esercizio17
§ scrivere un programma Java per: § definire ed inizializzare un array A contenente
elementi di un qualsiasi tipo (usare la tecnica degli esercizi 14 e 15)
§ 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
MetodiinJava
§ 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
Metodista:ci
§ il main è un metodo statico § un metodo statico esiste indipendentemente
dall'esistenza di oggetti della classe all'interno della quale è stato definito
§ 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
Metodista:ci§ sintassi:
§ dove: § visibilità può essere: public, private, protected § se la parola static è presente si tratta di un metodo statico § il tipo può essere un qualunque tipo base o aggregato oppure il
tipo speciale void § la lista dei parametri può essere vuota
// dichiarazione di un metodo:<visibilità> [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
Variabililocali
§ 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
Variabililocali
§ esempio:
§ la variabile locale "tara" viene definita e quindi può essere usata dentro al metodo "prezzo"
public class prodotto{ public static void prezzo(double g, int euro_g) { double tara=5; System.out.println("prezzo="+((g-tara)*euro_g)); }
}
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Variabilidiritorno
§ un metodo (che sia 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
Esercizio18
§ 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
Esercizio19
§ nell'esercizio 17 (ordinamento di un vettore) definire un metodo statico ordinaVettore con due parametri: § un vettore di interi § un intero che indica la lunghezza del vettore
§ spostare 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
Esercizio20
§ 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
Convenzionisuinomi
§ 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
attaccate e senza spazi, 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
Esercizio21–annobises:le
§ 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
Esercizio21–annobises:le
§ 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
ProgrammazioneadoggeV
§ paradigma di programmazione § basato sulla nozione di oggetto:
§ stato § un insieme di attributi che determinano in quale stato si trova
in un certo momento l'oggetto § esempio: l'oggetto semaforo ha un attributo "colore" che può
valere "rosso", "arancione" o "verde"
§ comportamento § un insieme di metodi che provocano la variazione degli
attributi (e quindi dello stato) dell'oggetto § 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 base ma un tipo aggregato contenente dati non omogenei
§ 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
ClassieoggeV
§ una classe è quindi un tipo § un oggetto è una variabile di un tipo classe § può essere utile ricordare il seguente parallelo
tra tipi base e classi:
tipo base variabile classe oggetto
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
OggeV
§ 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: § 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
TipibaseVs.classi
§ a livello intuitivo: § una classe è un tipo "non-base" § un oggetto è una variabile che ha come tipo una
classe (invece di un tipo base)
tipo base
classe
variabile
oggetto
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
TipibaseVs.classi
§ esempio:
§ anche se un oggetto è comunque una variabile e che una classe è comunque un tipo (composto, non omogeneno)
TIPO VARIABILE int numero
CLASSE OGGETTO Automobile auto
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Dichiarazionediunaclasse
§ sintassi: <visibilità> class <nome>{
<visAtt1> <tipoAtt1> <nomeAtt1>; ... <visAttN> <tipoAttN> <nomeAttN>; <dichiarazione metodo1> ... <dichiarazione metodoM>
}
§ dove: § la visibilià può essere public, private o protected § gli attributi e i metodi sono tutti opzionali § le dichiarazioni dei metodi seguono la sintassi precedentemente
riportata (vedere slide sui metodi statici)
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Dichiarazionediunogge=o
§ sintassi: <classe> <oggetto>; <oggetto> = new <classe>(<parametri>);
§ dove: § la classe deve essere stata precedentemente
dichiarata § i parametri sono opzionali, dipendono dalla definizione
del costruttore della classe (vedere slide relative)
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Operatorenew
§ a differenza delle variabili di tipo base gli oggetti vanno esplicitamente creati prima di essere usati (o inizializzati)
§ tipo base: § int a=10;§ definisce ed assegna un valore all'intero "a"
§ classe: § 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
A=ribu:
§ sono delle variabili locali o interne all'oggetto § hanno un tipo ciascuna (di base o classe) § hanno una visibilità: public o private o protected
§ 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
Schemadiunaclasse(a=ribu:)
§ nello schema di una classe gli attributi vengono elencati prima dei metodi:
NomeClasse
visibilità1 tipo1 nomeAttributo1; .... visibilitàN tipoN nomeAttributoN;
(metodi)
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Usodeglia=ribu:
§ all'interno della classe § vengono richiamati come se fossero variabili locali § si possoo richiamare sia quelli pubblici che privati
§ all'esterno della una classe § si possono richiamare solo gli attributi pubblici § vengono richiamati facendo precedere il nome
dell'attributo dal nome dell'oggetto e dal'operatore "." (punto)
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Esempio
public class Automobile{ public String marca, modello; public int cilindrata;
}
Automobile
String marca, modello; int cilindrata
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Esempio§ posso definire un oggetto della classe
Automobile nel main di un'altra classe e accedere ai suoi attributi usando l'operatore "."
public class Concessionario{ public static void main (String [] args){ Automobile A; A=new Automobile(); A.marca="Opel"; A.modello="Corsa"; A.cilindrata="1200"; }
}
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Metodi(diclasse)
§ abbiamo visto in precedenza cosa sono e come si usano i metodi statici
§ la sintassi è la stessa dei metodi statici ma nel caso dei metodi di una classe la parola static va omessa
§ un metodo di classe è una "funzione" applicabile solo agli oggetti della classe in cui viene dichiarato § ha accesso a tutti gli attributi della classe (anche a
quelli privati!)
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Esempio
public class Studente{ public int numeroEsami; //attributo public void superaEsame(){ //metodo numeroEsami=numeroEsami+1; }
}
Studente
public int numeroEsami;
superaEsame
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
Dichiarazionediunmetodo
§ sintassi: <visibilità> [static] <tipo> <nome>(<parametri>){ ... }
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Eseguireunmetodo
§ 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 è definito da un insieme di istruzioni
specificate nella classe § il chiamante (chi richiama il metodo) 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 § 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
Schemadiunaclasse(metodi)Corso
private String Nome; private boolean Attivo;
cambiaStato
Attivo=NuovoStato;
boolean NuovoStato
la freccia provieniente dall'esterno indica la presenza di parametri di un metodo (e
ster
no d
ella
cla
sse)
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Schemadiunaclasse(metodi)Corso
private String Nome; private boolean Attivo;
cambiaStato
Attivo=NuovoStato;
boolean NuovoStato
(est
erno
del
la c
lass
e)
public class Corso{ private String Nome; private boolean Attivo; public void cambiaStato(boolean NuovoStato){ Attivo=NuovoStato; }
}
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Valoridiritorno
§ 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
Schemadiunaclasse(metodi)Corso
private String Nome; private boolean Attivo;
verificaStato Attivo
la freccia diretta verso l'esterno indica la presenza di un valore di ritorno per il metodo, in questo caso è il valore dell'attributo indicato sopra la freccia
(est
erno
del
la c
lass
e)
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Schemadiunaclasse(metodi)Corso
private String Nome; private boolean Attivo;
verificaStato Attivo
(est
erno
del
la c
lass
e)
public class Corso{ private String Nome; private boolean Attivo; public boolean verificaStato(){ return Attivo; }
}
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Metodidi:poseteget
§ 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:
§ 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:
§ <tipoRitornato> getXyz();
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Costru=ore
§ metodo particolare che di solito (ma non necessariamente) 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
Costru=oreeparametri
§ 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
Costru=oreeparametri
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
A=ribu: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
A=ribu:priva:
§ 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{ private String nomeModello; public void setNomeModello(String nome){ nomeModello=nome; } } 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
A=ribu:priva:
§ 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{ private String nomeModello; public void setNomeModello(String nome){ nomeModello=nome; } } public class Veicolo{ public Bicicletta B1; Veicolo(){ B1.setNomeModello("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
Esercizio22
§ 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
Esercizio23
§ nell'esercizio 22 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
ArraydioggeV
§ 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
si consideri la seguente interazione: Quanti professori? 2Inserimento professore numero 0:Nome? maurizioCongome? manciniEmail? [email protected]: dibrisAnzianità: 8
Inserimento professore numero 1:Nome? marioCongome? rossiEmail? [email protected]: dimeAnzianità: 2
Quanti studenti?
3Inserimento studente numero 0:Nome? luigiCongome? bianchiEmail? [email protected]: 123456
Esercizio24
Inserimento studente numero 1:Nome? giuseppeCongome? verdiEmail? [email protected]: 1111Inserimento studente numero 2:Nome? antonioCongome? gialliEmail? [email protected]: 9999999
***UniversitàProfessoriNome: maurizioCognome: manciniEmail: [email protected]: dibrisAnzianità: 8
Nome: marioCognome: rossiEmail: [email protected]: dimeAnzianità: 2
StudentiNome: luigiCognome: bianchiEmail: [email protected]: 123456Anno di iscrizione: 1Esami sostenuti: 0
Nome: giuseppeCognome: verdiEmail: [email protected]: 1111Anno di iscrizione: 1Esami sostenuti: 0
Nome: antonioCognome: gialliEmail: [email protected]: 9999999Anno di iscrizione: 1Esami sostenuti: 0
queste slide sono un'elaborazione delle slide di M. Mirto: http://sara.unisalento.it/~mirto/beniculturali/page3/page3.html
Esercizio25
§ 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