Ich bin dabei, ein Simulations- / Modellierungsprojekt zu starten. Ich weiß bereits, dass OOP für diese Art von Projekten verwendet wird. Das Studium von Haskell hat mich jedoch dazu veranlasst, das FP-Paradigma für die Modellierung eines Komponentensystems zu verwenden. Lassen Sie mich näher darauf eingehen:
Angenommen, ich habe eine Komponente vom Typ A, die durch einen Datensatz (einen Parameter wie Temperatur oder Druck, eine PDE und einige Randbedingungen usw.) Gekennzeichnet ist, und eine Komponente vom Typ B, die durch einen anderen Datensatz (unterschiedlich) gekennzeichnet ist oder gleicher Parameter, unterschiedliche PDE und Randbedingungen). Nehmen wir außerdem an, dass die Funktionen / Methoden, die auf jede Komponente angewendet werden, identisch sind (z. B. eine Galerkin-Methode). Der veränderbare Zustand des Objekts würde für nicht konstante Parameter verwendet.
Wenn ich einen OOP-Ansatz verwenden würde, würde ich zwei Objekte erstellen, die die Daten jedes Typs kapseln, die Methoden zum Lösen der PDE (hier würde die Vererbung zur Wiederverwendung von Code verwendet) und die Lösung für die PDE.
Wenn ich andererseits einen FP-Ansatz verwenden würde, würde jede Komponente in Datenteile und die Funktionen zerlegt, die auf die Daten wirken würden, um die Lösung für die PDE zu erhalten. Nicht konstante Parameter würden als Funktionen von etwas anderem (z. B. Zeit) übergeben oder durch eine Art von Veränderlichkeit (Emulation der Veränderlichkeit usw.) Ausgedrückt. Dieser Ansatz erscheint mir einfacher, wenn ich annehme, dass lineare Operationen an Daten trivial wären.
Wäre die Implementierung des FP-Ansatzes tatsächlich einfacher und einfacher zu verwalten (Hinzufügen einer anderen Art von Komponente oder einer neuen Methode zur Lösung des PDE) als die OOP?
Ich habe einen C ++ / Fortran-Hintergrund und bin kein professioneller Programmierer. Korrigieren Sie mich daher in allen Fällen, in denen ich mich geirrt habe.
quelle
IMHO für fast jede Aufgabe von angemessener Komplexität kann die Frage "ist ein FP-Stil oder OOP-Stil die bessere Wahl" nicht objektiv beantwortet werden. In einer solchen Situation lautet die Frage in der Regel nicht "entweder FP oder OOP", sondern wie die besten Teile beider Paradigmen zur Lösung Ihres Problems kombiniert werden können.
Das Problem, das Sie oben skizziert haben, scheint sehr mathematisch zu sein, und ich gehe davon aus, dass Sie einige Matrixoperationen benötigen werden. OOP ist sehr gut für die Modellierung abstrakter Datentypen geeignet, und Matrixberechnungen können leicht als "Matrixobjekte" mit Operationen auf Matrizen implementiert werden. Wenn Sie dies so implementieren, dass alle Matrixoperationen Teil einer Matrixklasse sind, können Sie Dinge zusammenhalten, die zusammen gehören, und so eine gute Gesamtstruktur aufrechterhalten.
Andererseits sind PDEs Gleichungen für Funktionen, und die Lösung kann wieder funktionieren. Die Verwendung eines funktionalen Ansatzes für diese Art von "Komponenten" mag hier natürlich erscheinen. Diese Funktionen können Matrixparameter haben, die ein Beispiel für die Kombination von OOP und FP zeigen. Ein weiteres Beispiel wäre eine Matrixklassenimplementierung, bei der mithilfe von Funktionswerkzeugen jedem Element Ihrer Matrix eine bestimmte Operation zugeordnet wird. Also auch hier ist es nicht "OOP versus FP", sondern "OOP kombiniert mit FP", die Ihnen die besten Ergebnisse bringt.
quelle