For this assignment you must implement a program of your own design that demonstrates a significant number of the 9 following concepts that we have covered in this course over the semester:

1. Writing classes to define objects that know things and do things

  • Private instance variables to store things that object of this class must know
  • Public getter and setter methods to provide access to the things that objects of this class know and to maintain a valid state
  • Public methods to encapsulate the things that objects of this class must do
  • Private methods to support and simplify the public methods
  • Constructors to conveniently and consistently initialize object of this class to a valid state

2. Composing programs out of objects that collaborate to realize the responsibilities of the program.

  • Includes Classes/object with "has a" relationships (composition)
  • Includes Collections of like objects

3. Leveraging abstract and/or concrete base classes and/or interfaces

  • Includes Classes/objects with "is a" relationships
  • Using inheritance to extend the functionality of a base class
  • Using inheritance to implement the functionality of an interface
  • Defining and using classes with a common methods, but different (polymorphic) behavior
  • Overriding base class or interface methods
  • Explicitly calling base class constructors

4. Using UML to concisely describe the essential features of classes

  • Writing UML class diagrams that detail the classes that make up a program
  • Including attributes and operations
  • Including visibility, data types, arguments, return values, etc.
  • Including relationships between classes

5. Choosing or implementing data structures that best meet the needs of a given problem

  • Includes Justifying the use or implementation of any list or tree-like data structures in your program

6. Leveraging generics in Java

  • Includes Explaining any use of Java's standard library generic types
  • Includes Implementing your own generic classes or methods

7. Using Big-O notation to describe the algorithmic complexity of an algorithm that you are using in your program

8. Writing recursive algorithms

  • An explanation of why you are implementing a given algorithm recursively rather than iteratively
  • Explaining, in detail, how any recursive algorithm that you use in your program works
    • What is/are the base case(s)
    • What is/are the recursive case(s)
    • How does the algorithm insure that each recursive call is closer to the base case?

9. Choosing and using sorting algorithms

  • Includes Explaining why you are using or implementing any algorithms you are using in your program.
Academic Honesty!
It is not our intention to break the school's academic policy. Posted solutions are meant to be used as a reference and should not be submitted as is. We are not held liable for any misuse of the solutions. Please see the frequently asked questions page for further questions and inquiries.
Kindly complete the form. Please provide a valid email address and we will get back to you within 24 hours. Payment is through PayPal, Buy me a Coffee or Cryptocurrency. We are a nonprofit organization however we need funds to keep this organization operating and to be able to complete our research and development projects.