Preface Born in the ice-blue waters of the festooned Norwegian coast; amplified (by an aberration of world currents, for which marine geographers have yet to find a suitable explanation) along the much grayer range of the Californian Pacific; viewed by some as a typhoon, by some as a tsunami, and by some as a storm in a teacup a tidal wave is hitting the shores of the computing world. "Object-oriented" is the latest in term, complementing and in many cases replacing "structured" as the high-tech version of "good" . As is inevitable in such a case, the term is used by different people with different meanings; just as inevitable is the well-known three-step sequence of reactions that meets the introduction of a new methodological principle: (1) "it's trivial" ; (2) "it cannot work" ; (3) "that's how I did it all along anyway" . (The order may var y.) Let us have this clear right away, lest the reader think the author takes a half-hearted approach to his topic: I do not see the object-oriented method as a mere fad; I think it is not trivial (although I shall strive to make it as limpid as I can); I know it works; and I believe it is not only different from but even, to a certain extent, incompatible with the techniques that most people still use today including some of the principles taught in many software engineering textbooks. I further believe that object technology holds the potential for fundamental changes in the software industry, and that it is here to stay. Finally, I hope that as the reader progresses through these pages, he will share some of my excitement about this promising avenue to software analysis, design and implementation. "Avenue to software analysis, design and implementation" . To present the object-oriented method, this books resolutely takes the viewpoint of software engineering of the methods, tools and techniques for developing quality software in production environments. This is not the only possible perspective, as there has also been interest in applying object-oriented principles to such areas as exploratory programming and artificial intelligence. Although the presentation does not exclude these appli cations, they are not its main emphasis. Our principal goal in this discussion is to study how practicing software developers, in industrial as well as academic environments, can use object technology to improve (in some cases dramatically) the quality of the software they produce. Structure, reliability, epistemology and classification. Object technology is at its core the combination of four ideas: a structuring method, a reliability discipline, an epistemological principle and a classification technique. Thestructuring methodapplies to software decomposition and reuse. Software systems perform certain actions on objects of certain types; to obtain flexible and reusable systems, it is better to base their structure on the object types than on the actions. The resulting concept is a remarkably powerful and versatile mechanism called theclass,which in object-oriented software construction serves as the basis for both the modular structure and the type system. Thereliability disciplineis a radical approach to the problem of building software that does what it is supposed to do. The idea is to treat any system as a collection of components which collaborate the way successful businesses do: by adhering to contracts defining explicitly the obligations and benefits incumbent on each party. Abstract data types are discussed in chapter 6, which also addresses some of the related epistemological issues. Theepistemological principleaddresses the question of how we should describe the classes. In object technology, the objects desMeyer, Bertrand is the author of 'Object-Oriented Software Construction', published 2000 under ISBN 9780136291558 and ISBN 0136291554.