Programming Assignment 2
         
            
         
         
            
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 specialization and abstract classes in Java.  From a
  language and algorithms perspective, there is nothing new in this
  assignment. There is also no multimedia programming in this
  assignment. However, this assignment does make use of the
  factory-method design pattern. (Actually, you should now realize
  that the parseTemperature() method in the previous
  programming assignment also used the factory-method pattern.)
  
         
            2 Overview
    As you know, 
WeatherBits is a
    (fictitious) company that is developing and commercializing applications
    that will use localized, high-resolution weather forecasts.
    For this assignment, you must implement and test several methods in
    the 
weather package.
  
 
         
            
3 Starting Point
  This assignment builds on PA1. You may start with either your
  solution to PA1 or my solution to PA1. However, there is no
  guarantee that my code is correct; you are responsible for any and
  all mistakes in your submission. (There are no intentional defects in my
  solution but it may contain unintentional defects. You are responsible for
  the correctness of everything you submit.)
  
         
            4 Documents
    WeatherBits uses a heavyweight process (as opposed to an agile process)
    so they have created a fairly detailed set of specifications.
    They are described in the following document:
    
          
         
            
5 Tasks
  You must implement all of the classes in
  the weather package.
  In addition, you must develop a complete unit test suite for these
  classes that covers 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 Hints
  As is always the case, your implementation must avoid code
  duplication wherever it is reasonably possible to do so. So, for
  example, the various static factory methods must call the
  appropriate fromString() method. As another example,
  derived classes must not duplicate code in the class that they
  specialize.
  
  
         
            7 Submission
  You must submit (using Gradescope) a 
.zip
  file 
named pa2.zip
             that contains:
  
               - Your implementation of the required interfaces/classes
          in the appropriate package(s).
 
               - JUnit tests for all of your classes (including necessary classes from
      previous assignments) in a package
      named 
testing. 
            
            
  The .zip file must contain
  the measurement, weather, and testing
  packages at the top level.
  
  
            
  You may submit your code up to 10 times with no penalty. After the 10th
  submission, your grade will be reduced by 5 points for each submission.
  
          
         
            8 Grading
  Your submission will be graded as follows:
  
               - Conformity to the Style Guide (Style) - 10% (All or Nothing; Success Required)
 
               - Passing your Tests (SelfTests) - 10% (All or Nothing; Success Required)
 
               - Coverage of your Tests (Coverage) - 20% (Partial Credit Possible)
 
               - Correctness of your Code (OfficialTests) - 60% (Partial Credit Possible)
 
            
            
  As always, points will be deducted manually for code that is
  unclear, inelegant, and/or poorly documented.