diff --git a/Writerside/in.tree b/Writerside/in.tree index a796127..f6e1ef0 100644 --- a/Writerside/in.tree +++ b/Writerside/in.tree @@ -18,7 +18,10 @@ - + + + + @@ -29,4 +32,5 @@ + \ No newline at end of file diff --git a/Writerside/topics/OOAD/UML.md b/Writerside/topics/OOAD/UML.md index 94f453d..165d5b5 100644 --- a/Writerside/topics/OOAD/UML.md +++ b/Writerside/topics/OOAD/UML.md @@ -3,9 +3,9 @@ ### Structure Diagrams - dynamisches Verhalten der Elemente (bspw. Veränderung über Zeit) wird nicht beachtet -- **[Class Diagram](UML.md#klassen-diagramme)** +- **[Class Diagram](UMLKlassenDiagramme.md)** - Package Diagram -- **[Object Diagram](UML.md#objekt-diagramme)** +- **[Object Diagram](UMLKlassenDiagramme.md#objekt-diagramme)** - Component Diagram - Profile Diagram - Composition Structure Diagram @@ -19,168 +19,10 @@ - **Use Case Diagram** - Activity Diagram - Interaction Diagram - - **Sequence Diagram** + - **[Sequence Diagram](UMLSequenzDiagramme.md)** - 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) - - -### Erstellung eines Klassen-Diagramms -1. Identifizierung der Klassen - - ![image_107.png](image_107.png) -2. Identifizierung der Attribute - - ![image_108.png](image_108.png) -3. Identifizierung von Generalisierungen - - ![image_109.png](image_109.png) -4. Identifizierung von Assoziationen und Aggregationen - - ![image_110.png](image_110.png) - -_Entstandenes UML-Diagramm ist nicht einzig korrektes!_ - -## 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) - -- Objekte existieren auch unabhängig -- Es können auch [mehrere Objekte](UML.md#relationship-overview) in einer Aggregation verbunden werden - -### Composition -Wenn eine Klasse Objekte einer anderen Klasse enthält - -![image_91.png](image_91.png) - -- Nur maximal eine Instanz -- Objekt kann nicht allein existieren - -### Generalization (Inheritance) -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 -- Relationship zwischen mehr als zwei Klassen - - Wird durch hohle Raute in der Mitte der Klassen dargestellt - - bspw.: ![image_99.png](image_99.png) - -### Implementierung in Code von N-Ary Association - - nicht existent in Standard-Programmiersprachen - -#### Using Two Binary Associations -![image_100.png](image_100.png) - -#### Using additional Class -![image_101.png](image_101.png) - -## Association Class -### Introduction Association Class -Erlaubt [N-Ary Associations](UML.md#n-ary-association) - -### Possible Implementations of Association Classes -![image_102.png](image_102.png) ![image_103.png](image_103.png) - - -## Abstract Class -![image_104.png](image_104.png) - -- nur im Kontext von Generalisierungsbeziehungen sinnvoll - -## Interface -![image_106.png](image_106.png) \ No newline at end of file diff --git a/Writerside/topics/OOAD/UMLKlassenDiagramme.md b/Writerside/topics/OOAD/UMLKlassenDiagramme.md new file mode 100644 index 0000000..4f03dd4 --- /dev/null +++ b/Writerside/topics/OOAD/UMLKlassenDiagramme.md @@ -0,0 +1,158 @@ +# 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](UMLKlassenDiagramme.md#sichtbarkeit-von-attributen-methoden) + - Name + - Typ (primitiv / komplex) +- Durch [Assoziation](UMLKlassenDiagramme.md#association) + - bspw.: entries ![image_96.png](image_96.png) +#### 3. Bereich: Methoden der Klasse +- Haben 4 Elemente: + - [Sichtbarkeit](UMLKlassenDiagramme.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) + + +### Erstellung eines Klassen-Diagramms +1. Identifizierung der Klassen + - ![image_107.png](image_107.png) +2. Identifizierung der Attribute + - ![image_108.png](image_108.png) +3. Identifizierung von Generalisierungen + - ![image_109.png](image_109.png) +4. Identifizierung von Assoziationen und Aggregationen + - ![image_110.png](image_110.png) + +_Entstandenes UML-Diagramm ist nicht einzig korrektes!_ + +## 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) + +- Objekte existieren auch unabhängig +- Es können auch [mehrere Objekte](UMLKlassenDiagramme.md#relationship-overview) in einer Aggregation verbunden werden + +### Composition +Wenn eine Klasse Objekte einer anderen Klasse enthält + +![image_91.png](image_91.png) + +- Nur maximal eine Instanz +- Objekt kann nicht allein existieren + +### Generalization (Inheritance) +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 +- Relationship zwischen mehr als zwei Klassen + - Wird durch hohle Raute in der Mitte der Klassen dargestellt + - bspw.: ![image_99.png](image_99.png) + +### Implementierung in Code von N-Ary Association +- nicht existent in Standard-Programmiersprachen + +#### Using Two Binary Associations +![image_100.png](image_100.png) + +#### Using additional Class +![image_101.png](image_101.png) + +## Association Class +### Introduction Association Class +Erlaubt [N-Ary Associations](UMLKlassenDiagramme.md#n-ary-association) + +### Possible Implementations of Association Classes +![image_102.png](image_102.png) ![image_103.png](image_103.png) + + +## Abstract Class +![image_104.png](image_104.png) + +- nur im Kontext von Generalisierungsbeziehungen sinnvoll + +## Interface +![image_106.png](image_106.png) \ No newline at end of file diff --git a/Writerside/topics/OOAD/UMLSequenzDiagramme.md b/Writerside/topics/OOAD/UMLSequenzDiagramme.md new file mode 100644 index 0000000..85c5fd4 --- /dev/null +++ b/Writerside/topics/OOAD/UMLSequenzDiagramme.md @@ -0,0 +1 @@ +# Sequenz Diagramme