Vergleich von Funktionaler Programmierung, Imperativer Programmierung und Objektorientierter Programmierung

Da Oracle Corporation einige funktionale Konstrukte in Java SE 8 eingeführt hat, sind heutzutage die meisten Interviewer daran interessiert, einige Fragen zur funktionalen Programmierung zu stellen. Als Java/Groovy/Scala-Entwickler oder als Entwickler für funktionale Programmierung sollten wir die folgenden Fragen und Antworten lernen, um Interviews erfolgreich zu bestehen:

  1. Was ist funktionale Programmierung?
  2. Was sind die „Vor- und Nachteile“ der funktionalen Programmierung?
  3. Was sind die Unterschiede zwischen funktionaler Programmierung und imperativer Programmierung?
  4. Was sind die Unterschiede zwischen funktionaler Programmierung und objektorientierter Programmierung?
  5. Was sind die Unterschiede zwischen funktionaler Programmierung, imperativer Programmierung (IP) und objektorientierter Programmierung?
  6. Was sind die Hauptvorteile der funktionalen Programmierung gegenüber imperativer Programmierung oder objektorientierter Programmierung?
  7. Wann sollte funktionale Programmierung verwendet werden?
  8. Wann sollte objektorientierte Programmierung verwendet werden?
  9. Was sind die Nachteile von OOP?
  10. Was sind die Nachteile von OOP-Vererbung?
    … Und mehr

In diesem Beitrag werden wir nacheinander die folgenden drei populären Programmierparadigmen diskutieren und auch die obigen Fragen beantworten:

  1. Funktionale Programmierung (FP)
  2. Imperative Programmierung (IP)
  3. Objektorientierte Programmierung (OOP)

Was ist funktionale Programmierung?

In einfachen Worten ist Funktionale Programmierung (FP) eines der beliebten Programmierparadigmen, das Berechnungen wie mathematische Funktionen ohne Zustandsänderung und Datenmutation durchführt. In der funktionalen Programmierung sind Funktionen Kandidaten erster Klasse. Wir schreiben Programme, indem wir eine Reihe von Funktionen und unveränderlichen Daten definieren. Beispiele für FP-Sprachen sind Scala, Haskell, Erlang usw. Java SE 8 hat ebenfalls einige funktionale Konstrukte (Bitte lesen Sie die Java 8-Beiträge für weitere Details)

Was sind die Merkmale von FP?

Funktionale Programmiersprachen wie Scala weisen die folgenden Merkmale auf.

  1. 1. Der Zustand existiert nicht.
    FP-Programme enthalten keinen Zustand. Das bedeutet, alle Daten sind unveränderlich, und Funktionen können den Zustand nicht ändern.2. Geringe Bedeutung der Ausführungsreihenfolge
    In funktionalen Programmiersprachen schreiben wir Programme mit einer Reihe unabhängiger Funktionen. Funktionen enthalten eine Reihe von Anweisungen. In der funktionalen Programmierung hat die Reihenfolge der Ausführung dieser Funktionen nicht viel Bedeutung, weil sie keinen Zustand haben und alle Funktionen unabhängig voneinander arbeiten. Selbst wenn wir die Ausführungsreihenfolge ändern, produzieren sie immer noch die gleichen Ergebnisse.3. Zustandsloses Programmiermodell
    Alle FP-Programme verwenden unveränderliche Daten und Funktionen, die diese Daten nicht ändern können. Das bedeutet, dass FP-Sprachen das zustandslose Programmiermodell unterstützen.4. Funktionen sind Bürger erster Klasse
    In funktionalen Programmiersprachen sind Funktionen Objekte erster Klasse. Funktionen sind unabhängige Einheiten, die wir in beliebiger Reihenfolge ausführen können.5. Primäre Manipulationseinheiten
    In funktionalen Programmiersprachen sind die primären Manipulationseinheiten Funktionen und Datenstrukturen, da alle Programme diese Einheiten verwenden.6. Modulare Programmierung
    In funktionalen Programmiersprachen müssen wir kleinere und unabhängige Einheiten namens Pure Functions schreiben, um das zustandslose Programmiermodell zu unterstützen. Das bedeutet, FP unterstützt eine bessere Modularität als OOP.7. Higher-Order Functions und Lazy Evaluation
    Funktionale Programmiersprachen sollten Higher-Order-Funktionen und Lazy-Evaluation-Features unterstützen.8. Primäre Flusssteuerungen
    FP-Sprachen verwenden keine Flusssteuerungen wie For…Loop, Do…While Loop, While…Loop usw. und verwenden auch keine bedingten Anweisungen wie If…Else oder Switch-Anweisungen. Alle FP-Sprachen schreiben Programme unter Verwendung der folgenden Elemente:
  • Funktionen
  • Funktionsaufrufe
  • Funktionsaufrufe mit Rekursion
  1. Abstraktion, Kapselung, Vererbung und Polymorphismus
    Wie OOP unterstützen auch FP-Sprachen alle 4 Konzepte: Abstraktion, Kapselung, Vererbung und Polymorphismus. FP-Sprachen unterstützen Vererbung mit Typklassen oder Impliziten. Sie unterstützen Polymorphismus mit Hilfe von Generika. Es ist auch als Parametrischer Polymorphismus bekannt.

Was ist der Hauptfokus von FP?

Im Gegensatz zu OOP-Sprachen konzentrieren sich alle FP-Programme hauptsächlich auf „Was Sie tun“ oder „Was getan werden soll“. Sie konzentrieren sich hauptsächlich auf folgende Dinge:

  • Welche Informationen gewünscht sind, das sind die Eingaben.
  • Welche Transformationen erforderlich sind, das ist die eigentliche Logik.

Das bedeutet, FP konzentriert sich hauptsächlich auf „Was getan werden soll“. Es konzentriert sich nicht sehr auf „Wie es gemacht werden soll“. Daher können wir funktionale Programmierung genau wie die Beschreibung des Problemfelds schreiben. Deshalb können nicht nur Entwickler, sondern auch andere Personen FP-Code sehr einfach verstehen. Nun werden wir über die „Vor- und Nachteile“ (Vorteile und Nachteile) der funktionalen Programmierung diskutieren.

Vorteile der funktionalen Programmierung?

Funktionale Programmiersprachen haben die folgenden Vorteile oder Nutzen oder Pros:

  • Fehlerfreier Code
    Da FP-Sprachen keinen Zustand unterstützen, erzeugen sie keine Nebeneffekte, was bedeutet, dass wir fehlerfreien Code oder fehlerfreien Code oder weniger fehleranfälligen Code schreiben können. Effiziente parallele Programmierung
    Da FP-Sprachen keinen veränderlichen Zustand haben, erzeugen sie keine Zustandsänderungsprobleme. Das bedeutet, dass sie nur unveränderliche Daten verwenden. Sie verwenden unabhängige Einheiten, um Programme zu schreiben, das sind „Funktionen“. Wir können sehr effiziente parallele oder nebenläufige Programmierung schreiben, weil sie unabhängig voneinander ohne Zustandsänderung ausgeführt werden. Bessere Leistung
    Da FP-Programme mit allen unabhängigen Einheiten zusammengesetzt sind, können sie parallel oder gleichzeitig ausgeführt werden. Aus diesem Grund erzielen FP-Anwendungen bessere Leistung. Bessere Encapsulierung
    Im Gegensatz zu OOP unterstützt FP eine bessere Encapsulierung mit reinen Funktionen. Reine Funktionen bedeuten ohne Nebenwirkungen. Unterstützt verschachtelte Funktionen
    Verschachtelte Funktionen bedeutet, Funktionen innerhalb anderer Funktionen zu komponieren, um Probleme zu lösen. FP unterstützt verschachtelte Funktionen. Erhöhung der Wiederverwendbarkeit
    Da FP-Programme aus unabhängigen Einheiten bestehen, das sind „Funktionen“, können wir sie sehr einfach wiederverwenden. Bessere Modularität
    In FP-Sprachen müssen wir kleinere und unabhängige Einheiten schreiben, sogenannte reine Funktionen, um das modell der zustandslosen Programmierung zu unterstützen. Das bedeutet, dass FP eine bessere Modularität als OOP unterstützt. Einfache Lazy-Evaluation
    In FP-Sprachen ist es sehr einfach, Lazy-Evaluation zu schreiben. Sie unterstützen Lazy-Funktionale Konstrukte wie Lazy-Listen, Lazy-Maps usw. Erhöhung der Lesbarkeit und Wartbarkeit
    Funktionale Programmierung (FP) verbessert auch die Lesbarkeit und Wartbarkeit, weil sie unabhängig arbeiten und den Zustand nicht ändern. Erhöhung der Testbarkeit
    Da wir unsere FP-Programme mit unabhängigen Einheiten schreiben, das sind „Funktionen“, können wir sie sehr einfach unit testen. Unterstützt Abstraktion über Verhalten
    Im Gegensatz zu OOP unterstützt FP sowohl „Abstraktion über Daten“ als auch „Abstraktion über Verhalten“. Weil die Realität beides enthält. Unterstützung für BigData
    Da FP parallele Programmierung und bessere Leistung unterstützt, eignet sich FP sehr gut zur Entwicklung von BigData-Anwendungen. Robuster und zuverlässiger Code
    Da FP unveränderliche Daten verwendet, können wir mit FP leicht robusten und zuverlässigen Code entwickeln.

Nachteile der funktionalen Programmierung?

Abgesehen von den großen Vorteilen haben funktionale Programmiersprachen auch sehr wenige oder vernachlässigbare Nachteile. Sie haben nur die folgenden Nachteile:

  • Erfordert viel Speicher
    FP hat keinen Zustand. Sie erstellen immer neue Objekte, um Aktionen auszuführen, anstatt vorhandene Objekte zu ändern. Aufgrund dessen benötigen FP-Anwendungen viel Speicher. – Konzentriert sich nicht auf Liskov-Substitution

Was sind die wichtigsten Konzepte der funktionalen Programmierung?

Die folgenden Konzepte sind wichtige Konzepte der funktionalen Programmierung.

  • First-Class Functions.
  • Lazy Evaluation.
  • Higher-Order Functions.
  • Unveränderlichkeit (nicht mutierbare Daten).
  • Modularität.
  • Keine Nebeneffekte.
  • Lazy Evaluation.
  • Rekursive Funktionsaufrufe.

Was ist Imperative Programmierung?

Die imperativen Programmierung (IP) ist eines der beliebten Programmierparadigmen, das eine Sequenz von Schritten/Anweisungen/Aussagen in einer bestimmten Reihenfolge ausführt. Beispiele für IP-Sprachen:- Java, C, C++ usw.

Hauptmerkmale der imperativen Programmierung?

Jede imperativ programmiersprache (IP) kann die folgenden Merkmale enthalten:

  • Sequenz von Anweisungen.
  • Reihenfolge der Ausführung von Anweisungen ist sehr wichtig.
  • Sie enthalten Zustand.
  • Sie verwenden sowohl unveränderliche als auch veränderliche Daten.
  • Sie können den Zustand ändern.
  • Sie können Nebenwirkungen haben.
  • Zustandsorientiertes Programmiermodell.
  • Sie ändern den Zustand des Programms direkt.
  • Sie stellen den Zustand mit Datenfeldern dar.

Was ist objektorientierte Programmierung?

Object Oriented Programming ist eine weitere Art von Programmierparadigma. Es stellt alles als ein Objekt dar. Jedes Objekt enthält einige Datenfelder und Methoden. Alle OOP-Programme enthalten Zustand. Sie verwenden mutable Daten und Datenstrukturen. Wie bei FP können wir vollständige Programme unter Verwendung von unveränderlichen Daten schreiben, aber es erzwingt diese Regel nicht. Object Oriented Programming (OOP) ist eine Übermenge der Imperativen Programmierung. Es folgt allen Charakteristika von IP mit einigen zusätzlichen Features. Diese zusätzlichen Features sind:

  • Alles ist ein Objekt.
  • Jedes Objekt enthält einige Datenfelder und Methoden.
  • OOP-Konzepte: Abstraktion, Encapsulation, Vererbung und Polymorphismus.

Im Gegensatz zu funktionalen Programmiersprachen konzentrieren sich OOP-Sprachen hauptsächlich auf „Wie wird es gemacht“. Das bedeutet, als Entwickler konzentrieren wir uns auf „Wie du es machst“. Darüber hinaus kombiniert OOP sowohl „Was du machst“ als auch „Wie du es machst“. Deshalb können wir keinen prägnanten und leicht lesbaren Code schreiben. Nur Entwickler können den Code verstehen, andere Personen können mehr Verwirrung haben, um den Anwendungscode zu verstehen, sie können ihn nicht verstehen.

Nachteile der objektorientierten Programmierung (OOP)?

Auch wenn OOP viele Echtzeitprobleme löst, hat es immer noch die folgenden Nachteile (im Vergleich zu FP):

  • Es unterstützt keine vollständige Wiederverwendbarkeit.
  • Es ist nicht vollständig modular.
  • Es verletzt das Konzept der Kapselung.
  • Vererbung hat viele Nachteile.

Wesentliche Nachteile der Vererbung:

  • Verletzt das Prinzip der Kapselung
  • Bei zunehmender Vererbungsebene ist es sehr schwierig und aufwendig, Objekte zu pflegen und zu erstellen.

Wann sollte Funktionale Programmierung verwendet werden?

Wir sollten uns für Funktionale Programmierung (FP) in folgenden Szenarien entscheiden:

  • Wenn wir viele verschiedene Operationen an Daten durchführen, die festgelegt sind.
  • Mit anderen Worten, wenn wir wenige Dinge mit vielen Operationen haben.

Wann sollte Objektorientierte Programmierung verwendet werden?

Wir sollten uns für Objektorientierte Programmierung (OOP) in folgenden Szenarien entscheiden:

  • Wenn wenige Operationen an vielen verschiedenen Varianten durchgeführt werden, die ein gemeinsames Verhalten aufweisen.
  • Mit anderen Worten, wenn wir mehr Dinge mit wenigen Operationen haben.

HINWEIS:- Hier sind Dinge realweltliche Objekte und Operationen reale Handlungen. Zum Beispiel stellen wir in Java diese realweltlichen Dinge als „Klassen“ und reale Handlungen als Methoden (Operationen) dar.

Unterschiede zwischen FP und OOP (IP)?

Functional Programming OOP
Does not exist State Exists State
Uses Immutable data Uses Mutable data
It follows Declarative Programming Model It follows Imperative Programming Model
Stateless Programming Model Stateful Programming Model
Main Fcous on: “What you are doing” Main focus on “How you are doing”
Good for Parallel (Concurrency) Programming Poor for Parallel (Concurrency) Programming
Good for BigData processing and analysis NOT Good for BigData processing and analysis
Supports pure Encaspulation It breaks Encaspulation concept
Functions with No-Side Effects Methods with Side Effects
Functions are first-class citizens Objects are first-class citizens
Primary Manipulation Unit is “Function” Primary Manipulation Unit is Objects(Instances of Classes)
Flow Controls: Function calls, Function Calls with Recursion Flow Controls: Loops, Conditional Statements
It uses “Recursion” concept to iterate Collection Data. It uses “Loop” concept to iterate Collection Data. For example:-For-each loop in Java
Order of execution is less importance. Order of execution is must and very important.
Supports both “Abstraction over Data” and “Abstraction over Behavior”. Supports only “Abstraction over Data”.
We use FP when we have few Things with more operations. We use OOP when we have few Operations with more Things. For example: Things are classes and Operations are Methods in Java.

Das ist alles über drei beliebte Programmierparadigmen. HINWEIS:- Ich komme eigentlich aus der OOP, habe aber erst vor einem Jahr mit FP begonnen. Wenn Functional Programming-Experten Fehler in diesem Beitrag finden, geben Sie mir bitte Ihre wertvollen Rückmeldungen. Hinterlassen Sie bitte einen Kommentar, wenn Ihnen mein Beitrag gefällt oder wenn Sie Fragen oder Anregungen haben.

Source:
https://www.digitalocean.com/community/tutorials/functional-imperative-object-oriented-programming-comparison