Kent M. Pitman explaining his
view
in comp.lang.lisp:
I often prefer these days to refer to identity-oriented programming for
what we once called object-oriented. To me, and to the original meaning
of the term, the very essence of object oriented programming is about the
shape of connected structure once programs were written.
So, for example, Lisp's characteristic of redefinable or dynamically
loadable functions is a natural result of the fact that definitions are
stored in objects (symbols) and that you can, in an object-oriented way,
change the object in a way that is possible to model/describe within
the language such that a new definition is in effect.
Another might be the characteristic of being inspectable independently of
a running program. That is, data has the ability to answer questions about
itself because data is not just "procedurally embedded" but is subject to
an external use protocol.
Now, I claim, it's not necessary to say how this protocol was created.
In some cases, it might be wired in by the system implementors in C or
assembly. In other cases, it might be user-programmed. What matters is
the access protocol, not the definition protocol.
Java happens to be object-oriented in the sense that it has
introspection protocols built into the JVM. But the quality of being
organized into a particular organizational theory of programming (that
I'd think is better called "object-centric" or even
"object-chauvinist") is just a red herring, IMO. Certainly the fact
that most or all of your ability to change the 'environment' "compiles
out" when you compile Java cripples its object-oriented nature.
And the sense in which there is any object-oriented stuff left after
you compile C++ is just a fantasy, so I don't see that as object-oriented
at all, no matter how object-centric the programming paradigm tries to
make it look.
He also wrote a good
paper
about this subject.