# 5.2 Softwaremodellierung ## Modellierungssprachen ### Übersicht ``` Modellierung - Sprachen ├── UML (Unified Modeling Language) ├── Struktogramme (Nassi-Shneiderman) ├── Flussdiagramme (Flowcharts) ├── Entity-Relationship (ER) └── Aktivitätsdiagramme ``` --- ## UML - Unified Modeling Language ### UML-Diagrammtypen ``` UML 2.5 - Diagrammübersicht ├── Strukturdiagramme │ ├── Klassendiagramm │ ├── Objektdiagramm │ ├── Komponentendiagramm │ ├── Verteilungsdiagramm │ └── Paketdiagramm └── Verhaltensdiagramme ├── Anwendungsfalldiagramm ├── Aktivitätsdiagramm ├── Zustandsdiagramm └── Sequenzdiagramm ``` --- ## Klassendiagramm ### Elemente ``` Klassendiagramm - Symbole ┌─────────────────────────┐ │ Klassenname │ ├─────────────────────────┤ │ - attribut: Typ │ ← Eigenschaften ├─────────────────────────┤ │ + methode(): Rückgabetyp│ ← Methoden └─────────────────────────┘ Sichtbarkeit: + public (öffentlich) - private (privat) # protected (geschützt) ~ package (Paket) ``` ### Beziehungen ``` Beziehungsarten ├── Assoziation ─────── ├── Aggregation ◇─────── (hat ein, kann auch ohne existieren) ├── Komposition ◆────── (hat ein, existiert nicht ohne) ├── Vererbung △─────── └── Implementierung ▷─── ``` ### Beispiel ``` ┌─────────────┐ ┌─────────────┐ │ Kunde │ 1 * │ Bestellung │ ├─────────────┤─────────│─────────────┤ │ -name │* │ -datum │ │ -adresse │ │ -status │ ├─────────────┤ ├─────────────┤ │ +bestellen()│ │ +erstellen()│ └─────────────┘ └─────────────┘ ``` --- ## Anwendungsfalldiagramm (Use Case) ### Elemente ``` Anwendungsfall-Diagramm ┌─────────────┐ │ Akteur │ └──────┬──────┘ │ │ (Verbindung) ▼ ┌─────────────────┐ │ Anwendungsfall │ └─────────────────┘ ``` ### Beispiel ``` ┌────────┐ │ Kunde │ └────┬───┘ │ ┌────┴────┐ │ │ ▼ ▼ ┌─────────┐ ┌─────────────────┐ │ Suchen │ │ Bestellen │ └─────────┘ └─────────────────┘ │ ┌───┴───┐ │ │ ▼ ▼ ┌────────┐ ┌──────────┐ │ Bezahlen│ │ Zurückgeben│ └────────┘ └──────────┘ ``` --- ## Aktivitätsdiagramm ### Elemente ``` Aktivitätsdiagramm - Symbole ┌─────────┐ ◇──────► │ Start │ (Objekt) └─────────┘ ▭ Entscheidung ▢ Parallel ┌─────────┐ ╱ ╲ │ Aktion │ ╱ Merge ╲ └─────────┘ ╲ ╱ ┌─────────┐ │ Ende │ └─────────┘ ``` ### Beispiel ``` ▭ ▼ ┌───────────┐ │ Bestellung │ │ starten │ └─────┬─────┘ │ ▼ ┌───────────┐ │ Ware │ │ verfügbar?│ └─────┬─────┘ │ ╱ ╲ Ja Nein ╲ ╱ ▼ ▼ ┌────────┐ ┌──────────┐ │Liefern │ │Benachrich-│ │ │ │tigen │ └───┬────┘ └────┬─────┘ │ │ └─────┬─────┘ ▼ ┌────────┐ │ Ende │ └────────┘ ``` --- ## Sequenzdiagramm ### Elemente ``` Sequenzdiagramm - Elemente ┌──────┐ ┌──────┐ │ Actor│ │ System│ └──┬───┘ └──┬───┘ │ │ │ Nachricht ──► │ │ │ ◄─────── Rückmeldung │ │ ``` ### Beispiel ``` ┌────────┐ ┌────────┐ ┌────────┐ │ Client │ │ Server │ │ Daten- │ │ │ │ │ │ bank │ └───┬────┘ └───┬────┘ └───┬────┘ │ │ │ │──Login()───►│ │ │ │──Query()───►│ │ │◄─────────── │ │◄─────────── │ │ │ │ │ ``` --- ## Struktogramme (Nassi-Shneiderman) ### Grundelemente ``` Struktogramme ┌──────────────────┐ │ Anweisung │ ← einfache Anweisung └──────────────────┘ ┌──────────────────┐ │ Verzweigung │ │ │ │ Wenn Bedingung │ │ dann Anweisung │ │ sonst Anweisung│ └──────────────────┘ ┌──────────────────┐ │ Schleife │ │ │ │ solange Bed. │ │ Anweisung │ └──────────────────┘ ``` ### Beispiel ``` ┌──────────────────────────────────────┐ │ Eingegebene Zahl ist negativ? │ ├──────────────────────────────────────┤ │ JA NEIN │ │ │ │ │ │ ┌─────┴─────┐ ┌────┴────┐ │ │ │ "Zahl ist │ │ "Zahl │ │ │ │ negativ" │ │ ist pos.│ │ │ └───────────┘ └─────────┘ │ └──────────────────────────────────────┘ ``` --- ## Flussdiagramme (Flowchart) ### Symbole ``` Flussdiagramm - Symbole ┌─────────┐ │ Oval │ → Start/Ende └─────────┘ ┌─────────┐ │ Rechteck│ → Aktion/Prozess └─────────┘ ┌────┐ │Raute│ → Entscheidung └────┘ → → Verbindungslinie ``` ### Beispiel ``` ┌───────┐ │ Start │ └───┬───┘ │ ▼ ┌────────┐ │ Zahl │ │ einlesen│ └───┬────┘ │ ▼ ┌───────────┐ │negativ? │ └─────┬─────┘ ╱ ╲ Ja Nein ╲ ╱ ▼ ▼ ┌─────────┐ ┌─────────┐ │ negativ │ │ positiv │ └────┬────┘ └────┬────┘ │ │ └─────┬──────┘ ▼ ┌───────┐ │ Ende │ └───────┘ ``` --- ## Werkzeuge ### Modellierungs-Tools | Tool | Typ | Plattform | |------|-----|----------| | PlantUML | Text-basiert | Alle | | Mermaid | Text-basiert | Alle | | draw.io | Visuell | Web | | Lucidchart | Professionell | Web | | Enterprise Architect | Professionell | Windows | | Visual Paradigm | Professionell | Alle | --- ## Querverweise - [[LF5-01-Anforderungsanalyse|Zurück: Anforderungsanalyse]] - [[LF5-03-Programmierung|Nächstes Thema: Programmierung]] --- *Stand: 2024*