>>> OO [...] is a computational model>>> comprising a collection of features useful for>>> constructing large unpredictable state machines from>>> small predictable state machines or otherwise picked>>> arbitrarily in the mid to late 1960's

I agree that some folks think about OO that way. They treat each
object as a small predictable state machine and then interconnect them
into a larger state machine (or rather a collaboration of small state
machines). However, this description of interacting state machines can
be used for any system at all. No matter what kind of system you have
it will always be possible to boil it down into clusters of variables
that are controled by clusters of functions such that each cluster
forms a small and predictable state machine. So, in the end, this is
not a description of OO at all.

What OO *really* is, is a technique for managing the interdependencies
between modules through the use of dynamic polymorphism.

For those of you who want a definition of dynamic polymorphism, it is
the use of vector tables to connect callers with the functions that
they are calling.

So, what makes OO different from procedural code is that the little
state machines are interconnected through the use of jump tables
instead of direct calls.