Hi Ben,
I'm still trying to organise my thoughts and write them down with examples that help.
This is hard.
In a nutshell I think two things are almost always overlooked when people talk about or
do OO - especially those who complain about OO and how it 'failed'.
1. Alan Kay said that message passing is a key concept and I think most people don't understand what he meant.
Of course I have not had the opportunity to ask or speak with Mr Kay to clarify (although I have tried to meet him
through a mutual friend) so there is the possibility that I'm wrong.
I have seen the concept of message passing boiled down to mean calling methods and while this is a result
somewhere in the process of message passing I don't believe method calls are the implementation of this key
concept rather it is a requirement of an OO system to enable all things via message passing. For example,
flow control, looping and other constructs are implemented through message passing. Languages that have the
compiler/interpreter handle these constructs (C++, Java etc) miss the point and therefore the benefits.
Thinking in terms of message passing at this level changes your thought process and the design of the resulting
system. Lisp and Smalltalk are the only languages I know to get this right.
2. Most developers who practice OO are simply bundling a structure (variables/fields) with some procedures that
operate on them, failing to actually model behaviour. The fields of an object will fall out of modelling behaviour
as they should only be there to support that behaviour yet defining the 'data' of an object is a starting point for
most and the wrong place to start. Almost always the 'data' of an object does not need to be made available to
the outside world yet writing a getter and a setter is the starting place for so many.
This is a quick note and I hope you don't mind that it is just a quick scribble.
- James.