📜 ⬆️ ⬇️

A brief history of object-oriented programming.

This article was written under the influence of the impressions received by the author during one discussion on Habré, and presents a small series of translations of materials from free sources about the history of object-oriented programming, the main of which is Wikipedia, plus absolutely biased conclusions of the author from the material read.

If you are interested in finding out which language was in fact the first OOP language in the world, can Java and C # be called pure OOP languages, as well as imbued with some other details, I invite you to…


')

First a translation about the PLO history from Wikipedia:


“The terms“ object- ”and“ oriented ”in the modern sense of these words appeared in MIT in the late 1950s and early 1960s. Among specialists in artificial intelligence, the term “object” could refer to identified elements (Lisp atoms) with properties (attributes). Alan Kay later wrote that an understanding of the internal structure of Lisp had a major influence on his thinking in 1966. Another early example of the PLO at MIT was Sketchpad, created by Ivan Sutherland in 1960-61. In the glossary of a technical report prepared in 1963 based on his dissertation on Sketchpad , Sutherland defines the concepts “object” and “instance” with the concept of classes based on “master” or “definition”, although all of these terms refer to a graphical representation of objects [ in short, Sketchpad was the main image on which the copies were based. When you change the main - copies also changed. Note trans.].

In the early MIT version of ALGOL AED-0, the data structures (“plexes” in the Algol dialect) were directly related to the procedures that were later called messages, methods, or member functions.

Objects as a formalized concept appeared in programming in the 1960s in Simula 67, an upgraded version of Simula I, a programming language focused on discrete-event modeling. The authors of Simula are Ole-Johan Dahl and Kristen Nyugord from the Norwegian Computer Center in Oslo. Simula was developed under the influence of SIMSCRIPT and the concept of class entries proposed by Charles Hoare. Simula included the concept of classes and instances (or objects), as well as subclasses, virtual methods, coroutines, and discrete-event modeling as part of its own programming paradigm. The language used an automatic garbage collector, which was invented earlier for the functional language Lisp. Simula was then used primarily for physical modeling. Simula ideas had a major impact on later languages ​​such as Smalltalk, Lisp variants ( CLOS ), Object Pascal , and C ++ .

The Smalltalk language , which was invented at Xerox PARC by Alan Kay and several other scientists, actually imposed the use of “objects” and “messages” as a basis for computation. The creators of Smalltalk were inspired by some of the ideas of Simula, but Smalltalk was developed as a fully dynamic system in which classes can be created and changed dynamically, and not only statically as in Simula. Smalltalk and the PLO with its help were presented to a wide audience in Byte magazine in August 1981.

In the 1970s, Kay's Smalltalk led the Lisp community to introduce object-oriented techniques into the language that were introduced to developers using Lisp machines.
Experiments with various Lisp extensions ultimately led to the creation of the Common Lisp Object System (CLOS, part of the first standardized object-oriented language, ANSI Common Lisp ), which organically included both functional and object-oriented programming and allowed to expand itself with using the Meta-object protocol . In 1980 there were several attempts to design architectures of processors, which would include hardware support for working with objects in memory, but all of them were unsuccessful. Examples include the Intel iAPX 432 and Linn Smart Rekursiv .

Object-oriented programming evolved into the dominant programming methodology in the early and mid-1990s, when programming languages ​​that supported it, such as Visual FoxPro 3.0, C ++ , and Delphi, became widely available. The dominance of this system was supported by the growing popularity of graphical user interfaces, which were based on OOP techniques. An example of a close connection between the GUI dynamic library and an object-oriented programming language can be found by looking at the Cocoa framework on Mac OS X , which was written in Objective-C , an object-oriented extension to C based on Smalltalk with support for dynamic messages. OOP toolkits have influenced the popularity of event-oriented programming (although, this concept is not limited to one OOP). Some even thought that seeming or real communication with graphical interfaces was what brought the PLO to the forefront of technology.

At ETH, Zürich , Niklaus Wirth and his colleagues also explored subjects such as data abstraction and modular programming, although these approaches were widely used in the 60s and earlier. Modula-2 released in 1978 included both of these approaches, and its follower Oberon had its own approach to object orientation, classes, and so on, unlike the Smalltalk approach and not at all similar to the C ++ approach.

OOP capabilities have been added to many languages ​​of the time, including Ada , BASIC , Fortran , Pascal, and others. Their addition to languages ​​that were not originally designed to support OOP often led to problems with compatibility and code support.

Later, languages ​​began to appear that support both an object-oriented approach and a procedural approach like Python and Ruby . Perhaps the most commercially successful object-oriented languages ​​include Visual Basic .NET , C #, and Java . Both .NET and Java demonstrate the superiority of OOP. ”

Now the translation of a small part of the article “How Object-Oriented Programming Begins” by Ole-Johan Dahl and Kristen Nyugord.


“SIMULA I (1962-65) and Simula 67 (1967) are the first two object-oriented programming languages. Simula 67 included most of the concepts of object-oriented programming: classes and objects, subclasses (inheritance), virtual functions, safe links, and mechanisms that allow the program to include a collection of program structures described by the general class header (prefix blocks).

Alan Kay of Xerox PARC used Simula as a platform for developing Smalltalk (the first versions of the language in the 1970s), expanding object-oriented programming through user-interface integration and interactive execution. Björn Straussstrup began developing C ++ (in the 1980s) by introducing the main concepts of Simula into S. ”

Now a small summary and conclusion.


As you can see, it turns out that the first OOP language was Simula. But the first “clean” OOP language was exactly Smalltalk. “Pure” is sometimes called OOP language, all types of which are or can be transparently represented classes. In this sense, Java has become a pure OOP language only in version 5, when the Autoboxing feature appeared. C #, if I understand correctly, was a pure OOP language from the very beginning. I suggest in the comments to break spears on topics like “And in C # there are unmanaged pointers that cannot be represented by objects”, “In general, only Smalltalk can be considered a pure OOP language, in which everything is presented as objects, including the blocks of the program itself, or in a pinch, Ruby and Clean are slow. Whatever you think of, represent the int object! ”

Some time ago, a strange habraiser declared in one of the comments that AOP was invented by Alan Kay, that there is no inheritance in pure OOP , that Java and C # according to the author of the term "OOP" Alan Kay OOP are not languages ​​and that Gosling with Lippert have ... um ... problems , because it is completely wrong to believe that the languages ​​they invented are normal object-oriented.

From such a monstrous nonsense, all my eyebrows immediately swelled up, I was slightly puzzled and went to Google for arguments, intending to emerge from there in ten minutes with a bunch of facts. It turns out that such dangerous misconceptions are still shared by points of view, even if by a minority of readers. Therefore, I would like to give my point of view on this matter.

Object-oriented programming is a paradigm, a scientific approach to programming, which was developed not in a vacuum, but by a large group of scientists. Kay's contribution to the PLO is invaluable, but to say that the PLO is entirely his invention will be unfair to many other scientists who worked with him, and separately. Kay did once say , “I didn’t like the path to Simula I or Simula 67 did inheritance (though I thought Nygaard and Dahl were just tremendous thinkers and designers). So I understood it better. ”As you understand, they did not declare a monopoly on the invention of OOP.

To say that there is no inheritance in the PLO (and any other modern things) and that those who introduced it have distorted the meaning and essence of the PLO, it is the same as saying that Lobachevsky's geometry distorted the geometry invented by Euclidean and urgently needs to be renamed “ sharometry ”or“ hyperbolometry ”so that the dirty hands of neophytes do not dare to touch the saint. Riemann's geometry is generally from Satan, and bosonic string theory cannot be taught at universities because it is not what Gabriele Veneziano and his colleagues described.

If you do not agree, I invite you to continue the discussion in the comments.

Source: https://habr.com/ru/post/107940/


All Articles