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 |