Aufgabe 13 - Sensor-Steckplätze
Aufgabe 13 - Sensor-Steckplätze
Abschnitt betitelt „Aufgabe 13 - Sensor-Steckplätze“Worum geht es?
Abschnitt betitelt „Worum geht es?“Interfaces als Steckplätze: Eine Wetterstation akzeptiert jeden Sensor, der den Vertrag erfüllt, auch solche, die es beim Schreiben der Station noch gar nicht gab. Genau so werden externe Programmbausteine sauber integriert und eigene Bausteine anderen zur Verfügung gestellt, eine ausdrückliche Lehrplan-Kompetenz (siehe Kapitel Polymorphismus und Interfaces). Der Höhepunkt der Übung ist der Bausteintausch mit einer Kollegin oder einem Kollegen (Tauschpartner): fremder Code läuft an Ihrer Station, ohne dass Sie eine Zeile ändern.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel Polymorphismus und Interfaces, insbesondere abstrakte Basisklassen und Duck Typing; Aufgabe 12.
- Python (
abc,random), VS Code; für Teil C eine Tauschpartnerin oder einen Tauschpartner.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie definieren einen Vertrag als abstrakte Basisklasse und programmieren strikt dagegen.
- Sie integrieren fremde Programmbausteine über eine Schnittstelle und stellen eigene bereit.
- Sie grenzen erzwungene Verträge experimentell von Duck Typing ab.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: den Vertrag und einen einfachen Sensor nach Vorgabe implementieren (Teil A).
- Reorganisation und Transfer: weitere Sensoren entwickeln und fremde Bausteine integrieren (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: die Grenzfälle des Typsystems untersuchen und Vertragsstrategien bewerten (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Teil A - Vertrag und erster Sensor
Abschnitt betitelt „Teil A - Vertrag und erster Sensor“- Definieren Sie die abstrakte Klasse
Sensormit dem Attributname, der abstrakten Methodemeasure()(liefert eine Zahl) und der abstrakten Propertyunit(etwa"°C"). - Implementieren Sie
TemperatureSensor: simuliert Werte zwischen 15 und 35 mitrandom.uniform, Einheit"°C". - Prüfen Sie:
Sensor()direkt zu instanzieren schlägt fehl; der Temperatursensor liefert bei fünf Aufrufen fünf plausible Werte.
Teil B - Die Station
Abschnitt betitelt „Teil B - Die Station“- Implementieren Sie
WeatherStationmitconnect(sensor)undrun_measurement(): fragt alle angeschlossenen Sensoren ab und druckt pro Sensor eine Zeile wietemperature: 21.3 °C. Verbindliche Regel: Die Stationsdatei importiert keine konkrete Sensorklasse, nur den Vertrag. - Ergänzen Sie
HumiditySensor(0 bis 100,"%") undWindSensor(0 bis 120,"km/h"). - Demo: Station mit drei Sensoren, fünf Messrunden, lesbare Ausgabe mit Rundennummer.
Teil C - Der Bausteintausch
Abschnitt betitelt „Teil C - Der Bausteintausch“- Vereinbaren Sie mit Ihrer Tauschpartnerin oder Ihrem Tauschpartner nur den Vertrag (die
Sensor-Klasse muss identisch sein). Jede Person schreibt zusätzlich einen eigenen, neuen Sensor nach freier Wahl (Luftdruck, Helligkeit, Lautstärke, …). - Tauschen Sie ausschließlich die Sensor-Datei aus. Der fremde Sensor muss an Ihrer Station laufen, ohne dass Sie irgendetwas anpassen. Protokollieren Sie das Ergebnis (funktioniert / funktioniert nicht, und warum).
- Halten Sie in zwei Sätzen fest, was dieser Tausch mit den Lehrplan-Formulierungen “externe Programmbausteine integrieren” und “eigene Programmbausteine zur Verfügung stellen” zu tun hat.
Teil D - Expertenteil: Duck Typing und Vertragsbruch
Abschnitt betitelt „Teil D - Expertenteil: Duck Typing und Vertragsbruch“- Schreiben Sie eine Klasse
RogueSensor, die nicht vonSensorerbt, aber zufällig passendemeasure()-Methode undunit-Property besitzt. Schließen Sie sie an die Station an. Läuft sie? Erklären Sie mit dem Begriff Duck Typing, warum. - Schreiben Sie eine Klasse, der die
unit-Property fehlt, und schließen Sie sie an. Zu welchem Zeitpunkt genau tritt der Fehler auf: beim Anschließen oder erst in der Messrunde? Was bedeutet dieser Zeitpunkt für die Fehlersuche in einem großen Programm? - Erweitern Sie
connect(sensor)um eine Eingangsprüfung mitisinstance(sensor, Sensor), die Fremdlinge sofort mit einer Meldung ablehnt. Diskutieren Sie in drei bis fünf Sätzen den Zielkonflikt: Die Prüfung macht Fehler früh sichtbar, sperrt aber auch den (funktionierenden!)RogueSensoraus. Welche Strategie wählen Sie für die Station, und warum? - Formulieren Sie als Abschluss eine Empfehlung in zwei Sätzen: In welchen Projektsituationen genügt Duck Typing, wann ist die abstrakte Basisklasse Pflicht?
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Was garantiert die abstrakte Basisklasse einer Subklasse gegenüber, und wann fliegt ein Vertragsbruch auf?
- Warum darf die Stationsdatei keine konkrete Sensorklasse importieren? Was ginge sonst verloren?
- Erklären Sie Duck Typing in einem Satz anhand des
RogueSensor. - Was ist der Nachteil, wenn ein fehlender Vertragsbestandteil erst in der Messrunde auffällt statt beim Anschließen?
- Ihre Station soll nächstes Jahr Sensoren eines fremden Herstellers unterstützen. Was genau geben Sie dem Hersteller, und was verlangen Sie von ihm?
station.py, sensors.py, der getauschte Fremdsensor samt Tauschprotokoll und die Diskussionen aus Teil D.