OOP vs. Funktionale Programmierung: Ein Vergleich

OOP vs Functional Programming

Inhalte

Softwareentwicklungsprozesse stellen Programme bereit. Dabei wird von Gegebenheiten in der realen Welt ausgegangen, die in eine Programmiersprache übersetzt werden sollen. Dabei kann es um Berechnungen, Computerspiele, die Verwaltung von Kundendaten oder den Inhalt von Tabellen gehen.

In diesem Beitrag erhältst Du Informationen über die Vorzüge und Nachteile der funktionalen (FP) sowie der objektorientierten Programmierung (OOP). In diesem Zusammenhang werden auch folgende Fragen beantwortet: Wann findet welche Programmierung Anwendung? Gibt es einen eindeutigen Favoriten oder umfasst jede Programmierung einen genau definierten Bereich, innerhalb dessen sie konkurrenzlos ist?

Was ist Funktionale Programmierung?

Funktionale Programmierungen sind bereits seit 1930 bekannt und kommen überwiegend im technischen und mathematischen Bereich zum Einsatz. Der Grund dafür liegt in der Vielzahl von Möglichkeiten zur algebraischen Programmsynthese und Programmtransformation. Hinzu kommt der Verzicht auf Seiteneffekte, außerdem müssen keine inneren Zustände des Berechnungsprozesses berücksichtigt werden.

Die Funktionale Programmierung basiert auf dem Prinzip von Funktionen. Jede Funktion ist eine spezialisierte und wiederholt nutzbare Einheit, die in Vielzahl zu einem Programm führt, das Lösungen für umfangreiche Aufgaben, wie Berechnungen oder Abläufe, erstellt. Dabei bilden die Funktionen eine hierarchische Struktur, durch deren Zusammensetzung komplexe Aufgaben gelöst werden können.

Die Programme werden auf einem mathematischen Niveau formuliert. Da heißt, dass sie nicht vom Aufbau und Zustand einer Maschine abhängen und daher zeitlos verwendet werden können.

KEY POINTS

  • Softwareentwicklung übersetzt reale Welt in Programme.

  • Funktionale und objektorientierte Programmierung verfolgen dasselbe Ziel auf unterschiedliche Weisen.

  • Keine universelle Programmiersprache, Auswahl hängt von Anforderungen ab.

  • Kombination von FP und OOP möglich, abhängig von der Programmiersprache und Anwendung.

Was ist Objektorientierte Programmierung (OOP)?

In der OOP lassen sich definierte Methoden oder Klassen objektübergreifend einsetzen. Sie beruht auf Daten und Objekten, im Gegensatz zur funktionalen Programmierung, die auf Funktionen und Logik beruht. Hier werden Objekte als Datenfelder behandelt, denen eindeutige Attribute und Verhaltensweisen zugewiesen werden.

Die OOP beinhaltet folgende Grundsätze:

  1. Kapselung: Alle Informationen bleiben innerhalb des Objektes enthalten. Andere Objekte können haben kein Zugriffsrecht auf diese Klasse. Dadurch entsteht eine hohe Sicherheit des Programms und eine Datenfälschung kann in hohem Maß ausgeschlossen werden.

  2. Abstraktion: Unnötige Implementierungscode bleiben anderen Objekten verborgen. Allerdings kann eine abgeleitete Klasse erweitert werden. So lassen sich nachträglich Änderungen vornehmen.

  3. Vererbung: Objektorientierte Programmierung bietet die Möglichkeit, dass Klassen Codes von anderen Klassen wiederverwenden können. Dieses Vorgehen sorgt für Genauigkeit und eine kurze Entwicklungszeit, denn die gemeinsame Logik kann wiederverwendet werden, während wird eine Hierarchie beibehalten.

  4. Polymorphismus: Hier wird die Notwendigkeit einen Code zu duplizieren, verringert. Durch das Programm wird bestimmt, welche Verwendung aus einer übergeordneten Klasse für das Objekt erforderlich ist. Die Funktionalität einer sogenannten Elternklasse wird auf eine Kindklasse erweitert.

Zu den beliebtesten, reinen OOP-Sprachen zählen beispielsweise Ruby, JADE, Scala und Emerald.

Vorteile OOP

  • Die Kapselung ermöglicht eine erleichterte Fehlersuche.

  • Zeitersparnis durch die Vererbung, bei der derselbe Code übernommen werden kann und nicht erneut geschrieben werden muss.

  • Abstraktion und Kapselung sorgen für mehr Sicherheit, eine leichtere Wartung der Software sowie den Schutz der Internetprotokolle.

  • Programme lassen sich leichter erweitern, da Systemfunktionalitäten unabhängig voneinander implementiert werden können.

  • Durch die Code-Verschlankung lassen sich Wiederholungen, die zu Programmstörungen führen, vermeiden.
OOP Vorteile

Funktionale Programmierung vs. OOP: Vor- und Nachteile

Der Wandel der Zeit bringt auch im Bereich des Programmierens Trends hervor. Deshalb setzen unzählige Webentwicklungen und Computerspiele mittlerweile auf die objektorientierte Programmierung. Dieses Paradigma beschreibt Elemente nicht als Funktion. Hier geht es um Objekte. Der Vorteil dieser Vorgehensweise liegt in der Möglichkeit, dass sich alle Komponenten erneut verwenden lassen. Ebenso sind Erweiterungen möglich.

Der Vorteil einer funktionalen Programmierung liegt in der Tatsache, dass der funktionale Code wesentlich übersichtlicher erscheint, was besonders in Bereichen wichtig ist, in denen ein verifizierbarer und testbarer Code benötigt wird. 

Du weißt nicht, wie du dich entscheiden sollst? Oft ist es gar nicht notwendig, sich für eine funktionale oder objektorientierte Programmierung zu entscheiden. Beide Programmierstile werden mittlerweile von vielen Programmiersprachen unterstützt. Deshalb lassen sich die Vorzüge beider Paradigmen nutzen, indem man sie kombiniert, wo es möglich ist. Beispielsweise unterstützen Scala, F# und JavaScript objektorientierte Programmierungen als auch funktionale Programmiermuster.

Programmierparadigmen

Allgemein formuliert lässt sich unter einem Paradigma eine bestimmte Sicht- oder Herangehensweise verstehen. Bezogen auf das Programmieren lassen sich unter dem Begriff Paradigma der grundlegende Stil und die damit berücksichtigten Prinzipien verstehen, mit denen ein Programm entwickelt wurde.

Programmierparadigmen werden in zwei Hauptgruppen eingeteilt. Die imperative und die deklarative Programmierung.

  • Imperative Programmierung: Die Software arbeitet Anweisungen in einer vorgegebenen Reihenfolge ab. Dieses Paradigma findet Anwendung in den Programmiersprachen Ada und C.

  • Deklarative Programmierung: Hier wird das Programmierparadigma einer imperativen Programmierung umgekehrt. Das bedeutet, dass das Endprodukt bei der Programmierung festgelegt wird, nicht der Lösungsweg. Hier geht es im Gegensatz zur imperativen Programmierung nicht darum, WIE man zum Ergebnis kommt. Der Ansatz liegt auf der Frage nach dem Problem und was das Ergebnis sein soll. Zu den passenden Programmiersprachen für dieses Paradigma gehören beispielsweise Haskell und LISP.

Untergeordnete Paradigmen

Beide Hauptgruppen unterteilen sich in weitere Paradigmen. Beispielsweise gehören die prozedurale und die objektorientierte Programmierung zur imperativen Programmierung. Die deklarative Programmierung unterteilt sich dagegen in die funktionale und die logische Programmierung.

Die meisten Programmiersprachen können gleichzeitig mit verschiedenen Paradigmen arbeiten. Daher musst Du Dich nicht unbedingt auf ein Programmierparadigma festlegen. Hier entscheiden Deine Vorlieben und die konkrete Aufgabe über die Wahl des passenden Paradigmas.

ElevateX Logo

Suchst Du nach Softwareentwicklern?

Objekte und Klassen

Objekte

Objekte, die auf dem Bildschirm erscheinen, lassen sich mit Objekten des realen Lebens vergleichen, beispielsweise Häuser, Bäume oder Mobiliar. Diese Dinge können aus weiteren Objekten bestehen, wie beispielsweise ein Schrank aus Türen, Fächern, Schubkästen und Spiegelfronten zusammengesetzt sein kann. Das Objekt entsteht aus einer inhaltlich zusammengehörigen Datenmenge, die aufgrund eines konkreten „Bauplans“ entsteht. Das bedeutet, dass das konkrete Objekt aus Klassen hervorgeht oder in diese unterteilt werden kann. Dabei kommen Farben, Formen oder Verhaltensmuster ins Spiel, die einem Objekt charakteristische Merkmale verleihen.

Klassen 

Klassen gehören zu den Grundbausteinen innerhalb der objektorientierten Programmierung. Sie stellen die sogenannte Wiederverwertbarkeit sicher, wodurch ein Code nur einmal geschrieben werden muss. Das Vorgehen lässt sich in der realen Welt mit dem Einsatz eines Schnittmusterbogens aus Papier vergleichen. Der Schnittmusterbogen stellt das Objekt dar, das sich modifizieren lässt. Für ein konkretes Modell (Kleid, Hose, Jacke) sind die Einzelteile in verschiedenen Größen abgebildet, es gibt Stoffalternativen und unterschiedliche Nähanleitungen entsprechend der Materialwahl. Die Wiederverwendung eines Schnittmusterbogens spart Zeit und Material. Dieser Umstand lässt sich auch auf das Programm übertragen, denn Klassen lassen sich mit nur einem Code erstellen, der immer wieder genutzt werden kann.

Anders ausgedrückt sind Klassen innerhalb der objektorientierten Programmierung Vorlagen, mit denen Objekte nach demselben Muster immer wieder erstellt werden können. Sie fungieren wie ein Bauplan, der die Funktionalitäten von Objekten beinhaltet.

Veränderliche und unveränderliche Objekte und Klassen 

Die meisten Softwarefehler lassen sich darauf zurückführen, dass ein falscher Wert eingegeben wurde. Beispielsweise erfolgten Berechnungen erst nach einer Prüfung oder fehlerhafte Werte wurden nicht neu bestimmt. Deshalb ist die Veränderlichkeit in Programmiersprachen Normalität, während die Regel der Unveränderlichkeit eher die Ausnahme darstellt.

Veränderliche Objekte lassen sich nach ihrer Erstellung erneut bearbeiten, unveränderliche Objekte können nicht auf diese Weise verändert werden. Bei einem veränderlichen Objekt lassen sich beispielsweise die Werte von Variablen im Nachhinein ändern, ohne dass das gesamte Objekt neu programmiert werden muss. Musst Du hingegen ein unveränderliches Objekt ändern, geht das nur über eine erneute Programmierung des Objektes.

Fazit

Funktionale Programmiersprachen liegen zur Zeit weniger im Trend. Möglicherweise liegt das auch am hohen mathematischen Niveau, auf dem funktionale Programmiersprachen beruhen. Java und C++ stehen dagegen für objektorientierte Programmiersprachen, die derzeit populär sind. Wie auch im normalen gibt es kein allgemeines Rezept, mit dem sich jede Lebenssituation bewältigen lässt. Die immer größere Spezifizierung sorgt dafür, dass im er mehr Möglichkeiten existieren. Hier muss anhand des Projektes separat entschieden werden, welches Paradigma zum Einsatz kommen sollte.

  • Funktionale Programmierung (FP) wird hauptsächlich im technischen und mathematischen Bereich eingesetzt.

  • Objektorientierte Programmierung (OOP) wird für die Verarbeitung von Daten und Objekten in Software verwendet.

Es gibt keinen eindeutigen Favoriten. Beide Paradigmen haben ihre Vor- und Nachteile, und die Wahl hängt von den spezifischen Anforderungen des Projekts ab.

Ja, viele Programmiersprachen unterstützen sowohl objektorientierte als auch funktionale Programmiermuster, was es ermöglicht, die Vorzüge beider Paradigmen zu nutzen, wo es sinnvoll ist. Einige Beispiele für solche Sprachen sind Scala, F# und JavaScript.

Informiert bleiben?

Nie mehr Neuigkeiten verpassen.
Folge uns auf LinkedIn oder melde dich für den Newsletter an.

Sören Elser ElevateX GmbH

Dein Ansprechpartner

Sören Elser

Co-Gründer ElevateX GmbH und dein Ansprechpartner für den Einsatz von Freelancern. 

Baue auf Expertise.
Arbeite mit qualifizierten Experten.