Modulo di Java? Sì, grazie Il linguaggio di Internet? Portabilità su qualunque piattaforma (non solo calcolatori): It works everywhere Supporto e disponibilità di strumenti, librerie e documentazione garantiti Object-oriented puro e moderno Costante evoluzione Scopo del corso Il corso ha lo scopo di trattare i fondamenti della programmazione, usando il linguaggio Java come strumento, pertanto: si tratteranno solo gli aspetti fondamentali del linguaggio si utilizzerà la piattaforma SE (Standard Edition) ) adatta allo sviluppo di applicazioni su Personal Computer Primi passi con Java 1
Modulo di Cos è la programmazione? La realizzazione di un programma comprende: L analisi del problema da risolvere Il progetto delle strutture dati e degli algoritmi per risolverlo La codifica delle strutture e degli algoritmi progettati in un linguaggio di programmazione La documentazione del codice prodotto La verifica e validazione del codice prodotto La manutenzione del codice prodotto Cosa non è la programmazione? La programmazione non è solo la scrittura di codice : prima la testa poi la tastiera! La programmazione non è il lavoro degli informatici : l ingegnere informatico può svolgere svariati ruoli professionali, in alcuni dei quali l attività di programmazione (e in particolare la scrittura di codice) non è predominante Primi passi con Java 2
Modulo di Perché imparare a programmare? La necessità di affrontare problemi di programmazione è presente in qualunque area dell Ingegneria dell Informazione (Elettronica, Informatica, Telecomunicazioni, Automazione) Un ingegnere dell area dell Informazione DEVE saper programmare (anche se non fa il programmatore a tempo pieno) Saper programmare è un notevole valore aggiunto per un professionista in qualunque area dell Ingegneria (e non solo) Roadmap 0. Primi passi con Java Introduzione alla tecnologia Java Primi passi con Java 3
Modulo di La tecnologia Java Con il termine Java technology si fa riferimento a due concetti ben distinti: Un linguaggio di programmazione Un insieme di piattaforme/tecnologie che offrono strumenti e permettono l utilizzo di programmi scritti in Java in diverse situazioni (dalle applicazioni Web ai cellulari) Le piattaforme Java: SE Java SE (Standard Edition): piattaforma base destinata alla realizzazione di applicazioni "stand-alone" alone" su calcolatori convenzionali e simili Due componenti principali JRE (Java Runtime Environment): strumenti per l esecuzione di programmi Java già sviluppati JDK (Java Development Kit): strumenti base per lo sviluppo di programmi (include JRE) Primi passi con Java 4
Modulo di Le piattaforme Java: SE Altre piattaforme/tecnologie Java Java EE (Enterprise( Edition): piattaforma molto estesa per applicazioni client-server operanti in rete (web e non solo) Java ME (Micro( Edition): piattaforma ridotta per applicazioni su dispositivi dalle risorse limitate (cellulari, palmari, ) Java FX: tecnologia molto recente orientata a scripting e dispositivi mobili Primi passi con Java 5
Modulo di Altre piattaforme/tecnologie Java Java Embedded: : varianti di Java SE e Java ME per applicazioni embedded (ovvero nascoste dentro dispositivi di ogni genere dalle stampanti alle automobili) Java Card: versione ridottissima per Smart Card Java TV Java DB Evoluzione di Java SE 1996: JDK 1.0 1997: JDK 1.1 1998: Java 2 (SDK 1.2) 1999: J2SE 1.3 (SDK 1.3) 2002: J2SE 1.4 (SDK 1.4) 2004: J2SE (1.)5.0 (JDK 5.0) Tiger Dicembre 2006: Java SE 6 (JDK 6) Luglio 2011: Java 7 (JDK 7) Primi passi con Java 6
Modulo di Evoluzione di Java SE Le variazioni introdotte nelle versioni da 1.2 a 1.4 non hanno riguardato gli aspetti fondamentali del linguaggio trattati nel corso La versione 1.5 ha introdotto variazioni significative anche su aspetti fondamentali (che non sono state ancora recepite in tutti i contesti applicativi) La versione 6 non introduce variazioni sostanziali La versione 7 introduce alcune variazioni limitate Il materiale presentato nei lucidi fa riferimento alle versioni 5-65 6 (con indicazioni sulle differenze rispetto alle versioni precedenti ed alla versione 7) Roadmap 0. Primi passi con Java Introduzione alla tecnologia Java Il primo programma Java Primi passi con Java 7
Modulo di Il primo programma Java public class Buongiorno public static void main (String args[]) System.out.println println("buongiorno!"); Il primo programma Java E costituito da una sola classe la cui definizione consiste del solo metodo main L esecuzione di qualunque applicazione Java stand-alone alone coincide con l esecuzione del metodo main di una classe Il metodo main in questo esempio è costituito da una sola istruzione di stampa a video Primi passi con Java 8
Modulo di Parola riservata (modificatore di accesso alla classe) Il primo programma Java public class Buongiorno public static void main (String args[]) Parola riservata che precede la definizione di una classe Nome della classe System.out.println println("buongiorno!"); Graffe che racchiudono la definizione della classe (body o corpo della classe) Definizione del metodo main Il metodo main Intestazione (detta anche signature o firma) del metodo main public static void main (String args[]) System.out.println println("buongiorno!") ; Graffe che racchiudono il corpo (body) del metodo Unica istruzione contenuta nel corpo del metodo main Fine istruzione Primi passi con Java 9
Modulo di Il metodo main Parola riservata (modificatore di accesso al metodo) Parola riservata (livello di definizione del metodo) Parola riservata (tipo restituito del metodo) public static void main (String args[]) Nome del metodo Lista argomenti (o parametri) formali del metodo main System.out.println ( "Buongiorno!" ) ; Invocazione del metodo predefinito println per la stampa a video Lista argomenti (o parametri) attuali passati al metodo println Dalla carta al calcolatore: modello base Produzione del codice sorgente (file.java editor qualunque) Compilazione del codice sorgente: produzione del bytecode (file.class compilatore) Esecuzione = interpretazione del bytecode da parte di un interprete software (JVM: Java Virtual Machine) Primi passi con Java 10
Modulo di Who is who PROGRAMMATORE SISTEMA OPERATIVO codice sorgente COMPILATORE codice intermedio (bytecode) INTERPRETE (JVM) chiamate di sistema instruction set HARDWARE comprensione del problema conoscenze tecniche creatività Parte indipendente Parte dipendente dalla piattaforma hardware/software di base Roadmap 0. Primi passi con Java Introduzione alla tecnologia Java Il primo programma Java Uso di più classi Primi passi con Java 11
Modulo di Il secondo programma Java Un programma Java è costituito da una o (normalmente) più classi La capacità di progettare e sviluppare programmi di media complessità costituiti da più classi è l obiettivo formativo finale del corso da raggiungere per passi successivi Cominciamo con un semplice esempio Il secondo programma Java public class Ossequioso public void saluta () System.out.println println("buongiorno!"); Primi passi con Java 12
Modulo di Parola riservata (modificatore di accesso alla classe) La classe Ossequioso public class Ossequioso Parola riservata che precede la definizione di una classe Nome della classe public void saluta () System.out.println println("buongiorno!"); Graffe che racchiudono la definizione della classe (body o corpo della classe) Definizione del metodo saluta Il metodo saluta Intestazione (detta anche signature o firma) del metodo saluta public void saluta () System.out.println println("buongiorno!") ; Graffe che racchiudono il corpo (body) del metodo Unica istruzione contenuta nel corpo del metodo saluta Fine istruzione Primi passi con Java 13
Modulo di public Il metodo saluta Parola riservata (modificatore di accesso al metodo) Il livello di definizione del metodo è implicito Parola riservata (tipo restituito del metodo) Nome del metodo void saluta () Lista (vuota) di argomenti (o parametri) formali del metodo saluta System.out.println ( "Buongiorno!"); Invocazione del metodo predefinito println per la stampa a video Lista argomenti (o parametri) attuali passati al metodo println La classe Ossequioso La classe Ossequioso (come la maggior parte delle classi Java) non è pensata per essere eseguita da sola (non ha main program) La sua definizione consiste di un solo metodo di nome saluta La classe Ossequioso dovrà essere utilizzata insieme ad (almeno) un altra classe Primi passi con Java 14
Modulo di La classe Ossequioso Normalmente una classe rappresenta il prototipo generico di una famiglia di oggetti simili La (per ora fin troppo semplice) classe Ossequioso rappresenta il prototipo di tutti gli oggetti capaci di trasmettere un saluto (per ora sempre lo stesso) Un elemento concreto di una classe viene detto istanza della classe La seconda classe del programma dovrà creare un istanza di Ossequioso ed invocare su di essa l esecuzione del metodo saluta Il secondo programma Java public class BuongiornoMain public static void main (String [ ] args) Ossequioso maggiordomo; maggiordomo = new Ossequioso(); maggiordomo.saluta(); Primi passi con Java 15
Modulo di Parola riservata (modificatore di accesso alla classe) La classe BuongiornoMain public class BuongiornoMain Parola riservata che precede la definizione di una classe Nome della classe public static void main (String args[]) Ossequioso maggiordomo; maggiordomo = new Ossequioso(); maggiordomo.saluta(); Graffe che racchiudono la definizione della classe (body o corpo della classe) Definizione del metodo main La classe BuongiornoMain La classe BuongiornoMain contiene il solo metodo main e può quindi essere "eseguita" Il metodo main di BuongiornoMain richiede l esistenza della classe Ossequioso e rappresenta uno dei più tipici schemi di utilizzo di una classe da parte di un altra Primi passi con Java 16
Modulo di La classe BuongiornoMain public static void main (String args[]) Definizione di una variabile Ossequioso maggiordomo; Assegnazione della variabile maggiordomo = new Ossequioso(); maggiordomo.saluta(); Invocazione del metodo saluta Definizione di una variabile Ossequioso maggiordomo ; Tipo della variabile Nome della variabile Viene definita una variabile di nome maggiordomo e di tipo Ossequioso La definizione di una variabile di tipo Ossequioso non porta a creare automaticamente un istanza di Ossequioso La variabile maggiordomo per ora e solo una locazione di memoria priva di contenuto e predisposta per contenere un riferimento ad un oggetto di tipo Ossequioso Primi passi con Java 17
Modulo di Assegnazione maggiordomo = new Ossequioso(); Nome della variabile che riceve l assegnazione Operatore di assegnazione Valore assegnato alla variabile Viene assegnato un valore alla variabile maggiordomo Il valore assegnato e il risultato dell uso dell operatore new L operatore new Parola riservata che indica la costruzione di un nuovo oggetto new Ossequioso(); Nome di una classe L oggetto costruito e istanza di una classe e ne rispecchia la definizione Lista degli argomenti utilizzati per la costruzione (in questo caso nessuno) Tecnicamente l operatore new invoca uno dei costruttori della classe passandogli una lista di argomenti Se il programmatore non definisce costruttori ne esiste uno di default default che fa il minimo indispensabile Primi passi con Java 18
Modulo di Costruzione di un oggetto CODICE Ossequioso maggiordomo; MEMORIA maggiordomo null maggiordomo=new Ossequioso(); saluta()... Istanza della classe Ossequioso riferita dalla variabile maggiordomo Invocazione di un metodo maggiordomo.saluta(); Nome di una variabile che riferisce un oggetto Separatore Nome di un metodo definito nella classe di cui l oggetto e istanza Lista argomenti attuali passati al metodo A partire da una variabile che riferisce un oggetto si può invocare un metodo dell oggetto La definizione del metodo è quella stabilita nella classe di cui l oggetto è istanza La lista degli argomenti attuali è vuota come lo era quella degli argomenti formali Primi passi con Java 19
Modulo di... Invocazione di un metodo CODICE MEMORIA maggiordomo maggiordomo.saluta(); saluta()... Roadmap 0. Primi passi con Java Introduzione alla tecnologia Java Il primo programma Java Uso di più classi Attributi e costruttori Primi passi con Java 20
Modulo di Definizione di attributi costanti Non è consigliabile cablare dentro il codice il valore prefissato di un dato Nella classe Ossequioso il dato cablato nel codice è il saluto Buongiorno! E preferibile separare la definizione del saluto dall azione di presentarlo a video Questo richiede la definizione di un attributo costante della classe Ossequioso Definizione di attributi costanti public class Ossequioso private final String MIO_SALUTO = "Buongiorno!"; public void saluta () System.out.println println(mio_saluto); Primi passi con Java 21
Modulo di Definizione di attributi costanti Parola riservata (modificatore di accesso all attributo) Tipo dell attributo Nome dell attributo private final String MIO_SALUTO = "Buongiorno!" ; Parola riservata (indica che l attributo è immutabile) Il livello di definizione dell attributo è implicito Operatore di assegnazione Valore assegnato all attributo costante Definizione di attributi variabili La classe Ossequioso nella versione fin qui presentata è di limitatissima utilità poiche tutte le sue istanze sarebbero di fatto uguali La classe Ossequioso sarebbe un po più utile se fosse possibile creare diverse istanze di Ossequioso ciascuna capace di presentare un saluto diverso (p.e. in una diversa lingua) E necessario che Ossequioso abbia un attributo variabile anziche di valore predefinito Primi passi con Java 22
Modulo di Definizione di attributi variabili public class Ossequioso private String miosaluto; public void saluta () System.out.println println(miosaluto); Definizione di attributi variabili Parola riservata (modificatore di accesso all attributo) Tipo dell attributo Nome dell attributo private String miosaluto ; L assenza della parola final indica che l attributo e variabile Il livello di definizione dell attributo è implicito Primi passi con Java 23
Modulo di Nota terminologica Gli attributi (attributes( attributes) ) vengono anche chiamati campi (fields( fields) ) o data members della classe Un attributo costante viene normalmente chiamato costante Un attributo variabile viene normalmente chiamato attributo Inizializzazione degli attributi La versione appena presentata della classe Ossequioso è incompleta: si definisce un attributo variabile ma non il suo valore L assegnazione dei valori agli attributi avviene normalmente nella fase di costruzione di un oggetto ad opera di metodi speciali detti metodi costruttori Dobbiamo quindi dotare la classe Ossequioso di un costruttore Primi passi con Java 24
Modulo di Metodi costruttori public class Ossequioso private String miosaluto; public Ossequioso (String( cosadevodire) miosaluto = cosadevodire; public void saluta () System.out.println println(miosaluto); Il costruttore Parola riservata (modificatore di accesso al metodo costruttore) Il nome del metodo uguale al nome della classe indica che si tratta di un costruttore Lista di argomenti (o parametri) formali del costruttore public Ossequioso (String( cosadevodire) miosaluto = cosadevodire; All attributo miosaluto viene assegnato il valore dell argomento cosadevodire Primi passi con Java 25
Modulo di Invocazione del costruttore A questo punto la classe Ossequioso è completa ma è richiesta una modifica della classe BuongiornoMain che rifletta il nuovo modo di costruire le istanze della classe Ossequioso Anziché usare il costruttore predefinito usiamo quello definito da noi che richiede di ricevere un argomento di tipo String Invocazione del costruttore public class BuongiornoMain private final static String SALUTO_ITA = "Buongiorno!"; public static void main (String args[]) Ossequioso maggiordomo; maggiordomo = new Ossequioso(SALUTO_ITA); maggiordomo.saluta(); Primi passi con Java 26
Modulo di Invocazione del costruttore public class BuongiornoMain Definizione attributo costante private final static String SALUTO_ITA = "Buongiorno!"; public static void main (String args[]) Ossequioso maggiordomo; maggiordomo = new Ossequioso(SALUTO_ITA); maggiordomo.saluta(); Invocazione del costruttore passando come argomento attuale l attributo SALUTO_ITA Costruzione di un oggetto CODICE...SALUTO_ITA="Buongiorno!"... Ossequioso maggiordomo; maggiordomo= new Ossequioso(SALUTO_ITA); SALUTO_ITA maggiordomo null MEMORIA Buongiorno! Primi passi con Java 27
Modulo di... Costruzione di un oggetto CODICE BuongiornoMain SALUTO_ITA MEMORIA Buongiorno! maggiordomo= new Ossequioso(SALUTO_ITA); CODICE Ossequioso Ossequioso(String cosadevodire) miosaluto=cosadevodire; maggiordomo null miosaluto...saluta()...... Invocazione del metodo CODICE BuongiornoMain MEMORIA SALUTO_ITA Buongiorno! maggiordomo.saluta() saluta() CODICE Ossequioso System.out.println(mioSaluto miosaluto); maggiordomo null miosaluto...saluta()... Primi passi con Java 28
Modulo di Roadmap 0. Primi passi con Java Introduzione alla tecnologia Java Il primo programma Java Uso di più classi Attributi e costruttori Uso di più istanze Due maggiordomi Un solo maggiordomo che ci ossequia non ci basta più Creare due maggiordomi richiede di modificare solo la classe BuongiornoMain: avremo quindi due istanze distinte della classe Ossequioso Primi passi con Java 29
Modulo di Due maggiordomi public class BuongiornoMain private final static String SALUTO_ITA = "Buongiorno!"; private final static String SALUTO_FRA = "Bonjour" Bonjour!"; public static void main (String args[]) Ossequioso maggiordomoita, maggiordomofra; maggiordomoita = new Ossequioso(SALUTO_ITA); maggiordomofra = new Ossequioso(SALUTO_FRA); maggiordomoita.saluta(); maggiordomofra.saluta(); E possibile definire piu variabili dello stesso tipo su un unica riga separando i nomi con virgole Due maggiordomi public class BuongiornoMain private final static String SALUTO_ITA = "Buongiorno!"; private final static String SALUTO_FRA = "Bonjour" Bonjour!"; public static void main (String args[]) Ossequioso maggiordomoita, maggiordomofra; maggiordomoita = new Ossequioso(SALUTO_ITA); maggiordomofra = new Ossequioso(SALUTO_FRA); maggiordomoita.saluta(); maggiordomofra.saluta(); Primi passi con Java 30
Modulo di Due maggiordomi SALUTO_ITA Buongiorno! SALUTO_FRA Bonjour! maggiordomoita maggiordomofra null null Due maggiordomi public class BuongiornoMain private final static String SALUTO_ITA = "Buongiorno!"; private final static String SALUTO_FRA = "Bonjour" Bonjour!"; public static void main (String args[]) Ossequioso maggiordomoita, maggiordomofra; maggiordomoita = new Ossequioso(SALUTO_ITA); maggiordomofra = new Ossequioso(SALUTO_FRA); maggiordomoita.saluta(); maggiordomofra.saluta(); Primi passi con Java 31
Modulo di Due maggiordomi SALUTO_ITA Buongiorno! SALUTO_FRA Bonjour! maggiordomoita maggiordomofra null null miosaluto...saluta() System.out.println (miosaluto); Due maggiordomi public class BuongiornoMain private final static String SALUTO_ITA = "Buongiorno!"; private final static String SALUTO_FRA = "Bonjour" Bonjour!"; public static void main (String args[]) Ossequioso maggiordomoita, maggiordomofra; maggiordomoita = new Ossequioso(SALUTO_ITA); maggiordomofra = new Ossequioso(SALUTO_FRA); maggiordomoita.saluta(); maggiordomofra.saluta(); Primi passi con Java 32
Modulo di Due maggiordomi SALUTO_ITA Buongiorno! SALUTO_FRA Bonjour! maggiordomoita maggiordomofra null null miosaluto miosaluto...saluta() System.out.println (miosaluto);...saluta() System.out.println (miosaluto); Due maggiordomi public class BuongiornoMain private final static String SALUTO_ITA = "Buongiorno!"; private final static String SALUTO_FRA = "Bonjour" Bonjour!"; public static void main (String args[]) Ossequioso maggiordomoita, maggiordomofra; maggiordomoita = new Ossequioso(SALUTO_ITA); maggiordomofra = new Ossequioso(SALUTO_FRA); maggiordomoita.saluta(); maggiordomofra.saluta(); Primi passi con Java 33
Modulo di Due maggiordomi SALUTO_ITA Buongiorno! SALUTO_FRA Bonjour! maggiordomoita maggiordomofra null null miosaluto miosaluto...saluta() System.out.println (miosaluto);...saluta() System.out.println (miosaluto); Due maggiordomi public class BuongiornoMain private final static String SALUTO_ITA = "Buongiorno!"; private final static String SALUTO_FRA = "Bonjour" Bonjour!"; public static void main (String args[]) Ossequioso maggiordomoita, maggiordomofra; maggiordomoita = new Ossequioso(SALUTO_ITA); maggiordomofra = new Ossequioso(SALUTO_FRA); maggiordomoita.saluta(); maggiordomofra.saluta(); Primi passi con Java 34
Modulo di Due maggiordomi SALUTO_ITA Buongiorno! SALUTO_FRA Bonjour! maggiordomoita maggiordomofra null null miosaluto miosaluto...saluta() System.out.println (miosaluto);...saluta() System.out.println (miosaluto); Roadmap 0. Primi passi con Java Introduzione alla tecnologia Java Il primo programma Java Uso di più classi Attributi e costruttori Uso di più istanze Tirando le somme Primi passi con Java 35
Modulo di Tirando le somme: la classe con il metodo main Un programma Java stand-alone alone e costituito da almeno una classe che contiene il metodo main e normalmente da una o più altre classi La classe che contiene il metodo main normalmente non contiene molto altro di più e il suo scopo è dare l avvio all esecuzione La classe che contiene il metodo main non è concepita per essere istanziata Tirando le somme: le classi istanziabili Esistono classi (come Ossequioso) il cui scopo è rappresentare il prototipo generico di molteplici oggetti concreti (detti istanze) aventi caratteristiche generali simili ma proprietà specifiche distinte La creazione di istanze avviene utilizzando l operatore new La definizione della classe specifica le operazioni che possono essere eseguite dalle istanze della classe Primi passi con Java 36
Modulo di Definizione di una classe La definizione di una classe comprende la definizione di attributi e la definizione di metodi Se la classe è concepita per essere istanziabile normalmente tra i metodi vi sono uno o più metodi costruttori (identificabili perché hanno lo stesso nome della classe) Definizione di una classe Definizione di attributi (due in questo caso) public class BuongiornoMain private final static String SALUTO_ITA = "Buongiorno!"; private final static String SALUTO_FRA = "Bonjour" Bonjour!"; public static void main (String args[]) Ossequioso maggiordomoita, maggiordomofra; maggiordomoita = new Ossequioso(SALUTO_ITA); maggiordomofra = new Ossequioso(SALUTO_FRA); maggiordomoita.saluta(); maggiordomofra.saluta(); Definizione di metodi (uno solo in questo caso) Primi passi con Java 37
Modulo di Definizione di una classe Definizione di attributi (uno in questo caso) public class Ossequioso Uno dei metodi e un costruttore private String miosaluto; public Ossequioso (String( cosadevodire) miosaluto = cosadevodire; public void saluta () System.out.println println(miosaluto); Definizione di metodi (due in questo caso) Uno schema tipico La classe BuongiornoMain illustra uno schema generico utilizzato da molti programmi Java: il metodo main crea istanze di una o più altre classi e quindi invoca i loro metodi Tutti gli aspetti introdotti in questo primo esempio richiedono approfondimenti e completamenti che saranno forniti in modo sistematico nel seguito del corso Primi passi con Java 38