edutecnica

Esercizio 2        

Progettare e realizzare l'oggetto Termometro. Del termometro sono d'interesse le seguenti funzionalità:
• Termometro: un costruttore di un nuovo termometro avente come temperatura misurata 0 (per rappresentare le temperature si usino interi).
• misura: aggiorna la misura del termometro con la temperatura passata come parametro (misurata in gradi Celsius).
• storico: memorizza tutte le temperature rilevate dal termometro.
• celsius: restituisce la temperatura misurata in gradi Celsius.
• fahrenheit: restituisce la temperatura misurata in gradi Fahrenheit. • tipo: restituisce il tipo di tempertura: "molto caldo" (t >45),
"caldo" (45 >= t > 35), "ottimale" (35 >= t >18), "freddo" (18 >= t > 0), "molto freddo" (t >= 0).
• report: valuta la lista delle temperature acquisite in °C e restituisce le temperature max,min e media.

Per convertire gradi Celsius in gradi Fahrenheit, si usi la formula di conversione: f = c*9/5 + 32.

Come al solito, nonostante le specifiche del problema siano molto circostanziate, facciamo di testa nostra; riservandoci un' elaborazione più puntuale in una seconda fase.
Dal testo, risulta necessario memorizzare una lista di valori immessi (le temperature in °C) di cui l'ultimo sarebbe quello attuale.

All'interno del costruttore del termometro T dichiariamo due variabili private: tmp che è la temperatura in °C e storico[]; un array di valori che raccoglie progressivamente tutte le temperature che vengono rilevate.

L'interfaccia di input sarà costituita da una casella di testo che ha identificatore id=IN ed un pulsante di azione.
Ogni volta che si inserisce un numero dentro la casella di testo e si preme il pulsante, il valore immesso viene memorizzato nella variabile tmp ed aggiunto all'array che viene simultaneamente stampato in una zona di output predisposta da un tag div con identificatore id=OT.
Ovviamente prima di testare l'intero programma dobbiamo istanziare un oggetto t con costruttore T (termometro).


Dobbiamo rimarcare il fatto che in virtù della dichiarazione
var tmp=0;
var storico=[];
sia la variabile che l'array sono inaccessibili dall'esterno della funzione, essi sono a tutti gli effetti degli attributi privati.
Per potervi accedere bisognerà scrivere dei metodi che abbiano come prefisso il qualificatore this, come nel caso del metodo carica() che deve poter essere visibile esternamente per poter inserire nell'oggetto il valore della temperatura.
Adesso dobbiamo pensare a come gestire il problema della conversione in fahrenheit e della valutazione del tipo di temperatura.
Questa operazione viene effettuata dal metodo pubblico valuta() attivato dall'omonimo pulsante, In esso si vede esplicitamente la conversione da gradi celsius (tmp) a gradi fahrenheit (fah). Questi due valori saranno stampati a video assieme ad una valutazione del tipo di temperatura che viene ottenuta con una chiamata al metodo privato tipo() direttamente all'interno di valuta().
Quindi this.valuta() è un metodo pubblico, mentre var tipo() è un metodo privato.

Un'altra funzione pubblica this.report() che può essere invocata tramite un apposito pulsante, si occupa di ricercare la temperatura massima e minima rilevate e simultaneamente raccoglie i dati per elaborarne la media.


Potevamo anche usare la funzione sort() per ordinare gli array per poi prelevare il primo elemento (max) e l'ultimo (min) ma avremmo perso la successione temporale delle rilevazioni e comunque non avremmo potuto evitare la scansione col ciclo for() del vettore dello storico per ricavare la media.