Imperativ/Funktional – Kein Widerspruch zu OOP!

22.06.2011

Zunächst einmal kurze Erläuterungen zu den jeweiligen Programmier-Paradigmen:

  • Bei imperativer Programmierung besteht ein Programm aus einer Folge von Befehlen, die den aktuellen Status des Programms ändern.
  • Funktionale Programmierung hingegen basiert auf der Auswertung von Funktionen, die frei von Seiteneffekten sind.
  • Objektorientierte Programmierung (OOP) wiederum kapselt zusammengehörige Daten und Funktionalität zu Objekten. Programme bestehen aus Nachrichten oder Anfragen, die an diese Objekte geschickt werden.

Ich behaupte: Während die ersten beiden tatsächlich in dem Sinne unverträglich sind, dass ein imperativer Ausdruck niemals funktional sein kann und umgekehrt, ist tritt bei OOP das Gegenteil auf – dort ist jeder Ausdruck gleichzeitig zusätzlich entweder imperativ oder funktional.

Der Beweis ist trivial:

  1. Wenn der Aufruf einer Methode eines Objekts keinen Seiteneffekt hervorruft, d.h. alle bereits existenten Objekte verändern sich dabei nicht, so handelt es sich um einen funktionalen Ausdruck.
  2. Ändert aber der Methodenaufruf den Zustand eines oder mehrerer Objekte, so handelt es sich um einen Befehl, ergo imperative Programmierung.

Damit dürften sich auch Diskussionen, ob funktionale oder objektorientierte Programmierung besser ist, erledigt haben – immerhin kann man auch beides zugleich tun.