Aus Das deutschsprachige Scratch-Wiki

Objektorientierte Programmierung, kurz OOP ist ein grundsätzliches Programmierparadigma, welches in den meisten modernen textbasierten Programmiersprachen vorhanden ist. Unter den Blockbasierten Programmiersprachen bietet derzeit nur Snap! ausreichend Funktionalität für eine Objektorientierte Programmierung an. In Scratch kann man seinen Code durch die Figuren zwar strukturieren und mit Hilfe der Klon-Funktion mehrere Instanzen eines Objekts erzeugen, es fehlen aber Möglichkeiten zur Definition von öffentlichen Klassenvariablen und öffentlichen Klassenmethoden.

Grundlegende OOP-Konzepte

Der Code wird in Klassen unterteilt, wobei Daten und Methoden innerhalb der Klasse gekapselt werden. Eine Klasse muss instanziert werden um auf sie zugreifen zu können. Beim Singleton-Pattern hat eine Klasse nur eine einzelne Instanz.

Von außen bietet eine Klasse nur jene Zugriffe durch sogenannte öffentliche Klassenmethoden und öffentliche Klassenvariablen, die für das Verwenden der Klasse notwendig sind. In manchen Programmierstilen verzichtet man sogar auf öffentliche Klassenvariablen und ersetzt den Zugriff auf Daten des Objekts durch sogenannte "getter" und "setter"-Methoden. Ein weiteres Konzept ist die Vererbung. Dabei kann von einer Klasse eine Ableitung gemacht werden, die ohne weiteren Code zu schreiben die Eigenschaften, d.h. die Methoden und Variablen der ursprünglichen Klasse enthält. Dadurch wird Code nicht unnötigerweise dupliziert und kann leichter gewarter werden.

Generell lässt sich in vielen Programmiersprachen objektorientiert Programmieren, was eine Sprache aber nicht zu einer objektorientierten Programmiersprache macht. Umgekehrt garantiert eine sogenannte Objektorientierte Programmiersprache nicht, dass Programme nach objektorientierten Konzepten implementiert werden:

"Real programmers can write assembly code in any language." Larry WallWikipedia.jpg

OOP-ähnliches Programmieren in Scratch

Auch in Scratch ist ein OOP-ähnliches Programmieren im Ansatz durch die folgenden Features möglich

  • Das Kapseln von Skripten in einer Figur ist in Scratch eingebaut.
  • Bei Daten ist die Kapselung in einer Figur durch die Verwendung von lokalen Variablen und Listen möglich.
  • Die Kommunikation zwischen Figuren ist mithilfe der [Sende () an alle und warte (Block)|[Sende]] und Wenn ich () empfange-Blöcke möglich, allerdings können in den Nachrichten keine Daten verpackt werden.

Fallstricke und Hindernisse beim OOP-Paradigme in Scratch

Es gibt keine andere Möglichkeit außer globalen Variablen um Daten mit einer anderen Figur auszutauschen. Das macht die Wiederverwendung von Figuren in neuen Projekten schwierig, da eine Figur nur mit ihren lokalen Variablen gespeichert wird. Wird die Figur in ein neues Projekt integriert, so werden die fehlenden globalen Variablen beim ersten Aufruf als lokale Variablen der Figur erzeugt, so dass ein gemeinsamer Zugriff auf die Daten nicht mehr funktioniert. Ein anderes Problem ist dass der Namensraum der globalen Variablen nicht mit der Figur verschränkt ist. Wird eine Figur dupliziert, so müssen alle globalen Variablen geändert werden. Eine Möglichkeit dies zu umgehen wäre die Verwendung des () von ()-Blocks zum Lesen von lokalen Variablen einer Figur (was allerdings nicht bei Klonen funktioniert). Das Setzen dieser Variablen ist von außerhalb ohnehin nicht möglich.

Das Vererbungskonzept ist nicht implementiert. Möchte man die Funktionalität einer Figur erweitern und diese als neue Figur speichern, so geht dies nur durch duplizieren der Figur, wobei sämtlicher Code und sämtliche Daten ebenfalls dupliziert werden. Die neue und die alte Figur haben keine Klassenbeziehung zueinander. Ändert man etwas am Code der ursprümglichen Figur (im objektorientierten Paradigma wäre das die Superklasse), so bleibt die daraus duplizierte Figur unberührt, wohingegen im objektorientierten Paradigma der Code der Superklasse nur in der Superklasse vorkommt und dort zentral geändert werden kann.

Damit fehlen Scratch die wesentlichen Eigenschaften einer objektorientierten Programmiersprache.

Objektorientiertes Programmieren in Snap!

Snap! unterstützt objektorientiertes Programmieren mit Objekten unterhalb der Ebene der Figuren. Ein Skript wie folgendes erlaubt das Anlegen eines neuen Objekts:

Skript in Snap! welches beim Aufruf ein neues Counter-Objekt zurückgibt

Die so erzeugten Instanzen haben eigene Instanzen des Counters, wie folgender Aufruf zeigt:

Verhalten der unterschiedlichen Instanzen

Dazu gibt es auch Lösungen zum Verarbeiten von Nachrichten und eine Umsetzung von Vererbung durch Delegation. Für eine detaillierte Einführung zu objektorientierten Programmieren in Snap! siehe das Kapitel "Object Oriented Programming" im Snap!-Manual.



Code zum Einbinden ins Forum:
[wiki=de:Objektorientierte Programmierung]Objektorientierte Programmierung[/wiki]
Cookies helfen uns bei der Bereitstellung von Das deutschsprachige Scratch-Wiki. Durch die Nutzung von Das deutschsprachige Scratch-Wiki erklärst du dich damit einverstanden, dass wir Cookies speichern.