I
can barely remember the days when objects were seen like a new,
shiny, promising technology. Today, objects are often
positioned between mainstream and retro,
while the functional paradigm is enjoying an interesting renaissance. Still, in the last
few months I stumbled on a couple of blog posts asking the
quintessential question, reminiscent of those dark
old days: “what
is an object?”
The
most recent (September 2012) is
mostly
a pointer to a stripped-down definition provided by Brian Marick:
“It’s
a clump of name->value mappings, some functions that take such
clumps as their first arguments,
and a dispatch function that decides which function the programmer
meant to call”.
Well, honestly, this is more about a specific implementation of
objects, with a rather poor fit, for instance, with the C++
implementation. It makes sense when you’re describing a way to
implement objects (which is what Marick did) but it’s not a
particularly far-reaching definition.
The
slightly older one (July
2012) is
much more ambitious and comprehensive. Cook aims to provide a
“modern” definition of objects, unrestricted by specific
languages and implementations. It’s an interesting post indeed, and
I suggest that you take some time reading it, but in the end, it’s
still very much about the mechanics
of objects ("An
object
is
a first-class, dynamically dispatched behavior").
Although
it
may seem ok from a language design perspective, defining objects
through their mechanics leaves a vacuum
in our collective knowledge: how do we design a proper
object-oriented system?