CompSci 307
Spring 2019
Software Design and Implementation

Monopoly : Design Plan

Software is built on abstractions. Pick the right ones, and programming will flow naturally from design; modules will have small and simple interfaces; and new functionality will more likely fit in without extensive reorganization. Pick the wrong ones, and programming will be a series of nasty surprises. — Daniel Jackson

This part is intended for your team to agree on the project's organization, priorities, and the primary architectures that will drive your design. Develop your ideas in enough detail to convincingly describe the public classes and public method signatures of your APIs, as well as how to use them, without writing any actual implementation code.

Submission

Create a folder within your doc folder in the team Gitlab repository, called plan, that contains all the files associated with your initial design plan. Your text documents must be completed using Gitlab's markdown format. Within this folder, create the following artifacts:

When you are satisfied with your design, push your results to the master branch to represent your submission for this part.

Specification

To represent your design at a reasonably high level and provide an organization to the plan document, break it into APIs rather than all the classes you can think of. In everything, focus on how to build a variety of games. Explain the key features in the concept that can vary, how you will support those features, and how you expect new variations to be written (i.e., what needs to be sub-classed, what accepts lambdas, what goes into resource files, and how communication will occur between your separate programs).

Note, the API agreed to between the sub-groups should not be changed after this document because it affects how the other's part might work. If it must be changed, the change and its reasons must be clearly described in a separate document, doc/API_CHANGES.md, included in the team's Gitlab repository.

Structure the plan document in the following sections:

Presentation

During lab, each team will be given 10 minutes to present their implementation and design plans with enough justification and detail to convince us your plan is sound. Each team should have a primary spokes-person, i.e., a master of ceremonies, but each team member should have a chance to present (if you cannot attend the presentation, you are expected to record a video about your part of the project and submit it separately).

Start by presenting your team's implementation plan:

Then present your team's design plan, focusing on your APIs and their behavior instead of implementation decisions and class state:

Prepare any material ahead of time for the presentation and make it available in the project repository, either as committed code, images, UML diagrams, or written text, in the form of Markdown, Javadoc or a wiki page on Gitlab. PowerPoint slides are discouraged because they are completely separate from project and unlikely to be maintained even if they are added to the repository, but here are some tools to convert Markdown to a slide style format.

Submission

Use GIT to push your team's code to the single, provided, monopoly_TEAM repository on the master branch as your team's submission of this part of the project. Note, any materials used in your presentation must also be completed with this submission.