This is a book about object-oriented analysis and design for software developers. There are many such books, so why write another one? The answer is that we wish to make some specific contributions to the philosophy and practice of object-oriented software development which are significantly different from those that can be found in any of the other available books.
This is not an introductory book1. It is for software practitioners with some experience of using object-oriented languages and methods. We assume that the reader understands the basic principles of object-orientation, especially encapsulation andabstraction, classes and instances, polymorphism, and inheritance. We are aiming the book at those software developers who are perhaps a little dissatisfied with the informal interpretations of most published object-oriented analysis and design methods, and who are looking for a more fully defined treatment.
This book does not aim to set out a complete method for software development. In it we describe a range of techniques, notations, principles and procedures, and although we offer some advice on their use, we leave to the reader the matter of arranging these ideas. Indeed, we hope they will be useful to software developers using any kind of object-oriented analysis or design method, by helping them to think more clearly about what their descriptions and notations mean and when they can best be used.