Informatik 7: Programmierparadigmen Vertiefung: Unterschied zwischen den Versionen
Zwischenüberschriften im Informatik-Bereich vereinheitlicht |
Keine Bearbeitungszusammenfassung |
||
| (3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
← [[Informatik 7. Klasse| | ← [[Informatik 7. Klasse|Zurück zur 7. Klasse]] | ||
<div style="border:1px solid #a2a9b1; background:#f8f9fa; padding:1em; margin:0 0 1.5em 0;"> | |||
'''Worum geht es?''' | |||
Prozedurale, funktionale und objektorientierte Programmierung lassen sich besonders gut verstehen, wenn sie als verschiedene Organisationsformen von Lösungen betrachtet werden, die jeweils eigene Stärken bei Struktur, Wiederverwendung, Übersicht und Modellierung besitzen. | |||
</div> | |||
== Lernziele == | |||
Nach diesem Kapitel kannst du: | |||
* Paradigmen nennen. | |||
* Ansätze vergleichen. | |||
* Funktionen erklären. | |||
* Prozeduren erklären. | |||
* Klassen erklären. | |||
* Objekte deuten. | |||
* Zustände erkennen. | |||
* Daten kapseln. | |||
* Vererbung nennen. | |||
* Beispiele zuordnen. | |||
* Lösungen begründen. | |||
* Code vergleichen. | |||
=== Anschluss an die 6. Klasse === | |||
Programmierparadigmen wurden bereits eingeführt. Jetzt vergleichst du ihre Denkweisen vertieft und triffst begründete Entscheidungen, welche Struktur zu einer Aufgabe passt. | |||
Prozedurale, | == Lerninhalte == | ||
=== Kompaktüberblick === | |||
{| class="wikitable" | |||
! Teilbereich | |||
! Kerngedanke | |||
|- | |||
| Programmierparadigmen als unterschiedliche Denkweisen | |||
| Ein grundlegendes Verständnis entsteht dann, wenn Programmierung nicht nur als Schreiben von Code, sondern als Wahl einer bestimmten Denk-und Strukturierungsweise gesehen wird, mit der Probleme geordnet und Lösungen aufgebaut … | |||
|- | |||
| Prozedurale Programmierung | |||
| Prozedurale Programmierung wird besonders anschaulich, wenn Programme als geordnete Folge von Befehlen und Teilaufgaben verstanden werden, die schrittweise ausgeführt werden und dadurch eng mit algorithmischem Denken verbunden … | |||
|- | |||
| Funktionale Programmierung | |||
| Funktionale Programmierung wird besonders klar, wenn Programme als Verarbeitung von Eingaben zu Ausgaben gedacht werden und Funktionen nicht nur Befehlsblöcke, sondern eigenständige Werte und zentrale Bausteine der Lösung bilden. | |||
|- | |||
| Objektorientierte Programmierung | |||
| Objektorientierte Programmierung wird besonders verständlich, wenn Programme als Zusammenwirken von Dingen mit Eigenschaften und Verhalten betrachtet werden, weil sich viele reale oder gedachte Systeme so gut als Modell … | |||
|- | |||
| Dieselbe Aufgabe in verschiedenen Paradigmen denken | |||
| Die Unterschiede der Paradigmen werden besonders deutlich, wenn dieselbe Aufgabe auf mehrere Arten beschrieben wird, weil dadurch sichtbar wird, wie sich Fokus, Struktur und Ausdrucksweise je nach Ansatz verändern. | |||
|- | |||
| Funktionen, Methoden und Aufrufe unterscheiden | |||
| Ein zentrales Verständnis entsteht dann, wenn Lernende erkennen, dass Funktionen, Methoden und Aufrufe zwar ähnlich wirken können, aber in den Paradigmen unterschiedliche Rollen und Beziehungen zu Daten und Objekten besitzen. | |||
|- | |||
| Paradigmen im Unterricht sinnvoll aufbauen | |||
| Didaktisch tragfähig wird das Thema vor allem dann, wenn Lernende zunächst algorithmische Grundideen verstehen und erst darauf aufbauend Funktionen, Klassen und textbasierte Strukturen in geeigneten Beispielen nachvollziehen und … | |||
|} | |||
<div style="border-left:4px solid #36c; background:#f8f9fa; padding:.8em 1em; margin:1em 0;"> | |||
'''Merke:''' Die Wahl eines Programmierparadigmas beeinflusst, wie Daten, Abläufe und Verantwortlichkeiten in einer Lösung strukturiert werden. | |||
</div> | |||
=== Programmierparadigmen als unterschiedliche Denkweisen === | === Programmierparadigmen als unterschiedliche Denkweisen === | ||
Ein grundlegendes Verständnis entsteht dann, wenn Programmierung nicht nur als Schreiben von Code, sondern als Wahl einer bestimmten Denk- und Strukturierungsweise gesehen wird, mit der Probleme geordnet und Lösungen aufgebaut werden. | Ein grundlegendes Verständnis entsteht dann, wenn Programmierung nicht nur als Schreiben von Code, sondern als Wahl einer bestimmten Denk-und Strukturierungsweise gesehen wird, mit der Probleme geordnet und Lösungen aufgebaut werden. | ||
Ein Programmierparadigma beschreibt eine typische Art, Programme zu strukturieren. | |||
Prozedurale Programmierung ordnet eine Lösung vor allem als Folge von Anweisungen und Prozeduren. Funktionale Programmierung denkt stärker in Funktionen, Eingaben und Rückgabewerten. Objektorientierte Programmierung organisiert Programme über Objekte, Zustände und Methoden. Python beschreibt Funktionen mit def und Klassen als Bündelung von Daten und Funktionalität; MDN erklärt Funktionen als grundlegende Bausteine von JavaScript und Klassen als Vorlagen zur Erzeugung von Objekten. | |||
Für den Unterricht ist wichtig, dass diese Paradigmen nicht als völlig getrennte Welten verstanden werden müssen. | |||
So wird deutlich, dass Paradigmen nicht nur Theorie sind, sondern konkrete Denkwerkzeuge für den Aufbau von Programmen. | |||
Begriffe: Paradigma, Denkweise Struktur, Lösung Prozedur, Funktion Klasse, Objekt Methode, Zustand Vergleich, Ansatz | |||
=== Prozedurale Programmierung === | === Prozedurale Programmierung === | ||
Prozedurale Programmierung wird besonders anschaulich, wenn Programme als geordnete Folge von Befehlen und Teilaufgaben verstanden werden, die schrittweise ausgeführt werden und dadurch eng mit algorithmischem Denken verbunden bleiben. In der prozeduralen Programmierung steht der Ablauf im Mittelpunkt. Ein Problem wird in Teilprozeduren oder Funktionen zerlegt, die nacheinander oder unter Bedingungen ausgeführt werden. Typische Elemente sind Variablen, Zuweisungen, Bedingungen, Schleifen und Funktionsaufrufe. Python beschreibt Kontrollstrukturen wie if, for und while im Abschnitt über Kontrollfluss, was sehr gut zur prozeduralen Sicht auf Programme passt. Ein einfaches Beispiel ist ein Rezeptprogramm oder ein Taschenrechner. Zuerst werden Eingaben gelesen, dann wird geprüft, welche Rechenoperation gewählt wurde, anschließend wird das Ergebnis berechnet und ausgegeben. | Prozedurale Programmierung wird besonders anschaulich, wenn Programme als geordnete Folge von Befehlen und Teilaufgaben verstanden werden, die schrittweise ausgeführt werden und dadurch eng mit algorithmischem Denken verbunden bleiben. | ||
In der prozeduralen Programmierung steht der Ablauf im Mittelpunkt. Ein Problem wird in Teilprozeduren oder Funktionen zerlegt, die nacheinander oder unter Bedingungen ausgeführt werden. Typische Elemente sind Variablen, Zuweisungen, Bedingungen, Schleifen und Funktionsaufrufe. Python beschreibt Kontrollstrukturen wie if, for und while im Abschnitt über Kontrollfluss, was sehr gut zur prozeduralen Sicht auf Programme passt. | |||
Ein einfaches Beispiel ist ein Rezeptprogramm oder ein Taschenrechner. Zuerst werden Eingaben gelesen, dann wird geprüft, welche Rechenoperation gewählt wurde, anschließend wird das Ergebnis berechnet und ausgegeben. | |||
Damit passt prozedurales Denken besonders gut zu algorithmischen Schrittfolgen. | |||
Stärken der prozeduralen Programmierung liegen in Übersichtlichkeit bei linearen Abläufen, einfacher Nachvollziehbarkeit und engem Bezug zu Algorithmen. Grenzen zeigen sich oft bei sehr großen Programmen, wenn viele Datenzustände, viele zusammenhängende Objekte oder komplexe Wechselwirkungen organisiert werden müssen. Dann werden andere Paradigmen häufig hilfreicher. | |||
Beispiele: Ablauf, Schleife Bedingung, Variable Rezept, Taschenrechner Spielablauf, Eingabe Ausgabe, Schrittfolge Prozedur, Algorithmus | |||
=== Funktionale Programmierung === | === Funktionale Programmierung === | ||
Funktionale Programmierung wird besonders klar, wenn Programme als Verarbeitung von Eingaben zu Ausgaben gedacht werden und Funktionen nicht nur Befehlsblöcke, sondern eigenständige Werte und zentrale Bausteine der Lösung bilden. Die Python-Dokumentation zur funktionalen Programmierung betont Konzepte wie kleine, klar abgegrenzte Funktionen, Iteratoren, Generatoren und passende Bibliotheken wie itertools und | Funktionale Programmierung wird besonders klar, wenn Programme als Verarbeitung von Eingaben zu Ausgaben gedacht werden und Funktionen nicht nur Befehlsblöcke, sondern eigenständige Werte und zentrale Bausteine der Lösung bilden. | ||
Die Python-Dokumentation zur funktionalen Programmierung betont Konzepte wie kleine, klar abgegrenzte Funktionen, Iteratoren, Generatoren und passende Bibliotheken wie itertools und functools. MDN erklärt für JavaScript, dass Funktionen first-class objects sind, also wie Werte behandelt werden können: Sie können zugewiesen, weitergegeben und zurückgegeben werden. | |||
Genau diese Eigenschaften sind für funktionales Denken zentral. | |||
Ein einfaches Beispiel ist eine Notenliste, die verarbeitet wird. Eine Funktion berechnet den Durchschnitt, eine weitere filtert nur positive Ergebnisse, eine dritte wandelt Zahlen in Texturteile um. Statt viele Zustandsänderungen direkt nacheinander auszuführen, wird die Aufgabe als Kette von Transformationen gedacht. Auch Listenverarbeitung, Umwandlung von Text in Großbuchstaben oder das Erzeugen von Listen mit List Comprehensions in Python passen gut in diese Denkweise. | |||
Stärken funktionaler Programmierung liegen in klaren Abhängigkeiten zwischen Eingabe und Ausgabe, guter Zerlegbarkeit und oft hoher Wiederverwendbarkeit kleiner Funktionen. Für den Einstieg kann sie anspruchsvoller wirken, weil sie stärker auf Abstraktion und Komposition setzt als auf sichtbare Schrittfolgen. Gerade deshalb sind alltagsnahe Beispiele mit Datenumwandlung, Filtern und Berechnen didaktisch besonders geeignet. | |||
Beispiele: Funktion, Rückgabewert Filter, Transformation Durchschnitt, Textumwandlung List Comprehension, Generator Eingabe, Ausgabe Komposition, Verarbeitung | |||
=== Orientierung auf einen Blick === | |||
{| class="wikitable" | |||
! Als Nächstes | |||
! Kurz erklärt | |||
|- | |||
| Objektorientierte Programmierung | |||
| Objektorientierte Programmierung wird besonders verständlich, wenn Programme als Zusammenwirken von Dingen mit Eigenschaften und Verhalten betrachtet werden, weil sich viele reale oder gedachte Systeme so gut als Modell … | |||
|- | |||
| Dieselbe Aufgabe in verschiedenen Paradigmen denken | |||
| Die Unterschiede der Paradigmen werden besonders deutlich, wenn dieselbe Aufgabe auf mehrere Arten beschrieben wird, weil dadurch sichtbar wird, wie sich Fokus, Struktur und Ausdrucksweise je nach Ansatz verändern. | |||
|} | |||
<div style="border-left:4px solid #36c; background:#f8f9fa; padding:.8em 1em; margin:1em 0;"> | |||
'''Merke:''' Objektorientierte Programmierung wird besonders verständlich, wenn Programme als Zusammenwirken von Dingen mit Eigenschaften und Verhalten betrachtet werden, weil sich viele reale oder gedachte … | |||
</div> | |||
=== Objektorientierte Programmierung === | === Objektorientierte Programmierung === | ||
Objektorientierte Programmierung wird besonders verständlich, wenn Programme als Zusammenwirken von Dingen mit Eigenschaften und Verhalten betrachtet werden, weil sich viele reale oder gedachte Systeme so gut als Modell strukturieren lassen. | Objektorientierte Programmierung wird besonders verständlich, wenn Programme als Zusammenwirken von Dingen mit Eigenschaften und Verhalten betrachtet werden, weil sich viele reale oder gedachte Systeme so gut als Modell strukturieren lassen. | ||
Spieler, Gegner Buch, Konto Kapselung, Vererbung Zustand, Verhalten | Python beschreibt Klassen als Mittel, Daten und Funktionalität zusammenzubündeln. MDN erklärt Klassen in JavaScript als Vorlagen zur Erzeugung von Objekten und betont zugleich, dass JavaScript prototypenbasiert ist, Klassen aber eine vertraute Form für Hierarchien und Vererbung bieten. Objektorientierte Programmierung arbeitet daher mit Begriffen wie Klasse, Objekt, Attribut, Methode, Kapselung und oft auch Vererbung. | ||
Ein Beispiel ist ein Spiel mit Figuren. Eine Klasse Spieler kann Position, Punkte und Lebenszahl speichern und Methoden wie bewegen() oder treffer_pruefen() besitzen. Eine Klasse Gegner kann ähnliches Verhalten haben, aber andere Werte oder zusätzliche Eigenschaften besitzen. | |||
Auch eine Bibliothekssoftware lässt sich objektorientiert denken: Buch, Leser, Ausleihe oder Konto sind Objekte mit eigenen Merkmalen und Aktionen. So wird OOP besonders nützlich, wenn viele Dinge mit Zustand und Verhalten zusammenarbeiten. | |||
Stärken objektorientierter Programmierung liegen in guter Modellierbarkeit komplexerer Systeme, klarer Bündelung von Daten und Verhalten sowie Wiederverwendbarkeit über Klassenstrukturen. Für Anfängerinnen und Anfänger kann sie schwieriger sein, weil nicht nur Abläufe, sondern auch Beziehungen zwischen Objekten verstanden werden müssen. Deshalb sind Beispiele mit Figuren, Geräten, Konten oder Sensoren besonders geeignet. | |||
Beispiele: Klasse, Objekt Attribut, Methode Spieler, Gegner Buch, Konto Kapselung, Vererbung Zustand, Verhalten | |||
=== Dieselbe Aufgabe in verschiedenen Paradigmen denken === | === Dieselbe Aufgabe in verschiedenen Paradigmen denken === | ||
Die Unterschiede der Paradigmen werden besonders deutlich, wenn dieselbe Aufgabe auf mehrere Arten beschrieben wird, weil dadurch sichtbar wird, wie sich Fokus, Struktur und Ausdrucksweise je nach Ansatz verändern. Nehmen wir ein einfaches Notensystem. Prozedural könnte der Ablauf lauten: Eingaben lesen, Summe berechnen, durch Anzahl teilen, Ergebnis ausgeben. Funktional könnte man mehrere Funktionen kombinieren, etwa eingaben_bereinigen, durchschnitt_berechnen, note_text. Objektorientiert könnte eine Klasse Schueler Noten speichern und eine Methode durchschnitt() bereitstellen. Die Aufgabe bleibt ähnlich, aber die Denkweise und die Struktur der Lösung verändern sich deutlich. Ein weiteres Beispiel ist ein Roboter oder Microcontroller. Prozedural wird eine Schrittfolge formuliert, funktional werden Sensordaten verarbeitet und in Ergebnisse überführt, objektorientiert werden Gerätebestandteile oder Zustände als Objekte organisiert. | Die Unterschiede der Paradigmen werden besonders deutlich, wenn dieselbe Aufgabe auf mehrere Arten beschrieben wird, weil dadurch sichtbar wird, wie sich Fokus, Struktur und Ausdrucksweise je nach Ansatz verändern. | ||
Nehmen wir ein einfaches Notensystem. Prozedural könnte der Ablauf lauten: Eingaben lesen, Summe berechnen, durch Anzahl teilen, Ergebnis ausgeben. Funktional könnte man mehrere Funktionen kombinieren, etwa eingaben_bereinigen, durchschnitt_berechnen, note_text. | |||
Objektorientiert könnte eine Klasse Schueler Noten speichern und eine Methode durchschnitt() bereitstellen. Die Aufgabe bleibt ähnlich, aber die Denkweise und die Struktur der Lösung verändern sich deutlich. | |||
Ein weiteres Beispiel ist ein Roboter oder Microcontroller. Prozedural wird eine Schrittfolge formuliert, funktional werden Sensordaten verarbeitet und in Ergebnisse überführt, objektorientiert werden Gerätebestandteile oder Zustände als Objekte organisiert. | |||
Vergleiche: gleiche Aufgabe, andere Sicht Ablauf, Transformation Objekt, Zustand Rechnung, Spiel Roboter, Daten Struktur, Ausdruck | |||
=== Zweiter Zwischenüberblick === | |||
{| class="wikitable" | |||
! Vertiefung | |||
! Wichtig dabei | |||
|- | |||
| Funktionen, Methoden und Aufrufe unterscheiden | |||
| Ein zentrales Verständnis entsteht dann, wenn Lernende erkennen, dass Funktionen, Methoden und Aufrufe zwar ähnlich wirken können, aber in den Paradigmen unterschiedliche Rollen und Beziehungen zu Daten und Objekten besitzen. | |||
|- | |||
| Paradigmen im Unterricht sinnvoll aufbauen | |||
| Didaktisch tragfähig wird das Thema vor allem dann, wenn Lernende zunächst algorithmische Grundideen verstehen und erst darauf aufbauend Funktionen, Klassen und textbasierte Strukturen in geeigneten Beispielen nachvollziehen und … | |||
|} | |||
<div style="border-left:4px solid #36c; background:#f8f9fa; padding:.8em 1em; margin:1em 0;"> | |||
'''Merke:''' Die einzelnen Teilaspekte gehören zusammen und sollten an konkreten Beispielen miteinander verknüpft werden. | |||
</div> | |||
=== Funktionen, Methoden und Aufrufe unterscheiden === | === Funktionen, Methoden und Aufrufe unterscheiden === | ||
Ein zentrales Verständnis entsteht dann, wenn Lernende erkennen, dass Funktionen, Methoden und Aufrufe zwar ähnlich wirken können, aber in den Paradigmen unterschiedliche Rollen und Beziehungen zu Daten und Objekten besitzen. Python erklärt Funktionen mit def und Klassenmethoden als Verhalten von Instanzen | Ein zentrales Verständnis entsteht dann, wenn Lernende erkennen, dass Funktionen, Methoden und Aufrufe zwar ähnlich wirken können, aber in den Paradigmen unterschiedliche Rollen und Beziehungen zu Daten und Objekten besitzen. | ||
Python erklärt Funktionen mit def und Klassenmethoden als Verhalten von Instanzen. Genau diese Unterscheidung ist für das Verstehen objektorientierter Strukturen wichtig. | |||
Didaktisch hilfreich ist ein Vergleich: Eine Funktion wie berechne_preis() arbeitet oft allgemeiner mit übergebenen Werten. Eine Methode wie konto.einzahlen() gehört zu einem Objekt und verändert oder nutzt dessen Zustand. Im funktionalen Stil wird die Funktion stärker als unabhängiger Baustein gesehen, im objektorientierten Stil als Verhalten eines Objekts. | |||
Diese Differenz hilft, Paradigmen nicht nur über Schlagworte, sondern über konkrete Sprachmittel zu verstehen. | |||
Parameter, Rückgabe Instanz, Member Definition, Verhalten Zustand, Zugriff | Begriffe: Funktion, Methode Aufruf, Objekt Parameter, Rückgabe Instanz, Member Definition, Verhalten Zustand, Zugriff | ||
=== Paradigmen im Unterricht sinnvoll aufbauen === | === Paradigmen im Unterricht sinnvoll aufbauen === | ||
Didaktisch tragfähig wird das Thema vor allem dann, wenn Lernende zunächst algorithmische Grundideen verstehen und erst darauf aufbauend Funktionen, Klassen und textbasierte Strukturen in geeigneten Beispielen nachvollziehen und anwenden. | Didaktisch tragfähig wird das Thema vor allem dann, wenn Lernende zunächst algorithmische Grundideen verstehen und erst darauf aufbauend Funktionen, Klassen und textbasierte Strukturen in geeigneten Beispielen nachvollziehen und anwenden. | ||
Außerdem wird vor einem Unterricht gewarnt, der sich nur auf Syntax konzentriert. Als didaktischer Weg werden visuell-symbolische Ansätze, hybride Übergänge und projektorientierte Beispiele mit Scratch, MakeCode, Microbit oder Open Roberta beschrieben. | |||
Für dieses Kapitel bedeutet das: Prozedurale Sichtweisen können über Schrittfolgen und Scratch gut eingeführt werden, funktionale Elemente über kleine Funktionen zur Datenverarbeitung, objektorientierte Ideen über Figuren, Geräte oder Klassenmodelle. So bleiben Paradigmen verständlich, ohne in formale Überforderung zu kippen, und werden zugleich anwendbar auf reale Unterrichtsprojekte. | |||
Aspekte: Algorithmik, Syntax Projekt, Hybridansatz Scratch, Python JavaScript, Microbit Funktion, Klasse Didaktik, Aufbau | |||
<div style="border-left:4px solid #fc3; background:#fff9e6; padding:.8em 1em; margin:1em 0;"> | |||
'''Merke:''' Die wichtigsten Zusammenhänge solltest du nicht nur wiedergeben, sondern an neuen Beispielen erklären, anwenden und begründet beurteilen können. | |||
</div> | |||
=== Kurz zusammengefasst === | |||
{| class="wikitable" | |||
! Kernkompetenz | |||
! Das bedeutet konkret | |||
|- | |||
| Paradigmen unterscheiden | |||
| Prozedurale, funktionale und objektorientierte Programmierung als unterschiedliche Arten verstehen, Programme zu strukturieren und Probleme zu beschreiben. | |||
|- | |||
| Prozedural denken | |||
| Eine Lösung als Folge von Anweisungen und Prozeduren aufbauen, die einen Zustand schrittweise verändern. | |||
|- | |||
| Funktional denken | |||
| Berechnungen als Funktionen mit klaren Eingaben und Rückgaben formulieren und Seiteneffekte möglichst vermeiden. | |||
|- | |||
| Objektorientiert denken | |||
| Zusammengehörige Daten und Verhalten in Klassen und Objekten bündeln und Beziehungen zwischen Objekten modellieren. | |||
|- | |||
| Funktionen und Prozeduren erklären | |||
| Beschreiben, welche Eingaben verarbeitet werden, was ein Aufruf bewirkt und ob ein Wert zurückgegeben wird. | |||
|- | |||
| Klassen und Objekte erklären | |||
| Eine Klasse als Bauplan und ein Objekt als konkrete Instanz mit Attributen und Methoden beschreiben. | |||
|- | |||
| Zustände erkennen | |||
| Nachvollziehen, welche Werte den aktuellen Zustand eines Programms oder Objekts bestimmen und wodurch sie verändert werden. | |||
|- | |||
| Kapselung anwenden | |||
| Daten und zugehörige Operationen so zusammenfassen, dass Zugriffe kontrolliert über klar definierte Methoden oder Schnittstellen erfolgen. | |||
|} | |||
<div style="border-left:4px solid #fc3; background:#fff9e6; padding:.8em 1em; margin:1em 0;"> | |||
'''Merke:''' Programmierparadigmen sind keine konkurrierenden Schubladen. Sie bieten unterschiedliche Denk- und Strukturierungswerkzeuge, die je nach Problem auch kombiniert werden können. | |||
</div> | |||
== | == Weiterführende Links == | ||
* [https://www.python.org/ Python] | |||
* [https://scratch.mit.edu/ Scratch] | |||
* [https://www.open-roberta.org/ Open Roberta] | |||
'''Passende LearningSnacks''' | |||
* | * [https://www.learningsnacks.de/share/25642 Python 3 - Funktionen] | ||
* [https://www.learningsnacks.de/share/25477 Python 3 - Grundlagen] | |||
* | |||
== | == Übungen == | ||
Die Aufgaben setzen die Inhalte praktisch um. Der konkrete Auftrag ist bei jeder Aufgabe ausdrücklich unter '''Arbeitsauftrag:''' gekennzeichnet. | |||
Ein besonders hoher Lerneffekt entsteht, wenn dieselbe Problemstellung nacheinander prozedural, funktional und objektorientiert gedacht wird, weil Unterschiede in Struktur, Blickrichtung und Lösungslogik dadurch unmittelbar sichtbar und sprachlich gut vergleichbar werden | === Eine Aufgabe in drei Paradigmen betrachten === | ||
Ein besonders hoher Lerneffekt entsteht, wenn dieselbe Problemstellung nacheinander prozedural, funktional und objektorientiert gedacht wird, weil Unterschiede in Struktur, Blickrichtung und Lösungslogik dadurch unmittelbar sichtbar und sprachlich gut vergleichbar werden. | |||
'''Arbeitsauftrag:''' | '''Arbeitsauftrag:''' | ||
• gleiche Aufgabe, drei Sichten • Schrittfolge, Funktion • Klasse, Objekt • Vergleich, Unterschiede • Passung, Begründung • Darstellung, Reflexion | |||
=== | === Prozedurale Abläufe aus Alltagssituationen entwickeln === | ||
Prozedurale Programmierung wird besonders verständlich, wenn alltägliche Handlungen in eindeutige, geordnete und überprüfbare Schritte zerlegt werden, weil der enge Zusammenhang zwischen Algorithmus, Kontrollstruktur und Programmablauf so sehr anschaulich erfahrbar wird | Prozedurale Programmierung wird besonders verständlich, wenn alltägliche Handlungen in eindeutige, geordnete und überprüfbare Schritte zerlegt werden, weil der enge Zusammenhang zwischen Algorithmus, Kontrollstruktur und Programmablauf so sehr anschaulich erfahrbar wird. | ||
'''Arbeitsauftrag:''' | '''Arbeitsauftrag:''' | ||
• Alltagssituation, Schrittfolge • Bedingung, Schleife • Reihenfolge, Ablauf • Pseudocode, Blockcode • Prüfung, Korrektur • Prozedur, Erklärung | |||
=== | === Funktionale Lösungen mit kleinen Bausteinen entwerfen === | ||
Funktionale Programmierung entfaltet ihre Stärke besonders dann, wenn komplexere Aufgaben in kleine, klar abgegrenzte Funktionen zerlegt werden, die aus Eingaben berechenbare Ausgaben erzeugen und dadurch gut kombinierbar und übersichtlich bleiben | Funktionale Programmierung entfaltet ihre Stärke besonders dann, wenn komplexere Aufgaben in kleine, klar abgegrenzte Funktionen zerlegt werden, die aus Eingaben berechenbare Ausgaben erzeugen und dadurch gut kombinierbar und übersichtlich bleiben. | ||
'''Arbeitsauftrag:''' | '''Arbeitsauftrag:''' | ||
• Eingabe, Ausgabe • kleine Funktion, Baustein • Filter, Umwandlung • Kombination, Gesamtlösung • Klarheit, Wiederverwendung • Funktional, Vergleich | |||
=== | === Objektorientierte Modelle zu realen Systemen gestalten === | ||
Objektorientiertes Denken wird besonders gut gelernt, wenn reale oder gedachte Systeme in Dinge mit Eigenschaften und Verhalten übersetzt werden, weil Klassen, Objekte und Methoden dadurch nicht abstrakt, sondern als Modellierungswerkzeuge erfahrbar werden | Objektorientiertes Denken wird besonders gut gelernt, wenn reale oder gedachte Systeme in Dinge mit Eigenschaften und Verhalten übersetzt werden, weil Klassen, Objekte und Methoden dadurch nicht abstrakt, sondern als Modellierungswerkzeuge erfahrbar werden. | ||
'''Arbeitsauftrag:''' | '''Arbeitsauftrag:''' | ||
• System, Klassen • Objekt, Attribut • Methode, Verhalten • Interaktion, Modell • Auswahl, Begründung • OOP, Darstellung | |||
=== Funktionen und Methoden gezielt unterscheiden === | |||
Ein vertieftes Verständnis entsteht, wenn Lernende bewusst zwischen allgemeinen Funktionen und objektgebundenen Methoden unterscheiden, weil dadurch zentrale Unterschiede zwischen funktionaler und objektorientierter Struktur klarer und fachsprachlich präziser werden. | |||
'''Arbeitsauftrag:''' | '''Arbeitsauftrag:''' | ||
• Funktion, Methode • Objektbezug, Zustand • Eingabe, Rückgabe • Zuordnung, Begründung • Beispiel, Fachsprache • Abgrenzung, Klärung | |||
=== | === Dieselbe Codeidee vergleichen und umformen === | ||
Besonders nachhaltiges Lernen entsteht, wenn eine vorhandene Lösung in ein anderes Paradigma übertragen wird, weil Schülerinnen und Schüler dadurch nicht nur Wiedererkennen üben, sondern die jeweilige Denkweise aktiv umformen und reflektieren müssen | Besonders nachhaltiges Lernen entsteht, wenn eine vorhandene Lösung in ein anderes Paradigma übertragen wird, weil Schülerinnen und Schüler dadurch nicht nur Wiedererkennen üben, sondern die jeweilige Denkweise aktiv umformen und reflektieren müssen. | ||
'''Arbeitsauftrag:''' | '''Arbeitsauftrag:''' | ||
• Ursprung, Umformung • Prozedural, funktional • Objektorientiert, Vergleich • Struktur, Lesbarkeit • Zustand, Veränderung • Transfer, Reflexion | |||
=== | === Paradigmen an Spiel- oder Robotikbeispielen untersuchen === | ||
Lernwirksame Zugänge entstehen besonders dann, wenn abstrakte Programmierideen an bewegten, sichtbaren und interaktiven Beispielen bearbeitet werden, weil Unterschiede zwischen Ablauf, Funktion und Objektverhalten in Spielen oder Robotik besonders deutlich hervor treten | Lernwirksame Zugänge entstehen besonders dann, wenn abstrakte Programmierideen an bewegten, sichtbaren und interaktiven Beispielen bearbeitet werden, weil Unterschiede zwischen Ablauf, Funktion und Objektverhalten in Spielen oder Robotik besonders deutlich hervor treten. | ||
'''Arbeitsauftrag:''' | '''Arbeitsauftrag:''' | ||
• Spiel, Robotik • Ablauf, Verarbeitung • Objekt, Zustand • Sensor, Figur • Übersicht, Präsentation • Paradigma, Beispiel | |||
=== | === Fehlvorstellungen zu Paradigmen korrigieren === | ||
Ein hoher Lerneffekt entsteht, wenn typische Missverständnisse nicht nur berichtigt, sondern mit Gegenbeispielen widerlegt werden, weil dadurch ein genaueres und belastbareres Begriffsverständnis aufgebaut wird | Ein hoher Lerneffekt entsteht, wenn typische Missverständnisse nicht nur berichtigt, sondern mit Gegenbeispielen widerlegt werden, weil dadurch ein genaueres und belastbareres Begriffsverständnis aufgebaut wird. | ||
'''Arbeitsauftrag:''' | '''Arbeitsauftrag:''' | ||
• Fehlaussage, Korrektur • Gegenbeispiel, Erklärung • Klasse, Funktion • Ablauf, Objekt • Missverständnis, Klärung • Begriffe, Sicherung | |||
=== | === Ein Lernplakat mit Leitbeispielen gestalten === | ||
Konzepte werden besonders dauerhaft gesichert, wenn sie mit wenigen, prägnanten Leitbeispielen verbunden und übersichtlich dargestellt werden, weil dadurch aus vielen Einzelbeobachtungen ein klar strukturiertes Gesamtbild der drei Paradigmen entsteht | Konzepte werden besonders dauerhaft gesichert, wenn sie mit wenigen, prägnanten Leitbeispielen verbunden und übersichtlich dargestellt werden, weil dadurch aus vielen Einzelbeobachtungen ein klar strukturiertes Gesamtbild der drei Paradigmen entsteht. | ||
'''Arbeitsauftrag:''' | '''Arbeitsauftrag:''' | ||
• Lernplakat, Übersicht • Merkmale, Leitbeispiele • Prozedural, funktional • Objektorientiert, Vergleich • Gemeinsamkeit, Unterschied • Klassenprodukt, Sicherung | |||
=== | === Eine begründete Paradigmenwahl treffen === | ||
Transfer gelingt besonders gut, wenn Schülerinnen und Schüler nicht nur Paradigmen erklären, sondern für eine neue Aufgabe bewusst auswählen und begründen, welcher Ansatz ihnen am passendsten erscheint | Transfer gelingt besonders gut, wenn Schülerinnen und Schüler nicht nur Paradigmen erklären, sondern für eine neue Aufgabe bewusst auswählen und begründen, welcher Ansatz ihnen am passendsten erscheint. | ||
'''Arbeitsauftrag:''' | '''Arbeitsauftrag:''' | ||
• neue Aufgabe, Wahl • Paradigma, Passung • Mischform, Begründung • Terminplaner, Spielsystem • Struktur, Urteil • Transfer, Entscheidung | |||
== Kompetenzcheck == | |||
Überprüfe am Ende selbst, ob du die zentralen Kompetenzen dieses Kapitels sicher anwenden kannst: | |||
{| class="wikitable" | |||
! Ich kann … | |||
! Ja | |||
! Noch üben | |||
|- | |||
| prozedurale, funktionale und objektorientierte Programmierung anhand typischer Merkmale sicher unterscheiden. | |||
| ☐ | |||
| ☐ | |||
|- | |||
| Prozeduren als geordnete Abläufe mit Parametern und klaren Aufgaben erklären und einsetzen. | |||
| ☐ | |||
| ☐ | |||
|- | |||
| Funktionen als wiederverwendbare Bausteine mit Eingaben und Rückgabewerten beschreiben. | |||
| ☐ | |||
| ☐ | |||
|- | |||
| Klassen, Objekte, Attribute und Methoden in einem objektorientierten Modell korrekt zuordnen. | |||
| ☐ | |||
| ☐ | |||
|- | |||
| dieselbe Codeidee in unterschiedlichen Paradigmen vergleichen und Vor- sowie Nachteile der Struktur erkennen. | |||
| ☐ | |||
| ☐ | |||
|- | |||
| für eine konkrete Aufgabe ein geeignetes Paradigma oder eine begründete Kombination mehrerer Ansätze wählen. | |||
| ☐ | |||
| ☐ | |||
|} | |||
[[Kategorie:Informatik | [[Kategorie:Informatik]] | ||
Aktuelle Version vom 15. September 2026, 10:47 Uhr
Worum geht es? Prozedurale, funktionale und objektorientierte Programmierung lassen sich besonders gut verstehen, wenn sie als verschiedene Organisationsformen von Lösungen betrachtet werden, die jeweils eigene Stärken bei Struktur, Wiederverwendung, Übersicht und Modellierung besitzen.
Lernziele
[Bearbeiten]Nach diesem Kapitel kannst du:
- Paradigmen nennen.
- Ansätze vergleichen.
- Funktionen erklären.
- Prozeduren erklären.
- Klassen erklären.
- Objekte deuten.
- Zustände erkennen.
- Daten kapseln.
- Vererbung nennen.
- Beispiele zuordnen.
- Lösungen begründen.
- Code vergleichen.
Anschluss an die 6. Klasse
[Bearbeiten]Programmierparadigmen wurden bereits eingeführt. Jetzt vergleichst du ihre Denkweisen vertieft und triffst begründete Entscheidungen, welche Struktur zu einer Aufgabe passt.
Lerninhalte
[Bearbeiten]Kompaktüberblick
[Bearbeiten]| Teilbereich | Kerngedanke |
|---|---|
| Programmierparadigmen als unterschiedliche Denkweisen | Ein grundlegendes Verständnis entsteht dann, wenn Programmierung nicht nur als Schreiben von Code, sondern als Wahl einer bestimmten Denk-und Strukturierungsweise gesehen wird, mit der Probleme geordnet und Lösungen aufgebaut … |
| Prozedurale Programmierung | Prozedurale Programmierung wird besonders anschaulich, wenn Programme als geordnete Folge von Befehlen und Teilaufgaben verstanden werden, die schrittweise ausgeführt werden und dadurch eng mit algorithmischem Denken verbunden … |
| Funktionale Programmierung | Funktionale Programmierung wird besonders klar, wenn Programme als Verarbeitung von Eingaben zu Ausgaben gedacht werden und Funktionen nicht nur Befehlsblöcke, sondern eigenständige Werte und zentrale Bausteine der Lösung bilden. |
| Objektorientierte Programmierung | Objektorientierte Programmierung wird besonders verständlich, wenn Programme als Zusammenwirken von Dingen mit Eigenschaften und Verhalten betrachtet werden, weil sich viele reale oder gedachte Systeme so gut als Modell … |
| Dieselbe Aufgabe in verschiedenen Paradigmen denken | Die Unterschiede der Paradigmen werden besonders deutlich, wenn dieselbe Aufgabe auf mehrere Arten beschrieben wird, weil dadurch sichtbar wird, wie sich Fokus, Struktur und Ausdrucksweise je nach Ansatz verändern. |
| Funktionen, Methoden und Aufrufe unterscheiden | Ein zentrales Verständnis entsteht dann, wenn Lernende erkennen, dass Funktionen, Methoden und Aufrufe zwar ähnlich wirken können, aber in den Paradigmen unterschiedliche Rollen und Beziehungen zu Daten und Objekten besitzen. |
| Paradigmen im Unterricht sinnvoll aufbauen | Didaktisch tragfähig wird das Thema vor allem dann, wenn Lernende zunächst algorithmische Grundideen verstehen und erst darauf aufbauend Funktionen, Klassen und textbasierte Strukturen in geeigneten Beispielen nachvollziehen und … |
Merke: Die Wahl eines Programmierparadigmas beeinflusst, wie Daten, Abläufe und Verantwortlichkeiten in einer Lösung strukturiert werden.
Programmierparadigmen als unterschiedliche Denkweisen
[Bearbeiten]Ein grundlegendes Verständnis entsteht dann, wenn Programmierung nicht nur als Schreiben von Code, sondern als Wahl einer bestimmten Denk-und Strukturierungsweise gesehen wird, mit der Probleme geordnet und Lösungen aufgebaut werden.
Ein Programmierparadigma beschreibt eine typische Art, Programme zu strukturieren.
Prozedurale Programmierung ordnet eine Lösung vor allem als Folge von Anweisungen und Prozeduren. Funktionale Programmierung denkt stärker in Funktionen, Eingaben und Rückgabewerten. Objektorientierte Programmierung organisiert Programme über Objekte, Zustände und Methoden. Python beschreibt Funktionen mit def und Klassen als Bündelung von Daten und Funktionalität; MDN erklärt Funktionen als grundlegende Bausteine von JavaScript und Klassen als Vorlagen zur Erzeugung von Objekten.
Für den Unterricht ist wichtig, dass diese Paradigmen nicht als völlig getrennte Welten verstanden werden müssen.
So wird deutlich, dass Paradigmen nicht nur Theorie sind, sondern konkrete Denkwerkzeuge für den Aufbau von Programmen.
Begriffe: Paradigma, Denkweise Struktur, Lösung Prozedur, Funktion Klasse, Objekt Methode, Zustand Vergleich, Ansatz
Prozedurale Programmierung
[Bearbeiten]Prozedurale Programmierung wird besonders anschaulich, wenn Programme als geordnete Folge von Befehlen und Teilaufgaben verstanden werden, die schrittweise ausgeführt werden und dadurch eng mit algorithmischem Denken verbunden bleiben.
In der prozeduralen Programmierung steht der Ablauf im Mittelpunkt. Ein Problem wird in Teilprozeduren oder Funktionen zerlegt, die nacheinander oder unter Bedingungen ausgeführt werden. Typische Elemente sind Variablen, Zuweisungen, Bedingungen, Schleifen und Funktionsaufrufe. Python beschreibt Kontrollstrukturen wie if, for und while im Abschnitt über Kontrollfluss, was sehr gut zur prozeduralen Sicht auf Programme passt.
Ein einfaches Beispiel ist ein Rezeptprogramm oder ein Taschenrechner. Zuerst werden Eingaben gelesen, dann wird geprüft, welche Rechenoperation gewählt wurde, anschließend wird das Ergebnis berechnet und ausgegeben.
Damit passt prozedurales Denken besonders gut zu algorithmischen Schrittfolgen.
Stärken der prozeduralen Programmierung liegen in Übersichtlichkeit bei linearen Abläufen, einfacher Nachvollziehbarkeit und engem Bezug zu Algorithmen. Grenzen zeigen sich oft bei sehr großen Programmen, wenn viele Datenzustände, viele zusammenhängende Objekte oder komplexe Wechselwirkungen organisiert werden müssen. Dann werden andere Paradigmen häufig hilfreicher.
Beispiele: Ablauf, Schleife Bedingung, Variable Rezept, Taschenrechner Spielablauf, Eingabe Ausgabe, Schrittfolge Prozedur, Algorithmus
Funktionale Programmierung
[Bearbeiten]Funktionale Programmierung wird besonders klar, wenn Programme als Verarbeitung von Eingaben zu Ausgaben gedacht werden und Funktionen nicht nur Befehlsblöcke, sondern eigenständige Werte und zentrale Bausteine der Lösung bilden.
Die Python-Dokumentation zur funktionalen Programmierung betont Konzepte wie kleine, klar abgegrenzte Funktionen, Iteratoren, Generatoren und passende Bibliotheken wie itertools und functools. MDN erklärt für JavaScript, dass Funktionen first-class objects sind, also wie Werte behandelt werden können: Sie können zugewiesen, weitergegeben und zurückgegeben werden.
Genau diese Eigenschaften sind für funktionales Denken zentral.
Ein einfaches Beispiel ist eine Notenliste, die verarbeitet wird. Eine Funktion berechnet den Durchschnitt, eine weitere filtert nur positive Ergebnisse, eine dritte wandelt Zahlen in Texturteile um. Statt viele Zustandsänderungen direkt nacheinander auszuführen, wird die Aufgabe als Kette von Transformationen gedacht. Auch Listenverarbeitung, Umwandlung von Text in Großbuchstaben oder das Erzeugen von Listen mit List Comprehensions in Python passen gut in diese Denkweise.
Stärken funktionaler Programmierung liegen in klaren Abhängigkeiten zwischen Eingabe und Ausgabe, guter Zerlegbarkeit und oft hoher Wiederverwendbarkeit kleiner Funktionen. Für den Einstieg kann sie anspruchsvoller wirken, weil sie stärker auf Abstraktion und Komposition setzt als auf sichtbare Schrittfolgen. Gerade deshalb sind alltagsnahe Beispiele mit Datenumwandlung, Filtern und Berechnen didaktisch besonders geeignet.
Beispiele: Funktion, Rückgabewert Filter, Transformation Durchschnitt, Textumwandlung List Comprehension, Generator Eingabe, Ausgabe Komposition, Verarbeitung
Orientierung auf einen Blick
[Bearbeiten]| Als Nächstes | Kurz erklärt |
|---|---|
| Objektorientierte Programmierung | Objektorientierte Programmierung wird besonders verständlich, wenn Programme als Zusammenwirken von Dingen mit Eigenschaften und Verhalten betrachtet werden, weil sich viele reale oder gedachte Systeme so gut als Modell … |
| Dieselbe Aufgabe in verschiedenen Paradigmen denken | Die Unterschiede der Paradigmen werden besonders deutlich, wenn dieselbe Aufgabe auf mehrere Arten beschrieben wird, weil dadurch sichtbar wird, wie sich Fokus, Struktur und Ausdrucksweise je nach Ansatz verändern. |
Merke: Objektorientierte Programmierung wird besonders verständlich, wenn Programme als Zusammenwirken von Dingen mit Eigenschaften und Verhalten betrachtet werden, weil sich viele reale oder gedachte …
Objektorientierte Programmierung
[Bearbeiten]Objektorientierte Programmierung wird besonders verständlich, wenn Programme als Zusammenwirken von Dingen mit Eigenschaften und Verhalten betrachtet werden, weil sich viele reale oder gedachte Systeme so gut als Modell strukturieren lassen.
Python beschreibt Klassen als Mittel, Daten und Funktionalität zusammenzubündeln. MDN erklärt Klassen in JavaScript als Vorlagen zur Erzeugung von Objekten und betont zugleich, dass JavaScript prototypenbasiert ist, Klassen aber eine vertraute Form für Hierarchien und Vererbung bieten. Objektorientierte Programmierung arbeitet daher mit Begriffen wie Klasse, Objekt, Attribut, Methode, Kapselung und oft auch Vererbung.
Ein Beispiel ist ein Spiel mit Figuren. Eine Klasse Spieler kann Position, Punkte und Lebenszahl speichern und Methoden wie bewegen() oder treffer_pruefen() besitzen. Eine Klasse Gegner kann ähnliches Verhalten haben, aber andere Werte oder zusätzliche Eigenschaften besitzen.
Auch eine Bibliothekssoftware lässt sich objektorientiert denken: Buch, Leser, Ausleihe oder Konto sind Objekte mit eigenen Merkmalen und Aktionen. So wird OOP besonders nützlich, wenn viele Dinge mit Zustand und Verhalten zusammenarbeiten.
Stärken objektorientierter Programmierung liegen in guter Modellierbarkeit komplexerer Systeme, klarer Bündelung von Daten und Verhalten sowie Wiederverwendbarkeit über Klassenstrukturen. Für Anfängerinnen und Anfänger kann sie schwieriger sein, weil nicht nur Abläufe, sondern auch Beziehungen zwischen Objekten verstanden werden müssen. Deshalb sind Beispiele mit Figuren, Geräten, Konten oder Sensoren besonders geeignet.
Beispiele: Klasse, Objekt Attribut, Methode Spieler, Gegner Buch, Konto Kapselung, Vererbung Zustand, Verhalten
Dieselbe Aufgabe in verschiedenen Paradigmen denken
[Bearbeiten]Die Unterschiede der Paradigmen werden besonders deutlich, wenn dieselbe Aufgabe auf mehrere Arten beschrieben wird, weil dadurch sichtbar wird, wie sich Fokus, Struktur und Ausdrucksweise je nach Ansatz verändern.
Nehmen wir ein einfaches Notensystem. Prozedural könnte der Ablauf lauten: Eingaben lesen, Summe berechnen, durch Anzahl teilen, Ergebnis ausgeben. Funktional könnte man mehrere Funktionen kombinieren, etwa eingaben_bereinigen, durchschnitt_berechnen, note_text.
Objektorientiert könnte eine Klasse Schueler Noten speichern und eine Methode durchschnitt() bereitstellen. Die Aufgabe bleibt ähnlich, aber die Denkweise und die Struktur der Lösung verändern sich deutlich.
Ein weiteres Beispiel ist ein Roboter oder Microcontroller. Prozedural wird eine Schrittfolge formuliert, funktional werden Sensordaten verarbeitet und in Ergebnisse überführt, objektorientiert werden Gerätebestandteile oder Zustände als Objekte organisiert.
Vergleiche: gleiche Aufgabe, andere Sicht Ablauf, Transformation Objekt, Zustand Rechnung, Spiel Roboter, Daten Struktur, Ausdruck
Zweiter Zwischenüberblick
[Bearbeiten]| Vertiefung | Wichtig dabei |
|---|---|
| Funktionen, Methoden und Aufrufe unterscheiden | Ein zentrales Verständnis entsteht dann, wenn Lernende erkennen, dass Funktionen, Methoden und Aufrufe zwar ähnlich wirken können, aber in den Paradigmen unterschiedliche Rollen und Beziehungen zu Daten und Objekten besitzen. |
| Paradigmen im Unterricht sinnvoll aufbauen | Didaktisch tragfähig wird das Thema vor allem dann, wenn Lernende zunächst algorithmische Grundideen verstehen und erst darauf aufbauend Funktionen, Klassen und textbasierte Strukturen in geeigneten Beispielen nachvollziehen und … |
Merke: Die einzelnen Teilaspekte gehören zusammen und sollten an konkreten Beispielen miteinander verknüpft werden.
Funktionen, Methoden und Aufrufe unterscheiden
[Bearbeiten]Ein zentrales Verständnis entsteht dann, wenn Lernende erkennen, dass Funktionen, Methoden und Aufrufe zwar ähnlich wirken können, aber in den Paradigmen unterschiedliche Rollen und Beziehungen zu Daten und Objekten besitzen.
Python erklärt Funktionen mit def und Klassenmethoden als Verhalten von Instanzen. Genau diese Unterscheidung ist für das Verstehen objektorientierter Strukturen wichtig.
Didaktisch hilfreich ist ein Vergleich: Eine Funktion wie berechne_preis() arbeitet oft allgemeiner mit übergebenen Werten. Eine Methode wie konto.einzahlen() gehört zu einem Objekt und verändert oder nutzt dessen Zustand. Im funktionalen Stil wird die Funktion stärker als unabhängiger Baustein gesehen, im objektorientierten Stil als Verhalten eines Objekts.
Diese Differenz hilft, Paradigmen nicht nur über Schlagworte, sondern über konkrete Sprachmittel zu verstehen.
Begriffe: Funktion, Methode Aufruf, Objekt Parameter, Rückgabe Instanz, Member Definition, Verhalten Zustand, Zugriff
Paradigmen im Unterricht sinnvoll aufbauen
[Bearbeiten]Didaktisch tragfähig wird das Thema vor allem dann, wenn Lernende zunächst algorithmische Grundideen verstehen und erst darauf aufbauend Funktionen, Klassen und textbasierte Strukturen in geeigneten Beispielen nachvollziehen und anwenden.
Außerdem wird vor einem Unterricht gewarnt, der sich nur auf Syntax konzentriert. Als didaktischer Weg werden visuell-symbolische Ansätze, hybride Übergänge und projektorientierte Beispiele mit Scratch, MakeCode, Microbit oder Open Roberta beschrieben.
Für dieses Kapitel bedeutet das: Prozedurale Sichtweisen können über Schrittfolgen und Scratch gut eingeführt werden, funktionale Elemente über kleine Funktionen zur Datenverarbeitung, objektorientierte Ideen über Figuren, Geräte oder Klassenmodelle. So bleiben Paradigmen verständlich, ohne in formale Überforderung zu kippen, und werden zugleich anwendbar auf reale Unterrichtsprojekte.
Aspekte: Algorithmik, Syntax Projekt, Hybridansatz Scratch, Python JavaScript, Microbit Funktion, Klasse Didaktik, Aufbau
Merke: Die wichtigsten Zusammenhänge solltest du nicht nur wiedergeben, sondern an neuen Beispielen erklären, anwenden und begründet beurteilen können.
Kurz zusammengefasst
[Bearbeiten]| Kernkompetenz | Das bedeutet konkret |
|---|---|
| Paradigmen unterscheiden | Prozedurale, funktionale und objektorientierte Programmierung als unterschiedliche Arten verstehen, Programme zu strukturieren und Probleme zu beschreiben. |
| Prozedural denken | Eine Lösung als Folge von Anweisungen und Prozeduren aufbauen, die einen Zustand schrittweise verändern. |
| Funktional denken | Berechnungen als Funktionen mit klaren Eingaben und Rückgaben formulieren und Seiteneffekte möglichst vermeiden. |
| Objektorientiert denken | Zusammengehörige Daten und Verhalten in Klassen und Objekten bündeln und Beziehungen zwischen Objekten modellieren. |
| Funktionen und Prozeduren erklären | Beschreiben, welche Eingaben verarbeitet werden, was ein Aufruf bewirkt und ob ein Wert zurückgegeben wird. |
| Klassen und Objekte erklären | Eine Klasse als Bauplan und ein Objekt als konkrete Instanz mit Attributen und Methoden beschreiben. |
| Zustände erkennen | Nachvollziehen, welche Werte den aktuellen Zustand eines Programms oder Objekts bestimmen und wodurch sie verändert werden. |
| Kapselung anwenden | Daten und zugehörige Operationen so zusammenfassen, dass Zugriffe kontrolliert über klar definierte Methoden oder Schnittstellen erfolgen. |
Merke: Programmierparadigmen sind keine konkurrierenden Schubladen. Sie bieten unterschiedliche Denk- und Strukturierungswerkzeuge, die je nach Problem auch kombiniert werden können.
Weiterführende Links
[Bearbeiten]Passende LearningSnacks
Übungen
[Bearbeiten]Die Aufgaben setzen die Inhalte praktisch um. Der konkrete Auftrag ist bei jeder Aufgabe ausdrücklich unter Arbeitsauftrag: gekennzeichnet.
Eine Aufgabe in drei Paradigmen betrachten
[Bearbeiten]Ein besonders hoher Lerneffekt entsteht, wenn dieselbe Problemstellung nacheinander prozedural, funktional und objektorientiert gedacht wird, weil Unterschiede in Struktur, Blickrichtung und Lösungslogik dadurch unmittelbar sichtbar und sprachlich gut vergleichbar werden.
Arbeitsauftrag:
• gleiche Aufgabe, drei Sichten • Schrittfolge, Funktion • Klasse, Objekt • Vergleich, Unterschiede • Passung, Begründung • Darstellung, Reflexion
Prozedurale Abläufe aus Alltagssituationen entwickeln
[Bearbeiten]Prozedurale Programmierung wird besonders verständlich, wenn alltägliche Handlungen in eindeutige, geordnete und überprüfbare Schritte zerlegt werden, weil der enge Zusammenhang zwischen Algorithmus, Kontrollstruktur und Programmablauf so sehr anschaulich erfahrbar wird.
Arbeitsauftrag:
• Alltagssituation, Schrittfolge • Bedingung, Schleife • Reihenfolge, Ablauf • Pseudocode, Blockcode • Prüfung, Korrektur • Prozedur, Erklärung
Funktionale Lösungen mit kleinen Bausteinen entwerfen
[Bearbeiten]Funktionale Programmierung entfaltet ihre Stärke besonders dann, wenn komplexere Aufgaben in kleine, klar abgegrenzte Funktionen zerlegt werden, die aus Eingaben berechenbare Ausgaben erzeugen und dadurch gut kombinierbar und übersichtlich bleiben.
Arbeitsauftrag:
• Eingabe, Ausgabe • kleine Funktion, Baustein • Filter, Umwandlung • Kombination, Gesamtlösung • Klarheit, Wiederverwendung • Funktional, Vergleich
Objektorientierte Modelle zu realen Systemen gestalten
[Bearbeiten]Objektorientiertes Denken wird besonders gut gelernt, wenn reale oder gedachte Systeme in Dinge mit Eigenschaften und Verhalten übersetzt werden, weil Klassen, Objekte und Methoden dadurch nicht abstrakt, sondern als Modellierungswerkzeuge erfahrbar werden.
Arbeitsauftrag:
• System, Klassen • Objekt, Attribut • Methode, Verhalten • Interaktion, Modell • Auswahl, Begründung • OOP, Darstellung
Funktionen und Methoden gezielt unterscheiden
[Bearbeiten]Ein vertieftes Verständnis entsteht, wenn Lernende bewusst zwischen allgemeinen Funktionen und objektgebundenen Methoden unterscheiden, weil dadurch zentrale Unterschiede zwischen funktionaler und objektorientierter Struktur klarer und fachsprachlich präziser werden.
Arbeitsauftrag:
• Funktion, Methode • Objektbezug, Zustand • Eingabe, Rückgabe • Zuordnung, Begründung • Beispiel, Fachsprache • Abgrenzung, Klärung
Dieselbe Codeidee vergleichen und umformen
[Bearbeiten]Besonders nachhaltiges Lernen entsteht, wenn eine vorhandene Lösung in ein anderes Paradigma übertragen wird, weil Schülerinnen und Schüler dadurch nicht nur Wiedererkennen üben, sondern die jeweilige Denkweise aktiv umformen und reflektieren müssen.
Arbeitsauftrag:
• Ursprung, Umformung • Prozedural, funktional • Objektorientiert, Vergleich • Struktur, Lesbarkeit • Zustand, Veränderung • Transfer, Reflexion
Paradigmen an Spiel- oder Robotikbeispielen untersuchen
[Bearbeiten]Lernwirksame Zugänge entstehen besonders dann, wenn abstrakte Programmierideen an bewegten, sichtbaren und interaktiven Beispielen bearbeitet werden, weil Unterschiede zwischen Ablauf, Funktion und Objektverhalten in Spielen oder Robotik besonders deutlich hervor treten.
Arbeitsauftrag:
• Spiel, Robotik • Ablauf, Verarbeitung • Objekt, Zustand • Sensor, Figur • Übersicht, Präsentation • Paradigma, Beispiel
Fehlvorstellungen zu Paradigmen korrigieren
[Bearbeiten]Ein hoher Lerneffekt entsteht, wenn typische Missverständnisse nicht nur berichtigt, sondern mit Gegenbeispielen widerlegt werden, weil dadurch ein genaueres und belastbareres Begriffsverständnis aufgebaut wird.
Arbeitsauftrag:
• Fehlaussage, Korrektur • Gegenbeispiel, Erklärung • Klasse, Funktion • Ablauf, Objekt • Missverständnis, Klärung • Begriffe, Sicherung
Ein Lernplakat mit Leitbeispielen gestalten
[Bearbeiten]Konzepte werden besonders dauerhaft gesichert, wenn sie mit wenigen, prägnanten Leitbeispielen verbunden und übersichtlich dargestellt werden, weil dadurch aus vielen Einzelbeobachtungen ein klar strukturiertes Gesamtbild der drei Paradigmen entsteht.
Arbeitsauftrag:
• Lernplakat, Übersicht • Merkmale, Leitbeispiele • Prozedural, funktional • Objektorientiert, Vergleich • Gemeinsamkeit, Unterschied • Klassenprodukt, Sicherung
Eine begründete Paradigmenwahl treffen
[Bearbeiten]Transfer gelingt besonders gut, wenn Schülerinnen und Schüler nicht nur Paradigmen erklären, sondern für eine neue Aufgabe bewusst auswählen und begründen, welcher Ansatz ihnen am passendsten erscheint.
Arbeitsauftrag:
• neue Aufgabe, Wahl • Paradigma, Passung • Mischform, Begründung • Terminplaner, Spielsystem • Struktur, Urteil • Transfer, Entscheidung
Kompetenzcheck
[Bearbeiten]Überprüfe am Ende selbst, ob du die zentralen Kompetenzen dieses Kapitels sicher anwenden kannst:
| Ich kann … | Ja | Noch üben |
|---|---|---|
| prozedurale, funktionale und objektorientierte Programmierung anhand typischer Merkmale sicher unterscheiden. | ☐ | ☐ |
| Prozeduren als geordnete Abläufe mit Parametern und klaren Aufgaben erklären und einsetzen. | ☐ | ☐ |
| Funktionen als wiederverwendbare Bausteine mit Eingaben und Rückgabewerten beschreiben. | ☐ | ☐ |
| Klassen, Objekte, Attribute und Methoden in einem objektorientierten Modell korrekt zuordnen. | ☐ | ☐ |
| dieselbe Codeidee in unterschiedlichen Paradigmen vergleichen und Vor- sowie Nachteile der Struktur erkennen. | ☐ | ☐ |
| für eine konkrete Aufgabe ein geeignetes Paradigma oder eine begründete Kombination mehrerer Ansätze wählen. | ☐ | ☐ |