1. Startseite
  2. »
  3. Allgemeine Themen & Trends
  4. »
  5. IT
  6. »
  7. Prozedurale vs. objektorientierte Programmierung

Prozedurale vs. objektorientierte Programmierung

IT

Prozedurale vs. objektorientierte Programmierung

Objektorientierte Programmierung ist ein Programmierparadigma, das die Abstraktion (in Form von Klassen und Objekten) nutzt, um Modelle auf der Grundlage der realen Umgebung zu erstellen. Anders als die prozedurale Programmierung verwendet eine objektorientierte Anwendung eine Sammlung von Objekten, die durch die Übergabe von Nachrichten an Anforderungsdienste kommunizieren. Objekte sind in der Lage, Nachrichten zu übergeben, Nachrichten zu empfangen und Daten zu verarbeiten.

Ziel der objektorientierten Programmierung ist es, die Flexibilität und Wartbarkeit von Programmen zu erhöhen. Die prozedurale Programmierung verfolgt einen anderen Ansatz, hier steht der Code im Vordergrund. Da Programme in der objektorientierten Entwicklung modular sind, können sie einfacher zu entwickeln und nach der Entwicklung einfacher zu verstehen sein.

Objektorientierte Programmierung vs. Prozedurale Programmierung

Programme bestehen aus Modulen, die Teil eines Programms sind, das separat kodiert und getestet werden kann, und dann zu einem vollständigen Programm zusammengestellt werden. Die prozedurale Programmierung in Sprachen wie zum Beispiel C nutzt für diese Module Prozeduren, bei denen eine Prozedur eine Folge von Anweisungen ist. In C sind Prozeduren beispielsweise eine Folge von zwingenden Anweisungen. Hierzu zählen zum Beispiel Schleifen, Test, Zuweisungen sowie Aufrufe von Unterprozeduren. Diese Prozeduren sind bestimmte Funktionen, die definierte Argumente abbilden, um Anweisungen zurückzugeben.

Die prozedurale Programmierung verwendet als Entwurfsmethode das „Top-Down-Design“. Hier beginnst Du mit einem Problem (Prozedur) und zerlegst das Problem dann systematisch in Teilprobleme (Teilprozeduren). Dies wird als funktionale Zerlegung bezeichnet, die so lange andauert, bis ein Teilproblem einfach genug ist, um durch die entsprechende Teilprozedur gelöst zu werden. Prozedurale Programmierung hat zur Folge, dass die Softwarepflege komplex und zeitaufwendig sein kann. Wenn Du Änderungen an der Hauptprozedur vornehmen musst, können diese Änderungen in die Unterprozeduren der Hauptprozedur und deren Unterprozeduren kaskadiert werden, wobei die Änderung alle Prozeduren in der Pyramide beeinflussen kann.

In der Webentwicklung und SPS Programmierung stößt die prozedurale Programmierung an ihre Grenzen. Eine Alternative ist die objektorientierte Programmierung. Die objektorientierte Programmierung soll die Schwierigkeiten, wie sie für die prozedurale Programmierung bekannt sind, beheben. Objektorientierte Programmierung nutzt als die Hauptmodule eines Programms eher Klassen als Prozeduren. Mit dem objektorientierten Ansatz kannst Du Klassen und Objekte erstellen, die reale Objekte modellieren. Dieser Ansatz ist für Softwareentwickler in der Webentwicklung und vielen anderen Gebieten besser geeignet.

Objektorientierte Programmierung: Klassen und Objekte

Eine Klasse ist eine Sammlung von Objekten, die gemeinsame Eigenschaften, Operationen und Verhaltensweisen haben. Eine Klasse ist eine Kombination aus Zustand (Daten) und Verhalten (Methoden). In objektorientierten Sprachen ist eine Klasse ein Datentyp. Objekte sind Instanzen dieses Datentyps. Klassen sind also Prototypen, aus denen Objekte erstellt werden.

Zum Beispiel kannst Du eine Klasse Mensch programmieren, die eine Sammlung aller Menschen der Welt ist. Menschen haben einen Zustand, wie Größe, Gewicht und Haarfarbe. Sie besitzen auch Verhaltensweisen wie Essen, Gehen und Sprechen. Die gesamten Zustände sowie das Verhalten einer Person ist in der Klasse Mensch verkapselt (enthalten).

Ein Objekt ist eine Instanz einer Klasse. Objekte sind Einheiten der Abstraktion. Ein Objekt kann mit anderen Objekten über Nachrichten kommunizieren. Ein Objekt übergibt eine Nachricht an ein anderes Objekt, was zum Aufruf einer Methode führt. Objekte führen dann die Aktionen aus, die erforderlich sind, um eine Antwort vom System zu erhalten.

Reale Objekte besitzen alle zwei Eigenschaften: Zustand und Verhalten. Eine Möglichkeit, objektorientiert zu denken, besteht darin, den Zustand und das Verhalten von realen Objekten zu identifizieren. Die Komplexität der Objekte kann unterschiedlich sein, einige Objekte haben mehr Zustände und komplexere Verhaltensweisen als andere Objekte. Vergleiche den Zustand und das Verhalten eines Fernsehers mit dem Zustand und dem Verhalten eines Autos.

Beim Programmieren sind Software-Objekte konzeptionell den realen Objekten ähnlich. Ein Objekt speichert seinen Zustand in Feldern und es zeigt sein Verhalten durch seine Methoden an.

Die objektorientierte Programmierung besitzt als Grundprinzip die Kapselung, das Verstecken eines internen Zustands eines Objekts und die Anforderung, dass alle Interaktionen mit den Objektmethoden durchgeführt werden.

Beispiel für Klassen und Objekte – Klasse Fahrrad

Es gibt viele Arten von Fahrrädern, aber jedes Fahrrad wurde nach dem gleichen Konzept (oder Prototyp) gebaut und jedes Fahrrad enthält die gleichen Komponenten. Dein Fahrrad (ein bestimmtes Fahrradobjekt) ist eine Instanz einer Klasse von Objekten, die als Fahrräder bezeichnet werden. Beim Programmieren beschreibst Du den Zustand und das Verhalten eines Fahrrads.

Felder und Methoden

Objekte in einer Klasse haben eine Reihe von gemeinsamen Eigenschaften. Felder sind die in einer Klasse enthaltenen (gekapselten) Variablen, die zur Darstellung dieser Eigenschaften verwendet werden. So kann beispielsweise die Klasse Student ein ganzzahliges Feld für das Abschlussjahr oder ein Zeichenkettenfeld für den Nachnamen des Studenten besitzen.

Bevor Felder in einem Objekt bewertet werden können, muss das Objekt zunächst konstruiert bzw. angelegt werden. In Java (als Beispiel für eine OO-Sprache) wird eine spezielle Funktion namens Konstruktor verwendet, um eine Instanz einer Klasse zu erzeugen und zu initialisieren. Der Befehl:

neuer Student();

erzeugt eine Instanz der Klasse Student, d. h. ein Student Objekt. Jede Klasse hat Operationen, die mit ihr verbunden sind. Jedes Studentenobjekt hat eine Reihe von unterschiedlichen Verhaltensweisen, wie zum Beispiel Lernen, Schlafen, Arbeiten. Die einer Klasse zugeordneten Operationen sowie die Attribute einer Klasse werden innerhalb der Klasse gekapselt. Diese Operationen werden als Methoden einer Klasse bezeichnet. Methoden sind Funktionen, die die Operationen repräsentieren, die einer bestimmten Klasse zugeordnet sind. Felder und Methoden werden als Klassenmitglieder bezeichnet.

Verkapselung

Die Fähigkeit eines Objekts, seine Daten und Methoden vor dem Rest der Welt zu verstecken ist eines der Grundprinzipien der OOP. Da Objekte Daten und Implementierung kapseln, kann der Benutzer eines Objekts das Objekt als Black Box betrachten, die Dienste bereitstellt. Instanzvariablen und -methoden können hinzugefügt, gelöscht oder geändert werden. Aber solange die vom Objekt bereitgestellten Dienste gleich bleiben, kann Code das Objekt weiterhin verwenden, ohne ihn neu programmieren zu müssen.

Kopplung ist der Grad, in dem ein Modul (Klasse) von anderen Klassen abhängt. Bei einem guten Design solltest Du versuchen, die Kopplung zu minimieren. Klassen sollten in sich geschlossene Einheiten sein, die eine geringe Abhängigkeit von anderen Klassen aufweisen. Das Verstehen und Verwenden einer Klasse sollte kein Verständnis einer anderen Klasse erfordern. Bei niedriger Kopplung erfordert eine Änderung in einem Modul keine Änderungen in anderen Modulen.

Im Zusammenhang mit dem Konzept der Kopplung steht das Verstecken von Informationen. Information Hiding schützt andere Teile des Programms vor Änderungen, wenn die Implementierung geändert wird. Der Schutz einer Implementierung beinhaltet die Bereitstellung einer stabilen Schnittstelle, über die andere Klassen auf die von der Klasse bereitgestellten Dienste zugreifen können. Häufig werden Verkapselung und Informationsverschleierung austauschbar eingesetzt.

Beispiel: Auto und Fahrer

Kohäsion ist das Maß innerhalb eines Moduls (Klasse) dafür, wie gut die Mitglieder zusammenarbeiten, um eine bestimmte Funktionalität bereitzustellen. Der Zusammenhalt wird daran gemessen, wie stark die Verantwortlichkeiten einer einzelnen Klasse miteinander verbunden und fokussiert sind. Bei gutem Programmieren sollte die Kohäsion maximiert werden. Der Zusammenhalt wird verringert, wenn die Methoden einer Klasse wenig gemeinsam haben oder Methoden viele Aktivitäten durchführen.

Wenn die Kohäsion gering ist, können Module schwer verständlich sein, die Wartung ist schwierig, weil Änderungen viele Module betreffen können, und Module können nicht wiederverwendet werden, weil es unwahrscheinlich ist, dass eine andere Anwendung eine Verwendung für die zufällige Gruppierung von Funktionen hat.

Beispiel: Herd mit eingebautem Radio und Wecker.

Ein gut durchdachtes System sollte die Kohäsion maximieren und die Kopplung minimieren.

Vererbung

Mehrere Klassen können einige der gleichen Merkmale teilen und Dinge miteinander gemeinsam haben, aber auch bestimmte Eigenschaften besitzen, die sie voneinander unterscheiden. Objektorientierte Programmiersprachen ermöglichen es Klassen, häufig verwendete Zustände und Verhaltensweisen von anderen Klassen zu übernehmen.

Klassen in Java kommen in Vererbungshierarchien vor. Diese Hierarchien bestehen aus übergeordneten Kindbeziehungen zwischen den Klassen. Die Vererbung wird verwendet, um eine übergeordnete Klasse zu spezialisieren und um eine Unterklasse zu erstellen. Die Vererbung ermöglicht es dem Softwareentwickler auch, Merkmale von Klassen in einem gemeinsamen übergeordneten System zu kombinieren.

Vorteile der objektorientierten Programmierung für Softwareentwickler

  1. Modularität:
    Der Quellcode einer Klasse kann unabhängig vom Quellcode anderer Klassen geschrieben und gepflegt werden. Einmal erstellt, kann ein Objekt einfach innerhalb des Systems weitergegeben werden.
  2. Informationen verbergen:
    Durch die Interaktion nur mit den Methoden eines Objekts bleiben die Details seiner internen Implementierung der Außenwelt verborgen.
  3. Wiederverwendung von Code:
    Wenn bereits eine Klasse existiert, kannst Du Objekte aus dieser Klasse in Deinem Programm verwenden. Auf diese Weise können Softwareentwickler komplexe, aufgabenspezifische Objekte implementieren, testen und debuggen, die Sie dann in Ihrem eigenen Code verwenden können.
  4. Einfaches Debuggen:
    Wenn sich ein bestimmtes Objekt als Problem herausstellt, kannst Du es einfach aus Deiner Anwendung entfernen und ein anderes Objekt als Ersatz verwenden. Dies ist analog zur Behebung mechanischer Probleme in der realen Welt. Wenn eine Schraube bricht, tauscht Du nur diese aus, nicht die gesamte Maschine.

Zusammenfassung der objektorientierten Konzepte

  • Alles ist ein Objekt.
  •  Die (SPS) Programmierung erfolgt durch Objekte, die miteinander kommunizieren und verlangen, dass andere Objekte Aktionen ausführen. Objekte kommunizieren, indem sie Nachrichten senden und empfangen. Eine Nachricht ist eine Aufforderung zum Handeln, gebündelt mit allen Argumenten, die zur Erfüllung der Aufgaben erforderlich sind.
  • Jedes Objekt hat seinen eigenen Speicher, der aus anderen Objekten besteht.
  • Jedes Objekt ist eine Instanz einer Klasse. Eine Klasse stellt einfach eine Gruppierung ähnlicher Objekte dar, wie zum Beispiel ganze Zahlen oder Listen.
  • Die Klasse ist die Zusammenfassung der mit einem Objekt verbundenen Verhalten. Das heißt, dass alle Objekte, die Instanzen derselben Klasse sind, die gleichen Aktionen durchführen können.
  • Die Klassen sind in einer einzeln verwurzelten Baumstruktur organisiert, der sogenannten Vererbungshierarchie. Speicher und Verhalten, die mit Instanzen einer Klasse verbunden sind, stehen automatisch jeder Klasse zur Verfügung, die mit einem Nachkommen in dieser Baumstruktur verbunden ist.

Fazit

Die objektorientierte Programmierung besitzt eine Reihe von Vorteilen. Anders als die prozedurale Programmierung stehen hier nicht die programminternen Prozeduren im Mittelpunkt, sondern Objekte. Diese können miteinander kommunizieren und ihre Eigenschaften sind vererbbar. Besserer Code und einfachere Wartung zeichnen die objektorientierte Programmierung aus.

Ähnliche Beiträge