CompSci 308
Fall 2018
Software Design and Implementation

Cell Society : Inheritance Review Questions

Pair up with someone from a different team, but a similar area within the project, and discuss the following questions. Note, the goal of this exercise is not to change everyone's design to be the same but to improve everyone's current design. It will also be useful to help you practice justifying your design decisions by explaining your choices to someone that was not part of your team discussions.

Each person should discuss the pieces of the project for which they are responsible, although you can also discuss higher level design issues that were addressed in your team meetings this week. Complete each part below individually after your pair discussion before moving on to the next part.

For the parts below, each person should listen to the other's complete ideas before expressing their own opinion. Feel free to ask questions to clarify your understanding of the design or its justification, but not to be critical of the design. After the person is done with their thoughts, then you can provide constructive comments about the design: if you like it, explain why; if you do not, explain why and provide an example of where you think it fails. Together, try to come up with a better design, instead of just telling them what you think is the "right" way to do it.

Use Gitlab's markdown format to record the team's discussion in a file called doc/INHERITANCE_REVIEW_NETIDs.md within each person's Cell Society team repository. Here is a web-based WYSIWYG editor for markdown if you prefer.

Part 1

  1. What is an implementation decision that your design is encapsulating (i.e., hiding) for other areas of the program?
  2. What inheritance hierarchies are you intending to build within your area and what behavior are they based around?
  3. What parts within your area are you trying to make closed and what parts open to take advantage of this polymorphism you are creating?
  4. What exceptions (error cases) might occur in your area and how will you handle them (or not, by throwing)?
  5. Why do you think your design is good (also define what your measure of good is)?

Part 2

  1. How is your area linked to/dependent on other areas of the project?
  2. Are these dependencies based on the other class's behavior or implementation?
  3. How can you minimize these dependencies?
  4. Go over one pair of super/sub classes in detail to see if there is room for improvement.
    Focus on what things they have in common (these go in the superclass) and what about them varies (these go in the subclass).

Part 3

  1. Come up with at least five use cases for your part (most likely these will be useful for both teams).
  2. What feature/design problem are you most excited to work on?
  3. What feature/design problem are you most worried about working on?

Submission

Push your markdown file, doc/INHERITANCE_REVIEW_NETIDs.md, to your team's Gitlab repository by the end of class. Make sure the document includes everyone's name that worked on it.