# 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)