Si crei un progetto Java che mappi un semplice sistema medico. Il progetto deve contenere tre classi: una per i pazienti, una per le patologie e una per il main. Inoltre si definiscano le seguenti eccezioni: MoltoGraveException e GuaritaException. 1. La classe delle patologie deve avere come attributi con le dovute visibilita : 1. nome della patologia (stringa); 2. grado di gravità (intero) da 1(guarito) a 10 (molto grave). e come metodi: costruttore getter di nome e gravità void aggrava() e void attenua(), che aumentano o diminuiscono la gravità di 1 grado se è possibile, o altrimenti lanciano la MoltoGraveException (gravità 10) e la GuaritaException (gravità 1) rispettivamente. boolean equals(object o), che controlla se l'oggetto passato (una patologia) è uguale a quello su cui è stato invocato (per nome), e comunica che la patologia passata ha gravità maggiore o minore. String tostring(), un metodo che restituisce i valori degli attributi. 1. La classe dei pazienti deve avere come attributi con le dovute visibilita : 1. cognome (stringa); 2. patologie, un ArrayList di patologie. e come metodi: 1
costruttore getter del cognome e di una singola patologia dato il nome (Patologia getpatologia(string nome)) void aggiungipatologia(patologia p), che sfrutta il metodo contains di ArrayList per verificare che la patologia non sia già presente, ed eventualmente la aggiunge boolean rimuovipatologia(patologia p), che sfrutta il metodo contains di ArrayList per verificare che la patologia sia presente e in tal caso la rimuove (restituendo true), altrimenti restituisce false String tostring(), che restituisce una stringa formattata per la stampa chiamando il metodo tostring() delle patologie 3. La classe del main deve: creare 2 patologie: asma con gravità 10 e allergia alle graminacee con gravità 2; creare il paziente Rossi; aggiungere al paziente le 2 patologie e stampare a video le informazioni sul paziente; aggravare l'asma del paziente e gestire l'eccezione MoltoGraveException (facendone stampare il messaggio); attenuare l'allergia fino a portarla a 0, gestendo l'eccezione GuaritaException in modo da togliere la patologia al paziente; stampare la situazione aggiornata sul paziente. 2
Si crei un progetto Java che mappi un magazzino di stoccaggio pacchi. Il progetto deve contenere una classe per i pacchi, una per il magazzino, una per le posizioni all'interno del magazzino e una per il main. 1. La classe dei pacchi deve implementare l'interfaccia Stackable: public interface Stackable { public boolean isfragile(); public String getcodice(); } Deve contenere gli attributi boolean fragile; String codice; e avere come metodi: un costruttore l implementazione dei metodi dell interfaccia un metodo tostring() che restituisce una stringa formattata per la stampa, contenente il codice del pacco 2. La classe delle posizioni ha come attributi larghezza, profondità e un oggetto di tipo Stackable, e deve implementare il costruttore, i metodi getter per gli attributi e il metodo tostring() che richiama quello dell'oggetto contenuto. 3
3. La classe che gestisce il magazzino dovrà ricevere nel costruttore le dimensioni del pacco (altezza, larghezza e profondità) e dovrà avere un metodo per inserire un pacco: boolean aggiungipacco(stackable s) uno per togliere un pacco (identificandolo tramite il codice): Stackable toglipacco(string codice) un metodo tostring() che formatta le informazioni per la stampa mostrando gli elementi impilati correttamente (invocando i metodi tostring() opportuni). Il magazzino dovrà gestire un numero di posizioni dato dalle sue dimensioni (larghezzaxaltezzaxprofondità). È necessario che sopra ai pacchi fragili non ne siano impilati altri, ma se un pacco non è fragile deve essere inserito sotto agli altri se c'è spazio. Suggerimento: per gestire le posizioni del magazzino si può creare un'ulteriore classe che mappa le colonne di pacchi, controllando in questa se non ci sono errori di stoccaggio (impilamento pacchi fragili e non). si può utilizzare un ArrayList di colonne nella classe del magazzino: le colonne saranno costruite nel costruttore, mentre saranno utilizzate nei metodi per l aggiunta/ rimozione di un pacco. 4. La classe del main deve impilare i seguenti pacchi Magazzino m = new Magazzino(2,3,2); //l,h,p Pacco p1 = new Pacco("F1",true); //fragile Pacco p2 = new Pacco("F2",true); Pacco p3 = new Pacco("N3",false); //non fragile Pacco p4 = new Pacco("N4",false); Pacco p5 = new Pacco("N5",false); e stampare a video il risultato. 4
ESERCIZIO 3 Si realizzi una classe Call, con attributi di tipo stringa sender, receiver e di tipo intero start e stop. Tale classe, che rappresenta una singola chiamata telefonica, codifica un metodo costruttore a 4 argomenti e implementa il metodo public int getduration(). Il metodo restituisce un intero che rappresenta la durata della chiamata, che è calcolata come la differenza tra stop e start. Si realizzi poi un metodo main in una classe Prova che: 1. Legga, riga per riga, il file di testo data.txt che è così strutturato: ogni riga contiene il numero del chiamante (sender), il numero del chiamato (receiver), ESERCIZIO 3 l istante iniziale della chiamata (start) e quello finale (stop), separati da ;. Esempio del contenuto: 0351 3194181;0341 6859980;420336000;422142826 0362 6516225;0382 4413043;421977600;422224970 2. Crei, per ogni riga del file, un oggetto Call usando il metodo split (vedi API) per ottenere i 4 valori (sender, receiver, start, stop) da passare al costruttore. Il metodo split suddivide la stringa su cui è invocato in tante stringhe separate in base ad un carattere specificato e le restituisce sotto forma di vettore di oggetti di tipo String. 5
ESERCIZIO 3 3. Inserisca in una lista (scegliere la migliore implementazione da JCF) tutte le istanze delle chiamate la cui durata è superiore a 550000 secondi. Non si conosce a priori quanti elementi dovrà contenere la lista. 4. Stampi a video la dimensione della lista. Esempio di output a video: Totale: 100 chiamate lunghe. 6