Während eines Vorstellungsgesprächs diese Woche wurde ich gefragt „Was ist der Unterschied zwischen funktionaler, objektorientierter und prozeduraler Programmierung“ und um ehrlich zu sein wusste ich nicht wirklich, wie ich auf diese Frage antworten sollte (und es war das erste Mal, dass ich von prozeduraler Programmierung hörte…). Also habe ich heute beschlossen, etwas zu recherchieren und (zu versuchen) zu verstehen, was die Hauptunterschiede sind.
Lassen Sie uns mit einigen Definitionen beginnen:
“ Funktionale Programmierung (FP) ist ein Programmierparadigma – ein Stil zum Aufbau der Struktur und der Elemente von Computerprogrammen -, das die Berechnung als die Auswertung mathematischer Funktionen behandelt und veränderliche Zustände und veränderliche Daten vermeidet.“ – Wikipedia
“ Objektorientierte Programmierung (OOP) ist ein Programmierparadigma, das auf dem Konzept von „Objekten“ basiert, die Daten in Form von Feldern, oft als Attribute bezeichnet, und Code in Form von Prozeduren, oft als Methoden bezeichnet, enthalten können.“ – Wikipedia
“ Die prozedurale Programmierung ist ein von der strukturierten Programmierung abgeleitetes Programmierparadigma, das auf dem Konzept des Prozeduraufrufs basiert. Prozeduren, auch als Routinen, Unterprogramme oder Funktionen bezeichnet, enthalten einfach eine Reihe von auszuführenden Rechenschritten.“ – Wikipedia
Ok, das ist also eine Einführung, aber lassen Sie uns ein wenig mehr ins Detail gehen.
Zuerst, was ist ein Programmierparadigma? Es ist ein Programmierstil, eine Denkweise über die Konstruktion von Software. Ein Programmierparadigma bezieht sich nicht auf eine bestimmte Sprache, sondern eher auf eine Art zu programmieren, eine Methodik. Einige Sprachen machen es einfach, in bestimmten Paradigmen zu schreiben, andere nicht. Weitere Einzelheiten finden Sie im Wikipedia-Artikel.
Lassen Sie uns nun in die drei Programmierparadigmen eintauchen, die uns heute interessieren:
Prozedurale Programmierung (PP), auch bekannt als Inline-Programmierung, verfolgt einen Top-Down-Ansatz. Es geht darum, eine Liste von Anweisungen zu schreiben, die dem Computer Schritt für Schritt sagen, was er tun soll. Sie stützt sich auf Prozeduren oder Routinen.
Bei der objektorientierten Programmierung (OOP) geht es darum, Daten und Verhalten in Objekten zu kapseln. Eine OOP-Anwendung verwendet eine Sammlung von Objekten, die wissen, wie man bestimmte Aktionen durchführt und wie man mit anderen Elementen der Anwendung interagiert. Ein Objekt könnte zum Beispiel eine Person sein. Diese Person hätte einen Namen (das wäre eine Eigenschaft des Objekts) und wüsste, wie sie gehen kann (das wäre eine Methode). Eine Methode in OOP kann als eine Prozedur in PP betrachtet werden, aber hier gehört sie zu einem bestimmten Objekt. Ein weiterer wichtiger Aspekt von OOP sind Klassen. Eine Klasse kann als Blaupause für ein Objekt betrachtet werden.
Bei der funktionalen Programmierung (FP) geht es darum, Daten von Funktion zu Funktion zu Funktion weiterzugeben, um ein Ergebnis zu erhalten. In FP werden Funktionen als Daten behandelt, d.h. man kann sie als Parameter verwenden, sie zurückgeben, Funktionen aus anderen Funktionen aufbauen und eigene Funktionen erstellen. Funktionen in FP müssen reine Funktionen sein, sie sollten keinen gemeinsamen Zustand haben, und Seiteneffekte und Daten sollten unveränderlich sein. Eine reine Funktion ist eine Funktion, die bei der gleichen Art von Eingabe immer die gleiche Ausgabe zurückgibt und nicht von einem lokalen oder globalen Zustand abhängig ist. Ein gemeinsamer Zustand ist ein Zustand, der von mehr als einer Funktion oder mehr als einer Datenstruktur gemeinsam genutzt wird. Um die Auswirkungen einer Funktion zu verstehen, muss man bei einem gemeinsam genutzten Zustand also alle Details jeder gemeinsam genutzten Variablen kennen. Dies erhöht die Komplexität und verringert die Modularität.