MUPIS - Modellieren und Programmieren in der Schule

 

Kein OOP am Anfang!

Bei Java muss man am Anfang viele Paradigmen gleichzeitig lernen

// Klassendeklaration in Java
class House { 
// Attibute: 
private float length; 
private float width; 
private int floors; 
private float height; 
private boolean hasCellar;  
// Methoden: 
public float getLength() {return length()}; 
public void setLength(float len) {this.length = len}; 
... 
public boolean setFloors(int nFloors) { 
if (nFloors <= 0) { return false; } 
else {floors = nFloors}; 
... 
}

... und kämpft mit Klammern aller Art

( ), [ ], { }


Modellieren statt Codieren

Erfahrungen zeigen, dass Lernende beim Einsatz von Sprachen wie Pascal, Delphi oder Java mehr Zeit mit dem Codieren verbringen als mit dem Modellieren der Problemstellung:



Systematische Konstruktion von Funktionen
(Konstruktionsanleitung)

  1. 1.Kurzbeschreibung
    Berechnung des Umfangs eines Rechteckes aus den Längen der beiden Seiten

  2. 2.Datenanalyse

    Eingaben: Seite a = Zahl, Seite b = zahl

    Ausgabe: zahl


  3. 3.Vertrag
    ;umfang: zahl zahl ––> zahl

  4. 4.Gerüst

    (define (umfang a b)
        ...)


  5. 5.Testfälle
    (check-expect (umfang 3 4) 14)
(check-expect (umfang 0.7 35) 71.4)

  6. 6.Schablone (=Rumpf mit Lücken bzw. „Ellipsen” zum späteren Ersetzen

    (define (umfang a b)
        ..a.. ..b..)


  7. 7.Rumpf bzw. Quellcode komplett

    (define (umfang a b)
          (* 2 (+ a b)))


  8. 8.Testen



 
 

Programmier-Techniken (oder -Paradigmen)

Die Einteilung der Programmiertechniken, also der Denkstile oder der fundamentalen Denkmuster beim Programmieren sowie deren Bezeichnungen sind bekanntlich nicht einheitlich.
Für die allgemeinbildende Schule sind i.A. funktionale Modellierung, imperative Modellierung und objektorientierte Modellierung (00P) angemessen und üblich.
Nach Möglichkeit sollten die Schüler diese drei Techniken kennen und verstehen lernen, mindestens jedoch die ersten beiden.

–> multiparadigmatische Ausbildung


Von großer Bedeutung ist dabei die Reihenfolge: Für Anfänger ist objektorientierte Programmierung (OOP) völlig ungeeignet, wie man Java-Beispiel (links) sieht:
Bei der Deklaration einer Klasse muss gleichzeitig der Umgang mit

  1. Funktionen (mit Funktionswert): getLength

  2. Prozeduren (ohne Funktionswert): setLength

  3. Zuweisungen: this.length = len

erlernt werden. Damit sind Anfänger erfahrungsgemäß überfordert.

Ein Einstieg mit 2., also der imperativen Programmierung ist auch nicht zu empfehlen, da z.B. durch Zuweisungen, einem typischen Merkmal dieser Programmtechnik Seiteneffekte entstehen, die für einen Anfänger i.A. schwer zu erkennen sind.

Daher liegt die Reihenfolge

  1. 1. funktionale Modellierung

  2. 2. imperative Modellierung

  3. 3. objektorientierte Modellierung

auf der Hand.
Natürlich gehört in allen drei Fällen eine vorbereitende, sorgfältige Daten-Modellierung (nicht zu verwechseln mit Datenbankmodellierung!) dazu.


Programmieren lernen ≠ Programmiersprache lernen

Jeder, der seine Programmierkenntnisse beruflich nutzen will, wird – wenn nicht schon in der Ausbildung – weitere Programmiersprachen lernen müssen. Deshalb müssen allgemeine übertragbare Konzepte eingeübt werden, insbesondere die der Abstraktion, im Sinne der Verallgemeinerung von Details, also effektive Abstraktionstechniken wie

  1. prozedurale Abstraktion

  2. Datenabstraktion

  3. Funktionen höherer Ordnung (High-Order)

  4. Modularisierung

  5. usw.

–> Abstraktion, Abstraktion, Abstraktion



Modellieren statt Codieren

Die Unterrichtszeit beim Programmieren darf nicht überwiegend mit dem Codieren von Programmieren verschwendet weren (vgl. Tabelle links), vielmehr ist sie der Problemanalyse und dem Modellieren zu widmen.
Daraus resultieren folgende Anforderungen:

–> einfache, aber mächtige Syntax


–> ausdrucksvolle Semantik


–> anfängergerechte Entwicklungsumgebung



Einstieg und Schwerpunkt:
Funktionale Modellierung & Programmierung

Im Mittelpunkt steht die systematische Konstruktion von Funktionen.
Die Lernenden müssen sich bei jeder Funktionsdefinition streng an die „Konstruktionsanleitung” halten.



 

Didaktisches Konzept