By Wolfgang Keller
Originally published 2019-10-26
Last modified 2020-06-09
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 Informatik-Studenten und -Absolventen) überhaupt 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 diesem Thema sein als der Erfinder selbst), definierte diesen durch folgende sechs Ideen (Quelle: The Early History Of Smalltalk [visited 2019-10-26T11:10:46Z]):
- „Everything is an object
- Objects communicate by sending and receiving messages (in terms of objects)
- Objects have their own memory (in terms of objects)
- Every object is an instance of a class (which must be an object)
- The class holds the shared behavior for its instances (in the form of objects in a pogram list
- 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:
Message Passing: Es gibt auch Anhänger der Meinung, dass die „wahre Essenz“ von dem, was Objektorientierung ausmacht, darin besteht, dass Objekte einander Nachrichten senden (Idee 2 von Alan Kays Liste). Mir ist bewusst, dass diese Auffassung deutlich weiter entfernt von dem ist, wie der Begriff „Objektorientierung“ in der Praxis meist verwendet wird. Allerdings scheint Alan Kay selbst diesem Verständnis durchaus positiv gegenüberzustehen (Quelle: Dr. Alan Kay on the Meaning of "Object-Oriented Programming" [visited 2019-10-26T11:57:10Z]):
„OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.”.
Die Organisation von Computerprogrammen als miteinander kommunizierende Prozesse ist ein zentrales Merkmal der Programmiersprache Erlang.