Lernressourcen Modularisierung – digibasics
Version 1.0
Prototyp zur Erprobung

Lernressourcen Modularisierung

Praktische Aufgabe

Auf der Webseite der PH Zürich findest du eine Einleitung zum Programmieren mit Scratch.

Theoretischer Hintergrund

Beim Programmieren gibt es zentrale Programmkonstrukte. Diese Konzepte gibt es in praktisch jeder Programmiersprache, sie sind nur nicht immer gleich benannt und umgesetzt.

Schleifen

Schleifen sind im Grunde genommen Wiederholungen. Solche Wiederholungen begegnen uns im Alltag immer wieder. Angenommen, das Kochen müsste als Programm beschrieben werden, dann könnte der Pseudocode für das Schneiden zum Beispiel so aussehen:

Nimm das Messer in deine Hand. Bewege das Messer, bis du das Objekt, das geschnitten werden soll, berührst. Bewege das Messer einen Zentimeter nach rechts. Drücke das Messer nach unten und bewege es abwechselnd nach vorne und nach hinten. Hebe das Messer nach oben. Bewege das Messer einen Zentimeter in Richtung des Objekts. Drücke das Messer nach unten …

Am Schluss werden die gleichen Schritte immer wieder ausgeführt. Statt den Schritt x-mal aufzuschreiben, wäre es auch möglich, die Anzahl Wiederholungen zu nennen. Das könnte so aussehen:

Wiederhole die folgenden Schritte zehn Mal: Bewege das Messer einen Zentimeter nach rechts. Drücke das Messer nach unten und bewege es abwechselnd nach vorne und nach hinten. Hebe das Messer nach oben.

Natürlich könnte man die Wiederholung auch 100 Mal, 1000 Mal oder unendlich lange ausführen lassen. Aber wird so jedes Objekt fertig geschnitten? Vermutlich nicht. Hier kommt ein anderes, zentrales Programmelement ins Spiel: die Fallunterscheidung (auch Bedingung oder Verzweigung genannt).

Fallunterscheidungen

Fallunterscheidungen sind vereinfacht gesagt Fragen, die mit ja oder nein beantwortet werden können. Im Pseudocode oben gibt es bereits eine Fallunterscheidung: «Bewege das Messer, bis du das Objekt, das geschnitten werden soll, berührst.»

Der Koch kann in diesem Fall immer wieder fragen «Berühre ich das Objekt?» und beantwortet die Frage mit ja oder nein. Solange das Objekt nicht berührt wird, bewegt er das Messer näher zum Objekt. Berührt er aber das Objekt, hält er an. Es gibt also zwei mögliche Handlungen, je nachdem, ob die Bedingung erfüllt ist oder nicht. Deswegen heissen Fallunterscheidungen auch Verzweigungen.

Für die Schneidbewegung kann jetzt auch eine Bedingung gestellt werden: «Wiederhole die folgenden Schritte, bis du beim Herunterdrücken das Objekt nicht mehr berührst: Bewege das Messer einen Zentimeter in Richtung des Objekts. Drücke das Messer nach unten und bewege es abwechselnd nach vorne und nach hinten. Hebe das Messer nach oben.»

Jetzt muss der Koch nicht mehr x-mal das Nichts zerschneiden oder mit einer halb geschnittenen Karotte dastehen. Er schneidet das Objekt, bis zum Ende.

Variablen

Variablen sind in der Informatik zentrale Programmkonstrukte. Eine Variable ist im Grunde eine definierte Zahl, die verändert werden kann. Das Geld in deinem Porte­mon­naie könnte man zum Beispiel als Variable darstellen. Vielleicht hast du darin 50 Franken. In vielen Programmiersprachen würde man in dem Fall etwas wie «Geld_in_Portemonnaie = 50» schreiben. Das Setzen dieses Ausgangswertes nennt man «Initialisierung». Bei der Initialisierung wird der Variable ein Anfangswert zugewiesen.

Eine Variable kann im Programm auch verändert werden. Wenn man 10 Franken mehr ins Portemonnaie steckt, hat man nachher das ursprüngliche Geld und 10 Franken. In einer Programmiersprache könnte das so aussehen: «Geld_in_Portemonnaie = Geld_in_Portemonnaie + 10». Das Programm rechnet also 50 + 10 und weist diesen Wert der Variable Geld_im_Portemonnaie zu.

Variablen kann man in der Informatik für verschiedenste Dinge brauchen. Besonders spannend für Schüler:innen sind Variablen in Spielen, in denen zum Beispiel Punkte gezählt werden. Punkte sind ein typisches Beispiel für eine Variable, genauso wie die Anzahl Leben oder der aktuelle Level.

Funktionen und Parameter

Stell dir vor, du bist gerade dabei, einen Küchenroboter zu programmieren. Gerade hast du ihn programmiert, etwas zu schneiden. Jetzt könntest du dein Programm immer wieder kopieren und an der richtigen Stelle einsetzen. Das ist aber schnell verwirrend und unübersichtlich. Wäre es nicht praktisch, wenn du dem Roboter einfach den Befehl «schneiden» geben könntest?

Genau das macht eine Funktion. Eine Funktion ist ein Unterprogramm, das ganz einfach abgerufen werden kann. Das Schneidprogramm könnte zum Beispiel «schneiden» heissen. Vielleicht hat der Küchenroboter auch noch Funktionen wie «braten», «kochen» oder «würzen».

Einem Koch könnte man auch einfach sagen: «Schneid mal kurz drei Karotten.» Geht das bei einem Roboter oder einem Programm auch? Ja. Man kann eine Funktion so definieren, dass sie mehrfach ausgeführt werden kann oder bestimmte Objekte benutzen soll. Beim Kochroboter könnte man das gesamte Programm von oben nehmen und sagen:

Schneide (Anzahl Wiederholungen, Objekt) bedeutet:
Wiederhole das Folgende (Anzahl Wiederholungen) mal:
Nimm das (Objekt) und wiederhole diese Schritte, bis du beim Herunterdrücken das Objekt nicht mehr berührst:
Bewege das Messer einen Zentimeter nach rechts.
Drücke das Messer nach unten und bewege es abwechselnd nach vorne und nach hinten.
Hebe das Messer nach oben.
Jetzt könnte die Funktion abgerufen werden, indem gesagt wird: «schneide(3, Karotte)». In dem Fall würde der Roboter drei Karotten zerschneiden.

«Anzahl_Wiederholungen» und «Objekt» nennt man Parameter. Ein Parameter ist eine Art Platzhalter, den man einer Funktion übermitteln kann. Sobald man die Funktion abruft, kann man so genauer mitteilen, was die Funktion tun soll. Zum Beispiel genau drei Karotten zerschneiden.