6 ms·
Simula is generaly recognized as the first OO language, so it's a second look at the second OO language at best.
by informatimago 13y ago
Simula is generaly recognized as the first OO language, so it's a second look at the second OO language at best.
- bromagosa 13y agoCorrect. Although Smalltalk is generally regarded as the first one because the concept "object orientation" was first used in it. Still, the big thing in Smalltalk are not objects, but messages. That's something many later OO languages missed on completely. From Kay: «OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I’m not aware of them.»
- vidarh 13y agoI think the reason many later OO languages "missed" messages completely is because the distinction makes little sense in more static languages that lacks a way to dynamically call a method/send a message.
- yvdriess 13y agoAnd incidentally, dynamic dispatching is recognised as the key feature of OO: (Cook 2009) Object-oriented programming is successful in part because its key technical characteristic—dynamic dispatch-is essential to supporting independent, interoperating extensions; and because interoperable extension is in turn essential to the reuse of architectural code (as in frameworks), and more broadly to the design of modern software ecosystems.
- vidarh 13y agoI'm not sure if you're agreeing or disagreeing with me. Dynamic dispatch is supported by most statically typed OO languages. C++ virtual member functions are dynamic dispatch. So indeed, dynamic dispatch is one of the key features that makes the distinction between calling methods and sending messages sufficiently un-important that static OO languages are still useful. What was (perhaps too imprecisely) referred to in my comment above is late/dynamic binding.
- seanmcdirmid 13y agoWhy would you take Kay's definition of OOP as gospel. To me, OOP is all about thinking and coding in terms of object metaphors. Everything else is a supporting detail.
- bromagosa 13y agoWell, I wouldn't take it as gospel, but as a definition coming from the person who actually invented and first used this term.
- seanmcdirmid 13y agoAlan Kay is very opinionated, I respect his work but don't take him as a god. There are plenty of other people who did much work in OOP in the 70s and 80s who deserve around similar credits for starting up this field, and let's not forget the Scandinavians who actually invented it.
- seanmcdirmid 13y agoSimula and to a similar extent SketchPad are proto-OO: they planted the seeds many of the concepts that would go into OO, but Smalltalk is where the seeds were first reaped. But at the end of the day, we are arguing about a label, and its hard to tell where proto-X really becomes X (e.g. anthropologists argue about the line between proto writing and writing).
- vidarh 13y agoI'm curious what you believe Simula is lacking to make it fully OO.
- seanmcdirmid 13y agoSee http://www.stanford.edu/class/cs242/slides/2007/simula-smalltalk.pdf http://www.stanford.edu/class/cs242/slides/2007/simula-small.... The main omission is encapsulation.
- vidarh 13y agoSimula does provide encapsulation - it often considered the first language to do so. It does not provide an easy mechanism for information hiding of the encapsulated instance variables. I think that is an exceedingly weak argument against calling it OO, especially as you AFAIK can do information hiding in Simula by using the simulation support that was it's raison-d'etre, namely by using the object lifecycle and co-routine support and starting a method to encapsulate state as part of the class body (constructor, effectively).
- seanmcdirmid 13y agoClosures as a form of encapsulation is actually very lispy. Simula introduced classes while Sketchpad introduced prototypes (predates Simula by 5 years), so both were very much proto OO in that sense. But if it makes you feel any better, we could define proto OO just to mean OO before that was a term anyone invented.