To be able to discern desirable properties of a software design
To understand different notions of complexity, at both the component and system level
To be aware of some object-oriented metrics
To be aware of some widely known classical design methods
To understand the general flavor of object-oriented analysis and design methods
To be aware of a global classification scheme for design methods
To understand the role of design patterns and be able to illustrate their properties
To be aware of guidelines for the design documentation
Software design concerns the decomposition of a system into its constituent parts. A good design is the key to the successful implementation and evolution of a system. A number of guiding principles for this decomposition help to achieve quality designs. These guiding principles underlie the main design methods discussed in this chapter. Unlike more classical design fields, there is no visual link between the design representation of a software system and the ultimate product. This complicates the communication of design knowledge and raises the importance of proper design representations.
During software development, we should adhere to a planned approach. If we want to travel from point A to point B, we will (probably) consult a map first. According to some criterion, we will then plan our route. The time-loss caused by the planning activity is bound to outweigh the misery that occurs if we do not plan our trip ...