Questo documento fa parte del materiale impacchettato nel file es04.jar
che si trova sul
sito di
Fondamenti di Informatica LB
Il teatro Verdi di Cesena commissiona alla software house ACME la realizzazione di un prototipo di biglietteria
elettronica, per permettere la prenotazione e acquisto di biglietti per determinati spettacoli
sia da postazioni dedicate, sia da Internet.
Il teatro conta di 33 posti numerati (da 1 a 33).
I servizi messi a disposizione da una biglietteria elettronica sono di due categorie, per utenti e per gestori.
In generale il gestore vuole avere la possibilità di inserire gli spettacoli disponibili;
ad un utente invece devono essere forniti servizi per prenotare posti relativi ad uno spettacolo
e, dopo aver prenotato, procedere all'acquisto dei biglietti.
Quindi per il gestore devono esser foniti come servizi:
registrazione di nuovo spettacolo, caratterizzato da un nome;
Per gli utenti devono esser foniti come servizi:
prenotazione di uno o più posti per la visione di uno spettacolo. Uno spettacolo è caratterizzato da un nome (stringa). Se l'operazione va a buon fine all'utente viene rilasciata una nota di prenotazione o - più semplicemente - una prenotazione, ovvero qualcosa che identifichi la prenotazione effettuata, mantenendone le informazioni (nome dello spettacolo, posti prenotati);
acquisto dei biglietti, data una prenotazione. L'acquisto può esser fatto solamente presentando una prenotazione valida, ottenuta in precedenza con il servizio di prenotazione.
La nostra biglietteria elettronica dovrà fornire entrambe le categorie di servizi, la prima categoria utilizzata dai gestori per inserire nuovi spettacoli, la seconda utilizzata dagli utenti per prenotare e acquistare i biglietti.
Alcuni progettisti nottambuli della ACME software house hanno già progettato e sviluppato le interfacce che rappresentano le due categorie di servizi:
l'interfaccia TicketService
dentro al pacakge es04
, che rappresenta
l'interfaccia dei servizi per l'utente; di tale interfaccia è fornito il sorgente
(src/es04/TicketService.java
), il compilato (build/es04/TicketService.class
)
e documentazione (al solito dentro a docs/apidocs
).
Come descritto nella documentazione, tale interfaccia fornisce 2 metodi che
corrispondono al servizio di prenotazione dei biglietti (metodo bookTickets
) e al
servizio di acquisto dei biglietti (metodo buyTickets
).
I due metodi utilizzano la classe BookingNote
, che rappresenta l'astrazione di
prenotazione descritta in precedenza. La classe, molto semplice, non fa altro che
aggregare informazioni relative ad una prenotazione: nome dello spettacolo, posti prenotati.
Di tale classe è fornito il sorgente (build/es04/BookingNote.java
), il compilato (build/es04/TicketService.class
)
e la relativa documentazione (al solito dentro a docs/apidocs
).
l'interfaccia SpectacleService
dentro al package es04
, che rappresenta
l'interfaccia dei servizi per il gestore; di tale interfaccia è fornito il sorgente
(src/es04/SpectacleService.java
), il compilato (build/es04/SpectacleService.class
)
e documentazione (al solito dentro a docs/apidocs
).
Come descritto nella documentazione, l'interfaccia fornisce un metodo che
corrisponde al servizio di registrazione di un nuovo spettacolo (metodo registerSpectacle
).
Quindi obiettivo dell'esercitazione è sviluppare l'astrazione di biglietteria elettronica avendo a disposizione le due interfacce viste, fornendo quindi funzionalità sia per la prenotazione e acquisto biglietti (lato utente), sia per l'inserimento di spettacoli (lato gestore). Al solito si richiede anche di fornire un componente software che ne testi il comportamento.
Per i test da fare, considerare come esempio i test descritti nel componente software
fornito nel materiale, TestTheatre
(sorgente src/es04/TestTheatre.java
e compilato build/es04/TestTheatre.class
).
Tale componente software esegue un insieme di test a partire da una implementazione della biglietteria
rubata ad un'altra software house, di cui possediamo solo il compilato.
La classe in questione si chiama TheatreService
, sappiamo che implementa
entrambe le interfacce TicketService
e SpectacleTheatre
,
e ne possediamo solo il file class (file es04/build/TheatreService
), utilizzato dal componente software fornito.
es04
. Come visto a lezione, data la corrispondenza che
sussiste fra package e directory, i sorgenti sono di conseguenza dentro alla directory src/es04
,
mentre i file *.class
vengono automaticamente creati dentro alla directory build/es04
.
Il nome delle classi/interfacce completo è quindi es04.XXXX
, ad esempio es04.TicketService
,
es04.BookingNote
, es04.TestTheatre
.
Quindi per mandare in esecuzione il componente software fornito a corredo è necessario scrivere: es04> java -classpath build es04.TestTheatre
Anche le classi da sviluppare dovranno far parte del package in questione. Per compilare non cambia nulla, ad esempio:
es04> javac -d build -classpath build src/es04/TestTheatre.java
Si vogliono estendere i servizi forniti agli utenti includendo anche la possibilità di cancellare
una prenotazione effettuata in precedenza. Dunque oltre al servizio per prenotare posti di uno spettacolo
e per acquistare successivamente i biglietti, si vuole aggiungere un servizio
cancella prenotazione
. Come per il servizio di acquisto biglietti, tale servizio avrà
bisogno come parametro di ingresso di una prenotazione e restituirà un successo o un
fallimento a seconda che sia o meno possibile disdire la prenotazione (non è possibile disdire
una prenotazione se la prenotazione è già stata utilizzata per acquistare i biglietti).
Obiettivo del punto facoltativo è quindi riusare / estendere quanto sviluppato al punto precedente (...inclusa una delle interfacce fornite...) al fine di realizzare una biglietteria che offra anche questo servizio. Fornire anche un componente software di testing per la nuova biglietteria.
Si vuole che la biglietteria mantenga traccia su un file di testo service.txt
di tutte le operazioni di prenotazione e acquisto effettuate dagli utenti. Ciò significa che
ogni volta viene effettuata una prenotazione, sul file di testo deve esser aggiunta come informazione
Sono stati prenotati XX posti per lo spettacolo YYYYY. Prenotazione: ZZZZ
Mentre ogni volta che viene effettuato un acquisto, devono essere aggiunta una informazione tipo
Sono stati acquistati i biglietti relativi alla prenotazione ZZZZ