CompSci 308
Spring 2024
Advanced Software Design and Implementation

Cell Society : Design Plan

Every time you believe there’s only one way to accomplish your goal, question that belief. — Martin Fowler

This part is intended to get you to try to think about the design of a program without specifying about exactly how it will be implemented. In other words, you should explore a design in enough detail to convincingly describe the primary classes (and any significant supporting classes you think are necessary) that will work together to provide the project's functionality without writing any implementation code.

Take this time to get everyone on the team to start with a similar understanding.

No running code is required for this submission.


Describe the primary classes you envision are needed to represent the program's basic functionality. Focus your design on how to represent a simulation model in a general way and specifically on what behavior (i.e., methods) your classes would have instead of focusing on the instance variables. If describing an abstraction (i.e., an inheritance hierarchy), clearly identify what behaviors the classes have in common (i.e., the superclass), and what are different, (i.e., the subclasses).

In your doc/ document, complete the following sections:

This plan is not intended to be completely binding, but significant changes will be penalized. This is not meant to over-stress this process or squash your later creativity, just to note that if you end up throwing out the plan completely, then it is not clear you thought about the project in enough detail to make basic critical choices. Any changes to this plan should be addressed in your final DESIGN document (adding descriptive comments while you write the code for it can be helpful for remembering your thought process and other details about the change so you can explain it later).

Use Cases

The following scenarios are provided to help test the completeness of your design. By writing the steps needed to complete each case below you will be able to see how effectively your design handles these scenarios and others will be able to better understand how deeply you have considered the basic issues. It may help to role play or draw a diagram of how your classes collaborate to complete each case. For this exercise each step, try to include both the class used and the method used to accomplish the step.

Clearly show the flow of calls to public methods described in your design needed to complete each example below, indicating in some way which class contains each method called (you do not have to implement any of the called functions.):