Introduction
The short musical phrases appearing at the beginning of each chapter
are taken from The Notebook for Anna Magdalena Bach
(which are intended primarily for young players).
Despite their apparent simplicity, however, they are acknowledged
by experienced pianists as being hard to play properly,
yet they are among the standard exercises for learner pianists.
In a way this reflects the problem of teaching object-oriented programming.
The concepts underlying object-oriented programming
may at first seem deceptively simple (and not require the complexity of C++ or
a type theoretical analysis).
However, in developing object-oriented models
some intrinsically difficult questions
remain, for which we have no definite answer
and which may even require extensive expertise and technology
to come up with a partial solution.
Returning to the music, I often find myself improvising,
leaving the written music for what it is,
a starting point.
The approach taken in this book may be characterized
as abstract,
in the sense that attention is paid primarily to concepts
rather than particular details of a solution
or implementation language.
By chance, in response to a discussion in my class,
I looked up the meaning of abstract
in a dictionary, where to my surprise I learned
that one of its meanings
is to steal, to take away dishonestly.
Jokingly, I remarked that this meaning sheds a different
light on the notion of abstract data types,
but at a deeper level I recognized the extent
to which the ideas presented in this book have profited
from the ideas originally developed by others.
My rendering of these ideas in a more abstract form
is, however, not meant to appropriate them in a dishonest way,
but rather to give these ideas the credit they deserve by
fitting them in a context, a framework encompassing
both theoretical and pragmatical aspects of object-oriented computing.
As one of the meanings of the adjective abstract,
the dictionary also lists the word abstruse
Jokingly, I remarked that this meaning sheds a different
light on the notion of abstract data types,
but at a deeper level I recognized the extent
to which the ideas presented in this book have profited
from the ideas originally developed by others.
My rendering of these ideas in a more abstract form
is, however, not meant to appropriate them in a dishonest way,
but rather to give these ideas the credit they deserve by
fitting them in a context, a framework encompassing
both theoretical and pragmatical aspects of object-oriented computing.
As one of the meanings of the adjective abstract,
the dictionary also lists the word abstruse
(not easy to understand).
There is no need to say that, within the limits of
my capabilities, I have tried to avoid becoming abstruse.