Informatikaufgabe 19

Zunächst möchte ich mich für die Quasi-Wiederholung der letzten Aufgabe entschuldigen. Da habe ich wohl mal kurzfrsitig den Überblick verloren. Daher schreibe ich gleich eine neue Aufgabe heute hinterher.

In meiner Zwölften stehe ich im Moment an der Stelle, dass ich meinen Schülern die Programmierung mit Threads näherbringen muss. Rahmenthema sind Semaphoren, Monitoring, Deadlocks etc. Um diese Problematik zu verstehen, versuche ich also Threads programmieren zu lassen. Dabei taucht sehr schnell das Problem auf, das so einfache Sachen wie start() und stop() depricated sind und sich nicht so einfach umgehen lassen.

Nun habe ich bei meiner letzten Unterrichtstunde eine Analogie gefunden, die den Schülern sehr eingängig war und die Lösungsidee schön verdeutlichte. Meine Idee basiert dabei auf folgendem youtube-Film:

Der Hund implementiert dabei das Interface “swallowable” – er kann also theoretisch schlucken. Allerdings nicht ohne Hilfe des Stuhls. Wenn dem Hund das start()-Kommando gegeben wird, dann setzt er sich selbstständig in den Stuhl und kann dann auch schlucken. Ist der fertig und bekommt das stop()-Kommando, so geht er selbstständig wieder aus dem Stuhl.

So ähnlich ist das auch mit der Implementierung von Threads:Das Baby links ist Runnable, also lauffähig. Es hat zwar Beine, aber kann ohne Hilfe nicht laufen. Wenn ich dem Baby jetzt das start()-Kommando geben, krabbelt es in die Laufhilfe (Thread) und kann dann auch laufen. Kommt das Stop()-Kommando, so klettert es wieder heraus.

Im Quellcode sieht das Ganze dann so aus:

import javax.swing.*;

public class Baby implements Runnable{
    Thread thread = null;

    public synchronized void start(){
        if (thread == null){           //Ist noch nicht in der Laufhilfe
            thread = new Thread(this); //Laufhilfe anziehen
            thread.start();            //loslaufen
        }
    }

    public synchronized void stop() {
        if (thread != null) {          //Hat Laufhilfe noch dran
            thread = null;             //Aus der Laufhilfe krabbeln
        }
    }

    public void run(){
        //Was immer auch beim laufen gemacht werden soll
    } 
}

Das Beispiel war immerhin so plakativ, dass die Schüler sich die grundlegende Idee merken konnten und dann beim Programmieren des anschließenden Chat-Servers auch wiederverwenden konnten. Die erste Aufgabe war allerdings in diesem Zusammenhang eine deutlich einfacher:

Aufgabe

Programmiere einen einarmigen Banditen in dem Sinne, dass drei Spielwalzen durch Klick auf die Schaltfläche so angehalten werden sollen, dass man möglichst dreimal die gleiche Zahl hat.

 

App Inventor Edu

Zum Ende des vergangenen Jahres schloss Google einige Abteilungen seiner Google Labs und der damit verbundenen Anwendungen. Eine davon war der AppInventor, eine Drag’n’Drop-Programmieroberfläche für Androidhandys ähnlich zu Scratch. Das dachte sich wohl auch das MIT Media Lab und konnte sich die Programmierumgebung holen. Sie wird wieder unter dem Namen App Inventor Edu angeboten. Im Moment wird zwar noch nicht der entsprechenden Dienst angeboten, aber man kann verfolgen, wie die Entwicklung für dieses Jahr weitergeht oder schon mal für sich anfangen.

Für mich stellte diese Anwendung eine der besten Möglichkeiten dar, Jugendliche im Alter von 14 bis 18 Jahren für das Programmieren und die Informatik allgemein zu begeistern. Für die jüngeren ginge das natürlich auch, aber da nehme ich dann doch lieber Scratch.

Computeraufgabe 18

Frisch aus dem Unterricht der zehnten Jahrgangsstufe.

Aufgabe

Erstelle ein Zahlenrate-Spiel bei dem der Anwender maximal dreimal die Aufforderung bekommt, die vom Computer gedachte Zahl zu erraten.

Damit die Schüler sich nicht unnötig schwer mit einer Oberfläche tun, stelle ich an dieser Stelle immer folgende Klasse zur Verfügung:

import javax.swing.JOptionPane;

class MeinInput {
    public int intEinlesen(String frage) {
        int zahl = 0;
        String eingabe=JOptionPane.showInputDialog(frage,"1");
        try {
            zahl = Integer.parseInt(eingabe);
        } catch(NumberFormatException error) {
            System.out.println(eingabe + " ist keine ganze Zahl");
        }
        return zahl;
    }
}

Der Vorteil dieser Klasse liegt darin, dass meine Schüler im Laufe der Zeit diese durch andere Methoden ergänzen und sich damit selbst eine Art “Bibliothek” aufbauen. Damit verbessert sich im Allgemeinen der Umgang mit den packages in Java – und in anderen Sprachen gibt es ja auch solche Programmierbibliotheken.

Durch die weitere Nutzung der Seite (Scrollen, Navigieren) stimmen Sie der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen