We give a short overview of several programming languages that support the object-oriented paradigm. This section also describes the personal journey of Daniel J. Duffy in OO land since 1989.
An early example of what would be considered an object-oriented programming language is
Sketchpad, created by Ivan Sutherland in 1960 (Sutherland, 1963). Sutherland defined the concepts of "object" and "instance" (with the class concept covered by "master" or "definition"), albeit specialised to graphical interaction. One of the authors of the current book worked on Computer Aided Design (CAD) applications before he became involved with OOP and the experience turned out to be invaluable when learning C++ and applying it to the creation of C++ CAD libraries in combination with the GOF design patterns. In fact, an excellent way to learn design patterns is to apply them to well-defined, concrete problems in our opinion.
Simula is the name of two simulation programming languages, namely Simula I and Simula 67, developed in the 1960s at the Norwegian Computing Center in Oslo, by Ole-Johan Dahl and Kristen Nygaard. Simula 67 introduced objects, classes, inheritance and subclasses, virtual procedures, coroutines, and discrete event simulation; it also featured garbage collection. Other forms of subtyping (besides inheriting subclasses) were introduced in Simula derivatives.
Simula can be considered to be the first object-oriented programming language. The first Simula version was designed for doing simulations; Simula 67 was designed to be a general-purpose programming language and it provided the framework for many of the features of object-oriented languages. It introduced important concepts that are an essential part of object-oriented programming, such as class and object, inheritance, and dynamic binding. The object-oriented Simula programming language was used mainly by researchers involved with physical modelling, such as models to study and improve the movement of ships and their contents through cargo ports.
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 included a programming environment and was dynamically typed, and at first was interpreted, not compiled. Smalltalk went through various versions and interest in the language grew. While Smalltalk was influenced by the ideas introduced in Simula 67 it was however, designed to be a fully dynamic system in which classes could be created and modified at run-time.
C++ is a high-level, general-purpose programming language. First released in 1985 as an extension of the C programming language, it has since expanded significantly over time. It supports the procedural, object-oriented and generic programming models and to a lesser extent, the functional programming model. Daniel J. Duffy was one of the first object-oriented programmers in the Netherlands and he started his company Datasim BV to promote C++ and its applications to industrial projects.
Python is a high-level, general-purpose programming language. Its design philosophy emphasises code readability. It is dynamically typed and garbage-collected and it supports multiple programming paradigms, including structured (particularly procedural), object-oriented and functional programming. It is often described as a "batteries included" language due to its comprehensive standard library.
C# is a general-purpose high-level programming language supporting multiple paradigms. C# encompasses static typing, strong typing, lexically scoped, imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming styles.
In this book we focus on C++, C# and
Python. We discuss them because they are important for development work. We try to avoid
language wars because each language has its strengths and is more suitable for certain classes of problems than for others. There are many technical, organisational and even idiosyncratic reasons for deciding on a given language in a given context. This topic is essentially outside the scope of this book.