the other hand, it is clear that the structured design methods are not nearly as good as object-oriented design methods. Consequently, this book is method neutral, but strongly emphasizes object-oriented notations, heuristics, and models.
Most of the notations used in this book are UML notations, but some other important notations are included as well.
The heuristics discussed in this book are either notation heuristics or design task heuristics. A design task is a small job done in the design process, such as choosing classes or operations, or checking whether a model is complete. Notation and task heuristics are discussed throughout the book when notations and design tasks are introduced.
Section
Summary ▪ A software design method is an orderly procedure for generating a precise and complete software design solution that meets client needs and constraints.
▪ A design method typically specifies a design process, design notations, and design heuristics.
▪ The first design method was stepwise refinement, a top-down technique for decomposing procedures into simpler procedures until programming-level operations are reached.
▪ The dominant design methods from the mid-1970s through the early 1990s were various versions of structured design.
▪ Structured design methods focus on procedural composition but include other sorts of models as well.
▪ Object-oriented design methods emerged in the 1990s in response to shortcomings of structured design methods.
▪ Object-oriented methods promote thinking about programs as collections of collaborating objects rather than in terms of procedural decomposition.
Review
Quiz 1.4 1. Distinguish design methods, design processes, design notations, design heuristics, and design techniques.
2. For each decade from the 1960s through the 1990s, indicate the dominant design method of the time.
3. What is the essential difference between structured design methods and object-oriented design methods?
Chapter 1 Further Reading
Section 1.1 Other introductions to software design include books by Budgen [1994], Braude [2004], Larman [2005], and Stevens [1991]. An interesting book about problem solving is [Polya 1971]. The data about mechanical engineering design problems is from [Ullman 1992].
Section 1.2 [Hauffe 1996] is a short history and [Heskett 2002] a short introduction to the professional field of design. [Ertas and Jones 1996] provide an in-depth study of the engineering design process.
Readers interested in more detailed discussions of software product design are advised to consult the rich literature in this area. Armitage [2003] discusses product design for digital products and shows how design sub-disciplines fit.
Extended discussions of material relevant to product design are found in [Nielsen 1994], [Norman 1990], [Preece et al. 1994], [Preece et al. 2002], [Schneiderman 1997], [Tufte 1983], [Williams 1994], [Williams 2000], and [Winograd 1996].
Section 1.3 The software life cycle is covered in depth in most software engineering textbooks, including [Pressman 2001] and [Sommerville 2000]. The Rational Unified Process is presented in [Jacobson et al. 1999]. Davis [1993] gives a more detailed example to illustrate the inadequacy of the “what” vs. “how” distinction.
Section 1.4 Budgen [1994] discusses methods as specifications of processes, notations, and heuristics. Stepwise refinement is introduced in [Wirth 1971]. Structured design is introduced in [Stevens et al. 1974] and elaborated in [Meyers 1978], [Orr 1977], and [Yourdon and Constantine 1979]. The best recent reference for structured analysis is [Yourdon 1989].
Seminal object-oriented design methods are documented in [Meyer 1988], [Shlaer and Mellor 1988], [Booch 1991], [Coad and Yourdon 1991], [Rumbaugh et al.
1991], and [Coleman et al. 1994]. UML is presented in [Booch et al. 2005] and [Rumbaugh et al. 2004].
Chapter 1 Exercises
The following problems are used in the exercises below.
Chicken Coop You have 60 feet of chain link fence that you want to use to enclose a patch of your five-acre yard around a chicken coop housing your prize chickens. You want to enclose as much area as possible around the coop to give the chickens lots of room. Design an enclosure for the chickens.
Sheep and
Wolves Sheila the shepherd is conveying two sheep and a wolf across a river. Her boat will hold only herself and one animal. The wolf cannot be left alone with a sheep. How can Sheila get herself and the animals over the river?
Section 1.1 1. Go inside and face away from any windows. Can you name something within sight (besides yourself) that has not been designed by a human being?
2. Designs embody solutions to problems. Pick two competing brands of some consumer product and state the design problem that these products solve.
3. Give an example of how a good or bad product design directly affected your life for better or worse.
4. Give an example of how a good or bad software product design directly affected your life for better or worse.
5. In solving the Chicken Coop and Sheep and Wolves problems above, which details of the problem did you ignore and which did you not ignore?
6. What main solution alternatives did you consider in solving the Chicken Coop and Sheep and Wolves problems?
7. What models did you use in solving the Chicken Coop and Sheep and Wolves problems?
8. What are your solutions to the Chicken Coop and Sheep and Wolves problems?
9. [Booch et al. 1999] defines a model as “a simplification of reality”.
Analyze this definition in light of the discussion of models in this chapter.
Section 1.2 10. Classify each of the following tasks as a software product design activity, a software engineering design activity, or possibly both, depending on the circumstances:
(a) Determining the layout of buttons, labels, text boxes, and so forth in a window
(b) Brainstorming the classes in an application (c) Choosing colors for a window
(d) Wording error messages
(e) Deciding whether a product should have a client-server architecture (f) Deciding whether a program should be a stand-alone application or a Web service
(g) Choosing the data structure for a list
(h) Determining the reliability that a product should have (i) Determining the sequence of processing in a program
(j) Specifying the states that a program may be in, and how it changes state in response to inputs
11. Give a specific example of a program where the major design challenge is product design rather than engineering design.
12. Give a specific example of a program where the major design challenge is engineering design rather than product design.
13. Give a specific example of a program where both the product design and engineering design are challenging.
Section 1.3 14. Consider the following statement of the “what” versus “how”
distinction: A requirements specification states what the clients need and desire, while a design states how the program will satisfy these needs and desires. Does this statement of the “what” versus “how”
distinction escape the criticisms made in the text? Explain why or why not.
15. Can you tell by looking at a single specification statement in isolation whether it is a requirement or (engineering) design specification? How, or why not?
16. Make a diagram showing the inputs and outputs of each activity of the software life cycle.
Section 1.4 17. Give an example of a heuristic.
18. Given an example of a notation.
19. Apply stepwise refinement to create a program to read a text file and print a report of the number of characters, words, and lines in the file.
State your steps in English.
20. Find the error: What is wrong with the following statement? Structured design is a top-down method for decomposing complex functions into simpler functions that was developed to help design and implement operations in classes.
Team Project 21. Form a team of at least three. Consider the things you have to think about and the decisions you have to make when writing a program, and come up with notations that can help you do this job. In other words, think up your own software design notations. Develop at least one notation for making static models and one for dynamic models.
Research
Projects 22. Consult works about problem solving and make a list of problem-solving techniques applicable in software design.
23. Consulting whatever resources you need, define and write a short description of each of the following terms used in the object-oriented programming paradigm. The remainder of the book assumes that you are familiar with these terms:
(a) Class and object
(b) Attribute, operation, and method (c) Constructor and finalizer
(d) Single and multiple inheritance (e) Polymorphism
(f) Overriding methods
(g) Abstract and concrete classes and methods