Our next step was to more formally define the classes and their relationships, using the graphical notation. We went through several iterations on this process.
live attribute) and what it's position was in the ocean. We also decided that it would need to know how to be eaten (beEaten service).
live to dead. It also meant removing oneself from the ocean, so the LivingObject needed to know about the ocean.
Plant and Fish subclasses of LivingObject.
move and eat, but Plants didn't really need to know more than any other LivingObject. So, we renamed LivingObject to LivingOrganism.
OceanQueue) to keep track of simulation time and to track which fish can eat. We decided that OceanQueues would know how to activate, which would involve telling all of their fish to activate. They would also keep track of simulation time.
food attribute).
move then eat, if there happened to be something that the Fish considered food at the position it was at -- but only if the Fish were alive.
Ocean which would keep of its occupants. Oceans would be informed when something died (so that it would no longer be an occupant of the ocean), and oceans would inform LivingOrganisms if something which it considers food is available (isFood:at:at:).
ocean so that they could tell the ocean when they had passed on.