DIPARTIMENTO   DI   INFORMATICA
Università di Torino

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.)
    1. Metodi privati: a cosa servono (ATTENZIONE: alcuni degli esempi riportati in questo punto sono un po' diversi da quelli del libro)
      1. Un esempio di metodo private static:
        una classe Bees.java e una semplice applicazione che la usa: UseBees.java
      2. Un esempio di metodo private:
        una classe FourEggsWriter.java e una semplice applicazione che la usa: ShowEggs.java
        DOMANDE:
        1. 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'?
        2. 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'?
      3. 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).
    2. Il concetto di "interfaccia di un oggetto"
      1. 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".
      2. Utilita' del concetto di "interfaccia di un oggetto"
        1. "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.

    3. Gestione delle eccezioni
      1. 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".)

    4. Un esempio che riassume quello che abbiamo visto fino ad ora: due classi per gestire l'input, che usano una interfaccia standardizzata.
      1. 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

      2. 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.)
      3. Una prima implementazione della classe e' realizzata attraverso la classe:
        LineReader.java.
      4. Una seconda implementazione della classe e' realizzata attraverso la classe:
        DialogReader.java.
    5. "BEYOND THE BASICS"
      1. 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.


[Ferruccio Damiani - DIDATTICA] [Corsi di Studi in Informatica]

Last update: Oct 06, 2000