Java Reference
In-Depth Information
have on the existing animal types. For instance, your animal might compete with foxes as a
predator on the rabbit population, or your animal might prey on foxes but not on rabbits. You
will probably find that you need to experiment quite a lot with the configuration settings you
use for it. You will need to modify the
populate
method to have some of your animals cre-
ated at the start of a simulation.
You should also define a new color for your new animal class. You can find a list of pre-
defined color names on the API page documenting the
Color
class in the
java.awt
package.
Exercise 10.51
Challenge exercise
The text of the
giveBirth
methods in
Fox
and
Rabbit
is very similar. The only difference is that one creates new
Fox
objects and the other
creates new
Rabbit
objects. Is it possible to use the technique illustrated with
canBreed
to
move the common code into a shared
giveBirth
method in
Animal
? If you think it is, try it
out.
Hint
: The rules on polymorphic substitution apply to values returned from methods as well
as in assignment and parameter passing.
10.5
Multiple inheritance
10.5.1 An
Actor
class
In this section, we discuss some possible future extensions and some programming constructs
to support these extensions.
The first obvious extension for our simulation is the addition of new animals. If you have
attempted Exercise 10.50 then you will have touched on this already. We should, however,
generalize this a bit: maybe not all participants in the simulation will be animals. Our current
structure assumes that all acting participants in the simulation are animals and that they inherit
from the
Animal
superclass. One enhancement that we might like to make is the introduction
of human predators to the simulation, as either hunters or trappers. They do not neatly fit the
existing assumption of purely animal-based actors. We might also extend the simulation to
include plants eaten by the rabbits, or even some aspects of the weather. The plants as food
would influence the population of rabbits (in effect, rabbits become predators of the plants), and
the growth of the plants might be influenced by the weather. All these new components would
act in the simulation, but they are clearly not animals, so it would be inappropriate to have them
as subclasses of
Animal
.
As we consider the potential for introducing further actors into the simulation, it is worth
revealing why we chose to store details of the animals in both a
Field
object and an
Animal
list. Visiting each animal in the list is what constitutes a single simulation step. Placing all par-
ticipants in a single list keeps the basic simulation step simple. However, this clearly duplicates
information, which risks creating inconsistency. One reason for this design decision is that it
allows us to consider participants in the simulation that are not actually within the field—a rep-
resentation for the weather might be one example of this.
Search WWH ::
Custom Search