Paradigmen für die UI-Programmierung


9

Dies ist eine spezifischere Frage (oder tatsächlich zwei, aber sie sind verwandt), die aus den Kommentaren zum Tod der OOP-Technologie stammt, in denen jemand erklärte, dass OOP nicht das richtige Paradigma für die GUI-Programmierung ist.

Wenn ich die Kommentare dort und hier lese, habe ich immer noch das Gefühl, dass es etwas zu lernen gibt: Welche Programmierparadigmen gelten als gut passend und warum sind sie besser als andere (vielleicht mit Beispielen zur Veranschaulichung?)

Ich habe das tk-Beispiel aus dem Titel und der Frage entfernt


@Inca - denken Sie daran, dass die SK-Logik (die diesen Kommentar verfasst hat) bei jeder möglichen Gelegenheit gegen OOP kämpft - als ob er eine fanatische Mission hätte. Ich bezweifle stark, dass er wirklich beweisen kann, dass tk überhaupt nicht mit OOP verwandt ist.
Andreas_D

-1: um eine persönliche Meinung zu zitieren, als ob es eine Tatsache wäre. "OOP ist nicht das richtige Paradigma für die GUI-Programmierung" würde C # und Objective C widersprechen, die für die GUI-Programmierung sehr stark von OOP abzuhängen scheinen. Wenn es nicht das richtige Paradigma ist, dann existiert nicht der gesamte riesige Marktanteil von Apple oder so.
S.Lott

1
@ S.Lott es ist jedoch nicht das richtige Paradigma, GUI sollte deklarativ sein. Sie scheinen die Popularität mit dem zu verwechseln, was richtig ist.
Raynos

@ Raynos: "deklarativ". Wie in einigen verwandten Objekten? Ich verstehe nicht, wie deklarativ nicht eine Reihe von Beziehungen zwischen einer Reihe von Objekten ist. Und. Das scheint für diese Frage nicht zum Thema zu gehören. Die Frage scheint nach OO zu sein, nicht nach besseren Möglichkeiten, GUIs zu schreiben. Der Titel scheint im Vergleich zur eigentlichen Frage irreführend zu sein. Weder sind sehr gut.
S.Lott

1
@Inca: Betrachten Sie es als bloße Übertreibung.
S.Lott

Antworten:


9

Ich bin normalerweise kein Befürworter von OOP, aber ich würde sagen, dass die GUI-Programmierung einige der besten Möglichkeiten bietet, die Stärken von OOP zu nutzen. Die Implementierung verschiedener Widgets wird durch die Verwendung des Polymorphismus und der Vererbung von OOP erheblich vereinfacht. Die GUI-Bibliothek von PLT Racket ist ein gutes Beispiel.


2
Funktionale reaktive Programmierung scheint jedoch besser zu passen.
SK-Logik

@ SK-Logik: Sie könnten dafür ein sehr gutes Argument vorbringen, und einige interessante Arbeiten in Common Lisp (haben Sie von Cells gehört?) Wurden in diese Richtung geleistet. Ich werde meine Antwort bearbeiten, um sie genauer zu machen.
Larry Coleman

5

Eine typische GUI aus Widgets und deren Layout ist vollständig deklarativ. Widgets an sich würden nicht miteinander interagieren, daher ist eine Vorstellung von Objekten und Nachrichten hier etwas fremd. Hierarchische deklarative DSLs sind derzeit eine Art Mainstream, wobei Tk eines der ersten Beispiele ist und WPF ein moderner Ansatz für dasselbe. Funktionale reaktive Programmierung ist ein weiterer interessanter (aber nicht sehr verbreiteter) Ansatz.

Einige Leute neigen dazu, OOP überall dort zu sehen, wo eine Hierarchie definiert ist, was falsch ist - es gibt absolut keinen Zusammenhang zwischen strengen Hierarchien (lesen - algebraische Datentypen) und Kays Definition von OOP.


3
Nach meiner Erfahrung müssen Widgets miteinander interagieren, um eine bessere Benutzeroberfläche zu erstellen, und den deklarativeren Systemen, auf die ich gestoßen bin (bestimmte XML-basierte Systeme, einschließlich HTML + CSS), fehlen sicherlich die Möglichkeiten im Interaktionsteil. Auch meine Erfahrungen mit der Integration der Benutzeroberfläche mit deklarativ (prolog) und funktional (Haskell) erweckten nicht den Eindruck, dass es einfach war. Haben Sie Quellen, die ich mir ansehen könnte, um mehr darüber zu diskutieren? Ich habe nur sehr abstrakte (oder sehr grundlegende) Beispiele gefunden, die nicht viel darüber erklären, warum bestimmte Ansätze besser funktionieren
Inca
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.