Java Reference
In-Depth Information
theater. So we assume that each show has a link to a
Theater
object. (Note this on the card:
Stores theater
. This is also a collaborator.) The theater should probably know about the exact
number and arrangement of seats it has. (We can also note in the back of our heads, or on a
separate piece of paper, that each show must have its own instance of the
Theater
object,
because several shows can be scheduled for the same
Theater
and reserving a seat in one
does not reserve the same seat for another show. This is something to look out for when
Show
objects are created. We have to keep this in mind so that later, when we play through
the scenario of
Scheduling a new show
, we remember to create a theater instance for each
show.) The way a show deals with reserving a seat is probably by passing this reservation
request on to the theater.
■
Now the theater has accepted a request to make a reservation. (Note this on the card:
Accepts
reservation request
.) How does it deal with it? The theater could have a collection of seats in
it. Or it could have a collection of rows (each row being a separate object), and rows, in turn,
hold seats. Which of these alternatives is better? Thinking ahead about other possible scenarios,
we might decide to go with the idea of storing rows. If, for example, a customer requests four
seats together in the same row, it might be easier to find four adjacent seats if we have them all
arranged by rows. We note on the
Theater
card:
Stores rows
.
Row
is now a collaborator.
■
We note on the
Row
class:
Stores collection of seats
. And then we note a new collaborator:
Seat
.
■
Getting back to the
Theater
class, we have not yet worked out exactly how it should react
to the seat reservation request. Let us assume it does two things: find the requested row and
then make a reservation request with the seat number to the
Row
object.
■
Next, we note on the
Row
card:
Accepts reservation request for seat
. It must then find the right
Seat
object (we can note that as a responsibility:
Can find seats by number
) and can make a
reservation for that seat. It would do so by telling the
Seat
object that it is now reserved.
■
We can now add to the
Seat
card:
Accepts reservations
. The seat itself can remember whether
it has been reserved. We note on the
Seat
card:
Stores reservation status (free/reserved)
.
Exercise 13.4
Play this scenario through on your cards (with a group of people, if possible).
Add any other information you feel was left out in this description.
Should the seat also store information about who has reserved it? It could store the name of the
customer or the telephone number. Or maybe we should create a
Customer
object as soon as
someone makes a reservation, and store the
Customer
object with the seat once the seat has
been reserved? These are interesting questions, and we will try to work out the best solution by
playing through more scenarios.
This was just the first, simple scenario. We need to play through many more scenarios to get a
better understanding of how the system should work.
Playing through scenarios works best when a group of people sit around a table and move the
cards around on it. Cards that cooperate closely can be placed close together to give an impres-
sion of the degree of coupling in the system.
Search WWH ::
Custom Search