class: center, middle, first # Software-Entwicklung 2 ### UML --- # Fragen? > Fragen zur letzten Vorlesung? --- # Ist Modellierung/Modellbildung wichtig? * Generierung von Testcases * No Code/Low Code Anwendungen (Generierung von Frontend/Backend) * Production Line Software mit Generierung von Customization * Datenbank-Interfaces generieren * Modellgetriebene Entwicklung * .... > Mit einem Modell (maschinenlesbar) hat man alle Möglichkeiten --- # Einführung UML Sprache und Notation für: * Spezifikation * Konstruktion * Visualisierung * Dokumentation **Keine Methode!** --- # Themen - UML Strukturdiagramme (Structure Diagrams): * **Use-Case-Diagramm** * **Klassendiagramm** (Class Diagram) * **Objektdiagramm** (Object diagram) * Komponentendiagramm (Component Diagram) * Kompositionsstrukturdiagramm * Verteilungsdiagramm * Paketdiagramm Verhaltensdiagramme (Behaviour Diagrams): * **Sequenzdiagramm** (Sequence Diagram) * Aktivitätsdiagramm (Activity Diagram) * State Machine Diagram * Kommunikationsdiagramm --- # Use-Case Diagramme .left-column50[ > Use-Case-Diagramme verdeutlichen, **wer was** in einem beobachteten System **tut** ] .right-column50[
_Quelle: [UML 2.4.1 Superstructure][UML 2.4.1 Superstructure]_ _Quelle: [USECASE Intro] [USECASE Intro]_ ] --- # Use-Case Diagramm (Symbole) .left-column50[ ### Use-Case = Funktionalität bzw. Tätigkeit ] .right-column50[
] --- # Use-Case Diagramm (Symbole) .left-column50[ ### Actor/Aktor = Ausführende/r. Muss kein Mensch, sondern kann z.B. auch Hardware sein. Ein Aktor hat eine „Rolle“ im betrachteten Anwendungsfall (z.B. Sachbearbeiter, Administrator, etc) ] .right-column50[
] --- # Use-Case Diagram - Beispiel I .left-column50[ ### Assoziation Ein Aktor ist an einem Anwendungsfall beteiligt => Aktor und Anwendungsfall kommunizieren miteinander ### Generalisierung (Vererbung) Erbt ein Aktor von einem anderen, so heißt das dass er mit den gleichen Anwendungsfällen kommunizieren kann wie sein "Super-Aktor". ] .right-column50[
_Quelle: [UML 2.4.1 Superstructure][UML 2.4.1 Superstructure]_ ] ??? **Frage: Was bedeutet das Use-Case-Diagramm?** --- # Use-Case Diagramm - Generalisierung Use-Cases können verallgemeinert werden:
--- # Use-Case Diagramm - Include
* Das Verhalten des eingebunden Anwendungsfalles ist in den einbindenden Anwendungsfall eingefügt * Der "including-Use-Case" kommt nicht ohne den "included-Use-Case" aus * `<
>` = unbedingter Aufruf von Teilfunktionalität (in deutsch: included-Use-Case wird immer beim Aufruf des including-Use-Case mitaufgerufen) --- # Use-Case Diagramm - Extend
_Quelle: [UML 2.4.1 Superstructure][UML 2.4.1 Superstructure]_ * `<
>` = bedingter Aufruf einer Teilfunktionalität * extending-Use-Case kann nicht alleine aufgerufen werden * Extended-Use-Case kommt ohne extending-Use-Case aus ??? * Linker Use-Case: extended * Rechter Use-Case: extending --- # Use-Case Diagramm - Beispiel 2
_Quelle: https://de.wikipedia.org/wiki/Anwendungsfalldiagramm __ --- # Use-Case Diagramm - Beispiel 3
_Quelle: [UML 2.4.1 Superstructure][UML 2.4.1 Superstructure]_ --- # Klassendiagramme .left-column50[ > Beschreibt alle **Zusammenhänge/ Beziehungen** zwischen den verschiedenen **Klassen** eines Programms. >**Zentrales Diagramm**! ] .right-column50[
_Quelle: [UML 2.4.1 Superstructure][UML 2.4.1 Superstructure]_ _Quelle: [CLASSDIAGRAM Intro] [CLASSDIAGRAM Intro]_ ] --- # Klassendiagramm (Symbole) .left-column50[
_Quelle: [UML 2.4.1 Superstructure][UML 2.4.1 Superstructure]_ ] .right-column50[ * \+ für public * \# für protected * \~ für package * − für private ] --- # Klassendiagramme (Symbole) .left-column50[
] .right-column50[ * Abstrakt: _kursiv_ geschriebener Klassenname. * Oder "{abstract} Klassenname" ] --- # Klassendiagramme (Symbole) ### Notationsbeispiel
_Quelle nach: [OOSE UML 2 Notationsübersicht][OOSE]_ --- # Klassendiagramme (Symbole)
_Quelle: [OOSE UML 2 Notationsübersicht][OOSE]_ --- # Klassendiagramme (Symbole)
_Quelle: [OOSE UML 2 Notationsübersicht][OOSE]_ --- # Objektdiagramme .left-column50[ > Das Objektdiagramm soll verdeutlichen, wie die Attribute einer Klasse zu einem bestimmten Zeitpunkt (Snapshot) des Programms sind. ] .right-column50[
] --- # Objektdiagramme ### Unterschiede zum Klassendiagramm: * Nur Attribute, keine Methoden * Bezeichnungsvorschrift: * __**Objektname:Klassenname**__ (Wichtig: Unterstreichen nicht vergessen! Mit Unterstreichen wird deutlich gemacht, dass es sich um Objekte handelt. Dies gilt für _alle_ UML-Diagramme) * Bei unbekanntem Objektnamen: **:Klassenname** * Datentypen sind optional! --- # Sequenzdiagramme * Zeigt den Nachrichtenverlauf zwischen Objekten * Nachricht = Methode * Fokus auf zeitlichen Verlauf * Zeit verläuft von oben nach unten --- # Sequenzdiagramme - Beispiel
_Quelle: [UML 2.4.1 Superstructure][UML 2.4.1 Superstructure]_ --- # Wie finde ich meine Klassen?
```java class Nachricht { .... public String lesen() { ...} } ``` * Aus dem Use-Case Substantiv wird eine Klasse * Aus dem Use-Case Verb wird eine public Methode (nicht notwendigerweise in der gleichen Klasse: Beispiel Verzeichnis - Datei) --- # Wie verbinde ich meine Klassen zu einer Applikation?
* Aus Assoziationen im Modell werden Referenzen auf Objekte * Tischplatte und TischBein[] sind Referenzen auf Teile von Tisch die eigene Klassen sind. Quelle: https://info-wsf.de/assoziation-aggregation-und-komposition/ --- # Wer baut die Referenzen?
* Im Konstruktor werden Referenzen übergeben und in der Klasse gespeichert * Die Klasse baut sich die benötigten Referenzen selber (z.B. new Tischbein()). Quelle: https://info-wsf.de/assoziation-aggregation-und-komposition/ --- class: center, middle # Fragen? [UML 2.4.1 Superstructure]: http://www.omg.org/spec/UML/2.4.1/Superstructure/PDF [OOSE]: https://www.oose.de/wp-content/uploads/2012/05/UML-Notationsübersicht-2.5.pdf [USECASE Intro]: http://www.highscore.de/uml/usecasediagramm.html [CLASSDIAGRAM Intro]: http://www.highscore.de/uml/klassendiagramm.html