SlideShare a Scribd company logo
1 of 72
Download to read offline
Corso Base
Maurizio Cozzetto
Lezione 1
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.
Logo e mascotte
Android Corso Base. Maurizio Cozzetto.
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.
Sviluppo di un programma Java
Android Corso Base. Maurizio Cozzetto.
Esecuzione di un programma Java
Android Corso Base. Maurizio Cozzetto.
Piattaforma Java
Android Corso Base. Maurizio Cozzetto.
Piattaforma Java in dettaglio
Android Corso Base. Maurizio Cozzetto.
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.
Programma HelloWorld
Android Corso Base. Maurizio Cozzetto.
Demo
Il computer
Android Corso Base. Maurizio Cozzetto.
La memoria
Android Corso Base. Maurizio Cozzetto.
0
1
2
...
...
100
…
…
200
….
...
Locazioni di
memoria
Indirizzi
Variabili (1/5)
Android Corso Base. Maurizio Cozzetto.
La variabile è un contenitore di dati
● Variabili di tipo primitivo
● Variabili di tipo riferimento
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 0
eta = 8; // Assegno a eta il valore 8
eta = eta + 1; // Incremento di 1, quindi eta vale 9
int eta = 8; // Dichiarazione e assegnamento
8eta 100
int
Variabili (3/5)
Android Corso Base. Maurizio Cozzetto.
Variabili di tipo riferimento
JButton bottone; // Dichiaro un riferimento (vale null)
bottone null
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 riferimento
bottone = new JButton(“Saluta”);
bottone 200
JButton
Saluta
250
...
200text
x
y
Variabili (5/5)
Android Corso Base. Maurizio Cozzetto.
Variabili di tipo riferimento
// Dichiaro il riferimento e creo l'oggetto in memoria con
una sola istruzione
JButton bottone = new JButton(“Saluta”);
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
Variabili stringa (1/2)
// Creazione usando il costruttore
String nome = new String(“Raffaele”);
Android Corso Base. Maurizio Cozzetto.
String
Raffaele
nome
Variabili stringa (2/2)
// Assegnamento “diretto”
String nome = “Raffaele”;
Android Corso Base. Maurizio Cozzetto.
String
Raffaele
nome
Variabili data (1/2)
// Creo una data
GregorianCalendar miaDataDiNascita = new
GregorianCalendar(1959, 3, 1);
Android Corso Base. Maurizio Cozzetto.
miaDataDiNascita GregorianCalendar
1959 YEAR
3 MONTH
1 DAY
Variabili data (2/2)
// Semplifichiamo la rappresentazione ma non il codice
GregorianCalendar miaDataDiNascita = new
GregorianCalendar(1959, 3, 1);
Android Corso Base. Maurizio Cozzetto.
miaDataDiNascita
GregorianCalendar
1959-3-1
Variabili
● Variabili di istanza
● Variabili di classe
● Variabili locali
● Variabili parametro
Android Corso Base. Maurizio Cozzetto.
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.
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.
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
Tipi primitivi
Android Corso Base. Maurizio Cozzetto.
int
int parseInt(String s)
Classe Integer
String toBinaryString(int i)
Classi wrapper
...
...
Android Corso Base. Maurizio Cozzetto.
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
Controllo del flusso (1/2)
Android Corso Base. Maurizio Cozzetto.
● Struttura di sequenza
● Struttura condizionale
● Con un ramo
● Con due rami
● Struttura switch
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
Sequenza
Android Corso Base. Maurizio Cozzetto.
Sequenza in Java
Android Corso Base. Maurizio Cozzetto.
{
<istruzione1>;
<istruzione2>;
<istruzione3>;
...
}
Demo
Struttura condizionale con un ramo
Android Corso Base. Maurizio Cozzetto.
Struttura condizionale con un ramo in Java
Android Corso Base. Maurizio Cozzetto.
if (<cond>) {
<istruzione1>;
<istruzione2>;
<istruzione3>;
...
}
Demo
Struttura condizionale con due rami
Android Corso Base. Maurizio Cozzetto.
Struttura condizionale con due rami in Java
Android Corso Base. Maurizio Cozzetto.
if (<cond>) {
<istruzione11>;
<istruzione12>;
<istruzione13>;
...
} else {
<istruzione21>;
<istruzione22>;
...
}
Demo
Struttura ciclica while
Android Corso Base. Maurizio Cozzetto.
Struttura ciclica while in Java
Android Corso Base. Maurizio Cozzetto.
while (<cond>) {
<istruzione1>;
<istruzione2>;
<istruzione3>;
...
}
Demo
Struttura ciclica do-while
Android Corso Base. Maurizio Cozzetto.
Struttura ciclica do-while in Java
Android Corso Base. Maurizio Cozzetto.
do {
<istruzione1>;
<istruzione2>;
<istruzione3>;
...
} while (<cond>);
Demo
Struttura ciclica for
Android Corso Base. Maurizio Cozzetto.
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
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
Ciclo infinito
Android Corso Base. Maurizio Cozzetto.
Ciclo infinito in Java
Android Corso Base. Maurizio Cozzetto.
while (true) {
<istruzione1>;
<istruzione2>;
<istruzione3>;
...
}
Demo
Cicli generici
Android Corso Base. Maurizio Cozzetto.
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
Struttura ciclica generica (2/2)
Android Corso Base. Maurizio Cozzetto.
boolean finito = false;
while (!finito) {
<istruzione1>;
if (<cond>)
finito = true;
else {
<istruzione2>;
...
}
}
Demo
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
Array (2/6)
Android Corso Base. Maurizio Cozzetto.
● Dichiarazione
int[] a; // Significa a = null
nulla
Array (3/6)
Android Corso Base. Maurizio Cozzetto.
● Allocazione di memoria
a = new int[5]; // Trova lo spazio necessario
int[]
0 0
0 1
0 2
0 3
0 4
a
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
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.
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
Array (6/6)
Android Corso Base. Maurizio Cozzetto.
Demo
● Dichiarazione e assegnamento
int[] a = {2,4,6,8,10}; // Attenzione! Non si può “spezzare”
// oppure
// int a[] = new int[]{2,4,6,8,10};
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.
Classi (2/5)
Android Corso Base. Maurizio Cozzetto.
Persona
nome: stringa
cognome: stringa
dataNascita: data
cittaResidenza: stringa
Persona()
Persona(nome: stringa, …,
cittaResidenza: stringa)
toString(): stringa
eta(): intero
Nome della classe
Variabili di istanza
Metodi
Classi (3/5)
public class Persona {
String nome;
String cognome;
GregorianCalendar dataNascita;
String cittaResidenza;
// costruttore di default
public Persona() {
// una persona “precisa”
}
...
Android Corso Base. Maurizio Cozzetto.
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.
Classi (5/5)
// Metodo che deriva dalla classe Object
public String toString() {
return cognome + “ “ + nome + “ “ + eta();
}
// Idem
public 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.
Oggetti (1/3)
● Un oggetto è un rappresentante della classe
● La creazione avviene mediante il richiamo di un
costruttore
● 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.
Oggetti (2/3)
// Costruttore di default
Persona raffaeleTomasini = new Persona();
Android Corso Base. Maurizio Cozzetto.
Persona
Raffaele nome
Tomasini cognome
1988-3-17 dataNascita
Brescia cittaResidenza
raffaeleTomasini
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
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.
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.
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.
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
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 padre
public String toString() {
return super.toString() + “ “ + posti
}
}
Android Corso Base. Maurizio Cozzetto.
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 padre
public String toString() {
return super.toString() + “ “ + posti
}
}
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 padre
System.out.println(ferrariF40.setProprietario(me));
Corso Base
Maurizio Cozzetto
5 minuti di pausa

More Related Content

What's hot

2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#Marco Parenzan
 
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...Raffaella D'angelo
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsJUG Genova
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, javaMatteo Baccan
 
Design Pattern Comportamentali
Design Pattern ComportamentaliDesign Pattern Comportamentali
Design Pattern ComportamentaliRiccardo Cardin
 

What's hot (8)

2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...
 
Design Pattern
Design PatternDesign Pattern
Design Pattern
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMs
 
Java OCA teoria 1
Java OCA teoria 1Java OCA teoria 1
Java OCA teoria 1
 
Java OCA teoria 4
Java OCA teoria 4Java OCA teoria 4
Java OCA teoria 4
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
Design Pattern Comportamentali
Design Pattern ComportamentaliDesign Pattern Comportamentali
Design Pattern Comportamentali
 

Similar to Java lezione1

Clean android code - Droidcon Italiy 2014
Clean android code - Droidcon Italiy 2014Clean android code - Droidcon Italiy 2014
Clean android code - Droidcon Italiy 2014Fabio Collini
 
Clean android code
Clean android codeClean android code
Clean android codefirenze-gtug
 
Dependency injection: the good parts
Dependency injection:  the good partsDependency injection:  the good parts
Dependency injection: the good partsMassimo Groppelli
 
Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsAlberto Brandolini
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIvan Gualandri
 
Design Pattern Creazionali
Design Pattern CreazionaliDesign Pattern Creazionali
Design Pattern CreazionaliRiccardo Cardin
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Developmentsazilla
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Developmentsazilla
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Alberto Pasca
 
javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - TigerMatteo Baccan
 
Sviluppare app native per iOS
Sviluppare app native per iOSSviluppare app native per iOS
Sviluppare app native per iOSGaspare Novara
 
Sviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto DigitaleSviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto Digitalelostrettodigitale
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of KotlinErik Minarini
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018Marco Parenzan
 

Similar to Java lezione1 (20)

Clean android code - Droidcon Italiy 2014
Clean android code - Droidcon Italiy 2014Clean android code - Droidcon Italiy 2014
Clean android code - Droidcon Italiy 2014
 
Clean android code
Clean android codeClean android code
Clean android code
 
Java codestyle & tipstricks
Java codestyle & tipstricksJava codestyle & tipstricks
Java codestyle & tipstricks
 
Dependency injection: the good parts
Dependency injection:  the good partsDependency injection:  the good parts
Dependency injection: the good parts
 
Unit testing 101
Unit testing 101Unit testing 101
Unit testing 101
 
Testing
TestingTesting
Testing
 
Vb.Net
Vb.NetVb.Net
Vb.Net
 
Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con Grails
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
 
Design Pattern Creazionali
Design Pattern CreazionaliDesign Pattern Creazionali
Design Pattern Creazionali
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Development
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Development
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
 
javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - Tiger
 
Java lezione2
Java lezione2Java lezione2
Java lezione2
 
Sviluppare app native per iOS
Sviluppare app native per iOSSviluppare app native per iOS
Sviluppare app native per iOS
 
Sviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto DigitaleSviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto Digitale
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of Kotlin
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
 
Jug 30 10 04 Jdo
Jug 30 10 04 JdoJug 30 10 04 Jdo
Jug 30 10 04 Jdo
 

Java lezione1

  • 2. 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.
  • 3. Logo e mascotte Android Corso Base. Maurizio Cozzetto.
  • 4. 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.
  • 5. Sviluppo di un programma Java Android Corso Base. Maurizio Cozzetto.
  • 6. Esecuzione di un programma Java Android Corso Base. Maurizio Cozzetto.
  • 7. Piattaforma Java Android Corso Base. Maurizio Cozzetto.
  • 8. Piattaforma Java in dettaglio Android Corso Base. Maurizio Cozzetto.
  • 9. 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.
  • 10. Programma HelloWorld Android Corso Base. Maurizio Cozzetto. Demo
  • 11. Il computer Android Corso Base. Maurizio Cozzetto.
  • 12. La memoria Android Corso Base. Maurizio Cozzetto. 0 1 2 ... ... 100 … … 200 …. ... Locazioni di memoria Indirizzi
  • 13. Variabili (1/5) Android Corso Base. Maurizio Cozzetto. La variabile è un contenitore di dati ● Variabili di tipo primitivo ● Variabili di tipo riferimento
  • 14. 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 0 eta = 8; // Assegno a eta il valore 8 eta = eta + 1; // Incremento di 1, quindi eta vale 9 int eta = 8; // Dichiarazione e assegnamento 8eta 100 int
  • 15. Variabili (3/5) Android Corso Base. Maurizio Cozzetto. Variabili di tipo riferimento JButton bottone; // Dichiaro un riferimento (vale null) bottone null
  • 16. 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 riferimento bottone = new JButton(“Saluta”); bottone 200 JButton Saluta 250 ... 200text x y
  • 17. Variabili (5/5) Android Corso Base. Maurizio Cozzetto. Variabili di tipo riferimento // Dichiaro il riferimento e creo l'oggetto in memoria con una sola istruzione JButton bottone = new JButton(“Saluta”);
  • 18. 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
  • 19. Variabili stringa (1/2) // Creazione usando il costruttore String nome = new String(“Raffaele”); Android Corso Base. Maurizio Cozzetto. String Raffaele nome
  • 20. Variabili stringa (2/2) // Assegnamento “diretto” String nome = “Raffaele”; Android Corso Base. Maurizio Cozzetto. String Raffaele nome
  • 21. Variabili data (1/2) // Creo una data GregorianCalendar miaDataDiNascita = new GregorianCalendar(1959, 3, 1); Android Corso Base. Maurizio Cozzetto. miaDataDiNascita GregorianCalendar 1959 YEAR 3 MONTH 1 DAY
  • 22. Variabili data (2/2) // Semplifichiamo la rappresentazione ma non il codice GregorianCalendar miaDataDiNascita = new GregorianCalendar(1959, 3, 1); Android Corso Base. Maurizio Cozzetto. miaDataDiNascita GregorianCalendar 1959-3-1
  • 23. Variabili ● Variabili di istanza ● Variabili di classe ● Variabili locali ● Variabili parametro Android Corso Base. Maurizio Cozzetto.
  • 24. 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.
  • 25. 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.
  • 26. 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
  • 27. Tipi primitivi Android Corso Base. Maurizio Cozzetto.
  • 28. int int parseInt(String s) Classe Integer String toBinaryString(int i) Classi wrapper ... ... Android Corso Base. Maurizio Cozzetto.
  • 29. 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
  • 30. Controllo del flusso (1/2) Android Corso Base. Maurizio Cozzetto. ● Struttura di sequenza ● Struttura condizionale ● Con un ramo ● Con due rami ● Struttura switch
  • 31. 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
  • 32. Sequenza Android Corso Base. Maurizio Cozzetto.
  • 33. Sequenza in Java Android Corso Base. Maurizio Cozzetto. { <istruzione1>; <istruzione2>; <istruzione3>; ... } Demo
  • 34. Struttura condizionale con un ramo Android Corso Base. Maurizio Cozzetto.
  • 35. Struttura condizionale con un ramo in Java Android Corso Base. Maurizio Cozzetto. if (<cond>) { <istruzione1>; <istruzione2>; <istruzione3>; ... } Demo
  • 36. Struttura condizionale con due rami Android Corso Base. Maurizio Cozzetto.
  • 37. Struttura condizionale con due rami in Java Android Corso Base. Maurizio Cozzetto. if (<cond>) { <istruzione11>; <istruzione12>; <istruzione13>; ... } else { <istruzione21>; <istruzione22>; ... } Demo
  • 38. Struttura ciclica while Android Corso Base. Maurizio Cozzetto.
  • 39. Struttura ciclica while in Java Android Corso Base. Maurizio Cozzetto. while (<cond>) { <istruzione1>; <istruzione2>; <istruzione3>; ... } Demo
  • 40. Struttura ciclica do-while Android Corso Base. Maurizio Cozzetto.
  • 41. Struttura ciclica do-while in Java Android Corso Base. Maurizio Cozzetto. do { <istruzione1>; <istruzione2>; <istruzione3>; ... } while (<cond>); Demo
  • 42. Struttura ciclica for Android Corso Base. Maurizio Cozzetto.
  • 43. 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
  • 44. 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
  • 45. Ciclo infinito Android Corso Base. Maurizio Cozzetto.
  • 46. Ciclo infinito in Java Android Corso Base. Maurizio Cozzetto. while (true) { <istruzione1>; <istruzione2>; <istruzione3>; ... } Demo
  • 47. Cicli generici Android Corso Base. Maurizio Cozzetto.
  • 48. 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
  • 49. Struttura ciclica generica (2/2) Android Corso Base. Maurizio Cozzetto. boolean finito = false; while (!finito) { <istruzione1>; if (<cond>) finito = true; else { <istruzione2>; ... } } Demo
  • 50. 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
  • 51. Array (2/6) Android Corso Base. Maurizio Cozzetto. ● Dichiarazione int[] a; // Significa a = null nulla
  • 52. Array (3/6) Android Corso Base. Maurizio Cozzetto. ● Allocazione di memoria a = new int[5]; // Trova lo spazio necessario int[] 0 0 0 1 0 2 0 3 0 4 a
  • 53. 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
  • 54. 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.
  • 55. 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
  • 56. Array (6/6) Android Corso Base. Maurizio Cozzetto. Demo ● Dichiarazione e assegnamento int[] a = {2,4,6,8,10}; // Attenzione! Non si può “spezzare” // oppure // int a[] = new int[]{2,4,6,8,10};
  • 57. 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.
  • 58. Classi (2/5) Android Corso Base. Maurizio Cozzetto. Persona nome: stringa cognome: stringa dataNascita: data cittaResidenza: stringa Persona() Persona(nome: stringa, …, cittaResidenza: stringa) toString(): stringa eta(): intero Nome della classe Variabili di istanza Metodi
  • 59. Classi (3/5) public class Persona { String nome; String cognome; GregorianCalendar dataNascita; String cittaResidenza; // costruttore di default public Persona() { // una persona “precisa” } ... Android Corso Base. Maurizio Cozzetto.
  • 60. 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.
  • 61. Classi (5/5) // Metodo che deriva dalla classe Object public String toString() { return cognome + “ “ + nome + “ “ + eta(); } // Idem public 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.
  • 62. Oggetti (1/3) ● Un oggetto è un rappresentante della classe ● La creazione avviene mediante il richiamo di un costruttore ● 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.
  • 63. Oggetti (2/3) // Costruttore di default Persona raffaeleTomasini = new Persona(); Android Corso Base. Maurizio Cozzetto. Persona Raffaele nome Tomasini cognome 1988-3-17 dataNascita Brescia cittaResidenza raffaeleTomasini
  • 64. 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
  • 65. 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.
  • 66. 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.
  • 67. 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.
  • 68. 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
  • 69. 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 padre public String toString() { return super.toString() + “ “ + posti } } Android Corso Base. Maurizio Cozzetto.
  • 70. 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 padre public String toString() { return super.toString() + “ “ + posti } }
  • 71. 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 padre System.out.println(ferrariF40.setProprietario(me));