Java Programming Review
         
            
         
         
            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 program in Java.  From a language and algorithms
  perspective, there is nothing new in this assignment. There is also
  no network programming in this assignment.
  
  This assignment will also help you gain some experience with the
  kinds of tools that you will need to use this semester.
  
          
         
            2 Overview
            KitchIntel is 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).
  
  They are in the process of developing a suite of products that will make
  kitchens more intelligent. This assignment involves the tasks that you have
  committed to during the first sprint for the
  KitchIntel Control System.
  
 
          
         
            3 Preparatory Tasks
  Before you do anything else you should:
    
               - Install your IDE on your computer (if you have not already
	done so). (See the course "Tools" page for more information.)
      
 
               - Read all policies related to programming assignments
            (including style guides, submission requirements,
            collaboration rules, etc...).
            
 
            
          
         
         
            5 Tasks
  You must complete all of the classes and interfaces that you committed to.
  (You really don't remember committing to completing them? Don't worry,
  I remember it clearly.)
  
  In addition, you must develop a complete unit test suite for these
  classes.  You must use JUnit (v5) for this purpose.  Your JUnit test
  suite should 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.
            
          
         
            6 Submission
  You must submit (using 
Autolab) a 
.zip
  file 
named pa1.zip
             that contains:
  
               - Your implementation of the required interfaces/classes
          in the appropriate package(s).
 
               - 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:
  
               - Conformity to the Style Guide (Style) - 10% (All or Nothing)
 
               - Passing your Tests (SelfTests) - 10% (All or Nothing)
 
               - Coverage of your Tests (Coverage) - 20% (Partial Credit Possible)
 
               - Correctness of your Code (OfficialTests) - 60% (Partial Credit Possible)
 
            
            
  Points will be deducted manually (i.e., outside of
  Autolab) for code that is unclear, inelegant, and/or poorly
  documented.
  
          
         
            
8 Reminders
  Remember to read and follow all policies related to homework assignments
  (including style guides, submission requirements, collaboration rules,
  etc...).
  
         
            9 Help
  You should be a fairly proficient object-oriented programmer at this point. 
  However, in case you've forgotten some details, help is available.
    
               9.1 Help with Java
    This assignment is a review of the material covered in CS159 that
    you should already understand. The course "Help" pages (see the
    section on "Course Content") on Java and UML contain many useful
    references in case you need to refresh your memory. You also may
    want to refer to the following CS149/CS159 lectures:
    
             
            
               9.2 Help with Eclipse
    Be careful when you create classes in Eclipse that you put them in the
    appropriate package. Also, 
do not put your code in modules.
    
    The 
    JMU CS Wiki on Eclipse explains how to provide
    an application with command-line arguments.
    
             
            
               9.3 Help with Testing
    We will be using JUnit all semester. For more information see:
    
             
            
               9.4 Help with Coverage
    In order to get 100% coverage, you sometimes have to be aware of some
    quirks of the language you are working in and the tool set you are using.
    For more information, see:
    
               
      In order to get 100% coverage, you sometimes also need to change
      your implementation. For example, you may not be able to test a
      private or protected method either directly or indirectly. This
      may be an indication that a public method should be using those
      methods (e.g., a public constructor using a protected or private
      setter).