Implementing Static Features
- identify, correctly use, and implement utility classes
- explain what the static modifier means for fields and methods
- define what the access modifiers public and private mean for fields and methods
- explain how the choice of access modifier affects encapsulation
- define what the final modifier means for fields
- explain why utility classes have a private constructor
- implement static fields for a utility class
- implement static methods for a utility class
- write tests for static methods
- explain how local variables can shadow class fields
- explain the difference between preconditions and validation
- implement static methods that use parameter validation
- add documentation to a utility class using Javadoc
Implementing Non-static Features
- define what a class is in Java
- define what the this keyword means in Java
- explain how non-static fields and methods differ from static fields and methods
- use and draw UML diagrams of classes
- define what a constructor is in Java
- define what a no-argument constructor is in Java
- define what a copy constructor is in Java
- implement constructors for a class
- implement constructor chaining for a class
- define what an accessor method is
- define what a mutator method is
- implement accessor and mutator methods for a class
- define what the toString method is used for
- implement the toString method for a class
- define what the equals method is used for
- understand the equals contract
- implement the equals method for a class
- define what the hashCode method is used for and when it must be defined
- implement the hashCode method for a class
- define what the compareTo method is used for
- understand what consistency with equals means for compareTo
- implement the compareTo method for a class
- write tests for non-static methods
- define what an immutable class is (and why they are useful)
- implement an immutable class
- define what a class invariant is (and why they are useful)
- implement methods that use parameter validation
- add documentation to a class using Javadoc
Mixing Static and Non-static Features
- implement a class that can count the number of objects created
- implement a class that stamps serial numbers on objects
Implementing Aggregation and Composition
- define aggregation
- define composition
- use and draw UML diagrams for classes that use aggregation and composition
- draw memory diagrams to illustrate the difference between aggregation and composition
- explain the differences in constructors and methods between classes that use aggregation and classes that use composition
- implement classes that use aggregation
- implement classes that use composition
- contrast aliasing, shallow copying, and deep copying
Arrays, Data Structures, Big-O
- define what an array is
- create and use arrays
- implement a List using an array
- implement a linked list
- implement a stack
- implement a queue
- understand the basic operations of linked lists
- explain why a linked list is a recursive (or self-referential) data structure
- understand the basic operations of stacks and queues
- explain what big-O notation tells us about the complexity of an algorithm
- understand the differences between O(1), O(n), O(n log n), etc.
- analyze an algorithm by counting the number of elementary operations
- prove that a function f(n) is an element of O(g(n))
Recursion
- draw a memory diagram of a recursive method
- identify base cases for a recursive algorithm
- identify recursive cases for a recursive algorithm
- implement a recursive algorithm in Java to solve a problem
- derive a proof of correctness for a recursive algorithm
- derive a proof of termination for a recursive algorithm
- solve a recurrence relation
Trees
- explain what a binary tree is
- explain why a binary tree is a recursive (or self-referential) data structure
- perform inorder, preorder, postorder, and breadth-first traversals of a binary tree
- explain what a binary search tree is
- explain how to insert a value into a binary search tree
- explain how to remove a value from a binary search tree
Inheritance
- use and draw UML diagrams for classes that use inheritance
- define what a superclass (or parent class) is
- define what a subclass (or child class) is
- state what features are inherited by subclasses
- define what the keyword extends means in Java
- define what the keyword super means in Java
- implement constructors for a subclass
- define what an overridden method is
- implement overridden methods for a subclass
- explain how preconditions, postconditions, and throws clauses behave in an inheritance hierarchy
- define what the final modifier means for methods
- define what the final modifier means for classes
- define what an abstract class is
- define what an abstract method is
- implement an abstract class
- define what an interface is in Java
- implement an interface
Graphical User Interfaces
- define what the model is in the model-view-controller (MVC) pattern
- define what the view is in the MVC pattern
- define what the controller is in the MVC pattern
- draw the UML diagram for the MVC pattern
- define what event-driven programming is
- implement a graphical user interface (GUI) using MVC