Object-Oriented Programming

Object-oriented programming (OOP) is a programming paradigm built around objects, constructs that combine data and code. In particular, object have properties—sometimes called fields—that store data and have methods that contain code that act on the properties of the object and form an interface for the object.

Object-oriented programming can be further broken down into two main types: class-based where objects are instantiated from classes that have inheritance; and, prototype-based where there aren't classes but rather objects are derived from each other an inherit properties and methods at time of copying.

The first language to be designed around object-oriented programming is Smalltalk by Alan Kay.

(en.wikipedia.org) Object-oriented programming - Wikipedia   website

ROAM_REFS: https://en.wikipedia.org/wiki/Object-oriented_programming

Object-oriented programming (OOP) is a programming paradigm based on the concept of objects. Objects can contain data (called fields, attributes or properties) and have actions they can perform (called procedures or methods and implemented in code). In OOP, computer programs are designed by making them out of objects that interact with one another.

Many of the most widely used programming languages (such as C++, Java, and Python) support object-oriented programming to a greater or lesser degree, typically as part of multiple paradigms in combination with others such as imperative programming and declarative programming.

Significant object-oriented languages include Ada, ActionScript, C++, Common Lisp, C#, Dart, Eiffel, Fortran 2003, Haxe, Java, JavaScript, Kotlin, Logo, MATLAB, Objective-C, Object Pascal, Perl, PHP, Python, R, Raku, Ruby, Scala, SIMSCRIPT, Simula, Smalltalk, Swift, Vala and Visual Basic.NET.

(en.wikipedia.org) History - Object-oriented programming - Wikipedia   website

ROAM_REFS: https://en.wikipedia.org/wiki/Object-oriented_programming#History

** History

The idea of "objects" in programming started with the artificial intelligence group at MIT in the late 1950s and early 1960s. Here, "object" referred to LISP atoms with identified properties (attributes). Another early example was Sketchpad created by Ivan Sutherland at MIT in 1960–1961. In the glossary of his technical report, Sutherland defined terms like "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialized to graphical interaction. Later, in 1968, AED-0, MIT's version of the ALGOL programming language, connected data structures ("plexes") and procedures, prefiguring what were later termed "messages", "methods", and "member functions". Topics such as data abstraction and modular programming were common points of discussion at this time.

Meanwhile, in Norway, Simula was developed during the years 1961–1967. Simula introduced essential object-oriented ideas, such as classes, inheritance, and dynamic binding. Simula was used mainly by researchers involved with physical modelling, like the movement of ships and their content through cargo ports. Simula is generally accepted as being the first language with the primary features and framework of an object-oriented language.

#+beginquote I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning – it took a while to see how to do messaging in a programming language efficiently enough to be useful).

Alan Kay,

Influenced by both MIT and Simula, Alan Kay began developing his own ideas in November 1966. He would go on to create Smalltalk, an influential object-oriented programming language. By 1967, Kay was already using the term "object-oriented programming" in conversation. Although sometimes called the "father" of object-oriented programming, Kay has said his ideas differ from how object-oriented programming is commonly understood, and has implied that the computer science establishment did not adopt his notion. A 1976 MIT memo co-authored by Barbara Liskov lists Simula 67, CLU, and Alphard as object-oriented languages, but does not mention Smalltalk.

In the 1970s, the first version of the Smalltalk programming language was developed at Xerox PARC by Alan Kay, Dan Ingalls and Adele Goldberg. Smalltalk-72 was notable for use of objects at the language level and its graphical development environment. Smalltalk was a fully dynamic system, allowing users to create and modify classes as they worked. Much of the theory of OOP was developed in the context of Smalltalk, for example multiple inheritance.

In the late 1970s and 1980s, object-oriented programming rose to prominence. The Flavors object-oriented Lisp was developed starting 1979, introducing multiple inheritance and mixins. In August 1981, Byte Magazine highlighted Smalltalk and OOP, introducing these ideas to a wide audience. LOOPS, the object system for Interlisp-D, was influenced by Smalltalk and Flavors, and a paper about it was published in 1982. In 1986, the first Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA) was attended by 1,000 people. This conference marked the beginning of efforts to consolidate Lisp object systems, eventually resulting in the Common Lisp Object System. In the 1980s, there were a few attempts to design processor architectures that included hardware support for objects in memory, but these were not successful. Examples include the Intel iAPX 432 and the Linn Smart Rekursiv.

In the mid-1980s, new object-oriented languages like Objective-C, C++, and Eiffel emerged. Objective-C was developed by Brad Cox, who had used Smalltalk at ITT Inc.. Bjarne Stroustrup created C++ based on his experience using Simula for his PhD thesis. Bertrand Meyer produced the first design of the Eiffel language in 1985, which focused on software quality using a design by contract approach.

In the 1990s, object-oriented programming became the main way of programming, especially as more languages supported it. These included Visual FoxPro 3.0, C++, and Delphi. OOP became even more popular with the rise of graphical user interfaces, which used objects for buttons, menus and other elements. One well-known example is Apple's Cocoa framework, used on Mac OS X and written in Objective-C. OOP toolkits also enhanced the popularity of event-driven programming.

At ETH Zürich, Niklaus Wirth and his colleagues created new approaches to OOP. Modula-2 (1978) and Oberon (1987), included a distinctive approach to object orientation, classes, and type checking across module boundaries. Inheritance is not obvious in Wirth's design since his nomenclature looks in the opposite direction: It is called type extension and the viewpoint is from the parent down to the inheritor.

Many programming languages that existed before OOP have added object-oriented features, including Ada, BASIC, Fortran, Pascal, and COBOL. This sometimes caused compatibility and maintainability issues, as these languages were not originally designed with OOP in mind.

In the new millenium, new languages like Python and Ruby have emerged that combine object-oriented and procedural styles. The most commercially important "pure" object-oriented languages continue to be Java, developed by Sun Microsystems, as well as C# and Visual Basic.NET (VB.NET), both designed for Microsoft's .NET platform. These languages show the benefits of OOP by creating abstractions from implementation. The .NET platform supports cross-language inheritance, allowing programs to use objects from multiple languages together. #+endquote

Local Graph

org-roam 022e5ea5-fb05-4899-981e-ca4b992dc497 Alan Kay 1a857a79-1bc3-42c2-92ee-897a864b10de Object-Oriented Programming 022e5ea5-fb05-4899-981e-ca4b992dc497->1a857a79-1bc3-42c2-92ee-897a864b10de 1a857a79-1bc3-42c2-92ee-897a864b10de->022e5ea5-fb05-4899-981e-ca4b992dc497 bbdbd1d6-ce5c-4aeb-85ea-96ab26afc28a Programming Paradigm 1a857a79-1bc3-42c2-92ee-897a864b10de->bbdbd1d6-ce5c-4aeb-85ea-96ab26afc28a c00306de-35c9-4f91-9f4f-23c2462435ea (squeak.org) Squeak/Smalltalk 1a857a79-1bc3-42c2-92ee-897a864b10de->c00306de-35c9-4f91-9f4f-23c2462435ea da7ac241-9670-4684-a42a-0fc46aed8890 Go Programming Language da7ac241-9670-4684-a42a-0fc46aed8890->1a857a79-1bc3-42c2-92ee-897a864b10de 410dabc8-5d5f-4602-afa1-49215d4d6c39 Wayland 410dabc8-5d5f-4602-afa1-49215d4d6c39->1a857a79-1bc3-42c2-92ee-897a864b10de 49a32d26-7d4f-413f-a5f4-833304aaece8 (www.lua.org) Lua 49a32d26-7d4f-413f-a5f4-833304aaece8->1a857a79-1bc3-42c2-92ee-897a864b10de