Ole-Johan Dahl and Kristen Nygaard in 1960s

Simula of Ole-Johan Dahl and Kristen Nygaard

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, a MS in mathematics at the University of Oslo, started writing computer simulation programs in 1957. He was seeking for 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 a MS in mathematics and one of the 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 on the UNIVAC 1107 by January 1965. 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 on 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 as a template for creating instance (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.