IT-501: Final Project Description and Scoring Guide Overview The final project for this course is the creation of an ExtendedDate class. Based on the knowledge obtained in this course and previous course work, consider an initial Date class as defined here.Note that this definition of the Date class will permit saving any values for a date’s instance variables including zero or negative values, values for month greater than 12, values for day greater than 31, and no limits for the values of year. Define a new class named ExtendedDate that inherits from or extends the Date class. This new class should provide the following additional capability. The class should ensure that only ExtendedDate objects with valid dates are created. For example, month should always be between 1 and 12. Day should be between 1 and 31. The maximum value of day depends on the month for the date. The maximum day for the month of February also depends on the year value for the ExtendedDate object (i.e. is it a leap year or not?). The value of year should be between 1900 and 2999 (we won’t worry about dates before or after that date). Once created, the values of an ExtendedDate object can be modified individually. For example, an ExtendedDate’s month, day, or year could be changed. However, we must sure that the result of any changes will not result in invalid dates being created. If it would, do not change the ExtendedDate object receiving the message. In addition, ExtendedDate objects should have additional capabilities. Specifically, ExtendedDate should provide the methods listed under the Main Elements section below. Objectives To successfully complete this project, you will be expected to apply what you have learned in this course and should include several of the following course and module objectives: 1. Apply object-oriented principles to practice 2. Select environment specific classes best suited to developing an application 3. Design necessary classes consistent with the requirements of an application 4. Implement the principles of inheritance and polymorphism in designing object-oriented applications 5. Evaluate design alternatives in a multi-tier architecture Main Elements Your ExtendedDate object should provide: Method A default constructor A constructor that accepts parameters A method to set the date the overrides the inherited setDate method A method to set the month ensuring that only valid changes are made A method to set the day ensuring that only valid changes are made A method to set the year ensuring that only valid changes are made A method to verify that month, day, and year variables constitute a legitimate date A method to test to see if a year value is a leap year A method to see if an ExtendedDate object is in a leap year A method to return the number of days in the month for an ExtendedDate object A method to return the number of days passed in a year for an ExtendedDate object Method Signature/Statement publicclassExtendedDateextends Date { // Default constructor // Data members are set according to super defaults // Constructor that accepts parameters publicExtendedDate(int month, int day, int year) { } // Method to set the date – override inherited setDate method // If data is invalid, do not change the receiver publicvoidsetDate(intmonthInt, intdayInt, intyearInt) { } // Method to set month ensuring that only valid changes are made publicvoidsetMonth(intanInt) { } // Method to set day ensuring that only valid changes are made publicvoidsetDay(intanInt) { } // Method to set year ensuring that only valid changes are made publicvoidsetYear(intanInt) { } // New method to verify a date // Valid range is 1-1-1900 through 12-31-2999 publicstaticbooleanisValidDate(int month, int day, int year) { returntrue; } // Method to test for a leap year publicstaticbooleanisLeapYear(intaYear) { returntrue; } // Instance method version of the above publicbooleanisLeapYear() { returntrue; } // Return number of days in a month publicintdaysInMonth() { return 0; } // Return number of days passed in year (includes current day) publicintdaysToDate() { return 0; } A method to return the number of days remaining in a year for an ExtendedDate object A method to create a new ExtendedDate object by adding a number of days to an existing ExtendedDate object // Return number of days remaining in year publicintdaysRemainingInYear() { return 0; } // Create a new ExtendedDate object with the values that result from adding a number of days to an existing ExtendedDate object. Cannot result in an invalid ExtendedDate being created. If an invalid date would be created, return aExtendedDate with default values. publicExtendedDatefutureDate(intinDay) { returnnewExtendedDate(); } } Please note that the methods listed above state the ExtendedDate class’s public interface. It is essential that everyone use the same method signatures when creating the ExtendedDate class. We want to be able to test the ExtendedDate class to be sure that it properly implements its requirements. To do so, create a separate class in the same package named TestExtendedDate. Create a main() method in this class that provides tests for the methods of the ExtendedDate class. You may post the source statements for the TestExtendedDate class to the project discussion forum. That way, others can test their projects using your test class and you can test your project using test files posted by others. The test class is not to be submitted as part of the project. Only the ExtendedDate class is to be submitted. Again, please only post the TestClass. Format Milestone One: Final Project In Evaluate 10.1, you will submit your code. This assignment is graded using the Final Project Rubric. Rubric Critical Elements Importing Application (5) Critical Elements Application met stated requirements and performed as required (85) Demonstrated Understanding of Course Material (10) No problems encountered Application imported successfully without problems. (5) Distinguished Methods performed as required, prevented invalid dates from being created, and performed calculations for new dates as required. (76 – 85) Student demonstrated a “Distinguished” understanding of and ability to apply course material in implementation of requirements of the assignment. (9-10) Other Instructor Notes: Problems encountered Instructor Feedback Application imported successfully after adjustments. (1 – 4) Application could not be imported. (0) Proficient Methods mostly successful in preventing invalid dates from being created and in performing correct calculations for new dates. (68 - 75) Emerging Application was partially successful in preventing invalid dates from being created and in calculating new dates correctly. (62 – 67) Student demonstrated a “Proficient” understanding in implementation of the requirements of the assignment. (8) Student demonstrated an “Emerging” understanding in implementation of the requirements of the assignment. ( 7) Not Evident Application did not include required method implementationsOR application performed requirements incorrectly OR application failed to import successfully. (0 - 61) Student did not demonstrate an understanding in implementation of the requirements of the assignment. (0-6) TOTAL PERCENTAGE EARNED: Instructor Feedback / 100%