Lehrzeit

Schule & Informatik

Monat: Dezember 2016 (Seite 1 von 2)

Grundwissen 1

Ungefähr 90% der Schüler in der zehnten Klasse haben nie zuvor programmiert oder Java programmiert. Diejenigen, die in JavaScript, C#, C++, Python bereits Erfahrungen gesammelt haben, haben mit dem Lernen von Java kaum Probleme – wenn man mal von ihrer Einstellungen „Das geht aber in der Sprache ….. viel besser.“ absieht. Das Programmiersprachen nicht eindeutig gut oder schlecht sind, ist bei diesen Schülern dann das vorrangige Ziel: Es gibt nur für ein Problem ungeeignete Programmiersprachen.

Für den 90%igen großen Rest ist das Programmieren mit Java oder überhaupt Programmieren auch nach knapp 3 Monaten ein Mysterium, das sich nur langsam lüftet. In der Hoffnung auf mehr Verständnis und schnellerer Selbstständigkeit, habe ich mit meinen Schüler dieses Jahr deswegen gleich mal ein etwas größeres Projekt vorprogrammiert und versucht dabei die Grundlagen für die kommenden Projekte zu legen.

Das Projekt war das Speichern von Hausaufgaben bzw. Freunden. Genaugenommen von 1 Hausaufgabe und 1 Freund. Die Erweiterung auf mehrere Freunde und Hausaufgaben kommt dann beim Einführen von Arrays. Wobei letzteres ja jetzt durch meine 11. Klasse nochmals abgeändert und angepasst wurde.

Im Anschluss an das Vorprogrammieren habe ich dann eine Zusammenfassung „Was du alles wissen musst“ ausgeteilt und habe diese, mit den Schülern nochmals zusammen ausgefüllt. So haben die Schüler nochmals den Stoff reflektiert und schriftlich festgehalten.

bildschirmfoto-2016-12-17-um-10-32-56

Die entsprechende Datei stelle ich hier als Word-Dokument zur Verfügung. Vielleicht mag der ein oder anderen Kollegen die Datei auch Verwenden. Entweder zum gleich Austeilen oder um die Antworten zu entfernen oder die Datei zu erweitern (dann wäre es schön, wenn ich sie wieder bekommen könnte): was-du-bis-jetzt-können-musst

Im Anschluss an die Besprechung haben die Schüler die Aufgabe bekommen, ein kleines Programm zu schreiben mit dem die Oberfläche, Volumen und Kantenlänge eines Quaders berechnet werden kann. Die GUI hatte ich bei diesem Projekt noch vorgegeben: Quader mit GUI  Die einzelnen Aspekte des Programms habe ich als Kommentare hinzugefügt.

Das zweite Projekt ist das gleiche nur mit einer Kugel. Die GUI ist dadurch entsprechend einfach und kann mit dem Java-Editor erstellt werden.

Im nächsten Schritt wird es wieder schwieriger. Jetzt geht es um das Volumen einer Pyramide mit regelmäßigem n-Eck als Grundfläche… und für die besseren Schüler noch in der Variante Pyramidenstumpf und/oder unregelmäßiges n-Eck.

MVC und Kompositum

Meine aktuelle 11. Klasse in Informatik muss eine Hausaufgabenverwaltung als Anwendung des Kompositum-Entwurfmusters programmieren. Und wie immer spaltet sich die Gruppe in die erfahrenen Programmierer („Kann ich nicht eine ArrayList nehmen?“, „Java ist doch eh Sche… . In C#/C++/Python/…. wäre das viel einfacher.“) und die Schüler mit wenig Erfahrung auf („Herr Bartling, bei mir werden nur 2 Elemente in die Liste aufgenommen. Können Sie mal kommen?“).

Da das Ganze als kleiner Leistungsnachweis gedacht ist, gibt es wieder eine Grundanforderung zum Erreichen der Note 2 und ein paar Anregungen zum Erreichen der 1. Das entsprechende Blatt im Word-Format, so dass es verändert und angepasst werden kann, stelle ich hier mal zur Verfügung: hausaufgabenverwaltung .

Eine mögliche „1er“-GUI aufgrund der vielfältigen Möglichkeiten wäre, wenn sie vollständig funktioniert, dieser Entwurf von mir:

bildschirmfoto-2016-12-10-um-08-50-44

Das Abgabedatum wird dabei automatisch mit Hilfe der Systemzeit voreingestellt. Zum einfacheren Testen wird noch ein Dummy-Text erzeugt in dem ich mir von der Internetseite www.loremipsum.de einfach 100 Zeichen geholt habe und per Zufall Text ausschneiden. Erstellt werden bei mir im Unterricht solche Oberflächen mit Hilfe des Programms Java-Editor . Man kann den Java-Editor  einfach im Netzwerk installieren. Allerdings habe ich den Eindruck, dass bei einem Starten von mehreren Benutzern die Software nicht 100%ig funktioniert: Das Umbenennen der Objekte funktioniert nicht korrekt. Nach dem ich mehrere Buttons einfügt und über das Eigenschafts-Fenster umbenannt habe, habe ich so merkwürdigen Namen wie jButton1_sortierenDatum_Speichern_SortierenPriority, jButton1_sortierenDatum_Speichern, jButton1_sortierenDatum. Ich denke, wenn die Software lokal läuft, hat man das Problem wahrscheinlich nicht, aber das habe ich noch nicht ausprobiert.

Als nächstes muss die Verwaltung der Hausaufgaben in einer verketteten Liste nach dem Kompositum-Muster umgesetzt werden. Ich halte das zwar für eine nicht optimale, aber eine mögliche Anwendung des Kompositum-Musters gemäß des Lehrplans:

 

  • Implementierung einer einfach verketteten Liste als Klasse mittels Referenzen unter Verwendung eines geeigneten Softwaremusters (Composite); Realisierung der Methoden zum Einfügen, Suchen und Löschen
  • Einsatz der allgemeinen Datenstruktur Liste bei der Bearbeitung eines Beispiels aus der Praxis: Verwaltung von Elementen verschiedener Datentypen mittels Vererbung

 

Geschicktere Anwendungen wären Menü-Strukturen, Gruppierungen oä. Mehr zu diesem Entwurfsmuster und anderen  findet man bei philipphauer.de nachvollziehbar dargestellt und diskutiert.

Ein anderes Entwurfsmuster ist das MVC: Model-View-Control . Model sind die Daten, View ist hier die Oberfläche und die Control-Klassen kontrollieren und Steuern den Datenfluss zur und von der Oberfläche zu den Daten. Die Schwierigkeit besteht dabei in der wirklichen Trennung der Control-Funktionen von der Oberfläche und den Daten. So ist es beispielsweise viel einfacher die Kontrolle der eingegebenen Daten in der Oberfläche zu realisieren statt im Controller. Bei Fehlern so einfach ein neuer Wert angezeigt werden und automatisch an das Backend weitergeleitet werden. Allerdings müsste man dann bei einer anderen Oberfläche diese Prüfung zusätzlich implementieren anstatt einfach die Funktionalität des Controllers zurück greifen zu können

Viel schwieriger ist die Einhaltung der Trennung von Struktur und Inhalt beim Kompositum. Einfache Funktionen, wie das Zählen der Elemente, sind schnell und korrekt umgesetzt. ABER wenn es um spezielle Funktionen geht, wie das Finden aller Eingegebener Tage, so landet mal schnell bei Methoden wie

abstract public String getAllDates();

Hierbei wird die Trennung von Struktur und Inhalt im Kompositum aufgehoben, denn es wird, zumindest wenn man es nicht richtig macht, auf ein spezielles Attribut Datum der Hausaufgaben eingegangen.

bildschirmfoto-2016-12-10-um-10-03-36

Der „falsche“ Quelltext würde lauten:

HA_Liste

    public String getAllDates() {
        return first.getAllDates();
    }

Datenknoten

    public String getAllDates() {
        String curDate = meinInhalt.getInfos()[1];
        String otherDates = next.getAllDates();
        if (otherDates.indexOf(curDate) == -1 ) {
            otherDates += "#"+curDate;
            //Der String wird später über split in ein Array zerlegt
            //und dadurch das DropDown-Menü angepasst.
        }
        return otherDates;
    }

„Richtiger“ wäre es, denke ich, einfach alle Daten sich von der Listen zurückgeben zu lassen und dann in der Oberfläche die Daten zu filtern und anzuzeigen. Ähnlich wie bei Datenbanken. Man holt sich über FROM die Daten und filtern dann u.a. die Daten über SELECT.

Oder man filtert in einer Controller-Klasse, die hier aber noch nicht umgesetzt wurde.

Weihnachtsmarkt

Zum zweiten Mal gibt es bei uns jetzt parallel zum Eltersprechabend auch einen Weinachtsmarkt. Klassen, AGs, SMV und auch mein P-Seminar 3D-Druck bieten dabei kleine Geschenke und Plätzchen an. Wir haben Plätzchenausstecher gedruckt und Ketten mit leuchtenden Herzchen gebastelt. Bin gespannt wie es läuft.

img_6430

img_6425

img_6426

Ältere Beiträge

© 2017 Lehrzeit

Theme von Anders NorénHoch ↑