Frage

    

Diese Frage bereits eine Antwort hier:

         

Ich habe als Entwickler für die letzten 4 Jahre gearbeitet, mit den 4 Jahren vor, dass das Studium der Software-Entwicklung in der Schule. In meinen 4 Jahren in der Industrie habe ich einige Arbeit in VB6 getan (das war ein Witz), aber das meiste davon ist in C # / ASP.NET gewesen. Während dieser Zeit habe ich von einem „Objekt-aware“ prozedurale Paradigma zu einem objektorientierten Paradigma bewegt.

Ich habe es über andere Programmierparadigmen neugierig gewesen

In letzter Zeit, so dass ich dachte, dass ich andere Entwickler ihre Meinung zu den Ähnlichkeiten und Unterschiede zwischen diesen Paradigmen fragen würde, die speziell auf OOP? In OOP, finde ich, dass es über die Beziehungen und logische Interaktionen zwischen den Begriffen ein starker Fokus ist. Welche der Geist Rahmen können Sie in den anderen Paradigmen sein?

War es hilfreich?

Lösung

Bei weitem die besten Erklärungen von Programmierparadigmen sind in Peter van Roy Werke gefunden. Vor allem in dem Buch Konzepte, Techniken und Modelle aus Computer-Programmierung von Peter Van Roy und Seif Haridi . ( Hier ist der Begleiter Wiki .) CTM verwendet die Multi-Paradigma Distributed Oz Programmiersprache alle Paradigmen großen Programmierung einzuführen.

Peter van Roy machte auch dieses erstaunliche Plakat, das die 34 wichtigsten Paradigmen und ihre Beziehungen zeigt und Positionen auf verschiedenen Achsen . Das Plakat ist im Grunde eine unglaublich komprimierte Version von CTM. Eine gründlichere Erklärung dieses Plakat wird im Artikel Programmierparadigmen für Dummies enthalten: Was jeder Programmierer wissen sollte , die als Kapitel erschienen in dem Buch Neue Computational Paradigmen für Computermusik , herausgegeben von G. Assayag und A. Gerzso.

Ein weiterer großes Buch, das Paradigma mehrere große Programmierung zeigt, ist Struktur und Interpretation von Computerprogrammen von Harold Abelson und Gerald Jay Sussman . Dieses Buch war die Grundlage des MIT CS101 seit mehreren Jahrzehnten. Ein Kurs gelehrt von Abelson und Sussman sich bei einer Corporate Training für Hewlett aufgezeichnet wurde -Packard 1986 .

Der Hauptunterschied zwischen GM und SICP ist, dass GM den meisten großen Paradigmen zeigt, in einer Sprache, die sie unterstützt (meist Distributed Oz, aber auch einige andere). SICP OTOH zeigt sie von Umsetzung sie in einer Sprache, die tut nicht unterstützt sie nativ (eine Teilmenge von Scheme). Sehen Objektorientierung in einem Dutzend implementiert oder so Zeilen Code ist friggin' awesome.

Hier finden Sie Videoaufnahmen und Kursmaterialien aus dem Frühjahr 2005 Kurs auf dem MIT Opencourseware Website . eine weitere Aufnahme des Kurses von der MIT kurzlebig ArsDigita Universität Projekt . SICP hat auch an anderen Universitäten in der Tat es bei Berkley gelehrt wird jetzt .

Auf eine persönliche Note, meine eigene Erfahrung ist, dass wirklich ein Programmierparadigma zu verstehen, ist nur möglich,

  • ein Paradigma zu einer Zeit und
  • in Sprachen, die Kraft Sie in das Paradigma

Im Idealfall würden Sie eine Sprache verwenden, die das Paradigma der extremen nimmt. In Multi-Paradigma Sprachen, ist es viel zu einfach zu „betrügen“ und fallen zurück auf ein Paradigma, das Sie sich wohler mit sind. Und ein Paradigma als Bibliothek ist nur dann wirklich möglich in Sprachen wie Scheme, die für diese Art von Programmierung speziell darauf ausgelegt sind. Lernen faul funktionale Programmierung in Java, zum Beispiel, ist keine gute Idee, aber es gibt Bibliotheken für das.

Hier einige meiner Favoriten:

  • Objektorientierung im Allgemeinen : Selbst
    • Prototyp-basierte Objektorientierung : Selbst
    • klassenbasierten Objektorientierung : Neusprech
      • statische klassenbasierten Objektorientierung : Eiffel
    • multiple Versand basiert OO : Dylan
    • Funktions + Objektorientierung : Scala
  • funktionale Programmierung : Haskell
    • rein funktionale Programmierung : Haskell
      • faul rein funktionale Programmierung : Haskell
    • statische funktionale Programmierung : Haskell
    • dynamische funktionale Programmierung : Clojure
  • imperativen Programmierung : Lua
  • Concurrent Programming : Clojure
    • Message-Passing gleichzeitige Programmierung : Erlang
  • metaprogramming : Scheme
  • sprachorientierte Programmierung : Vorsätzliche Domain Workbench

Andere Tipps

Hier ist mein nehmen:

  • Funktionale Programmierung bedeutet Schreiben von Funktionen, die in Daten nehmen und arbeiten daran. Sie bauen große Anwendungen durch Zusammenbauen Funktionen.
  • Objektorientierte Programmierung gekapselten Daten und ihre Betreiber in eine einzige Komponente, die auch auf mentale Modelle abbildet. Sie bauen große Anwendungen aus der Zusammenarbeit Objekte.
  • deklarative Programmierung (beispielsweise SQL) trennt, was von getan wird, wie es gemacht wird. Sie sagen, eine relationale Datenbank, was Sie es das Fahren auf die Abfrage-Engine tun möchte und verlassen.

Nun Link etwas zu erklären versucht, ich habe verwendet in den letzten zwei Jahrzehnten. Ich erwähne es, weil es beweisbar nützlich ist, und ich denke, es als Paradigma zählt, weil es zu benutzen Sie in einer bestimmten Art und Weise zu denken.

Die unterschiedliche Art und Weise Sie denken, dass, wenn ein Problem zu analysieren, anstatt zu fragen, welche Objekte es gibt und welche Aktionen stattfinden, beginnen Sie mit den allgemeinen Anforderungen und fragen Was gesagt werden muss?

Von diesem, die Sie wählen oder eine domänenspezifische-Sprache (DSL) entwerfen, und geben Sie Ihr Problem in dieser Sprache.

Dieser Zusammenhang erklärt eine bestimmte Sprache zur Beschreibung von dynamischem Dialog Benutzeroberflächen zu ändern. Seine Umsetzung ist abhängig von einer bestimmten Kontrollstruktur, Ausführung Differential. Was sie erreicht ist eine Größenordnung Verringerung des Quellcodes, mit weniger Chancen für Fehler Codierung. Diese Einsparungen können dann bei der Herstellung der UI anspruchsvollen ausgegeben werden.

Für andere Arten von Problemen, andere Kontrollstrukturen angemessen sind, aber das Konzept der Arbeit durch eine gut gewählte DSL, Quelle macht Code viel kleiner, leichter modifiziert und weniger fehleranfällig, der gemeinsame Ansatz ist.

Ich denke, die Paradigmen der funktionalen Programmierung und OOP am besten durch die Identifizierung der Art von Problemen ausgewertet werden, für die sie der beste Ausdruck sind. Oft einfach diese Paradigmen werden und Festwagen werden als Allheilmittel propagiert, anstatt sie durch die Problemräume klassifizieren sie adressieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top