20/2/98, Amsterdam
I propose to bring out a revised 2nd edition of
my book Principles of Object-Oriented Software Development,
which appeared at the end of 1994.
This proposal is written in response to
a conversation concerning the feasibility of a 2nd edition
with Sally Mortimore and Karen Mosman, both from
Addison Wesley Longman,
wednesday the 28th of januari, 1998.
I will first discuss the motivation for
a revised 2nd edition.
Then I will mention new topics the book will cover
and how they fit in the book.
After that, I will present a brief summary of the contents of
the book, chapter by chapter, including the appendices.
I will also indicate the contents of the CDROM that will be
included with the book, as well as the functionality of the accompanying
online version, that will be available on Internet.
This proposal can be also found on Internet,
at
www.cs.vu.nl/~eliens/online/oo/announce
together with an experimental online version of the first edition.
Motivation
OO is a rapidly evolving field.
As a consequence my book, published in 1994, may
have been considered to be outdated from the start.
As an example, right after its publication,
patterns came into the focus of public interest.
As another example, think of the Java wave that has come over us.
Clearly, a revised edition is needed in which those subjects,
and other subjects, are covered, or, as in the case of CORBA,
are covered in more detail.
Another reason is that the field of OO itself
has matured considerably.
The acceptance of UML as a modeling standard is one example.
The increased utilization of CORBA
for business-critical applications is another sign that
(distributed) object technology is being considered
as sufficiently robust.
The availability of new topics in itself is not enough
to justify a 2nd edition, since
new books have been published in which these topics
are covered. Think only of the enormous number of books on Java...
A revised 2nd edition of the book is justified though, in my opinion,
since the book distinguishes itself from the competition
by its approach.
Set up as a series of lectures, organized around so-called slides,
the book covers a large number of topics, some in depth, some more casually.
From an educational point of view, the advantage of this approach is the direct
availability of educational material,
including the slides to be presented in classroom.
For the average reader, moreover,
the slides provide an overview which facilitates
comprehension and recall.
For the first edition, I have already made an experimental
online version, in which the slides
are available electronically in such a way that they
can be deployed in a classroom with a beamer.
(For those who read the online version,
click on the caption of a slide to enter presentation mode.
See also the section in which I discuss the Online version.)
As I will indicate below, when discussing the conents of the book,
the new topics fit well within this approach.
Without the new topics, however, the book must
be considered as outdated, and will hence disappear.
Finally, another more personal reason for bringing out a revised
edition is that both in research and teaching my
experience with OO became more extensive,
and I may even dare say that my own thoughts about OO have matured
to some extent.
In particular, in my group we have developed a multi-paradigm
OO framework, which was already introduced in ch. 12 of my book,
that has been applied in for example business process reengineering
and collective improvisation on the Web.
Although I do not plan to treat any of this material
extensively, it does provide a basis for the examples
and, moreover, the material
(including articles, software and examples)
will be available on the accompanying CDROM.
New topics
New topics that were not covered, or as in the case of CORBA,
not covered in sufficient detail, are:
- Java -- both as a language and application framework
- CORBA -- and competing technologies, such as COM
- patterns -- as originally introduced by the 'Gang of Four'
- UML -- the modeling standard proposed by the 'three amigos'
- Web -- as an application area for OO technology
slide: New topics
As noted before,
each of these topics would justify
a book in itself.
In my book, these topics will be introduced and explained
in such a way that the student can gain hands-on experience
with the associated technology.
But, in addition, I will discuss the interrelations between
these topics and their associated technologies,
both on a technical level and a thematic level.
Technically, I will draw from my experience
gained in developing a multi-paradigm framework.
Thematically, I will repeatedly come back to issues of
modeling, component-technology, reusability
and distribution.
In addition, I will provide some historical
context explaining the occurrence of these trends,
including the anecdotical material that has become part
of OO folklore.
(As an example, you may have noticed my use of the phrases
'Gang of Four' and 'three amigos'.)
With respect to the last topic, the Web,
I wish to add that this has been my field of interest
for the past three years.
The Web is a challenge in many respects.
From an OO perspective, it is a playground
where our notions of OO technology can be put to an ultimate
test.
It is also a battlefield where standards are of crucial
importance, and market-share even more.
As a vehicle for the dissemination of information
it allows us for example to deploy visualisation technology
that requires a multi-paradigm component-based approach.
As an application area it provides us with the challenge
to think of a development methodology
for 'fragmented applications',
that is applications constructed from
multiple, possibly geographically distributed components,
in a variety of languages (including C++, Java,
Javascript, Perl) each with their own
particular object model.
Any of the topics mentioned before is clearly of relevance
to the Web.
Even UML, as one could say that 'the Web'
at this stage is severly 'underdesigned'.
There is a need for models that capture the functionality of the Web.
UML is potentially a vehicle for creating such models.
Fortunately, the relevance
of the other topics is more directly evident.
The Audience
The book will primarily address an academic audience,
or IT professionals with an academic interest.
Nevertheless, since I am getting more and more
involved in joint research with business partners
and the development of extra-academic curricula,
I intend to include examples of more relevance
to IT in business.
In particular, I will include a section on
the deployment of (object-oriented)
simulation for business process redesign,
and a section on the 3D visualisation of business
data using object technology.
More than in the first edition,
I will strive for a small coherent set of examples.
Overview
To give an indication of the contents of the book
I have included the adapted preface of the 1st edition.
Features of this book
- It provides an introduction to object-oriented programming,
covering design, languages, and foundational issues.
It pays attention to issues such as reuse, component technology,
design patterns and in particular the application of object technology
in Web-applications.
- It contains guidelines for developing object-oriented applications.
Apart from practical examples it provides an overview of
development methods as well as an introduction to UML,
the standard for object-oriented modeling.
In particular design patterns will act as a recurrent
theme, or rather as a perspective from which examples
and solutions will be discussed.
- Distributed object technology will be a major theme.
The book provides an introduction to CORBA that allows the student to
gain hands-on experience with developing CORBA applications.
It also provides a discussion of competing technologies,
and in particular it will elucidate the distinction between
component-technology and distributed objects.
Examples in Java and C++ will be included.
-
Another major theme of the book is to establish precisely
the relation between
the guidelines and prescriptions emerging from
software engineering practice
on the one hand, and
the constraints and insights originating theoretical research.
In the book attention will be paid both to foundational issues
as well as the pragmatical solutions the designers of object-oriented
languages have chosen to realize their ideas.
- Many of the notions introduced and problems discussed are clarified
by short programs, mostly in Java some in C++.
The examples cover GUI development,
business process reengineering, Netscape browser plugins
and Web applications.
No extensive knowledge
of the programming languages used is required since a brief tutorial
on a number of object-oriented programming languages, including C++,
Smalltalk, Eiffel and Java, is given in the appendix.
- The material is organized around slides.
The slides occur in the text in reduced format, but are also available
for use on an overhead projector.
Each slide captures some important notion or concept
which is explained and commented upon in the accompanying text.
An Instructor's Guide is available that provides hints
for presenting the slides
and answers to the questions posed at the end of each chapter.
-
The entire book, including the software from the examples and
the Instructor's Guide is available electronically,
on the accompanying CDROM as well as on the Internet.
The electronic version contains links to other material on
the Internet. The electronic version may be accessed
also in slide mode that allows for
presenting the material in a classroom equipped with
a beamer,
Intended readers
This book may be used as the primary text for a course on OOP
or independently as study or reference material.
It may be used by the following categories of readers:
- students -- as a textbook or as supplementary reading
for research or project papers.
- software engineers -- as (another) text on object-oriented programming.
- professional teachers -- as ready-made material for a course
on object-oriented programming.
Naturally, this is not meant to exclude other readers.
For instance, researchers may find the book useful
for its treatment of foundational issues.
Programmers may benefit from the hints and example programs in Java
and C++.
Another reason for using this book may be its compact representation
of already familiar material and the references to other (often research) literature.
The book is meant to be self-contained.
As prior knowledge, however, a general background in computer science
(that is, computer languages and data structures as a minimum)
is required.
Organization
The book is divided into
four parts.
Each part presents the issues involved in
object-oriented programming from a different
perspective, which may be characterized respectively
as software engineering and design,
languages and system development,
abstract data types and polymorphism,
and applications and frameworks.
Part I: Designing Object-Oriented Systems
1. Introduction:
This chapter gives an introduction to the area
of object-oriented software development.
It gives a global view on the object-oriented
life cycle and discusses object-orientation as a
paradigm of programming.
It discusses a number the trends and technologies that
have come into the focus of public attention
and indicates their relevance to 'object-orientation'.
It further presents an overview of the material covered
with reference to the literature used and
suggestions for further reading.
2. Idioms and Patterns*:
This chapter introduces idioms and
design patterns
as means to capture recurrent structures and solutions
in object-oriented programming.
It will distinguish between idioms as solutions
tied to a particular language and patterns which are
the product of rational design.
As an example,
a canonical approach to
developing concrete data types in C++
is presented.
3. Object-oriented design:
This chapter discusses the process of software
development and the various modeling perspectives
involved in analysis and design.
Included is a brief tutorial on the use of UML.
It further explains the issues involved in arriving
at a proper object model and
introduces the notion of contract as an instrument
to capture the relationships between object classes.
4. Developing an application*:
In this chapter we will develop a complete application
and discuss all the issues involved in it's
design and realization.
Included will be a description of the hush framework
that has been used to realize this application.
Part II: Object-Oriented Languages and Systems
5. Object-oriented languages:
This chapter provides a comparison between
object-oriented languages,
including Smalltalk,
Eiffel, C++ and Java.
It will further discuss a number of alternative
languages, included Perl, Self and Javascript,
each with their own object model,
and will treat issues such as dynamic inheritance by delegation.
and meta-level architectures for class-based languages.
6. Distributed Object Technology*:
This chapter gives a detailed introduction to CORBA,
including a number of simple examples.
It will discuss the relation
between component-technology and distributed object technology,
and will give a brief overview of the solutions
that are available on the market,
including Microsoft COM/ActiveX, JavaBeans, Java RMI
and (CORBA) OpenDoc.
7. Software Architectures*:
In this chapter we will explore how software
architecture affects design and implementation.
It will treat design patterns for distributed
object systems.
We will also discuss the requirements for heterogeneous
systems and, finally, we will
look at the technical issues involved in developing
multi-lingual systems.
As an example it will be shown how to employ
the native interface to embed an existing
framework in Java.
Part III: Foundations of Object-Oriented Modeling
8. Abstract data types:
This chapter considers the notion of abstract data types
from the perspective of types as constraints.
It presents an algebraic approach in which objects
may be characterized as algebras.
Further, it explains the difference between
the classical approach of realizing abstract data types
in procedural languages and the realization of abstract
data types in object-oriented languages.
The implications
of a more pragmatic conception of types
is also discussed.
9. Polymorphism:
This chapter discusses inheritance from a
declarative perspective,
and gives a precise characterization of
the subtype relation.
It further discusses the various flavors
of polymorphism and presents a type theoretical
treatment of genericity and overloading.
Also, type calculi that capture
data hiding and self-reference are given.
These insights will be related to the realization of polymorphism
in Eiffel, C++ and Java.
10. Behavioral refinement:
This chapter extends the notion of types
as constraints to include behavioral properties.
It presents an assertion logic for the verification
of programs and discusses the operational
model underlying the verification of object behavior
based on traces.
It further gives precise guidelines to
determine whether classes that are syntactical subtypes
satisfy the behavioral refinement relation.
Finally, an overview is given of formal approaches
to characterize the behavior of collections of objects.
Part IV: Object-Oriented Application Frameworks
11. Business Process Redesign*:
In this chapter we look at the opportunities IT offers
in (re)designing business processes.
In particular, we will look at (object-oriented)
simulation as a means to capture the logistical
aspects involved in business process modeling,
and in addition we will look at how simulation
models can be made available as to allow decision making,
by deploying visualisation and dissemination over the Web.
12. Web-based applications*:
In this chapter we will look at how object technology
may be applied to the Web.
We will look both at client-side extensions
and server-side solutions.
In particular, we will look at systems that employ
CORBA in addition to other Web-technologies.
We will also briefly look at another new trend in computing,
intelligent, mobile agents, and we will argue that agents
are a direct derivation from object-technology.
Appendices
The appendix will contain brief tutorials on Smalltalk, Eiffel,
C++, Java and the distributed logic programming language DLP.
It will also present an overview of UML, a tutorial
on programming CORBA applications with Orbix,
and sugestions for small and medium term projects.
Discussion
The adapted preface and contents overview clearly indicates
the changes wrt to the first edition.
For clarity I have marked the chapters that will
be substantially changed with an asteriks.
Adding new topics is one thing,
eliminating parts of the book, naturally, is quite another thing.
Yet, I have chosen to remove the chapters on C++ (previously ch. 2),
software engineering issues (ch. 4),
concurrency in C++ (ch 6),
composition (ch 7), software libraries (ch. 11) and hypermedia (ch 12).
Some of this material, for example parts of the hypermedia
chapter (12) and software engineering issues (4),
will reappear elsewhere.
Nevertheless, since some of this material is obsolete,
and other material does not function well in classroom,
it is better to remove it, and allow its space to be taken
by other topics.
As concerns the amount of pages, I definitely do not want
to exceed the current number of pages (513),
rather I would like to cut it back to, say, 450.
I have thought about eliminating or reducing part III,
which deals with foundational issues of OO.
Parts of it could, for example,
be replaced by material on (OO) simulation
or examples of programming games.
That would mean that I would, proportionally, pay
more attention to my own work.
Suggestions and comments of the reviewers that
would help me in making a choice
are welcome!
Overall I do consider the contents of the book balanced,
in the sense that it treats both theoretical and technological issues.
The phrase 'Principles' in the title is still justified,
since despite the fact that technology is treated
rather extensively, ultimately the focus is on 'abstractions',
in the form of language constructs, interfaces,
composition mechanisms, patterns and transparent distribution.
The online version
The first edition paper version was in itself a rich source
of references to the literature and, even then, also
documentation and software on the Internet.
Nowadays, paper does no longer suffice.
Furthermore, in my own experience,
the existence of online material does not prevent me from
buying a book.
As I understand, publishers are also becoming aware
of the advantages of bringing out an online version.
It is my intention to put the full contents of the book on the Web,
and to bring out a CDROM that contains the complete book,
the accompanying Instructor's Guide, as well as the software on which
the examples are based.
Possibly other software might be included as well.
(Apart fromm Netscape, one may think for example of OrbixWeb,
VOyager, the Java JDK, the Standard Template Library, and more ...)
Technically, the creation of an online version
should not be a problem.
The software needed for this has already been developed
as part of my research project at the Vrije Universiteit,
An experimental online version of the first version of my book
can be found at
www.cs.vu.nl/~eliens/online/oo
The reviewers are invited to look at this version and send
me their comments at eliens@cs.vu.nl
The online version is organized in parts and chapters, like the paper version.
From any place in the book any other part of chapter is only one or two
jumps away.
There are two mode, show modea, which allows for
ordinary reading and browsing,
and presentation mode
that may be used to present the material in classroom.
Currently, show mode is only available when using Netscape.
In show mode, the arrows on the right may be used to access
the material linearly.
Presentation mode can be entered either by clicking
on the caption of a slide, which results in a slide being displayed in
presentation mode,
or via the Instructor's Guide, which is reached by clicking
on the title of a chapter or section.
From there it takes another click on the moving icon to enter presentation mode,
from which the sequence of slides belonging to that chapter
or sequence can be presented.
As you will see, I have a strong preference for an 'implicit'
interface, meaning that there are no redundant indications such as
"Click here to enter presentation mode."
Although it may take some time to get used to,
the average reader will no doubt soon know what to do.
The online version consists primarily of static HTML pages,
so that the book may be read directly from CDROM with Netscape.
The slide mode makes use of dynamic HTML and is based on the Netscape developers
presentation package.
(Since many presenters use PowerPoint, I might consider
to provide a PowerPoint version of the slides as well. Comments?)
For some selected parts, I might use some more advanced technology,
for example plugins to display multimeda.
A disadvantage is that it is hard to do this in a platform-independent
way.
However, provided that the software is included,
the book could then still be read from
CDROM.
Concluding remarks
Despite the amount of work involved,
I think it is worthwhile to make the effort
to revise the book, so that it can make its entrance into the next century.
The revision includes an update with respect to the topics mentioned,
as well as creating an online version
with (hopefully) 'live' references.
With the occurrence of the electronic classroom,
ranging from the virtual networked classroom to the
plain old classroom with a beamer,
the book may prove its worth as a directly accessible source of material.
Time schedule
Next fall, 1998, I will have my next OO course.
Until then the online material will not have been class-tested.
Many of the topics mentioned, however, have already
been presented in my previous courses,
including the material on CORBA and patterns.
Obviously, there is a need to class-test the online version,
so I think it is best to aim at june '99 for a first version
of the manuscript.