|< Free Open Study >|
This text is the product of a large number of innovative people who, knowingly or unknowingly, contributed to my study of design heuristics and patterns. I wish to give my first thanks to Dr. Lee McKnight of AT&T Bell Laboratories, who began my journey down this path, and Dr. Karl Lieberherr, who later instructed, pushed, shoved, dragged, and otherwise navigated me through the object-oriented paradigm. Without these two individuals, this book would never have been started, let alone finished.
I wish to acknowledge Brian Foote and Ralph Johnson, who refined my thoughts on design heuristics in their paper, "Designing Reusable Classes," Journal of Object-Oriented Programming 1, no. 2 (1988). Five of the heuristics in this text were collected from this paper. The work of Frederick Brooks serves as a basis for much of Chapter 1's discussion on accidental versus essential complexity. Brooks continues to author some of the best literature in the field of software development.
I thank several classes of students at Northeastern University (1986?987) for suffering through the meal example in lectures immediately before lunch. Their work on object-oriented design projects at a time before there were any formal methodologies proved invaluable to this text as well as to my own understanding of the object-oriented paradigm. My thanks to John Carter and John Cooper, with whom I worked on a C++ class library in 1987?989. Their collaboration produced the discussion on reuse problems in the presence of inheritance (Section 5.10) and minimal public interfaces for reusable components (Section 9.5). In addition, John Carter is responsible for the wooden door example in Section 6.3.
I thank Cathryn Szekely, David Bardolini, and a lively group of C++ students at Chipcomm for motivating the "dogs and their tails" discussion in Section 5.17. Craig Hilsenrath and Tom Connors of Greenwich Capital Markets were the inspiration for the securities example in Section 5.16桰 thank them for showing me how nasty the domain of securities can get. My thanks to several employees at Bell Northern Research who motivated numerous examples related to the domain of telephony. In particular, Todd Hansen and Gordon Grimes, for an interesting discussion concerning the trade-offs between data-driven and behavior-driven analysis and design. This discussion is presented in Chapter 11 of this text. The airplane example in Section 6.2 was taken from a very early work of Weiner and Pinson. Much thanks to Paul Sadlek and his group at Santa Clara Plastics, from whom the discussion on the relationship between uses and containment was initially derived (Section 4.10).
I wish to thank an employee of Bankers Trust who motivated heuristic 9.1 in a public seminar I gave in 1991; my apologies that I couldn't find your name in any of my records and properly acknowledge you. Likewise for the individual who discussed the Fortran waveform engine wrapper in a panel discussion at a conference in 1987 (Section 9.2). Thanks to Paul Hidy and group at Network Equipment Technologies. Some of your early work in this field contributed to the discussion in Section 9.2 on moving objects from one machine to another. I hope you are glad to see your early problems were indeed large, relevant problems. CORBA and its kin are still wrestling with your problem. My thanks to John Zak, Bruce Hyre, and many others at Traveler's Insurance who motivated the example in Section 9.2 on wrappers for PC/Unix clients to mainframe servers.
Special thanks to Bobbi Heath, James McQueston, and Michael Wissner of Avid Technologies for the media case study in Section 3.7. Gene Thomas and his group at BNR were the inspiration for the telephony example in Section 4.9. Thanks for all of the questions on containment that helped me refine my ideas in this area. More thanks to Craig Hilsenrath for the economy case study in the same section. Special thanks to Jenaline Low, Monica Tan, Stuart Woodward, and my other Singaporean friends, for interesting design discussions and my first durian.
Chapter 10, discussing the relationship between heuristics and patterns, was motivated by several discussions I had with other speakers at a conference in Germany (Devcon '94), including Kent Beck, James Coplien, Jon Hopkins, Meiler-Page Jones, and Larry Constantine. Thanks for the insight!
I wish to thank the reviewers of this text who pointed out many issues in its earlier drafts. They include Kent Beck, Tim Born, Karen Ellison, Gordan Grimes, Todd Hansen, Howard Harkness, Craig Hilsenrath, Doug Lea, Robert Martin, and Keven McGrath. I wish to acknowledge particularly thorough jobs by Robert Martin (on an earlier draft and the final manuscript) and Donald Firesmith (on an intermediate draft). Their constructive criticism undoubtedly made this a much better book. On the publishing side, I wish to thank Kate Habib and Kim Dawley, who convinced me at OOPSLA '93 to write this book, and my editors, John Wait and Mike Hendrickson, for their help in getting this book published and their patience in getting their hands on the manuscript.
I wish to thank those who have supported my research over the years, including Paul Kalaghan, Sheila Scott, Beth McFadden, Paul Hidy, Kelly Hart, Tim Korson, Edward Bernardon, John Macgregor, and Robert Scarlatelli.
A very special thank you to my office manager, Tina Young, who is constantly sweeping up the problems that inevitably drop on the floor and organizes such trivial things in life as schedules, budgets, and taxes. This work would not have been possible without her.
Thanks to Robert Flory, with whom I worked on the process control project at Draper Laboratories (sec. 5.20).
Last, but by no means least, I wish to acknowledge the thousands of students at Northeastern University, and companies too numerous to name here, who have participated in discussions and debate concerning object-oriented analysis and design in my courses on C++ and OOA/D from 1985 to the present. Many of your comments and insights have been incorporated into this text.
|< Free Open Study >|