Preface

GOALS

The main theme of this book is to describe complex phenomena as structures of interacting objects. Object technology is applicable to a wide range of phenomena on many different levels. Examples are work procedures on the enterprise level, large scale applications on the systems level, and small, technical details on the program design level.

The goals of this book are:

  1. To provide a comprehensive description of the object paradigm and its applications.
  2. To show how it supports a number of different views on the same model, permitting the analyst to work with a data-centered approach, a process-centered approach, or a combination of the two.
  3. To show how very large and complex systems can be described by a number of distinct models.
  4. To show how composite models can be derived from simpler base models.
  5. To describe a number of powerful reuse techniques.
  6. To describe how a systematic policy of reuse impacts on work processes and organization.
  7. To show how very large systems can be described and managed in a decentralized manner.

MOTIVATION

A number of important books on object-oriented analysis and design have been published in recent years [Cox 87, Wirfs-Brock 90, Booch 94, Rumbaugh 91, and Jacobson 92]. All of these methodologies are based on the object as the common building block and on the class as a common abstraction on the objects.

There is a widespread feeling that existing methodologies could profitably be merged into a single one, and that the concepts and notation of the composite methodology could be standardized. We feel that such standardization will be premature. Objects and classes represent two different levels of abstraction; each is suited to the expression of certain properties. Static properties and relations are best expressed in terms of classes. Examples are attributes and relations, most notably for expressing the inheritance relation. Dynamic properties are best expressed in terms of objects. Examples are message interactions (scenanos), use cases, and dataflows.

The class/object duality is as essential to object-oriented programming as it is disruptive to object-oriented modeling. A future modeling standard should be built on a unified conceptual framework with sufficient expressive power to describe all interesting aspects of an object system within a single, integrated model.

One candidate is the OOram (Object Oriented Role Analysis and Modeling) role model. This conceptual framework combines the expressiveness of the object and the class. All information that can be expressed in a class-based model can he expressed in a role model. All information that can be expressed in an object-based model can be be expressed in the same role model. Furthermore, there is a synergy effect from merging the class and object properties into the same model. The result is increased leverage for the decomposition of large systems and for the systematic reuse of proven components.

The essence of the object-oriented paradigm is the modeling of interesting phenomena as a structure of interacting objects. The architecture of a home can be represented as a structure of room objects interconnected by doors and hallways. A model which says that one room may be adjacent to another room is insufficient. We need to be able to say that the dining room should be adjacent to the kitchen, and that the Children playroom should be far away from the master bedroom.

In an OOram role model, patterns of interacting objects are abstracted into a corresponding pattern of interacting roles. In our simple example, one object will play the role of dining room, another the role of kitchen, etc. The roles are inter-connected to represent the layout of the home. Corresponding objects will belong to the same class if they have the same properties; they will belong to different classes if they have different properties. The role model abstraction belongs to the realm of modeling. The class abstraction belongs to the realm of implementation.

An object can play several roles. This permits a systematic separation of concerns by describing phenomena using different role models. And conversely, it permits the synthesis of a derived model by letting its objects play several roles from different role models.

This book is about the added leverage provided by role modeling, compared to the conventional class modeling. The nature of this leverage is described under the heading of Goals above. The added leverage motivates our introduction of a 6 new and precisely defined set of concepts and a new notation - it motivates this book.

AUDIENCE

We assume that you are familiar with how computers and computer programming influence modern information processing, but we do not assume familiarity with a particular programming language or operating system. Most of the book is written for the manager or business person who is searching for new and better ways to produce software, for the consultant who wants to use objects to design new business organizations, and for the system creator who wants to understand how to exploit the full power of object onentation. A fesv sections are clearly marked as being directed at the expert computer programmer.

THE STRUCTURE OF THIS BOOK

This book is written to be read in sequence, but we suggest you skip sections which look uninteresting on your first reading. It is Organized into twelve chapters as follows:

  1. The Main Ideas. An overview of the OOram approach to industrial-strength software production, object orientation, and modeling. It should help you to recognize what objects can do for you and help you to set your goals. If you have some prior knowledge of the subject, you will see that the OOram ideas differ from earlier methods in important ways, and that these differences give the OOram method unique leverage for analysis, design, and reuse. If this is your first encounter with objects, you may want to skip certain parts on a first reading. Chapter 2 and other chapters offer a more gradual introduction to the same material.
  2. Role Modeling. How to create object-oriented models of interesting phenomena. This chapter should help you create your first models and establish your work processes for analysis and design.
  3. Role Model Synthesis. How to create derived models from simpler ones. Read this chapter to understand how you can divide your problem space and still conquer the whole. If your systems are large scale, this chapter should help you tackle them.
  4. Bridge to Implementation. How to specify objects for implementation in different languages, how to implement specifications, how to check an implementation against its specifications, and how to analyze an existing implementation to create one or more role models describing it. This chapter ties the concepts of the OOram technology to the concepts of two popular programming languages, Smalltalk and C++. This may be the chapter which makes the OOram technology real to you if you are a programmer. If you are not, you may safely ignore the whole chapter.
  5. Creating Reusable Components. How to create reusable components by exploiting the object inhentance properties. You cannot reuse something before you have used it. There is no snake oil that will magically give you the benefits of reuse, but we present guidelines that will help the serious practitioner gradually build a library of reusable components. Once you master the technology of synthesis, you can search for reusable components which transform your large and complex projects into small and manageable ones.
  6. Additional Role Modeling Concepts and Notation. Presents additional role model views that have proven to be useful in certain circumstances.
  7. Case Study: Development of a Business Information System. Stresses the work processes and the relationships between three important models: a model of the system environment, an information model, and a task tool/service model.
  8. Case Study: The Analysis and Design of a Real Time System. Stresses embedded systems, with their behavioral aspects described using Finite State Machines. This study exemplifies a number of different approaches to the implementation.
  9. Case Study: The Creation of a Framework. Describes the creation of a fairly large framework supporting reuse. This study describes all of the stages in the creation of the framework, including reverse engineering of existing systems and forward engineering of the new framework.
  10. Organizing for Software Productivity. Describes how to design a work organization in the form of a value chain, and how to select appropriate technology for the different layers. This chapter indicates the structure of a future software industry, and is written for readers who are serious about the large scale provision of customized software. It offers the greatest challenges and promises the biggest rewards. It advises you to reconsider your whole software business, to look for repeating questions which can exploit reusable answers, and to move from a job shop organization to an industrial one.
  11. Advanced Reuse Based on Object Instances. For the specially interested reader. We describe how you can compose a system from a pool of predefined objects. This technology is an extension of the OOram role modeling technology that is the basis of the first part of this book. It is not as mature, but it can become an important supplement to OOram role modeling technologies.
  12. Case Study: Intelligent Network Services Organized in a Value Chain. Exemplifies a complete software industry. This chapter specifies a value chain, with the actors and appropriate technology for each layer. This study shows how all the different reuse technologies have a place in a complete value chain.

USING THIS BOOK

This book describes the principles behind an industrial approach to software production. We claim that the technological basis of industrial software production should be object orientation. A large part of this book is devoted to explaining all the things you can do with objects; we will also match the operations on objects to the needs of typical value chains for software production.

No viable industry was ever established on an ad hoc basis. Object orientation and industrial production of software are not some kind of magic that will produce immediate results in your next software project. You must identify your potential customers, and fully understand their current and future needs. You must identify the complete value chain, and carefully consider your place in that chain. You must devise optimal technologies and production facilities for every step in the chain. You must establish the required infrastructure for supporting the process, and staff the production facilities with people trained for their tasks. This book can help you to get started, but only your own long term dedication and investment in time and resources can lead you to the goal.

The software industry is still in its infancy, and it will take many years to establish an effective industrial infrastructure. We therefore recommend a gradual transition from the miserable present to the glorious future. The winners will be companies with a clear vision, an effective strategy, and the stamina needed to transform their operations from the general job shop to the industrial enterprise.

Figure P.1 illustrates our recommended progression through objects and the OOram method. We have indicated that the first step should be to implement systems using objects. If you are a programmer, this means that you should start by writing small, object-oriented programs. If you are a developer of enterprise processes, you should create some simple processes in object-onented terms. This first step is shown dashed because object-oriented programming is not the focus of this book. The remaining steps indicate our recommended progression into the rich world of objects.

It is our hope that this book will encourage widespread adoption of the OOram method. Taskon markets OOram processes, tools, and consultancy services for a number of application areas. We invite consultants to build special methodologies based on our products; we invite other vendors to create competing products; we invite potential competitors to cooperate with us to ensure interoperability between products to the benefit of all.

BACKGROUND

This book is based on continuous experience with objects since 1975, and practical experience in the borderland between software engineering research and the production of software for computer-aided design, production control, management information systems, and telecommunications since 1960. In all our work, the goal has been to create industrial-strength software for real users. The software engineering methodologies and tools have been created in response to our own needs and to the needs of our partners, and the success criterion has been that they enabled us to support our clients more effectively.

Our experience has clearly shown that object orientation is a powerful paradigm which is applicable to a wide range of problem areas. We have used it to design improved organizations in oil companies; to describe basic, reusable services in a distributed environment; to design client-server systems; and to specify and implement business information systems.

Our most exciting experiences are with systematic reuse and an industrial approach to software production. This enables us to produce large systems in small projects, which we believe is the key to the effective production of quality software.

Our accumulated experience also leads to a negative conclusion: there is no silver bullet that will miraculously solve all problems. The work process, the organization, and the technology have to be adapted to the problem at hand and to the people who are to solve it. We do therefore not have the audacity to present a complete methodology which will solve all problems. Rather, we present a foundation which can support many methodologies for different purposes, which we call it the OOram method.

TRYGVE REENSKAUG