CompSci 308
Spring 2024
Advanced Software Design and Implementation

Cell Society : Basic Implementation

First make the change easy (warning: this might be hard), then make the easy change. — Kent Beck

Build your planned Cellular Automata simulator. Working together as a team, collaborate to create a basic implementation of the given project specifications, incorporating packages that clearly separate the Model (which has no dependencies on OpenJFX) from the View (which uses OpenJFX to display and interact with the Model's data).

You are encouraged to start simply in order to verify your understanding of the project's essential algorithms and the five initial simulations. Along the way, refactor your code to help it serve as a well-designed foundation for the more diverse functionality changes to be revealed in the next part. As a reminder, in addition to the Design Specification from the first project, you are expected to consistently adhere to DESIGN-05 through DESIGN-13

Specifically, the core classes submitted for this part should use abstractions so new features are created by addition rather than changing existing code and encapsulate implementation details so that the other classes will not be dependent on them (minimally, the Model's grid data structure, the View's display of the grid, and the file format details).

Advice

GIT

We strongly suggest using the course's suggested GIT workflow for teams to make working in a team easier. So that the entire team can make progress, all team members need to integrate each other's work regularly (push their own changes that others depend on and pull others changes to stay current with the project's design) rather than having marathon merge or redesign sessions because everyone's code has drifted from a common design. Inevitably, conflicts will occur and they should be used as opportunities to think about and collaborate on how best to resolve distinct changes to the same piece of code.

As a reminder, in your commit message, continue to reference the single Functional or Design Requirement ID represented by each code change.

We will be checking that each person regularly commits test files rather than waiting to do it until the end.

Property Values

The View must use configuration file(s) for the details of its components instead of hardcoded values within your Java code, specifically:

Strive to move hardcoded assumptions into configuration resource files — it should be possible to have separate runs look very different by changing only property files, rather than recompiling the program!