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”