Back in 1980, I started programming in HP-Basic and later wrote quite a lot of Z-80 Assembly code. Then I progressed to Pascal and Modula-2. C++ looked too scary but later Delphi made life much easier. Yet it was Java that finally made me grasp the concept of Object Oriented Programming. I wonder how this OOP-thing all started? What was actually the first Object Oriented programming language?
- 24First, define OOP :-)– paxdiabloCommentedMar 28, 2022 at 23:37
- 24“Yet it was Java that finally made me embrace the concept of Object Oriented Programming” - that’s an odd way to describe your Stockholm-syndrome.– DaiCommentedMar 29, 2022 at 13:36
- 5OOP is a way of thinking about programs and data. You may employ almost any language. My first encounter with OOP involved a FORTRAN library that supported OOP on a minicomputer in the 1970's. It wasn't called "OOP" at the time, but when I encountered "Object Oriented Programming" for the first time under that name, I immediately understood that I'd used the concepts previously.– John DotyCommentedMar 29, 2022 at 19:01
- 2@Dai I really love my pitbull it is a wonderful dog. He said as the involuntary spasm in the vein in his forehead betrayed his real feelings on the matter.– Neil MeyerCommentedMar 29, 2022 at 19:45
- 3@cup As opposed to all the different definitions of what object-oriented programming is and isn’t?– user3840170CommentedMar 30, 2022 at 10:18
5 Answers
Simula has objects, classes, subclasses, and inheritance.
Dahl and Nygaard shared a Turing award for their pioneering work.
- 10
- "What about Simula 66?", Pax said in a thinly veiled reference to the seven-minute-abs skit in "There's something about Mary" :-)CommentedMar 30, 2022 at 4:05
- Then you should locate that movie and watch it. It's hilarious.CommentedApr 7, 2022 at 5:04
First of all, OOP is a programming style and can be done in any language (*1). Thus, as so often when it's about looking for a 'first' , the answer will depend entirely on your definition of OOP, on which features and how they are expressed, are essential for making an OOP language, in your opinion.
A rough timeline of candidates:
Historically the concept of objects with specific properties and relations was already discussed in the 1950s.
LISP (first implemented in 1958) might have been the first language supporting arbitrary complex data objects with language specific tools.
ALGOL variants throughout the 1960s introduced as well complex data structures including attempts to associate these with dedicated code (methods).
Simula, originally designed in 1960 as a simulator for electronic components, added with their Simula 67 version next to all features we do today associate with OOP (Classes, Subclasses, Methods, Inheritance, etc.) and maybe most important named them that way (ok, Methods were called Procedures - after all, it was an ALGOL child).
Finally Smalltalk came along in the mid 1972. While having again a specific, a LISP like notation, it's main influence was by proving that object orientation can be applied to many common tasks in application (and OS) design, helping a lot to keep complex structures in check.
Finally there was, around 1980, Modula-2, Objective C and finally Oberon. Which essentially settled a consensus what OOP is.
After that, next to all languages (Ada, BASIC, COBOL, ...) became 'objectified' - with C++ eventually being the worst bastardization of all.
Bottom line: Look at the list and pic the point in time you would agree that OOP was invented :))
*1 -Yes, that includes EXPLICIT Assembler as well.
- Comments are not for extended discussion; this conversation has been moved to chat.– Chenmunka♦CommentedApr 2, 2022 at 17:09
What we now refer to as “object-oriented programming” was pioneered by Ole-Johan Dahl and Kristen Nygaard at the Norwegian Computing Centre in the 1960s, when they developed the language Simula. However, their original design in 1962 would have consisted of a network of tasks and "customers" to service them. Their original intent was to implement their language as a pre-processor or transpiler for Algol-60. By 1964, they had realized that both the tasks and the customers could be active, and that their language needed its own compiler, not to be implemented on top of Algol.
What we now call an “object” was added to the language in December of 1966, and originally called “prefixing,” with what we’d now consider the base class called the “prefix area.” The designers were still thinking in terms of using Simula to model simulations, with the classes representing processes, although Simula was now intended to be a general-purpose programming language. This design picked up the name “Class and Subclass Declarations” within a few months, with a paper by that name published in May of 1967.
The term “Object-Oriented” was originally coined by Alan Kay to describe his language Smalltalk. Some sources date the first published appearance of it to 1973, but Kay recalls coming up with the term “probably in 1967,” which would be almost immediately after Simula’s creators published the idea of classes and subclasses. He would later say,
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.
However, this is not what the term has come to mean.
- 4‘we²d’ — I am very curious as to the origin of that typo.CommentedMar 29, 2022 at 5:38
- 6@user3840170 I was on Windows, so I type the apostrophe on the numpad as alt-0146. I must’ve hit the keys on the top row of the numpad by mistake and typed alt-0178.– DavislorCommentedMar 29, 2022 at 5:55
- 3“He would later say that it was not about inheritance or polymorphism at all, but about representing everything as an object. That is not, however, what the term has come to mean.” - I need to get this printed on a heavy metal cast-iron slab, and pummel it into so many StackExchange users’ faces.– DaiCommentedMar 29, 2022 at 13:39
- Words mean what the majority of users of those words think they mean at the time they use those words. See also "timesharing".– daveCommentedMar 29, 2022 at 15:02
- 3Didn't Alan Key also later clarify that he thought the more important aspect of SmallTalk was the messaging, not the objects themselves.CommentedMar 30, 2022 at 7:30
Slightly different but perhaps of interest: in 1988/89 I did some work with the X-Windows Motif framework - which I came to realize was an OO framework implemented in C, not unlike the C code emitted by early C++ “precompilers”. I’ve always wondered what (if any) kind of cross-pollination of ideas led to this.
Although not the first, Eiffel was one of the early OOP languages, developed by Bertrand Meyer in the mid-80's. I attended a workshop he gave when I worked at the R&D facility for Ashton-Tate in 1989, along with all the developers. For most of us, it was our first exposure to hardcore OOP.
- Meyer's notion of Design by Contract, which is cooked into Eiffel, is even more important than objects (although DbC as implemented by Eiffel is intertwined with OOP). Although I don't do formal DbC anymore, thinking about an object's contract still informs how I write reliable code.CommentedApr 6, 2022 at 17:22
- Ada and its allowance of for example application specific numeric types ? And so enforcing a contract between modules ? Think about the ability in Ada to declare a mod type with its range (low ... high) ?CommentedApr 6, 2022 at 21:58