Re: Bob's 'Self-aggrandizing ignorant' Count: Was: What databases have taught me

From: Robert Martin <unclebob_at_objectmentor.com>
Date: Sat, 1 Jul 2006 00:39:31 -0500
Message-ID: <2006070100393182327-unclebob_at_objectmentorcom>


On 2006-06-27 13:33:59 -0500, "Keith H Duggar" <duggar_at_alum.mit.edu> said:

>>> 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.

-- 
Robert C. Martin (Uncle Bob)  | email: unclebob_at_objectmentor.com
Object Mentor Inc.            | blog:  www.butunclebob.com
The Agile Transition Experts  | web:   www.objectmentor.com
800-338-6716                  |
Received on Sat Jul 01 2006 - 07:39:31 CEST

Original text of this message