Funktionale Programmierung mit Java 2

Das Experiment “Funktionale Programmierung mit Java” läuft – und bis jetzt recht erfolgreich.

Erste Stunde

In der ersten Stunde habe ich kurz das Konzept hinter Java erklärt, also das man lesbaren Sourcecode programmiert und diesen dann in ByteCode kompilieren (übersetzen) lassen muss. Beide Arten von Dateien *.java und *.class haben wir dann in WordPad angeschaut und kurz verglichen. Manches lässt sich in der class-Datei wiederfinden viel Unlesbares ist dazu gekommen.

Da class-Dateien wie Filme sind, brauchen wir noch einen Projektor zum Abspielen und Anzeigen des Films. Ob der benötigte Projektor (Virtual Machine) jetzt auf Windows, OSX oder Linux ist, ist dabei egal – das gilt zwar nicht immer, kann hier aber als didaktische Reduktion aufgefasst werden.

Zweite Stunde

Nun ging es um das Umsetzen des ersten Programms und das Kennenlernen von BlueJ. Dazu habe ich den folgenden Programmcode an die Tafel geschrieben und jeden Teil erklärt und Bezüge zum Stoff der sechsten und siebten Klasse aufgezeigt. Also so Sachen wie “Klassen-Definitionen sind wie Baupläne nach denen Objekte gebaut werden”.

Nur zur Vervollständigung  der Analogie: Der Konstruktor ist der Bauleiter, der aufpasst, ob alles richtig angeliefert und benutzt wird. Benötigen tue ich ihn erstmal nicht.

class HelloWorld {
    public void sagen() {
        System.out.println("Hallo Klasse");
    }
}

Nach dem die typischen Fehler (Semikolon, falsche/fehlende Klammern, falsche GROSSkleinSchreibung) auch gelöst werden konnten, kam auch auch schon die dritte Stunde.

Dritte Stunde

In der dritten Stunde wollte ich unbedingt den ersten Zusammenhang zum funktionale Programmieren in Excel bringen und zeigen, wie Funktionen sich gegenseitig aufrufen. Das Beispiel sollte dabei erstmal ohne Mathematik auskommen. Ich wollte die ersten Programmzeilen einfach nur öfters verwenden. So erhoffte ich mir eine Konzentration auf das eigentliche Problem des Methoden-Schreibens.

Ich dachte zuerst an einen Dialog aus einem Buch, wollte aber dann doch die 28 (!) Jungs meiner Klasse mit ein wenig interessanterem Stoff ansprechen und wir haben Frage-Antwort-Witze umgesetzt. Der zugehörige Java-Sourcecode sah dabei wie folgt aus:

class Hans {
    public void witz1() {
        frage1();
        antwort1();
    }

    private void frag1() {
        System.out.println("Was ist Rot und hängt an der Scheibe?");
    }

    private void antwort1() {
        System.out.println("Tomate in der Mikrowelle");
    }
}

Leider lässt sich keine schrittweiser Ablauf des Programms mit Pause erstellen, aber das war für alle zu verschmerzen.

Reflektion

Als gute Lehrer sollte man ja ab und zu mal über das Reflektieren was man so macht und das soll nun abschließend folgen:

  1. Negativ: Neuntklässler kennen eigentlich nur rassistische, erniedrigende und frauenfeindliche Witze. Beim nächsten Mal muss ich was anderes wählen. Vielleicht so Richtung Vokabeln oder Lexikon. Aber das ist dann auch nicht so lustig.
  2. Positiv: Ich konnte den Schüler zum ersten Mal an dieser Stelle schon erklären, warum manche Methoden public sind (Aufforderung zum Witz erzählen) und private (Den Ablauf und Inhalt des Witzes kennt nur die erzählende Person).
  3. Problematisch: Schaut man sich das Tafelbild an, so haben die Methoden alle Datenquellen und Datensenken (Pfeile), die aber eigentlich gar nicht umgesetzt werden. Datenquellen wäre Parameter und Datensenken wären Returns. Für die Schüler ist das nicht so schlimm, da durch die Pfeile jetzt eher ein Ablauf dargestellt wird, aber eigentlich missbrauche ich das Datenflussdiagramm als Programmablaufplan. Ich werde also doch schnell auf was mathematisches wechseln müssen.

Insgesamt bin ich mit dem Verlauf soweit zufrieden. Aber diese Pfeilproblematik finde ich noch nicht wirklich befriedigend. Vorschläge?

Beteilige dich an der Unterhaltung

4 Kommentare

    1. Mmmmmhhhhh….grüüüüüüübeeeeeelll…deeeeeennnnkkkkkk.

      Meinst du so?
      class Hans {
      public void witz1() {
      frage1("Was ist Rot und hängt an der Scheibe?");
      antwort1("Tomate in der Mikrowelle");
      }

      private void frage1(String text) {
      System.out.println(String text);
      }

      private void antwort1(String text) {
      System.out.println(text);
      }
      }

      Neeeee…irgendwie klappt das nicht so recht, weil die Mehtoden die Paramter ja nicht irgendwie verarbeiten und was Neues ensteht, was man zurückliefern könnte.
      Vielleicht könnte man irgendwie einen boolean-Wert zurückliefern…? Aber den braucht die nächste Methode ja auch nicht.
      Außderdem hatte ich irgendwie eine Witze-Erzählprogramm im Kopf. So wie dieser Witz bei dem drei Männer in einem Abteil sitzen, sich nur Zahlen nennen und dann totlachen, weil sie ihre Witze durchnummeriert haben. So könnte man später mehrere Antwort- und Frage-Methoden haben, die sich beliebig zusammenfassen ließen.
      Vielleicht kann man der Frage irgendwie als Parameter die als nächstes aufzurufende Antwort mitliefern…?

      1. Nein, ich meinte: String nicht nur als Parameter sondern auch statt void als Rückgabetyp. Also:
        String begruessung(String name) {
        return “Hallo ” + name + “\n”;
        }
        und dann in der nächsten Methode:
        String StelleFrage(String name, String frage) {
        return begruessung(name) + frage;
        }
        In der main() dann z.B. System.out.println(quiz.stelleFrage(“Herr Bartling”, “Wie viele Informatiker braucht man, um eine Glühbirne einzuschrauben?”));

        Das wäre einigermaßen funktional. Aber, wie gesagt: war nur so ein Schnellschuss.

        1. Könnte gehen, obwohl es schon sehr gekünstelt auf mich wirkt. Vielleicht fällt mir noch was besseres oder anderes ein. Ich berichte auf alle Fälle weiter.

Schreibe einen Kommentar

Schreibe einen Kommentar zu Ingo Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

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