Laboratorio di programmazione (21 dicembre 2016)

Classe Orario

Implementate una classe di nome Orario che rappresenta un orario, specificato come ore e minuti. Internamente, la classe deve mantenere un singolo attributo intero (privato) che rappresenta i minuti trascorsi dalla mezzanotte. (In realtà, per la realizzazione degli ultimi due metodi indicati sarà necessario aggiungere altri attributi, il cui tipo e significato sono soggetti a vostra valutazione) La classe deve avere i seguenti costruttori e metodi:

Sperimentate la classe, realizzando un programma di test.

Infine, aggiungete un metodo toLiteral() che restituisce l'ora e i minuti in formato letterale: per esempio, se l'ora è 2:25 deve restituire la stringa due e venticinque. Per farlo, create un metodo privato di supporto in grado di restituire la parte delle decine, cioè che su input 2 restituisce venti, su input 3 restituisce trenta e così via (usate l'istruzione switch). Sulla base di questo metodo è poi possibile creare un altro metodo di supporto che restituisce una stringa contenente la rappresentazione testuale di un numero tra 0 e 99. Si noti però che il primo metodo deve avere un secondo parametro booleano che specifica (a seconda del suo valore) se bisogna stampare l'ultima vocale oppure no (altrimenti numeri come “trentuno” non sarebbero stampabili).

Classi Geometriche

Parte I

Implementate una classe di nome Figura che rappresenta una figura geometrica. Questa deve essere una classe astratta dotata dei metodi astratti double getArea(), double getPerimetro().

Fate in modo che Figura implementi l'interfaccia Comparable, aggiungendo un metodo concreto int compareTo(Figura f) che restituisca un numero negativo, zero o un numero positivo a seconda che l'istanza a cui viene applicato il metodo abbia area minore di, uguale a o maggiore dell'area di f, rispettivamente.

Quindi, create le classi Rettangolo, Cerchio, Triangolo, ognuna dotata di un costruttore che abbia i parametri più appropriati. Queste classi devono estendere Figura. Infine, create una classe Quadrato che estenda Rettangolo. Scrivete un metodo toString() per ogni classe concreta.

Per verificare il funzionamento di queste classi, realizzate una classe dotata di un metodo Main che chieda all'utente di inserire una serie di figure geometriche, e ne stampi il totale delle aree. Un esempio di esecuzione sarà:

	Quante figure? 2
	Che figura vuoi inserire? [r/c/t/q]: t
	Primo lato: 9
	Secondo lato: 12
	Terzo lato: 15
	Che figura vuoi inserire? [r/c/t/q]: c
	Raggio: 5
	Che figura vuoi inserire? [r/c/t/q]: q
	Lato: 5
	La somma delle aree e' 157.54
	

Se non vi ricordate la formula di Erone, è il momento di ripassarla.

Parte II

Ora aggiungete al main appena realizzato una riga di output che stampi le figure inserite in ordine di area crescente. Per farlo, sfruttate Arrays.sort() e l'interfaccia Comparable che avete implementato.
Nell'esempio di prima, avremmo

		Figure inserite in ordine di area: Quadrato(5), Triangolo(9,12,15), Cerchio(5)