La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Componenti fondamentali di un programma Java. Obiettivi 1. Saper definire i concetti di classe, oggetto, variabile, metodo e costruttore 2. Saper dichiarare.

Presentazioni simili


Presentazione sul tema: "Componenti fondamentali di un programma Java. Obiettivi 1. Saper definire i concetti di classe, oggetto, variabile, metodo e costruttore 2. Saper dichiarare."— Transcript della presentazione:

1 Componenti fondamentali di un programma Java

2 Obiettivi 1. Saper definire i concetti di classe, oggetto, variabile, metodo e costruttore 2. Saper dichiarare una classe 3. Istanziare oggetti da una classe 4. Utilizzare i membri pubblici di un oggetto sfruttando loperatore dot (. ) 5. Dichiarare ed invocare un metodo 6. Saper dichiarare ed inizializzare una variabile 7. Saper definire ed utilizzare i diversi tipi di variabili (distanza, locali e parametri Formali) 8. Dichiarare ed invocare un metodo costruttore 9. Saper accennare alla definizione di costruttore di default 10. Saper accennare alla definizione di package

3 Componenti fondamentali di un programma Java 1) Classe 2) Oggetto 3) Membro: a. Attributo (variabile membro) b. Metodo (metodo membro) 4) Costruttore 5) Package

4 Convenzione per la programmazione Java Nello sviluppo di una applicazione Java distinguiamo due ambiti: 1. Ambito del compilatore (o compilativo, o delle classi). E la parte strutturale. 2. Ambito della Java Virtual Machine (o esecutivo, o degli oggetti). Qui si definisce il flusso di lavoro che deve essere seguito.

5 Le basi della programmazione object oriented: classi ed oggetti 1) Una classe è unastrazione indicante un insieme di oggetti che condividono le stesse caratteristiche e le stesse funzionalità. 2) Un oggetto è unistanza (ovvero, una creazione fisica) di una classe. Questa teoria è nata, proprio per soddisfare l'esigenza umana di interagire con il software in maniera "naturale. Con Java è possibile creare codice per astrarre un qualsiasi concetto del mondo reale.

6 Esempio: classe Punto public class Punto { public int x; public int y; } Lo scopo di questa classe è definire il concetto di punto (a due dimensioni), tramite la definizione delle sue coordinate su di un piano cartesiano. Le coordinate sono state astratte mediante due attributi (variabili) dichiarati di tipo intero (int) e pubblici (public), chiamati x ed y. Questa classe potrebbe costituire una parte di un'applicazione Java, magari un'applicazione di disegno… Il file può essere salvato in Punto.java, compilato (javac Punto.java) ma non eseguito (manca il metodo main).

7 Con il codice scritto finora, in realtà, non abbiamo ancora definito nessun punto vero e proprio (per esempio il punto di coordinate x=5 e y=6). Quindi, come nel mondo reale, se non esistono punti concreti (ma solo la definizione di punto) non può accadere nulla che abbia a che fare con un punto e così, nel codice Java, la classe Punto non è "eseguibile" da sola! Occorre quindi definire gli "oggetti punto", ovvero le creazioni fisiche realizzate a partire dalla definizione data dalla classe. Nel contesto della programmazione ad oggetti, una classe dovrebbe quindi limitarsi a definire che struttura avranno gli oggetti che da essa saranno istanziati. "Istanziare", come abbiamo già affermato, è il termine object oriented che si usa in luogo di "creare fisicamente", ed il risultato di unistanziazione viene detto "oggetto".

8 Utilizzo della classe Punto 1 public class Principale 2 { 3 public static void main(String args[]) 4 { 5 Punto punto1; 6 punto1 = new Punto(); 7 punto1.x = 2; 8 punto1.y = 6; 9 Punto punto2 = new Punto(); 10 punto2.x = 0; 11 punto2.y = 1; 12 System.out.println(punto1.x); 13 System.out.println(punto1.y); 14 System.out.println(punto2.x); 15 System.out.println(punto2.y); 16 } 17 }

9 Analisi del codice 5 Punto punto1; Dichiarazione di un oggetto di tipo Punto 6punto1 = new Punto(); Istanziazione (creazione) della classe Punto. La parola chiave new, di fatto, istanzia la classe Punto, a cui viene assegnato il nome punto1. Dalla riga 6 in poi è possibile utilizzare loggetto punto1.

10 7 punto1.x = 2; 8 punto1.y = 6; Alle righe 7 e 8 utilizziamo loggetto punto1 per assegnare alle sue coordinate x e y rispettivamente i valori interi 2 e 6. Sfruttando la definizione che ci ha fornito la classe Punto, abbiamo creato un oggetto di tipo Punto, che è individuato dal nome punto1. Loperatore "dot" (. ) serve per accedere alle variabili x e y.

11 9 Punto punto2 = new Punto(); Qui abbiamo dichiarato ed istanziato con ununica riga di codice un altro oggetto dalla classe Punto, chiamandolo punto2. 10 punto2.x = 0; 11 punto2.y = 1; Abbiamo poi impostato le sue coordinate a 0 e System.out.println(punto1.x); 13 System.out.println(punto1.y); 14 System.out.println(punto2.x); 15 System.out.println(punto2.y); Abbiamo infine stampato le coordinate di entrambi i punti.

12 Facciamo il …punto La classe è servita per definire come saranno fatti gli oggetti. Loggetto rappresenta una realizzazione fisica della classe. In questo esempio, abbiamo istanziato due oggetti diversi da una stessa classe. Entrambi questi oggetti sono punti, ma evidentemente sono punti diversi (si trovano in diverse posizioni sul riferimento cartesiano). Questo ragionamento, in fondo, è già familiare a chiunque, giacché derivante dal mondo reale che ci circonda. Lessere umano, per superare la complessità della realtà, raggruppa gli oggetti in classi. Per esempio, nella nostra mente esiste il modello definito dalla classe Persona. Ma nella realtà esistono miliardi di oggetti di tipo Persona, ognuno dei quali ha caratteristiche uniche.

13 Ulteriori osservazioni La classe Punto ha la caratteristica di rappresentare un dato. è una parte strutturale dellapplicazione (svolge un ruolo essenziale nellambito compilativo. Nellambito esecutivo, la classe Punto non ha un ruolo attivo. Infatti sono gli oggetti istanziati da essa che influenzano il flusso di lavoro del programma. In unapplicazione object oriented, una classe dovrebbe limitarsi a definire la struttura comune di un insieme di oggetti, e non dovrebbe mai possedere né variabili né metodi. Infatti, la classe Punto non possiede le variabili x e y, bensì, dichiarando le due variabili, definisce gli oggetti che da essa saranno istanziati, come possessori di quelle variabili. Mai allinterno del codice dellambito esecutivo è presente unistruzione come: Punto.x ovvero: NomeClasse.nomeVariabile bensì: punto1.x ovvero nomeOggetto.nomeVariabile

14 Loperatore "." è sinonimo di appartenenza. Sono quindi gli oggetti a possedere le variabili dichiarate nella classe (che tra laltro verranno dette "variabili distanza", ovvero dell'oggetto). Infatti, i due oggetti istanziati avevano valori diversi per x e y, il che significa che loggetto punto1 ha la sua variabile x e la sua variabile y, mentre loggetto punto2 ha la sua variabile x e la sua variabile y. Le variabili di punto1 sono assolutamente indipendenti dalle variabili di punto2. Giacché le classi non hanno membri (variabili e metodi), non eseguono codice e non hanno un ruolo nellambito esecutivo, e per quanto visto sono gli oggetti protagonisti assoluti di questambito.

15 Leccezione che conferma la regola La classe Principale è una classe che esegue codice contenuto allinterno dellunico metodo main(), che per quanto detto è assunto per default quale punto di partenza di unapplicazione Java. In qualche modo, infatti, i creatori di Java dovevano stabilire un modo per far partire l'esecuzione di un programma. In Java i programmi chiamanti non esistono, ma esistono i metodi, ed in particolare i metodi statici (dichiarati con un modificatore static). Per ora limitiamoci a sapere che un membro dichiarato statico appartiene alla classe e che tutti gli oggetti istanziati da essa condivideranno i membri statici.

16 Esempio: classe Auto public class Auto { public int numeroRuote = 4; public int cilindrata; // quanto vale? public void muoviti() { // implementazione del metodo... }

17 1 public class Principale2 2 { 3 public static void main(String args[]) 4 { 5 Auto fiat500; 6 fiat500 = new Auto(); 7 fiat500.cilindrata = 500; 8 fiat500.muoviti(); 9 Auto ferrariTestarossa = new Auto(); 10 ferrariTestarossa.cilindrata = 3000; 11 ferrariTestarossa.muoviti(); 12 } 13 }

18 I metodi in Java Metodo" è sinonimo di "azione". Affinché un programma esegua qualche istruzione, deve contenere metodi. Per esempio è il metodo main(), che per default, è il punto di partenza di ogni applicazione Java. Una classe senza metodo main(), come la classe Punto, non può essere mandata in esecuzione, ma solo istanziata allinterno di un metodo di unaltra classe (nellesempio precedente, nel metodo main() della classe Principale). Il concetto di metodo è quindi anchesso alla base della programmazione ad oggetti. Senza metodi, gli oggetti non potrebbero comunicare tra loro. Distinguere nettamente due fasi: dichiarazione e chiamata (ovvero la definizione e lutilizzo).

19 Dichiarazione di un metodo Definisce un metodo: [modificatori] tipo_di_ritorno nome_del_metodo ([parametri]) {corpo_del_metodo} modificatori: parole chiave di Java che possono essere usate per modificare in qualche modo le funzionalità e le caratteristiche di un metodo. Esempi di modificatori sono public e static. tipo di ritorno: il tipo di dato che un metodo potrà restituire dopo essere stato chiamato. Questo potrebbe coincidere sia con un tipo di dato primitivo come un int, sia con un tipo complesso (un oggetto) come una stringa (classe String). È possibile specificare che un metodo non restituisca nulla (void).

20 nome del metodo: identificatore del metodo. Parametri: dichiarazioni di variabili che potranno essere passate al metodo, e di conseguenza essere sfruttate nel corpo del metodo, al momento della chiamata. Il numero di parametri può essere zero, ma anche maggiore di uno. Se si dichiarano più parametri, le loro dichiarazioni saranno separate da, corpo del metodo: insieme di istruzioni (statement) che verranno eseguite quando il metodo sarà invocato. La coppia costituita dal nome del metodo e leventuale lista dei parametri viene detta firma (in inglese signature) del metodo.

21 Esempio: classe Aritmetica public class Aritmetica { public int somma(int a, int b) { return (a + b); }

22 Analisi del codice Il modificatore public è uno specificatore daccesso che rende il metodo somma() accessibile da altre classi: i metodi di altre classi potranno, dopo aver istanziato un oggetto della classe Aritmetica, invocare il metodo somma(). Il tipo di ritorno è un int, ovvero, un intero. Ciò significa che questo metodo avrà come ultima istruzione un comando (return) che restituirà un numero intero. Inoltre la dichiarazione di questo metodo evidenzia come lista di parametri due interi (chiamati a e b). La dichiarazione di un metodo definisce quali azioni deve compiere il metodo stesso, quando sarà chiamato

23 Chiamata (o invocazione) di un metodo Esempio di eseguibile della classe Aritmetica: 1 public class Uno 2 { 3 public static void main(String args[]) 4 { 5 Aritmetica oggetto1 = new Aritmetica(); 6 int risultato = oggetto1.somma(5, 6); 7 } 8 }

24 Analisi del codice 6int risultato = oggetto1.somma(5, 6); Laccesso al metodo somma() è avvenuto tramite loperatore "dot" come nel caso dellaccesso alle variabili. Tutti i membri (attributi e metodi) pubblici definiti allinterno di una classe saranno accessibili tramite unistanza della classe stessa che sfrutta loperatore dot. La sintassi da utilizzare è la seguente: nomeOggetto.nomeMetodo(); e nomeOggetto.nomeAttributo;

25 Laccesso al metodo di un oggetto provoca lesecuzione del relativo blocco di codice. In questesempio, quindi, abbiamo definito una variabile intera risultato che ha immagazzinato il risultato della somma. Se non avessimo fatto ciò, non avrebbe avuto senso definire un metodo che restituisse un valore, dal momento che non lavremmo utilizzato in qualche modo! Avremmo anche potuto aggiungere la riga seguente: System.out.println(risultato);

26 Esistono anche: metodi che non hanno parametri in input ma, per esempio, un metodo che somma sempre gli stessi numeri e quindi restituisce sempre lo stesso valore. metodi che non hanno tipo di ritorno e dichiarano come tipo di ritorno void(vuoto) come il metodo main(). Infatti il metodo main() è il punto di partenza del runtime di unapplicazione Java, quindi non deve restituire un risultato, non venendo chiamato esplicitamente da un altro metodo. In questo caso il risultato del metodo non deve essere catturato metodi che non hanno né parametri in input, né in output (tipo di ritorno void), come per esempio un semplice metodo che visualizza a video sempre lo stesso messaggio.

27 Varags: Variable arguments Dalla versione 5 di Java è possibile creare metodi che dichiarano un numero non definito di parametri di un certo tipo: public class AritmeticaVariabile { public void somma(int… interi) { //... } Può essere invocato in diversi modi: AritmeticaVariabile ogg = new AritmeticaVariabile(); ogg.somma(); ogg.somma(1,2); ogg.somma(1,4,40,27,48,27,36,23,45,67,9,54,66,43); ogg.somma(1);

28 Le variabili in Java Una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Possiamo distinguere due fasi: dichiarazione ed assegnazione. Lassegnazione di un valore ad una variabile è unoperazione che si può ripetere molte volte nellambito esecutivo, anche contemporaneamente alla dichiarazione stessa.

29 Dichiarazione di una variabile Sintassi: [modificatori] tipo_di_dato nome_della_variabile [ =inizializzazione]; modificatori: parole chiavi di Java che possono essere usate per modificare in qualche modo le funzionalità e le caratteristiche della variabile. tipo di dato: il tipo di dato della variabile. nome della variabile: identificatore della variabile. inizializzazione: valore di default con cui è possibile valorizzare una variabile.

30 Esempio: classe Quadrato public class Quadrato { public int altezza; public int larghezza; public final int NUMERO_LATI = 4; } Abbiamo definito: Due variabili intere (altezza e larghezza) Una costante (NUMERO_LATI): Il modificatore final infatti rende una variabile costante nel suo valore.

31 Osservazioni E anche possibile definire due variabili dello stesso tipo con ununica istruzione: public int altezza,larghezza; La dichiarazione di una variabile è molto importante. La posizione della dichiarazione definisce lo scope, ovvero la visibilità, ed il ciclo di vita della variabile stessa. In pratica potremmo definire tre diverse tipologie di variabili, basandoci sul posizionamento della dichiarazione (vedi slide seguenti).

32 Variabili di istanza Variabile dichiarata in una classe ma al di fuori di un metodo. Le variabili definite nella classe Quadrato sono tutte di istanza. Esse condividono il proprio ciclo di vita con loggetto (istanza) cui appartengono. Quando un oggetto della classe Quadrato è istanziato, viene allocato spazio per tutte le sue variabili distanza che vengono inizializzate ai relativi valori nulli. Nel nostro caso, le variabili altezza e larghezza saranno inizializzate a zero. Ovviamente NUMERO_LATI è una costante esplicitamente inizializzata a 4, ed il suo valore non potrà cambiare. Una variabile distanza smetterà di esistere quando smetterà di esistere loggetto a cui appartiene.

33 Variabili locali Detta anche variabile di stack, o automatica, o temporanea). E dichiarata allinterno di un metodo. Essa smetterà di esistere quando terminerà il metodo. Una variabile di questo tipo, a differenza di una variabile di istanza, non sarà inizializzata ad un valore nullo al momento dellistanza delloggetto a cui appartiene. È buona prassi inizializzare comunque una variabile locale ad un valore di default, nel momento in cui la si dichiara. Infatti il compilatore potrebbe restituire un messaggio di errore laddove ci sia possibilità che la variabile non venga inizializzata al runtime

34 Parametri formali Detti anche argomenti del metodo. Variabili dichiarate allinterno delle parentesi tonde che si trovano alla destra dellidentificatore nella dichiarazione di un metodo. I parametri di un metodo saranno inizializzati al momento della chiamata del metodo. Condividendo il ciclo di vita con il metodo in cui sono dichiarate, non ha senso anteporre alle variabili locali un modificatore daccesso come public.

35 I metodi costruttori 1. Ha lo stesso nome della classe (case sensitive) 2. Non ha tipo di ritorno (non significa che il tipo di ritorno è void, ma che non dichiara alcun tipo di ritorno) 3. È chiamato automaticamente (e solamente) ogni volta che è istanziato un oggetto, relativamente a quelloggetto. 4. È presente in ogni classe.

36 Esempio: costruttore esplicito public class Punto { public Punto() //metodo costruttore { System.out.println("costruito un Punto"); } int x; int y; } Verrà eseguito il blocco di codice del costruttore, ogni volta che sarà istanziato un oggetto

37 Per istanziare un oggetto scriviamo: Punto punto1; // dichiarazione punto1 = new Punto(); //istanza new è la parola chiave per istanziare formalmente loggetto, Basterebbe quindi scrivere: new Punto(); però, loggetto appena creato non avrebbe un nome (si dirà reference) e quindi non sarebbe utilizzabile. Punto() Non va interpretata come nomeDellaClasse con parentesi tonde, bensì come chiamata al metodo costruttore.

38 Costruttore con parametri public class Punto { public Punto(int a, int b) { x = a; y = b; } public int x; public int y; }

39 Con questa classe non sarà più possibile istanziare gli oggetti con la solita sintassi: Punto punto1 = new Punto(); otterremmo un errore di compilazione, dal momento che staremmo cercando di chiamare un costruttore che non esiste (quello senza parametri)! La sintassi da utilizzare però, potrebbe essere la seguente. Punto punto1 = new Punto(5,6); Questa ci permetterebbe anche dinizializzare loggetto direttamente senza essere costretti ad utilizzare loperatore dot. Infatti, la precedente riga di codice è equivalente alle seguenti: Punto punto1 = new Punto(); punto1.x = 5; punto1.y = 6;

40 Costruttore di default Se infatti proviamo a compilare una classe sprovvista di costruttore, il compilatore ne fornisce uno implicitamente. Il costruttore inserito non contiene comandi che provocano qualche conseguenza visibile al programmatore. Esso è detto "costruttore di default" e non ha parametri. Ciò giustifica il fatto che fino ad ora non abbiamo mai istanziato oggetti passando parametri al costruttore. Nel momento in cui il programmatore fornisce ad una classe un costruttore, sia esso con o senza parametri, il compilatore non inserirà quello di default.

41 Package (cenni) Un package in Java permette di raggruppare in un'unica entità complessa classi Java logicamente correlate. Fisicamente il package non è altro che una cartella del nostro sistema operativo, ma non tutte le cartelle sono package. Per eleggere una cartella a package, una classe Java deve dichiarare nel suo codice la sua appartenenza a quel determinato package, ed inoltre ovviamente, deve risiedere fisicamente allinterno di essa.


Scaricare ppt "Componenti fondamentali di un programma Java. Obiettivi 1. Saper definire i concetti di classe, oggetto, variabile, metodo e costruttore 2. Saper dichiarare."

Presentazioni simili


Annunci Google