|
Material-Katalog |
weitere Sammlungen |
gute Beispiele |
Werkzeuge
Sammlung geeigneter Beispiele
Der Erfolg von Unterricht steht und fällt oft
mit der Wahl
eines geeigneten Beispiels. Ein geeignetes Beispiel …
- ist der Lebenswelt der SuS nah bzw. der Kontext
seiner Anwendung
für sie leicht erschließbar (z.B. aus bekannten
Berufsfeldern).
- ist einfach genug, um die Aufmerksamkeit auf das zu
erarbeitende
Konzept zu lenken.
- ist komplex genug, um zu zeigen, dass das genutzte
Konzept eine
bestimmte Funktion erfüllt, zum Lösen von Problem
geeignet ist, „Sinn macht“ – es zeigt
nicht nur wie etwas ist sondern auch warum es so ist.
Bitte fühlen Sie sich aufgefordert, weitere
Beispiele vorzuschlagen,
die sich in Ihrer Unterrichtspraxis bewährt
haben und helfen Sie so, die Sammlung geeigneter Beispiele zu
erweitern!
Vorschläge senden Sie bitte per E-Mail mit einer kurzen
Erläuterung des Beispiels und warum sich welches Konzept damit
gut erarbeiten lässt an: grammschadow-gymnasium-berlin.de
Übersicht
der Themen:
º Objektorientierte
Modellierung und Programmierung
º Kontrollflußsteuerung:
Bedingte Verzweigung und Wiederholung
º Automaten
º ...
Objektorientierte Modellierung und Programmierung
Objekte als
Instanzen von Klassen: Um den Sinn von
Klassen als Bauplan verschiedener Objekte mit gleichartiger Struktur
und einheitlichen Schnittstellen begreifen zu können bedarf es
unbedingt mehrerer Objekte einer Klasse, auf denen verschiedene
Methoden aufgerufen werden. Nicht
sinnstiftend im Sinne der
Objektorientierung sind
die weit verbreiteten Miniwelten
(Kara, Niko,
Karol, ...), bei denen das "Innenleben" einer einzigen Instanz quasi
imperativ implementiert wird (Dieses Vorgehen hat bestimmt seine
Vorteile bei der Vermittlung von "Algorithmik im Kleinen" - Zuweisungen
und Kontrollflußsteuerung).
Vererbung:
- Geometrische
Formen:
Hier lässt sich gut zeigen, dass z.B. für die Klasse
aller
Kreise und alle die Klasse aller Rechtecke die gleichartige Daten
verwalten müssen, die aber für jede individuelle
Instanz
verschiedene Werte annehmen (z.B: grüner kleiner Kreis versus
großer gelber Kreis) - gemeinsam ist allen Objekten einer
Klasse
also welche Art von Informationen verwaltet wird. (Geometrische Formen
werden z.B. von Barnes und Kölling für den Einstieg in die OOP mit BlueJ
empfohlen und sind auch als Greenfoot-Szenario verfügbar: http://greenfoot.org/scenarios/files/shapes.zip)
Alternativ kann mit Java auf einer GUI-Komponente (Klasse
awt.Component) mit der Methode getGraphics() auf ein "Zeichen"-Objekt
zugegriffen werden, mit dem sich Linien, Rechtecke und Ovale zeichnen
lassen und so entsprechende Formen selbst vollständig
programmiert
werden können - ähnlich in Python mit der Klasse
tkinter.Canvas .
Dabei lässt sich - je nach Ausbildungsstand der Lernenden -
bereits auf oberster Abstraktionsebene eine Klasse "Form"
definieren, die gemeinsame Merkmale wie Farbe, Position in
einem
Zeichenfeld oder gefüllt vs. nicht gefüllt definiert.
Die
Größe einer Form wird jedoch in
Abhöngigkeit ihrer
konkreten Geometrie angegeben: Für Rechtecke Höhe und
Breite
- für Kreise der Radius. Die Klasse "Form" muss also eine
"abstrakte Klasse" bleiben - ein Konzept, dessen Sinn
sich OOP-Novizen schwer vermitteln lässt.
ACHTUNG:
Das Quadrat
als Spezielisierung eines Rechtecks ist nicht geeignet,
um Vererbung zur Spezialisierung als Idee einzuführen.
Natürlich ist es möglich, eine Klasse Quadrat von
einer
Klasse Recheck abzuleiten, die dann sinnvollerweise eine
Konstruktor-Methode mit einem einzigen Parameter "seitenlaenge"
implementiert, in der wiederum der Konstruktor der Oberklasse mit
zweifach übergebener Seitenlänge aufgerufen wird. Die
spezialisierte Klasse wird also nicht
wie sonst oft in der OOP um Funktionen erweitert,
sondern grenzt die Menge der möglichen Werte für die
beiden
Seitenlängen auf die Menge gleicher Paare ein. Deshalb wird
hier
von Lernenden oft intuitiv die Richtung der
Spezialisierung vertauscht und gemeint, das Quadrat
würde um
eine weitere Seitenlänge zum Recheck erweitert!
- ...
Geheimnisprinzip:
Das Verbergen der Implementation soll einen Sinn
ergeben!
- Konto (analog
Guthabenverwaltung): Das private Attribut
meinKontostand soll nur durch den Zugriff über eine
öffentliche Methode abheben(betrag) manipuliert werden, um so
dass Vereinbarungen zum überziehen beachtet werden, z.B.
if (meinKontostand – betrag > dispo):
meinKontostand
:= meinKontostand – betrag
else:
werfe Fehlermeldung
- ...
Kontrollflußsteuerung: Bedingte
Verzweigung und Wiederholung ("Algorithmik im Kleinen")
Als erste Anwendungsfälle für basale
Kontrollflußstrukturen bietet sich die Steuerung von
Abläufen an. Diese sollten zum Einstieg nicht zu komplex und
dennoch in einer bedeutsamen Situation eine sinnvolle Lösung
darstellen.
- Turtle-Grafiken
erstellen.
Turtle-Grafiken lassen sich mit einem sehr überschaubaren
Befehlssatz erstellen, wobei Lernende eine unmittelbare und durch die
visuelle Darstellung intuitiv erfassbare Rückmeldung über den
Erfolg ihres Programms erhalten und so sehr gut am Experiment lernen
können. Eindrucksvoll lassen sich durch wiederholte oder auch
rekursive Methodenaufrufe eindrucksvolle komplexere Strukturen wie z.
B. der Kochschen Schneeflocke zeichnen lassen und somit die
Mächtigkeit des Prinzips divide and conquer erfahrbar machen.
Werkzeuge wären z. B.:
- Das Verhalten
eines Roboter steuern:
Als Bedingungen können hier
sinnvoll Sensor-Abfrageergebnisse
ausgewertet werden, z.B. wiederhole Geradeausfahrt solange kein
Hindernis vor dem Roboter erscheint (Ultraschall-Messwert >
meinGrenzwert oder FrontBeruehrungssensor nicht aktiv) oder kreise 4
mal (als Teil einer Tanz-Choreographie). Hierzu bieten sich z.B. die Roboter von
Lego
Mindstorms an. Sollten reale
Roboter nicht zur Verfügung stehen, können
natürlich auch Miniwelten wie Karol (deutscher Pseudocode), Kara (für Automaten, Java oder Python), Niko (für Python) oder Karel (für Delphi) zum Einsatz kommen.
- Den Ablauf einer
Animation steuern: z.B. mit Scratch (http://scratch.mit.edu/),
hier ist positiv hervorzuheben, dass Lernende die Aktionen ohne
Kompiliervorgang durch anklicken testen können und einzelne
Übungen in einem sinnvollen Zusammenhang (der Erstellung einer
komplexeren Animation) und nicht beliebig kombiniert erarbeitet werden!
- ...
Automaten
Mit Automaten lässt sich Verhalten modellieren. Der
modellierte Prozess sollte dabei ein in einem bestimmten Kontext sinnvolles
Verhalten darstellen. So interessiert wenige Schüler, ob das
Wort "hallala" in der Sprache h{a,l} ist, jedoch vielleicht eher ob
eine eingelesene Zeichenfolge "class" von einem Programmiereditor als
Schlüsselwort erkannt werden sollte oder ob ein Text Emoticons
enthält, die sich durch entsprechende Grafiken ersetzen
ließen (siehe Beispiel unten).
Verhalten in Zuständen und
Zustandsübergängen modellieren:
- Verhalten
eines Medienabspielgeräts
modellieren (MP3-,
DVD-,
…)
- verschiedene Zustände eines Medienabspielgeräts
(aus, abspielen, pause) sowie übliche Abbildungen auf
Schaltern und Knöpfen als implizite Schnittstellen sind gut
bekannt. Dabei bewirken über die Knöpfe getätigte
Eingaben eine wahrnehmbare Änderung des Zustands des Geräts (Transduktor, als Ausgaben könnten z.B. interne Befehlsaufrufe wie stoppe, spiele ab, etc. modelliert werden).
- Verhalten
eines Roboters modellieren [und implementieren] Dabei werden durch Sensoren
wahrgenommene Ereignisse in durch Aktoren (z.B. Motoren oder Leuchten)
ausgeführte situationsgerechte Aktionen überführt (Transduktor),
wobei Aspekte der künstlichen Intelligenz und die
tatsächliche Sichtbarkeit und Überprüfbarkeit der
Aktionen die Schülerinnen und Schüler
erfahrungsgemäß stark motiviert, so wirkt ein mit einerm
Ultraschallsensor "vorausschauend" agierender Roboter auf viele
Menschen als relativ intelligent ("Der Roboter 'weiß', dass ein
Hindernis kommt und reagiert angemessen durch Anhalten und/oder
Ausweichen."). Komplexeres Verhalten sollte erst nach und nach aus
kleineren Einzellösungen aufgebaut werden.
Modellierung und Umsetzung können z.B. mit Kara oder
Lego
Mindstorms
erfolgen. Bei letzterem müssen Automaten-Modelle unter
Verwendung von Fallunterscheidung in Programmier-Code
überführt werden! Alternativ lässt sich LegoKara
einsetzen, hier muss die Modellierung anscheinend aber innerhalb der
Welt des Marienkäfers erfolgen.
- Verhalten
eines Verkaufsautomaten (Fahrscheine,
Getränke, etc.): Die Ware wird erst bei ausreichendem
Geldeinwurf ausgegeben (Akzeptor, zusätzlich Transduktor
falls eine Ausgabe des noch ausstehenden zu zahlenden Betrags erfolgt
oder das Aushändigen der Ware im Erfolgsfall als Ausgabe
modelliert wird).
Muster erkennen, ggf. Fundstellen übersetzen:
- Die Eingabe von Benutzern
in ein Eingabefeld auf ein
gültiges Format überprüfen (Akzeptor), z.B.:
- Gleitkommazahl mit Vorzeichen ohne führende Null,
es sei denn an der Einer-Stelle
- Preisangabe mit zwei Nachkommastellen und Währungsangabe,
ohne führende Null,
es sei denn an der Einer-Stelle
- E-Mail-Adresse mit "@"-Zeichen und einer bekannten Top-Level-Domain
- Telefonnummer mit optionalem führenden + (dann aber keine
führende Null!)
- Emoticons
in einem Text erkennen und durch
HTML-Tags zum Einbinden entsprechender Grafiken
ersetzen (Transduktor
mit Pattern-Matching). Die Anwendung
ist aus Chat und E-Mail-Clients bekannt und daher nah an der Lebenswelt
vieler Lerner!
- Ein Gen in einer
DNA-Sequenz finden (Akzeptor
mit Pattern-Matching)
- Ansatzweise einen Übersetzer
vom Deutschen ins Englische konstruieren
(Transduktor).
- Ansatzweise einen Parser
für einen Compiler konstruieren
(Akzeptor
zum Prüfen der syntaktischen Korrektheit, Transduktor falls
eine Übersetzung in Assembler erfolgt).
- ...
...
Bitte fühlen Sie sich aufgefordert, weitere
Beispiele vorzuschlagen,
die sich in Ihrer Unterrichtspraxis bewährt
haben und helfen Sie so, die Sammlung geeigneter Beispiele zu
erweitern!
Vorschläge senden Sie bitte per E-Mail mit einer kurzen
Erläuterung des Beispiels und warum sich welches Konzept damit
gut erarbeiten lässt an: grammschadow-gymnasium-berlin.de
|
|
|
|
Empfehlungen:
|
|