On the notion of object
Before our comparative study of
object-oriented programming languages,
we may well reflect on some issues of language
design (specifically the motivations underlying
the development of a programming language)
and in particular on the notion of object
underlying our conception of object oriented programming
languages.
Language design is an intricate issue.
The motivation to develop a programming language
may come from the desire for experimentation
(as it has been for the author, _Eliens92),
from governmental policy (in the case of Ada),
corporate policy (as for PL-1), the wish to
improve programming habits (which lies at the basis of Pascal
and Modula, [Wirth83]),
the wish to provide more adequate programming constructs
(as, for instance, C++ was originally meant to be a better C),
or the efficient implementation of a theoretically
interesting model of computing (as has been the case for Prolog).
Whatever motivation lies behind the development of a programming
language, every language is meant to serve some purpose.
Whether implicitly or explicitly stated, a programming
language is characterized by its design goals and
the applications it is intended to support.
A fortiori this holds for object oriented programming
languages.
The impetus to research in object oriented programming
may be traced back to the development of Simula,
which was originally intended for discrete event simulation.
As observed in [Tai], Simula has since served
as a valuable source of ideas in several research areas
in computer science.
See slide [5-simula].
The notion of object
-- Simula
- abstract data types -- software engineering
- frames -- artificial intelligence
- semantic data models -- database system development
- capability-based computing -- distributed systems
slide: The heritage of Simula
These areas include abstract data types
(that play a prominent role in software engineering,
Parnas (1972a,b); Liskov and Zilles 1974; Liskov and Zilles, 1975),
frames in artificial intelligence
(which have become an invaluable mechanism for knowledge
representation, [Fikes] and [Minsky]),
semantic data models,
(that are widely used to develop information systems,
Hammer and McLeod (1978, 1981)),
and capability-based computing
(that plays a prominent role in distributed computer systems, [Levy]).
The research efforts in these areas in their turn have had
a strong impact on our conception of object-oriented
computing.
With regard to object-oriented programming we may
differentiate between three (partially distinct)
viewpoints from which to characterize the notion of
an object.
\mbox{}\zline{\fboxobject-oriented}
structurally
- capability of representing arbitrarily structured complex objects
operationally
- the ability to operate on complex objects through generic operators
behaviorally
- the specification of types and operations (data abstraction)
slide: Perspectives of object orientation
From a structural viewpoint, object-oriented
means the capability of representing arbitrarily
complex objects.
This viewpoint is of importance for implementing
object-oriented languages and the development
of adequate runtime models of object-oriented
computing.
From this perspective, an object is (in the end)
a structure in memory.
From an operational viewpoint, object-oriented
means the ability to operate on complex objects
through generic operators.
This viewpoint is closely related to the notion
of semantic data models, and is
of particular importance for conceptual modeling.
From this perspective, in other words,
an object represents (an element of) a conceptual model.
From a behavioral viewpoint, object-oriented
means the support to specify abstract polymorphic
types with associated operations.
This viewpoint is primarily of importance
for software engineering and the development
of formal methods of specification and verification.
From this perspective an object is like a module,
to be used for data abstraction.
From the inception of Simula, there has been a close
relation between object orientation and modeling,
that is a tendency to regard a program as a
physical model simulating the behavior of either
a real or imaginary part of the world
(see Knudsen and Madsen, 1988).
However, as observed in [Tai], there seems to be
a division between the European interpretation
of object orientation (which remains close
to the original notion of conceptual modeling)
and the American interpretation
(which is of a more pragmatic nature
as it stresses the importance of data abstraction
and the reusability of program components).