| Q: | Why wasn't Bin in the design
overview? |
| A: | The definition of the Roulette game did mention the 38
bins of the wheel. However, when identifying the nouns, it
didn't seem important. Then, as we started designing the
Wheel class, the description of the wheel
as 38 bins came more fully into focus. Rework of the preliminary
design is part of detailed design. This is the first of several
instances of rework. |
| Q: | Why introduce an entire class for the bins of the wheel?
Why can't the wheel be an array of 38 individual arrays? |
| A: | There are two reasons for introducing
Bin as a separate class: to improve the
fidelity of our object model of the problem, and to reduce the
complexity of the Wheel class. The
definition of the game describes the wheel as having 38 bins,
each bin causes a number of individual
Outcomes to win. Without thinking too
deeply, we opted to define the Bin class
to hold a collection of Outcomes. At the
present time, we can't foresee a lot of processing that is the
responsibility of a Bin. But allocating a
class permits us some flexibility in assigning responsibilities
there in the future. Additionally, looking forward, it is clear that the
Wheel class will use a random number
generator and will pick a winning Bin. In
order to keep this crisp definition of responsibilities for the
Wheel class, it makes sense to delegate
all of the remaining details to another class. |
| Q: | Isn't an entire class for bins a lot of overhead? |
| A: | The short answer is no, class definitions are almost no
overhead at all. Class definitions are part of the compiler's
world; at run-time they amount to a few simple persistent
objects that define the class. It's the class instances that
cause run-time overhead. In a system where were are counting individual instruction
executions at the hardware level, this additional class may slow
things down somewhat. In most cases, however, the extra few
instructions required to delegate a method to an internal object
is offset by the benefits gained from additional
flexibility. |
| Q: | How can you introduce Set, List, Vector when these don't
appear in the problem? |
| A: | We have to make a distinction between the classes that are
uncovered during analysis of the problem in general, and classes
are that just part of the implementation of this particular
solution. This emphasizes the distinction between the
problem as described by users and a
solution as designed by software developers. The
collections framework are part of a solution, and hinted at by
the definition of the problem. Generally, these
solution-oriented classes are part of frameworks or libraries
that came with our tools, or that we can license for use in our
application. The problem-oriented classes, however, are usually
unique to our problem. |