Zum Inhalt springen

Anwendungsentwicklung und Softwarequalität – Objektorientierte Modelle sinnvoll einsetzen

Aus MOOCsWiki Staging
Version vom 9. Oktober 2026, 21:33 Uhr von Glanz (Diskussion | Beiträge) (aiMOOC über GPT aiMOOC Action erstellt)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
aiMOOC-Siegel aiMOOC

Anwendungsentwicklung und Softwarequalität – Objektorientierte Modelle sinnvoll einsetzen

QR-Code


Anwendungsentwicklung und Softwarequalität – Objektorientierte Modelle sinnvoll einsetzen


Einleitung

Zielgruppe: Ausbildung Fachinformatik – Anwendungsentwicklung

Dauer: ca. 90–120 Minuten

Voraussetzungen: Python-Grundlagen, Variablen, Funktionen und Bedingungen

Lernziel: Du entwirfst Klassen, modellierst Zustände, erklärst Beziehungen und überprüfst Dein Modell mit automatisierten Tests.

Ausbildungsfall: Eine fiktive Geräteausleihe im Ausbildungsbetrieb.


Dein Lernpfad

Einheit Thema Ergebnis
1 Klassen und Objekte Klassenmodell
2 Beziehungen UML-Klassendiagramm
3 Zustände Zustandsmodell
4 Implementierung Python-Programm
5 Softwarequalität Automatisierte Tests
6 Transfer Verbessertes Modell

Bild: Übersicht der UML-Diagrammarten. Quelle: Wikimedia Commons, gemeinfrei.

Leitfrage: Wie helfen uns objektorientierte Modelle, verständliche und zuverlässige Software zu entwickeln?


Sicher arbeiten

Alle Übungen verwenden ausschließlich fiktive Geräte und erfundene Benutzerkennungen.

  1. Arbeite lokal in einem eigens angelegten Übungsordner, vorzugsweise in einer Offline-VM oder einem Container ohne Netzwerk.
  2. Verwende keine Kundeninformationen, Zugangsdaten, Produktivsysteme oder fremden Netzwerke.
  3. Die Beispiele benötigen nur Python und dessen Standardbibliothek. Installiere keine zusätzlichen Pakete.
  4. Führe nur ausdrücklich freigegebene Tests durch.
  5. Ein Python-venv isoliert Paketabhängigkeiten, ist aber keine Sicherheits-Sandbox.

Externe Lernvideos und LearningApps sind optionale Lernmaterialien. Ihre Nutzung benötigt eine bewusste Freigabe; übertrage niemals echte Test- oder Kundendaten.


Lerneinheit 1: Klassen und Objekte

Dauer: 10–15 Minuten

Eine Klasse beschreibt gemeinsame Eigenschaften und Verhaltensweisen. Ein Objekt ist eine konkrete Instanz einer Klasse.

Bild: Aufbau eines UML-Klassendiagramms, Wikimedia Commons, gemeinfrei.

Bild: UML-Instanzdarstellung, Wikimedia Commons, Stkl, CC BY-SA 3.0.

Praxisfall: Geräteausleihe

Klasse Attribute Verantwortlichkeit
Geraet nummer, name Gerät beschreiben
Ausleihe geraet, alias, status Ausleihvorgang steuern
AusleihService ausleihen Anfragen koordinieren

Beispielobjekt: Geraet("G-01", "Beamer")

Dabei ist Geraet die Klasse, "G-01" eine fiktive Inventarnummer und "Beamer" der Gerätename.

Merke: Eine Klasse ist ein Modell. Das Objekt enthält konkrete Werte.


UML-Klassennotation

Bild: Sichtbarkeiten in UML, Wikimedia Commons, Frap, CC0.

Eine UML-Klasse kann aus Klassenname, Attributen und Methoden bestehen.

+----------------------------+
|          Ausleihe          |
+----------------------------+
| - geraet: Geraet           |
| - alias: String            |
| - status: Status           |
+----------------------------+
| + freigeben(): void        |
| + zurueckgeben(): void     |
+----------------------------+

- kennzeichnet private Sichtbarkeit im UML-Modell.

+ kennzeichnet öffentliche Sichtbarkeit.

In Python ist ein führender Unterstrich wie bei _status dagegen nur eine Konvention und keine technische Zugriffssperre.


Basisaufgabe mit Feedback

Auftrag: Entwickle eine Klasse Arbeitsplatz mit zwei Attributen und einer Methode.

Erwartung: Beispielsweise Arbeitsplatz mit nummer, standort und pruefen().

Feedback: Dein Entwurf ist sinnvoll, wenn die Attribute Eigenschaften des Arbeitsplatzes und die Methode eine fachliche Handlung beschreiben. Eine Klasse, die beliebige Aufgaben ohne Bezug zum Arbeitsplatz übernimmt, hat eine unklare Verantwortung.


Lerneinheit 2: Beziehungen zwischen Klassen

Dauer: 10–15 Minuten

Ein gutes objektorientiertes Modell zeigt nicht nur Klassen, sondern auch ihre Beziehungen.

Bild: Aggregation und Komposition mit Multiplizitäten, Wikimedia Commons, gemeinfrei.


Drei wichtige Beziehungen

Beziehung Bedeutung Beispiel
Assoziation Objekte stehen miteinander in Beziehung Ausleihe verweist auf Geraet
Aggregation Lose Teil-Ganzes-Beziehung Team mit Mitgliedern
Komposition Starke Teil-Ganzes-Beziehung mit gebundener Lebensdauer Bestellung mit Bestellpositionen

Wichtig: Nicht jede Beziehung ist eine Komposition. Eine starke Zugehörigkeit sollte nur modelliert werden, wenn sie fachlich begründet ist.


Multiplizitäten lesen

UML-Angabe Bedeutung
1 Genau ein Objekt
0..1 Kein oder ein Objekt
0..* Beliebig viele, auch keines
1..* Mindestens ein Objekt

Modell des Ausbildungsfalls:

+-----------------+
| AusleihService  |
+-----------------+
        |
        | verwaltet
        | 0..*
        v
+-----------------+       +-----------------+
|    Ausleihe     |------>|     Geraet      |
+-----------------+   1   +-----------------+
                         jede Ausleihe
                         referenziert
                         genau ein Geraet

Eine Ausleihe besitzt genau eine Gerätereferenz. Ein Gerät kann über die Zeit in mehreren Ausleihen vorkommen, aber im aktuellen Modell nur in einer offenen Ausleihe gleichzeitig.

Modellierungsentscheidung: Wir verwenden eine Assoziation zwischen Ausleihe und Geraet, weil ein Gerät unabhängig von einem einzelnen Ausleihvorgang existiert.


Anwendungsaufgabe mit Feedback

Auftrag: Begründe, warum eine Geräteausleihe nicht automatisch eine Komposition zwischen Ausleihe und Geraet benötigt.

Erwartung: Das Gerät besteht nach Beendigung des Ausleihvorgangs weiter.

Feedback: Richtig ist nicht allein die Auswahl der Assoziation. Entscheidend ist die Begründung über unabhängige Lebensdauer und fachliche Verantwortung.


Lerneinheit 3: Zustände verstehen

Dauer: 10–15 Minuten

Ein Zustandsdiagramm zeigt zulässige Zustände und Zustandsübergänge eines Objekts.

Bild: UML-Zustände und Transitionen, Wikimedia Commons, Mirosamek, CC BY-SA 3.0.


Zustandsmodell der Geräteausleihe

       anfragen
          |
          v
    [ANGEFRAGT]
          |
       freigeben
          |
          v
    [AUSGELIEHEN]
          |
     zurueckgeben
          |
          v
      [ZURUECK]
Aktueller Zustand Aktion Ergebnis
Kein Vorgang anfragen ANGEFRAGT
ANGEFRAGT freigeben AUSGELIEHEN
AUSGELIEHEN zurueckgeben ZURUECK
ANGEFRAGT zurueckgeben Fehler
ZURUECK freigeben Fehler

Warum sind Fehler wichtig? Ohne Übergangsregeln könnte ein Gerät zurückgegeben werden, das noch gar nicht ausgeliehen wurde.

Eine Guard-Bedingung erlaubt einen Übergang nur bei erfüllter Bedingung. Im späteren Python-Beispiel prüfen Methoden den aktuellen Status, bevor sie ihn verändern.


Basisaufgabe mit Feedback

Auftrag: Eine Ausleihe ist ANGEFRAGT. Darf sie direkt zurückgegeben werden?

Lösung: Nein.

Feedback: Eine Rückgabe setzt eine vorherige Freigabe voraus. Das Modell verhindert damit einen fachlich widersprüchlichen Ablauf.


Lerneinheit 4: Vom UML-Modell zum Python-Programm

Dauer: 20–25 Minuten

Jetzt überträgst Du das Modell in ausführbaren Python-Code.

Lokale Vorbereitung: Lege einen neuen Ordner geraeteausleihe_labor an. Speichere den folgenden Code als ausleihe.py. Verwende Python 3.10 oder neuer.


Lokales Codebeispiel: ausleihe.py

from dataclasses import dataclass
from enum import Enum


@dataclass(frozen=True)
class Geraet:
    nummer: str
    name: str


class Status(Enum):
    ANGEFRAGT = "angefragt"
    AUSGELIEHEN = "ausgeliehen"
    ZURUECK = "zurueck"


class Ausleihe:
    def __init__(self, geraet: Geraet, alias: str):
        self.geraet = geraet
        self.alias = alias
        self._status = Status.ANGEFRAGT

    @property
    def status(self) -> Status:
        return self._status

    def freigeben(self) -> None:
        if self._status is not Status.ANGEFRAGT:
            raise ValueError("Freigabe nur nach Anfrage")
        self._status = Status.AUSGELIEHEN

    def zurueckgeben(self) -> None:
        if self._status is not Status.AUSGELIEHEN:
            raise ValueError("Rueckgabe nur bei Ausleihe")
        self._status = Status.ZURUECK


class AusleihService:
    def __init__(self):
        self._ausleihen: list[Ausleihe] = []

    def anfragen(self, geraet: Geraet, alias: str) -> Ausleihe:
        belegt = any(
            a.geraet.nummer == geraet.nummer
            and a.status is not Status.ZURUECK
            for a in self._ausleihen
        )
        if belegt:
            raise ValueError("Geraet bereits vorgemerkt")
        ausleihe = Ausleihe(geraet, alias)
        self._ausleihen.append(ausleihe)
        return ausleihe

    def zaehle_offene(self) -> int:
        return sum(
            a.status is not Status.ZURUECK
            for a in self._ausleihen
        )


if __name__ == "__main__":
    service = AusleihService()
    a = service.anfragen(Geraet("G-01", "Beamer"), "AZUBI-01")
    print(a.status.value, service.zaehle_offene())
    a.freigeben()
    print(a.status.value, service.zaehle_offene())
    a.zurueckgeben()
    print(a.status.value, service.zaehle_offene())


Lokal ausführen

Starte das Programm im Übungsordner:

python ausleihe.py

Erwartete Ausgabe:

angefragt 1
ausgeliehen 1
zurueck 0

Wenn python auf Deinem Rechner nicht verfügbar ist, nutze den lokal installierten Python-3-Befehl. Es werden weder externe Dienste noch Zugangsdaten benötigt.


Interaktives lokales Python-Labor

Starte in der freigegebenen Offline-Testumgebung:

python -i ausleihe.py

Gib danach diese Python-Anweisungen nacheinander ein:

s = AusleihService()
g = Geraet("G-02", "Tablet")
a = s.anfragen(g, "AZUBI-03")
print(a.status.value)
a.freigeben()
print(a.status.value)
a.zurueckgeben()
print(a.status.value)

Erwartete Statusfolge: angefragt, ausgeliehen, zurueck

Teste danach absichtlich einen ungültigen Übergang:

a.freigeben()

Erwartung: Ein ValueError wird ausgelöst, weil eine bereits zurückgegebene Ausleihe nicht erneut freigegeben werden darf.

Feedback: Der Fehler ist hier erwünscht. Das Objekt schützt seine fachlichen Zustandsregeln.


Lerneinheit 5: Softwarequalität überprüfen

Dauer: 20–25 Minuten

Softwarequalität bedeutet mehr als fehlerfreie Syntax. Ein Modell sollte verständlich, überprüfbar, veränderbar und für den vorgesehenen Zweck geeignet sein.

Die ISO/IEC 25010 beschreibt ein Qualitätsmodell für Softwareprodukte. Für diesen Ausbildungsfall betrachten wir besonders funktionale Eignung, Wartbarkeit und Zuverlässigkeit.


Visualisierte Testdaten

Testfall Gerät Startstatus Aktion Erwartung
T1 G-01 Kein Vorgang anfragen ANGEFRAGT
T2 G-01 ANGEFRAGT freigeben AUSGELIEHEN
T3 G-01 AUSGELIEHEN zurueckgeben ZURUECK
T4 G-01 ANGEFRAGT zurueckgeben ValueError
T5 G-01 Bereits vorgemerkt erneut anfragen ValueError
T6 G-01 ZURUECK neu anfragen ANGEFRAGT

Datenhinweis: G-01 und die Benutzerkennungen sind frei erfundene Beispieldaten.


Lokales Testprogramm: test_ausleihe.py

Speichere diese zweite Datei im selben Ordner.

import unittest
from ausleihe import AusleihService, Geraet, Status


class AusleiheTests(unittest.TestCase):
    def setUp(self):
        self.service = AusleihService()
        self.geraet = Geraet("G-01", "Beamer")

    def test_anfrage_startet_im_richtigen_status(self):
        a = self.service.anfragen(self.geraet, "AZUBI-01")
        self.assertEqual(a.status, Status.ANGEFRAGT)

    def test_gueltiger_ablauf(self):
        a = self.service.anfragen(self.geraet, "AZUBI-01")
        a.freigeben()
        self.assertEqual(a.status, Status.AUSGELIEHEN)
        a.zurueckgeben()
        self.assertEqual(a.status, Status.ZURUECK)

    def test_keine_rueckgabe_vor_freigabe(self):
        a = self.service.anfragen(self.geraet, "AZUBI-01")
        with self.assertRaises(ValueError):
            a.zurueckgeben()

    def test_keine_doppelte_vormerkung(self):
        self.service.anfragen(self.geraet, "AZUBI-01")
        with self.assertRaises(ValueError):
            self.service.anfragen(self.geraet, "AZUBI-02")

    def test_neue_anfrage_nach_rueckgabe(self):
        a = self.service.anfragen(self.geraet, "AZUBI-01")
        a.freigeben()
        a.zurueckgeben()
        b = self.service.anfragen(self.geraet, "AZUBI-02")
        self.assertEqual(b.status, Status.ANGEFRAGT)

    def test_offene_ausleihen_zaehlen(self):
        a = self.service.anfragen(self.geraet, "AZUBI-01")
        self.assertEqual(self.service.zaehle_offene(), 1)
        a.freigeben()
        a.zurueckgeben()
        self.assertEqual(self.service.zaehle_offene(), 0)


if __name__ == "__main__":
    unittest.main()


Automatisierte Tests starten

python -m unittest -v test_ausleihe.py

Soll-Ergebnis: Sechs erfolgreiche Tests, Abschlussmeldung OK.

Die Tests sind wiederholbar und benötigen weder einen Datenbankserver noch ein Netzwerk.


Fehler bewusst erkennen

Verändere ausschließlich in einer Kopie des Übungsprogramms die Methode zurueckgeben so, dass die Zustandsprüfung entfällt.

Starte anschließend erneut die Tests.

Erwartetes Feedback: Der Test test_keine_rueckgabe_vor_freigabe schlägt fehl. Die fehlende Fehlermeldung zeigt, dass ein unerlaubter Zustandsübergang zugelassen wird.

Stelle danach die ursprüngliche Methode wieder her.

Wichtig: Erfolgreiche Unit-Tests belegen nur die getesteten Eigenschaften. Sie beweisen nicht, dass ein Programm insgesamt fehlerfrei oder produktionsreif ist.


Lerneinheit 6: Modelle bewerten und verbessern

Dauer: 15–20 Minuten


Qualität beurteilen

Prüfkriterium Leitfrage Ausbildungsfall
Verständlichkeit Sind Klassen und Verantwortlichkeiten klar? Geraet und Ausleihe sind getrennt
Korrektheit Werden ungültige Abläufe verhindert? Statusprüfungen
Testbarkeit Können Regeln automatisch geprüft werden? unittest
Wartbarkeit Sind Änderungen lokal möglich? Übergangsregeln in Methoden
Datenschutz Werden reale Personendaten vermieden? Fiktive Aliaswerte

Grenzen des Modells: Es gibt keine dauerhafte Speicherung, keine Rollenverwaltung, keine Prüfung leerer Aliaswerte und keinen Schutz gegen gleichzeitig ablaufende Anfragen. Der In-Memory-Prototyp ist deshalb keine fertige Produktivanwendung.


Gestufte Hilfen

Niveau Hilfe 1 Hilfe 2 Hilfe 3
Basis Markiere die Substantive des Falls Unterscheide Objekt und Eigenschaft Ordne Eigenschaften ihren Klassen zu
Anwendung Zeichne erlaubte Statuswechsel Suche die Statusprüfungen im Code Schreibe für jeden Übergang einen Test
Transfer Beschreibe eine neue Anforderung Bewerte Auswirkungen auf Modell und Code Ergänze positive und negative Tests


Transferauftrag mit begründetem Feedback

Neue Anforderung: Eine angefragte Geräteausleihe soll storniert werden können.

Deine Aufgabe: Ergänze den Zustand STORNIERT, erlaube die Stornierung nur aus ANGEFRAGT und prüfe, ob das Gerät danach erneut angefragt werden darf.

Hilfestufe 1: Zeichne zunächst den neuen Zustand und seine eingehende Transition.

Hilfestufe 2: Ergänze einen neuen Enum-Wert und eine Methode stornieren().

Hilfestufe 3: Überprüfe in AusleihService, welche Zustände ein Gerät weiterhin blockieren sollen.

Begründetes Feedback: Nur den Enum zu erweitern reicht nicht. Auch die Belegungsregel muss angepasst werden, da sonst ein storniertes Gerät fälschlich reserviert bleibt. Zusätzlich müssen Tests erlaubte Stornierungen und unzulässige Übergänge abdecken.


Interaktive Aufgaben


Quiz: Teste Dein Wissen

Was beschreibt eine Klasse in der objektorientierten Programmierung? (Einen Bauplan für gleichartige Objekte) (!Ein konkretes Benutzerkonto) (!Eine vollständige Datenbank) (!Eine einzelne Programmausgabe)




Was ist ein Objekt? (Eine konkrete Instanz einer Klasse) (!Ein UML-Zustandsübergang) (!Eine Programmiersprache) (!Ein automatischer Softwaretest)




Was bedeutet die Multiplizität 0..*? (Beliebig viele Objekte einschließlich keines) (!Genau ein Objekt) (!Mindestens zwei Objekte) (!Höchstens ein Objekt)




Welche UML-Beziehung verwendet eine ausgefüllte Raute? (Komposition) (!Assoziation) (!Generalisierung) (!Abhängigkeit)




Welchen Anfangsstatus besitzt eine neue Ausleihe im Python-Beispiel? (ANGEFRAGT) (!AUSGELIEHEN) (!ZURUECK) (!STORNIERT)




Welcher Zustandswechsel ist im Ausgangsmodell erlaubt? (Von AUSGELIEHEN nach ZURUECK) (!Von ZURUECK nach AUSGELIEHEN) (!Von ANGEFRAGT direkt nach ZURUECK) (!Von ZURUECK nach ANGEFRAGT)




Warum prüft freigeben den aktuellen Zustand? (Damit nur erlaubte Übergänge stattfinden) (!Damit automatisch ein Netzwerk verbunden wird) (!Damit alle Attribute öffentlich werden) (!Damit das Programm keine Klassen benötigt)




Was bewirkt assertRaises in einem Python-Test? (Es prüft das Auftreten einer erwarteten Ausnahme) (!Es legt automatisch eine Datenbank an) (!Es beendet alle anderen Programme) (!Es zeichnet ein UML-Klassendiagramm)




Wann blockiert eine vorhandene Ausleihe das Gerät im Ausgangsmodell nicht mehr? (Wenn ihr Status ZURUECK ist) (!Sobald die Anfrage erstellt wurde) (!Immer unmittelbar nach der Freigabe) (!Sobald eine zweite Anfrage eingeht)




Welche Aussage über erfolgreiche Unit-Tests ist richtig? (Sie bestätigen die jeweils geprüften Eigenschaften) (!Sie beweisen vollständige Fehlerfreiheit) (!Sie ersetzen sämtliche Anforderungen) (!Sie garantieren sichere Produktivsysteme)





Memory

Ordne die Fachbegriffe ihren passenden Bedeutungen zu.

Klasse Bauplan gleichartiger Objekte
Objekt Konkrete Instanz
Attribut Gespeicherte Eigenschaft
Methode Definiertes Verhalten
Assoziation Allgemeine Objektbeziehung
Komposition Starke Teil-Ganzes-Beziehung
Guard Bedingung eines Übergangs





Drag and Drop

Ordne jeden Fachbegriff seiner Funktion zu.

Ordne die richtigen Begriffe zu. Funktion
Klassendiagramm Statische Struktur darstellen
Zustandsdiagramm Erlaubte Zustandswechsel darstellen
Konstruktor Objekt initialisieren
Enumeration Festgelegte Zustandswerte definieren
Unit-Test Einzelne Programmeigenschaften prüfen
Ausnahme Ungültige Operation signalisieren





Kreuzworträtsel

Klasse Wie heißt der Bauplan für gleichartige Objekte?
Objekt Wie nennt man eine konkrete Instanz?
Attribut Wie heißt eine gespeicherte Eigenschaft?
Methode Wie heißt eine Operation einer Klasse?
Assoziation Wie heißt eine allgemeine Beziehung zwischen Klassen?
Zustand Wie heißt die aktuelle Phase eines modellierten Objekts?





LearningApps

Optionale externe Lernangebote zum Thema. Öffne sie nur, wenn die Nutzung des externen Dienstes ausdrücklich erlaubt ist. Verwende dort keine echten Daten.


Lückentext

Vervollständige den Text.
Eine

beschreibt die Eigenschaften und Methoden gleichartiger Objekte.
Ein konkretes

besitzt individuelle Attributwerte.
Eine gespeicherte Eigenschaft heißt

in der objektorientierten Modellierung.
Eine

definiert eine ausführbare Operation.
Die UML verwendet eine

zur Darstellung allgemeiner Beziehungen.
Die

gibt die mögliche Anzahl verbundener Objekte an.
Ein

visualisiert zulässige Zustandswechsel.
Eine neue Geräteausleihe beginnt im Zustand

und wartet auf Freigabe.
Bei einem ungültigen Übergang erzeugt unser Python-Programm einen

als Fehlersignal.
Das Modul

ermöglicht automatisierte Tests mit Python.
Ein erfolgreicher

bestätigt eine zuvor festgelegte Erwartung.
Die

erleichtert das Verstehen und Verändern eines Programms.




Offene Aufgaben

Bearbeite die Aufgaben in einer lokalen, freigegebenen Lernumgebung. Alle Geräte und Nutzerkennungen sind frei erfunden.


Leicht – Basisaufgaben

  1. Klassen erkennen: Markiere die Klassen des Ausbildungsfalls und zeichne drei Klassenkarten. Feedback: Eine gute Klassenauswahl trennt fachlich unterschiedliche Verantwortlichkeiten.
  2. Objekte erstellen: Erfinde drei Geräteobjekte mit unterschiedlichen Inventarnummern. Feedback: Verschiedene Attributwerte bei gleicher Klassenstruktur zeigen, dass Du Klasse und Instanz unterscheidest.
  3. Klassen skizzieren: Zeichne Geraet mit seinen Attributen und ergänze geeignete Typen. Feedback: Ein verständliches Diagramm erleichtert die spätere Implementierung.
  4. Zustände zuordnen: Zeichne den zulässigen Weg einer Geräteausleihe. Feedback: Jeder Pfeil benötigt ein fachlich nachvollziehbares Ereignis.


Standard – Anwendungsaufgaben

  1. Beziehungen modellieren: Zeichne Ausleihe und Geraet mit sinnvoller Multiplizität. Feedback: Berücksichtige, dass eine Ausleihe ein Gerät referenziert, ein Gerät aber mehrfach nacheinander ausgeliehen werden kann.
  2. Programm ausführen: Starte das Programm mit zwei unterschiedlichen fiktiven Geräten und protokolliere die Statusfolgen. Feedback: Die Ergebnisse sind plausibel, wenn jedes Objekt seine eigenen Statuswerte besitzt.
  3. Negativtest entwickeln: Prüfe eine doppelte Freigabe. Feedback: Ein erwarteter ValueError bestätigt, dass ein unzulässiger Übergang abgewiesen wird.
  4. Code-Review durchführen: Untersuche, welche Klasse für die Verhinderung doppelter Anfragen zuständig ist. Feedback: AusleihService ist passend, weil die Regel mehrere Ausleihe-Objekte betrifft.


Schwer – Transferaufgaben

  1. Stornierung entwickeln: Ergänze STORNIERT mit Übergängen und Tests. Feedback: Korrekt ist die Lösung erst, wenn auch die Belegungsprüfung stornierten Vorgängen Rechnung trägt.
  2. Eingaben validieren: Verhindere leere Gerätekennungen und Aliaswerte. Feedback: Prüfe ungültige Eingaben dort, wo das jeweilige Objekt seine Gültigkeit sicherstellen soll, und sichere die Regeln durch Tests.
  3. Modell erweitern: Entwirf eine Kategorie für unterschiedliche Gerätetypen. Entscheide zwischen Attribut, eigener Klasse und Vererbung. Feedback: Die einfachste fachlich ausreichende Struktur ist meist wartungsärmer als eine unnötige Klassenhierarchie.
  4. Gleichzeitige Anfragen beurteilen: Entwickle ein Konzept, das doppelte Reservierungen auch bei gleichzeitig eintreffenden Anfragen verhindert. Nutze nur ein lokales Gedankenexperiment oder eine freigegebene Simulation. Feedback: Die bisherige Listenprüfung reicht bei parallelen Zugriffen nicht zuverlässig aus; erforderlich ist eine atomare Reservierungsentscheidung.




Text bearbeiten Bild einfügen Video einbetten Interaktive Aufgaben erstellen



Lernkontrolle

Die folgenden Aufgaben prüfen Zusammenhänge, Begründungen und Transferleistungen.

  1. Modellentscheidung: Vergleiche eine einzige große Klasse mit den drei getrennten Klassen des Ausbildungsfalls. Erkläre die Auswirkungen auf Wartbarkeit und Testbarkeit.
  2. Zustandsänderung: Entwickle einen zusätzlichen Zustand DEFEKT. Erkläre, aus welchen Zuständen er fachlich erreichbar sein darf und welche Tests nötig wären.
  3. Beziehungsanalyse: Beurteile die Aussage, dass ein Gerät automatisch gelöscht werden müsse, sobald eine Ausleihe beendet wird. Begründe Deine Antwort mithilfe der Objektlebensdauer.
  4. Fehlerdiagnose: Ein Test zur doppelten Vormerkung schlägt fehl. Entwickle mindestens zwei mögliche Ursachen und beschreibe, wie Du diese lokal eingrenzt.
  5. Qualitätsentscheidung: Ein Betrieb möchte aus dem Prototyp ein reales Anwendungssystem machen. Erkläre, warum grüne Unit-Tests alleine nicht genügen, und priorisiere drei notwendige Verbesserungen.

Bewertung: Fachlich richtige Aussagen müssen durch Modellregeln, Testbeispiele oder nachvollziehbare Architekturargumente begründet werden. Reines Auswendiglernen reicht nicht.




Lernnachweis

Erstelle eine kurze Projektdokumentation zur fiktiven Geräteausleihe.

  1. Klassenmodell: Ein UML-Klassendiagramm mit mindestens drei Klassen, Attributen, Methoden und begründeten Beziehungen.
  2. Zustandsmodell: Ein Zustandsdiagramm mit erlaubten und nicht erlaubten Übergängen.
  3. Implementierung: Lokal ausführbarer Python-Code mit getrennten Verantwortlichkeiten.
  4. Testnachweis: Automatisierte positive und negative Tests mit dokumentierten Ergebnissen.
  5. Qualitätsreflexion: Eine begründete Bewertung von Korrektheit, Testbarkeit und Wartbarkeit.
  6. Transfer: Eine neue fachliche Anforderung mit Modellanpassung und ergänzten Tests.
  7. Sicherheitsnachweis: Ausschließlich fiktive Daten, keine fremden Systeme und keine ungefragte Datenübertragung.

Erfolgreich abgeschlossen ist der Lernkurs, wenn Modell, Implementierung und Tests zueinander passen und Du Deine Entscheidungen begründen kannst.




OERs zum Thema


Wikipedia: Unified Modeling Language


Wikipedia: Objektorientierte Programmierung


Geprüfte Fachquellen

  1. Object Management Group: UML 2.5.1 – Normative Grundlage der UML-Modellierung.
  2. Python-Dokumentation: Klassen – Klassen, Objekte, Attribute und Methoden.
  3. Python-Dokumentation: unittest – Testfälle, Assertions und automatisierte Testausführung.
  4. ISO/IEC 25010:2023 – Qualitätsmodell für Softwareprodukte.


Medienquellen und Nutzungsrechte

Wikimedia Commons:

  1. UML diagrams overview.svg – Gemeinfrei.
  2. UML class diagram example.svg – Trashtoy, gemeinfrei.
  3. Uml-Instance-specification-1.svg – Stkl, CC BY-SA 3.0.
  4. UML class diagram with access modifiers.svg – Frap, CC0 1.0.
  5. Komposition Aggregation.svg – Gemeinfrei.
  6. UML state machine Fig1.svg – Mirosamek, CC BY-SA 3.0.

Videos auf YouTube:

  1. Einführung in objektorientierte Programmierung – Binärverkehr.
  2. UML-Klassendiagramm: Beziehungen – Programmieren Starten.
  3. UML-Zustandsdiagramm für Fachinformatiker Anwendungsentwicklung – Stefan Macke.

Rechtehinweis: Wikimedia-Dateien stehen unter den auf den jeweiligen Dateiseiten ausgewiesenen freien Lizenzen oder Gemeinfreiheitserklärungen. Bei CC BY-SA sind Urhebernennung und Lizenzbedingungen zu beachten. YouTube-Videos sind hier nur als verifizierte externe Bildungsmedien eingebunden; ihre Einbettung bedeutet nicht automatisch eine freie Weiterverwendungslizenz. Die Quellseiten sind für eine erneute Lizenzprüfung vor Weiterverwendung maßgeblich.


Verknüpfte Lernbereiche


aiMOOC-Projekte



Schulfach+




aiMOOCs



aiMOOC Projekte









MOOCwiki · Deutsch

Nach dem Lernen ist vor dem Lernen

Entdecke direkt den nächsten Lernkurs. Weitere Inhalte erscheinen, wenn Du weiter nach unten scrollst.

Zur MOOCwiki-Hauptseite

Mediathek

Inhalte werden geladen ...

Mediathek wird aus dem Wiki geladen ...