Il linguaggio Java - mauriziomancini.org

annuncio pubblicitario
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
Scarica