This is all well and good as long as people are clear about what their definition is (although it is weird how many proponents have wildly different definitions and yet still seem to feel some kind of kinship). The maddening folks are those who deflect all criticism of OOP by saying “that’s not true OOP without ever asserting any particular definitional qualities. These people seem to have an undying love for the sequence of letters O-O-P. So we have these weird conversations where I say, “fine, I contend that anything that might make OOP unique from other paradigms (e.g., inheritance) is a misfeature”.
Publications by Hewitt or Sussman in the seventies even suggest that the concept traces back to lambda calculus.
> so Smalltalk-style messages are still messages
Only Smalltalk-72 had true "message passing" (i.e. arbitrary tokens sent to an object for interpretation); Smalltalk-76 onwards uses a virtual methods implementation similar to the one of Simula 67 or C++ instead.
Since Actors are universal primitives of digital computation,
it is possible to reframe all previous work as using
messages, including Turing Machines and the lambda calculus.
Lambda calculus was originally defined using string substitution.
Both lambda calculus and Turing machines are computationally less powerful than Actors.
Do you have a reference for that?
It doesn't need much discussion.
If your language forces you to use mechanisms and organization inappropriate to the problem, the solution will be ugly and awkward. In that case a better language, or more usually a better job, is in order. The requirements might dictate the language, but they don't typically dictate you being the one to do it.
EDIT: changed ancestor to descendant, thanks gnufx!
Not Erlang (maybe depending on whether you consider something like Armstrong's universal server extreme late binding)?
https://www.quora.com/What-does-Alan-Kay-think-about-Joe-Arm...
I vote for just not using this term anymore and talk about class based langusges or prototype languages or whatever.
PL researches seem to have no trouble finding equivalences between ML modules and OO :
https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.53...
My personal opinion which tries to be as general as possible to encompass most definitions is that OO just means that semantic entities can bind a set of named values with a set of named operations / functions / methods / whatever you call them.
struct foo {
int bar;
void (*compute)(int x, int y);
};
is also OO.What is inheritance but a way to encapsulate data and methods in a way where you only need to override a subset of very specific methods and/or data to specialize an implementation?
Your definition is closer to what the Template Method pattern [1] is, rather than inheritance in general.
Keep in mind also that neither inheritance itself nor the Template Method pattern guarantee encapsulation.