Sei sulla pagina 1di 51

Corso di

TECNOLOGIE
IntroduzioneINTERNET E WEB
al Linguaggio
Corso di Laurea Java
in Ingegneria Gestionale

Prof. Marco Mamei


Il linguaggio Java
o Il linguaggio Java è una versione semplificata (e in certi aspetti
potenziata) del linguaggio C++ (versione ad oggetti) del C. è
molto simile al linguaggio C# (che deriva da Java). Molto usato
per:
o Applicazioni Web
o Applicazioni Server
o Android

o Managaged programming language. Non esegue


direttamente sull'hardware della macchina, ma esegue su una
piattaforma (Java) virtual machine che fornisce un livello di
astrazione più elevanto

o Il codice Java viene compilato in un formato intermedio detto


bytecode che a sua volta viene interpretato dalla JVM.
o La JVM permette di eseguire uno stesso codice compilato
su più piattaforme.
Linguaggio Imperativo
o Java è un linguaggio cosiddetto imperativo. Imperativo vuol
dire che è orientato al comando.
o In pratica un programma è composto da una sequenza di
comandi che vengono eseguiti uno dopo l'altro.

int x = 3;
int y = x + 4;
System.out.println(y);
int z = x / y;
System.out.println(z);
...
Comandi
o I comandi Java sono composti da una sequenza di:
o parole riservate esempi: public, while, for;
o identificatori esempi: Nomevariabile,X;
o costanti esempi: 3, 4.515E-9, "Ciao";
o simboli speciali o operatori esempi: + - / [ ] == { };
o separatori esempi: lo spazio bianco

o che vengono combinate per indicare (comandare) cosa fare.


o Tutti gli elementi sono case-sensitive

o Oltre ai comandi ci possono essere dei commenti che non


vengono considerati dal computer (compilatore), ma servono per
chiarire il programma, sia per noi che per altri.
o Per inserire un commento in Java basta racchiuderlo tra /* comment
*/ Questo tipo di commento si può estendere per varie righe di
codice.
o In alternativa posso usare la sintassi // comment. Tutti i caratteri
successivi a fino alla fine linea sono ignorati.
Sintassi Java
o I comandi permettono invece di eseguire azioni complete una
dopo l'altra. Però, i comandi in Java non possono però stare
da soli: un comando deve essere sempre contenuto dentro un
metodo. Di metodi parleremo diffusamente più avanti.
o A loro volta nemmeno i metodi possono stare da soli. È
necessario che vengano scritti all'interno di classi. Le classi
sono la prima unità sintattica completa di un programma Java.
Un programma in Java infatti è composto da tante classi. Una
classe può essere un programma completo, che posso
compilare e mandare in esecuzione.
Esempio

public class Hello {

public static void main(String[] args) {


int x = 3+2;
int y = 5;
int z = x + y;
System.out.println(x+z);

}
Corso di
TECNOLOGIE INTERNET
JDK ed Eclipse E WEB
Corso di Laurea in Ingegneria Gestionale

Prof. Marco Mamei


Corso di
TECNOLOGIE
CostantiINTERNET
e VariabiliE WEB
Corso di Laurea in Ingegneria Gestionale

Prof. Marco Mamei


Costanti e variabili
o Una costante è un dato che non cambia valore per tutta la
durata del programma.
o 3, "ciao", 3.14

o Una variabile è un dato usato e/o modificato da un


programma. La dichiarazione di una variabile associa un
identificatore (nome) ad un tipo
o int x;

o Java è un linguaggio di programmazione con un controllo dei


tipi forte. Questo significa che le variabili possono contenere
soltanto un certo tipo di dati. Quindi si fa distinzione tra un
intero, una stringa o altro definito dall’utente.

o Per ottenere questo risultato occorre specificare il tipo che può


essere contenuto in una variabile. In pratica non si può
utilizzare una variabile se prima non è stata dichiarata.
Dichiarazioni
o Dichiarare una variabile significa specificare il suo tipo:
int i;
o I vari tipi che si possono utilizzare li vedremo tra poco
(int=intero, numero senza virgola)

o Una dichiarazione può essere seguita da una espressione di


inizializzazione (opzionale):
String s = "hello";
int j=3;

o Cioè si può specificare il valore iniziale della variabile che si sta


dichiarando.
Assegnamento
o L‘assegnamento è l’operazione con cui si dà un valore ad una
variabile e si esegue in Java con l’operatore =. Questo non va
confuso con il chiedersi se una variabile è uguale ad un certo
valore (operazione di confronto) che in Java si fa con il doppio
uguale ==.
o Tipi primitivi:
int a, b;
String c;
a=3; b=2; c="Pippo";
a=b; IL VALORE IN QUEL MOMENTO DI B VIENE COPIATO IN A
CHE QUINDI DA QUEL MOMENTO VALE 2 COME B
b=1;
ULTERIORI CAMBIAMENTI IN B NON VENGONO
DUPLICATI SU A. QUINDI QUI A VALE ANCORA 2 E B
VALE 1. SOLO SE SUCCESSIVAMENTE HO DI NUOVO
A=B ALLORA I DUE VALORI SARANNO DI NUOVO UGUALI
Corso di
TECNOLOGIE
Tipi INTERNET
di Dato E WEB
Corso di Laurea in Ingegneria Gestionale

Prof. Marco Mamei


Tipi di dato
o All’interno di variabili locali, parametri e campi mettiamo dei dati
che hanno un tipo. In Java ci sono due gruppi di tipi di dato:
o tipi di dato primitivi
o tipi di dato derivati, ovvero le classi.

o I tipi primitivi sono in numero fisso e fissati dalla specifica del


linguaggio Java.
o int, double, char

o Quando dobbiamo operare su un tipo primitivo, lo dobbiamo


mettere in una variabile che serve a maneggiarli.

o Le classi servono per descrivere elementi complessi non


riconducibili a un tipo primitivo (le vedremo più avanti)
Tipi primitivi (1/2)
o I tipi di dato intero sono quattro. Il tipo di dato più usato è
l'intero vero e proprio, int, che ha dimensione 32 bit. Se
occorrono dei tipi di dato di dimensione inferiore si può ricorrere
a byte e short, e sono rispettivamente a 8 e 16 bit. Quando
invece occorrono interi di grandi dimensioni, si ricorre al tipo
long che ha 64 bit. Per esempio l'ora attuale viene
rappresentato in Java con il numero di secondi trascorsi dal 1
gennaio 1970, numero molto grande, che viene normalmente
contenuto in una variabile di tipo long.
o Invece i tipi di dato in virgola mobile sono solamente due, più
precisamente il float e il double. Il primo rappresenta un
numero in virgola mobile a 32 bit mentre secondo ha 64 bit
(standard IEEE 754). Con questa rappresentazione è possibile
specificare numeri decimali approssimati, ma con un campo di
valori più grande rispetto a quello dei numeri interi.
Tipi primitivi (2/2)
o Rimangono da esaminare altri due tipi di dato.

o Il primo è il boolean, che rappresenta semplicemente un


valore vero o falso, che viene utilizzato nei calcoli che servono
verificare condizioni. I soli valori possibili sono appunto true e
false.

o L'altro tipo di dato da esaminare è il carattere char. Per molti


versi il carattere è sostanzialmente un numero intero (codice
ASCII), infatti è molto facile convertirlo a intero e viceversa.
Costanti
o Intere:
o Normali: 17, -2, 2342, …
o Lunghe: 17L, -2L, …
o Virgola mobile:
o Double: 17.2, -12.3, 342D, … (se il numero ha il . non c’è
bisogno, altrimenti uso D per specificare che è double e non
int)
o Float: 17.2F, -12.3f, …
o Booleane:
o true e false
o Caratteri:
o Racchiusi da singoli apici ‘ ‘: ‘i’, ‘?’, ‘K’, ‘1’ (da non
confondere con la costante intera 1, senza apici)
o Sequenze di escape: è un insieme di caratteri che ne
rappresenta uno speciale, ad esempio uno di controllo.
Inizia con il carattere backslash \. Useremo soprattutto ‘\n’
per andare a capo.
Operatori (1/2)
o Gli operatori agiscono sui tipi primitivi:
o RELAZIONALI: > >= < <= != ==
Gli operatori relazionali sono quelli che servono a fare dei
confronti. Uguale, maggiore o uguale, diverso, ecc. In
particolare notare la sintassi del diverso !=.
o ARITMETICI: + - * / %
Gli operatori aritmetici sono quei soliti, e in più c'è l'operatore %
che serve ad indicare il resto della divisione (ovvero il modulo).
Attenzione: % solo per interi, e / per interi è diverso che per
virgola mobile (5/2=2, 5.0/2=2.5)
o BINARI: gli operatori binari lavorano sui bit, ovvero sulla
rappresentazione di un numero come una sequenza di zeri e
uni. NON LI USEREMO
o LOGICI: && || !
Gli operatori logici servono a mettere in sequenza dei confronti.
&& = and logico (Boole), || = or logico (Boole) !=negato (Boole)
Operatori (2/2)
o INCREMENTO/DECREMENTO: ++ --
++ incrementa di 1 il valore della variabile, -- lo decrementa di
1. a++ è equivalente ad a=a+1 ma più compatto

o ASSEGNAMENTO: = += -= *= /= …
Oltre all’assegnamento già visto (simbolo =) ci sono varie forme
contratte:
a+=3 a=a+3
a*=b a=a*b
Stringhe

Le stringhe di testo (es. "Marco", "La Divina Commedia") non sono tipi
primitivi.
Tuttavia vista la loro versatilità le introduciamo ora come se fossero tipi
primitivi.
Dichiarazione e assegnamento
– String x = "marco";

Concatenazione (operatore +)
– String y = x + " mamei";

Confronto
– NON si usa ==
– Utilizziamo un metodo (vedi dopo)
boolean a = y.equals(x); // boolean a = y == x;
Casting
Il casting è l'operazione con cui si converte una variabile da un tipo di
dato a un altro:
public class Main {
public static void main(String[] args) {
float a = 6.6;
int b = (int)a;
}
}

Un tipo di casting particolare è la conversione da stringhe a numeri


corrispondenti

public class Main {


public static void main(String[] args) {
String a = "3.14";
double p = Double.parseDouble(a);
}
}
Esempio

public class Main {


public static void main(String[] args) {
int a = 6;
int b = 4;
int c = a * b;
b = b * a;
System.out.println(b);

double p = 3.14;
System.out.println(p);

int k = (int)p;
System.out.println(k);

boolean x = true && false;


System.out.println(x);
}
}
Esempio

public class Main {


public static void main(String[] args) {
String x = "marco";
String y = "mamei";
String z = x+" "+y;
System.out.println(z);
}
}
Corso di
TECNOLOGIE
ErroriINTERNET
in Java E WEB
Corso di Laurea in Ingegneria Gestionale

Prof. Marco Mamei


Gli Errori in Java
Errori di compilazione
– Errori di sintassi
– Variabili duplicate
– Type mismatch: cannot convert….

Errori run time


– È normale che ci siano! Buona parte della programmazione consiste
nel trovare, capire e correggere questi errori!
– DivisionByZero
– NumberFormatException
Corso di
TECNOLOGIE
Input OutputINTERNET E WEB
(I/O) - Console
Corso di Laurea in Ingegneria Gestionale

Prof. Marco Mamei


Input Output (I/O)
Argomento vasto che richiederebbe grande approfondimento.
È l'insieme delle tecniche per acquisire valori dall'esterno del programma
(input) e comunicare valori dell'elaborazione all'esterno del programma
(output).
– IO tramite console (leggo da tastiera e scrivo a monitor)
– IO tramite file (leggo e scrivo su file)
– IO tramite rete (leggo e scrivo informazioni sulla rete)
– IO tramite interfacce grafiche

Output
– System.out.print(….);
– System.out.println(….);
– Stampo a video il valore di costanti, variabili, o il risultato di espressioni
Input
– Scanner in = new Scanner(System.in);
– in.nextLine();
– Leggo da testiera una stringa.
Importare Classi Esterne
È un concetto che vedremo meglio in seguito

I comandi [le classi] Java sono organizzate in gruppi [package] di


funzionalità
– Comandi [classi] per accedere ai file
– Comandi [classi] per memorizzare informazioni
– Comandi [classi] per la grafica
– …
I comandi [la classe] Scanner è contenuta nel gruppo [package] chiamata
java.util

Per poter usare la classe è necessario importare il comando [classe]


Scanner prima di usarla

import java.util.Scanner; deve esere inserito fuori dalla dichiarazione di


classe per poter poi usare i comandi Scanner all'interno del main.
Esempio

public class Main {


public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x = Integer.parseInt(in.nextLine());
float y = Float.parseFLoat(in.nextLine());
float z = y * x;
System.out.println(x+" * "+y+" = "+z);
}
}
Corso di
TECNOLOGIE INTERNET E IF
Istruzione Condizionale WEB
Corso di Laurea in Ingegneria Gestionale

Prof. Marco Mamei


Istruzione condizionale IF

o Cominciamo a vedere le strutture di controllo. Queste


permettono di modificare l’esecuzione sequenziale del
programma.
o Sintassi:
if (<condizione booleana>)
<comando>
o Attenzione
o Niente ; dopo l'if
o parentesi tonde per rinchiudere l’espressione

o Esempio: if (a>1) b=2;


o Se a è maggiore di 1, allora nella variabile b viene messo
il valore 2, altrimenti non si fa nulla.
Esempio

public class Main {


public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x = Integer.parseInt(in.nextLine());
if(x > 1000)
System.out.println("Hai inserito un valore
grande");
System.out.println("fine");
}
}
Blocco di Comandi e Comandi Composti
Il comando IF condiziona un altro comando.
Se voglio far sì che il comando IF condizioni più di un comando, posso
creare un blocco di comandi. Cioè un insieme di comandi racchiusi da
parentesi graffe

if (a>1) { if (a>1)
a=3;
b=2;
VS. a=3;
b = 2;
}

Posso innestare diversi comandi IF. Ogni comando condiziona quello


successivo. I comando come l'IF che hanno questo comportamento si
chiamano comandi composti.
if (a>1){
if (a>1)
if (b==2) {
if (b==2)
if(c==3)
= if(c==3) {
d=1;
d=1;
}}}
Else

o È anche possibile indicare direttamente un alternativa alla condizione if


tramite la parola chiave else

if (<condizione>)
<comando1>
else <comando2>

o È equivalente a

if (<condizione>)
<comando1>
if (!<condizione>)
<comando>
Esempi Istruzione condizionale IF
Algebra di Boole

o La condizione di un if può essere composta a sua volta.


Se voglio impostare c=22 SE a=2 E b<7, scriverò:
if (a==2 && b<7)
c=22;

o Algebra utile per gestire le condizioni vere o false


o Le operazioni di base dell’algebra sono:
• somma o OR logico
• prodotto o AND logico
• complemento o NOT logico
o Le tabelle di verità di queste operazioni sono le seguenti:

OR F V AND F V NOT
F F V F F F F V
V V V V F V V F
Esempio

public class Main {


public static void main(String[] args) {
int a = 6;
int b = 4;
if(a == b)
System.out.println("Uguali");

boolean x = true;
if(x && 3 > 4) {
System.out.println("A");
}
else
System.out.println("B");
}
}
Corso di
TECNOLOGIE INTERNET
Istruzioni Ripetitive E WEB
- Cicli
Corso di Laurea in Ingegneria Gestionale

Prof. Marco Mamei


Istruzioni ripetitive

o la ripetizione consiste di una istruzione da ripetere, detta anche


corpo del ciclo, logica di controllo della ripetizione.

o Due modalità di ripetizione:


basata sul conteggio
basata sul verificarsi di una condizione
Istruzione WHILE
while(<espr>)
<comando>

Diagramma di flusso:

o Viene valutata l’espressione (condizione del ciclo), e se il valore è diverso da


zero (vero), viene eseguita l'istruzione (corpo del ciclo).
o Al termine dell'istruzione l’espressione viene di nuovo valutata per decidere
se effettuare un'altra ripetizione.
o n+1 valutazioni della condizione e n ripetizioni, con n≥0.
o problema della terminazione: affinché una istruzione ripetitiva possa terminare
è necessario che l'istruzione ripetuta modifichi almeno una delle variabili
coinvolte nella espressione di controllo.
Istruzione DO WHILE
do
<comando>
while(<condizione>) ;
Diagramma di flusso:

o L'istruzione do while differisce da while in quanto la valutazione


dell’espressione viene effettuata dopo la ripetizione
o la prima ripetizione viene eseguita comunque: si potranno quindi avere n
valutazioni della condizione e n ripetizioni, con n≥1.
o È sempre possibile ricondurre una porzione di programma con do while ad
una con while, ma talvolta la scrittura con do while è più “naturale”,
poiché l'espressione di controllo può assumere valori validi durante la prima
esecuzione del ciclo.
Blocco di Comandi e Comandi Composti
Anche le istruzioni ripetitive sono comandi composti.
Se voglio far sì che il ciclo condizioni più di un comando, posso creare un
blocco di comandi. Cioè un insieme di comandi racchiusi da parentesi
graffe

while(i<10) { while(i<10)
a+=i;
a+=i;
i++
VS. i++
}

Posso innestare diversi cicli. Ogni comando condiziona quello successivo.

while(i<10) {
while(i<10) while(j<10) {
a+=i*j;
while(j<10) {
a+=i*j;
VS. j++;
j++;i++; }
} i++;
}
Esempio
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x;
do {
x = Integer.parseInt(in.nextLine());
} while(x < 4);

}
}
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x;
while(x != 0) {
x = Integer.parseInt(in.nextLine());
}

}
Istruzione FOR (1/2)
La semantica dell'istruzione for è la seguente:
for (<espressione1>;<espressione2>;<espressione3>)
<comando>

è equivalente a
<espressione1>;
while (<espressione2>) {
<comando>
<espressione3>;
}

o for, “specializzato” per il controllo del numero di ripetizioni. variabile


di controllo che assume tutti i valori compresi fra una espressione
iniziale ed una espressione finale:
espressione1: inizializzazione variabile di conteggio
espressione2: valore finale della variabile di conteggio
espressione3: incrementa o decrementa la variabile di conteggio
Istruzione FOR (2/2)
o Naturalmente, affinché la variabile di controllo assuma tutti i
valori compresi fra l’espressione iniziale e quella finale, il valore
della variabile di controllo non deve essere modificato
esplicitamente con istruzioni di assegnamento nel corpo del
ciclo; in questo modo al termine delle ripetizioni il valore della
variabile di controllo contiene il valore successivo o precedente
al valore finale.
o Posso associare più istruzioni per ciascuna delle 3 espressioni
del for separandole con una virgola , (il punto e virgola ; separa
tra loro le 3 espressioni):
for (i=0, j=0; i<10 && j<20; i=i+1, j=j+2)
<comando>
o <espressione1> può anche essere una dichiarazione. Ovvero
posso scrivere for(int i=0; ... ; ...). La variabile i
dichiarata "vive" fino alla fine del blocco che segue il for.
Esempio

public class Main {


public static void main(String[] args) {
int sum = 0;
Scanner in = new Scanner(System.in);
for(int i=0; i<10;i++) {
sum += Integer.parseInt(in.nextLine());
}
System.out.println(sum);
}

public class Main {


public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int i;
for(i=0; i<10;i++) {
Integer.parseInt(in.nextLine());

}
}
Break e Continue
All'interno di un ciclo posso usare dei comandi per alterare il flusso di
esecuzione del ciclo stesso
Il comando break; comporta l'uscita dal ciclo stesso
Il comando continue; interrompe l’esecuzione della singola iterazione,
saltando le istruzioni che seguono per riprendere da capo il blocco di
istruzioni, all’iterazione successiva.

for(int i=0;i<100;i++) {
if(i%2 == 0) break;
System.out.println(i);
}

for(int i=0;i<100;i++) {
if(i%2 == 0) continue;
System.out.println(i);
}
Corso di
TECNOLOGIE INTERNET
Visibilità delle E WEB
Variabili
Corso di Laurea in Ingegneria Gestionale

Prof. Marco Mamei


Visibilità delle variabili 2/2
La visibilità di una variabile stabilisce quando quella varabile esiste / è
accessibile all'interno del nostro programma.

int a = 4;
a++;
a = 5;
int b = 0;
a += b;

Le cose sono leggermente più complicate quando parliamo di blocchi di


comandi
Visibilità delle variabili 2/2
o Le variabili dichiarate dentro un blocco hanno visibilità
(esistono/possono essere accedute) solo nel blocco
int a = 4; int a = 4;
if(a==4) { int b;
int b = 5; if(a==4) {
System.out.println(b); b = 5;
} System.out.println(b);
System.out.println(b); }
System.out.println(b);

int a = 4;
int b;
if(a==4) {
int b = 5;
System.out.println(b);
}
System.out.println(b);
Esempi

for(int i=0; i<10;i++) {


System.out.println(i);
}
System.out.println(i);

int i;
for(i=0; i<10;i++) {
System.out.println(i);
}
System.out.println(i);

int i;
for(int i=0; i<10;i++) {
System.out.println(i);
}
System.out.println(i);
o Regole per la visibilità:
1. Una variabile può essere utilizzata (cioè è visibile) solo dopo la sua
definizione
2. Le variabili definite in un ambiente (blocco o metodo) sono visibili in tutti
gli ambienti in esso contenuti
3. All’interno di uno stesso ambiente non posso avere due variabili con
lo stesso nome
4. In ambiente distinti posso avere variabili con lo stesso nome, anche
di tipo diverso
5. Se in un ambiente sono visibili più variabili con lo stesso nome, il nome si
riferisce a quella più vicina al punto di utilizzo