Course Outline
Introduction
What is Object-Oriented Design?
What is an object?
Encapsulation
Structured v.s. Object-Oriented Design
Benefits of Object-Oriented Design
Managing Dependencies
Interfaces and Polymorphism
Design Principles
Popular Object-Oriented Design Methods
UML
The Motivation for Object-Oriented Design
Typical project demands
Complexity and Failure
Productivity Impact
Coupling and Change
Barriers to Components
Managing Dependencies
Recapturing Productivity
Industry Hype
Reuse
Costs of Object-Oriented Design
Object-Oriented Design is hard
Learning Curve
Initial Project Impact
Source Code Impact
Tools
Alternatives
How to Get Started
Skill development
Initial Projects
Accelerating the Learning
Curve
Tools
Improving Existing Use of Object-Oriented Design
Why projects fail?
What to do with unsuccessful projects
Do I need an architect?
Agile Methods and Processes
Waterfall vs. Iterative Design
Data-driven management
Extreme Programming
Agile Software Development
Test Driven Development
Addressing the motivations
Summary