Gibt es eine visuelle Modellierung Sprache oder der Stil für die funktionale Programmier-Paradigma?
UML ist ein standard, der gezielt auf die Modellierung von software, die geschrieben sein werden, die in OO-Sprachen, und geht hand in hand mit Java. Immer noch, könnte es möglicherweise verwendet werden, um Modell-software geschrieben werden sollen, in dem funktionale Programmierung-Paradigma? Die Diagramme würde erbracht werden, sinnvoll, da das embedded visual elements?
Gibt es eine modeling language richtet sich an funktionale Programmierung, speziell Haskell? Welche tools für die Zusammenstellung von Diagrammen, die würden Sie empfehlen?
Bearbeitet von OP Sept 02, 2009:
Was ich Suche, ist die visuelle, leichteste Darstellung dessen, was sich in den code. Einfach zu Folgen Diagramme, visuelle Modelle nicht unbedingt richtet sich an andere Programmierer. Ich werde ein Spiel zu entwickeln, in Haskell sehr bald aber, da dieses Projekt für meine Promotion Abschluss der Arbeit muss ich eine Art der Formalisierung der vorgeschlagenen Lösung. Ich Frage mich, ob es eine Entsprechung zu den UML+Java-standard, aber für Haskell.
Sollte ich nur stick storyboards, schriftliche Beschreibungen, nicht-formalisierte Diagramme (paar flache fließen-Diagramm-wie Bilder), die nicht-formalisierte use-case-Beschreibungen?
Bearbeitet von jcolebrand 21. Juni 2012:
Beachten Sie, dass der Fragesteller wollte ursprünglich eine visual metphor, und wir hatten jetzt drei Jahre, wir sind auf der Suche nach mehr/bessere tools. Keine der Antworten wirklich adressiert das Konzept der "visuellen Metapher-design-tool" also ... das ist, was die neue bounty sucht zu versorgen.
- die Frage ist, fehlt eine Beschreibung, was ist Modellierung. Ich weiß, ich kann erraten, oder google es, aber Ihre spezifischen Gesichtspunkt ist mehr relevant für Ihre Frage.
- Ich beginne mit der Beschreibung der UML als Modellierungssprache und dann erwähne ich, Diagramme und visuelle Elemente. Das sollten die Leute einen Hauch von dem, was ich Suche. Ich füge einen Hinweis auf meine Frage sowieso. Danke.
- Ich denke, die Frage ist, was genau würden Sie modellieren? In java verwenden Sie UML zu zeigen Objekte und Ihre Wechselwirkungen. Sie könnte wahrscheinlich brechen etwas so Komplexes wie ein Spiel in "Phasen", "Modulen" oder auch einige grobe Staaten und Diagramm jede dieser. Wirklich, ich glaube, storyboarding und Flussdiagramme dienen würde hier am besten.
- Gibt es eine visual modeling tool / Sprache oder Stil unterstützt, die die Scala-Profil oder sagen kann, es unterstützt die Objekt-orientierten Programmier-Paradigma und das funktionale Programmier-Paradigma, beide. Follow-up-Frage: Für ein Unternehmen Scala Scala-Projekt wie / mit was-Modellierungs-tool - der business analyst bereiten Sie Visuelle Modelle für die Logischen (konzeptionellen) anzeigen und Entwicklung sehen? Die logische Sicht beschäftigt sich mit der Funktionalität, die das system bietet für den Anwender. Die Entwicklung Ansicht zeigt ein system aus einem Programmierer-Perspektive und beschäftigt sich mit software-management.
- Hier sind einige Funktions-Modell (Bild) - Proben. en.wikipedia.org/wiki/Function_model
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden wir theorembeweiser zu tun formale Modellierung (mit überprüfung), wie Isabelle oder Coq. Manchmal verwenden wir domänenspezifischen Sprachen (z.B. Cryptol) zu tun, die high-level-design, vor die sich die "low-level" Haskell-Implementierung.
Oft haben wir nur die Verwendung von Haskell als Modellierungssprache, und daraus die tatsächliche Umsetzung via umschreiben.
QuickCheck Eigenschaften spielen auch eine Rolle in der design-Dokument, zusammen mit dem Typ und Modul-Zerlegungen.
Glaube ich, dass die Modellierungs-Sprache Haskell wird als "Mathematik". Es wird oft in Schulen gelehrt.
Ja, es gibt weit verbreiteten Modellierung/Spezifikation Sprachen/Techniken für Haskell.
Sie sind nicht visuell.
In Haskell, Typen geben, die eine teilweise Spezifikation.
Manchmal, diese Spezifikation vollständig bestimmt die Bedeutung/Ausgang beim verlassen der verschiedenen Implementierungsoptionen.
Darüber hinausgehende Haskell Sprachen mit abhängigen Typen, wie in Agda & Coq (unter anderem), die Typen sind viel öfter nützlich als komplette Spezifikation.
Dem Typen nicht genug ist, fügen Sie die formalen Vorgaben, die oft eine einfache funktionale form.
(Also, ich glaube, die Antworten, dass die Modellierung die Sprache der Wahl für Haskell Haskell ist selbst, oder "math".)
In einer form, die Ihnen eine funktionale definition, die ist optimiert für Klarheit und Einfachheit, und nicht alle für Effizienz.
Die definition könnte sogar beinhalten, uncomputable Vorgänge wie die Funktion der Geschlechter über infinite Domänen.
Dann, Schritt für Schritt verwandeln Sie die Spezifikation in form eines effizient berechenbaren funktionalen Programm.
Jeder Schritt behält die Semantik (Bedeutung), und so die endgültige form ("Umsetzung") garantiert werden, die semantisch äquivalent zu der ursprünglichen form ("Spezifikation").
Sie werden sehen, dass dieser Prozess bezeichnet, unter verschiedenen Namen, einschließlich "transformation-Programm", "Programm " Ableitung" und "Programm-Berechnung".
Die Schritte in einer typischen Ableitung sind meist Anwendungen des "equational reasoning", ergänzt mit ein paar Anwendungen der mathematischen Induktion (und co-Induktion).
Zu können, führen Sie diese einfache und nützliche überlegung war eine primäre motivation für funktionale Programmiersprachen in den ersten Platz, und Sie verdanken Ihre Geltung auf die "denotative" Natur "wirklich die funktionale Programmierung".
(Die Begriffe "denotative" und "wirklich funktional" sind von Peter Landin seinem bahnbrechenden Papier The Next 700 Programming languages.)
So ist die parole für reinen funktionalen Programmierung verwendet werden, um "gut für equational reasoning", obwohl ich nicht hören, dass die Beschreibung annähernd so oft in diesen Tagen.
In Haskell, denotative entspricht, um andere Typen als
IO
und Arten, die sich aufIO
(wieSTM
).Während die denotative/non-
IO
Arten sind gut für die richtige equational reasoning, dieIO
/nicht-bezeichnende Arten sind entworfen, um die schlecht für falsche equational reasoning.Einer bestimmten version der Ableitung aus der Spezifikation, die ich nutze, so oft wie möglich in mein Haskell-Arbeit nenne ich "semantische Typ der Klasse morphismen" (TCMs).
Die Idee ist, um eine Semantik/interpretation für ein Daten-Typ, und verwenden Sie dann die TCM-Prinzip zu ermitteln (oft eindeutig) das bedeutet für die meisten oder alle von der Art, die die Funktionalität über die type-Klasse Instanzen.
Ich zum Beispiel, sagen, dass die Bedeutung eines
Image
Art ist, als Funktion von 2D-Raum.Die TCM-Prinzip dann sagt mir die Bedeutung des
Monoid
,Functor
,Applicative
,Monad
,Contrafunctor
, undComonad
Instanzen, als Entsprechung zu jenen Fällen, für die Funktionen.Das ist ein viel nützliche Funktionen auf Bilder mit sehr prägnante und überzeugende technische Daten!
(Die Spezifikation der semantischen Funktion sowie eine Liste der standard-Typ-Klassen, für die die semantische TCM-Prinzip halten müssen.)
Und doch habe ich enorme Freiheit, wie darstellen Bilder, und die semantische TCM-Prinzip schließt die Abstraktion von Lecks.
Wenn Sie neugierig zu sehen, einige Beispiele für dieses Prinzip in Aktion, schauen Sie sich das Papier Denotational design mit Typ-Klasse morphismen.
Ja, Haskell.
Habe ich den Eindruck, dass die Programmierer funktionale Sprachen fühlen sich nicht die Notwendigkeit zur Vereinfachung der Sprache Weg, wenn Sie sich Gedanken über Ihre Gestaltung, die eine (eher glib) Art und Weise der Betrachtung, was UML für Sie tut.
Habe ich beobachtet, ein paar video-interviews, und Lesen Sie einige interviews mit Größen wie erik meijer und simon peyton-jones. Es scheint, als wenn es um die Modellierung und das Verständnis diejenigen, die problem domain, die Sie verwenden, geben Sie Signaturen, insbesondere Funktions-Signaturen.
Sequenzdiagrammen (UML) könnte im Zusammenhang mit der Zusammensetzung von Funktionen.
Eine statische Klassendiagramm (UML) könnte im Zusammenhang mit Typ-Signaturen.
In Haskell, die Sie bei der Modellierung von Arten.
Beginne einfach mit dem schreiben Ihrer Funktion-, Klassen - und Daten-Signaturen ohne Implementierung, und versuche, die Typen passen. Der nächste Schritt ist QuickCheck.
E. g. zu Modell a zu Sortieren:
dann tests
und schließlich die Umsetzung ...
Zwar nicht um eine Empfehlung zu verwenden (wie es zu sein scheint nicht für den download verfügbar), aber die HOPFEN-system visualisiert Begriff Graphen, die oft eine gute Darstellung funktionaler Programme.
Kann es auch als ein design-Werkzeug, wie es unterstützt die Dokumentation der Programme sowie das konstruieren; ich glaube, es kann auch Schritt für Schritt durch die Umschreibung der Begriffe, wenn Sie es wollen, so können Sie sehen, wie Sie entfalten.
Leider, ich glaube, es wird nicht mehr aktiv entwickelt obwohl.
Ich weiß, ich bin spät zur party, aber ich werde immer noch geben, meine Antwort falls sich jemand finden würde der es nützlich.
Ich glaube, ich würde gehen für systemische Methoden, wie der SADT/IDEF0.
Solche Diagramme mit Dia-Programm, das ist sowohl auf Linux, Windows und MacOS.
Können Sie ein Datenfluss-Prozess-Netzwerk-Modell, wie beschrieben, in Echtzeit-Signal-Verarbeitung: Datenfluss -, Visuelle und Funktionale Programmierung von Hideki John Reekie
Zum Beispiel für einen code wie (Haskell):
Die visuelle Darstellung wäre:
Was wäre der Punkt in der Modellierung von Haskell mit der Mathematik? Ich dachte, der ganze Punkt von Haskell war, dass es im Zusammenhang so eng an der Mathematik, die die Mathematiker könnte ihn abholen und mit ihm laufen. Warum würden Sie das übersetzen einer Sprache in sich selbst?
Beim arbeiten mit einer anderen funktionalen Programmiersprache f#) ich benutzte Diagramme, die auf eine weiße Tafel beschreiben den großen Blöcken und dann modelliert das system in ein OO-Weise mit Hilfe von UML, Klassen mit. Es war eine leichte miss-match in der building blocks in f# (teilen Sie die Klassen in Daten-Strukturen und Funktionen einwirken lassen). Aber für das Verständnis aus der Perspektive der Unternehmen funktionierte. Ich möchte hinzufügen, Verstand, dass das problem war business - /Web-orientierte und weiß nicht, wie gut die Technik funktionieren würde, für etwas ein bisschen mehr finanziellen. Ich glaube, ich würde wahrscheinlich erfassen die Funktionen als Objekte ohne Zustand und Sie passen in schön.
Es hängt alles von der domain Ihre arbeiten.
Ich benutze USL - Universelle Systeme Sprache. Ich Lerne Erlang und ich denke, es ist eine perfekte Passform.
Schade, dass die Dokumentation sehr begrenzt ist, und niemand nutzt es.
Mehr Informationen hier.