diff --git a/Writerside/images/image_87.png b/Writerside/images/image_87.png new file mode 100644 index 0000000..23c64eb Binary files /dev/null and b/Writerside/images/image_87.png differ diff --git a/Writerside/images/image_88.png b/Writerside/images/image_88.png new file mode 100644 index 0000000..69f438b Binary files /dev/null and b/Writerside/images/image_88.png differ diff --git a/Writerside/images/image_89.png b/Writerside/images/image_89.png new file mode 100644 index 0000000..6a57c4e Binary files /dev/null and b/Writerside/images/image_89.png differ diff --git a/Writerside/images/image_90.png b/Writerside/images/image_90.png new file mode 100644 index 0000000..cc95941 Binary files /dev/null and b/Writerside/images/image_90.png differ diff --git a/Writerside/images/image_91.png b/Writerside/images/image_91.png new file mode 100644 index 0000000..d17adf8 Binary files /dev/null and b/Writerside/images/image_91.png differ diff --git a/Writerside/images/image_92.png b/Writerside/images/image_92.png new file mode 100644 index 0000000..62e61c0 Binary files /dev/null and b/Writerside/images/image_92.png differ diff --git a/Writerside/images/image_93.png b/Writerside/images/image_93.png new file mode 100644 index 0000000..082283c Binary files /dev/null and b/Writerside/images/image_93.png differ diff --git a/Writerside/images/image_94.png b/Writerside/images/image_94.png new file mode 100644 index 0000000..6206eb3 Binary files /dev/null and b/Writerside/images/image_94.png differ diff --git a/Writerside/images/image_95.png b/Writerside/images/image_95.png new file mode 100644 index 0000000..ff1167c Binary files /dev/null and b/Writerside/images/image_95.png differ diff --git a/Writerside/images/image_96.png b/Writerside/images/image_96.png new file mode 100644 index 0000000..5067dc8 Binary files /dev/null and b/Writerside/images/image_96.png differ diff --git a/Writerside/images/image_97.png b/Writerside/images/image_97.png new file mode 100644 index 0000000..4bf2392 Binary files /dev/null and b/Writerside/images/image_97.png differ diff --git a/Writerside/images/image_98.png b/Writerside/images/image_98.png new file mode 100644 index 0000000..a80183e Binary files /dev/null and b/Writerside/images/image_98.png differ diff --git a/Writerside/topics/OOAD/UML.md b/Writerside/topics/OOAD/UML.md new file mode 100644 index 0000000..1830410 --- /dev/null +++ b/Writerside/topics/OOAD/UML.md @@ -0,0 +1,135 @@ +# UML (Unified Modeling Language) +## Categories +### Structure Diagrams +- dynamisches Verhalten der Elemente (bspw. Veränderung über Zeit) wird nicht beachtet + +- **[Class Diagram](UML.md#klassen-diagramme)** +- Package Diagram +- **[Object Diagram](UML.md#objekt-diagramme)** +- Component Diagram +- Profile Diagram +- Composition Structure Diagram +- Deployment Diagram + +### Behavior Diagram +- Kann Verhalten detailliert definieren +- Bestimmt, wie sich der Zustand eines Elements über Zeit verändert + +- **State Machine Diagram** +- **Use Case Diagram** +- Activity Diagram +- Interaction Diagram + - **Sequence Diagram** + - Interaction Overview Diagram + - Communication Diagram + - Timing Diagram + + + +## Klassen Diagramme +- Klassen werden als Boxen dargestellt mit + - Name + - Attribute + - Methoden + +### Aufbau Klassen-Diagramm +#### 1. Bereich: Name der Klasse + - beginnt mit Großbuchstaben + - ist ein Nomen + - sollte die Klasse beschreiben +#### 2. Bereich: Attribute der Klasse +Es gibt zwei Arten die Attribute darzustellen +- Inline, dabei muss angegeben werden: + - [Sichtbarkeit](UML.md#sichtbarkeit-von-attributen-methoden) + - Name + - Typ (primitiv / komplex) +- Durch [Assoziation](UML.md#association) + - bspw.: entries ![image_96.png](image_96.png) +#### 3. Bereich: Methoden der Klasse +- Haben 4 Elemente: + - [Sichtbarkeit](UML.md#sichtbarkeit-von-attributen-methoden) + - Name + - ggf Parameter + - Rückgabewert +- Bspw.: ```+ addEntry(int number, string description): void``` + +### Sichtbarkeit von Attributen / Methoden +- **Public (+)** + - Jedes Objekt anderer Klassen kann zugreifen +- **Protected (#)** + - Jedes Objekt der Klasse und der Unterklassen kann darauf zugreifen +- **Package (~)** + - Jedes Objekt, deren Klasse im selben Package ist, kann darauf zugreifen +- **Private (-)** + - Nur das Objekt selbst kann darauf zugreifen + +### Beispiel Klassen Diagramme: +- 3 Klassen (Student, Course, LectureHall) +- Student kann keine bis n Lectures beitreten +- Courses können in keine bis einer LectureHall stattfinden +- Student hat einen first name, last name, date of birth... +- etc. + +![image_87.png](image_87.png) + +## Objekt Diagramme +### Beispiel Objekt Diagramme: +- 4 Instanzen / Objekte vom Typ Student (Helen, Mike, Paul) +- Helen ist im Kurs oom und iprog +- Der Kurs db ist in der LectureHall lh2 +- ![image_88.png](image_88.png) + +## Relationship Overview +Klassen arbeiten zusammen über verschiedene Arten von Relationships + +- Relationships werden als Linie zwischen den Boxen dargestellt mit + - Name + - Leserichtung + - Multiplizität + - Sind als Intervall dargestellt _[Min..Max]_ + - Falls es kein Limit gibt: * + - Falls Min = Max: nur eins hinschreiben + - Bsp.: + - ```[0..1]```: Attribut hat 0 - 1 Wert + - ```[5]```: Attribut hat genau 5 Werte + - ```[*]```: Attribut hat 0 bis unendlich Werte + - ```[3..*]```: Attribut hat 3 bis unendlich Werte + +### Association +Wenn ein Objekt einer Klasse mit Objekten einer anderen Klasse arbeitet +![image_89.png](image_89.png) +- schwächstes Relationship + - Kommunikationspartner können auf Attribute und Methoden des Anderen zugreifen +- Bsp.: + - ![image_98.png](image_98.png) + +#### Navigatability +- **x**: Darauf ist nicht zugreifbar +- **>**: Darauf kann zugegriffen werden +- nix: undefined + + + +### Aggregation +Wenn eine Klasse eine Referenz zu Objekten einer anderen Klasse besitzt und teilt +![image_90.png](image_90.png) + +### Composition +Wenn eine Klasse Objekte einer anderen Klasse enthält +![image_91.png](image_91.png) + +### Generalization +Wenn eine Klasse ein Typ einer anderen Klasse ist +![image_92.png](image_92.png) + +## Erstellung von Klassen +### Appropriate Level of detail +Detail der Zeichnung sollte abhängig vom [SDLC](IntroductionOOAD.md#software-development-lifecycle-sdlc) sein. +1. keine Details (erste Analyse für die ersten Diskussionen des Domänen-Konzepts) + - ![image_93.png](image_93.png) +2. mehr Details (während späterer Analysen) + - ![image_94.png](image_94.png) +3. sehr detaillierte Beschreibung (detaillierte Analyse oder während Implementierung) + - ![image_95.png](image_95.png) + +## N-Ary Association