Rationale

This chapter presents an overview of the issues involved in the design of object-oriented software. Attention is paid to the process of design, the problem of identifying an object and the formalization of the design in contracts. This chapter stresses the importance of modeling and the need to express the characteristics of the objects that participate in the model in a behavioral contract, specifying the restrictions and obligations of the object and its clients. Some classical examples are used to illustrate these notions. The approach taken in this chapter may be characterized as eclectic, in that various methods are referred to when illustrating design issues without commitment to a particular method or approach.

Hints

In presenting the material to students, I prefer to maintain a certain distance from the particularities of the individual methods. To compensate for this apparent lack of commitment, I invite students to make the method of their choice the subject of their paper project.

Further reading

For further study, I recommend  [Booch94],  [WWW90] and  [Rum91]. Also worthwhile are  [Henderson93] and  [Champeaux93]. Additional literature is mentioned in section methods. An overview and comparative study of design representation methods is given in  [Webster].

Project assignments

The material contained in this chapter suggests various project assignments, including Further, you may select any of problems mentioned as programming projects in appendix app-program as

Comments

In my view, design may be characterized as the effort leading to a rational description and justification of the architectural structure of a software system. Whether design precedes implementation or the other way around is irrelevant from this point of view. Nevertheless, some heuristics are discussed that may be used to arrive at a proper object model.