Medium is paywalled now it seems?
At this point I feel like it be better he told us what he doesn’t think OOP means? I guess he’s only excluding inheritance? But how does he envision the late binding to work if so?
And when he says messaging, what does that mean? No reference passing? All data passed as values? No shared memory anywhere?
This talks a bit about how unclear he’s definition is: https://wiki.c2.com/?AlanKaysDefinitionOfObjectOriented
From that read, it sounds like he’d maybe consider only languages with late binding everywhere to qualify as OOP, thus C++ and Java are out, C++ because it needs explicit virtual declarations to be late binded, and Java because it only does late binding on the type of the first argument.
I believe Simula created the object model no? And this was your typical class based with inheritance virtual method call model. And then Smalltalk 71 and 72 were more inspired by the Actor model, at which point they weren’t coined ObjectOriented, until Smalltalk 80 came around, but this one was no longer based on the Actor Model, but back to what Simula had started, and that’s the first Smalltalk to be considered ObjectOriented.
Someone who’se lived through and has used these please chime in.
At this point, I believe Smalltalk is also your typical Class based with inheritance OOP language.
So does Alan Kay not believe that Smalltalk did OOP right? Is he referring back to the Actor Model and what Smalltalk 71 and 72 were doing?
Also, “message passing” versus “function call” has always been a confusion of mine. Some people say messages differ in that you can’t pass a register or memory pointer, thus all input is copied and passed by value. But not all places define it as such. Some people seem to say the historical idea of “message passing” was basically just late binding. It contrasts itself with just static function calls.
And from what I gather, the term was coined to imply that instead of calling a function, you ask a process (a noun) to perform some action based on your message. Thus “message passing” would basically mean that behavior is invoked by first choosing the noun and then the message. So that plays well into OOP as the Object is the process and the method is the message you pass the process. After that, it’s up to the process machinery (Object on this case) to figure out what to do based on the message, and the caller just trusts the process to do the right thing.
Anyways, I find this stuff fascinating, but there’s so much overloaded definitions for such terms, it’s hard to really figure out. And often, they are vague ideas, and once you get into a specific concrete programming language, things start to differ or details of two languages trying to provide the same idea ends up being very different in practice.