
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 the author’s absolutely biased conclusions from the material read.
If you are interested in knowing which language was actually the first OOP language in the world, whether Java and C # can be called pure OOP languages, as well as penetrate with some other details, I invite you to ...
“The terms“ object-oriented ”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 understanding Lisp’s internal structure had a major impact on his thinking in 1966. Another early example of OOP at MIT was the Sketchpad created by Ivan Sutherland in 1960–61. In the glossary of a technical report prepared in 1963, based on his dissertation on SketchpadSutherland defines the concepts of “object” and “instance” with the concept of classes based on “wizard” or “definition”, although all these terms refer to the graphical representation of objects [in short, Sketchpad had the main image on which the copies were built. When changing the main - the copy also changed. Note trans.].
In the early MIT version of ALGOL AED-0, data structures (“plexes” in the Algol dialect) were directly associated with procedures that were later called messages, methods, or member functions.
Objects as a formalized concept appeared in programming in the 1960s in Simula67, an upgraded version of Simula I, a discrete event modeling-oriented programming language. The authors of Simula are Ole Johan Dahl and Kristen Nygord of the Norwegian Computer Center in Oslo. Simula was developed under the influence of SIMSCRIPT and the concept of record classes proposed by Charles Hoar. 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's ideas had a major impact on later languages such as Smalltalk, Lisp variants (CLOS ), Object Pascal , and C ++ .
Language of the Smalltalk , which was invented by the company Xerox PARC by Alan Kay ( by Alan Kay ) and some other scientists actually impose the use of "objects" and "Messages" as the basis for calculations. The creators of Smalltalk were inspired by some of Simula's ideas, but Smalltalk was designed as a fully dynamic system in which classes can be created and changed dynamically, and not just statically as in Simula. Smalltalk and OOP, with its help, were presented to a wide audience in Byte magazine in August 1981.
In the 1970s, Kaye's Smalltalk encouraged the Lisp community to introduce object-oriented techniques into the language that were presented to developers using the Lisp machine.
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 processor architectures that would include hardware support for working with objects in memory, but all of them were unsuccessful. Examples includeIntel iAPX 432 and Linn Smart Rekursiv .
Object-oriented programming evolved into the dominant programming methodology in the early and mid-1990s, when its supporting programming languages, 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 the close relationship between a dynamic GUI 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 the apparent or real connection with GUIs was what brought OOP to the forefront of technology.
At ETH Zürich , Nicklaus 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. Released in 1978, Modula-2 included both of these approaches, and its follower Oberonhad its own approach to object-orientedness, classes and other things, unlike the Smalltalk approach and completely different from the C ++ approach.
OOP capabilities were added to many languages of the time, including Ada , BASIC , Fortran , Pascal and others. Adding them to languages that were not originally designed to support OOP often led to compatibility and code support issues.
Later, languages began to appear that support both an object-oriented approach and a procedural one like Python and Ruby . Perhaps the most commercially successful object-oriented languages are Visual Basic.NET , C #, andJava . Both .NET and Java demonstrate the superiority of OOP. ”
“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 you to add to the program a collection of program structures described by a common class header (prefix blocks).
Alan Kay of Xerox PARC used Simula as the platform for his development of Smalltalk (the first versions of the language in the 1970s), expanding object-oriented programming by integrating the user interface and interactive execution. Björn Strausstrupp began the development of C ++ (in the 1980s) by introducing the basic concepts of Simula in C. "
As you can see, it turns out that the first OOP language was Simula. But the first “clean" OOP language was Smalltalk. OOP is sometimes called OOP language, all types of which are or can be transparently represented by classes. In this sense, Java became a pure OOP language only in version 5, when Autoboxing was introduced. C #, if I understand correctly, was a pure OOP language from the very beginning. I suggest breaking comments 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 represented, up to blocks of the program itself, well, or, in extreme cases, Ruby and Clean means slow. Look what you’ve thought of, to represent an int object! ”
Some time agoone strange habrayuzer stated in one of the comments that OOP was invented by Alan Kay, that in pure OOP there is no inheritance , that Java and C #, according to the author of the term “OOP” Alan Kay, OOP are not languages and that Gosling and Lipper have ... um ... problems , since they completely incorrectly believe that the languages they invented are normal object-oriented.
From such monstrous nonsense all my eyebrows immediately swelled up, I was a little puzzled and climbed into 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, albeit 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 OOP is invaluable, but to say that OOP is his invention will be completely unfair to many other scientists who worked with him or separately. Kay did once say , “I didn't like the way Simula I or Simula 67 did inheritance (though I thought Nygaard and Dahl were just tremendous thinkers and designers). So I decided to leave out inheritance as a built-in feature until I understood it better. ” As you know, they did not declare a monopoly on the invention of OOP.
Saying that in the PLO there is no inheritance (and any other modern stuff) and that those who brought it there pervertedthe meaning and essence of OOP is the same as saying that Lobachevsky’s geometry perverted the geometry invented by Euclid and urgently needs to be renamed “ballometry” or “hyperbolometry” so that the dirty hands of neophytes dare not touch the saint. Riemann’s geometry was generally from Satan then, and the bosonic string theory cannot be taught at universities because this is not what Gabriele Veneziano and his colleagues described.
If you do not agree, I invite you to continue the discussion in the comments.
If you are interested in knowing which language was actually the first OOP language in the world, whether Java and C # can be called pure OOP languages, as well as penetrate with some other details, I invite you to ...
First, a translation about the history of OOP from Wikipedia:
“The terms“ object-oriented ”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 understanding Lisp’s internal structure had a major impact on his thinking in 1966. Another early example of OOP at MIT was the Sketchpad created by Ivan Sutherland in 1960–61. In the glossary of a technical report prepared in 1963, based on his dissertation on SketchpadSutherland defines the concepts of “object” and “instance” with the concept of classes based on “wizard” or “definition”, although all these terms refer to the graphical representation of objects [in short, Sketchpad had the main image on which the copies were built. When changing the main - the copy also changed. Note trans.].
In the early MIT version of ALGOL AED-0, data structures (“plexes” in the Algol dialect) were directly associated with procedures that were later called messages, methods, or member functions.
Objects as a formalized concept appeared in programming in the 1960s in Simula67, an upgraded version of Simula I, a discrete event modeling-oriented programming language. The authors of Simula are Ole Johan Dahl and Kristen Nygord of the Norwegian Computer Center in Oslo. Simula was developed under the influence of SIMSCRIPT and the concept of record classes proposed by Charles Hoar. 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's ideas had a major impact on later languages such as Smalltalk, Lisp variants (CLOS ), Object Pascal , and C ++ .
Language of the Smalltalk , which was invented by the company Xerox PARC by Alan Kay ( by Alan Kay ) and some other scientists actually impose the use of "objects" and "Messages" as the basis for calculations. The creators of Smalltalk were inspired by some of Simula's ideas, but Smalltalk was designed as a fully dynamic system in which classes can be created and changed dynamically, and not just statically as in Simula. Smalltalk and OOP, with its help, were presented to a wide audience in Byte magazine in August 1981.
In the 1970s, Kaye's Smalltalk encouraged the Lisp community to introduce object-oriented techniques into the language that were presented to developers using the Lisp machine.
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 processor architectures that would include hardware support for working with objects in memory, but all of them were unsuccessful. Examples includeIntel iAPX 432 and Linn Smart Rekursiv .
Object-oriented programming evolved into the dominant programming methodology in the early and mid-1990s, when its supporting programming languages, 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 the close relationship between a dynamic GUI 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 the apparent or real connection with GUIs was what brought OOP to the forefront of technology.
At ETH Zürich , Nicklaus 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. Released in 1978, Modula-2 included both of these approaches, and its follower Oberonhad its own approach to object-orientedness, classes and other things, unlike the Smalltalk approach and completely different from the C ++ approach.
OOP capabilities were added to many languages of the time, including Ada , BASIC , Fortran , Pascal and others. Adding them to languages that were not originally designed to support OOP often led to compatibility and code support issues.
Later, languages began to appear that support both an object-oriented approach and a procedural one like Python and Ruby . Perhaps the most commercially successful object-oriented languages are Visual Basic.NET , C #, andJava . Both .NET and Java demonstrate the superiority of OOP. ”
Now the translation of a small part of the article “How did object-oriented programming begin” was authored by Ole-Johan Dahl and Kristen Nygord.
“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 you to add to the program a collection of program structures described by a common class header (prefix blocks).
Alan Kay of Xerox PARC used Simula as the platform for his development of Smalltalk (the first versions of the language in the 1970s), expanding object-oriented programming by integrating the user interface and interactive execution. Björn Strausstrupp began the development of C ++ (in the 1980s) by introducing the basic concepts of Simula in C. "
Now a little generalization and conclusion.
As you can see, it turns out that the first OOP language was Simula. But the first “clean" OOP language was Smalltalk. OOP is sometimes called OOP language, all types of which are or can be transparently represented by classes. In this sense, Java became a pure OOP language only in version 5, when Autoboxing was introduced. C #, if I understand correctly, was a pure OOP language from the very beginning. I suggest breaking comments 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 represented, up to blocks of the program itself, well, or, in extreme cases, Ruby and Clean means slow. Look what you’ve thought of, to represent an int object! ”
Some time agoone strange habrayuzer stated in one of the comments that OOP was invented by Alan Kay, that in pure OOP there is no inheritance , that Java and C #, according to the author of the term “OOP” Alan Kay, OOP are not languages and that Gosling and Lipper have ... um ... problems , since they completely incorrectly believe that the languages they invented are normal object-oriented.
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 OOP is invaluable, but to say that OOP is his invention will be completely unfair to many other scientists who worked with him or separately. Kay did once say , “I didn't like the way Simula I or Simula 67 did inheritance (though I thought Nygaard and Dahl were just tremendous thinkers and designers). So I decided to leave out inheritance as a built-in feature until I understood it better. ” As you know, they did not declare a monopoly on the invention of OOP.
Saying that in the PLO there is no inheritance (and any other modern stuff) and that those who brought it there pervertedthe meaning and essence of OOP is the same as saying that Lobachevsky’s geometry perverted the geometry invented by Euclid and urgently needs to be renamed “ballometry” or “hyperbolometry” so that the dirty hands of neophytes dare not touch the saint. Riemann’s geometry was generally from Satan then, and the bosonic string theory cannot be taught at universities because this is not what Gabriele Veneziano and his colleagues described.
If you do not agree, I invite you to continue the discussion in the comments.