CS 2102 (B12): Object-Oriented Design Concepts
Learning Objectives and Outcomes
Home |
Staff and Office Hours |
Lectures and Assignments |
MyWPI |
Policies
This course is designed to help you learn how to:
- Develop clean, maintainable, flexible Java code
- Test programs effectively
- Choose appropriate data structures for problems
Concretely, the following learning objectives capture these goals
through a combination of factual information, basic skills, and
conceptual abilities. Throughout the course, we will grade you on
your progress towards these detailed objectives. Your course grade
will be based on how well you meet these objectives, with heavier
weigh on the abilities than on the factual knowledge. Details will be
discussed in class.
We do not expect you to know all the terms in these objectives at
the start of the course.
Factual Knowledge
Demonstrated through stating definitions, giving examples, and using constructs properly in practice
- What are interfaces used for
- Definitions of data structures for sets
- Standard Java terminology (access modifiers, abstract, static)
- Java abstraction mechanisms (abstract classes, generics)
- What is a hash table
- What is a graph
- What is encapsulation
- When is mutation necessary
Skills (basic competencies)
Demonstrated through writing programs and their associated artifacts
- Define classes and interfaces
- Define correct methods
- Define generic classes
- Work with collection classes
- Pass methods as arguments
- Write a Visitor
- Throw/catch exceptions
- Memoize a function
- Write Junit tests
- Create cyclic data
- Traverse a graph (visit all nodes and terminate)
Conceptual Abilities
Demonstrated in decisions reflected in designs/tests/code and explanations/justifications of these decisions
- Create class hierarchy for a problem
- Encapsulate data
- Protect data from access/modification
- Choose an appropriate data structure
- Use mutation appropriately
- Abstract over shared data
- Abstract over shared functions
- Use generics appropriately
- Produce clean code
- Write comprehensive test suites
- Test programs with multiple correct answers
- Test programs that use mutation
- Argue that a program fully traverses a data structure
- Argue that a program will terminate