Wikipedia · einfach zusammengefasst · Stand
Visuelle Programmiersprache
Die visuelle Programmiersprache Scratch auf einem Whiteboard Beispiel von Programm-Blöcken bei Open Roberta mit der Programmiersprache NEPO. Graphische …
Inhalt6 Abschnitte
Definition und Grundformen
Eine visuelle Programmiersprache (englisch visual programming language, VPL; auch grafische Programmiersprache) ist eine Programmiersprache, in der Programme, Algorithmen oder Systemverhalten durch grafische Elemente und deren Anordnung festgelegt werden. Je nach Darstellung beruhen solche Sprachen vor allem auf Icons, Tabellen oder Diagrammen.
Visuelle Programmiersprachen können intuitiver und mit weniger Anleitung bedienbar sein als textuelle Sprachen. Dadurch eignen sie sich teilweise auch für Endbenutzer, die keine ausgebildeten Programmierer sind. Wenn Nutzer auf diese Weise selbst Software erstellen oder anpassen, spricht man von End User Development.
Abgrenzung visueller Sprachen
Nicht jedes Programmierwerkzeug mit einer grafischen Oberfläche ist eine visuelle Programmiersprache. Visual Basic Classic, Xcode und Visual C++ bieten beispielsweise grafische Zusatzfunktionen, etwa zum Entwurf von Benutzeroberflächen; die eigentliche Software wird jedoch im Wesentlichen mit einer herkömmlichen textuellen Allzweck-Programmiersprache erstellt.
Nach Stefan Schiffer ist eine visuelle Sprache eine formale Sprache mit visueller Syntax oder visueller Semantik sowie dynamischer oder statischer Zeichengebung. Visuelle Syntax bedeutet, dass Grundsymbole grafisch notiert werden. Visuelle Semantik liegt vor, wenn auch der Laufzeitzustand der dargestellten Objekte visuell erkennbar ist. Dynamische Zeichengebung stellt flüchtige Vorgänge dar, zum Beispiel durch das Aufblinken eines Objekts, das sich verändert.
Die genaue Begriffsgrenze ist nicht einheitlich. Brad Myers beschreibt eine visuelle Sprache allgemein als ein System, das Grafik einsetzt; diese weite Definition könnte auch Systeme mit grafischer Oberfläche, aber textueller Programmierstruktur einschließen. Carsten Schmidt unterscheidet dagegen echt visuelle Sprachen, deren wesentliche Teile grafisch notiert sind, von textuellen Sprachen. Er versteht visuelle Sprachen als Obermenge textueller Sprachen. Als Grenzfall nennt er Python: Die Sprache besitzt eine textuelle Syntax, verwendet aber Einrückungen als semantisches Äquivalent zu Blöcken.
Stärken und Grenzen
Visuelle Darstellungen können Informationen leichter zugänglich machen. Bilder werden früher verstanden als Texte; außerdem werden verbale Informationen sequentiell, visuelle Informationen dagegen parallel verarbeitet. Dadurch lassen sich in einer visuellen Notation mehrere Informationen gleichzeitig wahrnehmen. Bekannte Metaphern und die direkte Manipulation grafischer Objekte können ein künstliches System verständlicher machen und die Programmierung erleichtern. Visuelle Ausdrücke können zudem Sprachbarrieren verringern und verlangen nicht immer ein tiefes Verständnis zugrunde liegender computerspezifischer Methoden.
Diese Vorteile gelten nicht uneingeschränkt. Für abstrakte Konzepte fehlen häufig geeignete Bilder. Grafiken können missverstanden werden, weil ihre Bedeutung vom Betrachter und vom Kontext abhängt. Visuelle Notationen müssen ebenfalls erlernt werden, und es gibt keine allgemein einheitlichen Regeln dafür, wie Diagramme zu lesen sind. Komplexe Abläufe können entsprechend komplexe Darstellungen erzeugen. Visuelle Sprachen sind daher besonders nützlich, wenn sie vertraute Metaphern aus einem bestimmten Anwendungsgebiet verwenden oder ihre grafischen Objekte allgemein anerkannten Konventionen folgen.
Wichtige Qualitätsmerkmale sind eine gute Gestaltung, sekundäre Notation und Mechanismen, die relevante Daten sichtbar machen. Sekundäre Notation bezeichnet zusätzliche, informelle Hinweise in der Darstellung. Visuelle Sprachen bieten außerdem Freiheiten beim Layout und können Interaktionsmöglichkeiten direkt in Symbole einbauen, etwa „Griffe“ zum Verschieben von Objekten oder ein „+“ zum Ausklappen von Bereichen.
Ein weiterer Vorteil ist die inkrementelle Entwicklung: Vorhandene Objekte lassen sich nachträglich verändern oder verschieben. In einem UML-Klassendiagramm kann beispielsweise eine neue Klasse eingefügt werden, indem andere Objekte entsprechend versetzt werden. Nachteile sind der hohe Platzbedarf und der Aufwand der Konstruktion. Grafische Elemente benötigen durch ungenutzte Zwischenräume oft mehr Bildschirmfläche, sodass mitunter weniger Informationen gleichzeitig sichtbar sind. Große Mauswege können die Arbeit verlangsamen; deshalb sind gute Tastaturmechanismen für erfahrene Benutzer wichtig.
Besonders bedeutsam ist das hohe Abstraktionsniveau. Syntaktische Bestandteile einer textuellen Sprache werden als grafische Objekte mit Attributen dargestellt. Beim strukturellen Editieren können Objekte nur an Stellen eingefügt werden, an denen sie syntaktisch erlaubt sind. Geeignete Fehlermeldungen, Konsistenzprüfungen und automatische Hilfen können dadurch Fehler vermeiden und die Entwicklung beschleunigen. Die Darstellung kann außerdem von der Zielsprache entkoppelt sein, sodass diese gegebenenfalls austauschbar ist. Animationen und Simulationen können zusätzlich den inneren Zustand eines laufenden Programms sichtbar machen. Der Generator DEViL unterstützt beispielsweise die Erzeugung visueller Sprachumgebungen mit Simulations- und Animationserweiterungen.
Einsatz in der Bildung
Bildungsorientierte visuelle Programmiersprachen sind meist in vollständige visuelle Entwicklungsumgebungen eingebettet. Nutzer stellen Programmcode menügeleitet oder aus vorgegebenen Bausteinen zusammen. Das soll Programmierfehler vermindern und intuitives Lernen unterstützen. In manchen Entwicklungsumgebungen wird Schriftsprache vollständig durch Icons ersetzt. Dadurch können auch noch nicht alphabetisierte Kinder mit Systemen wie Baltie, Kodu oder Scratch arbeiten. Visuelle Programmiersprachen werden außerdem in der Erwachsenenbildung eingesetzt, beispielsweise Snap!.
Scratch und Snap!
Scratch wurde 2007 veröffentlicht und unter der Leitung von Mitchel Resnick am MIT Media Lab entwickelt. Es ist eine interpretierte, objektorientierte, dynamische, ereignisorientierte und vor allem visuelle Programmiersprache. Dazu gehören eine Entwicklungsumgebung und eine eng angebundene Online-Community. Scratch richtet sich besonders an Kinder und Jugendliche und soll die Grundkonzepte des Programmierens spielerisch und explorativ vermitteln. Unter dem Motto „imagine, program, share“ können Nutzer kostenlos und werbefrei Spiele und Multimediaanwendungen erstellen, spielen, diskutieren und austauschen.
Von März 2007 bis Ende 2015 registrierten sich über 8 Millionen internationale Nutzer, überwiegend im Alter von 8 bis 16 Jahren. Sie veröffentlichten mehr als 11 Millionen selbst entwickelte Projekte. Die ersten Entwicklungsumgebungen beruhten auf Squeak: Version 1.0 erschien 2007, Version 1.4 im Jahr 2009. Der Web-Player nutzte zunächst Java und seit 2011 wahlweise Flash. Scratch 2.0 erschien im Mai 2013 und basierte vollständig auf Flash. Seit 2014 gibt es mit ScratchJr auch eine Version für das iPad.
BYOB ist die englische Abkürzung für „Build Your Own Blocks“ („Bau deine eigenen Blöcke“); das System wurde später in Snap! umbenannt. Die von Scratch inspirierte, quelloffene Sprache richtet sich an fortgeschrittene Schüler und an die Erwachsenenbildung. Sie wird im Sekundarstufen-II-Unterricht an deutschen Schulen sowie an amerikanischen und deutschen Universitäten eingesetzt.
Snap! ergänzt Scratch um komplexere und abstraktere Konzepte. Dazu gehören selbst erstellte Blöcke, First-Class-Funktionen oder -Prozeduren, First-Class-Objekt-Listen einschließlich Listen von Listen sowie First-Class-Sprites. „First-Class“ bedeutet hier, dass solche Elemente wie andere Werte behandelt und weiterverwendet werden können. Die mathematische Grundlage der Funktionen und Prozeduren wird auch als Lambda-Kalkül bezeichnet. Durch prototypenbasierte Programmierung ermöglicht Snap! Objektorientierung ohne abstraktes Klassenkonzept: Neue Objekte entstehen durch das Kopieren vorhandener Objekte, das sogenannte „cloning“.
Weitere Systeme
Weitere Beispiele visueller Programmiersprachen und entsprechender Systeme sind App Inventor, Gupta Team Developer, iCon-L, Keysight VEE, LabVIEW, Lego RCX-Code, Max/MSP, Pd, qfix Grape, Unreal Engine 4 mit Blueprints und vvvv. Auch Scratch und BYOB 4.0 beziehungsweise Snap! gehören zu dieser Gruppe.