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:
- To provide a comprehensive description of the object paradigm and its applications.
- 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.
- To show how very large and complex systems can be described by a number of distinct models.
- To show how composite models can be derived from simpler base models.
- To describe a number of powerful reuse techniques.
- To describe how a systematic policy of reuse impacts on work processes and
organization.
- 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:
- 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.
- 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.
- 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.
- 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.
- 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.
- Additional Role Modeling Concepts and Notation. Presents
additional role model views that have proven to be useful in certain
circumstances.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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