Java Reference
In-Depth Information
Code 14.1
An outline of the
Vehicle class
public void clearTargetLocation()
targetLocation = null ;
The process of creating the outline project raised a number of issues. Here are some of them:
You should expect to find some differences between the design and the implementation, ow-
ing to the different natures of design and implementation languages. For instance, discussion
of the scenarios suggested that PassengerSource should have the responsibility Generate
pickup and destination locations for a passenger , and Passenger should have the responsi-
bility Receive pickup and destination locations . Rather than mapping these responsibilities to
individual method calls, the more natural implementation in Java is to write something like
new Passenger(new Location(...), new Location(...))
We have ensured that our outline project is complete enough to compile successfully. That
is not always necessary at this stage, but it does mean that undertaking incremental develop-
ment at the next stage will be a little easier. However, it does have the corresponding disad-
vantage of making missing pieces of code potentially harder to spot, because the compiler
will not point out the loose ends.
The shared and distinct elements of the Vehicle , Taxi , and Shuttle classes only really
begin to take shape as we move towards their implementation. For instance, the different ways
in which taxis and shuttles respond to a pickup request is reflected in the fact that Vehicle
defines setPickupLocation as an abstract method, which will have separate concrete im-
plementations in the subclasses. On the other hand, even though taxis and shuttles have dif-
ferent ways of deciding where they are heading, they can share the concept of having a single
target location. This has been implemented as a targetLocation field in the superclass.
At two points in the scenario, a vehicle is expected to notify the company of its arrival at
either a pickup point or a destination. There are at least two possible ways to organize this in
the implementation. The direct way is for a vehicle to store a reference to its company. This
would mean that there would be an explicit association between the two classes on the class
An alternative is to use the Observer pattern introduced in Chapter 13, with Vehicle
extending the Observable class and TaxiCompany implementing the Observer interface.
Direct coupling between Vehicle and TaxiCompany is reduced, but implicit coupling is
still involved, and the notification process is a little more complex to program.
Up to this point, there has been no discussion about how many passengers a shuttle can carry.
Presumably there could be different-sized shuttles. This aspect of the application has been
deferred until a later resolution.
There is no absolute rule about exactly how far to go with the outline implementation in any
particular application. The purpose of the outline implementation is not to create a fully work-
ing project, but to record the design of the outline structure of the application (which has been
Search WWH ::

Custom Search