Level 3: Division into Classes

The division of subsystems into classes is typically needed on any project that takes longer than a few days.

Classes vs. Objects: A key concept in object-oriented design is the differentiation between objects and classes.
An object is the dynamic thing with specific values and attributes you see when you run the program.

Level 4: Division into Routines

The act of fully defining the class’s routines often results in a better understanding of the class’s interface.

Level 5: Internal Routine Design

writing pseudocode, looking up algorithms in reference books, deciding how to organize the paragraphs of code in a routine, and writing programming-language code.

This level of design is always done, though sometimes it’s done unconsciously and poorly rather than consciously and well.