SlideShare a Scribd company logo
1 of 51
Download to read offline
Java Base 1bobpuley@gmail.com
Introduzione a Java
Java Base 2bobpuley@gmail.com
Sommario
1. Cos'è java
2. Java tools
3. Parole riservate (keywords)
4. OO e java
5. Classi e oggetti
6. Fields, metodi e costruttori
7. Le interfacce
8. Le eccezioni
Java Base 3bobpuley@gmail.com
Cos'è Java?
● Linguaggio di programmazione
● Ambiente di sviluppo
● Ambiente applicativo
● Fasi di sviluppo
● La JVM
● Il Garbage Collector
Java Base 4bobpuley@gmail.com
Cos'è Java?
Linguaggio di programmazione
● Semi-compilato
● Interpretato
● Orientato agli oggetti
● Multi-piattaforma
● Fortemente tipizzato
● Robusto (errori di compilazione)
Java Base 5bobpuley@gmail.com
Cos'è Java?
Ambiente di sviluppo
● Come ambiente di sviluppo, Java offre una serie di tool
invocabili a linea di comando per effettuare le principali
operazioni
– Un compilatore (javac)
– Un interprete (java)
– Un generatore di documentazione (javadoc)
– Un tool per il packaging delle classi java (jar)
– ...
Java Base 6bobpuley@gmail.com
Cos'è Java?
Ambiente applicativo
● Il Java Runtime Environment (Jre) è l'ambiente applicativo
dei programmi java sul sistema operativo
● La jre comprende le librerie fondamentali di java che
consentono di sviluppare le più svariate applicazioni
(streaming, console app, GUI, networking, Xml
manipulation, etc...)
● La jre è anche supportata (come ambiente di esecuzione)
dai principali browser per pc.
● Un subset della jre (la J2me) consente anche di sviluppare
applicazione per dispositivi mobile.
Java Base 7bobpuley@gmail.com
Cos'è Java?
Fasi di sviluppo
Java Base 8bobpuley@gmail.com
Cos'è Java?
Fasi di sviluppo
Java Base 9bobpuley@gmail.com
Cos'è Java?
La JVM
● La Java Virtual Machine (JVM)
– è l'intermediario tra il software scritto in java da eseguire e la
macchina fisica sul quale deve essere eseguito.
● ByteCode
– Ogni programma java, in fase di compilazione, viene trasformato in
un linguaggio (bytecode) che può essere letto ed eseguito dalla JVM
indipendentemente dalla piattaforma di esecuzione e compilazione
Java Base 10bobpuley@gmail.com
Cos'è Java?
Il Garbage Collector
● Il Garbage Collection thread
– è un processo a bassa priorità che si occupa di liberare la memoria
degli oggetti non più utilizzati o utilizzabili dall'applicazione (variabili
al di fuori dello scope per esempio)
Java Base 11bobpuley@gmail.com
Java Tools
● Java
– è un tool fornito con la jdk e la jre per lanciare le applicazioni java
– Si può usare da linea di comando
– Accetta diversi parametri per configurare l'esecuzione del codice
– Accetta un numero arbitrario di argomenti che vengono inoltrati alla classe
main dell'applicazione
● Javac
– è un tool fornito con la jdk per compilare sorgenti java
– Si può usare da linea di comando
– Accetta diversi parametri per configurare la compilazione del codice
● Javadoc
– è un tool fornito con la jdk per la generazione di documentazione a partire
dai commenti presenti nel codice.
Java Base 12bobpuley@gmail.com
Java Tools
java
● Java: java [ options ] class [ argument ... ]
– Options
● -classpath : include classi o librerie nell classpath d'esecuzione
● -cp : shorcut per -classpath
● -jar : specifica che si vuole eseguire una classe contenuta in un archivio
● -version : stampa a video la versione della jre in esecuzione
● -help : restituisce l'elenco delle opzioni
● -? : shortcut per -help
● -Xms : imposta la dimensione iniziale della memoria dedicata
● -Xmx : imposta la dimensione massima della memoria dedicata
Approfondimenti
Java Base 13bobpuley@gmail.com
Java Tools
javac
● Javac: javac [ options ] sourceFiles
– Options
● -classpath : include classi o librerie nel classpath per la compilazione
● -d : specifica la cartella nella quale verranno inseriti i files compilati
● -source : specifica per quale versione dlla jre si sta compilando
● -help : restituisce l'elenco delle opzioni
● -? : shortcut per -help
Approfondimenti
Java Base 14bobpuley@gmail.com
Java Tools
javadoc
● Javadoc: javadoc [ options ] [ packagenames ]
[ sourcefilenames ] [ -subpackages pkg1:pkg2:... ]
[ @argfiles ]
– Options
● -d : specifica la cartella nella quale verranno inseriti i files compilati
● -public : documenta solo classi e membri pubblici
● -protected (default): documenta solo classi e membri protected e
public.
● -package : documenta solo classi e membri package, protected, e
public.
● -private : documenta solo classi e membri tutte le classi e i membri
● -help : restituisce l'elenco delle opzioni
● -? : shortcut per -help
Approfondimenti
Java Base 15bobpuley@gmail.com
Parole riservate
Java Base 16bobpuley@gmail.com
OO e Java
● Ereditarietà
● Overloading
● Overriding
● Polimorfismo
● Incapsulamento
Java Base 17bobpuley@gmail.com
OO e Java
Ereditarietà
● Per ereditarietà si intende la capacità di un programma
(classe) di essere definito come specializzazione di un altro
programma (classe)
● In java questo si ottiene in fase di definizione di una classe
attraverso la keyword extends:
– class Cane extends Animale{}
● Dire che Cane estende Animale implica che la classe Cane
(sotto-classe) acquisisce automaticamente tutte le proprietà
(attributi d'istanza) e i comportamenti (metodi della classe)
della classe Animale (super-classe)
Java Base 18bobpuley@gmail.com
OO e Java
Overloading (dei metodi)
● L'overloading è un concetto che si applica esclusivamente ai
metodi
● Consente di definire più metodi, nella stessa classe, con il
medesimo nome e tipo restituito ma diversi parametri (per tipo
o numero):
– void stampa(int eta)
– void stampa(String nome)
– void stampa(Sting nome, int eta)
● Il runtime environment invocherà quello giusto a seconda dei
parametri passati:
– istanza.stampa(12);
– istanza.stampa(“gigi”, 12);
Java Base 19bobpuley@gmail.com
OO e Java
Overriding (dei metodi)
● L'overriding è un concetto che si applica esclusivamente ai
metodi e riguarda i metodi ereditati dalla super classe
● Consente di ridefinire il comportamento dei metodi della super
classe:
class Animale{
public int getNumeroGambe(){
return 0;
}
}
class Cane extends Animale{
public int getNumeroGambe(){
return 4;
}
}
Java Base 20bobpuley@gmail.com
OO e Java
polimorfismo
● Il polimorfismo è la capacità del runtime environment di
scegliere il metodo corretto nella gerarchia delle classi,
tenendo conto dell'overriding
Animale a = new Animale();
Animale b = new Cane();
Cane c = new Cane();
a.getNumeroGambe();//0
b.getNumeroGambe();//4
c.getNumeroGambe();//4
Java Base 21bobpuley@gmail.com
OO e Java
incapsulamento
● Il concetto di incaspulation viene implementato in java
attraverso i modificatori (keywords) di visibilità:
– private (visibile solo dalla classe stessa)
– default (visibile solo dalle classi dello stesso package)
– protected (visibile dalla classe e dalle sue sottoclassi)
– public
Java Base 22bobpuley@gmail.com
Classi e oggetti
● Occorre distinguere chiaramente il significato di classe da
quello di oggetto (istanza)
● La classe si può definire come il progetto o struttura di un
oggetto
● L'istanza è un oggetto reale pronto all'uso:
class Animale{
public int getNumeroGambe(){
return 0;
}
}
Animale a = new Animale();
Java Base 23bobpuley@gmail.com
Classi e oggetti
Definizione di una classe
● Lo schema generale della definizione di una classe è il
seguente:
– [modificatore di visibilità] [altri modificatori] class nomeClasse [extends
nomeClasse] [implements nomeInterfaccia[,nomeinterfaccia]]{}
class Animale{}
public class Animale{}
public final class Animale{}
public abstract class Animale{}
public class Animale extends EssereVivente implements
EssereMobile, EssereMortale {}
Java Base 24bobpuley@gmail.com
Classi e oggetti
tipi di classe
● Le classi java possono essere raggruppate a seconda di
diversi criteri:
– Sulla base di come e dove vengono dichiarate
● Classi standard (class)
● Classi annidate (innerclass)
● Classi anonime (anonymous class)
– Sulla base delle loro visibiltà
● Classi pubbliche
● Classi package
● Classi protette
● Classi private
– Sulla base della loro comportamento specifico
● Classi astratte
● Classi final...
Java Base 25bobpuley@gmail.com
Classi e oggetti
classi standard
● Una classe standard è una classe definita:
– In un file di testo con estensione java che
● ha lo stesso nome della classe (key-sensitive)
● Si trova (path relativo dei sorgenti) nel path corrispondente al package della classe
● <sorgenti>/mio/package/Animale.java
package mio.package;
class Animale{
public int getNumeroGambe(){
return 0;
}
}
Java Base 26bobpuley@gmail.com
Classi e oggetti
classi annidate
● Una inner class è una classe definita all'interno di un'altra
classe:
package mio.package;
class Veicolo{
public Motore getMotore(){
return 0;
}
public class Motore{
public int getVelicitaMassima(){
return 100;
}
}
}
Java Base 27bobpuley@gmail.com
Classi e oggetti
classi anonime
● Una classe anonima è una classe che viene ridefinità a
runtime
public Animale getAnimale(){
return new Animale(){
public int getNumeroGambe(){
return 2;
}
};
}
Java Base 28bobpuley@gmail.com
Classi e oggetti
modificatori di visibilità delle classi
● Alcune delle keywords java possono essere utilizzate per
limitare la visibilità delle classi
– private (solo inner classes)
– default (se viene omesso il modificatore)
– protected (solo inner class)
– public
private class Animale{}
protected class Animale{}
class Animale{}
public class Animale{}
Java Base 29bobpuley@gmail.com
Classi e oggetti
altri modificatori delle classi
● Con l'ausilio di alcuni altri modificatori si possono definire altri
comportamenti specifici della classe
– Classi abstract (non si possono creare istanze direttamente da queste
classi)
– Classi final (non è possibile estendere queste classi)
– Classi statiche (per le inner classes consente l'accesso e l'utilizzo da
parte di altre classi conformemente ai modificatori di visibilità applicati)
class Veicolo{
public static class Motore{
}
}
Veicolo.Motore motore = new Veicolo.Motore();
Java Base 30bobpuley@gmail.com
Fields, metodi e costruttori
● Le fields sono le proprietà o attributi di una classe, volendo li
si può intendere come lo stato di un'istanza
● I metodi sono i comportamenti o responsabilità di una
determinata classe
● I costruttori sono dei metodi speciali per inizializzare l'oggetto
abstract class Animale{
private int numeroGambe;
public Animale(int numeroGambe){
this.numeroGambe = numeroGambe;
}
public int getNumeroGambe(){
return numeroGambe;
}
}
Java Base 31bobpuley@gmail.com
Fields, metodi e costruttori
d'istanza o di classe?
● Le fields e i metodi possono essere d'istanza o di classe
– Membri di classe
● Hanno il modificatore static
● Vi si può accedere senza creare un'istanza della classe
● Nel caso delle fields, il loro valore è condiviso da tutte le istanze della classe
– Membri di istanza
● Non hanno il modificatore static
● Per accedervi occorre un'istanza reale della classe
● Nel caso delle fields, il valore è incapsulato e indipendente in ciascuna istanza
Java Base 32bobpuley@gmail.com
Fields, metodi e costruttori
le fields
● Le fields possono essere dichiarate in qualunque punto del
body della classe
● Le dichiarazioni delle fields devono rispettare la seguente
forma generale
– [modificatore di visibilità] [altri modificatori] tipo nomeField [= initialValue];
● Il modificatore di visibilità non ha restrizioni d'uso e il suo
significato rispecchia esattamente quello dell' OO
● I restanti modificatori implicano dei comportamenti particolari
● Il tipo deve essere una classe java accessibile da quella
corrente
● Il valore iniziale può essere la keyword null
Java Base 33bobpuley@gmail.com
Fields, metodi e costruttori
le fields – il modificatore static
● Il modificatore static rende la field di classe.
– Questo significa che sarà possibile accedere al suo valore senza
creare un'istanza della classe (es File.PATH_SEPARATOR)
– Implica anche che ciascuna istanza della classe condividerà il valore di
quella field, se una delle istanze la modificasse, allora tutte le altre
istanze vedranno anch'esse il valore modificato
Java Base 34bobpuley@gmail.com
Fields, metodi e costruttori
le fields – il modificatore transient
● Il modificatore transient serve solo in casi particolari e solo in
classi che implementino l'interfaccia serializable
● Indica al runtime environment che, in caso di serializzazione
dell'istanza (persistenza dello stato su filesystem), la field
transient non deve essere processata
Java Base 35bobpuley@gmail.com
Fields, metodi e costruttori
le fields – la keyword reference this
● this è un reference fornito di default dall'ambiente java per
offrire maggiore libertà nella scelta dei nomi di variabili,
parametri e fields, eliminando le ambiguità ove si
presentassero
● Un esempio può chiarire il problema e la soluzione con this
abstract class Animale{
private int numeroGambe;
public Animale(int numeroGambe){
this.numeroGambe = numeroGambe;
}
public int getNumeroGambe(){
return numeroGambe;
}
}
Java Base 36bobpuley@gmail.com
Fields, metodi e costruttori
i metodi
● I metodi rappresentano, dal punto di vista della modellazione,
le responsabilità di una classe
● Lo schema generale di un metodo è:
– [modificatore di visibilità] [altri modificatori] tipoRestituito
nomeMetodo( [ paramenterType parameterName[ , paramenterType
parameterName]*]) [throws exceptionName[, exceptionName]*]{}
● I modificatori di visibilità sono tutti validi e rispecchiano il
significato già discusso
● I restanti modificatori implicano comportamenti particolari del
metodo
● Il tipo restituito deve essere unico ed un tipo java valido
● I parametri 0 o molti
Java Base 37bobpuley@gmail.com
Fields, metodi e costruttori
i metodi – il modificatore abstract
● Questo modificatore può essere usato solo da classi a loro
volta abstract
● Comunica al compilatore che di questo metodo fornisce una
definizione, ma non l'implementazione
– Per questa ragione la classe che lo contiene deve essere
abstract
● Impedire di creare un'istanza che contiene metodi non
definiti
● Obbligare le classi concrete che la estendono a fornire
un'implementazione di quel metodo
Java Base 38bobpuley@gmail.com
Fields, metodi e costruttori
i metodi – il modificatore static
● Questo modificatore rende il metodo di classe
● Sarà quindi possibile invocare il metodo senza creare
un'istanza della classe che lo contiene (es.
Collections.sort(List list); )
● I metodi statici impongono però una limitazione
– Non è possibile fare l'overriding di un metodo statico
● D'alta pare questo è ovvio se si pensa che un metodo statico
non può usufruire del polimorfismo che si applica solo ad
istanze e non a classi
Java Base 39bobpuley@gmail.com
Fields, metodi e costruttori
i metodi – i modificatori final, native, synch
● Il modificatore final impedisce alle eventuali sottoclassi di
effettuare l'overriding del metodo
● Il modificatore native si applica ai metodi che accedono a
librerie native (del sistema operativo come le dll di windows)
● Il modificatore synchronized si applica a metodi che sono
progettati per operare in ambiente multi-threading, e per i quali
si vuole garantire l'accesso sequenziale
Java Base 40bobpuley@gmail.com
Fields, metodi e costruttori
i costruttori
● I costruttori servono ad inizializzare una classe
● La dichiarazione di un costruttore deve rispettare la sintassi:
– [modificatore di visibilità] nomeClasse( [ paramenterType parameterName[ ,
paramenterType parameterName]*]) [throws exceptionName[,
exceptionName]*]{}
● Qualunque modificatore di visibilità è valido e rispecchia il
significato già visto nell'OO
● Il nome del costruttore deve sempre essere uguale al nopme
della classe
● Può avere parametri
● Può lanciare un'eccezione
Java Base 41bobpuley@gmail.com
Fields, metodi e costruttori
i costruttori (continua)
● I costruttori possono essere visti come particolari metodi,
salvo alcune differenze
– Funzione: un costruttore si occupa di inizializzare correttamente
un'istanza prima che questa sia fruibile dal client ( i metodi, a
parte quelli statici, vengono invocati sull'istanza già creata)
– Accesso (invocazione): un costruttore viene invocato attraverso
la keyword new e restituisce sempre un reference all'oggetto
stesso.
– Return type: i costruttori non dichiarano alcun return type
– Accesso alle costanti: il costruttore è l'unico punto, a parte la
dichiarazione, ove sia possibile inizializzare una field final.
– Ereditarietà: i costruttori non vengono ereditati
Java Base 42bobpuley@gmail.com
Fields, metodi e costruttori
i costruttori – this e super
● Anche per il costruttore valgono le regole generali di
overloading
● È possibile fare riferimento ai costruttori della super-classe
con la keyword super; deve essere la prima chiamata.
● È possibile fare riferimento ai costruttori overloaded con la
keyword this; deve essere la prima chiamata.
class Cane extends Animale{
public Cane(int numeroGambe){
super(numeroGambe);
...
}
public Cane(String name, int numeroGambe){
this(numeroGambe);
...
}
}
Java Base 43bobpuley@gmail.com
Le interfacce
● Le interfacce assomigliano alle classi ma realizzano
un'astrazione maggiore e differisco anche per alcuni dettagli
● La differenza più evidente è che un'interfaccia può dichiarare
solo metodi astratti e fields final. Questo ha alcune
implicazioni, un metodo di un'interfaccia:
– non può essere private
– non può essere final
– non può essere static
● Un 'interfaccia serve a definire quindi dei comportamenti/
responsabilità senza specificare l'implementazione. SI può
dire che definiscano delle abilità, infatti spesso il nome
suggerisce questa idea (Serializable, Comparable, etc...)
Java Base 44bobpuley@gmail.com
Le interfacce
interfacce, ereditarietà multipla e java
● Se si considera che java vincola la definizione di una classe a
specificare al massimo una parent class, si può intuire perché
le interfacce siano utili per realizzare gerarchie più flessibili.
● Un 'interfaccia ha anche la funzione standard di best practice
nella modellazione di applicazioni, in particolare per realizzare
un buon disaccoppiamento tra i vari moduli applicativi e
riutilizzo.
Java Base 45bobpuley@gmail.com
Le eccezioni
● Le eccezioni e la loro gestione rappresentano un altro dei
concetti chiave di java
● Servono a gestire le situazioni impreviste, che, in qualche
modo, impedirebbero di proseguire l'esecuzione del
programma
● Si possono dividere in due categorie principali
– Checked: le eccezioni dichiarate nella signature di un
metodo (previste e presumibilmente gestibili)
– Unchecked: le eccezioni non dichiarate nella signature di
un metodo (impreviste e probabilmente bloccanti)
Java Base 46bobpuley@gmail.com
Le eccezioni
propagazione
● All'interno di un metodo o di un costruttore, è possibile
propagare un'eccezione ovvero interrompere l'esecuzione del
metodo corrente, comunicando al chiamante una certa
eccezione.
● La propagazione di un'eccezione si realizza attraverso la
keyword throw
public String getString() throws Exception{
if(condizione){
throw new Exception(“condizione violata”);
}
}
Java Base 47bobpuley@gmail.com
Le eccezioni
gestione
● All'interno di un blocco di codice, è possibile invocare metodi
che possono propagare eccezioni.
● Si può continuare la propagazione con la keyword throws
applicata al metodo in cui si richiama il codice checked
public InputStream getString(String url) throws
IOException{
return new URL(url).openStream();
}
Java Base 48bobpuley@gmail.com
Le eccezioni
gestione – clausola try
● Si può gestire l'eccezione con la struttura try {} catch {} finally{}
● Il codice incluso nel blocco try è soggetto al controllo delle
eccezioni
● Se si verifica un errore, viene invocata il corrispondente
blocco catch
public InputStream getString(String url) throws
MiaException{
try{
return new URL(url).openStream();
}catch(IOException e){
}finally{
}
}
Java Base 49bobpuley@gmail.com
Le eccezioni
gestione – clausola catch
● La clausola catch può comparire una o più volte
● Le eccezioni in catch devono essere in ordine di
generalizzazione (dai childs verso i parents)
try{
return new URL(url).openStream();
}catch(IOException e){
}catch(Exception e){
}
Java Base 50bobpuley@gmail.com
Le eccezioni
gestione – clausola finally
● La clausola finally indica un blocco di codice che deve sempre
essere eseguito
try{
fis = new FileInputStream(“c:prova.txt”);
}catch(FileNotfoundException e){
}catch(IOException e){
}finally{
if(fis != null)fis.close();
}
Java Base 51bobpuley@gmail.com
Le eccezioni
gerarchia

More Related Content

What's hot (14)

C#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivereC#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivere
 
Eclipse and Java
Eclipse and JavaEclipse and Java
Eclipse and Java
 
Jug 30 10 04 Jdo
Jug 30 10 04 JdoJug 30 10 04 Jdo
Jug 30 10 04 Jdo
 
Programmazione in Java Lezione 1
Programmazione in Java Lezione 1Programmazione in Java Lezione 1
Programmazione in Java Lezione 1
 
Linguaggio Java - Classi e Oggetti
Linguaggio Java - Classi e OggettiLinguaggio Java - Classi e Oggetti
Linguaggio Java - Classi e Oggetti
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
Corso c# - Dalle basi del linguaggio alla creazione di un'applicazione uwp
Corso c# - Dalle basi del linguaggio alla creazione di un'applicazione uwpCorso c# - Dalle basi del linguaggio alla creazione di un'applicazione uwp
Corso c# - Dalle basi del linguaggio alla creazione di un'applicazione uwp
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
 
Java 8
Java 8Java 8
Java 8
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
iOS_Course_6
iOS_Course_6iOS_Course_6
iOS_Course_6
 
Lezione 2: I thread
Lezione 2: I threadLezione 2: I thread
Lezione 2: I thread
 
Corso ABAP OO 02
Corso ABAP OO   02Corso ABAP OO   02
Corso ABAP OO 02
 
Corso ABAP OO 03
Corso ABAP OO  03Corso ABAP OO  03
Corso ABAP OO 03
 

Similar to Java SE 5. Capitolo 01: Base

Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionAndrea Della Corte
 
Panoramica su Ant
Panoramica su AntPanoramica su Ant
Panoramica su Antbobpuley
 
Maven from dummies
Maven from dummiesMaven from dummies
Maven from dummiesfirenze-gtug
 
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio MercurioTesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio MercurioAlessio Mercurio
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéEdmondo Porcu
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked DataSynapta
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked DataDavide Allavena
 
Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Massimiliano Dessì
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webRoberto Messora
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicinodavide ficano
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationTiziano Serritella
 
Webbit 2004: Aspectj
Webbit 2004: AspectjWebbit 2004: Aspectj
Webbit 2004: AspectjMatteo Baccan
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIvan Gualandri
 

Similar to Java SE 5. Capitolo 01: Base (20)

Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e Subversion
 
Panoramica su Ant
Panoramica su AntPanoramica su Ant
Panoramica su Ant
 
Maven from dummies
Maven from dummiesMaven from dummies
Maven from dummies
 
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio MercurioTesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio
Tesi: " Class loading in Android: applicazione a tuProlog " - Alessio Mercurio
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
Java - Lezione 1
Java - Lezione 1 Java - Lezione 1
Java - Lezione 1
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked Data
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked Data
 
Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Scala Programming Linux Day 2009
Scala Programming Linux Day 2009
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il web
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
Lezione01
Lezione01Lezione01
Lezione01
 
Lezione01
Lezione01Lezione01
Lezione01
 
Presentazione java7
Presentazione java7Presentazione java7
Presentazione java7
 
Webbit 2004: Aspectj
Webbit 2004: AspectjWebbit 2004: Aspectj
Webbit 2004: Aspectj
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
 
Hadoop SAR
Hadoop SARHadoop SAR
Hadoop SAR
 

Java SE 5. Capitolo 01: Base

  • 2. Java Base 2bobpuley@gmail.com Sommario 1. Cos'è java 2. Java tools 3. Parole riservate (keywords) 4. OO e java 5. Classi e oggetti 6. Fields, metodi e costruttori 7. Le interfacce 8. Le eccezioni
  • 3. Java Base 3bobpuley@gmail.com Cos'è Java? ● Linguaggio di programmazione ● Ambiente di sviluppo ● Ambiente applicativo ● Fasi di sviluppo ● La JVM ● Il Garbage Collector
  • 4. Java Base 4bobpuley@gmail.com Cos'è Java? Linguaggio di programmazione ● Semi-compilato ● Interpretato ● Orientato agli oggetti ● Multi-piattaforma ● Fortemente tipizzato ● Robusto (errori di compilazione)
  • 5. Java Base 5bobpuley@gmail.com Cos'è Java? Ambiente di sviluppo ● Come ambiente di sviluppo, Java offre una serie di tool invocabili a linea di comando per effettuare le principali operazioni – Un compilatore (javac) – Un interprete (java) – Un generatore di documentazione (javadoc) – Un tool per il packaging delle classi java (jar) – ...
  • 6. Java Base 6bobpuley@gmail.com Cos'è Java? Ambiente applicativo ● Il Java Runtime Environment (Jre) è l'ambiente applicativo dei programmi java sul sistema operativo ● La jre comprende le librerie fondamentali di java che consentono di sviluppare le più svariate applicazioni (streaming, console app, GUI, networking, Xml manipulation, etc...) ● La jre è anche supportata (come ambiente di esecuzione) dai principali browser per pc. ● Un subset della jre (la J2me) consente anche di sviluppare applicazione per dispositivi mobile.
  • 7. Java Base 7bobpuley@gmail.com Cos'è Java? Fasi di sviluppo
  • 8. Java Base 8bobpuley@gmail.com Cos'è Java? Fasi di sviluppo
  • 9. Java Base 9bobpuley@gmail.com Cos'è Java? La JVM ● La Java Virtual Machine (JVM) – è l'intermediario tra il software scritto in java da eseguire e la macchina fisica sul quale deve essere eseguito. ● ByteCode – Ogni programma java, in fase di compilazione, viene trasformato in un linguaggio (bytecode) che può essere letto ed eseguito dalla JVM indipendentemente dalla piattaforma di esecuzione e compilazione
  • 10. Java Base 10bobpuley@gmail.com Cos'è Java? Il Garbage Collector ● Il Garbage Collection thread – è un processo a bassa priorità che si occupa di liberare la memoria degli oggetti non più utilizzati o utilizzabili dall'applicazione (variabili al di fuori dello scope per esempio)
  • 11. Java Base 11bobpuley@gmail.com Java Tools ● Java – è un tool fornito con la jdk e la jre per lanciare le applicazioni java – Si può usare da linea di comando – Accetta diversi parametri per configurare l'esecuzione del codice – Accetta un numero arbitrario di argomenti che vengono inoltrati alla classe main dell'applicazione ● Javac – è un tool fornito con la jdk per compilare sorgenti java – Si può usare da linea di comando – Accetta diversi parametri per configurare la compilazione del codice ● Javadoc – è un tool fornito con la jdk per la generazione di documentazione a partire dai commenti presenti nel codice.
  • 12. Java Base 12bobpuley@gmail.com Java Tools java ● Java: java [ options ] class [ argument ... ] – Options ● -classpath : include classi o librerie nell classpath d'esecuzione ● -cp : shorcut per -classpath ● -jar : specifica che si vuole eseguire una classe contenuta in un archivio ● -version : stampa a video la versione della jre in esecuzione ● -help : restituisce l'elenco delle opzioni ● -? : shortcut per -help ● -Xms : imposta la dimensione iniziale della memoria dedicata ● -Xmx : imposta la dimensione massima della memoria dedicata Approfondimenti
  • 13. Java Base 13bobpuley@gmail.com Java Tools javac ● Javac: javac [ options ] sourceFiles – Options ● -classpath : include classi o librerie nel classpath per la compilazione ● -d : specifica la cartella nella quale verranno inseriti i files compilati ● -source : specifica per quale versione dlla jre si sta compilando ● -help : restituisce l'elenco delle opzioni ● -? : shortcut per -help Approfondimenti
  • 14. Java Base 14bobpuley@gmail.com Java Tools javadoc ● Javadoc: javadoc [ options ] [ packagenames ] [ sourcefilenames ] [ -subpackages pkg1:pkg2:... ] [ @argfiles ] – Options ● -d : specifica la cartella nella quale verranno inseriti i files compilati ● -public : documenta solo classi e membri pubblici ● -protected (default): documenta solo classi e membri protected e public. ● -package : documenta solo classi e membri package, protected, e public. ● -private : documenta solo classi e membri tutte le classi e i membri ● -help : restituisce l'elenco delle opzioni ● -? : shortcut per -help Approfondimenti
  • 16. Java Base 16bobpuley@gmail.com OO e Java ● Ereditarietà ● Overloading ● Overriding ● Polimorfismo ● Incapsulamento
  • 17. Java Base 17bobpuley@gmail.com OO e Java Ereditarietà ● Per ereditarietà si intende la capacità di un programma (classe) di essere definito come specializzazione di un altro programma (classe) ● In java questo si ottiene in fase di definizione di una classe attraverso la keyword extends: – class Cane extends Animale{} ● Dire che Cane estende Animale implica che la classe Cane (sotto-classe) acquisisce automaticamente tutte le proprietà (attributi d'istanza) e i comportamenti (metodi della classe) della classe Animale (super-classe)
  • 18. Java Base 18bobpuley@gmail.com OO e Java Overloading (dei metodi) ● L'overloading è un concetto che si applica esclusivamente ai metodi ● Consente di definire più metodi, nella stessa classe, con il medesimo nome e tipo restituito ma diversi parametri (per tipo o numero): – void stampa(int eta) – void stampa(String nome) – void stampa(Sting nome, int eta) ● Il runtime environment invocherà quello giusto a seconda dei parametri passati: – istanza.stampa(12); – istanza.stampa(“gigi”, 12);
  • 19. Java Base 19bobpuley@gmail.com OO e Java Overriding (dei metodi) ● L'overriding è un concetto che si applica esclusivamente ai metodi e riguarda i metodi ereditati dalla super classe ● Consente di ridefinire il comportamento dei metodi della super classe: class Animale{ public int getNumeroGambe(){ return 0; } } class Cane extends Animale{ public int getNumeroGambe(){ return 4; } }
  • 20. Java Base 20bobpuley@gmail.com OO e Java polimorfismo ● Il polimorfismo è la capacità del runtime environment di scegliere il metodo corretto nella gerarchia delle classi, tenendo conto dell'overriding Animale a = new Animale(); Animale b = new Cane(); Cane c = new Cane(); a.getNumeroGambe();//0 b.getNumeroGambe();//4 c.getNumeroGambe();//4
  • 21. Java Base 21bobpuley@gmail.com OO e Java incapsulamento ● Il concetto di incaspulation viene implementato in java attraverso i modificatori (keywords) di visibilità: – private (visibile solo dalla classe stessa) – default (visibile solo dalle classi dello stesso package) – protected (visibile dalla classe e dalle sue sottoclassi) – public
  • 22. Java Base 22bobpuley@gmail.com Classi e oggetti ● Occorre distinguere chiaramente il significato di classe da quello di oggetto (istanza) ● La classe si può definire come il progetto o struttura di un oggetto ● L'istanza è un oggetto reale pronto all'uso: class Animale{ public int getNumeroGambe(){ return 0; } } Animale a = new Animale();
  • 23. Java Base 23bobpuley@gmail.com Classi e oggetti Definizione di una classe ● Lo schema generale della definizione di una classe è il seguente: – [modificatore di visibilità] [altri modificatori] class nomeClasse [extends nomeClasse] [implements nomeInterfaccia[,nomeinterfaccia]]{} class Animale{} public class Animale{} public final class Animale{} public abstract class Animale{} public class Animale extends EssereVivente implements EssereMobile, EssereMortale {}
  • 24. Java Base 24bobpuley@gmail.com Classi e oggetti tipi di classe ● Le classi java possono essere raggruppate a seconda di diversi criteri: – Sulla base di come e dove vengono dichiarate ● Classi standard (class) ● Classi annidate (innerclass) ● Classi anonime (anonymous class) – Sulla base delle loro visibiltà ● Classi pubbliche ● Classi package ● Classi protette ● Classi private – Sulla base della loro comportamento specifico ● Classi astratte ● Classi final...
  • 25. Java Base 25bobpuley@gmail.com Classi e oggetti classi standard ● Una classe standard è una classe definita: – In un file di testo con estensione java che ● ha lo stesso nome della classe (key-sensitive) ● Si trova (path relativo dei sorgenti) nel path corrispondente al package della classe ● <sorgenti>/mio/package/Animale.java package mio.package; class Animale{ public int getNumeroGambe(){ return 0; } }
  • 26. Java Base 26bobpuley@gmail.com Classi e oggetti classi annidate ● Una inner class è una classe definita all'interno di un'altra classe: package mio.package; class Veicolo{ public Motore getMotore(){ return 0; } public class Motore{ public int getVelicitaMassima(){ return 100; } } }
  • 27. Java Base 27bobpuley@gmail.com Classi e oggetti classi anonime ● Una classe anonima è una classe che viene ridefinità a runtime public Animale getAnimale(){ return new Animale(){ public int getNumeroGambe(){ return 2; } }; }
  • 28. Java Base 28bobpuley@gmail.com Classi e oggetti modificatori di visibilità delle classi ● Alcune delle keywords java possono essere utilizzate per limitare la visibilità delle classi – private (solo inner classes) – default (se viene omesso il modificatore) – protected (solo inner class) – public private class Animale{} protected class Animale{} class Animale{} public class Animale{}
  • 29. Java Base 29bobpuley@gmail.com Classi e oggetti altri modificatori delle classi ● Con l'ausilio di alcuni altri modificatori si possono definire altri comportamenti specifici della classe – Classi abstract (non si possono creare istanze direttamente da queste classi) – Classi final (non è possibile estendere queste classi) – Classi statiche (per le inner classes consente l'accesso e l'utilizzo da parte di altre classi conformemente ai modificatori di visibilità applicati) class Veicolo{ public static class Motore{ } } Veicolo.Motore motore = new Veicolo.Motore();
  • 30. Java Base 30bobpuley@gmail.com Fields, metodi e costruttori ● Le fields sono le proprietà o attributi di una classe, volendo li si può intendere come lo stato di un'istanza ● I metodi sono i comportamenti o responsabilità di una determinata classe ● I costruttori sono dei metodi speciali per inizializzare l'oggetto abstract class Animale{ private int numeroGambe; public Animale(int numeroGambe){ this.numeroGambe = numeroGambe; } public int getNumeroGambe(){ return numeroGambe; } }
  • 31. Java Base 31bobpuley@gmail.com Fields, metodi e costruttori d'istanza o di classe? ● Le fields e i metodi possono essere d'istanza o di classe – Membri di classe ● Hanno il modificatore static ● Vi si può accedere senza creare un'istanza della classe ● Nel caso delle fields, il loro valore è condiviso da tutte le istanze della classe – Membri di istanza ● Non hanno il modificatore static ● Per accedervi occorre un'istanza reale della classe ● Nel caso delle fields, il valore è incapsulato e indipendente in ciascuna istanza
  • 32. Java Base 32bobpuley@gmail.com Fields, metodi e costruttori le fields ● Le fields possono essere dichiarate in qualunque punto del body della classe ● Le dichiarazioni delle fields devono rispettare la seguente forma generale – [modificatore di visibilità] [altri modificatori] tipo nomeField [= initialValue]; ● Il modificatore di visibilità non ha restrizioni d'uso e il suo significato rispecchia esattamente quello dell' OO ● I restanti modificatori implicano dei comportamenti particolari ● Il tipo deve essere una classe java accessibile da quella corrente ● Il valore iniziale può essere la keyword null
  • 33. Java Base 33bobpuley@gmail.com Fields, metodi e costruttori le fields – il modificatore static ● Il modificatore static rende la field di classe. – Questo significa che sarà possibile accedere al suo valore senza creare un'istanza della classe (es File.PATH_SEPARATOR) – Implica anche che ciascuna istanza della classe condividerà il valore di quella field, se una delle istanze la modificasse, allora tutte le altre istanze vedranno anch'esse il valore modificato
  • 34. Java Base 34bobpuley@gmail.com Fields, metodi e costruttori le fields – il modificatore transient ● Il modificatore transient serve solo in casi particolari e solo in classi che implementino l'interfaccia serializable ● Indica al runtime environment che, in caso di serializzazione dell'istanza (persistenza dello stato su filesystem), la field transient non deve essere processata
  • 35. Java Base 35bobpuley@gmail.com Fields, metodi e costruttori le fields – la keyword reference this ● this è un reference fornito di default dall'ambiente java per offrire maggiore libertà nella scelta dei nomi di variabili, parametri e fields, eliminando le ambiguità ove si presentassero ● Un esempio può chiarire il problema e la soluzione con this abstract class Animale{ private int numeroGambe; public Animale(int numeroGambe){ this.numeroGambe = numeroGambe; } public int getNumeroGambe(){ return numeroGambe; } }
  • 36. Java Base 36bobpuley@gmail.com Fields, metodi e costruttori i metodi ● I metodi rappresentano, dal punto di vista della modellazione, le responsabilità di una classe ● Lo schema generale di un metodo è: – [modificatore di visibilità] [altri modificatori] tipoRestituito nomeMetodo( [ paramenterType parameterName[ , paramenterType parameterName]*]) [throws exceptionName[, exceptionName]*]{} ● I modificatori di visibilità sono tutti validi e rispecchiano il significato già discusso ● I restanti modificatori implicano comportamenti particolari del metodo ● Il tipo restituito deve essere unico ed un tipo java valido ● I parametri 0 o molti
  • 37. Java Base 37bobpuley@gmail.com Fields, metodi e costruttori i metodi – il modificatore abstract ● Questo modificatore può essere usato solo da classi a loro volta abstract ● Comunica al compilatore che di questo metodo fornisce una definizione, ma non l'implementazione – Per questa ragione la classe che lo contiene deve essere abstract ● Impedire di creare un'istanza che contiene metodi non definiti ● Obbligare le classi concrete che la estendono a fornire un'implementazione di quel metodo
  • 38. Java Base 38bobpuley@gmail.com Fields, metodi e costruttori i metodi – il modificatore static ● Questo modificatore rende il metodo di classe ● Sarà quindi possibile invocare il metodo senza creare un'istanza della classe che lo contiene (es. Collections.sort(List list); ) ● I metodi statici impongono però una limitazione – Non è possibile fare l'overriding di un metodo statico ● D'alta pare questo è ovvio se si pensa che un metodo statico non può usufruire del polimorfismo che si applica solo ad istanze e non a classi
  • 39. Java Base 39bobpuley@gmail.com Fields, metodi e costruttori i metodi – i modificatori final, native, synch ● Il modificatore final impedisce alle eventuali sottoclassi di effettuare l'overriding del metodo ● Il modificatore native si applica ai metodi che accedono a librerie native (del sistema operativo come le dll di windows) ● Il modificatore synchronized si applica a metodi che sono progettati per operare in ambiente multi-threading, e per i quali si vuole garantire l'accesso sequenziale
  • 40. Java Base 40bobpuley@gmail.com Fields, metodi e costruttori i costruttori ● I costruttori servono ad inizializzare una classe ● La dichiarazione di un costruttore deve rispettare la sintassi: – [modificatore di visibilità] nomeClasse( [ paramenterType parameterName[ , paramenterType parameterName]*]) [throws exceptionName[, exceptionName]*]{} ● Qualunque modificatore di visibilità è valido e rispecchia il significato già visto nell'OO ● Il nome del costruttore deve sempre essere uguale al nopme della classe ● Può avere parametri ● Può lanciare un'eccezione
  • 41. Java Base 41bobpuley@gmail.com Fields, metodi e costruttori i costruttori (continua) ● I costruttori possono essere visti come particolari metodi, salvo alcune differenze – Funzione: un costruttore si occupa di inizializzare correttamente un'istanza prima che questa sia fruibile dal client ( i metodi, a parte quelli statici, vengono invocati sull'istanza già creata) – Accesso (invocazione): un costruttore viene invocato attraverso la keyword new e restituisce sempre un reference all'oggetto stesso. – Return type: i costruttori non dichiarano alcun return type – Accesso alle costanti: il costruttore è l'unico punto, a parte la dichiarazione, ove sia possibile inizializzare una field final. – Ereditarietà: i costruttori non vengono ereditati
  • 42. Java Base 42bobpuley@gmail.com Fields, metodi e costruttori i costruttori – this e super ● Anche per il costruttore valgono le regole generali di overloading ● È possibile fare riferimento ai costruttori della super-classe con la keyword super; deve essere la prima chiamata. ● È possibile fare riferimento ai costruttori overloaded con la keyword this; deve essere la prima chiamata. class Cane extends Animale{ public Cane(int numeroGambe){ super(numeroGambe); ... } public Cane(String name, int numeroGambe){ this(numeroGambe); ... } }
  • 43. Java Base 43bobpuley@gmail.com Le interfacce ● Le interfacce assomigliano alle classi ma realizzano un'astrazione maggiore e differisco anche per alcuni dettagli ● La differenza più evidente è che un'interfaccia può dichiarare solo metodi astratti e fields final. Questo ha alcune implicazioni, un metodo di un'interfaccia: – non può essere private – non può essere final – non può essere static ● Un 'interfaccia serve a definire quindi dei comportamenti/ responsabilità senza specificare l'implementazione. SI può dire che definiscano delle abilità, infatti spesso il nome suggerisce questa idea (Serializable, Comparable, etc...)
  • 44. Java Base 44bobpuley@gmail.com Le interfacce interfacce, ereditarietà multipla e java ● Se si considera che java vincola la definizione di una classe a specificare al massimo una parent class, si può intuire perché le interfacce siano utili per realizzare gerarchie più flessibili. ● Un 'interfaccia ha anche la funzione standard di best practice nella modellazione di applicazioni, in particolare per realizzare un buon disaccoppiamento tra i vari moduli applicativi e riutilizzo.
  • 45. Java Base 45bobpuley@gmail.com Le eccezioni ● Le eccezioni e la loro gestione rappresentano un altro dei concetti chiave di java ● Servono a gestire le situazioni impreviste, che, in qualche modo, impedirebbero di proseguire l'esecuzione del programma ● Si possono dividere in due categorie principali – Checked: le eccezioni dichiarate nella signature di un metodo (previste e presumibilmente gestibili) – Unchecked: le eccezioni non dichiarate nella signature di un metodo (impreviste e probabilmente bloccanti)
  • 46. Java Base 46bobpuley@gmail.com Le eccezioni propagazione ● All'interno di un metodo o di un costruttore, è possibile propagare un'eccezione ovvero interrompere l'esecuzione del metodo corrente, comunicando al chiamante una certa eccezione. ● La propagazione di un'eccezione si realizza attraverso la keyword throw public String getString() throws Exception{ if(condizione){ throw new Exception(“condizione violata”); } }
  • 47. Java Base 47bobpuley@gmail.com Le eccezioni gestione ● All'interno di un blocco di codice, è possibile invocare metodi che possono propagare eccezioni. ● Si può continuare la propagazione con la keyword throws applicata al metodo in cui si richiama il codice checked public InputStream getString(String url) throws IOException{ return new URL(url).openStream(); }
  • 48. Java Base 48bobpuley@gmail.com Le eccezioni gestione – clausola try ● Si può gestire l'eccezione con la struttura try {} catch {} finally{} ● Il codice incluso nel blocco try è soggetto al controllo delle eccezioni ● Se si verifica un errore, viene invocata il corrispondente blocco catch public InputStream getString(String url) throws MiaException{ try{ return new URL(url).openStream(); }catch(IOException e){ }finally{ } }
  • 49. Java Base 49bobpuley@gmail.com Le eccezioni gestione – clausola catch ● La clausola catch può comparire una o più volte ● Le eccezioni in catch devono essere in ordine di generalizzazione (dai childs verso i parents) try{ return new URL(url).openStream(); }catch(IOException e){ }catch(Exception e){ }
  • 50. Java Base 50bobpuley@gmail.com Le eccezioni gestione – clausola finally ● La clausola finally indica un blocco di codice che deve sempre essere eseguito try{ fis = new FileInputStream(“c:prova.txt”); }catch(FileNotfoundException e){ }catch(IOException e){ }finally{ if(fis != null)fis.close(); }
  • 51. Java Base 51bobpuley@gmail.com Le eccezioni gerarchia