72
Corso Base Maurizio Cozzetto Lezione 1

Java lezione1

Embed Size (px)

Citation preview

Page 1: Java lezione1

Corso Base

Maurizio Cozzetto

Lezione 1

Page 2: Java lezione1

Breve storia del linguaggio● Nasce nel 1995 per opera degli ingegneri della Sun Microsystem ● James Gosling è il team leader del linguaggio● Attualmente Java è di proprietà di Oracle

Android Corso Base. Maurizio Cozzetto.

Page 3: Java lezione1

Logo e mascotte

Android Corso Base. Maurizio Cozzetto.

Page 4: Java lezione1

Caratteristiche del linguaggio● E' orientato agli oggetti● E' indipendente dalla piattaforma (portabilità)● Contiene strumenti e librerie per il networking● E' progettato per eseguire codice da sorgenti remote in modo sicuro (applet)● E' semplice● E' multithread● Robusto

Android Corso Base. Maurizio Cozzetto.

Page 5: Java lezione1

Sviluppo di un programma Java

Android Corso Base. Maurizio Cozzetto.

Page 6: Java lezione1

Esecuzione di un programma Java

Android Corso Base. Maurizio Cozzetto.

Page 7: Java lezione1

Piattaforma Java

Android Corso Base. Maurizio Cozzetto.

Page 8: Java lezione1

Piattaforma Java in dettaglio

Android Corso Base. Maurizio Cozzetto.

Page 9: Java lezione1

Caratteristiche del linguaggio/** * HelloWorld.java */package it.geca.corso.helloworld;

/** * @author maurizio */public class HelloWorld {

/** * @param args */public static void main(String[] args) {

System.out.println("Ciao Raffaele!");System.out.println("Benvenuto a Java!"); // commento inline

} // fine metodo entry-point

} // fine classe Android Corso Base. Maurizio Cozzetto.

Page 10: Java lezione1

Programma HelloWorld

Android Corso Base. Maurizio Cozzetto.

Demo

Page 11: Java lezione1

Il computer

Android Corso Base. Maurizio Cozzetto.

Page 12: Java lezione1

La memoria

Android Corso Base. Maurizio Cozzetto.

0

1

2

...

...

100

200

….

...

Locazioni di memoria

Indirizzi

Page 13: Java lezione1

Variabili (1/5)

Android Corso Base. Maurizio Cozzetto.

La variabile è un contenitore di dati

● Variabili di tipo primitivo● Variabili di tipo riferimento

Page 14: Java lezione1

Variabili (2/5)

Android Corso Base. Maurizio Cozzetto.

Variabili di tipo primitivo

100 è l'indirizzo di memoria della variabile

int eta; // Dichiaro eta, eta vale 0eta = 8; // Assegno a eta il valore 8eta = eta + 1; // Incremento di 1, quindi eta vale 9

int eta = 8; // Dichiarazione e assegnamento

8eta 100

int

Page 15: Java lezione1

Variabili (3/5)

Android Corso Base. Maurizio Cozzetto.

Variabili di tipo riferimento

JButton bottone; // Dichiaro un riferimento (vale null)

bottone null

Page 16: Java lezione1

Variabili (4/5)

Android Corso Base. Maurizio Cozzetto.

Variabili di tipo riferimento

JButton bottone; // Dichiaro un riferimento (vale null)

// Creo l'oggetto in memoria e gli assegno un riferimentobottone = new JButton(“Saluta”);

bottone 200

JButton

Saluta

250

...

200textxy

Page 17: Java lezione1

Variabili (5/5)

Android Corso Base. Maurizio Cozzetto.

Variabili di tipo riferimento

// Dichiaro il riferimento e creo l'oggetto in memoria con una sola istruzioneJButton bottone = new JButton(“Saluta”);

Page 18: Java lezione1

Riferimenti e puntatori

In Java non esistono puntatori ma riferimenti.Un riferimento contiene qualcosa del tipo

it.geca.corso.progetto.JButton@558ee9d6

● it.geca.corso.progetto è il package● JButton è la classe● 558ee9d6 è l'hashing dell'indirizzo di memoria

Android Corso Base. Maurizio Cozzetto.

558ee9d6

JButton

….

….

bottone

Page 19: Java lezione1

Variabili stringa (1/2)

// Creazione usando il costruttoreString nome = new String(“Raffaele”);

Android Corso Base. Maurizio Cozzetto.

String

Raffaele

nome

Page 20: Java lezione1

Variabili stringa (2/2)

// Assegnamento “diretto”String nome = “Raffaele”;

Android Corso Base. Maurizio Cozzetto.

String

Raffaelenome

Page 21: Java lezione1

Variabili data (1/2)

// Creo una dataGregorianCalendar miaDataDiNascita = new GregorianCalendar(1959, 3, 1);

Android Corso Base. Maurizio Cozzetto.

miaDataDiNascita GregorianCalendar

1959 YEAR

3 MONTH

1 DAY

Page 22: Java lezione1

Variabili data (2/2)

// Semplifichiamo la rappresentazione ma non il codiceGregorianCalendar miaDataDiNascita = new GregorianCalendar(1959, 3, 1);

Android Corso Base. Maurizio Cozzetto.

miaDataDiNascita

GregorianCalendar

1959-3-1

Page 23: Java lezione1

Variabili● Variabili di istanza● Variabili di classe● Variabili locali● Variabili parametro

Android Corso Base. Maurizio Cozzetto.

Page 24: Java lezione1

Funzioni (1/2)● Si chiamano anche metodi● Definiscono le funzionalità di un oggetto o di un programma● Metodi di istanza● Metodi di classe

Android Corso Base. Maurizio Cozzetto.

Page 25: Java lezione1

Funzioni (2/2) public double computePayment( double loanAmt, double rate, double futureValue, int numPeriods) { double interest = rate / 100.0; double partial1 = Math.pow((1 + interest), - numPeriods); double denominator = (1 - partial1) / interest; double answer = (-loanAmt / denominator) - ((futureValue * partial1) / denominator); return answer;}

Android Corso Base. Maurizio Cozzetto.

Page 26: Java lezione1

Regole per il naming(Camel Notation)

Android Corso Base. Maurizio Cozzetto.

● Iniziale minuscola per le variabiliQualsiasi● Tutte lettere MAIUSCOLE per le costanti● Iniziale Maiuscola per le classi

Page 27: Java lezione1

Tipi primitivi

Android Corso Base. Maurizio Cozzetto.

Page 28: Java lezione1

int

int parseInt(String s)

Classe Integer

String toBinaryString(int i)

Classi wrapper

...

...

Android Corso Base. Maurizio Cozzetto.

Page 29: Java lezione1

Tipi derivati e classi di utilità

Android Corso Base. Maurizio Cozzetto.

● String è una classe per le sequenze di caratteri● GregorianCalendar è una classe per le date● JOptionPane è una classe dotata di metodi statici per la lettura e la stampa dei dati (package javax)● System è usata anche per l'output su Console ● Scanner è una classe usata anche per la lettura dei dati da Console

Demo

Page 30: Java lezione1

Controllo del flusso (1/2)

Android Corso Base. Maurizio Cozzetto.

● Struttura di sequenza● Struttura condizionale

● Con un ramo● Con due rami

● Struttura switch

Page 31: Java lezione1

Controllo del flusso (2/2)

Android Corso Base. Maurizio Cozzetto.

● Cicli● Ciclo while● Ciclo do-while● Ciclo for● Ciclo infinito● Ciclo infinito con break● Ciclo infinito con variabile booleana

Page 32: Java lezione1

Sequenza

Android Corso Base. Maurizio Cozzetto.

Page 33: Java lezione1

Sequenza in Java

Android Corso Base. Maurizio Cozzetto.

{<istruzione1>;<istruzione2>;<istruzione3>;...

}

Demo

Page 34: Java lezione1

Struttura condizionale con un ramo

Android Corso Base. Maurizio Cozzetto.

Page 35: Java lezione1

Struttura condizionale con un ramo in Java

Android Corso Base. Maurizio Cozzetto.

if (<cond>) {<istruzione1>;<istruzione2>;<istruzione3>;...

}

Demo

Page 36: Java lezione1

Struttura condizionale con due rami

Android Corso Base. Maurizio Cozzetto.

Page 37: Java lezione1

Struttura condizionale con due rami in Java

Android Corso Base. Maurizio Cozzetto.

if (<cond>) {<istruzione11>;<istruzione12>;<istruzione13>;...

} else {<istruzione21>;<istruzione22>;...

}Demo

Page 38: Java lezione1

Struttura ciclica while

Android Corso Base. Maurizio Cozzetto.

Page 39: Java lezione1

Struttura ciclica while in Java

Android Corso Base. Maurizio Cozzetto.

while (<cond>) {<istruzione1>;<istruzione2>;<istruzione3>;...

}

Demo

Page 40: Java lezione1

Struttura ciclica do-while

Android Corso Base. Maurizio Cozzetto.

Page 41: Java lezione1

Struttura ciclica do-while in Java

Android Corso Base. Maurizio Cozzetto.

do {<istruzione1>;<istruzione2>;<istruzione3>;...

} while (<cond>);

Demo

Page 42: Java lezione1

Struttura ciclica for

Android Corso Base. Maurizio Cozzetto.

Page 43: Java lezione1

Struttura ciclica for in Java (1/2)

Android Corso Base. Maurizio Cozzetto.

for (int i = 0; i < n; i++) { // Esegue i comandi n volte<istruzione1>;<istruzione2>;<istruzione3>;...

}

Demo

Page 44: Java lezione1

Struttura ciclica for in Java (2/2)

Android Corso Base. Maurizio Cozzetto.

i = 0;while (i < n) {

<istruzione1>;<istruzione2>;<istruzione3>;i++; // Equivale a i = i + 1

}

Demo

Page 45: Java lezione1

Ciclo infinito

Android Corso Base. Maurizio Cozzetto.

Page 46: Java lezione1

Ciclo infinito in Java

Android Corso Base. Maurizio Cozzetto.

while (true) { <istruzione1>;<istruzione2>;<istruzione3>;...

}

Demo

Page 47: Java lezione1

Cicli generici

Android Corso Base. Maurizio Cozzetto.

Page 48: Java lezione1

Struttura ciclica generica (1/2)

Android Corso Base. Maurizio Cozzetto.

while (true) { <istruzione1>;if (<cond>)

break; // Salta alla prima istruzione fuori dal ciclo<istruzione2>;...

}

Demo

Page 49: Java lezione1

Struttura ciclica generica (2/2)

Android Corso Base. Maurizio Cozzetto.

boolean finito = false;

while (!finito) { <istruzione1>;if (<cond>)

finito = true; else {

<istruzione2>;...

}}

Demo

Page 50: Java lezione1

Array (1/6)

Android Corso Base. Maurizio Cozzetto.

Un array è un oggetto contenitore che mantiene un numero fisso di elementi tutti dello stesso tipo (primitivo, derivato o user-defined)

3 0

6 1

-1 2

2 3

6 4

Primo indice

IndiciElemento (alla posizione 3)

5 elementi

Page 51: Java lezione1

Array (2/6)

Android Corso Base. Maurizio Cozzetto.

● Dichiarazioneint[] a; // Significa a = null

nulla

Page 52: Java lezione1

Array (3/6)

Android Corso Base. Maurizio Cozzetto.

● Allocazione di memoriaa = new int[5]; // Trova lo spazio necessario

int[]

0 0

0 1

0 2

0 3

0 4

a

Page 53: Java lezione1

int[]

2 0

4 1

6 2

8 3

10 4

Array (4/6)

Android Corso Base. Maurizio Cozzetto.

a[0] = 2;a[1] = 4;a[2] = 6;a[3] = 8;a[4] = 10;

● Assegnamenti

a

Page 54: Java lezione1

Final e static

● Final denota che “qualcosa” non è ulteriormente modificabile

- Se applicata ad una classe indica che essa non è più estendibile

● Static denota “qualcosa” che è invocabile indipendentemente dall'esistenza di oggetti istanza della classe

- Il calcolo della radice quadrata di un numero non dipende da oggetti istanza della classe Math- Math.sqrt() è un metodo statico

Android Corso Base. Maurizio Cozzetto.

Page 55: Java lezione1

Array (5/6)

Android Corso Base. Maurizio Cozzetto.

final static int MAX = 5; int[] a = new int[MAX]; // Dichiarazione (allocazione)// Caricamento dei dati for (int i = 0; i < a.length; i++) // length numero di elem. a[i] = 2 * i;

● Dichiarazione e caricamento con un ciclo

Page 56: Java lezione1

Array (6/6)

Android Corso Base. Maurizio Cozzetto.

Demo

● Dichiarazione e assegnamentoint[] a = {2,4,6,8,10}; // Attenzione! Non si può “spezzare”// oppure// int a[] = new int[]{2,4,6,8,10};

Page 57: Java lezione1

Classi (1/5)● Una classe definisce un tipo (user-defined)● Esiste un costruttore

- Metodo speciale per allocare gli oggetti- Non restituisce nessun tipo di ritorno, neanche void

● Esiste un metodo toString()Serve a rappresentare l'oggetto in forma testuale

● E' possibile l'overloading del costruttore● Esistono altri metodi importanti

- equals()- clone()- finalize()

Android Corso Base. Maurizio Cozzetto.

Page 58: Java lezione1

Classi (2/5)

Android Corso Base. Maurizio Cozzetto.

Personanome: stringa

cognome: stringa

dataNascita: data

cittaResidenza: stringa

Persona()

Persona(nome: stringa, …, cittaResidenza: stringa)

toString(): stringa

eta(): intero

Nome della classe

Variabili di istanza

Metodi

Page 59: Java lezione1

Classi (3/5)

public class Persona {String nome;String cognome;GregorianCalendar dataNascita;String cittaResidenza;

// costruttore di defaultpublic Persona() {

// una persona “precisa”}

...

Android Corso Base. Maurizio Cozzetto.

Page 60: Java lezione1

Classi (4/5) // Overloading del costruttore public Persona(String n, String c, GregorianCalendar d,

String r) {nome = n;cognome = c;dataNascita = d;cittaResidenza = r;

}

public int eta() {return (new GregorianCalendar()).get(Calendar.YEAR) -

this.dataNascita.get(Calendar.YEAR); } ...

Android Corso Base. Maurizio Cozzetto.

Page 61: Java lezione1

Classi (5/5) // Metodo che deriva dalla classe Object

public String toString() {return cognome + “ “ + nome + “ “ + eta();

}

// Idempublic boolean equals(Persona p) {

// Due persone sono “uguali” quando tutti i dati // coincidono”return nome.equals(p.nome) && cognome.equals(...)

&& dataNascita.equals(p.dataNascita) && ...;}

} // fine classe Android Corso Base. Maurizio Cozzetto.

Page 62: Java lezione1

Oggetti (1/3)

● Un oggetto è un rappresentante della classe● La creazione avviene mediante il richiamo di uncostruttore● I valori degli attributi sono tutti inizializzati a 0 se interi, a false se booleani ecc● I valori degli oggetti attributo della classe sono inizializzati a null

Android Corso Base. Maurizio Cozzetto.

Page 63: Java lezione1

Oggetti (2/3)

// Costruttore di defaultPersona raffaeleTomasini = new Persona();

Android Corso Base. Maurizio Cozzetto.

Persona

Raffaele nome

Tomasini cognome

1988-3-17 dataNascita

Brescia cittaResidenza

raffaeleTomasini

Page 64: Java lezione1

Oggetti (3/3)

// Uso il costruttore “sovraccaricato”Persona maurizioCozzetto = new Persona(“Maurizio”,”Cozzetto”, new GregorianCalendar(1959, Calendar.APRIL, 1), “Roncadelle”);

Android Corso Base. Maurizio Cozzetto.

Persona

Maurizio nome

Cozzetto cognome

1959-3-1 dataNascita

Roncadelle cittaResidenza

maurizioCozzetto

Page 65: Java lezione1

Ereditarietà (1/4)

E' un meccanismo di astrazione che consente● Il riutilizzo del codice● La creazione di gerarchie di classi

Android Corso Base. Maurizio Cozzetto.

Page 66: Java lezione1

Ereditarietà (2/4)

● Veicolo è detta superclasse e Automobile è detta classe derivata● Automobile eredita gli attributi e i metodi della classe padre (solo attributi e metodi pubblici e protected)● La relazione tra Automobile e Veicolo è detta relazione ISA

Android Corso Base. Maurizio Cozzetto.

Page 67: Java lezione1

Ereditarietà (3/4)

public class Veicolo extends Object {

String targa;int ruote;int cilindrata; String aziendaProduttrice;String modello;

public String toString() {

return targa + “ “ + modello;}

}

Android Corso Base. Maurizio Cozzetto.

Page 68: Java lezione1

Ereditarietà (4/4)

public class Automobile extends Veicolo {

int posti; int classe; // Rappresenta Euro1, Euro2, Euro3 ...int potenza; public double bollo() {

double d = 0.0;// Si fanno i calcoli necessari...return d;

}}

Android Corso Base. Maurizio Cozzetto.

Demo

Page 69: Java lezione1

Override

Consiste nella ridefinizione in una classe derivata di metodi già definiti nella superclasse

public class Automobile extends Veicolo {int posti;// Altre variabili di istanza

@Override // Ridefinisco le funzionalità di toString() del padrepublic String toString() {

return super.toString() + “ “ + posti}

} Android Corso Base. Maurizio Cozzetto.

Page 70: Java lezione1

Super

Parola chiave che permette di far riferimento ai metodi e agli attributi definiti nella superclasse nel codice dei metodi di una classe derivata

Android Corso Base. Maurizio Cozzetto.

public class Automobile extends Veicolo {int posti;// Altre variabili di istanza

@Override // Ridefinisco le funzionalità di toString() del padrepublic String toString() {

return super.toString() + “ “ + posti}

}

Page 71: Java lezione1

Polimorfismo

Android Corso Base. Maurizio Cozzetto.

Capacità di un “oggetto” di assumere forme “differenti”

- In una gerarchia di classi, la possibilità di adottare il “binding dinamico”

Automobile ferrariF40 = new Automobile("KU737WE","Ferrari F40 rosso metallizzato", “Coupè”,2936); // 2936 è la cilindrata

// ferrariF40 è un anche un oggetto di tipo Veicolo Veicolo ferrariF40 = new Automobile(...);Proprietario me = new Persona(...);

// Richiamo un metodo della classe padreSystem.out.println(ferrariF40.setProprietario(me));

Page 72: Java lezione1

Corso Base

Maurizio Cozzetto

5 minuti di pausa