ICS 211 Homework H02: OOP, Class Hierarchies and Interfaces.

Purpose

Object Oriented Programming (OOP) is a very useful tool for problem solving. We can break down a problem into its components, model them as classes and instances to solve the problem. We are also going to explore different ways of comparing instances.

We are going to enhance our understanding of OOP, class hierarchies and interfaces by creating a simple Java class hierarchy of Cheese and a Fromager. The Fromager implements an interface and follows the Factory and Singleton design patterns. In addition to the Cheeses and Fromager we are going to develop two different Comparators for comparing cheeses.

The Cheese class hierarchy looks like Cheese Hierarchy

This assignment will give you practice using Eclipse to create and test Java classes. Hopefully, you have set up your Eclipse environment to make this assignment easier to complete.

Tasks

1. Create a package named edu.ics211.h02

This is where we will put all our classes for homework 2.

2. Create the Java Enums, Interfaces and Classes needed for this homework assignment

The Java files you need are: ManoaCheeseFromagerTest.java, CheeseFromager.java, and CheeseType.java.

The easiest way is to right mouse click on the link and choose “Save Link As…”. Save the files into your edu.ics211.h02 directory. Or you can use eclipse and create each of the files then replace their contents with the Java code.

To get the tests to run you will need to add the JUnit 4 library to your eclipse project.

3. Create the base abstract class Cheese that implements Comparable<Cheese>

Choose New -> Class.

New Cheese Class

Make sure you add the Comparable<Cheese> interface and click the abstract modifier before you click finish.

Here’s a screen shot of my Cheese class the eclipse created. Notice the compareTo method was automatically created.

Cheese Class

Modify the base abstract class Cheese so that it has:

The Cheese class must be abstract. You cannot create an instance of a generic Cheese. You can only create instances of the concrete subclasses.

Here’s a screen shot of my Cheese class in Eclipse. Cheese class

Notice there are no Problems in my project. That means that there are no compile or checkstyle errors.

4. Create three abstract classes Fresh, Soft and Firm that extends Cheese

These classes have:

5. Create the Mozzarella, Brie, Parmesan and Cheddar classes

Class Mozzarella extends Fresh, Brie extends Soft and Parmesan and Cheddar extend Firm all have:

6. Create the ManoaCheeseFromager class

Create a ManoaCheeseFromager singleton class that can create Mozzarella, Brie, Parmesan and Cheddar Cheeses. Singleton classes have a static method getInstance() that returns the one and only one instance of the class. The class must implement the CheeseFromager interface.

Here’s a screen shot of my ManoaCheeseFromager class.

ManoaCheeseFromager

Notice there are no Problems in my project. That means that there are no compile or checkstyle errors.

Implement the CheeseFromager methods. The makeCheese method should check the CheeseType then bake a random Cheese of that type.

At this point you can test your code with ManoaCheeseFromagerTest.java. We are going to use the JUnit tests to evaluate your homework for correctness.

7. (Optional) Create some Comparators

Next week’s homework is sorting an array of Cheese. You will need to create two comparators to do the sorting, so you can get a head start on next week’s homework by:

You can test your comparators using CheeseComparatorTest.java.

Grading Rubric

CriterionExcellent (100%)Satisfactory (75%)Borderline (50%)Unsatisfactory (25%)Poor (0)
Adherence to standards - 2 points
Does it conform to standards in every detail?
No errors. Minor details of the assignment are violated, or poor choices are made where the assignment is unclear. Significant details of the assignment or the underlying program intent are violated, but the program still fulfills essential functions. Significant details of the assignment or the underlying program intent are violated, but the program still fulfills some essential functions. Misses the point of the assignment.
Breakdown (modular design) - 1 point
Does it demonstrate good modular design?
No errors. 1-3 minor errors. > 3 minor errors OR 1 major error. 2 major errors > 2 major error.
Correctness of code - 4 points
Does it work? Does it pass JUnit?
Passes all tests. Works for typical input, may fail for minor special cases. Fails for typical input, for a minor reason. Fails for typical input, for a major reason. No.
Documentation, and style - 2 points
Is it clear and maintainable? Does it pass CheckStyle? Are your steps documented?
No errors. 1-3 minor errors. > 3 minor errors OR 1 major error. 2 major errors > 2 major error.
Efficiency of code - 1 point
Does it use the Java features well?
No errors. 1-3 minor errors. > 3 minor errors OR 1 major error. 2 major errors > 2 major error.

Turning in the Assignment

The assignment is due on Friday at 11:55pm. You may turn it in early.