Block 03 · UML-Modellierung

Immer 9/9 Prüfungen · Ø 38 von 200 Punkten · Teil 1 (in jeder Prüfung muss mindestens ein Diagramm gezeichnet werden) und Teil 2 (6×, oft als ganze 25-Punkte-Aufgabe) · Lösungen: 03_UML_Loesungen.html
So arbeitest du mit diesem Block Erst den Erklärungssatz lesen, dann die Aufgaben mit dem Belegsatz daneben lösen (Belegsatz am besten separat ausdrucken und neben die Aufgaben legen – genau so liegt er auch in der Prüfung neben dir). Gezeichnet wird mit Bleistift und Lineal direkt in die Zeichenflächen. Zeitrichtwert: 1 Punkt ≈ 0,9 Minuten. Lösungen erst danach in der separaten Lösungsdatei nachsehen. Bei Diagrammen gibt es fast immer mehrere richtige Lösungen – vergleiche Inhalt und Notation, nicht das Layout.

A · Erklärungssatz

UML-Diagramme sind der zweitgrößte Brocken der AP2 nach den Datenbanken. In jeder der neun ausgewerteten Prüfungen musste in Teil 1 mindestens ein Diagramm gezeichnet werden, in sechs Prüfungen zusätzlich in Teil 2 – dort oft als komplette 25-Punkte-Aufgabe (Aktivitätsdiagramm S23, Sequenzdiagramm W23, Zustandsdiagramm W25). Fast immer bekommst du einen Text (Prozessbeschreibung, Interview, Anforderungsliste, Quelltext) und musst daraus ein Diagramm erstellen oder ein vorgegebenes Teil-Diagramm ergänzen.

UnterthemaKategorieTypische PunkteWichtigste Fähigkeit
UML-01 Diagrammwahl, Diagramme lesenImmerin jeder DiagrammaufgabeAus dem Text erkennen, welches Diagramm gefragt ist; Diagramme lesen und Fehler finden
UML-02 AktivitätsdiagrammMeistens14–25Partitionen, Entscheidung mit Guards, Teilung/Synchronisation, Schleife
UML-03 KlassendiagrammMeistens5–25Attribute/Methoden-Syntax, Multiplizitäten, Aggregation vs. Komposition
UML-04 ZustandsdiagrammOft10–25ereignis [bedingung] / aktion, entry/do/exit, after()
UML-05 Use-Case-DiagrammOft6–18Systemgrenze, include/extend mit richtiger Pfeilrichtung, Generalisierung
UML-06 SequenzdiagrammWahrscheinlich9–25synchron/asynchron/Antwort, Fragmente alt, opt, loop
UML-07 Struktogramm / PAPSonstigebis 6Pseudocode ↔ Struktogramm, Fehler finden
Merke: Was im Belegsatz steht – und was du selbst können musst Der Belegsatz der IHK zeigt die Symbole der Diagramme, die in der Prüfung gebraucht werden (siehe Teil B). Er verrät dir damit auch, welche Diagrammarten drankommen – blättere ihn in der Prüfung zuerst durch. Nicht im Belegsatz stehen und deshalb gelernt werden müssen:

UML-01 · Verhaltensdiagramme allgemein / Diagrammwahl Immer

Vorkommen: 9/9 · Prüfungen: alle (W21–S26) · mindestens ein Verhaltensdiagramm (Aktivität, Zustand oder Sequenz) in jeder Prüfung, in Teil 1 immer ein gezeichnetes Diagramm

Was ist UML?

Die Unified Modeling Language (UML) ist eine von der OMG (Object Management Group) standardisierte grafische Sprache, mit der Software vor und während der Entwicklung beschrieben wird (aktuelle Version 2.5). Sie definiert 14 Diagrammarten, die in zwei Gruppen zerfallen:

UML-Diagramme Strukturdiagramme Verhaltensdiagramme Klassendiagramm Objektdiagramm Paketdiagramm Komponentendiagramm Verteilungsdiagramm Kompositionsstrukturdiagramm Profildiagramm Anwendungsfalldiagramm Aktivitätsdiagramm Zustandsdiagramm Interaktionsdiagramme Sequenzdiagramm Kommunikationsdiagramm Zeitverlaufsdiagramm Interaktionsübersichtsdiagramm = in den Prüfungen W21–S26 gefordert (außerdem Struktogramm und PAP, die nicht zur UML gehören)
Abb. A-1: Die 14 Diagrammarten der UML 2 – hervorgehoben sind die prüfungsrelevanten

Welches Diagramm wofür?

DiagrammZeigt …Signalwörter im AufgabentextKernelemente
Use-Case-Diagramm (Anwendungsfall­diagramm)welche Funktionen ein System für welche Akteure bietet – die Außensicht, ohne Reihenfolge„Funktionen“, „Anforderungen“, „wer kann was“, „Übersicht für die Geschäftsleitung“, „Akteure“, „Benutzergruppen“Akteur, Anwendungsfall, Systemgrenze, include, extend, Generalisierung
Aktivitäts­diagrammeinen Ablauf (Geschäftsprozess, Algorithmus) mit Verzweigungen, Parallelität und Zuständigkeiten„Ablauf“, „Prozess“, „Arbeitsschritte“, „zuerst … dann“, „gleichzeitig“, „wer ist zuständig“, Interview mit mehreren BeteiligtenAktion, Entscheidung, Teilung/Synchronisation, Partitionen (Swimlanes), Start/Ende
Zustands­diagrammdie Zustände eines einzelnen Objekts (Gerät, Auftrag, Konto) und die Ereignisse, die Zustandswechsel auslösen„Zustand“, „Status“, „wechselt in“, „befindet sich in“, „reagiert auf“, „nach x Sekunden“, „Lebenszyklus“, Ampel, Automat, RoboterZustand, Transition ereignis [bedingung] / aktion, entry/do/exit, after
Sequenz­diagrammden Nachrichtenaustausch zwischen Objekten bzw. Systemen in zeitlicher Reihenfolge„Methodenaufrufe“, „Kommunikation zwischen App, Server und Datenbank“, „Nachrichten“, „Anfrage/Antwort“, Quelltext einer MethodeLebenslinie, synchrone/asynchrone Nachricht, Antwort, Aktivierung, Fragmente alt/opt/loop
Klassen­diagrammdie statische Struktur: Klassen mit Attributen, Methoden und Beziehungen„Klassen“, „Attribute mit Datentypen“, „Beziehungen/Multiplizitäten“, „besteht aus“, „ist ein“, „hat“Klasse, Sichtbarkeit, Assoziation, Aggregation, Komposition, Vererbung, Interface
Objektdiagrammkonkrete Objekte (Instanzen) mit Attributwerten zu einem Zeitpunkt„Momentaufnahme“, „Beispielbelegung“k1 : Kunde (unterstrichen), Links
Komponenten­diagrammSoftwarebausteine und ihre Schnittstellen„Module“, „Komponenten“, „Schnittstellen zwischen Teilsystemen“Komponente, bereitgestellte/benötigte Schnittstelle
Verteilungs­diagrammauf welcher Hardware (Knoten) welche Software läuft„Server“, „Endgeräte“, „installiert auf“, „Infrastruktur“Knoten (Quader), Artefakt, Kommunikationspfad
Merke: die vier Leitfragen Wer macht was mit dem System? → Use-Case-Diagramm. In welcher Reihenfolge laufen Schritte ab (ggf. bei mehreren Beteiligten)? → Aktivitätsdiagramm. In welchem Zustand ist ein Objekt und wie reagiert es auf Ereignisse? → Zustandsdiagramm. Wer schickt wem wann welche Nachricht? → Sequenzdiagramm. Und für die Struktur: Welche Klassen mit welchen Daten und Beziehungen gibt es? → Klassendiagramm.

Die häufigste Verwechslung: Aktivitäts- oder Zustandsdiagramm?

Beide haben abgerundete Kästen und Pfeile – trotzdem beschreiben sie etwas völlig anderes. Im Aktivitätsdiagramm ist ein Kasten etwas, das getan wird; im Zustandsdiagramm ist ein Kasten eine Situation, in der ein Objekt verweilt, bis ein Ereignis eintritt.

AktivitätsdiagrammZustandsdiagramm
Knoten bedeuteteine Tätigkeit (Aktion) – Verb + Objekt: „Antrag prüfen“, „Ware versenden“eine Situation eines Objekts – Adjektiv/Partizip/Substantiv: „Bereit“, „Gesperrt“, „In Bearbeitung“
Pfeil bedeutet„danach kommt“ (Kontrollfluss); wird automatisch durchlaufen, sobald die Aktion fertig istZustandswechsel, der durch ein Ereignis ausgelöst wird (Transition); ohne Ereignis passiert nichts
Betrachtet wirdein Ablauf, oft mit mehreren Beteiligten (Partitionen)genau ein Objekt (ein Gerät, ein Konto, ein Auftrag)
Zeit/Wartennur indirekt darstellbarnatürlich: das Objekt wartet im Zustand; Zeitereignisse mit after(…)
Typische Frage„Stellen Sie den Ablauf … dar“„Stellen Sie die Zustände … dar“, „wie reagiert das Gerät …“

Aktivitäts- oder Sequenzdiagramm?

Beide zeigen eine Reihenfolge. Das Aktivitätsdiagramm beschreibt was getan wird (fachliche Schritte, auch ohne Software, z. B. „Paket packen“). Das Sequenzdiagramm beschreibt wie Objekte dafür zusammenarbeiten – mit konkreten Nachrichten bzw. Methodenaufrufen, Parametern und Rückgabewerten. Steht im Text „ruft … auf“, „sendet eine Anfrage an“, „erhält als Antwort“ oder ist Quelltext gegeben, ist das Sequenzdiagramm gemeint.

Beispiel: Diagrammwahl bei einem Paketdienst

Was soll dokumentiert werden?DiagrammBegründung
Welche Funktionen das Kundenportal für Privatkunden, Geschäftskunden und Zusteller bietetUse-Case-DiagrammFunktionen aus Sicht der Akteure, Übersicht ohne Ablauf
Wie ein Paket vom Einliefern über das Sortierzentrum bis zur Zustellung bearbeitet wird und wer welchen Schritt erledigtAktivitätsdiagramm mit PartitionenAblauf über mehrere Beteiligte mit Verzweigungen (z. B. Empfänger nicht angetroffen)
Welchen Sendungsstatus ein Paket haben kann (angekündigt, im Zentrum, in Zustellung, zugestellt, Rücksendung) und was einen Wechsel auslöstZustandsdiagrammein Objekt (die Sendung), Zustände und auslösende Ereignisse
Wie Scanner, Sendungsdienst und Datenbank beim Einscannen eines Pakets Daten austauschenSequenzdiagrammNachrichten zwischen Objekten in zeitlicher Reihenfolge

So gehst du vor: Diagramm aus einem Text ableiten

  1. Diagrammart klären. Steht sie in der Aufgabe, ist alles klar. Wenn nicht: Leitfragen oben anwenden und im Belegsatz nachsehen, welche Notationen beiliegen.
  2. Text markieren. Beteiligte/Rollen (→ Partitionen, Akteure, Lebenslinien), Tätigkeiten (→ Aktionen, Anwendungsfälle, Nachrichten), Zustände (→ Zustände), Bedingungen „wenn/falls/sonst“ (→ Entscheidung bzw. Guard), „gleichzeitig“ (→ Teilung/Synchronisation bzw. par), Wiederholungen (→ Schleife bzw. loop), Zeitangaben (→ after).
  3. Grob skizzieren – erst den Hauptweg („Gutfall“), dann die Abzweigungen. Bleistift benutzen, Platz lassen.
  4. Jeden Satz abhaken. Die IHK vergibt Punkte für einzelne Sachverhalte aus dem Text. Was im Text steht, muss im Diagramm vorkommen – was nicht im Text steht, wird nicht erfunden.
  5. Notation prüfen (Belegsatz): Pfeilspitzen, Guards in eckigen Klammern, Start/Ende vorhanden, Rautenseite bei Aggregation/Komposition, include/extend-Richtung.

Ein gegebenes Diagramm lesen

Fehler in Diagrammen finden – Checkliste

DiagrammTypische (Prüfungs-)Fehler
AktivitätRückführung einer Schleife direkt in eine Aktion statt in eine Zusammenführung (Abb. A-4) · parallele Zweige mit Raute statt Synchronisationsbalken zusammengeführt · Teilungsbalken, wo eine Entscheidung gemeint ist (beide Wege würden ausgeführt) · Guards fehlen, überlappen oder decken nicht alle Fälle ab (z. B. [alter < 18] und [alter > 18] – was gilt mit genau 18?) · Aktion in der falschen Partition · Weg endet ohne Endknoten
ZustandTätigkeiten statt Zustände als Namen · Transition ohne Ereignis (außer bei Abschluss einer do-Aktivität) · widersprüchliche Bedingungen bei gleichem Ereignis · fehlender Startzustand · Zustand ohne Ausgang, der kein Endzustand ist
Use Caseinclude/extend-Pfeil in der falschen Richtung · Akteur innerhalb der Systemgrenze · Bedienschritte („Button klicken“) als Anwendungsfall · einfache Linie zwischen zwei Anwendungsfällen · Linie zwischen zwei Akteuren
SequenzAntwort mit gefüllter Spitze oder durchgezogener Linie · asynchrone Nachricht, auf deren Ergebnis gewartet wird · Nachricht an ein Objekt, bevor es erzeugt wurde · fehlende Aktivierung
KlasseRaute am falschen Ende (muss beim Ganzen sitzen) · Multiplizitäten vertauscht · Fremdschlüssel-Attribute wie im Relationenmodell statt Assoziationen · fehlende Datentypen
Typische Falle „Stellen Sie die Zustände des Roboters dar“ – und dann wird ein Aktivitätsdiagramm mit Aktionen wie „Essen ausliefern“ gezeichnet. Das gibt kaum Punkte, auch wenn der Ablauf stimmt. Umgekehrt: Bei „Stellen Sie den Ablauf … mit den beteiligten Abteilungen dar“ ist kein Zustandsdiagramm gefragt. Lies die Aufgabenstellung zweimal, bevor du den ersten Kasten zeichnest.
So wird es in der Prüfung gefragt Die Diagrammart steht fast immer in der Aufgabe („Erstellen Sie ein UML-Aktivitätsdiagramm …“). Die Wahl selbst wird eher indirekt geprüft: Du musst Beschreibungen richtig interpretieren (z. B. W25 T2 A2: Zustände eines Servierroboters, 25 P; W24 T1 A4a: Auslastungszustände mit Bedingungen, 15 P). In W23 T1 A2b (6 P) musste ein gegebenes Use-Case-Diagramm gelesen und in User Stories übersetzt werden; in S22 T1 A3 wurden Klassen- und Sequenzdiagramm zum selben Sachverhalt (Beobachter-Muster) kombiniert. Rechne damit, ein vorgegebenes Diagramm erklären, korrigieren oder ergänzen zu müssen.

UML-02 · Aktivitätsdiagramm Meistens

Vorkommen: 6/9 · Prüfungen: W21, W22, S23, W23, S24, S26 · 14–25 Punkte, meist aus einem Prozesstext oder Interview mit Partitionen

Das Aktivitätsdiagramm beschreibt einen Ablauf: einen Geschäftsprozess („Wie läuft eine Bestellung ab?“), einen Anwendungsfall im Detail oder einen Algorithmus. Es ist der Klassiker der Prüfung, weil es sich gut aus Text ableiten lässt und Verzweigung, Parallelität und Zuständigkeiten abfragt.

Die Elemente und ihre Regeln

ElementDarstellungBedeutung und Regel
Startknotengefüllter KreisBeginn des Ablaufs. Genau ein ausgehender Pfeil. Steht in der Partition dessen, der den Ablauf auslöst.
AktionRechteck mit abgerundeten Eckenein Arbeitsschritt, benannt mit Objekt + Verb: „Antrag prüfen“, „Rechnung erstellen“. Ein eingehender, ein ausgehender Pfeil.
KontrollflussPfeil mit offener Spitze„danach kommt“. Darf Partitionsgrenzen überqueren.
Entscheidung (Verzweigung)Raute, 1 Eingang, mehrere AusgängeGenau ein Ausgang wird genommen. Jeder Ausgang trägt eine Bedingung (Guard) in eckigen Klammern. Die Guards müssen sich gegenseitig ausschließen und zusammen alle Fälle abdecken; [else] ist erlaubt.
ZusammenführungRaute, mehrere Eingänge, 1 Ausgangführt alternative Wege wieder zusammen („ODER“): Sobald ein Weg ankommt, geht es weiter. Ohne Guards.
Teilung (Gabelung, Fork)Balken, 1 Eingang, mehrere AusgängeAlle Ausgänge werden gleichzeitig bzw. in beliebiger Reihenfolge durchlaufen. Keine Guards!
Synchronisation (Vereinigung, Join)Balken, mehrere Eingänge, 1 AusgangWartet, bis alle eingehenden Zweige angekommen sind („UND“), dann geht es einmal weiter.
Endknoten (Aktivitätsende)Kreis mit gefülltem Kreisbeendet die gesamte Aktivität – auch noch laufende parallele Zweige. Mehrere Endknoten sind erlaubt.
Ablaufende (Flussende)Kreis mit Xbeendet nur diesen einen Zweig; andere parallele Zweige laufen weiter.
Partition (Schwimmbahn, Swimlane)Spalten mit ÜberschriftZuständigkeit: Jede Aktion steht in der Bahn der Person, Abteilung oder des Systems, das sie ausführt.
KonnektorKreis mit BuchstabeSprungmarke, um lange Pfeile zu vermeiden (z. B. am Seitenende). Gleiche Buchstaben gehören zusammen.
Objektknoten (optional)eckiges Rechteck, z. B. Rechnung [bezahlt]zeigt, welches Objekt zwischen zwei Aktionen weitergegeben wird (Objektfluss). In der AP2 selten verlangt, aber erlaubt.

Denkmodell „Marken“ (Token): Stell dir vor, eine Spielfigur läuft vom Startknoten aus die Pfeile entlang. An einer Entscheidung wählt sie einen Weg. An einer Teilung entstehen aus einer Figur mehrere, die gleichzeitig weiterlaufen. Eine Synchronisation lässt erst eine Figur weiter, wenn von jedem Eingang eine angekommen ist. Eine Zusammenführung lässt jede ankommende Figur sofort durch. Damit lassen sich alle Fehlerfragen beantworten: Führt man zwei parallele Figuren über eine Raute zusammen, laufen danach zwei Figuren weiter – alles danach passiert doppelt.

Mitarbeiter/in Vorgesetzte/r Personalabteilung Urlaubsantrag stellen Antrag prüfen [genehmigt] Vertretung planen Resturlaub prüfenund Urlaub buchen [abgelehnt] Entscheidung zurKenntnis nehmen Entscheidung Zusammenführung Teilung Synchronisation
Abb. A-2: Aktivitätsdiagramm mit drei Partitionen (Swimlanes) – Beispiel „Urlaubsantrag“

Abb. A-2 zeigt alle Grundelemente: Die Entscheidung mit zwei sich ausschließenden Guards, die Teilung, nach der Vertretung und Urlaubsbuchung unabhängig voneinander erledigt werden, die Synchronisation, die auf beide wartet, und die Zusammenführung, über die beide Ergebnisse (abgelehnt/genehmigt) zur letzten Aktion laufen. Die Kanten wechseln dabei die Partitionen – das ist ausdrücklich erlaubt.

Schleifen, Endknoten und Ablaufende

Eine Wiederholung entsteht, indem ein Pfeil von einer Entscheidung zurück zu einer Zusammenführung vor dem zu wiederholenden Schritt führt. Die Bedingung steht am rückführenden Pfeil (z. B. [weiteres Dokument]) und am weiterführenden Pfeil ([fertig]).

Dokument hochladen [weiteres Dokument] [fertig] Bewerbung absenden Statistik aktualisieren Zusammenführung Entscheidung Endknoten Ablaufende
Abb. A-3: Schleife über eine Zusammenführung, Teilung mit Endknoten und Ablaufende – Beispiel „Online-Bewerbung“

In Abb. A-3 laufen nach der Teilung „Bewerbung absenden“ und „Statistik aktualisieren“ parallel. Der untere Zweig endet mit einem Ablaufende – nur dieser Zweig ist dann fertig. Erreicht der obere Zweig den Endknoten, endet die gesamte Aktivität, selbst wenn die Statistik noch läuft. Soll beides sicher abgeschlossen werden, verwendet man stattdessen eine Synchronisation vor einem gemeinsamen Endknoten.

falsch richtig Aktion A [nochmal] [fertig] Zwei eingehende Kanten an einer Aktion = implizites UND:„Aktion A“ wartet auf beide Kanten → Verklemmung. Aktion A [nochmal] [fertig] Rückführung über eine Zusammenführung (Raute)vor der Aktion B C D läuft 2× B C D läuft 1×
Abb. A-4: Zwei klassische Fehler im Aktivitätsdiagramm – oben Schleife, unten Parallelität
Merke Raute = ODER (Entscheidung: einer von mehreren Wegen; Zusammenführung: einer von mehreren kommt an). Balken = UND (Teilung: alle Wege; Synchronisation: alle müssen ankommen). Guards stehen nur an Ausgängen einer Entscheidung, immer in [eckigen Klammern]. Eine Aktion hat genau einen Eingang – Schleifen laufen über eine Zusammenführung.

Partitionen (Swimlanes) richtig einsetzen

So gehst du vor: Aktivitätsdiagramm aus einem Text oder Interview

  1. Bahnen anlegen (Beteiligte aus dem Text), Startknoten in die Bahn des Auslösers.
  2. Sätze in Aktionen zerlegen: pro Tätigkeit eine Aktion, Objekt + Verb. Füllsätze („das ist bei uns schon immer so“) ignorieren.
  3. Signalwörter übersetzen:
    Im TextIm Diagramm
    „wenn … dann“, „falls“, „sonst“, „bei …“, „je nachdem“Entscheidung mit Guards (und später meist eine Zusammenführung)
    „gleichzeitig“, „parallel“, „währenddessen“, „unabhängig voneinander“, „zweierlei passiert“Teilung
    „erst wenn beides erledigt ist“, „sobald alle … fertig sind“Synchronisation
    „erneut“, „wiederholt“, „für jedes“, „solange“, „bis“, „die nächste …“Schleife: Entscheidung + Rückführung in eine Zusammenführung
    „dann ist der Vorgang beendet“, „damit ist die Sache erledigt“Endknoten
    „nebenbei“, „dieser Teil endet hier, der Rest läuft weiter“Ablaufende
  4. Hauptweg zeichnen, dann Abzweigungen; jede Entscheidung bekommt vollständige Guards.
  5. Kontrolle: Hat jede Teilung eine Synchronisation (falls die Zweige wieder zusammenlaufen)? Endet jeder Weg in einem Endknoten? Ist jeder Satz des Textes abgebildet?
Typische Fallen
So wird es in der Prüfung gefragt S23 T2 A1 (25 P): Interviewtext mit vier Beteiligten, leerer Rahmen mit vier Bahnen vorgegeben – eine ganze Aufgabe nur für das Aktivitätsdiagramm. W22 T1 A4a (14 P) und W23 T1 A2c (15 P): Prozess mit Partitionen und paralleler Bearbeitung. S24 T2 A1a (14 P): drei Partitionen, Parallelität und Verzweigung. S26 T1 A2a (16 P): Steuerung einer Bewässerung mit gleichzeitig ablaufenden Sensorabfragen (Teilung/Synchronisation). Die Punkte gibt es pro korrekt umgesetztem Sachverhalt; die genaue Anordnung ist egal, solange die Logik stimmt.

UML-03 · Klassendiagramm Meistens

Vorkommen: 6/9 · Prüfungen: W21, S22, S23, S24, W24, S26 · 5–25 Punkte; oft auch als Grundlage für Pseudocode-Aufgaben

Das Klassendiagramm zeigt die statische Struktur einer objektorientierten Software: welche Klassen es gibt, welche Daten (Attribute) und Operationen (Methoden) sie haben und wie sie zusammenhängen. In der Prüfung wird es erstellt bzw. ergänzt (W24: 17 P), aus Quelltext abgeleitet, gelesen (Multiplizitäten deuten) oder als Vorgabe für Algorithmen benutzt. Die objektorientierten Konzepte dahinter (Polymorphie, Entwurfsmuster) behandelt Block 08 – hier geht es um die Notation.

Aufbau einer Klasse

Ein Rechteck mit bis zu drei Abschnitten: Name (fett, zentriert, Substantiv im Singular) – Attribute – Methoden. Leere Abschnitte dürfen weggelassen werden.

TeilSyntaxBeispiel
AttributSichtbarkeit name : Typ [= Startwert] {Eigenschaft}- preis : double, - anzahl : int = 0, - MWST : double = 0.19 {readOnly}
MethodeSichtbarkeit name(param : Typ, …) : Rückgabetyp+ berechneSumme() : double, + setPreis(preis : double) : void
Konstruktorwie eine Methode mit dem Klassennamen, ohne Rückgabetyp+ Artikel(nr : String, preis : double)
statisch (Klassen­attribut/-methode)unterstrichen (UML-Standard); im IHK-Belegsatz zusätzlich als Eigenschaft {static}- anzahlArtikel : int – gehört der Klasse, nicht dem einzelnen Objekt
abstraktName kursiv oder {abstract}abstrakte Klasse Zahlungsart, abstrakte Methode + bezahlen() : boolean
Schnittstelle«interface» über dem Namen (in Prüfungen oft <<interface>>)enthält nur Methodensignaturen (abstrakt), meist keine Attribute
SichtbarkeitUMLJavaZugriff erlaubt für …
public+publicalle Klassen
private-privatenur die Klasse selbst (Standard für Attribute → Kapselung, Zugriff über Getter/Setter)
protected#protecteddie Klasse und ihre Unterklassen (in Java zusätzlich das Paket)
package~kein Schlüsselwortalle Klassen im selben Paket

Datentypen: Verwende die Typen aus der Aufgabe oder übliche Typen: int/Integer, double, boolean, String, Date (bzw. LocalDate), Time/DateTime, Listen als List<Typ> oder mit Multiplizität Typ[*]. Geldbeträge als double (in der Praxis BigDecimal), Telefonnummern und Postleitzahlen als String (führende Nullen!).

Beziehungen

BeziehungNotationBedeutungErkennbar im Text/Code
Assoziationdurchgezogene LinieObjekte kennen sich / arbeiten zusammen„gehört zu“, „bucht“, „betreut“
gerichtete AssoziationLinie mit offener Pfeilspitzenur eine Seite kennt die andere (Navigierbarkeit)Attribut nur in einer der beiden Klassen
AggregationLinie mit hohler Raute am Ganzen„Ganzes – Teil“, Teile können unabhängig existieren und mehreren Ganzen gehören„hat“, „besteht aus“; Teil wird von außen übergeben
KompositionLinie mit gefüllter Raute am Ganzenstrenges „Ganzes – Teil“: Teil existiert nur im Ganzen und wird mit ihm gelöscht„besteht aus“; Teil wird im Ganzen erzeugt (new)
Vererbung (Generali­sierung)Linie mit hohlem Dreieck an der Oberklasse„ist ein(e)“: Unterklasse erbt Attribute und Methodenextends, „ist eine Art von“
Realisierung (Implementierung)gestrichelte Linie mit hohlem Dreieck am InterfaceKlasse implementiert die Methoden des Interfacesimplements
Abhängigkeitgestrichelte Linie mit offener Spitze, ggf. «use»Klasse benutzt eine andere kurzzeitig (Parameter, lokale Variable), ohne sie dauerhaft zu kennenTyp nur als Parameter oder lokale Variable
Kunde - kundenNr : int - name : String - email : String + getBestellungen() : List<Bestellung> Bestellung - bestellNr : int - datum : Date - status : String + berechneSumme() : double + stornieren() : boolean «interface» Druckbar + drucken() : void Position - menge : int - einzelpreis : double + getBetrag() : double Artikel - artikelNr : String - bezeichnung : String - preis : double - anzahlArtikel : int Zahlungsart {abstract} # betrag : double + bezahlen() : boolean Kreditkarte - kartenNr : String Rechnungskauf - faelligAm : Date 1 0..* gibt auf ▸ 1 1..* {ordered} 0..* 1 0..* 0..1 unterstrichen = statisch (Klassenattribut)kursiv bzw. {abstract} = abstrakt{ordered} = geordnete Menge
Abb. A-5: Klassendiagramm – Beispiel „Onlineshop“ (alle Beziehungsarten außer Aggregation, siehe Abb. A-6)

Multiplizitäten

AngabeBedeutungAngabeBedeutung
1genau eins* bzw. 0..*beliebig viele (auch keins)
0..1keins oder eins (optional)1..*mindestens eins
2..*mindestens zwei2..5zwei bis fünf

Leseregel: Die Multiplizität steht an der Klasse, deren Anzahl sie angibt. Man liest immer vom anderen Ende her: „Ein Objekt der Klasse A steht mit [Multiplizität bei B] Objekten der Klasse B in Beziehung.“ In Abb. A-5: Ein Kunde gibt 0..* (beliebig viele) Bestellungen auf; eine Bestellung wird von genau 1 Kunden aufgegeben. Für die volle Punktzahl immer beide Richtungen als Satz formulieren.

Weitere Angaben an einem Assoziationsende: Rollenname (z. B. vorgesetzter / mitarbeiter – besonders wichtig bei Beziehungen einer Klasse zu sich selbst), {ordered} für eine geordnete Reihenfolge (Liste statt Menge), Leserichtung mit ▸ am Assoziationsnamen.

Aggregation oder Komposition?

Rechnung Rechnungsposition 1 1..* Komposition: Die Position existiert nur inihrer Rechnung und wird mit ihr gelöscht. Playlist Song 0..* 0..* Aggregation: Ein Song kann in vielen Playlistsstehen und bleibt beim Löschen erhalten. Bestellung MwStRechner «use» Abhängigkeit: Bestellung benutzt den Rechnerkurzzeitig (z. B. als Parameter), hält ihn nicht.
Abb. A-6: Komposition, Aggregation und Abhängigkeit im Vergleich
PrüffrageKomposition (gefüllte Raute)Aggregation (hohle Raute)
Kann das Teil ohne das Ganze sinnvoll existieren?nein – existenzabhängigja – eigenständig
Wird das Teil mit dem Ganzen gelöscht?ja (Löschen wird „durchgereicht“)nein
Kann ein Teil zu mehreren Ganzen gehören?nein – Multiplizität am Ganzen ist 1 (höchstens 0..1)ja, z. B. 0..*
Wer erzeugt das Teil (Code)?das Ganze selbst (new im Konstruktor oder in einer Methode)jemand anderes; das Teil wird übergeben (Konstruktor-/Set-Parameter)
BeispieleRechnung – Rechnungsposition, Bestellung – Bestellposition, Haus – StockwerkPlaylist – Song, Mannschaft – Spieler, Kurs – Teilnehmer
Merke Die Raute sitzt immer am Ganzen. Gefüllt = „stirbt mit“ (Komposition), hohl = „lebt weiter“ (Aggregation). Wenn du unsicher bist und die Aufgabe keine Ganzes-Teil-Beziehung betont, ist eine normale Assoziation nie falsch – eine Begründung bringt aber oft extra Punkte.

Quelltext ↔ Klassendiagramm

JavaKlassendiagramm
private String name;- name : String
private static int zaehler;- zaehler : int
public abstract class Fahrzeug / public abstract void fahren();Klassenname bzw. Methode kursiv oder {abstract}
class Pkw extends FahrzeugVererbungspfeil von Pkw zu Fahrzeug
class Pkw implements Wartbargestrichelter Pfeil mit Dreieck zu «interface» Wartbar
private Motor motor; (Objekt wird übergeben)Assoziation/Aggregation zu Motor, Multiplizität 1 (bzw. 0..1, wenn null erlaubt)
private List<Rad> raeder = new ArrayList<>(); und raeder.add(new Rad()) in der KlasseKomposition zu Rad, Multiplizität * (oder die genaue Anzahl)
Methode ohne Modifizierer: void reset()~ reset() : void

Ein Attribut, das auf ein Objekt einer anderen Klasse im Diagramm verweist, wird in der Regel als Beziehungslinie dargestellt – nicht zusätzlich als Attribut (sonst doppelt). Der Attributname kann als Rollenname an das Linienende geschrieben werden.

So gehst du vor: Klassendiagramm aus einem Text

  1. Substantive sammeln: Was eigene Daten und eine eigene Identität hat, wird eine Klasse (Kunde, Bestellung); einfache Werte werden Attribute (Name, Datum, Preis).
  2. Attribute mit Datentypen eintragen, Sichtbarkeit - (Kapselung), sofern nichts anderes verlangt.
  3. „ist ein / ist eine Art von“ → Vererbung. Gemeinsame Attribute in die Oberklasse; „es gibt nur diese Arten“ → Oberklasse abstrakt.
  4. Beziehungen: „hat / gehört zu / besteht aus“ → Assoziation, Aggregation oder Komposition (Prüffragen oben). Gibt die Beziehung selbst Daten her (z. B. Anmeldedatum), wird daraus eine eigene Klasse (oder Assoziationsklasse).
  5. Multiplizitäten an beiden Enden aus Zahlwörtern ableiten: „genau ein“, „mindestens ein“, „mehrere“, „kann … haben“ (→ 0..).
  6. Methoden nur, wenn verlangt oder im Text genannt.
Typische Fallen
So wird es in der Prüfung gefragt W24 T1 A3: Klassendiagramm aus einem Text ergänzen (17 P, eine Klasse war vorgegeben, Attribute mit Datentypen und Beziehungen mit Multiplizitäten verlangt, geordnete Liste!), dazu Bedeutung der Aggregation (2 P), Multiplizitäten deuten (3 P) und begründen, ob statt Aggregation eine Komposition sinnvoll wäre (3 P). S26 T2 A2a (12 P): abstrakte Klasse, Vererbung, Aggregation. S22 T1 A3a (7 P): Sichtbarkeiten. W21 T1 A3b (7 P): eine Klasse mit Attributen und Methoden. S23 T1 A2bb (9 P) und S24 T1 A3b: Klassendiagramm als Vorlage für Methoden in Pseudocode.

UML-04 · Zustandsdiagramm Oft

Vorkommen: 4/9 · Prüfungen: W22, S23, W24, W25 · 10–25 Punkte, zuletzt als ganze 25-Punkte-Aufgabe (W25)

Ein Zustandsdiagramm (Zustandsautomat, State Machine) beschreibt, wie sich ein einzelnes Objekt im Laufe seines Lebens verhält: In welchen Zuständen kann es sein, welche Ereignisse lassen es in einen anderen Zustand wechseln und was passiert dabei? Typische Objekte in der Prüfung: Geräte und Automaten (Ampel, Roboter, Sensor), Vorgänge mit Status (Buchung, Raum, Auftrag).

Begriffe

BegriffDarstellungBedeutung
ZustandRechteck mit abgerundeten Ecken, Name fettSituation, in der das Objekt verweilt, bis etwas passiert (wartet, eine Bedingung gilt oder eine Tätigkeit läuft). Name: Adjektiv/Partizip/Substantiv – „Bereit“, „Gesperrt“, „Zielfahrt“.
Startzustandgefüllter KreisPseudozustand; der Pfeil daraus zeigt auf den ersten echten Zustand.
EndzustandKreis mit gefülltem KreisLebensende des Objekts (gelöscht, ausgeschaltet). Nicht jedes Diagramm braucht einen.
TransitionPfeil mit Beschriftung ereignis [bedingung] / aktionZustandswechsel. Alle drei Teile sind optional.
Ereignis (Auslöser, Trigger)vor der KlammerWas löst den Wechsel aus? Ein Signal, ein Methodenaufruf, eine Meldung, eine Zeitspanne.
Bedingung (Guard)in [ ]Muss beim Eintreten des Ereignisses wahr sein, sonst schaltet diese Transition nicht.
Aktion (Effekt, Verhalten)nach dem /Wird beim Schalten ausgeführt – kurz, nicht unterbrechbar.

Beispiele für Beschriftungen: einschalten · münzeEingeworfen [betrag >= preis] / ticketDrucken · [sensorOk] (nur Bedingung, wird nach Abschluss des Zustands geprüft) · after(30 s) · / zähler := 0.

Arten von Ereignissen

EreignisartSchreibweiseBedeutung
Signal- / AufrufereignistasteGedrückt, bezahlen(betrag)Meldung von außen oder Methodenaufruf
Zeitereignis (relativ)after(5 s), after(14 Tage)Die Zeit läuft ab dem Betreten des aktuellen Zustands. Verlässt das Objekt den Zustand vorher, verfällt das Zeitereignis.
Zeitereignis (absolut)at(23:00)zu einem Zeitpunkt
Änderungsereigniswhen(temperatur > 30)sobald eine Bedingung wahr wird (nicht im Belegsatz, aber gültiges UML)
AbschlussereignisTransition ohne Ereignis, ggf. nur mit Bedingungschaltet, sobald die do-Aktivität des Zustands fertig ist

Aktionen im Zustand: entry, do, exit

Eintrag im ZustandWird ausgeführt …
entry / aktionjedes Mal beim Betreten des Zustands – egal, über welche Transition. Spart, dieselbe Aktion an alle eingehenden Pfeile zu schreiben.
do / tätigkeitsolange sich das Objekt im Zustand befindet (länger dauernd, unterbrechbar, z. B. „do / fahren“).
exit / aktionjedes Mal beim Verlassen des Zustands.
ereignis / aktioninterne Transition: Das Ereignis wird behandelt, der Zustand aber nicht verlassen – entry und exit laufen nicht erneut.

Reihenfolge beim Schalten: exit-Aktion des alten Zustands → Aktion an der Transition → entry-Aktion des neuen Zustands → do-Aktivität startet. Eine Selbsttransition (Pfeil vom Zustand zu sich selbst) verlässt den Zustand und betritt ihn neu: exit und entry werden ausgeführt und ein laufendes after beginnt von vorn. Eine interne Transition tut das nicht.

Neu entry / Bestätigung mailen Bezahlt Versendet Storniert Zugestellt zahlungEingegangen[betrag >= summe]/ Rechnung erstellen zahlungEingegangen[betrag < summe]/ Rest anfordern paketUebergeben/ Sendungsnr. mailen after(14 Tage)/ Kunde informieren stornieren/ Geld erstatten zustellungBestätigt after(30 Tage)[keine Reklamation]
Abb. A-7: Zustandsdiagramm einer Online-Bestellung (Ereignis [Bedingung] / Aktion, after, entry, Selbsttransition)

So liest man Abb. A-7: Eine neue Bestellung ist im Zustand Neu; beim Betreten wird eine Bestätigung gemailt. Geht eine Zahlung ein, die die Summe deckt, wechselt die Bestellung nach Bezahlt und es wird eine Rechnung erstellt. Reicht der Betrag nicht, bleibt sie in Neu (Selbsttransition) und der Rest wird angefordert – Achtung: Weil es eine Selbsttransition ist, wird dabei auch die entry-Aktion erneut ausgeführt (zweite Bestätigungsmail). Ist das nicht gewollt, trägt man die Zeile als interne Transition in den Zustand ein. Vergehen 14 Tage im Zustand Neu ohne vollständige Zahlung, wird storniert.

Merke Gehen von einem Zustand mehrere Transitionen mit demselben Ereignis aus, müssen sich ihre Bedingungen gegenseitig ausschließen (sonst ist das Verhalten nicht eindeutig), z. B. [betrag >= summe] und [betrag < summe]. Ereignisse, für die es im aktuellen Zustand keine Transition gibt, werden ignoriert.

Zusammengesetzte Zustände (Unterzustände)

Gilt dieselbe Transition für viele Zustände (z. B. „Not-Aus“, „Störung“, „Abbrechen“), fasst man diese Zustände zu einem zusammengesetzten Zustand zusammen. Er enthält ein eigenes kleines Zustandsdiagramm mit Startzustand.

Aus Bereit entry / „Bitte wählen“ einschalten ausschalten Störung entry / Fehler anzeigen tankGefüllt Zubereitung getränkGewählt[Tasse erkannt] (fertig) wassertankLeer/ Zubereitung abbrechen Mahlen do / Bohnen mahlen Brühen do / Wasser pressen Ausgeben do / Kaffee ausgeben
Abb. A-8: Zusammengesetzter Zustand „Zubereitung“ mit Unterzuständen – Beispiel Kaffeevollautomat

Unterzustände stehen nicht im Belegsatz – wenn sie gefragt sind, wird die Aufgabe sie meist ausdrücklich verlangen („… übersichtlich mit Unterzuständen modellieren“).

So gehst du vor

  1. Objekt bestimmen („Zustände des Roboters“, „Status einer Buchung“). Nur dieses Objekt wird modelliert.
  2. Zustände sammeln: Formulierungen wie „wechselt in den Zustand …“, „ist dann …“, „befindet sich …“. Oft sind die Namen im Text vorgegeben (in Anführungszeichen) – genau diese Namen verwenden.
  3. Startzustand setzen („Nach dem Einschalten …“).
  4. Für jeden Zustand fragen: Welche Ereignisse lassen ihn verlassen? Welche Bedingung gilt dabei? Was wird dabei getan (Aktion an der Transition) – oder geschieht es bei jedem Betreten (entry)?
  5. Zeitangaben („nach 5 Sekunden“, „wenn innerhalb von 3 Tagen nicht …“) → after(…) am Ausgang des Zustands, in dem gewartet wird.
  6. Endzustand, falls das Objekt sein Leben beendet (ausschalten, löschen).
  7. Prüfen: Ist jeder Zustand erreichbar? Kommt man aus jedem Zustand (außer dem Endzustand) wieder heraus? Sind Bedingungen bei gleichem Ereignis eindeutig?
Typische Fallen
So wird es in der Prüfung gefragt W25 T2 A2 (25 P): Zustände eines Servierroboters aus einer Stichpunktliste; ein Teil des Diagramms (Startzustand, erster Zustand, eine Transition) war vorgegeben und musste ergänzt werden – mit entry-Aktion, Bedingungen und mehreren Ausgängen aus einem Zustand. W24 T1 A4a (15 P): Auslastungszustände (leer/niedrig/normal/hoch) mit Bedingungen an den Transitionen. S23 T1 A3c (10 P): Auslastungsampel. W22 T1 A4b (11 P): Zustände eines Raums. Muster: Die Zustandsnamen stehen im Text, die Kunst liegt in den Ereignissen und Bedingungen.

UML-05 · Use-Case-Diagramm Oft

Vorkommen: 4/9 · Prüfungen: W21, W23, S24, W25 · 6–18 Punkte, meist in Teil 1

Das Use-Case-Diagramm (Anwendungsfalldiagramm) zeigt, wer (Akteure) was (Anwendungsfälle) mit einem System tun kann. Es ist eine Außensicht ohne Reihenfolge und ohne technische Details – ideal für die Anforderungsanalyse und das Gespräch mit Auftraggebern.

Elemente

ElementDarstellungRegeln
AkteurStrichmännchen mit Name (Systeme alternativ als Rechteck mit «actor»)eine Rolle (nicht eine bestimmte Person): Kunde, Sachbearbeiter, aber auch externe Systeme (Zahlungsdienst, Sensor, Uhrzeit). Steht immer außerhalb der Systemgrenze.
Anwendungsfall (Use Case)Ellipse mit Nameeine Funktion, die für einen Akteur ein Ergebnis mit Nutzen liefert. Benennung: Substantiv + Verb („Ticket buchen“). Keine Bedienschritte („Button klicken“), keine Systeminterna („Datenbank aktualisieren“).
SystemgrenzeRechteck um alle Anwendungsfälle, Systemname obentrennt das System von seiner Umgebung. Steht nicht im IHK-Belegsatz, wird aber oft erwartet!
AssoziationLinie Akteur – AnwendungsfallDer Akteur ist am Anwendungsfall beteiligt. Nur zwischen Akteur und Anwendungsfall – nie zwischen zwei Akteuren oder zwei Anwendungsfällen.
«include»gestrichelter Pfeilsiehe Tabelle unten
«extend»gestrichelter Pfeil, optional mit Notiz Condition und extension pointsiehe Tabelle unten
GeneralisierungLinie mit hohlem Dreieckzwischen Akteuren: der speziellere Akteur darf alles, was der allgemeine darf, und mehr. Zwischen Anwendungsfällen: Spezialisierung eines allgemeinen Falls.

include oder extend?

«include» (Einbinden)«extend» (Erweitern)
BedeutungDer Basisfall enthält den eingebundenen Fall immer. Typisch: ein Teilablauf, den mehrere Anwendungsfälle gemeinsam nutzen.Der erweiternde Fall wird optional, nur unter einer Bedingung, in den Basisfall eingefügt.
Pfeilrichtungvom Basisfall zum eingebundenen Fallvom erweiternden Fall zum Basisfall
Ist der Basisfall ohne ihn vollständig?neinja
Zusatzangaben–Extension Point im Basisfall (wo wird erweitert?) und Condition in einer Notiz (wann?)
Beispiel (Abb. A-9)„Ticket buchen“ → „Bezahlen“„Gutschein einlösen“ → „Ticket buchen“
Merke: die Pfeilrichtung Der Pfeil zeigt immer von dem Fall, der „etwas will“: Bei include will der Basisfall den Teil haben → Pfeil weg vom Basisfall. Bei extend will die Erweiterung sich in den Basisfall einklinken → Pfeil hin zum Basisfall. Eselsbrücke: „include holt ab, extend dockt an“.
Kino-Buchungssystem Kunde Stammkunde Zahlungs-dienstleister Programm ansehen Ticket buchen extension points: Bezahlung Sitzplatz wählen Bezahlen Gutschein einlösen Bonuspunkteeinlösen «include» «include» «extend» Condition: {Gutscheincode eingegeben}extension point: Bezahlung
Abb. A-9: Use-Case-Diagramm mit Systemgrenze, include, extend und Generalisierung – Beispiel „Kino“

In Abb. A-9 ist „Bezahlen“ eine Teilfunktion, die bei jeder Buchung abläuft (include), „Gutschein einlösen“ wird nur unter der Bedingung „Gutscheincode eingegeben“ an der Stelle „Bezahlung“ eingefügt (extend). Ein Stammkunde kann alles, was ein Kunde kann, und zusätzlich Bonuspunkte einlösen (Generalisierung der Akteure: Dreieck zeigt zum allgemeineren Akteur). Der Zahlungsdienstleister ist ein externes System und steht als Akteur außerhalb der Systemgrenze.

Use-Case-Beschreibung (textuell)

Das Diagramm zeigt nur die Namen. Den Ablauf eines Anwendungsfalls beschreibt man in einer Schablone:

FeldBeispiel „Ticket buchen“ (Kino)
NameTicket buchen
AkteureKunde (primär), Zahlungsdienstleister (sekundär)
VorbedingungDie Vorstellung ist im Programm und nicht ausverkauft.
AuslöserKunde wählt eine Vorstellung aus.
Standardablauf1. Kunde wählt Anzahl der Tickets. 2. System zeigt den Saalplan. 3. Kunde wählt Sitzplätze. 4. Kunde bezahlt (include „Bezahlen“). 5. System versendet die Tickets per E-Mail.
Alternativen / Ausnahmen3a. Gewählte Plätze wurden inzwischen vergeben → Hinweis, zurück zu 2. 4a. Zahlung abgelehnt → Buchung wird verworfen.
NachbedingungPlätze sind verbindlich reserviert, Kunde hat die Tickets.

User Stories aus Anwendungsfällen ableiten

Eine User Story beschreibt eine Anforderung aus Sicht eines Nutzers im Satzschema „Als <Rolle> möchte ich <Funktion>, damit <Nutzen>.“ Rolle = Akteur, Funktion = Anwendungsfall, Nutzen = Ziel des Akteurs. Ergänzt wird sie um Akzeptanzkriterien (prüfbare Bedingungen, wann die Story erfüllt ist). Beispiel: „Als Stammkunde möchte ich Bonuspunkte beim Ticketkauf einlösen, damit ich für häufige Kinobesuche belohnt werde.“ Akzeptanzkriterien: Punktestand wird vor dem Bezahlen angezeigt; 100 Punkte entsprechen 1 €; der Preis kann nicht negativ werden. (Mehr zu User Stories und INVEST in Block 04.)

So gehst du vor

  1. Systemgrenze zeichnen und benennen.
  2. Akteure sammeln (Personengruppen und externe Systeme), links und rechts außerhalb platzieren. „… kann alles, was … kann, und zusätzlich …“ → Generalisierung.
  3. Anwendungsfälle sammeln: Was will ein Akteur erreichen? Substantiv + Verb.
  4. Assoziationen zwischen Akteuren und ihren Fällen.
  5. „immer“, „jedes Mal“, „wird geprüft“ bei mehreren Fällen → include. „optional“, „nur wenn“, „kann zusätzlich“ → extend mit Condition und Extension Point. „eine besondere Form von“ → Generalisierung von Anwendungsfällen.
  6. Kontrolle: Pfeilrichtungen, keine Akteure in der Systemgrenze, keine Bedienschritte.
Typische Fallen
So wird es in der Prüfung gefragt W25 T1 A2a (18 P): Use-Case-Diagramm aus einer Anforderungsliste mit Generalisierung von Akteuren sowie include und extend. W21 T1 A2a (14 P) und S24 T1 A3a (14 P): Anwendungsfälle mit include/extend aus einer Beschreibung. W23 T1 A2b (6 P): User Stories aus einem gegebenen Use-Case-Diagramm ableiten. Achte auf Formulierungen wie „unabhängig davon“ (eigener Anwendungsfall mit eigener Assoziation) und „nur wenn“ (extend).

UML-06 · Sequenzdiagramm Wahrscheinlich

Vorkommen: 3/9 · Prüfungen: S22, W23, S24 · 9–25 Punkte (W23 eine ganze Aufgabe)

Das Sequenzdiagramm zeigt, wie Objekte (oder ganze Systeme wie App, Server, Datenbank) durch Nachrichten zusammenarbeiten – in zeitlicher Reihenfolge von oben nach unten. Es eignet sich, um eine Methode, eine Schnittstelle (REST-Aufrufe) oder einen Anwendungsfall technisch zu beschreiben.

Elemente

ElementDarstellungBedeutung
LebenslinieKopf name:Klasse oder :Klasse, darunter gestrichelte Linieein beteiligtes Objekt; menschliche Akteure als Strichmännchen. Reihenfolge von links nach rechts nach erstem Auftreten.
Aktivierung (Ausführungsbalken)schmales Rechteck auf der LebenslinieZeitraum, in dem das Objekt eine Methode ausführt (optional, aber üblich).
synchrone Nachrichtdurchgezogen, gefüllte Spitze, Methodenname mit ParameternMethodenaufruf; der Sender wartet, bis der Empfänger fertig ist.
Antwortgestrichelt, offene Spitze, RückgabewertRückkehr aus einem synchronen Aufruf.
asynchrone Nachrichtdurchgezogen, offene SpitzeSender wartet nicht und arbeitet sofort weiter (Signal, Push-Nachricht, Nachricht in eine Warteschlange).
SelbstaufrufPfeil, der zur eigenen Lebenslinie zurückkehrt, zusätzlicher BalkenObjekt ruft eine eigene Methode auf.
Objekterzeugunggestrichelter Pfeil mit create (oder «create») auf den Kopf der neuen LebenslinieObjekt wird erst zu diesem Zeitpunkt erzeugt (new); der Kopf steht auf Höhe des Pfeils.
ObjektzerstörungX am Ende der LebenslinieObjekt wird gelöscht.
gefundene NachrichtPfeil, der vom Rand kommtAufruf von außen, dessen Sender nicht dargestellt wird.

Kombinierte Fragmente

OperatorBedeutungCode-Entsprechung
altAlternativen: mehrere Bereiche, getrennt durch gestrichelte Linien, jeder mit Bedingung; genau einer wird ausgeführt ([else] erlaubt).if … else if … else, switch
optoptional: ein Bereich mit Bedingung, wird nur ausgeführt, wenn sie gilt.if ohne else
loopWiederholung; loop(min, max) mit Bedingung, z. B. loop(1,10) [für jeden Treffer].for, while, for-each
parparallel: die Bereiche laufen gleichzeitig bzw. in beliebiger Reihenfolge.Threads, parallele Anfragen
breakwird der Bereich ausgeführt, endet das umgebende Fragment.break, return in einer Schleife
refVerweis auf ein anderes Sequenzdiagramm.Aufruf einer ausgelagerten Methode

Im IHK-Belegsatz ist nur alt mit [else] abgebildet – opt, loop und par musst du selbst kennen.

:Kunde :ShopApp :BestellService :Lager :MailService abschicken() bestellen(korb) loop [für jede Position] prüfeBestand(artNr, menge) ok alt [alle Artikel verfügbar] [else] create(korb) b:Bestellung speichern() sendeBestätigung(b) bestellNr "nicht lieferbar" Ergebnis anzeigen
Abb. A-10: Sequenzdiagramm – Beispiel „Bestellung abschicken“ (synchron, asynchron, Antwort, create, loop, alt)

Abb. A-10 gehört zu folgendem Code. Jede Methode, die aufgerufen wird, wird eine synchrone Nachricht an das Objekt, auf dem sie aufgerufen wird; jede Rückgabe eine Antwort:

public String bestellen(Warenkorb korb) {     // Aufruf aus der ShopApp
    boolean alleDa = true;
    for (Position p : korb.getPositionen()) { // loop [für jede Position]
        if (!lager.pruefeBestand(p.getArtNr(), p.getMenge())) {
            alleDa = false;
        }
    }
    if (alleDa) {                             // alt [alle Artikel verfügbar]
        Bestellung b = new Bestellung(korb);  // create
        b.speichern();                        // synchron mit Antwort
        mailService.sendeBestaetigung(b);     // asynchron (kein Warten)
        return b.getBestellNr();              // Antwort an die ShopApp
    }
    return "nicht lieferbar";                 // [else]
}
:WetterApp :WetterDienst :PollenDienst par holeWetter(ort) wetter holePollen(ort) pollenflug opt [Unwetterwarnung vorhanden] warnungAnzeigen()
Abb. A-11: Kombinierte Fragmente par (parallel) und opt (optional)

Quelltext → Sequenzdiagramm

Im CodeIm Sequenzdiagramm
x = obj.methode(a)synchrone Nachricht methode(a) zur Lebenslinie von obj, Antwort x zurück
this.methode() bzw. methode()Selbstaufruf
new Klasse(…)create-Pfeil auf den Kopf einer neuen Lebenslinie
if/elsealt mit zwei Bereichen; if ohne else → opt
for/whileloop mit Bedingung
Aufruf über Warteschlange, Event, Pushasynchrone Nachricht
Getter auf ein Objektdarf bei Platzmangel weggelassen werden, wenn die Aufgabe es erlaubt – sonst ebenfalls als Nachricht

So gehst du vor

  1. Lebenslinien festlegen (vorgegeben? dann genau diese) – der Auslöser ganz links.
  2. Den Ablauf Schritt für Schritt von oben nach unten eintragen: jede Nachricht mit Namen und Parametern, jede Antwort mit Rückgabewert.
  3. Für jeden synchronen Aufruf einen Aktivierungsbalken beim Empfänger, der mit der Antwort endet.
  4. Bedingungen und Wiederholungen mit Fragmenten umrahmen, Bedingung in eckigen Klammern an den Anfang des Bereichs.
  5. Kontrolle: Gefüllte Spitze nur bei synchron; Antworten gestrichelt; kein Aufruf an ein Objekt vor seinem create.
Typische Fallen
So wird es in der Prüfung gefragt W23 T2 A1 (25 P): Sequenzdiagramm zwischen Oberfläche, Steuerung und Rechenkomponente mit alt – eine ganze Aufgabe. S24 T1 A2e (11 P): App, Web-Service und Datenbank mit alt-Fragment im Kontext einer REST-Schnittstelle. S22 T1 A3ca (9 P): Ablauf des Beobachter-Musters (Subjekt benachrichtigt in einer Schleife alle angemeldeten Beobachter: loop [für jeden Beobachter] aktualisieren()). Häufig sind die Lebenslinien vorgegeben.

UML-07 · Struktogramm / Programmablaufplan Sonstige

Vorkommen: 2/9 (als eigene Teilaufgabe) · Prüfungen: W21, S23 · bis 6 Punkte; außerdem ist die Darstellung von Algorithmen „in Pseudocode, als Struktogramm oder PAP“ oft freigestellt (S22, W22)

Struktogramme (Nassi-Shneiderman-Diagramme, DIN 66261) und Programmablaufpläne (PAP, DIN 66001) sind keine UML-Diagramme, sondern ältere Notationen für Algorithmen. In der AP2 kommen sie vor, wenn ein Algorithmus gelesen, korrigiert oder umgewandelt werden soll. Die Symbole stehen im Belegsatz (Teil B).

Bausteine im Vergleich

StrukturPseudocode (IHK-Stil)StruktogrammPAP
Anweisung / Sequenzx := 5Rechteck; Sequenz = Rechtecke untereinanderRechteck, verbunden durch Pfeile
Verzweigungwenn … dann … sonst … Ende wennDreieck-Kopf mit Bedingung, links „ja“, rechts „nein“; leerer Zweig mit ∅Raute mit zwei Ausgängen „ja“/„nein“
FallauswahlKette von wenn … sonst wenn … (bzw. switch in Java)Kopf mit mehreren Spalten, letzte Spalte „sonst“mehrere Rauten oder eine Raute mit mehreren Ausgängen
kopfgesteuerte Schleifesolange … Ende solangeBedingung oben, Rumpf eingerücktRaute vor dem Rumpf, Rücksprung davor
fußgesteuerte Schleifewiederhole … solange …Rumpf eingerückt, Bedingung untenRaute nach dem Rumpf, Rücksprung an den Anfang
Zählschleifezähle i von 0 bis n-1 … Ende zählewie kopfgesteuert, Kopf „zähle i von … bis …“Initialisierung, Raute i <= n-1, Rumpf, i := i + 1, Rücksprung
Unterprogrammberechne(x)Rechteck mit doppelten senkrechten SeitenlinienRechteck mit doppelten Seitenlinien

Kopf- oder fußgesteuert? Die kopfgesteuerte Schleife prüft vor dem ersten Durchlauf – der Rumpf läuft eventuell gar nicht. Die fußgesteuerte Schleife läuft mindestens einmal. Das ist ein beliebter Fehler: Wird eine fußgesteuerte Schleife verwendet, obwohl die Bedingung schon vor dem ersten Durchlauf falsch sein kann, passiert ein Schritt zu viel. Achtung bei „wiederhole … bis …“ (Abbruchbedingung) gegenüber „wiederhole … solange …“ (Laufbedingung) – die Bedingungen sind genau entgegengesetzt.

geheim := zufallszahl(1, 100) versuche := 0 Eingabe tipp versuche := versuche + 1 tipp < geheim ja nein Ausgabe "zu klein" tipp > geheim ja nein Ausgabe "zu groß" Ausgabe "richtig" solange tipp <> geheim Ausgabe versuche
Abb. A-12: Struktogramm „Zahlenraten“ (fußgesteuerte Schleife, verschachtelte Verzweigung)
Start geheim := zufallszahl(1, 100) versuche := 0 Eingabe tipp versuche := versuche + 1 tipp < geheim ja Ausgabe "zu klein" tipp > geheim nein ja Ausgabe "zu groß" nein Ausgabe "richtig" tipp <> geheim ja nein Ausgabe versuche Ende
Abb. A-13: Derselbe Algorithmus als Programmablaufplan (PAP)

Abb. A-12 und A-13 zeigen denselben Algorithmus. Im Struktogramm gibt es keine Pfeile und keine Sprünge – jede Struktur hat genau einen Eingang (oben) und einen Ausgang (unten). Der PAP ist freier, die Schleife entsteht durch einen Rücksprung. Deshalb gelten Struktogramme als „strukturierter“, PAPs als anschaulicher, aber fehleranfälliger.

StruktogrammPAP
Vorteileerzwingt strukturierte Programmierung (keine Sprünge), kompakt, direkt in Code übertragbarleicht verständlich, Ablauf durch Pfeile sofort sichtbar, auch für Laien
NachteileÄnderungen aufwendig (neu zeichnen), tiefe Verschachtelung wird schmalverleitet zu unstrukturierten Sprüngen („Spaghetti“), großer Platzbedarf, Schleifen nicht direkt erkennbar

So gehst du vor: Pseudocode → Struktogramm

  1. Äußeres Rechteck in voller Breite; Funktionsname mit Parametern darüber schreiben.
  2. Pseudocode Zeile für Zeile übertragen: jede Anweisung ein Rechteck, jede Struktur das passende Symbol; Inneres einer Schleife/Verzweigung wird darin verschachtelt.
  3. Bei Verzweigungen die Spalten so breit wählen, dass der Text passt; leere Zweige mit ∅ kennzeichnen.
  4. rückgabe bzw. Ausgabe als eigene Anweisung am Ende (oder in den Zweigen).

Fehler finden mit dem Schreibtischtest

Für einen Testfall mit bekanntem Ergebnis wird eine Tabelle mit einer Spalte je Variable angelegt; nach jedem Schritt (oder Schleifendurchlauf) wird der aktuelle Wert eingetragen. Weicht das Ergebnis vom erwarteten ab, findet man die Stelle. Typische eingebaute Fehler: Initialisierung an der falschen Stelle (innerhalb statt vor der Schleife), Schleifengrenzen (eine Iteration zu viel/zu wenig), vertauschte Zweige einer Verzweigung, < statt <=, falsche Schleifenart.

Typische Fallen
So wird es in der Prüfung gefragt W21 T2 A1c (6 P): In einem Struktogramm zur Passwortprüfung waren drei Fehler zu finden und zu korrigieren. S23 T1 A2bc: Algorithmus wahlweise als Struktogramm oder Pseudocode. In S22 und W22 durfte der große Algorithmus in Teil 2 als Pseudocode, Struktogramm oder PAP (S22 zusätzlich als Aktivitätsdiagramm) abgegeben werden – die Belegsätze enthielten dafür die Symbole.

B · Belegsatz

Enthält nur, was dir auch die IHK beilegen würde: die Notationshilfen (UML wie in den Belegsätzen S24/W25, Struktogramm wie W22, PAP wie S22, Pseudocode-Konventionen wie S24) und die Anlagen zur Ausgangssituation. Keine Erklärungen.

UML-Notation

Klassendiagramm Klasse Klasse attribut1 attribut2 methode1() methode2() Klasse {abstract} abstrakteMethode() methode2() «interface» Schnittstelle methode1() methode2() Notiz Syntax für Attribute: Sichtbarkeit Attributname : Typ {Eigenschaften} Syntax für Methoden: Sichtbarkeit Methodenname(parameter1 : Typ, …) : Rückgabetyp {Eigenschaften} Sichtbarkeit: # protected ~ package + public - private Eigenschaften: {static, final, …} Klasse1 Klasse2 Vererbung Klasse1 Klasse2 Assoziation Klasse1 Klasse2 Multiplizität/ Kardinalität 1 * Klasse1 Klasse2 gerichtete Assoziation Ganzes Teil Aggregation Ganzes Existenz-abhängiges Teil Komposition Klasse «interface» Schnittstelle Implementierung
Belegsatz 1: UML-Klassendiagramm
Anwendungsfalldiagramm Akteur Akteur Akteur Anwendungsfall SekundärerAnwendungsfall «include» Anwendungsfall ext. point SpezialisierterAnwendungsfall SekundärerAnwendungsfall «extend» Condition:{bedingung}extension point:ext. point
Belegsatz 2: UML-Anwendungsfalldiagramm (Use-Case-Diagramm)
Aktivitätsdiagramm Startknoten Endknoten Ablaufende Schritt 1 Schritt 2 Schritt 3 Ablaufende: beendet aktuellen Fluss Endknoten: beendet alle Aktivitäten Schwimmbahn 1 Schwimmbahn 2 Schritt 1 Schritt 2 Schritt 3 Teilung(Splitting) Synchronisation(Und) Teilung undSynchronisation Schritt 1 A A Schritt 2 Konnektor [x<0] [x>0] [x=0] Entscheidung Zusammenführung(Oder) [x<0] [x>=0] Entscheidung undZusammenführung
Belegsatz 3: UML-Aktivitätsdiagramm
Sequenzdiagramm x:Klasse1 y:Klasse2 Nachricht() alt [i>0] [else] nachricht1() nachricht2() 17 Selbstaufruf Lebenslinie Ausführung (opt.) :KlasseX create Objekt-Konstruktion Objekt-Destruktion synchrone Nachricht Antwort asynchrone Nachricht synchrone Nachricht: Der Sender erwartet vom Empfängerein Beenden des Aufrufs,Rückgabewert (z. B. 17) möglich asynchrone Nachricht: Der Sender erwartet vomEmpfänger keine Antwort
Belegsatz 4: UML-Sequenzdiagramm
Zustandsdiagramm Zustand Zustand entry/aktion do/aktion exit/aktion ereignis/aktion operation[bedingung]/verhalten Auslöser(Trigger) after(Zeitdauer)
Belegsatz 5: UML-Zustandsdiagramm

Struktogramm und Programmablaufplan

Struktogramm (DIN 66261) Anweisung Verarbeitungsanweisung Anweisung Anweisung Sequenz (Folgestruktur), Anweisungen Bedingung ja nein Anweisungen Anweisungen Bedingte Verzweigung(einseitige/zweiseitige Auswahlstruktur) solange Bedingung erfüllt Anweisungen Anweisungen solange Bedingung erfüllt Wiederholstruktur (Schleife):links kopfgesteuert,rechts fußgesteuert zähle i von Startwert bis Endwert(Schrittweite) Anweisungen Zählschleife Auswahlkriterium Fall 1 Anweisungen Fall 2 Anweisungen Fall 3 Anweisungen sonst Anweisungen Fallauswahl(Mehrfachverzweigung) Unterprogramm 1 Prozedur-Aufruf Unterprogramm(-aufruf) Wertzuweisungen werden durch := gekennzeichnet.
Belegsatz 6: Struktogramm nach DIN 66261
Programmablaufplan (DIN 66001) Grenzstelle Beginn oder Ende des Ablaufs, Text z. B. „Start“, „Ende“,bei Unterprogrammen Name bzw. „Rückgabe“ Operation Verarbeitung: Zuweisungen, einzelne Befehle oder kurzesprachliche Beschreibungen Unterprogramm Aufruf eines Unterprogramms, Text: dessen Name Übergangsstelle Verbindet Stellen des Plans ohne lange Linien; zusammen-gehörende Übergangsstellen tragen dieselbe Bezeichnung Verzweigung Bedingung im Symbol; an den Ausgängen steht der Wert,bei dem der jeweilige Weg genommen wird (z. B. ja/nein) Ablauflinie Verbindung der Symbole, Pfeil zeigt die Ablaufrichtung Zusammenführung Zusammenführen von Ablauflinien (mit oder ohne Pfeil) Kommentar Kommentar Erläuterung, über gestrichelte Linie angebunden
Belegsatz 7: Programmablaufplan (PAP) nach DIN 66001

Pseudocode, prozedurale Programmierung

PseudocodeBeschreibung
wenn [ Bedingung ] dann
   [ Anweisung ]
sonst
   [ Anweisung ]
Ende wenn
Verzweigung
zähle [ Variable ] von [ Startwert ] bis [ Endwert ]
   [ Schleifeninhalt ]
Ende zähle
Zählschleife (Iteration)
solange [ Bedingung ]
   [ Schleifeninhalt ]
Ende solange
Kopfgesteuerte Schleife
wiederhole
   [ Schleifeninhalt ]
solange [ Bedingung ]
Fußgesteuerte Schleife
:=
Zuweisung
=; <; >; <=; >=; <>
Vergleiche
integer
double
string
boolean
array
Datentypen

Anlage 1 · Ausgangssituation

Die Aufgaben dieses Blocks beziehen sich auf die folgende Ausgangssituation:

Die Stadtbibliothek Wellingen (Zentralbibliothek und zwei Stadtteilbüchereien, rund 180.000 Medien, 14.000 aktive Leserinnen und Leser) erneuert ihre IT. Das bisherige Bibliothekssystem wird durch das neue System „BiblioNet“ abgelöst. Dazu gehören:

Sie sind Auszubildende/r zum Fachinformatiker/zur Fachinformatikerin Anwendungsentwicklung bei der Brückner & Yildiz Software GmbH, die BiblioNet entwickelt. Sie unterstützen das Projektteam bei der Modellierung mit UML. Alle Diagramme werden vor der Implementierung mit der Bibliotheksleitung abgestimmt.

Ausleihregeln (Auszug):

Anlage 2 · Abholstation im Foyer

Die Abholstation besteht aus 40 Fächern in zwei Größen, einem Bedienterminal mit Touchdisplay und einer Fachsteuerung, die Türschlösser und Sensoren jedes Fachs ansteuert. Bedienterminal und Fachsteuerung kommunizieren über den BiblioNet-Server.

  1. Leser können bei einer Vormerkung in der App „Abholung an der Abholstation“ wählen. Sobald das vorgemerkte Medium verfügbar ist, ordnet BiblioNet die Vormerkung einem freien Fach passender Größe zu; das Fach ist dann reserviert.
  2. Das Thekenpersonal legt die Medien in das reservierte Fach und schließt die Tür. Meldet der Türsensor „Tür geschlossen“ und die Gewichtssensorik ein belegtes Fach, gilt das Fach als belegt. Jedes Mal, wenn ein Fach belegt wird, erhält der Leser per Push-Nachricht einen sechsstelligen Abholcode.
  3. Der Leser gibt den Abholcode am Bedienterminal ein. Das Terminal lässt den Code vom BiblioNet-Server prüfen. Ist der Code gültig, entriegelt die Fachsteuerung die Tür und die Medien werden auf das Leserkonto verbucht; das Fach ist dann geöffnet. Bei einem ungültigen Code zeigt das Terminal einen Hinweis an.
  4. Nach der Entnahme schließt der Leser die Tür; das Fach ist wieder frei. Auf Wunsch druckt das Terminal anschließend einen Abholbeleg mit den entnommenen Medien.
  5. Die Abholfrist beträgt drei Tage. Leser können sie in der App einmalig um zwei Tage verlängern, solange die Medien im Fach liegen.
  6. Ist die Abholfrist abgelaufen, wird das Personal benachrichtigt. Es öffnet das Fach mit der Personalkarte und entnimmt die Medien; danach ist das Fach wieder frei und die Vormerkung wird gelöscht.
  7. Meldet ein Sensor eines freien Fachs einen Fehler, ist das Fach außer Betrieb, bis ein Techniker die Reparatur am Terminal bestätigt; danach ist es wieder frei.
  8. Ein freies Fach kann vom Personal dauerhaft stillgelegt werden.

Anlage 3 · Interview zur Fernleihe (mit Frau Celik, Leiterin der Fernleihstelle)

Sie: Wie soll eine Fernleihe künftig ablaufen?

Frau Celik: Bisher füllen die Leser einen Papierzettel aus. Künftig sollen sie die Fernleihe direkt in der App bestellen. BiblioNet prüft dann zuerst automatisch, ob das Leserkonto gesperrt ist. Bei einem gesperrten Konto bekommt der Leser in der App eine Ablehnung angezeigt, und die Sache ist erledigt.

Sie: Und wenn das Konto in Ordnung ist?

Frau Celik: Dann prüft BiblioNet, ob wir das Medium selbst im Bestand haben – das kommt öfter vor, als man denkt. In diesem Fall legt BiblioNet automatisch eine Vormerkung an und informiert den Leser darüber. Eine Fernleihe ist dann nicht nötig, und der Vorgang ist für uns beendet.

Sie: Und wenn Sie das Medium nicht haben?

Frau Celik: Dann passiert zweierlei gleichzeitig: BiblioNet bucht die Fernleihgebühr auf das Leserkonto, und ich prüfe die Bestellung auf Vollständigkeit und wähle eine geeignete Partnerbibliothek aus. Erst wenn beides erledigt ist, sende ich die Bestellung ab.

Sie: Wie geht es bei der Partnerbibliothek weiter?

Frau Celik: Die Partnerbibliothek prüft, ob sie das Medium verleihen kann. Wenn nicht, wähle ich die nächste Partnerbibliothek aus unserer Liste aus und sende die Bestellung dorthin – das kann sich ein paarmal wiederholen. Gibt es keine weitere Partnerbibliothek mehr, storniere ich die Bestellung. BiblioNet erstattet dann die Gebühr und benachrichtigt den Leser; damit ist der Vorgang beendet.

Sie: Und wenn das Medium verliehen werden kann?

Frau Celik: Dann verschickt die Partnerbibliothek es per Post an uns. Sobald es da ist, erfasse ich es in BiblioNet. Anschließend laufen wieder zwei Dinge parallel: BiblioNet schickt dem Leser eine Push-Nachricht, und ich stelle das Medium ins Abholregal. Wenn beides erledigt ist und der Leser das Medium abgeholt hat, ist der Vorgang für uns abgeschlossen. Die Rückgabe an die Partnerbibliothek lassen wir erst einmal weg.

Anlage 4 · Klassendiagramm BiblioNet (Auszug)

Leser - leserNr : int - name : String - geburtsdatum : Date - gebuehrenSaldo : double + istGesperrt() : boolean + getAlter() : int Ausleihe - ausleihdatum : Date - faelligAm : Date - verlaengerungen : int - MAX_VERLAENGERUNGEN : int = 2 + verlaengern() : boolean + istUeberfaellig(heute : Date) : boolean Exemplar - barcode : String - standort : String - zustand : String + istVerfuegbar() : boolean Vormerkung - datum : Date - position : int Medium {abstract} # titel : String # erscheinungsjahr : int + getLeihfrist() : int «interface» Gebuehrenpflichtig + berechneGebuehr(tage : int) : double Buch - isbn : String - seiten : int + getLeihfrist() : int Film - fsk : int - laufzeit : int + getLeihfrist() : int + berechneGebuehr(tage : int) : double 0..1 hauptkonto 0..4 mitleser 1 0..* 0..* 1 1 0..* 0..* 1 1..* 1
Anlage 4: Klassendiagramm BiblioNet (Auszug)

Anlage 5 · Quelltext der Steuerung für die Sortieranlage (Java, Auszug)

public interface Wartbar {
    void warten();
    int getBetriebsstunden();
}

public abstract class Foerdermodul {
    protected int modulNr;
    private boolean aktiv;

    public Foerdermodul(int modulNr) {
        this.modulNr = modulNr;
    }
    public abstract void starten();
    public boolean isAktiv() {
        return aktiv;
    }
    protected void setAktiv(boolean aktiv) {
        this.aktiv = aktiv;
    }
}

public class Foerderband extends Foerdermodul
                         implements Wartbar {
    private double geschwindigkeit;  // m/s
    private int betriebsstunden;

    public Foerderband(int modulNr,
                       double geschwindigkeit) {
        super(modulNr);
        this.geschwindigkeit = geschwindigkeit;
    }
    public void starten() {
        setAktiv(true);
    }
    public void warten() {
        betriebsstunden = 0;
    }
    public int getBetriebsstunden() {
        return betriebsstunden;
    }
}
public class Kiste {
    private int nummer;
    private int kapazitaet;
    private List<String> barcodes;

    public Kiste(int nummer, int kapazitaet) {
        this.nummer = nummer;
        this.kapazitaet = kapazitaet;
        this.barcodes = new ArrayList<>();
    }
    public boolean istVoll() {
        return barcodes.size() >= kapazitaet;
    }
    public void ablegen(String barcode) {
        barcodes.add(barcode);
    }
    void leeren() {
        barcodes.clear();
    }
}

public class Sortieranlage {
    private static int anzahlAnlagen = 0;
    private String standort;
    private Foerderband band;
    private List<Kiste> kisten;

    public Sortieranlage(String standort,
                         Foerderband band) {
        this.standort = standort;
        this.band = band;
        this.kisten = new ArrayList<>();
        for (int i = 1; i <= 6; i++) {
            kisten.add(new Kiste(i, 40));
        }
        anzahlAnlagen++;
    }
    public int sortiere(String barcode,
                        int zielKiste) {
        Kiste k = kisten.get(zielKiste - 1);
        k.ablegen(barcode);
        if (k.istVoll()) {
            return -1;
        }
        return zielKiste;
    }
    public static int getAnzahlAnlagen() {
        return anzahlAnlagen;
    }
}

Das Förderband wird beim Aufbau der Anlage außerhalb der Klasse Sortieranlage erzeugt und dem Konstruktor übergeben; es kann bei einem Umbau an eine andere Sortieranlage übergeben werden.

Anlage 6 · Veranstaltungsangebot (Anforderungen)

Die Stadtbibliothek möchte ihr Veranstaltungsangebot in BiblioNet verwalten. Folgende Sachverhalte sind zu modellieren:

Anlage 7 · Steuerung des Rückgabeautomaten

Anlage 8 · Anforderungen an die App „LeseLink“ (Ergebnis eines Workshops)

  1. Jeder Besucher kann – auch ohne Bibliotheksausweis und ohne Anmeldung – den Katalog durchsuchen. Eine besondere Form der Katalogsuche ist die Suche per Barcode-Scan: Der Barcode (ISBN) eines Buches wird mit der Handykamera gescannt und der Titel im Katalog gesucht.
  2. Leserinnen und Leser sind Besucher mit Bibliotheksausweis. Sie können alles, was Besucher können, und zusätzlich Medien vormerken, Ausleihen verlängern, Gebühren bezahlen und Fernleihen bestellen.
  3. Beim Vormerken und beim Verlängern wird immer geprüft, ob das Leserkonto gesperrt ist.
  4. Ist beim Verlängern das Konto wegen offener Gebühren gesperrt, kann der Leser direkt aus der Verlängerung heraus die Gebühren bezahlen (Erweiterungspunkt „Kontosperre“). Unabhängig davon können Gebühren jederzeit bezahlt werden. Die Zahlung wickelt der externe Zahlungsdienstleister PayFix ab.
  5. Fernleihbestellungen werden an den Verbundkatalog der Partnerbibliotheken (externes System) übermittelt.
  6. Das Thekenpersonal kann über die Personal-Oberfläche Leserkonten anlegen und Gebühren erlassen. Die Mitarbeitenden der Fernleihstelle können alles, was das Thekenpersonal kann, und bearbeiten zusätzlich eingehende Fernleihbestellungen.
  7. Die Anmeldung an der App wird nicht als eigener Anwendungsfall modelliert.

Anlage 9 · Quelltext des Selbstverbuchungsterminals (Java, Auszug)

public class Selbstverbucher {
    private BiblioNetClient server;
    private Drucker drucker;

    public Selbstverbucher(BiblioNetClient server, Drucker drucker) {
        this.server = server;
        this.drucker = drucker;
    }

    public void ausleihen(String leserNr, List<String> barcodes) {
        Leser leser = server.ladeLeser(leserNr);
        if (leser.istGesperrt()) {
            zeigeHinweis("Konto gesperrt - bitte an die Theke wenden");
        } else {
            Quittung q = new Quittung(leserNr);
            for (String code : barcodes) {
                LocalDate faellig = server.verbuche(leserNr, code);
                q.hinzufuegen(code, faellig);
            }
            drucker.drucke(q);
        }
    }

    private void zeigeHinweis(String text) {
        // Ausgabe auf dem Display des Terminals
    }
}

Anlage 10 · Ablauf einer Katalogsuche in LeseLink (technische Beschreibung)

  1. Der Leser gibt einen Suchbegriff ein und tippt auf „Suchen“ (suchen(begriff)).
  2. Die App ruft beim KatalogService suche(begriff) auf und wartet auf das Ergebnis.
  3. Der KatalogService fragt zuerst den Cache mit holeTreffer(begriff). Der Cache liefert die gespeicherte Trefferliste oder null.
  4. Liefert der Cache eine Trefferliste, wird diese verwendet.
  5. Liefert der Cache null, fragt der KatalogService die Datenbank mit sucheTitel(begriff) und erhält eine Trefferliste. Anschließend legt er diese mit speichere(begriff, treffer) im Cache ab, ohne auf eine Bestätigung zu warten.
  6. Ist die Trefferliste leer, sucht der KatalogService zusätzlich im Verbundkatalog mit sucheExtern(begriff) und erhält externeTreffer.
  7. Der KatalogService gibt die Trefferliste an die App zurück.
  8. Für jeden angezeigten Treffer – höchstens 10 – fragt die App beim KatalogService verfuegbarkeit(medienNr) ab. Der KatalogService ermittelt dazu mit zaehleFreieExemplare(medienNr) die Anzahl freier Exemplare aus der Datenbank und gibt den Status (verfügbar/ausgeliehen) zurück.
  9. Zum Schluss zeigt die App die Trefferliste mit dem Verfügbarkeitsstatus an (anzeigen(trefferliste)).

C · Aufgaben

Alle Aufgaben beziehen sich auf die Ausgangssituation in Anlage 1. Diagramme sind in UML-Notation (bzw. als Struktogramm/PAP nach DIN) zu zeichnen; nutzen Sie den Belegsatz. Wo eine Zeichenfläche vorgegeben ist, zeichnen Sie direkt hinein.

UML-01 · Verhaltensdiagramme allgemein / Diagrammwahl

Aufgabe UML-01.1 ★☆☆ Grundlagen 5 Punkte

Im Projekt BiblioNet sollen verschiedene Sachverhalte mit UML dokumentiert werden.

2 Pa) Kreuzen Sie an, ob es sich um ein Struktur- oder ein Verhaltensdiagramm handelt.
DiagrammStrukturdiagrammVerhaltensdiagramm
Klassendiagramm
Aktivitätsdiagramm
Objektdiagramm
Zustandsdiagramm
Sequenzdiagramm
Komponentendiagramm
Anwendungsfalldiagramm
Verteilungsdiagramm
3 Pb) Nennen Sie jeweils das am besten geeignete UML-Diagramm.
Nr.SachverhaltDiagramm
1Übersicht, welche Funktionen die App LeseLink für Leser und für das Personal bereitstellt
2Zustände, die ein Leserkonto annehmen kann, und die Ereignisse, die einen Wechsel auslösen
3Ablauf einer Fernleihbestellung über die beteiligten Stellen hinweg
4zeitliche Reihenfolge der Methodenaufrufe zwischen App, KatalogService und Datenbank bei einer Suche
5Klassen der Anwendung mit Attributen, Methoden und Beziehungen
6auf welchen Geräten (Server, Terminal, Smartphone) welche Softwarekomponenten installiert sind
Aufgabe UML-01.2 ★★☆ Anwendung 10 Punkte

Ein Kollege hat für die Selbstverbuchungsterminals das folgende Aktivitätsdiagramm entworfen. Beachten Sie die Ausleihregeln in Anlage 1.

Bibliotheksausweis scannen Leserkonto prüfen Hinweis „Kontogesperrt“ anzeigen [offene Gebühren > 10 €] [offene Gebühren < 10 €] Medium auflegen RFID-Etikett lesen [für andere Person vorgemerkt] [nicht vorgemerkt] Ausleihe ablehnen Ausleihe verbuchen Diebstahlsicherungdeaktivieren Rückgabedatumanzeigen weitere Medien? [ja] Quittung drucken [nein]
Abb. C-1: Aktivitätsdiagramm „Ausleihe am Selbstverbuchungsterminal“ (Entwurf eines Kollegen)
2 Pa) Beschreiben Sie, welchen Ablauf das Diagramm zwischen „Ausleihe verbuchen“ und dem Ende des Vorgangs darstellen soll.
8 Pb) Das Diagramm enthält vier Fehler. Beschreiben Sie jeden Fehler und seine Auswirkung und geben Sie an, wie er zu korrigieren ist.
Nr.FehlerAuswirkungKorrektur
1
2
3
4

Angelehnt an: typische Fehlerfragen zu Aktivitätsdiagrammen; Lesen eines gegebenen Diagramms wie W23 Teil 1, Aufgabe 2b

Aufgabe UML-01.3 ★★★ Prüfungsniveau 20 Punkte

Für die neue Abholstation im Foyer (Anlage 2) soll die Steuerungssoftware entwickelt werden. Die Projektleitung möchte vorab verschiedene Aspekte mit UML dokumentieren lassen.

6 Pa) Nennen Sie für jeden der vier Aspekte das geeignete UML-Diagramm und begründen Sie Ihre Wahl.
AspektDiagrammBegründung
A1: Die Entwickler der Terminal-Software wollen nachvollziehen, welche Aufrufe zwischen Bedienterminal, BiblioNet-Server und Fachsteuerung beim Öffnen eines Fachs in welcher Reihenfolge erfolgen.
A2: Für die Steuerungssoftware muss festgelegt werden, wie ein einzelnes Fach auf Sensormeldungen, Codeeingaben und Fristabläufe reagiert.
A3: Die Bibliotheksleitung möchte in einer Übersicht sehen, welche Personengruppen und Systeme welche Funktionen der Abholstation nutzen.
A4: Für die Schulung des Thekenpersonals soll der Ablauf von der Rückgabe eines vorgemerkten Mediums bis zur Abholung durch den Leser mit allen Zuständigkeiten dargestellt werden.
10 Pb) Erstellen Sie für Aspekt A2 das in a) gewählte Diagramm. Berücksichtigen Sie alle Angaben aus Anlage 2.
4 Pc) Ein Kollege schlägt vor, für Aspekt A2 ein Aktivitätsdiagramm zu verwenden. Erläutern Sie zwei Gründe, warum Ihr Diagramm für diesen Zweck besser geeignet ist.

Angelehnt an: W25 Teil 2, Aufgabe 2 und W24 Teil 1, Aufgabe 4a (Zustände aus einer Beschreibung ableiten)

UML-02 · Aktivitätsdiagramm

Aufgabe UML-02.1 ★☆☆ Grundlagen 6 Punkte

Das folgende Aktivitätsdiagramm zeigt den Ablauf, wenn eine Person an der Theke einen Leserausweis beantragt.

Leser Thekenpersonal BiblioNet Anmeldeformular ausfüllen Personalausweis prüfen Einverständnis derEltern vorlegen [unter 18 Jahre] [ab 18 Jahre] Leserkonto anlegen Ausweis drucken Zugangsdaten fürdie App senden Ausweis aushändigen 1 2 3 4 5 6 7 8
Abb. C-2: Aktivitätsdiagramm „Leserausweis ausstellen“
4 Pa) Benennen Sie die mit ① bis ⑧ gekennzeichneten Elemente.
Nr.BezeichnungNr.Bezeichnung
①⑤
②⑥
③⑦
④⑧
2 Pb) Erläutern Sie, wann die Aktion „Ausweis aushändigen“ ausgeführt wird. Gehen Sie dabei auf die Bedeutung von Element ⑦ ein.
Aufgabe UML-02.2 ★★☆ Anwendung 10 Punkte

Der Ablauf am Rückgabeautomaten soll als UML-Aktivitätsdiagramm (ohne Partitionen) dokumentiert werden. Die Fachabteilung beschreibt ihn so:

Der Leser legt ein Medium in die Einwurföffnung. Der Automat liest das RFID-Etikett. Kann das Etikett nicht gelesen werden, gibt der Automat das Medium wieder aus und zeigt den Hinweis „Bitte an der Theke abgeben“ an. Andernfalls bucht der Automat die Rückgabe im BiblioNet und transportiert gleichzeitig das Medium über das Förderband zur Sortieranlage. Sind beide Schritte abgeschlossen, zeigt das Display die erfolgreiche Rückgabe an. In beiden Fällen fragt der Automat anschließend, ob ein weiteres Medium zurückgegeben werden soll. Wenn ja, wiederholt sich der Ablauf ab dem Einlegen eines Mediums. Wenn nein, druckt der Automat eine Quittung, sofern der Leser dies gewünscht hat. Danach endet der Vorgang.

10 PErstellen Sie das Aktivitätsdiagramm.

Angelehnt an: W23 Teil 1, Aufgabe 2c und S26 Teil 1, Aufgabe 2a (Ablauf mit Verzweigung und Parallelität)

Aufgabe UML-02.3 ★★★ Prüfungsniveau 25 Punkte

Die Fernleihe soll mit BiblioNet digitalisiert werden. Sie haben dazu ein Interview mit Frau Celik, der Leiterin der Fernleihstelle, geführt (Anlage 3).

25 PErstellen Sie auf Grundlage des Interviews ein UML-Aktivitätsdiagramm mit den Partitionen „Leser (App)“, „BiblioNet“, „Fernleihstelle“ und „Partnerbibliothek“. Verwenden Sie die Vorlage.
Leser (App) BiblioNet Fernleihstelle Partnerbibliothek
Abb. C-3: Vorlage zu Aufgabe UML-02.3 (Startknoten vorgegeben)

Angelehnt an: S23 Teil 2, Aufgabe 1 (Aktivitätsdiagramm mit vier Partitionen aus einem Interview, 25 Punkte)

UML-03 · Klassendiagramm

Aufgabe UML-03.1 ★☆☆ Grundlagen 6 Punkte

Gegeben ist der Auszug aus dem Klassendiagramm von BiblioNet in Anlage 4.

3 Pa) Deuten Sie die Multiplizitäten der folgenden Beziehungen jeweils in beide Richtungen: (1) Leser – Ausleihe, (2) Medium – Exemplar, (3) die Beziehung der Klasse Leser zu sich selbst (Rollen hauptkonto und mitleser).
3 Pb) Erläutern Sie die Bedeutung (1) des Zeichens # vor dem Attribut titel, (2) der Unterstreichung des Attributs MAX_VERLAENGERUNGEN und (3) der kursiven Schreibweise der Klasse Medium und ihrer Methode getLeihfrist().

Angelehnt an: W24 Teil 1, Aufgabe 3bb (Multiplizitäten deuten) und S22 Teil 1, Aufgabe 3a (Sichtbarkeiten)

Aufgabe UML-03.2 ★★☆ Anwendung 12 Punkte

Für die Dokumentation der Sortieranlage soll aus dem vorhandenen Quelltext (Anlage 5) ein Klassendiagramm erstellt werden.

9 Pa) Erstellen Sie ein UML-Klassendiagramm mit allen Attributen, Methoden (einschließlich Konstruktoren), Sichtbarkeiten, Beziehungen und Multiplizitäten.
3 Pb) Begründen Sie anhand des Quelltextes, ob Sie die Beziehungen Sortieranlage – Kiste und Sortieranlage – Foerderband als Aggregation oder als Komposition modelliert haben.

Angelehnt an: S26 Teil 2, Aufgabe 2a und S23 Teil 1, Aufgabe 2bb (abstrakte Klasse, Vererbung, Schnittstelle)

Aufgabe UML-03.3 ★★★ Prüfungsniveau 22 Punkte

Das Veranstaltungsangebot der Stadtbibliothek soll in BiblioNet abgebildet werden. Die Anforderungen finden Sie in Anlage 6. Die Klasse Raum ist bereits modelliert.

16 Pa) Ergänzen Sie das Klassendiagramm entsprechend Anlage 6. Geben Sie für jede Klasse die Attribute mit Datentypen an; Methoden nur, soweit sie in Anlage 6 genannt sind. Tragen Sie alle Beziehungen mit Multiplizitäten ein.
Raum - bezeichnung : String - kapazitaet : int - barrierefrei : boolean
Abb. C-4: Zeichenfläche mit der vorgegebenen Klasse „Raum“
2 Pb) Beschreiben Sie, wie Sie die Anforderung „Die Anmeldungen eines Termins sollen in der Reihenfolge ihres Eingangs verwaltet werden“ im Klassendiagramm umgesetzt haben.
4 Pc) Erläutern Sie für die Beziehungen Standort – Raum und Veranstaltung – Referent, welche Beziehungsart Sie gewählt haben, und begründen Sie Ihre Wahl.

Angelehnt an: W24 Teil 1, Aufgabe 3 (Klassendiagramm ergänzen, geordnete Liste, Aggregation vs. Komposition, 25 Punkte)

UML-04 · Zustandsdiagramm

Aufgabe UML-04.1 ★☆☆ Grundlagen 5 Punkte

Das folgende Zustandsdiagramm beschreibt ein Leserkonto. saldo sind die offenen Gebühren in Euro; der Saldo wird bei jeder Buchung bzw. Zahlung sofort aktualisiert, die Bedingungen beziehen sich auf den aktualisierten Wert.

Aktiv Gesperrt entry / Ausleihe sperren exit / Ausleihe freigeben gebuehrGebucht [saldo >= 10]/ Sperrhinweis senden zahlungEingegangen [saldo < 10] gebuehrGebucht [saldo < 10] Abgelaufen jahresende [Jahresgebühr offen] jahresgebuehrBezahlt / Ausweis verlängern after(2 Jahre)/ Kontodaten löschen
Abb. C-5: Zustandsdiagramm eines Leserkontos (saldo = offene Gebühren in €)
2 Pa) Ein Konto befindet sich im Zustand „Aktiv“ mit einem Saldo von 8,00 €. Es wird eine Säumnisgebühr von 2,50 € gebucht. Geben Sie den Folgezustand und alle dabei ausgeführten Aktionen in der richtigen Reihenfolge an.
2 Pb) Erläutern Sie die drei Bestandteile der Beschriftung gebuehrGebucht [saldo >= 10] / Sperrhinweis senden.
1 Pc) Erläutern Sie, wann die Einträge entry / … und exit / … im Zustand „Gesperrt“ ausgeführt werden.
Aufgabe UML-04.2 ★★☆ Anwendung 10 Punkte

Der Lebenszyklus eines Exemplars soll als UML-Zustandsdiagramm modelliert werden:

10 PErstellen Sie das Zustandsdiagramm.

Angelehnt an: W22 Teil 1, Aufgabe 4b (Zustände eines Objekts mit Bedingungen)

Aufgabe UML-04.3 ★★★ Prüfungsniveau 25 Punkte

Für die Steuerung des Rückgabeautomaten soll ein UML-Zustandsdiagramm erstellt werden. Die Beschreibung finden Sie in Anlage 7. Ein Teil des Diagramms ist bereits vorgegeben.

19 Pa) Ergänzen Sie das Zustandsdiagramm entsprechend Anlage 7. Die Not-Aus-Taste aus Teilaufgabe c) ist hier noch nicht zu berücksichtigen.
Selbsttest do / Sensoren prüfen Bereit entry / Klappe entriegeln entry / Hinweis „Medium einlegen“ [Selbsttest ok]
Abb. C-6: Vorgegebener Ausschnitt des Zustandsdiagramms „Rückgabeautomat“ – bitte ergänzen
2 Pb) Im Zustand „Bereit“ ist entry / Klappe entriegeln eingetragen. Erläutern Sie, warum diese Aktion als entry-Aktion und nicht als Aktion an den einzelnen eingehenden Transitionen modelliert wurde.
4 Pc) Der Automat erhält eine Not-Aus-Taste. Wird sie in einem der Zustände „Bereit“, „Prüfung“, „Verbuchung“, „Auswurf“ oder „Transport“ gedrückt, wechselt der Automat sofort in den Zustand „Störung“. Skizzieren Sie, wie Sie diese Anforderung mit einem zusammengesetzten Zustand übersichtlich modellieren, und nennen Sie einen Vorteil gegenüber einzelnen Transitionen.

Angelehnt an: W25 Teil 2, Aufgabe 2 (Zustandsdiagramm eines Roboters ergänzen, 25 Punkte)

UML-05 · Use-Case-Diagramm

Aufgabe UML-05.1 ★☆☆ Grundlagen 5 Punkte

Für die Online-Anmeldung zu Veranstaltungen der Stadtbibliothek soll ein Use-Case-Diagramm erstellt werden.

2 Pa) Erläutern Sie den Unterschied zwischen einer «include»- und einer «extend»-Beziehung und geben Sie jeweils an, in welche Richtung der Pfeil zeigt.
2 Pb) Ordnen Sie jedem Sachverhalt die passende Beziehung zu: include, extend, Generalisierung von Akteuren oder Generalisierung von Anwendungsfällen.
Nr.SachverhaltBeziehung
1Bei jeder Anmeldung zu einer Veranstaltung wird geprüft, ob noch Plätze frei sind.
2Ist ein Termin ausgebucht, kann sich der Leser bei der Anmeldung auf Wunsch auf die Warteliste setzen lassen.
3Ehrenamtliche Lesepaten dürfen alles, was Leser dürfen, und zusätzlich Vorlesestunden eintragen.
4„Veranstaltung per QR-Code finden“ ist eine besondere Form von „Veranstaltung suchen“.
1 Pc) Erläutern Sie, was die Systemgrenze in einem Use-Case-Diagramm darstellt.
Aufgabe UML-05.2 ★★☆ Anwendung 10 Punkte

Ein Teammitglied hat zur Abholstation (Anlage 2) das folgende Use-Case-Diagramm entworfen.

Abholstation Leser Thekenpersonal Medien abholen Abholcode eingeben Abholbeleg drucken Fach befüllen Fach öffnen «include» «extend» „OK“-Taste drücken BiblioNet-Server
Abb. C-7: Use-Case-Diagramm „Abholstation“ (Entwurf mit Fehlern)
6 Pa) Das Diagramm enthält mehrere Fehler. Beschreiben Sie vier Fehler und geben Sie jeweils an, wie sie zu korrigieren sind.
Nr.FehlerKorrektur
1
2
3
4
4 Pb) Erstellen Sie für den Anwendungsfall „Medien abholen“ eine Use-Case-Beschreibung.
FeldInhalt
Name
Akteur(e)
Vorbedingung
Standardablauf
Alternative / Ausnahme
Nachbedingung

Angelehnt an: W21 Teil 1, Aufgabe 2a und S24 Teil 1, Aufgabe 3a (include/extend)

Aufgabe UML-05.3 ★★★ Prüfungsniveau 20 Punkte

Für die App LeseLink wurden in einem Workshop Anforderungen gesammelt (Anlage 8).

16 Pa) Erstellen Sie auf Grundlage von Anlage 8 ein UML-Use-Case-Diagramm mit Systemgrenze.
4 Pb) Leiten Sie aus Ihrem Diagramm zwei User Stories im Format „Als … möchte ich …, damit …“ ab, und nennen Sie für eine der beiden zwei Akzeptanzkriterien.

Angelehnt an: W25 Teil 1, Aufgabe 2a (Use-Case-Diagramm mit Generalisierung, include und extend, 18 Punkte) und W23 Teil 1, Aufgabe 2b (User Stories)

UML-06 · Sequenzdiagramm

Aufgabe UML-06.1 ★☆☆ Grundlagen 5 Punkte

Das folgende Sequenzdiagramm zeigt, wie eine Ausleihe in der App verlängert wird.

:LeseLinkApp :KontoService :Datenbank :PushDienst verlaengern(exemplarNr) pruefeSperre() alt [Konto nicht gesperrt] [else] aktualisiereFrist(nr) neuesDatum sendeBestaetigung(leserNr) neuesDatum "abgelehnt"
Abb. C-8: Sequenzdiagramm „Ausleihe verlängern“
2 Pa) Erläutern Sie anhand der Nachrichten verlaengern(exemplarNr) und sendeBestaetigung(leserNr) den Unterschied zwischen einer synchronen und einer asynchronen Nachricht.
1 Pb) Beschreiben Sie, was das Fragment alt in diesem Diagramm bewirkt.
1 Pc) Nennen Sie die Bedeutung der schmalen Rechtecke auf den Lebenslinien und der gestrichelten Pfeile.
1 Pd) Nennen Sie das Fragment, das Sie verwenden, wenn (1) eine Nachricht nur unter einer Bedingung gesendet wird und es keine Alternative gibt und (2) eine Nachricht für jedes Element einer Liste wiederholt wird.
Aufgabe UML-06.2 ★★☆ Anwendung 10 Punkte

Zur Dokumentation des Selbstverbuchungsterminals soll der Ablauf der Methode ausleihen() (Anlage 9) als Sequenzdiagramm dargestellt werden.

10 PErstellen Sie ein UML-Sequenzdiagramm für einen Aufruf von ausleihen(leserNr, barcodes). Der Aufruf erfolgt von außen (gefundene Nachricht). Berücksichtigen Sie Rückgabewerte, Objekterzeugung, Bedingungen und Wiederholungen.

Angelehnt an: S22 Teil 1, Aufgabe 3ca (Sequenzdiagramm zu einem Ablauf mit Schleife)

Aufgabe UML-06.3 ★★★ Prüfungsniveau 20 Punkte

Die Katalogsuche der App LeseLink verwendet einen Cache, damit häufige Suchanfragen nicht jedes Mal die Datenbank belasten. Der Ablauf ist in Anlage 10 beschrieben.

16 Pa) Erstellen Sie das UML-Sequenzdiagramm für die Katalogsuche. Verwenden Sie die vorgegebenen Lebenslinien.
Leser :LeseLinkApp :KatalogService :Cache :Datenbank :Verbundkatalog
Abb. C-9: Vorgegebene Lebenslinien zu Aufgabe UML-06.3
2 Pb) Begründen Sie, warum die Nachricht speichere(begriff, treffer) als asynchrone Nachricht modelliert wird.
2 Pc) Erläutern Sie den Unterschied zwischen den Fragmenten opt und alt und geben Sie an, welches Fragment Sie für die Schritte 4 und 5 aus Anlage 10 verwendet haben.

Angelehnt an: S24 Teil 1, Aufgabe 2e (App, Web-Service und Datenbank mit alt-Fragment) und W23 Teil 2, Aufgabe 1 (Sequenzdiagramm, 25 Punkte)

UML-07 · Struktogramm / PAP

Aufgabe UML-07.1 ★☆☆ Grundlagen 4 Punkte

Das folgende Struktogramm berechnet die Säumnisgebühren eines Lesers. Das Array tage enthält für jedes überfällige Medium die Anzahl der Tage der Überschreitung.

gebuehrGesamt(tage : integer[], istKind : boolean) : double summe := 0,00 istKind = wahr ja nein ∅ zähle i von 0 bis tage.length - 1 g := tage[i] * 0,50 g > 5,00 ja nein g := 5,00 ∅ summe := summe + g rückgabe summe
Abb. C-10: Struktogramm „gebuehrGesamt“
2 Pa) Geben Sie die Rückgabewerte für die folgenden Aufrufe an.
AufrufRückgabewert
gebuehrGesamt([4, 15, 0, 9], falsch)
gebuehrGesamt([12], wahr)
gebuehrGesamt([10, 11], falsch)
gebuehrGesamt([], falsch)
1 Pb) Nennen Sie die Strukturblöcke, die in dem Struktogramm verwendet werden.
1 Pc) Künftig soll die Gebühr je Tag vom Medientyp abhängen (Buch 0,50 €, Film 1,00 €, Spiel 1,50 €). Nennen Sie den Strukturblock, mit dem diese Unterscheidung am übersichtlichsten dargestellt wird.
Aufgabe UML-07.2 ★★☆ Anwendung 8 Punkte

Die folgende Funktion bestimmt den Fälligkeitstag einer Ausleihe (Leihfristen siehe Anlage 1). Die Tage des Jahres sind durchnummeriert; das Array geschlossen gibt für jede Tagesnummer an, ob die Bibliothek an diesem Tag geschlossen ist. Ein Fälligkeitstag darf nicht auf einen Schließtag fallen.

funktion faelligkeit(medientyp : string, ausleihTag : integer, geschlossen : boolean[]) : integer
  frist : integer
  wenn medientyp = "Buch" oder medientyp = "Hörbuch" dann
    frist := 28
  sonst
    wenn medientyp = "Film" oder medientyp = "Spiel" dann
      frist := 14
    sonst
      wenn medientyp = "Zeitschrift" dann
        frist := 7
      sonst
        frist := 21
      Ende wenn
    Ende wenn
  Ende wenn
  tag : integer := ausleihTag + frist
  solange geschlossen[tag] = wahr
    tag := tag + 1
  Ende solange
  rückgabe tag
Ende funktion
6 Pa) Stellen Sie den Algorithmus als Struktogramm nach DIN 66261 dar. Verwenden Sie für die Bestimmung der Frist eine Fallauswahl.
2 Pb) Begründen Sie, warum für das Verschieben des Fälligkeitstages eine kopfgesteuerte und keine fußgesteuerte Schleife verwendet werden muss.

Angelehnt an: W22/S23 (Algorithmus wahlweise als Struktogramm), Belegsatz W22 (Struktogramm DIN 66261)

Aufgabe UML-07.3 ★★★ Prüfungsniveau 14 Punkte

Die achtstellige Nummer eines Bibliotheksausweises enthält an der letzten Stelle eine Prüfziffer. Sie wird so berechnet: Die ersten sieben Ziffern werden abwechselnd mit 1 und 3 gewichtet (1. Ziffer × 1, 2. Ziffer × 3, 3. Ziffer × 1, …, 7. Ziffer × 1) und aufsummiert. Die Prüfziffer ist (10 - summe mod 10) mod 10. Die Funktion ziffer(nr, i) liefert den Zahlenwert des Zeichens an Position i (die erste Position hat den Index 0).

Eine Kollegin hat die Funktion pruefeAusweis als Struktogramm entworfen. Für die gültige Nummer 40517287 liefert die Funktion jedoch falsch.

pruefeAusweis(nr : string) : boolean nr.length() <> 8 ja nein rückgabe falsch ∅ zähle i von 0 bis 7 summe := 0 i mod 2 = 0 ja nein gewicht := 3 gewicht := 1 summe := summe + ziffer(nr, i) * gewicht pz := (10 - summe mod 10) mod 10 pz = ziffer(nr, 7) ja nein rückgabe wahr rückgabe falsch
Abb. C-11: Struktogramm „pruefeAusweis“ (fehlerhaft)
4 Pa) Führen Sie für die Nummer 40517287 einen Schreibtischtest des abgebildeten Struktogramms durch. Tragen Sie die Werte am Ende jedes Schleifendurchlaufs ein und geben Sie den Rückgabewert an.
igewichtziffer(nr, i)summe
pz =Rückgabe:
6 Pb) Das Struktogramm enthält drei Fehler. Nennen Sie die Fehler und geben Sie jeweils die Korrektur an.
4 Pc) Stellen Sie den korrigierten Algorithmus als Programmablaufplan (PAP) nach DIN 66001 dar.

Angelehnt an: W21 Teil 2, Aufgabe 1c (drei Fehler in einem Struktogramm finden und korrigieren)

Originalaufgaben zum Üben

Diese echten Prüfungsaufgaben passen zu diesem Block (Dateien im Ordner Prüfungsvorbereitung). Lösungen gibt es nur für 2023 Sommer, 2023 Winter, 2024 Sommer und 2025 Winter (dort vom u-form-Verlag). Die Belegsätze mit den IHK-Notationen liegen für W21, S22, W22, S24 und W25 vor (z. B. 2024/sommer/AE Sommer 2024 Belegsatz.pdf).

PrüfungAufgabeThemaDatei · Lösung
Winter 2021T1 A2a (14 P)Use-Case-Diagramm Terminbuchung (include/extend)2021/winter/AE 2021 Winter Teil 1.pdf · keine Lösung
Winter 2021T1 A3b (7 P)Klasse mit Attributen und Methodenwie oben · keine Lösung
Winter 2021T2 A1a (15 P), A1c (6 P)Aktivitätsdiagramm mit Partitionen; drei Fehler im Struktogramm2021/winter/AE 2021 Winter Teil 2.pdf · keine Lösung
Sommer 2022T1 A3a, A3b, A3ca (22 P)Klassendiagramm mit Sichtbarkeiten, Beobachter-Muster, Sequenzdiagramm2022/sommer/AE 2022 Sommer Teil 1.pdf · keine Lösung
Winter 2022T1 A4a (14 P), A4b (11 P)Aktivitätsdiagramm Raumbuchung (Partitionen, Teilung/Synchronisation); Zustandsdiagramm Raum2022/winter/AE 2022 Winter Teil 1.pdf · keine Lösung
Sommer 2023T1 A2bb (9 P), A3c (10 P)Klassendiagramm mit abstrakter Klasse; Zustandsdiagramm Auslastungsampel2023/sommer/AE Sommer 2023 Teil 1.pdf · Lösung: AE Sommer 2023 Teil 1+2 Lösungen.pdf
Sommer 2023T2 A1 (25 P)Aktivitätsdiagramm mit vier Partitionen aus einem Interview2023/sommer/AE Sommer 2023 Teil 2.pdf · Lösung wie oben
Winter 2023T1 A2b (6 P), A2c (15 P)User Stories aus Use-Case-Diagramm; Aktivitätsdiagramm mit Parallelität2023/winter/AE Winter 2023 Teil 1.pdf · Lösung: AE Winter 2023 Teil 1 Lösungen.pdf
Winter 2023T2 A1 (25 P)Sequenzdiagramm mit alt-Fragment2023/winter/AE Winter 2023 Teil 2.pdf · Lösung: AE Winter 2023 Teil 2 Lösungen.pdf
Sommer 2024T1 A2e (11 P), A3a (14 P)Sequenzdiagramm App/Web-Service/Datenbank; Use-Case-Diagramm2024/sommer/AE Sommer 2024 Teil 1+2+3.pdf · Lösung: AE Sommer 2024 Teil 1 Lösungen.pdf
Sommer 2024T2 A1a (14 P)Aktivitätsdiagramm mit drei Partitionen, Parallelität, Verzweigungwie oben · Lösung: AE Sommer 2024 Teil 2 Lösungen.pdf
Winter 2024T1 A3 (25 P), A4a (15 P)Klassendiagramm Streckennetz ergänzen, Aggregation/Komposition; Zustandsdiagramm Auslastung2024/winter/AE Winter 2024 Teil 1.pdf · keine Lösung
Winter 2025T1 A2a (18 P)Use-Case-Diagramm mit Generalisierung, include, extend2025/winter/AE Winter 2025 Teil 1.pdf · Lösung: AE Winter 2025 Lösungserleuterungen.pdf (u-form)
Winter 2025T2 A2 (25 P)Zustandsdiagramm Servierroboter ergänzen2025/winter/AE Winter 2025 Teil 2.pdf · Lösung wie oben
Sommer 2026T1 A2a (16 P)Aktivitätsdiagramm Bewässerung (Teilung/Synchronisation, Verzweigung)2026/sommer/AE Sommer 2026 Teil 1.pdf · keine Lösung
Sommer 2026T2 A2a (12 P)Klassendiagramm mit abstrakter Klasse, Vererbung, Aggregation2026/sommer/AE Sommer 2026 Teil 2.pdf · keine Lösung