16 Luglio 2002 - Fondamenti di Informatica LB
Transcript
16 Luglio 2002 - Fondamenti di Informatica LB
16 Luglio 2002 - Fondamenti di Informatica LB- Compito A Tempo totale a disposizione: 2 ore NOTE PER LA CONSEGNA DEL COMPITO: La soluzione del compito deve essere consegnata attraverso due dischetti identici contenenti: •= tutti i file .java, .class e .txt da voi creati. E’ molto importante che i file, le classi, gli oggetti, i metodi e gli attributi si chiamino esattamente come richiesto dal testo, ove specificato Si vuole simulare in Java l’accesso di viaggiatori ad alcuni treni ferroviari. Il candidato dovra' quindi: 1. Definire una classe (Treno.java) che permette di modellare i treni che ospitano i viaggiatori. Tale classe ha tre variabili: •= codiceTreno che è una Stringa identificativa del nome del treno (variabile pubblica). •= numViaggiatori che è un intero che indica il numero attuale di viaggiatori a bordo (variabile privata). •= prezzoBiglietto che è un intero che indica la cifra in Euro di un biglietto per il viaggio (variabile privata). Implementare, inoltre, i seguenti metodi, tutti con visibilità public: •= getPrice()che ritorna l’intero corrispondente al prezzo del biglietto del treno. •= accetta()che ritorna un valore boolean : ‘TRUE’ se sul treno c’è ancora posto disponibile ( si assuma che la portata massima di un treno sia sempre 50 posti), altrimenti ‘FALSE’. •= entra() che ritorna void e fa entrare un viaggiatore a bordo. Incrementa di 1 il numero dei viaggiatori attualmente a bordo del treno solo se c’è disponibilità di posti. 2. Realizzare i due costruttori della classe Treno: 1. Costruttore con un argomento in ingresso: una stringa (codice) che inizializza la variabile codiceTreno della classe. Per default, il numero di viaggiatori a bordo viene inizializzato a 20, mentre il prezzo del biglietto a 12 Euro. 2. Costruttore con tre argomenti. Il primo è una stringa (codice) che inizializza la variabile codiceTreno della classe. Il secondo ed il terzo argomento sono interi (numViaggiatori e prezzoBiglietto) ed inizializzano le variabili omonime della classe Treno. 3. Definire una interfaccia astratta (Viaggiatore.java) che modella i viaggiatori. Tutti i viaggiatori possiedono un metodo public: •= entra(Treno treno): che ritorna void e serve a simulare l’ingresso sul treno passato come argomento. Tale metodo viene poi implementato in maniera diversa a seconda della tipologia del viaggiatore. 4. Definire una classe (ViaggiatorePrima.java) che implementa l’interfaccia Viaggiatore e modella un viaggiatore di ‘Prima Classe’. In particolare, tale classe possiede tre variabili locali private: •= nome : che è una Stringa che contiene il nome del viaggiatore. •= denaro: che è un intero che indica la quantità di denaro (in Euro) correntemente a disposizione del viaggiatore. •= cartaCredito: che è una variabile boolean che indica se il viaggiatore possiede una carta di credito per il pagamento (cartaCredito == ‘TRUE’), oppure no (cartaCredito == ‘FALSE’). Implementare inoltre i seguenti metodi: •= paga(int somma)che simula il pagamento del prezzo del biglietto da parte del viaggiatore e ritorna un valore boolean. In particolare, se il viaggiatore possiede la carte di credito ritorna subito ‘TRUE’. In caso contrario, se possiede una quantità di denaro sufficiente a pagare la quantità somma ricevuta come argomento, ritorna ‘TRUE’ e aggiorna la quantità di denaro posseduta sottraendo la somma pagata; altrimenti ritorna ‘FALSE’. Tale metodo deve essere definito privato. •= toString()che ritorna il nome del viaggiatore oltre che una indicazione circa il possesso di una carta di credito e del denaro disponibile. Per esempio, se il nome del viaggiatore è “Carlo Rossi”, possiede 30 Euro e non ha carta di credito la stringa di ritorno sarà: “Carlo Rossi/Denaro: 30/CartaDiCredito: No” mentre se il nome del viaggiatore è “Carlo Rossi”, posside 20 Euro oltre che una carta di credito la stringa di ritorno sarà: “Carlo Rossi/Denaro: 20/CartaDiCredito: Sì “ Infine, implementare il metodo ereditato entra(Treno treno), controllando prima di tutto se sul treno c’è disponibilità di posti. In caso negativo il metodo stampa in uscita un messaggio di warning. Per esempio se il viaggiatore “Carlo Rossi” prova a salire sul treno “IR_2129” senza più posti liberi, comparirà su standard output il messaggio: Il viaggiatore Carlo Rossi non è potuto salire sul treno IR_2129 In caso in cui invece ci sia disponibilità di posti, il viaggiatore deve pagare il prezzo del biglietto del treno ed entrare sul treno. Se può pagare il biglietto viene fatto entrare sul treno (che aggiornerà il numero di posti occupati) e viene stampato in uscita un messaggio del tipo : Il viaggiatore Carlo Rossi è salito sul treno IR_2129 Se invece non può pagare il biglietto resta a terra e viene stampato un messaggio del tipo: Il viaggiatore Carlo Rossi non ha sufficiente denaro per il treno IR_2129 5. Realizzare il costruttore della classe ViaggiatorePrima che possiede tre argomenti in ingresso : una Stringa (nome) che inizializza il nome del viaggiatore di prima classe, un valore boolean(carta) che inizializza cartaCredito e un intero(denaro) che inizializza la quantità di denaro inizialmente posseduta. 6. Progettare un componente software di nome StazioneMain. Questo dovrà creare un oggetto (treno) di tipo Treno con codice “IR_2129”, con 47 persone già a bordo e con un prezzo del biglietto di 20 Euro. Stampa quindi in uscita la stringa “Creato il treno ” + il codice identificativo del treno. Crea quindi un array (viaggiatori) contenente due oggetti di tipo Viaggiatore. Il primo elemento contiene il riferimento al viaggiatore di prima classe “Carlo Rossi”, con 30 Euro e senza carta di credito. Il secondo elemento, il riferimento ad un viaggiatore di prima classe di nome “Marco Bianchi”, con carta di credito e senza denaro con sé. Per ogni viaggiatore creato viene stampato a video “Creato il viaggiatore ” + la rappresentazione in stringa del viaggiatore. 7. Progettare un pannello java (JPanel) personalizzato di nome Pannello che contenga: •= Un bottone con etichetta “Viaggiatore”. •= Un bottone con etichetta “Viaggiatore c/carta”. Inoltre, il costruttore di Pannello possiede due argomenti: un oggetto di tipo Treno e un array di oggetti di tipo Viaggiatore. In figura1 viene riportata una ‘vista’ dell’interfaccia del pannello. figura1 8. Estendere il componente software StazioneMain, in modo tale che dopo la creazione del treno e dei due viaggiatori al punto 6, provveda ad avviare l’interfaccia grafica. Per fare ciò dovrà: •= Creare una finestra di tipo JFrame con titolo “Simulazione Stazione”. La finestra ha posizione iniziale (200,200), altezza (80 pixel) e larghezza (400 pixel). •= Aggiungere alla finestra un pannello personalizzato di classe Panello passandogli come argomenti al costruttore il treno e l’array di viaggiatori creati al punto 6. •= Visualizzare la finestra. 9. Progettare un ascoltatore di eventi personalizzato di nome Listener. Il costruttore di Listener possiede due argomenti: un oggetto(viaggiatore) di tipo Viaggiatore e un oggetto(treno) di tipo Treno. Ad ogni evento notificato al Listener, questo cercherà di fare entrare il viaggiatore sul treno, attraverso il suo metodo entra(…). 10. Estendere il pannello creato al punto 7, aggiungendo due distinti ascoltatori di eventi per la gestione delle pressioni dei due bottoni. Gli ascoltatori sono oggetti di tipo Listener. In particolare, all’ascoltatore del bottone “Viaggiatore” verrà passato il riferimento al treno “IR_2129“ ed al viaggiatore “Carlo Rossi” creati al punto 6 in StazioneMain; mentre all’ascoltatore del bottone “Viaggiatore c/carta” il riferimento al medesimo treno “IR_2129“ ed al viaggiatore “Marco Bianchi” creati sempre al punto 6. Per verificare la corretta progettazione: Si esegua StazioneMain e si prema prima due volte consecutive il bottone “Viaggiatore” e poi 3 volte consecutive il bottone “Viaggiatore c/carta”. Il risultato su standard output dovrà essere Creato il treno IR_2129 Creato il viaggiatore Carlo Rossi/Denaro: 30/CartaDiCredito: No Punto 6. Creato il viaggiatore Marco Bianchi/Denaro: 0/CartaDiCredito: Si' Il viaggiatore Carlo Rossi è salito sul treno IR_2129 Il viaggiatore Carlo Rossi non ha sufficiente denaro per il treno IR_2129 Il viaggiatore Marco Bianchi è salito sul treno IR_2129 Il viaggiatore Marco Bianchi è salito sul treno IR_2129 Il viaggiatore Marco Bianchi non è potuto salire sul trenoIR_2129 2 pressioni bottone “Viaggiatore” 3 pressioni bottone “Viaggiatore c/carta”