JMU JMU - Department of Computer Science
Help Tools
Parameterized Classes


1 Purpose

The primary purpose of this assignment is to help you review (and demonstrate that you have acquired) the knowledge and skills required to use parameterized classes in Java. There is no network programming in this assignment.

2 Overview

You have already done some work for KitchIntel, a (fictitious) company that intends to simplify and improve all aspects of the "kitchen experience" (including the purchase of food and materials, meal preparation, and waste disposal). Unfortunately, as is often the case when using Scrum (because it is a lightweight process and not much time is devoted to design at the start of the effort), the team has discovered a weakness with the original design.

The team changed the design at the last sprint planning meeting, and you must refactor your code accordingly. (This is, in fact, a refactoring, because the external behavior of the code is not being changed, just its internal structure.)

3 Preparatory Tasks

If you are not using a code management system (e.g., Subversion, Git, Mercurial) then you should probably create a new project for this assignment, and copy all of your existing code into it, since you may need to go back to the original code at some point.

4 Documents

During the sprint planning meeting you took notes that, you think, contain everything you need to proceed. In case you lost them, they are available here: Notes from the Sprint 2 Planning Meeting

5 Tasks

You must refactor all of the classes and interfaces that require it.

In addition, you must update your unit test suite as necessary. Your JUnit test suite must, again, cover all statements and all branches (as measured by EclEmma) Your tests must be in a package named testing and each test class must include the word "Test" in its name.

When compiled (e.g., from the command line using javax -Xlint), your code must not generate any "raw type" warnings. In other words, your solution must be type safe.

6 Submission

You must submit (using Autolab) a .zip file named pa2.zip that contains:
  1. Your implementation of the required interfaces/classes in the appropriate package(s).
  2. JUnit tests for all of your classes in a package named testing.

There is no limit on the number of submissions and no penalty for excessive submissions.

7 Grading

Your submission will be graded as follows:

Points will be deducted manually (i.e., outside of Autolab) for code that is unclear, inelegant, and/or poorly documented.

8 Help Getting Started

If you have trouble getting started, you can try working with the original refactoring of the Amount interface discussed in your notes from the planning meeting for Sprint 1. Then, try to refactor the AbstractAmount class accordingly. This will, hopefully, help you understand why the team decided to use the other refactoring of the Amount interface.

It will also help if you include @Override annotations where appropriate right from the start (rather than doing so after you think everything is working) and pay attention to all compiler warnings (not just errors).

Copyright 2020