Thanks a lot to everyone who replied.

I really appreciate the quality of the answers I got. I took a look at the "Object Thinking" book mentioned by Mike Moore. I'm not sure if I'm too fond of the "human" metaphor for objects, although it works, and it makes designing software a little more like playing a RTS game ;)

Reading about the javascript object model (beautifully described) made me realize that there's no point for a OOP programmer to care about the internals - other than for the personal culture or for working for performance. I guess each language implements OO its own way, but the concept of an object remains the same, whether you're doing class-oriented or prototype-oriented.

I've been taught that an important thing to master programming is to fully understand the flow of your program. I have been interpreting that all along as "knowing in which function you are", which isn't relevant in OOP, and for a good reason, since your objects take care of that for you.

I like the idea of an object being thought about as a independent program - a sort of compiled version of its class. Classes themselves being also a compiled version of their meta-class.

Michael Sokol