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.
| Unterthema | Kategorie | Typische Punkte | Wichtigste Fähigkeit |
|---|---|---|---|
| UML-01 Diagrammwahl, Diagramme lesen | Immer | in jeder Diagrammaufgabe | Aus dem Text erkennen, welches Diagramm gefragt ist; Diagramme lesen und Fehler finden |
| UML-02 Aktivitätsdiagramm | Meistens | 14–25 | Partitionen, Entscheidung mit Guards, Teilung/Synchronisation, Schleife |
| UML-03 Klassendiagramm | Meistens | 5–25 | Attribute/Methoden-Syntax, Multiplizitäten, Aggregation vs. Komposition |
| UML-04 Zustandsdiagramm | Oft | 10–25 | ereignis [bedingung] / aktion, entry/do/exit, after() |
| UML-05 Use-Case-Diagramm | Oft | 6–18 | Systemgrenze, include/extend mit richtiger Pfeilrichtung, Generalisierung |
| UML-06 Sequenzdiagramm | Wahrscheinlich | 9–25 | synchron/asynchron/Antwort, Fragmente alt, opt, loop |
| UML-07 Struktogramm / PAP | Sonstige | bis 6 | Pseudocode ↔ Struktogramm, Fehler finden |
0..1, 1..*, die Abhängigkeit (gestrichelter Pfeil),loop, opt, par im Sequenzdiagramm (UML-06),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
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:
| Diagramm | Zeigt … | Signalwörter im Aufgabentext | Kernelemente |
|---|---|---|---|
| Use-Case-Diagramm (Anwendungsfalldiagramm) | 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ätsdiagramm | einen Ablauf (Geschäftsprozess, Algorithmus) mit Verzweigungen, Parallelität und Zuständigkeiten | „Ablauf“, „Prozess“, „Arbeitsschritte“, „zuerst … dann“, „gleichzeitig“, „wer ist zuständig“, Interview mit mehreren Beteiligten | Aktion, Entscheidung, Teilung/Synchronisation, Partitionen (Swimlanes), Start/Ende |
| Zustandsdiagramm | die 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, Roboter | Zustand, Transition ereignis [bedingung] / aktion, entry/do/exit, after |
| Sequenzdiagramm | den Nachrichtenaustausch zwischen Objekten bzw. Systemen in zeitlicher Reihenfolge | „Methodenaufrufe“, „Kommunikation zwischen App, Server und Datenbank“, „Nachrichten“, „Anfrage/Antwort“, Quelltext einer Methode | Lebenslinie, synchrone/asynchrone Nachricht, Antwort, Aktivierung, Fragmente alt/opt/loop |
| Klassendiagramm | die 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 |
| Objektdiagramm | konkrete Objekte (Instanzen) mit Attributwerten zu einem Zeitpunkt | „Momentaufnahme“, „Beispielbelegung“ | k1 : Kunde (unterstrichen), Links |
| Komponentendiagramm | Softwarebausteine und ihre Schnittstellen | „Module“, „Komponenten“, „Schnittstellen zwischen Teilsystemen“ | Komponente, bereitgestellte/benötigte Schnittstelle |
| Verteilungsdiagramm | auf welcher Hardware (Knoten) welche Software läuft | „Server“, „Endgeräte“, „installiert auf“, „Infrastruktur“ | Knoten (Quader), Artefakt, Kommunikationspfad |
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ätsdiagramm | Zustandsdiagramm | |
|---|---|---|
| Knoten bedeutet | eine 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 ist | Zustandswechsel, der durch ein Ereignis ausgelöst wird (Transition); ohne Ereignis passiert nichts |
| Betrachtet wird | ein Ablauf, oft mit mehreren Beteiligten (Partitionen) | genau ein Objekt (ein Gerät, ein Konto, ein Auftrag) |
| Zeit/Warten | nur indirekt darstellbar | natü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 …“ |
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.
| Was soll dokumentiert werden? | Diagramm | Begründung |
|---|---|---|
| Welche Funktionen das Kundenportal für Privatkunden, Geschäftskunden und Zusteller bietet | Use-Case-Diagramm | Funktionen aus Sicht der Akteure, Übersicht ohne Ablauf |
| Wie ein Paket vom Einliefern über das Sortierzentrum bis zur Zustellung bearbeitet wird und wer welchen Schritt erledigt | Aktivitätsdiagramm mit Partitionen | Ablauf ü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öst | Zustandsdiagramm | ein Objekt (die Sendung), Zustände und auslösende Ereignisse |
| Wie Scanner, Sendungsdienst und Datenbank beim Einscannen eines Pakets Daten austauschen | Sequenzdiagramm | Nachrichten zwischen Objekten in zeitlicher Reihenfolge |
par), Wiederholungen (→ Schleife bzw. loop), Zeitangaben (→ after).exit des alten Zustands → Aktion an der Transition → entry des neuen Zustands.alt zeigen, welcher Teil nur unter welcher Bedingung abläuft.| Diagramm | Typische (Prüfungs-)Fehler |
|---|---|
| Aktivität | Rü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 |
| Zustand | Tä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 Case | include/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 |
| Sequenz | Antwort mit gefüllter Spitze oder durchgezogener Linie · asynchrone Nachricht, auf deren Ergebnis gewartet wird · Nachricht an ein Objekt, bevor es erzeugt wurde · fehlende Aktivierung |
| Klasse | Raute am falschen Ende (muss beim Ganzen sitzen) · Multiplizitäten vertauscht · Fremdschlüssel-Attribute wie im Relationenmodell statt Assoziationen · fehlende Datentypen |
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.
| Element | Darstellung | Bedeutung und Regel |
|---|---|---|
| Startknoten | gefüllter Kreis | Beginn des Ablaufs. Genau ein ausgehender Pfeil. Steht in der Partition dessen, der den Ablauf auslöst. |
| Aktion | Rechteck mit abgerundeten Ecken | ein Arbeitsschritt, benannt mit Objekt + Verb: „Antrag prüfen“, „Rechnung erstellen“. Ein eingehender, ein ausgehender Pfeil. |
| Kontrollfluss | Pfeil mit offener Spitze | „danach kommt“. Darf Partitionsgrenzen überqueren. |
| Entscheidung (Verzweigung) | Raute, 1 Eingang, mehrere Ausgänge | Genau 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ührung | Raute, mehrere Eingänge, 1 Ausgang | führt alternative Wege wieder zusammen („ODER“): Sobald ein Weg ankommt, geht es weiter. Ohne Guards. |
| Teilung (Gabelung, Fork) | Balken, 1 Eingang, mehrere Ausgänge | Alle Ausgänge werden gleichzeitig bzw. in beliebiger Reihenfolge durchlaufen. Keine Guards! |
| Synchronisation (Vereinigung, Join) | Balken, mehrere Eingänge, 1 Ausgang | Wartet, bis alle eingehenden Zweige angekommen sind („UND“), dann geht es einmal weiter. |
| Endknoten (Aktivitätsende) | Kreis mit gefülltem Kreis | beendet die gesamte Aktivität – auch noch laufende parallele Zweige. Mehrere Endknoten sind erlaubt. |
| Ablaufende (Flussende) | Kreis mit X | beendet nur diesen einen Zweig; andere parallele Zweige laufen weiter. |
| Partition (Schwimmbahn, Swimlane) | Spalten mit Überschrift | Zuständigkeit: Jede Aktion steht in der Bahn der Person, Abteilung oder des Systems, das sie ausführt. |
| Konnektor | Kreis mit Buchstabe | Sprungmarke, 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.
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.
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]).
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.
[eckigen Klammern]. Eine Aktion hat genau einen Eingang – Schleifen laufen über eine Zusammenführung.
| Im Text | Im 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 |
[gesperrt] / [nicht gesperrt].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.
Ein Rechteck mit bis zu drei Abschnitten: Name (fett, zentriert, Substantiv im Singular) – Attribute – Methoden. Leere Abschnitte dürfen weggelassen werden.
| Teil | Syntax | Beispiel |
|---|---|---|
| Attribut | Sichtbarkeit name : Typ [= Startwert] {Eigenschaft} | - preis : double, - anzahl : int = 0, - MWST : double = 0.19 {readOnly} |
| Methode | Sichtbarkeit name(param : Typ, …) : Rückgabetyp | + berechneSumme() : double, + setPreis(preis : double) : void |
| Konstruktor | wie eine Methode mit dem Klassennamen, ohne Rückgabetyp | + Artikel(nr : String, preis : double) |
| statisch (Klassenattribut/-methode) | unterstrichen (UML-Standard); im IHK-Belegsatz zusätzlich als Eigenschaft {static} | - anzahlArtikel : int – gehört der Klasse, nicht dem einzelnen Objekt |
| abstrakt | Name 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 |
| Sichtbarkeit | UML | Java | Zugriff erlaubt für … |
|---|---|---|---|
| public | + | public | alle Klassen |
| private | - | private | nur die Klasse selbst (Standard für Attribute → Kapselung, Zugriff über Getter/Setter) |
| protected | # | protected | die Klasse und ihre Unterklassen (in Java zusätzlich das Paket) |
| package | ~ | kein Schlüsselwort | alle 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!).
| Beziehung | Notation | Bedeutung | Erkennbar im Text/Code |
|---|---|---|---|
| Assoziation | durchgezogene Linie | Objekte kennen sich / arbeiten zusammen | „gehört zu“, „bucht“, „betreut“ |
| gerichtete Assoziation | Linie mit offener Pfeilspitze | nur eine Seite kennt die andere (Navigierbarkeit) | Attribut nur in einer der beiden Klassen |
| Aggregation | Linie 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 |
| Komposition | Linie mit gefüllter Raute am Ganzen | strenges „Ganzes – Teil“: Teil existiert nur im Ganzen und wird mit ihm gelöscht | „besteht aus“; Teil wird im Ganzen erzeugt (new) |
| Vererbung (Generalisierung) | Linie mit hohlem Dreieck an der Oberklasse | „ist ein(e)“: Unterklasse erbt Attribute und Methoden | extends, „ist eine Art von“ |
| Realisierung (Implementierung) | gestrichelte Linie mit hohlem Dreieck am Interface | Klasse implementiert die Methoden des Interfaces | implements |
| Abhängigkeit | gestrichelte Linie mit offener Spitze, ggf. «use» | Klasse benutzt eine andere kurzzeitig (Parameter, lokale Variable), ohne sie dauerhaft zu kennen | Typ nur als Parameter oder lokale Variable |
| Angabe | Bedeutung | Angabe | Bedeutung |
|---|---|---|---|
1 | genau eins | * bzw. 0..* | beliebig viele (auch keins) |
0..1 | keins oder eins (optional) | 1..* | mindestens eins |
2..* | mindestens zwei | 2..5 | zwei 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.
| Prüffrage | Komposition (gefüllte Raute) | Aggregation (hohle Raute) |
|---|---|---|
| Kann das Teil ohne das Ganze sinnvoll existieren? | nein – existenzabhängig | ja – 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) |
| Beispiele | Rechnung – Rechnungsposition, Bestellung – Bestellposition, Haus – Stockwerk | Playlist – Song, Mannschaft – Spieler, Kurs – Teilnehmer |
| Java | Klassendiagramm |
|---|---|
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 Fahrzeug | Vererbungspfeil von Pkw zu Fahrzeug |
class Pkw implements Wartbar | gestrichelter 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 Klasse | Komposition 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.
- (Kapselung), sofern nichts anderes verlangt.kundenNr in Bestellung) statt einer Assoziation – im Klassendiagramm modelliert man die Beziehung als Linie.0..* am Ganzen).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).
| Begriff | Darstellung | Bedeutung |
|---|---|---|
| Zustand | Rechteck mit abgerundeten Ecken, Name fett | Situation, 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“. |
| Startzustand | gefüllter Kreis | Pseudozustand; der Pfeil daraus zeigt auf den ersten echten Zustand. |
| Endzustand | Kreis mit gefülltem Kreis | Lebensende des Objekts (gelöscht, ausgeschaltet). Nicht jedes Diagramm braucht einen. |
| Transition | Pfeil mit Beschriftung ereignis [bedingung] / aktion | Zustandswechsel. Alle drei Teile sind optional. |
| Ereignis (Auslöser, Trigger) | vor der Klammer | Was 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.
| Ereignisart | Schreibweise | Bedeutung |
|---|---|---|
| Signal- / Aufrufereignis | tasteGedrü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 |
| Änderungsereignis | when(temperatur > 30) | sobald eine Bedingung wahr wird (nicht im Belegsatz, aber gültiges UML) |
| Abschlussereignis | Transition ohne Ereignis, ggf. nur mit Bedingung | schaltet, sobald die do-Aktivität des Zustands fertig ist |
| Eintrag im Zustand | Wird ausgeführt … |
|---|---|
entry / aktion | jedes Mal beim Betreten des Zustands – egal, über welche Transition. Spart, dieselbe Aktion an alle eingehenden Pfeile zu schreiben. |
do / tätigkeit | solange sich das Objekt im Zustand befindet (länger dauernd, unterbrechbar, z. B. „do / fahren“). |
exit / aktion | jedes Mal beim Verlassen des Zustands. |
ereignis / aktion | interne 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.
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.
[betrag >= summe] und [betrag < summe]. Ereignisse, für die es im aktuellen Zustand keine Transition gibt, werden ignoriert.
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.
Unterzustände stehen nicht im Belegsatz – wenn sie gefragt sind, wird die Aufgabe sie meist ausdrücklich verlangen („… übersichtlich mit Unterzuständen modellieren“).
after(…) am Ausgang des Zustands, in dem gewartet wird.do / Medium prüfen./ aktion [bedingung]) oder Bedingung ohne eckige Klammern.after beim Betreten des Zustands neu beginnt.entry in den Zustand.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.
| Element | Darstellung | Regeln |
|---|---|---|
| Akteur | Strichmä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 Name | eine Funktion, die für einen Akteur ein Ergebnis mit Nutzen liefert. Benennung: Substantiv + Verb („Ticket buchen“). Keine Bedienschritte („Button klicken“), keine Systeminterna („Datenbank aktualisieren“). |
| Systemgrenze | Rechteck um alle Anwendungsfälle, Systemname oben | trennt das System von seiner Umgebung. Steht nicht im IHK-Belegsatz, wird aber oft erwartet! |
| Assoziation | Linie Akteur – Anwendungsfall | Der Akteur ist am Anwendungsfall beteiligt. Nur zwischen Akteur und Anwendungsfall – nie zwischen zwei Akteuren oder zwei Anwendungsfällen. |
| «include» | gestrichelter Pfeil | siehe Tabelle unten |
| «extend» | gestrichelter Pfeil, optional mit Notiz Condition und extension point | siehe Tabelle unten |
| Generalisierung | Linie mit hohlem Dreieck | zwischen Akteuren: der speziellere Akteur darf alles, was der allgemeine darf, und mehr. Zwischen Anwendungsfällen: Spezialisierung eines allgemeinen Falls. |
| «include» (Einbinden) | «extend» (Erweitern) | |
|---|---|---|
| Bedeutung | Der 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. |
| Pfeilrichtung | vom Basisfall zum eingebundenen Fall | vom erweiternden Fall zum Basisfall |
| Ist der Basisfall ohne ihn vollständig? | nein | ja |
| 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“ |
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.
Das Diagramm zeigt nur die Namen. Den Ablauf eines Anwendungsfalls beschreibt man in einer Schablone:
| Feld | Beispiel „Ticket buchen“ (Kino) |
|---|---|
| Name | Ticket buchen |
| Akteure | Kunde (primär), Zahlungsdienstleister (sekundär) |
| Vorbedingung | Die Vorstellung ist im Programm und nicht ausverkauft. |
| Auslöser | Kunde wählt eine Vorstellung aus. |
| Standardablauf | 1. 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 / Ausnahmen | 3a. Gewählte Plätze wurden inzwischen vergeben → Hinweis, zurück zu 2. 4a. Zahlung abgelehnt → Buchung wird verworfen. |
| Nachbedingung | Plätze sind verbindlich reserviert, Kunde hat die Tickets. |
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.)
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.
| Element | Darstellung | Bedeutung |
|---|---|---|
| Lebenslinie | Kopf name:Klasse oder :Klasse, darunter gestrichelte Linie | ein beteiligtes Objekt; menschliche Akteure als Strichmännchen. Reihenfolge von links nach rechts nach erstem Auftreten. |
| Aktivierung (Ausführungsbalken) | schmales Rechteck auf der Lebenslinie | Zeitraum, in dem das Objekt eine Methode ausführt (optional, aber üblich). |
| synchrone Nachricht | durchgezogen, gefüllte Spitze, Methodenname mit Parametern | Methodenaufruf; der Sender wartet, bis der Empfänger fertig ist. |
| Antwort | gestrichelt, offene Spitze, Rückgabewert | Rückkehr aus einem synchronen Aufruf. |
| asynchrone Nachricht | durchgezogen, offene Spitze | Sender wartet nicht und arbeitet sofort weiter (Signal, Push-Nachricht, Nachricht in eine Warteschlange). |
| Selbstaufruf | Pfeil, der zur eigenen Lebenslinie zurückkehrt, zusätzlicher Balken | Objekt ruft eine eigene Methode auf. |
| Objekterzeugung | gestrichelter Pfeil mit create (oder «create») auf den Kopf der neuen Lebenslinie | Objekt wird erst zu diesem Zeitpunkt erzeugt (new); der Kopf steht auf Höhe des Pfeils. |
| Objektzerstörung | X am Ende der Lebenslinie | Objekt wird gelöscht. |
| gefundene Nachricht | Pfeil, der vom Rand kommt | Aufruf von außen, dessen Sender nicht dargestellt wird. |
| Operator | Bedeutung | Code-Entsprechung |
|---|---|---|
alt | Alternativen: mehrere Bereiche, getrennt durch gestrichelte Linien, jeder mit Bedingung; genau einer wird ausgeführt ([else] erlaubt). | if … else if … else, switch |
opt | optional: ein Bereich mit Bedingung, wird nur ausgeführt, wenn sie gilt. | if ohne else |
loop | Wiederholung; loop(min, max) mit Bedingung, z. B. loop(1,10) [für jeden Treffer]. | for, while, for-each |
par | parallel: die Bereiche laufen gleichzeitig bzw. in beliebiger Reihenfolge. | Threads, parallele Anfragen |
break | wird der Bereich ausgeführt, endet das umgebende Fragment. | break, return in einer Schleife |
ref | Verweis 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.
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]
}
| Im Code | Im 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/else | alt mit zwei Bereichen; if ohne else → opt |
for/while | loop mit Bedingung |
| Aufruf über Warteschlange, Event, Push | asynchrone Nachricht |
| Getter auf ein Objekt | darf bei Platzmangel weggelassen werden, wenn die Aufgabe es erlaubt – sonst ebenfalls als Nachricht |
create.alt verwendet, obwohl es nur einen Bereich gibt (→ opt), oder Bedingungen weggelassen.loop.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.
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).
| Struktur | Pseudocode (IHK-Stil) | Struktogramm | PAP |
|---|---|---|---|
| Anweisung / Sequenz | x := 5 | Rechteck; Sequenz = Rechtecke untereinander | Rechteck, verbunden durch Pfeile |
| Verzweigung | wenn … dann … sonst … Ende wenn | Dreieck-Kopf mit Bedingung, links „ja“, rechts „nein“; leerer Zweig mit ∅ | Raute mit zwei Ausgängen „ja“/„nein“ |
| Fallauswahl | Kette 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 Schleife | solange … Ende solange | Bedingung oben, Rumpf eingerückt | Raute vor dem Rumpf, Rücksprung davor |
| fußgesteuerte Schleife | wiederhole … solange … | Rumpf eingerückt, Bedingung unten | Raute nach dem Rumpf, Rücksprung an den Anfang |
| Zählschleife | zähle i von 0 bis n-1 … Ende zähle | wie kopfgesteuert, Kopf „zähle i von … bis …“ | Initialisierung, Raute i <= n-1, Rumpf, i := i + 1, Rücksprung |
| Unterprogramm | berechne(x) | Rechteck mit doppelten senkrechten Seitenlinien | Rechteck 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.
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.
| Struktogramm | PAP | |
|---|---|---|
| Vorteile | erzwingt strukturierte Programmierung (keine Sprünge), kompakt, direkt in Code übertragbar | leicht verständlich, Ablauf durch Pfeile sofort sichtbar, auch für Laien |
| Nachteile | Änderungen aufwendig (neu zeichnen), tiefe Verschachtelung wird schmal | verleitet zu unstrukturierten Sprüngen („Spaghetti“), großer Platzbedarf, Schleifen nicht direkt erkennbar |
∅ kennzeichnen.rückgabe bzw. Ausgabe als eigene Anweisung am Ende (oder in den Zweigen).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.
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.
| Pseudocode | Beschreibung |
|---|---|
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 |
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):
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.
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.
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.
Die Stadtbibliothek möchte ihr Veranstaltungsangebot in BiblioNet verwalten. Folgende Sachverhalte sind zu modellieren:
berechneAuslastung() eines Termins liefert den Anteil der belegten Plätze an der Raumkapazität in Prozent.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
}
}
suchen(begriff)).suche(begriff) auf und wartet auf das Ergebnis.holeTreffer(begriff). Der Cache liefert die gespeicherte Trefferliste oder null.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.sucheExtern(begriff) und erhält externeTreffer.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.anzeigen(trefferliste)).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.
Im Projekt BiblioNet sollen verschiedene Sachverhalte mit UML dokumentiert werden.
| Diagramm | Strukturdiagramm | Verhaltensdiagramm |
|---|---|---|
| Klassendiagramm | ||
| Aktivitätsdiagramm | ||
| Objektdiagramm | ||
| Zustandsdiagramm | ||
| Sequenzdiagramm | ||
| Komponentendiagramm | ||
| Anwendungsfalldiagramm | ||
| Verteilungsdiagramm |
| Nr. | Sachverhalt | Diagramm |
|---|---|---|
| 1 | Übersicht, welche Funktionen die App LeseLink für Leser und für das Personal bereitstellt | |
| 2 | Zustände, die ein Leserkonto annehmen kann, und die Ereignisse, die einen Wechsel auslösen | |
| 3 | Ablauf einer Fernleihbestellung über die beteiligten Stellen hinweg | |
| 4 | zeitliche Reihenfolge der Methodenaufrufe zwischen App, KatalogService und Datenbank bei einer Suche | |
| 5 | Klassen der Anwendung mit Attributen, Methoden und Beziehungen | |
| 6 | auf welchen Geräten (Server, Terminal, Smartphone) welche Softwarekomponenten installiert sind |
Ein Kollege hat für die Selbstverbuchungsterminals das folgende Aktivitätsdiagramm entworfen. Beachten Sie die Ausleihregeln in Anlage 1.
| Nr. | Fehler | Auswirkung | Korrektur |
|---|---|---|---|
| 1 | |||
| 2 | |||
| 3 | |||
| 4 |
Angelehnt an: typische Fehlerfragen zu Aktivitätsdiagrammen; Lesen eines gegebenen Diagramms wie W23 Teil 1, Aufgabe 2b
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.
| Aspekt | Diagramm | Begrü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. |
Angelehnt an: W25 Teil 2, Aufgabe 2 und W24 Teil 1, Aufgabe 4a (Zustände aus einer Beschreibung ableiten)
Das folgende Aktivitätsdiagramm zeigt den Ablauf, wenn eine Person an der Theke einen Leserausweis beantragt.
| Nr. | Bezeichnung | Nr. | Bezeichnung |
|---|---|---|---|
| ① | ⑤ | ||
| ② | ⑥ | ||
| ③ | ⑦ | ||
| ④ | ⑧ |
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.
Angelehnt an: W23 Teil 1, Aufgabe 2c und S26 Teil 1, Aufgabe 2a (Ablauf mit Verzweigung und Parallelität)
Die Fernleihe soll mit BiblioNet digitalisiert werden. Sie haben dazu ein Interview mit Frau Celik, der Leiterin der Fernleihstelle, geführt (Anlage 3).
Angelehnt an: S23 Teil 2, Aufgabe 1 (Aktivitätsdiagramm mit vier Partitionen aus einem Interview, 25 Punkte)
Gegeben ist der Auszug aus dem Klassendiagramm von BiblioNet in Anlage 4.
# 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)
Für die Dokumentation der Sortieranlage soll aus dem vorhandenen Quelltext (Anlage 5) ein Klassendiagramm erstellt werden.
Angelehnt an: S26 Teil 2, Aufgabe 2a und S23 Teil 1, Aufgabe 2bb (abstrakte Klasse, Vererbung, Schnittstelle)
Das Veranstaltungsangebot der Stadtbibliothek soll in BiblioNet abgebildet werden. Die Anforderungen finden Sie in Anlage 6. Die Klasse Raum ist bereits modelliert.
Angelehnt an: W24 Teil 1, Aufgabe 3 (Klassendiagramm ergänzen, geordnete Liste, Aggregation vs. Komposition, 25 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.
gebuehrGebucht [saldo >= 10] / Sperrhinweis senden.entry / … und exit / … im Zustand „Gesperrt“ ausgeführt werden.Der Lebenszyklus eines Exemplars soll als UML-Zustandsdiagramm modelliert werden:
Angelehnt an: W22 Teil 1, Aufgabe 4b (Zustände eines Objekts mit Bedingungen)
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.
entry / Klappe entriegeln eingetragen. Erläutern Sie, warum diese Aktion als entry-Aktion und nicht als Aktion an den einzelnen eingehenden Transitionen modelliert wurde.Angelehnt an: W25 Teil 2, Aufgabe 2 (Zustandsdiagramm eines Roboters ergänzen, 25 Punkte)
Für die Online-Anmeldung zu Veranstaltungen der Stadtbibliothek soll ein Use-Case-Diagramm erstellt werden.
«include»- und einer «extend»-Beziehung und geben Sie jeweils an, in welche Richtung der Pfeil zeigt.| Nr. | Sachverhalt | Beziehung |
|---|---|---|
| 1 | Bei jeder Anmeldung zu einer Veranstaltung wird geprüft, ob noch Plätze frei sind. | |
| 2 | Ist ein Termin ausgebucht, kann sich der Leser bei der Anmeldung auf Wunsch auf die Warteliste setzen lassen. | |
| 3 | Ehrenamtliche 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“. |
Ein Teammitglied hat zur Abholstation (Anlage 2) das folgende Use-Case-Diagramm entworfen.
| Nr. | Fehler | Korrektur |
|---|---|---|
| 1 | ||
| 2 | ||
| 3 | ||
| 4 |
| Feld | Inhalt |
|---|---|
| Name | |
| Akteur(e) | |
| Vorbedingung | |
| Standardablauf | |
| Alternative / Ausnahme | |
| Nachbedingung |
Angelehnt an: W21 Teil 1, Aufgabe 2a und S24 Teil 1, Aufgabe 3a (include/extend)
Für die App LeseLink wurden in einem Workshop Anforderungen gesammelt (Anlage 8).
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)
Das folgende Sequenzdiagramm zeigt, wie eine Ausleihe in der App verlängert wird.
verlaengern(exemplarNr) und sendeBestaetigung(leserNr) den Unterschied zwischen einer synchronen und einer asynchronen Nachricht.alt in diesem Diagramm bewirkt.Zur Dokumentation des Selbstverbuchungsterminals soll der Ablauf der Methode ausleihen() (Anlage 9) als Sequenzdiagramm dargestellt werden.
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)
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.
speichere(begriff, treffer) als asynchrone Nachricht modelliert wird.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)
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.
| Aufruf | Rückgabewert |
|---|---|
| gebuehrGesamt([4, 15, 0, 9], falsch) | |
| gebuehrGesamt([12], wahr) | |
| gebuehrGesamt([10, 11], falsch) | |
| gebuehrGesamt([], falsch) |
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
Angelehnt an: W22/S23 (Algorithmus wahlweise als Struktogramm), Belegsatz W22 (Struktogramm DIN 66261)
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.
40517287 einen Schreibtischtest des abgebildeten Struktogramms durch. Tragen Sie die Werte am Ende jedes Schleifendurchlaufs ein und geben Sie den Rückgabewert an.| i | gewicht | ziffer(nr, i) | summe |
|---|---|---|---|
| pz = | Rückgabe: | ||
Angelehnt an: W21 Teil 2, Aufgabe 1c (drei Fehler in einem Struktogramm finden und korrigieren)
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üfung | Aufgabe | Thema | Datei · Lösung |
|---|---|---|---|
| Winter 2021 | T1 A2a (14 P) | Use-Case-Diagramm Terminbuchung (include/extend) | 2021/winter/AE 2021 Winter Teil 1.pdf · keine Lösung |
| Winter 2021 | T1 A3b (7 P) | Klasse mit Attributen und Methoden | wie oben · keine Lösung |
| Winter 2021 | T2 A1a (15 P), A1c (6 P) | Aktivitätsdiagramm mit Partitionen; drei Fehler im Struktogramm | 2021/winter/AE 2021 Winter Teil 2.pdf · keine Lösung |
| Sommer 2022 | T1 A3a, A3b, A3ca (22 P) | Klassendiagramm mit Sichtbarkeiten, Beobachter-Muster, Sequenzdiagramm | 2022/sommer/AE 2022 Sommer Teil 1.pdf · keine Lösung |
| Winter 2022 | T1 A4a (14 P), A4b (11 P) | Aktivitätsdiagramm Raumbuchung (Partitionen, Teilung/Synchronisation); Zustandsdiagramm Raum | 2022/winter/AE 2022 Winter Teil 1.pdf · keine Lösung |
| Sommer 2023 | T1 A2bb (9 P), A3c (10 P) | Klassendiagramm mit abstrakter Klasse; Zustandsdiagramm Auslastungsampel | 2023/sommer/AE Sommer 2023 Teil 1.pdf · Lösung: AE Sommer 2023 Teil 1+2 Lösungen.pdf |
| Sommer 2023 | T2 A1 (25 P) | Aktivitätsdiagramm mit vier Partitionen aus einem Interview | 2023/sommer/AE Sommer 2023 Teil 2.pdf · Lösung wie oben |
| Winter 2023 | T1 A2b (6 P), A2c (15 P) | User Stories aus Use-Case-Diagramm; Aktivitätsdiagramm mit Parallelität | 2023/winter/AE Winter 2023 Teil 1.pdf · Lösung: AE Winter 2023 Teil 1 Lösungen.pdf |
| Winter 2023 | T2 A1 (25 P) | Sequenzdiagramm mit alt-Fragment | 2023/winter/AE Winter 2023 Teil 2.pdf · Lösung: AE Winter 2023 Teil 2 Lösungen.pdf |
| Sommer 2024 | T1 A2e (11 P), A3a (14 P) | Sequenzdiagramm App/Web-Service/Datenbank; Use-Case-Diagramm | 2024/sommer/AE Sommer 2024 Teil 1+2+3.pdf · Lösung: AE Sommer 2024 Teil 1 Lösungen.pdf |
| Sommer 2024 | T2 A1a (14 P) | Aktivitätsdiagramm mit drei Partitionen, Parallelität, Verzweigung | wie oben · Lösung: AE Sommer 2024 Teil 2 Lösungen.pdf |
| Winter 2024 | T1 A3 (25 P), A4a (15 P) | Klassendiagramm Streckennetz ergänzen, Aggregation/Komposition; Zustandsdiagramm Auslastung | 2024/winter/AE Winter 2024 Teil 1.pdf · keine Lösung |
| Winter 2025 | T1 A2a (18 P) | Use-Case-Diagramm mit Generalisierung, include, extend | 2025/winter/AE Winter 2025 Teil 1.pdf · Lösung: AE Winter 2025 Lösungserleuterungen.pdf (u-form) |
| Winter 2025 | T2 A2 (25 P) | Zustandsdiagramm Servierroboter ergänzen | 2025/winter/AE Winter 2025 Teil 2.pdf · Lösung wie oben |
| Sommer 2026 | T1 A2a (16 P) | Aktivitätsdiagramm Bewässerung (Teilung/Synchronisation, Verzweigung) | 2026/sommer/AE Sommer 2026 Teil 1.pdf · keine Lösung |
| Sommer 2026 | T2 A2a (12 P) | Klassendiagramm mit abstrakter Klasse, Vererbung, Aggregation | 2026/sommer/AE Sommer 2026 Teil 2.pdf · keine Lösung |