Frage

Was sind die Unterschiede zwischen diesen Programmierparadigmen, und sie sind besser geeignet, um bestimmte Probleme oder tut alle Anwendungsfälle einen gegenüber den andere bevorzugen?

Architektur Beispiele geschätzt!

War es hilfreich?

Lösung

Alle von ihnen sind gut auf ihre eigene Weise - Sie sind einfach verschiedene Ansätze, um die gleichen Probleme

.

In einem rein verfahrens Stil, Daten neigen dazu, von den Funktionen stark entkoppelt zu werden, die auf ihn arbeiten.

In einem objektorientierten Stil, Daten neigen dazu, mit ihm eine Sammlung von Funktionen zu tragen.

In einem funktionalen Stil, Daten und Funktionen sind in der Regel zu mehr mit gemeinsam miteinander (wie in Lisp und Scheme), während mehr Flexibilität in Bezug darauf, wie Funktionen tatsächlich genutzt werden. Algorithmen sind in der Regel auch in Bezug auf die Rekursion und Zusammensetzung definiert werden, anstatt Schleifen und Iteration.

Natürlich ist die Sprache selbst nur Einflüsse, den Stil bevorzugt. Auch in einer reinen funktionalen Sprache wie Haskell, können Sie in einem prozeduralen Stil schreiben (obwohl das sehr mutlos ist), und auch in einer prozeduralen Sprache wie C, können Sie in einem objektorientierten Stil (wie in der GTK + programmieren und EFL APIs).

Um klar zu sein, der „Vorteil“ jedes Paradigma ist einfach in der Modellierung Ihrer Algorithmen und Datenstrukturen. Wenn zum Beispiel Ihr Algorithmus Listen und Bäume handelt, kann ein Funktionsalgorithmus das Vernünftigste sein. Oder, wenn zum Beispiel Ihrer Daten hoch strukturiert, kann es Sinn machen, es als Objekte zu komponieren, wenn das das nativen Paradigma Ihrer Sprache ist - oder könnte es genauso gut als funktionelle Abstraktion von Monaden geschrieben werden, die ist das native Paradigma der Sprachen wie Haskell oder ML.

Die Wahl, welche Sie verwenden, ist einfach das, was mehr Sinn für Ihr Projekt und die Abstraktionen Ihre Sprache unterstützt macht.

Andere Tipps

Ich denke, die verfügbaren Bibliotheken, Tools, Beispiele und Gemeinden Trümpfe vollständig das Paradigma in diesen Tagen. Zum Beispiel ML (oder was auch immer) könnte die ultimative Allzweck Programmierung sein Sprache , aber wenn Sie keine gute Bibliotheken für bekommen, was Sie tun, Sie werden geschraubt.

Zum Beispiel, wenn Sie ein Videospiel machen, gibt es mehr gute Code-Beispiele und SDKs in C ++, so sind Sie wahrscheinlich besser dran mit dem. Für eine kleine Web-Anwendung, gibt es einige große Python, PHP und Ruby-Frameworks, die Sie ab und läuft sehr schnell bekommen. Java ist eine gute Wahl für größere Projekte wegen der Kompilierung-Überprüfung und Enterprise-Bibliotheken und Plattformen.

Früher ist es der Fall sein, dass die Standard-Bibliotheken für verschiedene Sprachen ziemlich klein waren und leicht repliziert - C, C ++, Assembler, ML, LISP, etc .. kamen mit den Grundlagen, sondern eher zu kneifen, wenn es darum ging, Standardisierung auf Dinge wie Netzwerk-Kommunikation, Verschlüsselung, Grafiken, Datendateiformate (einschließlich XML), auch grundlegende Datenstrukturen wie ausgeglichene Bäume und Hash-Tabellen wurden ausgelassen!

Moderne Sprachen wie Python, PHP, Ruby und Java jetzt kommen mit einer viel anständigen Standard-Bibliothek und haben viele gute Bibliotheken von Drittanbietern Sie leicht, dank eines großen Teil auf ihre Annahme von Namensräumen Bibliotheken zu halten mit kollidieren können eine andere, und die Garbage collection zu standardisieren, die Speichermanagementsysteme der Bibliotheken.

Diese Paradigmen müssen nicht gegenseitig ausschließen. Wenn Sie Python aussehen, es unterstützt Funktionen und Klassen, aber zur gleichen Zeit, alles ist ein Objekt, einschließlich Funktionen. Sie können Funktions- / oop / Verfahren Stil alles in einem Stück Code mischen.

Was ich meine ist, in funktionalen Sprachen (zumindest in Haskell, die einzige studierten I) gibt es keine Aussagen! Funktionen sind nur einen Ausdruck in ihnen erlaubt !! ABER, Funktionen sind Bürger erster Klasse, können Sie sie um, als Parameter, zusammen mit einer Reihe anderer Fähigkeiten weitergeben können. Sie können mit wenigen Zeilen Code mächtige Dinge tun.

Während in einer prozeduralen Sprache wie C, die einzige Möglichkeit, Funktionen um, ist die Verwendung von Funktionszeigern passieren kann, und das allein nicht viele Mächtige Aufgaben nicht aktiviert.

In Python ist eine Funktion ein Bürger erster Klasse, aber es kann beliebige Anzahl von Anweisungen enthalten. So können Sie eine Funktion haben, die prozeduralen Code enthält, aber man kann es genau wie funktionale Sprachen laufen um.

Das Gleiche gilt für OOP. Eine Sprache wie Java ermöglicht es Ihnen nicht Prozeduren / Funktionen außerhalb einer Klasse zu schreiben. Der einzige Weg, eine Funktion, um passieren ist, es zu wickeln in einem Objekt, das diese Funktion implementiert, und dann um das Objekt übergibt.

In Python Sie diese Einschränkung nicht haben.

Für GUI würde ich sagen, dass das objektorientierte Paradigma sehr gut geeignet ist. Das Fenster ist ein Objekt, das Textfeld sind Objekte, und die OK-Taste ist auch ein. Auf den anderen Seite solcher Sachen Stringverarbeitung kann mit viel weniger Aufwand und damit einfacher mit einfachem Verfahren Paradigma erfolgen.

Ich glaube nicht, es eine Frage der Sprache ist keines von beiden. Sie können in funktionalen, prozedurale oder objektorientierte schreiben fast jede populäre Sprache, obwohl es einige zusätzliche Anstrengungen in einigen könnten.

Um Ihre Frage zu beantworten, müssen wir zwei Elemente:

  1. Verständnis der Eigenschaften der verschiedenen Architekturstile / Muster.
  2. Verständnis der Eigenschaften der verschiedenen Programmierparadigmen.

Eine Liste von Software-Architektur Stilen / Muster wird auf dem rel="noreferrer"> Software-Architektur Artikel auf Wikipeida

Kurz und allgemeines Verfahren ist gut für ein Modell, das eine Prozedur folgt, OOP ist gut für die Konstruktion und Funktions sind gut für hohe Level-Programmierung.

Ich glaube, Sie sollten versuchen, die Geschichte zu lesen auf jedes Paradigma und sehen, warum die Leute es schaffen, und man kann sich leicht verstehen.

sie beide Nach dem Verständnis, können Sie die Elemente der Architektur Paradigmen Stile / Muster Programmierung verbinden.

Ich denke, dass sie oft nicht „versus“ sind, aber Sie können sie kombinieren. Ich denke auch, dass oft die Worte, die Sie erwähnen, sind nur Schlagworte. Es gibt nur wenige Menschen, die tatsächlich wissen, was „objektorientiert“ bezeichnet, auch wenn sie die heftigsten Evangelisten davon sind.

Einer meiner Freunde ist eine Grafik-Anwendung zu schreiben mit NVIDIA CUDA . Anwendung paßt sehr gut mit OOP-Paradigma und das Problem kann ordentlich in Module zerlegt werden. Allerdings verwenden CUDA müssen Sie C verwenden, die nicht unterstützt Erbe . Daher müssen Sie klug sein.

a) Sie ein ausgeklügeltes System entwickeln, das Erbe zu einem gewissen Grad emulieren wird. Es kann getan werden!

i) Sie können ein Hakensystem , die jedes Kind C von Eltern erwartet P eine gewisse Überschreibung für Funktion F. haben Sie können ihre Überschreibungen Kinder registrieren lassen, die gespeichert werden und bei Bedarf aufgerufen.

ii) Sie können verwenden struct Speicherausrichtung verfügen Kinder in Eltern zu werfen.

Dies kann ordentlich sein, aber es ist nicht einfach, mit zukunftssichere und zuverlässige Lösung zu kommen. Sie werden viel Zeit damit verbringen, das System entwerfen und es gibt keine Garantie, dass Sie nicht in Probleme auf halbem Weg durch das Projekt. Die Implementierung Mehrfachvererbung ist noch schwieriger, wenn nicht fast unmöglich.

b) können Sie konsistente Namenspolitik verwenden und teile und herrsche Ansatz zur Schaffung einer Programm. Es wird kein Erbteil haben, sondern weil Ihre Funktionen sind klein, einfach zu verstehen und einheitlich formatiert Sie brauchen es nicht. Die Menge an Code, den Sie schreiben müssen, nach oben geht, ist es sehr schwer, konzentriert zu bleiben und nicht zu einfachen Lösungen (Hacks) zu erliegen. Doch diese ninja Art und Weise der Codierung ist die C Art der Codierung. Der Aufenthalt in der Balance zwischen Low-Level-Freiheit und guten Code zu schreiben. Gute Möglichkeit, dies zu erreichen, ist Prototypen schreiben eine funktionale Sprache. Zum Beispiel Haskell ist extrem gut für das Prototyping-Algorithmen.

Ich neige dazu, in Richtung Ansatz b. Ich schrieb einen möglichen Lösungsansatz eine Verwendung, und ich werde ehrlich sein, es fühlte sich sehr unnatürlich, dass Code verwendet wird.

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