prozedurale vs. objektorientierte Programmierung

Objektorientierte Programmierung (OOP) und prozedurale Programmierung sind zwei Programmierparadigmen.

Objektorientierte Programmierung (OOP) und prozedurale Programmierung sind zwei Programmierparadigmen. Ein Programmierparadigma ist ein grundlegender Stil beziehungsweise Herangehensweise der Computerprogrammierung. Diese unterscheiden sich darin, wie verschiedene Elemente des Programms konzeptionell dargestellt und umgesetzt werden, aber auch im Hinblick darauf, wie die zum Lösen von Problemen erforderlichen Schritte definiert sind.

Wie der Name schon sagt, konzentriert sich OOP auf das Darstellen von Problemen unter Verwendung quasi realer Objekte, denen ein bestimmtes Verhalten zueigen ist, während die prozedurale Programmierung Problemlösungen unter Verwendung von Prozeduren abbildet. Prozeduren sind dabei zusammengefasste Anweisungen, die in einer bestimmten Reihenfolge ablaufen. Es gibt Programmiersprachen, die Schlüsselaspekte von OOP (OOP-Sprachen genannt), Prozeduraler Programmierung (Prozedursprachen) oder auch von beiden Konzepten unterstützen. Im Grunde sind OOP und Prozedural zwei Möglichkeiten zur Darstellung von Problemlösungen, dabei spielt es zunächst keine Rolle, welche Sprache verwendet wird. Mit anderen Worten: OOP-Sprachen können für prozedurales Programmieren verwendet werden, während prozedurale Sprachen – manchmal mit einiger Mühe – für OOP verwendet werden können.

Was ist prozedurale Programmierung?

Prozedurales Programmieren ist eine Art des Programmierens bei der angestrebt wird, ein bestimmtes Problem zu lösen, indem man die Menge der dazu benötigten Schritte und deren Abfolge bestimmt, um das gewünschte Ergebnis oder den gewünschten Zustand zu erreichen. Eines der Hauptkonzepte der prozeduralen Programmierung ist der Prozeduraufruf. Eine Prozedur, die auch als Subroutine, Methode oder Funktion bezeichnet wird, enthält eine geordnete Liste von auszuführenden Anweisungen. Eine Prozedur kann jederzeit während der Ausführung durch eine andere Prozedur oder für sich selbst aufgerufen werden. Beispiele für typische prozedurale Programmiersprachen sind C und Pascal.

Programme bestehen oft aus Modulen, die Teile eines Programms sind, die separat codiert und getestet werden können und dann zu einem vollständigen Programm zusammengesetzt werden. In prozeduralen Sprachen (etwa C) sind diese Module Prozeduren, wobei eine Prozedur eine Abfolge von Anweisungen ist. In C zum Beispiel sind Prozeduren eine Folge von imperativen Anweisungen, wie Zuweisungen, Tests, Schleifen und Aufrufe von Unterprozeduren. Diese Prozeduren sind Funktionen, die Argumente entgegennehmen und letztendlich abhängige Rückgabewerte liefern.

Eine Alternative zur prozeduralen Programmierung ist die objektorientierte Programmierung. Die objektorientierte Programmierung soll die Schwierigkeiten, die bei der prozeduralen Programmierung entstehen können, reduzieren. In der objektorientierten Programmierung sind die Hauptmodule in einem Programm Klassen und nicht Prozeduren. Mit dem objektorientierten Ansatz können Entwickler Klassen und Objekte erstellen, die reale Objekte modellieren.

Was ist objektorientierte Programmierung?

Objektorientierte Programmierung ist ein Programmierparadigma, das in erster Linie auf Abstraktion (in Form von Klassen und Objekten) zurückgreift, um auf der realen Welt basierende Modelle zu erstellen. Eine objektorientierte Anwendung verwendet eine Anzahl von Objekten, die kommunizieren, indem sie Nachrichten an entsprechende Funktionen zur Annahme solcher übergeben. Objekte können Nachrichten weiterleiten, Nachrichten empfangen und Daten verarbeiten. Ziel der objektorientierten Programmierung ist es, die Flexibilität und die Wartbarkeit von Programmen zu erhöhen. Da Programme, die mit einer OO-Sprache erstellt wurden, modular sind, können sie einfacher verteilt entwickelt und nach der Entwicklung einfacher verstanden werden.

Bei OOP liegt der Fokus darauf, sich mit dem zu lösenden Problem bezugnehmend auf Elemente der realen Welt zu befassen und das Problem in Bezug auf diese Objekte und ihr Verhalten darzustellen. Ein Objekt ist eine Datenstruktur, die einem realen Objekt sehr ähnlich ist. Objekte enthalten Datenfelder und Methoden, die Attribute und das Verhalten realer Objekte darstellen. Es gibt mehrere wichtige OOP-Konzepte wie die Datenabstraktion, Kapselung, Polymorphie, Messaging, Modularität und Vererbung. Einige populäre OOP-Sprachen sind Java und C# – abgesehen davon, dass es mindestens eine übergeordnete “Rahmen-Klasse” (“main”) geben muss können diese jedoch prinzipiell auch zur prozeduralen Programmierung verwendet werden.

Objekte der realen Welt teilen alle zwei Eigenschaften: Sie alle haben Zustand und Verhalten. Eine objektorientierte Denkweise besteht darin, den Zustand und das Verhalten realer Objekte zu identifizieren. Die Komplexität von Objekten kann unterschiedlich sein, manche Objekte haben mehr mögliche Zustände und komplexere Verhaltensweisen als andere Objekte. Software-Objekte sind realen Objekte konzeptionell ähnlich. Ein Objekt speichert seinen Zustand in Datenfeldern und definiert Verhaltensweisen über seine Methoden.

Klassen und Objekte

Eine Klasse definiert die Gesamtheit von Objekten einer bestimmten Art, mit gemeinsamen Eigenschaften, Operationen und Verhalten. In objektorientierten Sprachen ist eine Klasse ein Datentyp und Objekte sind Instanzen dieses Datentyps. Mit anderen Worten, Klassen sind Baupläne oder Prototypen, aus denen konkrete Objekte erstellt werden.

Wir können zum Beispiel eine Klasse “Mensch” entwerfen, die eine Sammlung aller Menschen auf der Welt ist. Menschen haben einen Zustand der von Eigenschaften wie Größe, Gewicht und Haarfarbe bestimmt wird. Sie haben auch gemeinsame Verhaltensweisen, wie Gehen, Sprechen, Essen. Der gesamte Zustand und das Verhalten eines Menschen ist innerhalb der menschlichen Klasse eingekapselt (enthalten). Ein Objekt ist eine Instanz einer Klasse. Objekte sind Einheiten der Abstraktion – Zur Laufzeit kann ein Programm theoretisch zu beliebigen Zeitpunkten und in beliebiger Anzahl nach dem Bauplan der Klasse Mensch neue Mensch-Objekte erzeugen. Ein Objekt kann über Nachrichten mit anderen Objekten kommunizieren; Ein Objekt übergibt eine Nachricht an ein anderes Objekt, was zum Aufruf einer Methode führt. Objekte führen dann die Aktionen durch, die erforderlich sind, um eine Antwort vom System zu erhalten.

Gegenüberstellung und Besonderheiten

Der Hauptunterschied zwischen OOP und prozeduraler Programmierung ist, dass der Schwerpunkt der prozeduralen Programmierung darin liegt, die Programmieraufgabe in eine Sammlung von Variablen und Subroutinen aufzuteilen, während der Fokus von OOP darin besteht, die Programmieraufgabe in “natürliche” Objekte zu zerlegen, die Daten und Methoden kapseln. Der auffälligste Unterschied könnte darin bestehen, dass während der prozeduralen Programmierung Prozeduren verwendet werden, um direkt mit Datenstrukturen zu arbeiten, OOP die Daten und Methoden so miteinander verknüpft, dass ein Objekt mit seinen Merthoden auf eigenen Daten arbeitet und seinen eigenen Zustand verändert. Wenn es um die Nomenklatur geht, werden Prozedur, Modul, Prozeduraufruf und Variable aus der prozeduraler Programmierung im OOP-Kontext gerne als Methode, Objekt, Nachricht und Attribut bezeichnet.

Bei der Planung des Entwurfs eines objektorientierten Programms beginnt ein Entwickler normalerweise mit einer Liste von Klassen, die in das Programm aufgenommen werden müssen. Für ein Notensystem etwa gäbe es Klassen für Benutzer, Klassen, Schulen usw., je nachdem, welche Daten im System gespeichert wurden oder künftig gespeichert werden sollen und wie sich die Daten zueinander verhalten.

Sobald ein Entwickler eine Vorstellung davon hat, welche Klassen in der Anwendung verwendet werden sollen, wird er das System normalerweise mithilfe von Diagrammen wie dem Klassendiagramm zeichnen, um das System zu veranschaulichen. Während dieses Prozesses kann der Entwickler Änderungen am System vornehmen und auf Fehler in der Funktionalität prüfen. Wenn sich der Entwickler an einem Diagramm orientiert, das die benötigten Klassen einschließlich der Funktionen und Methoden beschreibt, werden durch die Visualisierung die Zusammenhänge präsenter und das Identifizieren und Lösen konzeptioneller Probleme gestaltet sich oft einfacher.

Die Entwurfsmethode, die vorwiegend bei der prozeduralen Programmierung verwendet wird, wird als Top Down Design bezeichnet. Hier beginnst Du den Entwurf ausgehend von einem Problem (Vorgehen) und brichst dann das Problem systematisch in Teilprobleme (Teilprozeduren) auf. Dies wird als funktionale Dekomposition bezeichnet, die so lange fortdauert, bis ein Teilproblem einfach genug ist, um durch die entsprechende Unterprozedur gelöst zu werden. Die Schwierigkeit bei dieser Art der Programmierung besteht darin, dass die Wartung der Software schwierig und zeitaufwendig sein kann. Wenn Änderungen an der Hauptprozedur vorgenommen werden (oben), können diese Änderungen auf die Unterprozeduren von Haupt- und Unterprozeduren usw. übergehen, wobei die Änderung sich auf alle Prozeduren in der Pyramide auswirken kann.

Einsatzgebiete/Fazit

Ein Vorteil der objektorientierten Programmierung besteht darin, dass der einmal geschriebene Code künftig vergleichsweise leicht gepflegt und modifiziert werden kann, zum Beispiel weil neue Klassen entworfen werden können, die Eigenschaften und Verhalten von bereits existierenden Klassen erben. Dies verkürzt die Entwicklungszeit erheblich und erleichtert die Anpassung des Programms an eine sich ändernde Umgebung oder neue Anforderungen.

Im Gegensatz zur objektorientierten Programmierung, bei der Objekte und Klassen im gesamten Programm referenziert werden können, müssen die Probleme, die in der prozeduralen Programmierung gelöst werden, während der Ausführung des Programms individuell adressiert werden. Bei der Entwicklung mit prozeduraler Programmierung kann ein Entwickler auch einen völlig anderen Ansatz zum Entwerfen einer Anwendung wählen. Die prozedurale Programmierung erfordert beim Schreiben einer Anwendung einen Top-down-Ansatz. Während ein Entwickler, der objektorientierte Programmierung zum Erstellen von Anwendungen verwendet, das Programm mit wiederverwendbaren Klassen plant, kann ein Entwickler, der prozedurale Programmierung verwendet, das Programm ohne dieses Konzept des “Code-Recyclings” planen. Auch bei der prozeduralen Programmierung ist Planung involviert, erfordert aber einen weniger abstrakten Ansatz. Im Fall eines Bewertungssystems würde das beispielsweise bedeuten, anstatt darüber nachzudenken, welche Klassen oder Objekte mit Funktionen und Methoden verwendet werden müssen, den Fokus darauf zu legen, welche Anweisungen in welcher Reihenfolge abgearbeitet werden sollen, wenn der Code letztendlich ausgeführt wird.

Rückmeldungen