GestionePoli2GrStrutturata.java
Created with JBuilder
// Questa versione della classe GestionePolinomio2Grado
// è identica per funzionalità a quella originale, ma realizza
// una strutturazione del main in sottoprocedure

// NOTA: tutti gli attributi e i metodi eccetto il main sono
// dichiarati private. Nel caso dei metodi questo è necessario perché
// eseguono operazioni che hanno senso solo in una specifica sequenza.
// Esporli significherebbe perdere la robustezza dell'interfaccia

// NOTA2: tutti gli attributi e i metodi sono static in quanto
// devono poter essere utilizzati a partire da main che è per
// definizione un metodo static. In conseguenza di ciò, la classe
// GestionePoli2GrStrutturata non è istanziabile.

// NOTA3: finestra, richiestaDati e uscitaDati sono diventati attributi
// in quanto devono essere utilizzati non più solo dentro main
// ma anche da inizializzaIO e dai metodi per la visualizzazione.
// Stessa considerazione per il polinomio.

// NOTA4: constatare come, utilizzando la classe Polinomio2Grado per
// incapsulare i conti relativi al calcolo delle soluzioni, e la
// strutturazione del main in procedure, il metodo main sia diventato
// molto più compatto e leggibile

import javabook.*;

class GestionePoli2GrStrutturata {

  // Oggetti per l'IO
  private static MainWindow finestra;
  private static InputBox richiestaDati;
  private static OutputBox uscitaDati;

  // Polinomio
  private static Polinomio2Grado polinomio;

  public static void main(String[] args) {
    // Inizializzo IO e il polinomio
    inizializzaIO();
    inizializzaPolinomio();
    // Verifico il tipo di soluzione
    int risultato = polinomio.calcolaSoluzioni();
    // Seleziono il messaggio da visualizzare
    switch (risultato) {
      case Polinomio2Grado.SOLUZIONI_REALI :
        visualizzaDistinte( polinomio.restituisciSoluzione1(),
                            polinomio.restituisciSoluzione2());
        break;
      case Polinomio2Grado.SOLUZIONI_IMMAGINARIE :
        visualizzaMessaggio("Le soluzioni sono complesse coniugate. ");
        break;
      case Polinomio2Grado.SOLUZIONE_UNICA :
        visualizzaUnica(polinomio.restituisciSoluzione1());
        break;
      case Polinomio2Grado.POLINOMIO_DEGENERE :
        visualizzaMessaggio("Il polinomio è degenere!");
    }
  }

  // Questo metodo crea gli oggetti necessari per gli IO
  // e li memorizza nei relativi attributi. Rende inoltre visibile
  // la finestra dell'applicazione
  private static void inizializzaIO() {
    // Dichiaro e creo gli oggetti necessari per l'IO
    finestra = new MainWindow("Equazioni di secondo grado");
    richiestaDati = new InputBox(finestra, "Inserimento dati");
    uscitaDati = new OutputBox(finestra, "Risultati");
    // Rendo visibile la finestra principale
    finestra.show();
  }

  // Questo metodo richiede i coefficienti e crea il polinomio
  private static void inizializzaPolinomio() {
    // Richiedo i coefficienti dell'equazione
    double a = richiestaDati.getDouble("Inserisci il valore di a: ");
    double b = richiestaDati.getDouble("Inserisci il valore di b: ");
    double c = richiestaDati.getDouble("Inserisci il valore di c: ");
    // Creo un oggetto Poliniomio2Grado
    Polinomio2Grado polinomio = new Polinomio2Grado(a, b, c);
  }

  // Questo metodo serve per visualizzare due soluzioni reali e distinte
  private static void visualizzaDistinte( double x1, double x2 ) {
    // Soluzioni reali e distinte
    uscitaDati.printLine("Le soluzioni sono reali e distinte. ");
    uscitaDati.print("Il valore di x1 è ");
    uscitaDati.printLine(x1);
    uscitaDati.print("Il valore di x2 è ");
    uscitaDati.printLine(x2);
    uscitaDati.show();
  }

  // Questo metodo serve per visualizzare una soluzione unica
  private static void visualizzaUnica( double x1 ) {
    // Soluzioni reali e coincidenti
    uscitaDati.printLine("Le soluzioni sono reali e coincidenti. ");
    uscitaDati.print("Il valore di x1,x2 è ");
    uscitaDati.printLine(x1);
    uscitaDati.show();
  }

  // NOTA: String è la classe predefinita Java per la gestione
  // dei testi (vedi Unità Didattica 4)
  private static void visualizzaMessaggio( String messaggio ) {
    uscitaDati.printLine(messaggio);
    uscitaDati.show();
  }

}

GestionePoli2GrStrutturata.java
Created with JBuilder