Objektorientierte Programmierung

By Wolfgang Keller
Originally written 2019-10-26
Last modified 2019-10-26

In zahlreichen Stellenanzeigen finden man die Anforderung „Kenntnisse in objektorientierter Programmierung“ oder „Kenntnisse in einer objektorientierten Programmiersprache“. Das Problem ist, dass, glaube ich, nur erstaunlich wenige Menschen (inklusive Infomratik-Studenten und -Absolventen) tatsächlich wissen, was objektorientierte Programmierung tatsächlich bedeutet und der Begriff daher in der Praxis sehr willkürlich verwendet wird. Daher hier eine Erklärung zu diesem Thema:

Der Preisträger des ACM-Turing-Awards Alan Kay, der den Begriff „object oriented“ erfand (und wer könnte eine größere Autorität zu d sein als der Erfinder selbst), definierte diesen durch folgende sechs Ideen (Quelle: The Early History Of Smalltalk [visited 2019-10-26T11:10:46Z]):

  1. „Everything is an object
  2. Objects communicate by sending and receiving messages (in terms of objects)
  3. Objects have their own memory (in terms of objects)
  4. Every object is an instance of a class (which must be an object)
  5. The class holds the shared behavior for its instances (in the form of objects in a pogram list
  6. To eval a program list, control is passed to the first object and the remainder is treated as its message

Um diese Ideen umzusetzen, entwickelte er die Programmiersprache Smalltalk. Somit kann man durchaus wissenschaftlich sauber argumentieren, dass „eigentlich“ die Programmiersprache Smalltalk die Definition von Objektorientierung ist. Nun ist es so, dass die meisten Designer von Programmiersprachen den Begriff „Objektorientierung“ für etwas verwenden, was wenig mit Alan Kays Definition gemein hat. Er selbst schreibt dazu (Quelle: Alan Kay - Wikiquote [visited 2019-10-26T11:38:24Z]):

„Actually I made up the term ‘object-oriented’, and I can tell you I did not have C++ in mind.”.

Nach meiner persönlichen Beobachtung gibt es drei „Schulen“ unter Entwicklern von Programmiersprachen, was sie unter „Objektorientierung“ in Bezug auf ihre Programmiersprache verstehen wollen: