Description
This first assignment is given as a warmup to OO development in C# and emphasizes class design. The primary goal is to design using OOP tenets: abstraction, encapsulation and information hiding.
Document your program well, include: an overview of your program, an overview of each class defined, function headers, as well as an explicit enumeration of ALL assumptions made.
DO NOT hard code: an arbitrary literal, such as ’42’, should be replaced with a constant.
Part I: Class Design
Design an encapsulated class for debtStats. Each debtStats object encapsulates a private, undisclosed id (for a student), alongside cumulative loans, grants, and two dates – matriculation (year when school started, which is set only once, after construction) and anticipated graduation. An application programmer may query a debtStats object as to whether or not the graduation year has been extended and whether or not the loan amount has increased or decreased. The application programmer may also query an debtStats object as to whether a passed debt threshold has been exceeded. A debtStats object may be ‘deactivated’, in which case all queries yield false or no information.
This assignment is a partial realization of a record keeping system, targeted toward collection of data on student borrowers. With the interface described above, your design should support the tasks of identifying loan burden, loan burden amortized per year, and all loans that exceed a given threshold.
Part II: Driver (External Perspective of Application Programmer)
USE FUNCTIONAL DECOMPOSITION!!
Design a driver to demonstrate the program requirements.
Clearly specify the intent and structure of your driver
You should have collections of distinct objects, initialized appropriately, i.e.
random distribution of shifts, initial states, etc.
Your collection of distinct objects should be sufficiently tested
with random input, and seamless alteration of the state of some objects.
Do not skimp on your driver’s design: Your run MUST demonstrate the program requirements.
Use C#, taking note of the following comments.
Comments:
1) Several details in this assignment have been left unspecified.
CLEARLY DOCUMENT all design decision you make.
Design as consistently and cleanly as possible.
2) User interface is essential.
Anyone should be able to use and understand the purpose of your program.
DO NOT assume that the user has read this assignment specification.
Make your output readable but not exceedingly lengthy.
3) Run your program sufficiently to demonstrate its capabilities
Submit results displaying the output.
4) Follow documentation guideline posted on Canvas.
5) Upload your files (p1.cs and debtStats.cs) to Canvas
CPSC 3200 Object-Oriented Development
Sample Grading: Class Design (75 points)
Form (30 points)
Class overview 10 points
Description of type & associated operations
Comments on use and valid states
Statement of assumptions 5 points
needed for proper use
relative to implementation
Proper Accessibility (public, private) 5 points
Appropriate functionality present in interface 5 points
Readable code (no hardcoding) 5 points
Functionality ( 45 points )
Data Type implemented as required 15 points
clear, effective interface
minimal getSize() or the like
no dependencies on implementation exposed, etc.
Data members defined & manipulated as required 15 points
Effective representation of state
Constructor(s) 10 points
put object in proper initial state
State transitions correct 5 points
Sample Grading: Driver (25 points)
Form (10 points)
Program overview 5 points
PROGRAMMER name, date, revision history, platform, etc.
Description of process(es) performed by program
Explanation of user interface (input, meaning of output)
Comments on use and validity (error processing)
Statement of assumptions
NO HARD CODING 5 points
Functionality ( 15 points ): Correlate to Documented Design Decisions
Requirements fulfilled 10 points
No unnecessary dependencies
Required data types used appropriately
User Interface (clear, correct & effective) 5 points
Output (readable & consistent with design)
File(s) manipulated appropriately
existence not assumed
read only once
closed after use