Offers basic design principles, and a specific design process, that can be applied to any software programming effort, even those not using object-oriented programming languages or environments. Provides a model for the design process--responsibility-driven design--and tools, such as the hierarchy graph and the collaboration graph. Includes examples and exercises.