Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola 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 Fondamenti di Programmazione 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 Fondamenti di Programmazione Primi passi con Java 1 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola 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 Fondamenti di Programmazione 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 Fondamenti di Programmazione Primi passi con Java 2 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola 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) Fondamenti di Programmazione Roadmap • 0. Primi passi con Java ¾ Introduzione alla tecnologia Java Fondamenti di Programmazione Primi passi con Java 3 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola 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) Fondamenti di Programmazione Le piattaforme Java: SE • Java SE (Standard Edition): piattaforma base destinata alla realizzazione di applicazioni "stand-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) Fondamenti di Programmazione Primi passi con Java 4 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Le piattaforme Java: SE Fondamenti di Programmazione 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 Fondamenti di Programmazione Primi passi con Java 5 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola 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 Fondamenti di Programmazione 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) Fondamenti di Programmazione Primi passi con Java 6 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola 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-6 (con indicazioni sulle differenze rispetto alle versioni precedenti ed alla versione 7) Fondamenti di Programmazione Roadmap • 0. Primi passi con Java ¾ Introduzione alla tecnologia Java ¾ Il primo programma Java Fondamenti di Programmazione Primi passi con Java 7 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Il primo programma Java public class Buongiorno { public static void main (String args[]) args[]) { System.out.println ("Buongiorno!"); System.out.println("Buongiorno!"); } } Fondamenti di Programmazione 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 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 Fondamenti di Programmazione Primi passi con Java 8 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Il primo programma Java Parola riservata (modificatore Parola riservata che precede di accesso alla classe) la definizione di una classe Nome della classe public class Buongiorno { public static void main (String args[]) args[]) { System.out.println ("Buongiorno!"); System.out.println("Buongiorno!"); } } Graffe che racchiudono la definizione della classe (body o corpo della classe) Definizione del metodo main Fondamenti di Programmazione Il metodo main Intestazione (detta anche signature o firma) del metodo main public static void main (String args[]) args[]) { System.out.println ("Buongiorno!") ; System.out.println("Buongiorno!") } Graffe che racchiudono il corpo (body) del metodo Unica istruzione contenuta nel corpo del metodo main Fine istruzione Fondamenti di Programmazione Primi passi con Java 9 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Il metodo main Parola riservata (modificatore di accesso al metodo) Parola riservata (livello di definizione del metodo) Nome del metodo Lista argomenti (o parametri) Parola riservata (tipo formali del metodo main restituito del metodo) public static void main (String args[]) args[]) { System.out.println System.out.println ( "Buongiorno!" ) ; } Invocazione del metodo predefinito println per la stampa a video Lista argomenti (o parametri) attuali passati al metodo println Fondamenti di Programmazione 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) Fondamenti di Programmazione Primi passi con Java 10 Modulo di Fondamenti di Programmazione Who is who PROGRAMMATORE codice sorgente P. Baroni - P.Martinelli - M. Rossi - A. Viola comprensione del problema conoscenze tecniche creatività COMPILATORE codice intermedio (bytecode) INTERPRETE (JVM) chiamate di sistema SISTEMA OPERATIVO Parte indipendente Parte dipendente dalla piattaforma hardware/software di base instruction set HARDWARE Fondamenti di Programmazione Roadmap • 0. Primi passi con Java ¾ Introduzione alla tecnologia Java ¾ Il primo programma Java ¾ Uso di più classi Fondamenti di Programmazione Primi passi con Java 11 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola 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 Fondamenti di Programmazione Il secondo programma Java public class Ossequioso { public void saluta () { System.out.println ("Buongiorno!"); System.out.println("Buongiorno!"); } } Fondamenti di Programmazione Primi passi con Java 12 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola La classe Ossequioso Parola riservata (modificatore Parola riservata che precede di accesso alla classe) la definizione di una classe Nome della classe public class Ossequioso { public void saluta () { System.out.println ("Buongiorno!"); System.out.println("Buongiorno!"); } } Graffe che racchiudono la definizione della classe (body o corpo della classe) Definizione del metodo saluta Fondamenti di Programmazione Il metodo saluta Intestazione (detta anche signature o firma) del metodo saluta public void saluta () { System.out.println ("Buongiorno!") ; System.out.println("Buongiorno!") } Graffe che racchiudono il corpo (body) del metodo Unica istruzione contenuta nel corpo del metodo saluta Fine istruzione Fondamenti di Programmazione Primi passi con Java 13 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Il metodo saluta Parola riservata (modificatore di accesso al metodo) Il livello di definizione del metodo è implicito Nome del metodo Parola riservata (tipo restituito del metodo) Lista (vuota) di argomenti (o parametri) formali del metodo saluta public void saluta () { System.out.println System.out.println ( "Buongiorno!"); } Invocazione del metodo predefinito Lista argomenti (o parametri) println per la stampa a video attuali passati al metodo println Fondamenti di Programmazione 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 Fondamenti di Programmazione Primi passi con Java 14 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola 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 Fondamenti di Programmazione Il secondo programma Java public class BuongiornoMain { public static void main (String [ ] args) args) { Ossequioso maggiordomo; maggiordomo = new Ossequioso(); maggiordomo.saluta(); } } Fondamenti di Programmazione Primi passi con Java 15 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola La classe BuongiornoMain Parola riservata (modificatore Parola riservata che precede di accesso alla classe) la definizione di una classe Nome della classe public class BuongiornoMain { public static void main (String args[]) args[]) { Ossequioso maggiordomo; maggiordomo = new Ossequioso(); maggiordomo.saluta(); } } Graffe che racchiudono la definizione della classe (body o corpo della classe) Definizione del metodo main Fondamenti di Programmazione 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 Fondamenti di Programmazione Primi passi con Java 16 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola La classe BuongiornoMain public static void main (String args[]) args[]) { Definizione di una variabile Ossequioso maggiordomo; Assegnazione della variabile maggiordomo = new Ossequioso(); maggiordomo.saluta(); Invocazione del metodo saluta } Fondamenti di Programmazione 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 Fondamenti di Programmazione Primi passi con Java 17 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Assegnazione maggiordomo = new Ossequioso(); Nome della variabile che Operatore di assegnazione “riceve” l’assegnazione Valore assegnato alla variabile • Viene assegnato un valore alla variabile maggiordomo • Il valore assegnato e’ il risultato dell’ dell’uso dell’ dell’operatore new Fondamenti di Programmazione L’operatore new new Ossequioso(); Parola riservata che indica la Nome di costruzione di un nuovo oggetto una classe Lista degli argomenti utilizzati per la costruzione (in questo caso nessuno) • L’oggetto costruito e’ istanza di una classe e ne rispecchia la definizione • 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” che fa il minimo indispensabile Fondamenti di Programmazione Primi passi con Java 18 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Costruzione di un oggetto CODICE MEMORIA maggiordomo Ossequioso maggiordomo; null maggiordomo=new Ossequioso(); saluta() { ... } Istanza della classe Ossequioso riferita dalla variabile maggiordomo Fondamenti di Programmazione Invocazione di un metodo maggiordomo.saluta(); Nome di una variabile che riferisce un oggetto Lista argomenti Separatore Nome di un attuali passati al metodo definito metodo nella classe di cui l’oggetto e’ istanza • 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 Fondamenti di Programmazione Primi passi con Java 19 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Invocazione di un metodo CODICE MEMORIA maggiordomo ... maggiordomo.saluta(); } saluta() { ... } Fondamenti di Programmazione Roadmap • 0. Primi passi con Java ¾ Introduzione alla tecnologia Java ¾ Il primo programma Java ¾ Uso di più classi ¾ Attributi e costruttori Fondamenti di Programmazione Primi passi con Java 20 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola 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 Fondamenti di Programmazione Definizione di attributi costanti public class Ossequioso { private final String MIO_SALUTO = "Buongiorno!"; public void saluta () { System.out.println (MIO_SALUTO); System.out.println(MIO_SALUTO); } } Fondamenti di Programmazione Primi passi con Java 21 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Definizione di attributi costanti Parola riservata (modificatore Tipo dell’attributo Nome dell’attributo di accesso all’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 Fondamenti di Programmazione 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 Fondamenti di Programmazione Primi passi con Java 22 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Definizione di attributi variabili public class Ossequioso { private String mioSaluto; mioSaluto; public void saluta () { System.out.println (mioSaluto); System.out.println( mioSaluto); } } Fondamenti di Programmazione Definizione di attributi variabili Parola riservata (modificatore Tipo dell’attributo Nome dell’attributo di accesso all’attributo) private L’assenza della parola final indica che l’attributo e’ variabile String mioSaluto ; Il livello di definizione dell’attributo è implicito Fondamenti di Programmazione Primi passi con Java 23 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Nota terminologica • Gli attributi (attributes) vengono anche chiamati campi (fields) o data members della classe • Un attributo costante viene normalmente chiamato costante • Un attributo variabile viene normalmente chiamato attributo Fondamenti di Programmazione 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 Fondamenti di Programmazione Primi passi con Java 24 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Metodi costruttori public class Ossequioso { private String mioSaluto; mioSaluto; public Ossequioso (String (String cosaDevoDire) cosaDevoDire) { mioSaluto = cosaDevoDire; cosaDevoDire; } public void saluta () { System.out.println (mioSaluto); System.out.println( mioSaluto); } } Fondamenti di Programmazione 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 (String cosaDevoDire) cosaDevoDire) { mioSaluto = cosaDevoDire; cosaDevoDire; } All’attributo mioSaluto viene assegnato il valore dell’argomento cosaDevoDire Fondamenti di Programmazione Primi passi con Java 25 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola 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 Fondamenti di Programmazione Invocazione del costruttore public class BuongiornoMain { private final static String SALUTO_ITA = "Buongiorno!"; public static void main (String args[]) args[]) { Ossequioso maggiordomo; maggiordomo = new Ossequioso(SALUTO_ITA); maggiordomo.saluta(); } } Fondamenti di Programmazione Primi passi con Java 26 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Invocazione del costruttore Definizione attributo costante public class BuongiornoMain { private final static String SALUTO_ITA = "Buongiorno!"; public static void main (String args[]) args[]) { Ossequioso maggiordomo; maggiordomo = new Ossequioso(SALUTO_ITA); maggiordomo.saluta(); } Invocazione del costruttore passando come argomento attuale l’attributo SALUTO_ITA } Fondamenti di Programmazione Costruzione di un oggetto CODICE MEMORIA SALUTO_ITA ...SALUTO_ITA="Buongiorno!" ... Buongiorno! maggiordomo Ossequioso maggiordomo; null maggiordomo= new Ossequioso(SALUTO_ITA); Fondamenti di Programmazione Primi passi con Java 27 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Costruzione di un oggetto CODICE BuongiornoMain MEMORIA SALUTO_ITA ... Buongiorno! maggiordomo= new Ossequioso(SALUTO_ITA); maggiordomo null CODICE Ossequioso …Ossequioso(String …Ossequioso(String cosaDevoDire) cosaDevoDire) { mioSaluto ...saluta() { ... } mioSaluto=cosaDevoDire; mioSaluto=cosaDevoDire; } Fondamenti di Programmazione Invocazione del metodo CODICE BuongiornoMain MEMORIA SALUTO_ITA ... Buongiorno! maggiordomo.saluta() maggiordomo null CODICE Ossequioso …saluta() { mioSaluto ...saluta() { ... } System.out.println( System.out.println(mioSaluto); mioSaluto); } Fondamenti di Programmazione Primi passi con Java 28 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola 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 Fondamenti di Programmazione 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 Fondamenti di Programmazione Primi passi con Java 29 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola 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[]) args[]) { Ossequioso maggiordomoIta, maggiordomoIta, maggiordomoFra; maggiordomoFra; maggiordomoIta = new Ossequioso(SALUTO_ITA); maggiordomoFra = new Ossequioso(SALUTO_FRA); maggiordomoIta.saluta(); maggiordomoIta.saluta(); maggiordomoFra.saluta(); maggiordomoFra.saluta(); } E’ possibile definire piu’ variabili } dello stesso tipo su un’unica riga separando i nomi con virgole Fondamenti di Programmazione 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[]) args[]) { Ossequioso maggiordomoIta, maggiordomoIta, maggiordomoFra; maggiordomoFra; maggiordomoIta = new Ossequioso(SALUTO_ITA); maggiordomoFra = new Ossequioso(SALUTO_FRA); maggiordomoIta.saluta(); maggiordomoIta.saluta(); maggiordomoFra.saluta(); maggiordomoFra.saluta(); } } Fondamenti di Programmazione Primi passi con Java 30 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Due maggiordomi SALUTO_ITA SALUTO_FRA Buongiorno! maggiordomoIta null Bonjour! maggiordomoFra null Fondamenti di Programmazione 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[]) args[]) { Ossequioso maggiordomoIta, maggiordomoIta, maggiordomoFra; maggiordomoFra; maggiordomoIta = new Ossequioso(SALUTO_ITA); maggiordomoFra = new Ossequioso(SALUTO_FRA); maggiordomoIta.saluta(); maggiordomoIta.saluta(); maggiordomoFra.saluta(); maggiordomoFra.saluta(); } } Fondamenti di Programmazione Primi passi con Java 31 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Due maggiordomi SALUTO_ITA SALUTO_FRA Buongiorno! maggiordomoIta null Bonjour! maggiordomoFra null mioSaluto ...saluta() {System.out.println System.out.println (mioSaluto); mioSaluto); } Fondamenti di Programmazione 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[]) args[]) { Ossequioso maggiordomoIta, maggiordomoIta, maggiordomoFra; maggiordomoFra; maggiordomoIta = new Ossequioso(SALUTO_ITA); maggiordomoFra = new Ossequioso(SALUTO_FRA); maggiordomoIta.saluta(); maggiordomoIta.saluta(); maggiordomoFra.saluta(); maggiordomoFra.saluta(); } } Fondamenti di Programmazione Primi passi con Java 32 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Due maggiordomi SALUTO_ITA SALUTO_FRA Buongiorno! maggiordomoIta null Bonjour! maggiordomoFra null mioSaluto mioSaluto ...saluta() {System.out.println System.out.println (mioSaluto); mioSaluto); } ...saluta() {System.out.println System.out.println (mioSaluto); mioSaluto); } Fondamenti di Programmazione 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[]) args[]) { Ossequioso maggiordomoIta, maggiordomoIta, maggiordomoFra; maggiordomoFra; maggiordomoIta = new Ossequioso(SALUTO_ITA); maggiordomoFra = new Ossequioso(SALUTO_FRA); maggiordomoIta.saluta(); maggiordomoIta.saluta(); maggiordomoFra.saluta(); maggiordomoFra.saluta(); } } Fondamenti di Programmazione Primi passi con Java 33 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Due maggiordomi SALUTO_ITA SALUTO_FRA Buongiorno! maggiordomoIta null Bonjour! maggiordomoFra null mioSaluto mioSaluto ...saluta() {System.out.println System.out.println (mioSaluto); mioSaluto); } ...saluta() {System.out.println System.out.println (mioSaluto); mioSaluto); } Fondamenti di Programmazione 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[]) args[]) { Ossequioso maggiordomoIta, maggiordomoIta, maggiordomoFra; maggiordomoFra; maggiordomoIta = new Ossequioso(SALUTO_ITA); maggiordomoFra = new Ossequioso(SALUTO_FRA); maggiordomoIta.saluta(); maggiordomoIta.saluta(); maggiordomoFra.saluta(); maggiordomoFra.saluta(); } } Fondamenti di Programmazione Primi passi con Java 34 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Due maggiordomi SALUTO_ITA SALUTO_FRA Buongiorno! maggiordomoIta Bonjour! maggiordomoFra null null mioSaluto mioSaluto ...saluta() {System.out.println System.out.println (mioSaluto); mioSaluto); } ...saluta() {System.out.println System.out.println (mioSaluto); mioSaluto); } Fondamenti di Programmazione 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 Fondamenti di Programmazione Primi passi con Java 35 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Tirando le somme: la classe con il metodo main • Un programma Java stand-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 Fondamenti di Programmazione 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 Fondamenti di Programmazione Primi passi con Java 36 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola 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) Fondamenti di Programmazione 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[]) args[]) { Ossequioso maggiordomoIta, maggiordomoIta, maggiordomoFra; maggiordomoFra; maggiordomoIta = new Ossequioso(SALUTO_ITA); maggiordomoFra = new Ossequioso(SALUTO_FRA); maggiordomoIta.saluta(); maggiordomoIta.saluta(); maggiordomoFra.saluta(); maggiordomoFra.saluta(); } } Definizione di metodi (uno solo in questo caso) Fondamenti di Programmazione Primi passi con Java 37 Modulo di Fondamenti di Programmazione P. Baroni - P.Martinelli - M. Rossi - A. Viola Definizione di una classe Definizione di attributi (uno in questo caso) public class Ossequioso { private String mioSaluto; mioSaluto; Uno dei metodi e’ un costruttore public Ossequioso (String (String cosaDevoDire) cosaDevoDire) { mioSaluto = cosaDevoDire; cosaDevoDire; } public void saluta () { System.out.println (mioSaluto); System.out.println( mioSaluto); } } Definizione di metodi (due in questo caso) Fondamenti di Programmazione 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 Fondamenti di Programmazione Primi passi con Java 38