Programmazione in Java - CEDACRI
a.a. 00/01
Lezione 5
Argomenti trattati
Che cos'e' la
Programmazione Object-Oriented
(a prescindere da Java).
Campi e metodi static: che cosa sono e a cosa servono.
Il ruolo particolare giocato dal metodo "main".
(ATTENZIONE: questi argomenti sono trattati, focalizzando l'attenzione
su Java e le sue peculiarita', nei Capitoli 4 e 5 del libro
"Java 2 i fondamenti".)
Ri-presentazione del modello della memoria in Java: stack + heap.
Convenzioni per gli identificatori. Uso di javadoc.
Programmi utilizzati
ATTENZIONE: i riferimenti ai Capitoli 1,2,3,4 che sono
presenti dal Capitolo 5 in avanti DEVONO ESSERE RINTRACCIATI nella versione
di Marzo'00 dei Capitoli 1,2,3,4, e non nella versione di Agosto'00.
-
dal Cap. 5
(ATTENZIONE: gli esempi ilustrati in questo capitolo
hanno il pregio di essere
molto semplici, essi usano
il metodo paint per disegnare direttamente su un frame.
Questo stile di programmazione e' SCONSIGLIATO.)
-
Metodi privati: a cosa servono
(ATTENZIONE: alcuni degli esempi riportati in questo punto
sono un po' diversi da quelli del libro)
-
Un esempio di metodo private static:
una classe
Bees.java
e una semplice applicazione che la usa:
UseBees.java
-
Un esempio di metodo private:
una classe
FourEggsWriter.java
e una semplice applicazione che la usa:
ShowEggs.java
DOMANDE:
-
Il metodo printBee nel primo esempio
e' static. Cosa succede se lo si dichiara come un metodo
"di istanza"?
Relativamente alla funzionalita' supportata dalla
classe Bees,
pensate che l'aver supportato tale funzionalita' attraverso un metodo
static sia una buona o una cattiva scelta? Perche'?
-
Il metodo paintEgg nel secondo esempio
e' "di istanza". Cosa succede se lo si dichiara come un metodo
static?
Relativamente alla funzionalita' supportata dalla
classe FourEggsWriter,
pensate che l'aver supportato tale funzionalita' attraverso un metodo
"di istanza" sia una buona o una cattiva scelta? Perche'?
-
Un altro esempio di metodo static private
(che ci offre l'opportunita' di imparare a gestire l'input da console):
una classe
CelsiusToFahrenheit.java
(provvista di metodo main).
-
Il concetto di "interfaccia di un oggetto"
-
Una classe che permette di scivere una frase in un Frame
MyWriter.java
e una classe che la usa:
MyExample.java
ESERCIZIO:
descrivete l'architettura di questa applicazione con un "Class Diagram".
-
Utilita' del concetto di "interfaccia di un oggetto"
-
"CASE STUDY": disegno (a partire dall'interfaccia) di una classe per
visualizzare le temperature.
Per prima cosa pensiamo ai metodi pubblici che questa classe
deve avere:
TemperaturesWriter
creates a graphics window for displaying temperatures
Methods (responsibilities) |
|
displayCelsius(int degrees) |
display the Celsius degrees in the window |
displayFahrenheit(int degrees) |
display the Fahrenheit degrees in the window |
Scriviamo quindi una semplice applicazione che utilizza tale classe
(nota: possiamo scrivere l'applicazione conoscendo SOLO il nome e
l'interfaccia
della classe, e ignorando quindi i dettagli dell'implementazione):
CelsiusToFahrenheit2.java.
Scriviamo anche il codice della classe
TemperaturesWriter
(nota: possiamo scrivere tale codice conoscendo SOLO il nome e
l'interfaccia, non sapendo nulla sulla particolare applicazione che
utilizzera' tale classe):
TemperatureWriter.java.
E' importante osservare che, una volta stabilita l'interfaccia, la
scittura del codice della classe
TemperaturesWriter
e la scrittura del codice dell'applicazione che la usa possono procedere
in modo COMPLETAMENTE INDIPENDENTE (in particolare
i due codici potrebbero essere scritti da persone diverse).
ESERCIZIO:Fare gli esecizi 1, 2, 3, 4
prima della sezione 5.5.2 del libro.
Ad un certo punto possiamo scrivere un'altra classe per
visualizzare le temperature. Se la nuova classe,
TempTextWriter.java,
ha la stessa interfaccia di
TemperaturesWriter, allora
per far si che l'applicazione usi la nuova classe e' sufficiente cambiare
UNA SOLA LINEA DI CODICE.
-
Gestione delle eccezioni
-
Un esempio di programma che puo' terminare sollevando delle eccezioni
(ATTENZIONE: e' un po' diverso da quello del libro):
DivideTwelve.java.
E' facile verificare che il programma precedente puo' terminare in modo
anomalo per due distite ragioni:
(a) l'utente fornisce in input una stringa che NON rappresenta un intero,
(b) l'utente fornisce in input una stringa che NON rappresenta il numero
0.
In generale e' OBBLIGATORIO dichiarare le eccezioni che possono essere
sollevate da un programma. I progettisti Java hanno pero' pensato (per
alleggerire la scittura del codice) di esentare da tale obbligo
alcune eccezioni che si interessano la maggior parte del codice
(come ad esempio ArithmeticException).
Ecco una versione del programma in cui le eccezioni sono gestite:
DivideTwelve0.java.
(ATTENZIONE: maggiori dettagli sulle eccezioni si possono trovare
nel Capitolo 11 del libro "Java 2 i fondamenti".)
-
Un esempio che riassume quello che abbiamo visto fino ad ora:
due classi per gestire l'input, che usano una interfaccia standardizzata.
-
Consideriamo la seguente interfaccia:
This is a standardized interface for a class that reads interactive input.
Methods (responsibilities) |
|
readString(String prompt): String |
prompt the user for input with prompt, read a string, and return it as
the result |
readInt(String prompt): int |
prompt the user for input with prompt, read an int, and return it as
the result |
readDouble(String prompt): double |
prompt the user for input with prompt, read a double, and return it as
the result |
-
Consideriamo una applicazione che usa una classe che implementa l'interfaccia
precedente:
AppCelsiusToFahrenheit.java.
(NOTA: il codice della appicazione precedente e' INCOMPLETO. Per completarlo
e' necessario conoscere il nome della classe che implementa l'interfaccia.
E' importante osservare che e' necessario modificare SOLO UNA RIGA DI
CODICE.)
-
Una prima implementazione della classe e' realizzata attraverso la classe:
LineReader.java.
-
Una seconda implementazione della classe e' realizzata attraverso la classe:
DialogReader.java.
-
"BEYOND THE BASICS"
-
Ora applicheremo javadoc al file LineReader.java che abbiamo sviluppato
nel punto precedente ed esamineremo il risultato.
Provate ora ad applicare javadoc al file TemperatureWriter.java
(sviluppato in uno dei punti precenti).
PRIMA DELLA LEZIONE SUCCESSIVA:
Leggere il "Summary" del Capitolo 5.
|