This course teaches principles and practices of advanced object-oriented design and programming.
Students learn the following concepts:
Class-Level
Method design
Class design
Classes and interfaces
Subtyping and inheritance
Implementing inheritance
Design by contract
Collaboration-Level
Values vs. objects
Role objects
Type objects
Object creation
Collaboration-based design
Design patterns
Component-Level
Error handling
Meta-object protocols
Frameworks and components
Domain-driven design
API evolution