CompSci 307
Fall 2021
Software Design and Implementation

Design Exercise: Analyzing a Design

This exercise is intended for you to assess your design based on principles and how they help make your design more flexible to accommodate change. To help your assessment, make one more change to the design to see if your design is trending in the right direction (i.e., fewer significant or logic changes, more objects or methods added).

This exercise will not be explicitly graded but, instead, serve as practice for future exercises in the course. Thus, you will get the most out of this assignment by putting in a good faith effort.

Submission

Submit a Markdown formatted plain text file, named design04_fluxx_analysis.md, to the individual portfolio_NETID repository provided for you in the course's Gitlab group.

Specification

Consider another variant on Fluxx called Pirate Fluxx.  In particular, the new card type: Surprise

Here are the differences in Pirate Fluxx from the original and Zombie Fluxx:

Here is the complete list of cards in Pirate Fluxx. The following examples highlight some new features to consider as you update your design:

Add two new Use Cases to test your updated design based on the any of the cards above.

Update your design, the objects with their behaviors and relationships, and the Use Cases that test it to also support multiple versions of the game. Additionally, note the following as you make your changes:

Analysis

Compare how many changes were needed this time to how many were needed for the last set of changes. Use that improvement (hopefully) as a basis for analyzing how effective your design is in the context of the general Design Principles introduced during class:

No design can follow every principle all the time. Rather, program design is balancing trade-offs. For example, you might add a “getter” to a class in order to enable the class to keep a single responsibility. It is important for you to not only be able to make a design decision, but also to defend the decision with principles like these, rather than general terms like "clearly/obviously", "good/sucks", "elegant/ugly", or "like/hate". Note, since no design is perfect, including both pros and cons of a design (i.e., its trade-offs) or alternate ideas you considered is highly encouraged.

For each of the design principles above, explain in which ways your design does and does not follow the principle and why you made the choices you did.