35

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?

9
  • 23
    First, define OOP :-)
    – paxdiablo
    Mar 28 at 23:37
  • 23
    “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.
    – Dai
    Mar 29 at 13:36
  • 4
    OOP 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 Doty
    Mar 29 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 Meyer
    Mar 29 at 19:45
  • 3
    @cup As opposed to all the different definitions of what object-oriented programming is and isn’t? Mar 30 at 10:18

5 Answers 5

57

Simula 67

Simula has objects, classes, subclasses, and inheritance.

Dahl and Nygaard shared a Turing award for their pioneering work.

4
  • 10
  • "What about Simula 66?", Pax said in a thinly veiled reference to the seven-minute-abs skit in "There's something about Mary" :-)
    – paxdiablo
    Mar 30 at 4:05
  • @paxdiablo - alas, the reference eludes me Apr 7 at 3:56
  • Then you should locate that movie and watch it. It's hilarious.
    – paxdiablo
    Apr 7 at 5:04
38

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.

1
  • Comments are not for extended discussion; this conversation has been moved to chat.
    – Chenmunka
    Apr 2 at 17:09
22

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.

8
  • 4
    ‘we²d’ — I am very curious as to the origin of that typo. Mar 29 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.
    – Davislor
    Mar 29 at 5:55
  • 1
    “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.
    – Dai
    Mar 29 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". Mar 29 at 15:02
  • 3
    Didn't Alan Key also later clarify that he thought the more important aspect of SmallTalk was the messaging, not the objects themselves. Mar 30 at 7:30
2

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.

1

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.

2
  • 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. Apr 6 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) ? Apr 6 at 21:58

Not the answer you're looking for? Browse other questions tagged or ask your own question.