Object-oriented programming is an exceptionally bad idea that could only have originated in California.
The first object-oriented programming language was developed in the 1960s at the Norwegian Computing Center in Oslo, by two Norwegian computer scientists—Ole-Johan Dahl (1931-2002) and Kristen Nygaard (1926-2002).
Kristen Nygaard, an MS in mathematics at the University of Oslo, started writing computer simulation programs in 1957. He was seeking a better way to describe the heterogeneity and the operation of a system. To go further with his ideas on a formal computer language for describing a system, Nygaard realized that he needed someone with more computer programming skills than he had, thus he contacted Ole-Johan Dahl, also an MS in mathematics and one of Norway’s foremost computer scientist, who joined him in January 1962.
By May 1962 the main concepts for a simulation language were set. “SIMULA I” was born, a special-purpose programming language (similar to ALGOL 60) for simulating discrete event systems. SIMULA I was fully operational by January 1965 on the UNIVAC 1107 computer of Sperry Rand. In the following years, Dahl and Nygaard spent a lot of time teaching Simula. Simula spread to several countries around the world and was later implemented on Burroughs B5500 computers and the Russian URAL-16 computer.
In 1966 the British computer scientist Tony Hoare introduced the concept of record class construct, which Dahl and Nygaard extended with the concept of prefixing and other features to meet their requirements for a new generalized process concept. The first formal definition of Simula 67 appeared in May 1967. In June 1967 a conference was held to standardize the language and initiate a number of implementations. Dahl proposed to unify the type and the class concept. This led to serious discussions, and the proposal was rejected by the board. SIMULA 67 was formally standardized at the first meeting of the SIMULA Standards Group in February 1968.
Simula 67 contained many of the concepts that are now available in mainstream OO languages such as Java, C++, and C#:
• Class and object. The class concept is a template for creating instances (objects).
• Subclass. Classes may be organized in a classification hierarchy by means of subclasses.
• Virtual methods. A Simula class may define virtual methods that can be redefined in subclasses.
• Active objects. An object in Simula may be the head of an active thread (technically it is a coroutine).
• Action combination. Simula has an inner-construct for combining the action-parts of a class and its subclass.
• Processes and schedulers. It is easy in Simula to write new concurrency abstractions including schedulers.
• Frameworks. Simula provided the first OO framework in form of Class Simulation. The simulation features of Simula I was made available through Class Simulation.
• Automatic memory management. Simula had automatic memory management, including garbage collection.