Aufgabengenerator Java

Vor kurzem hat Herr Rau auf seinem Blog einen Aufgabegenerator zum Erzeugen von Klassenkarten und zugehörigen Testklassen zum Download angeboten. Das habe ich nun getan und wollte hierzu kurz wie versprochen mein Feedback schreiben.

Zunächst mal muss ich sagen, dass ich Aufgabengeneratoren klasse finde. Ich selbst habe früher einige auf JavaScript-Basis für meinen Mathe-Unterricht geschrieben. Immer angeregt durch die Seite von Arndt Brünner. Manchmal bin ich aber auch an meinen Erwartungen gescheitert. So habe ich für geometrische Konstruktionen mal einen Parser schreiben wollen, hatte aber zum damaligen Zeitpunkt noch keine Ahnung wie man so etwas macht. Habe ich auch immer noch nicht zu 100%, deswegen kann man nur den Ansatz anschauen. Irgendwann sollte ich das noch mal neu ansetzen. Genauso wie den Aufgaben-Generator zum Üben der Potenzgesetze. Noch weniger fertig und mit noch höheren Ambitionen angefangen (Zwei Potenzen anklicken und das zugehörige Gesetz auswählen mit dem vereinfacht werden soll). Beides habe ich im Übrigen vor knapp 15 Jahren angefangen zu schreiben. Wahnsinn, wozu ich früher noch Zeit hatte.

Zurück zu m Java-Generator von Herrn Rau. Ich finde den Aufgaben-Generator prima. Die Oberfläche entspricht nicht ganz meinem Stil, aber die Auswahl-Möglichkeiten sind gut. Man kann die Anzahl der Attribute bestimmen, ob 2 Konstruktoren umgesetzt werden sollen, ob es Startwerte für die Attribute geben soll, ob diese private sein sollen und ob es Methoden geben soll. Den letztere Punkt finde ich zu “übertrieben”, da es sich nur um die Standard get/set-Methoden der Attribute handelt. Herauskommen tut dann so etwas:

|--------------------
| Mensch
|--------------------
| bunt: boolean
| haeufigkeit: double
| typ: char
| postleitzahl: int
|--------------------
| Mensch()
| Mensch(boolean, double, char, int)
| getBunt(): boolean
| getHaeufigkeit(): double
| getTyp(): char
| getPostleitzahl(): int
| setBunt(boolean): void
| setHaeufigkeit(double): void
| setTyp(char): void
| setPostleitzahl(int): void
|--------------------
Der Wert des Attributs 'bunt' soll am Anfang sein: true
Der Wert des Attributs 'haeufigkeit' soll am Anfang sein: -2.447199215281726
Der Wert des Attributs 'typ' soll am Anfang sein: 'S'
Der Wert des Attributs 'postleitzahl' soll am Anfang sein: 61

Schön ist hierbei, dass die Beschreibung in UML erfolgt, also der Datentyp bzw. Rückgabewert mit Doppelpunkt angehängt wird. Das finde ich in den Schulbüchern ein Unding. Dafür fehlt mir jetzt das – bzw. + für private und public. Das das Rechteck nicht geschlossen ist, kann ich zwar nachvollziehen, hätte man aber vielleicht korrigieren können.  So sieht es irgendwie halb fertig aus. Den Startwert für den double-Wert finde ich ein wenig übertrieben. Da hätte so etwas wie “Zufallswert(0,100) . Zufallswert(0,100)” es auch getan. Und für die Postleitzahl sollte es dann auch fünfstellig sein.

Als Methode würde ich immer auch noch eine toString()-Methode ergänzen… die kann man später immer mal gebrauchen.

Das aber absolut beste an dem Generator ist, dass er parallel eine Testklasse erzeugt. Im Gegensatz zu einer Musterlösung, die im Zweifelsfall nur irgendwie kopiert wird, lässt sich so herausfinden, ob man alle gewünschten Anforderungen erfüllt hat. Das finde ich wirklich großartig.

Hier ein kleiner Auszug:

import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class MenschTest {
    Mensch testObject;
    public MenschTest() {}

    @Before
    public void setUp() {
        testObject = new Mensch();
    }

    @Test
    public void initialisierungVonBunt() {
        assertEquals(testObject.getBunt(), true);
    }

    @Test
    public void initialisierungVonHaeufigkeit() {
        assertEquals(testObject.getHaeufigkeit(), -2.447199215281726, 0.00001);
    }

So wird mit der letzten Methode geprüft, ob der Startwert um maximal 0.00001 vom Wert -2.447199215281726 abweicht. Das macht hier zwar wenig Sinn, aber bei Methoden, die etwas wirklich berechnen sollen, macht die Benutzung einer Delta-Abweichung durchaus Sinn.

Fazit: Ich finde die Arbeit von Herrn Rau großartig und werde sie auch einsetzen. Ich würde mir für Kollegen noch ein paar einfachere Erweiterungsmöglichkeiten wünschen (Andere Klassen, Attribute, Methoden über eine Text-Datei integrieren) und das -/+ für private und public wünschen, aber das wärs auch schon. Danke Thomas für deine Arbeit.

 

Beteilige dich an der Unterhaltung

4 Kommentare

  1. Danke für die Rückmeldung, und gern geschehen. Ja, das kann und sollte man durchaus noch erweitern. Im Moment gibt es nur getter und setter, aber man könnte auch eine Reihe von mehr oder weniger einfachen Funktionen einbauen und daraus jeweils zufällig eine zum Implementieren auswählen lassen. Quasi als Aufgabensammlung mit unterschiedlichem Schwierigkeitsgrad. Die Aufgabenstellung vielleicht als pdf, sicher aber mit ordentlichem Rahmen drumherum. Im Moment gibt es nur ein paar Standarddatentypen mit jeweils festem (aber eingeschränktem) Wertebereich, alle in einer Klasse konfiguriert. Da könnte man dann auch fünfstellige int-Varianten ergänzen, oder Haarfarben mit speziellen Strings – im Moment hat jeder String einfach den gleichen Wertebereich, nämlich eine Handvoll Wörter, aber das sollte man ändern.

      1. Hallo Thomas,
        nur eine kleine Anmerkung: Postleitzahlen sind keine Zahlen, sondern Zeichenketten.
        Im Osten Deutschlands beginnen sie nämlich mit einer 0 und das geht nur bei Strings.

Schreibe einen Kommentar

Schreibe einen Kommentar zu Herr Rau 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