TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
MIT PROGRAMMIEREN LOSLEGEN... |
Zur Verfügung stehen dir drei Lernprogramme, die du direkt von der Startseite mit Klick auf die Tabs "Turtlegrafik", "Robotik" oder "Datenbanken" starten kannst. Mit Turtlegrafik lernst du anschaulich die wichtigsten Programmierkonzepte kennen. Es sind keine Programmiervorkenntnisse erforderlich. Im Lernprogramm findest du zahlreiche lauffähige Musterbeispiele und Aufgaben zum Selbstlösen. Robotik bietet eine Dimension mehr, da du hier echte Maschinen, die mit ihren Sensoren auf die Umgebung reagieren, programmieren kannst. Allerdings brauchst du dazu entweder einen LEGO EV3, Pi2Go-Roboter, micro:bit, Calliope, mbRobot oder Callibot. Die meisten Beispiele aus dem Lernprogramm Robotik kannst du aber auch mit einem virtuellen Roboter (im Simulationsmodus) ausführen. Das Kapitel Datenbanken ist von grosser Aktualität, da die strukturierte Sammlung und Abfrage von grossen Datenmengen in der heutigen Informationsgesellschaft eine zentrale Rolle spielt. Die Beschäftigung mit Datenbanken soll auch zu Diskussionen über die Datensicherheit und den Persönlichkeitsschutz anregen, ohne dass diese Problematik behandelt wird. Wie in Relationalen Datenbanksystemen üblich, wird die Tabelle als zentrales Strukturierungsmittel verwendet, allerdings sind die bekannten Datenbankoperationen durch die Einführung von Tabellenobjekten stark vereinfacht, so dass eine Einführung in SQL entfällt. Das Tutorial hebt sich auch durch die durchgehende Verwendung der Programmierumgebung und durch die Behandlung von verknüpften Tabellen und Mehrbenutzer-Datenbanken von der Tabellenkalkulation ab. |
KONZEPT DES LEHRGANGS |
Alle Kapitel folgen einer einheitlichen Struktur: |
DU LERNST HIER... |
Es handelt sich um eine kurze Kapitelübersicht und dient vor allem der Motivation. |
MUSTERBEISPIEL |
Hier werden an einem exemplarisch ausgewählten Programm die neuen Begriffe und Verfahren eingeführt. Der vollständig lauffähige Programmcode kann mit einem Klick markiert und über die Zwischenablage in den TigerJython-Editor kopiert werden. Um die Erklärungen zum Programmcode besser folgen zu können, sind wichtige Begriffe mit dem Programmcode verlinkt. |
ZUM SELBST LÖSEN |
Es geht hier um Anleitungen zur Eigentätigkeit entsprechend dem Konzept: "Learning by Doing". Einige Aufgaben sind mit einen Stern versehen. Diese haben einen etwas höheren Schwierigkeitsgrad. |
MERKE DIR... |
sind wichtige Anmerkungen und Zusatzbemerkungen, es handelt sich aber nicht um eine Zusammenfassung des Stoffs. |
ZUSATZSTOFF |
enthält interessante Ergänzungen von etwas weniger grossen Wichtigkeit. |
VERLINKUNG MIT OVERLAY-FENSTERN |
Der Online-Lehrgang verwirklicht ein neuartiges Prinzip der Verlinkung zu weiteren Informationen mit Hilfe von Links, die im Text integriert sind und mit einem Mausklick oder Touch aktiviert werden. Dabei öffnet sich ein Overlayfenster mit fachlichen oder didaktischen Informationen und Hinweisen. Sie sind als Unterrichtshilfen gedacht und wenden sich vor allem an Lehrkräfte. Es kann sich auch um Begründungen für das von uns gewählte methodische Vorgehen handeln. |
ZIELGRUPPE UND ZEITAUFWAND |
Auf Grund unserer eigenen Schulerfahrung gehen wir davon aus, dass sich der Lehrgang ab dem mittleren Volksschulalter einsetzen lässt. Er ist aber interessant genug. dass er sich auch für einen später einsetzenden Anfängerunterricht eignet. In weiterführenden Schulen empfehlen wir, unser umfangreicheres Lehrmittel "Programmierkonzepte" zu verwenden. Für die einzelnen Kapitel gehen von einem Zeitaufwand von 1 bis höchstens 2 Lektionen aus. Bei einer Beschränkung auf die Turtlegrafik liegt der Gesamtaufwand also im Bereich von 14-20 Lektionen, also von etwa einer Semesterwochenstunde. Im 2. Teil "Robotik" gehen wir davon aus, dass die grundlegenden Konzepte aus dem 1. Teil "Turtlegrafik" bekannt sind. Es ist allerdings denkbar, in einem Informatikkurs oder einer Projektwoche direkt mit der Robotik einzusetzen, was aber mit einem zusätzlichen Aufwand für die Lehrperson verbunden ist, da sie die fehlenden Kenntnisse mit didaktischem Geschick laufend "nachreichen" muss. Im 3. Teil "Datenbanken" setzten wir Grundkenntnisse von Python voraus. Es sind aber keine Kenntnisse aus dem Kapitel "Robotik" notwendig. Das Tutorial behandelt der Vollständigkeit halber alle wichtigen Datenbankoperationen, kann aber auch stark vereinfacht werden, wenn nur wenige Lektionen für das Thema zur Verfügung stehen. Es genügen dann Kapitel 1 und 2 und einige ergänzenden Aufgaben. (Zur Verbindung mit der Turtlegrafik kann auch Kapitel 11 herangezogen werden.) Obschon die Datenbankfelder einen bestimmten Datentyp besitzen, wird dieser nicht sichbar, da er auf Grund des ersten mit insert() eingefügten Datensatzes automatisch ermittelt wird. Falls die Tabellenkalkulation bereits bekannnt ist, sollte an geeigneter Stelle auf Gemeinsamkeiten und Unterschiede zwischen Datenbanken und Tabellenkalkulation hingewiesen und betont werden, dass sich das eine oder andere Verfahren je nach Problemlage und Vorwissen besser eignet. |
LÖSUNGEN DER AUFGABEN |
Sind Sie an einer Ausbildungsinstitution tätig, so können Sie die Lösungen der Aufgaben mit einer Email-Anfrage an help@tigerjython.com erhalten. Die Anfrage muss die folgenden überprüfbaren Angaben enthalten: Name, Adresse, Ausbildungsinstitution, Email-Adresse. Sie verpflichten sich dabei, die Lösungen nur für den persönlichen Gebrauch zu verwenden und nicht weiter zu geben. |
URHEBERRECHTE |
Dieser Lehrgang ist urheberrechtlich nicht geschützt und darf für den persönlichen Gebrauch und den Einsatz im Unterricht beliebig vervielfältigt werden. Texte und Programme dürfen ohne Hinweis auf ihren Ursprung für nicht kommerzielle Zwecke weiter verwendet werden.
|
Diese Hinweise beziehen sich auf die Programmiertechnik und auf Spezialitäten der Programmiersprache Python.
Diese Hinweise geben Auskunft über unsere didaktischen Überlegungen und Absichten. Es handelt sich auch um Tipps und Vorschläge für Lehrpersonen, wie unserer Meinung nach am besten methodisch vorzugehen ist.
Das Python-Modul dbtable definiert eine Klasse DbTable, die als eine Abstraktion im Sinn der objektorientierten Programmierung einer SQL-Tabelle aufgefasst werden kann. Im Gegensatz zur klassischen Datenbank-Programmierung für Relationale Datenbanken, wo als erstes eine "Verbindung" (Connection) zu einer Datenbank erstellt wird und dann erst Tabellen erzeugt bzw. verwendet werden, wird hier die Tabelle ins Zentrum gerückt, auf welche die Datenbank-Befehle angewendet werden. Diese entsprechen weitgehend SQL-Operationen, allerdings werden sie hier als Methoden der Klasse DbTable definiert.
Im Hintergrund wird eine SQLite-Datenbank verwendet, die sich im Hauptspeicher befindet (in-memory database). Dabei wird zu jeder Instanz von DbTable eine In-Memory-Table mit einem eindeutigen Tabellennamen verwendet. Die Feldnamen (Attribute) werden dem Konstruktor von DbTable entnommen und die Feldtypen aus den Parametern des ersten Insert-Aufruf bestimmt, d.h. die interne Datenbank-Tabelle wird erst zu diesem Zeitpunkt mit einem SQL-Create-Befehl erzeugt. Die Feldtypen sind auf INT, FLOAT, TEXT und BLOB beschränkt. Es gilt folgendes Type-Mapping:
Python-Typ | Datenbank-Typ |
int | INT |
float | FLOAT |
str | TEXT |
array.array(Bytearray) | BLOB |
Beim Auslesen der Daten werden die Datenbank-Felder automatisch wieder zurück auf Python-Typen konvertiert. Dadurch entfällt eine explizite Behandlung von SQL-Datentypen, was der Typenlosigkeit von Python-Variablen entspricht und dem Python-Programmierer stark entgegen kommt.
Die Anbindung der DbTable-Instanz an die Datenbankdatei einer SQLite-Datenbank erfolgt erst durch das "Abspeichern" der Tabelle mit der Methode save(fileName, tableName). Hier werden der Dateipfad und der Tabellenname als Parameter angegeben. Existiert die Datenbankdatei noch nicht, wird sie angelegt. Existiert die Tabelle bereits, so wird sie zuerst gelöscht. Nachher wird ein exakter Klone der internen Datenbank-Tabelle in der externen Datenbank erzeugt (unter Beibehaltung der Tabellenstruktur und der Werte).
Um einer Verwechslung der DbTable-Instanz und der Datenbank-Tabelle vorzubeugen, kann die Angabe eines Namens entfallen. Wird nämlich save(fileName) ohne den Parameter tableName aufgerufen, so wird der Variablenname der DbTable-Instanz als Tabellenname in der Datenbank verwendet.
Um die Daten einer Tabelle von der Datenbank zurück zu holen, verwendet man restore(fileName, tableName). Auch hier kann der Tabellenname entfallen und es wird dann der Variablenname der DbTable-Instanz verwendet. Diese muss vorher mit dem Default-Konstruktor erzeugt werden.
Um die wichtigsten SQL-Befehle abzubilden, sind viele Methoden von DbTable mehrfach überladen, d.h. erlauben eine variable Anzahl von Parameter. Zudem wird die Syntax der benannten Python-Variablen gebraucht, um Attributen einen Wert zu geben, also beispielsweise delete(name = "Meyer", vorname = "Hans"). Dies ist elegant, bedingt allerdings, dass die Attribute sich an die Namensgebung von Python-Variablen halten (keine Spezialzeichen). Solche Parameterangaben werden direkt in SQL-Bedingungen (WHERE) umgesetzt. Da die Python-Syntax nur ein Gleichheitszeichen für benannte Parameter zulässt, lassen sich auf diese Art leider nur Gleichheitsbedingungen formulieren.
Unter Verwendung des Moduls prettytable ist es möglich, extrem einfach eine DbTable im Ausgabefenster tabellenartig formatiert auszuschreiben. In der Methode view() lassen sich auch die angezeigten Felder und Gleichheitsbedingungen für die Auswahl der Datensätze angeben. Soll die ganze Tabelle angezeigt werden, so genügt der Aufruf von print.
Da DbTable einen Iterator definiert, können die einzelnen Zeilen mit einer for-Schleife durchlaufen werden. Mit dem Punktoperator und dem Feldnamen wird auf den Feldwert zugegriffen, also typisch für die Feldnamen (Attribute) name, firstname:
table = DbTable(...)
...
for record in table:
{record.name, record.firstname verwenden}
Die extern erzeugte SQLite-Datenbank kann natürlich auch von anderen Programmen, die explizit SQL verwenden, oder mit einem DbBrowser bearbeitet werden (z.B. dem DB Browser for SQLite).
Um es zu ermöglichen, in der Datenbank jede Art von binären Daten abzuspeichern (Bilder, Sound, usw.) wird der Feldtyp BLOB (Binary Large OBject) unterstützt. Dabei kann irgendeine externe Datei mit bis zu rund 2GB mit buffer = getBytes(fileName) in einen Bytearray eingelesen werden, der wie jedes anderer Feld mit insert(...buffer...) in die Tabelle kopiert wird. Beim Auslesen der Tabelle, z.B. mit select(), ergibt sich aus dem BLOB-Feld wieder ein Python-Bytearray, und mit storeBytes(buffer) wird die binäre Datei wieder herstellt. Zudem können Bytearrays direkt als Bilder in ein Turtle- oder GPanel-Fenster dargestellt oder als WAV-Datei mit dem Modul soundsystem abgespielt werden.