<sub class="descriptionSection">02-04-2025 02:00:pm // #Tag // [[Programmierung]]</sub>
____
Die **U**nified **M**odelling **L**anguage wird genutzt um komplexe Sachverhalte als Bilder darzustellen und zu dokumentieren. In Java wird hauptsächlich das UML-Klassen Diagramm verwendet, es gibt allerdings auch andere Diagramm arten.
## Klassen
Eine Klasse in UML wird durch ein Rechteck dargestellt, welches als Überschrift den Klassen namen trägt und zwei Abschnitte, jeweils für Felder und Methoden hat.
![[../../Assets/Pasted image 20250402141121.png]]
### Extenden von Klassen
Eine Klasse wird extended in dem ein Solider Pfeil von der "Child Class" zur "Parent Class" geht:
```mermaid
classDiagram
class Person{
+ name:string
+ birthYear:Date
+ getName():string
+ Person()
}
class Child{
- height: double
+ getHeight():double
}
Child --|> Person
```
### Interfaces
Eine Klasse deklariert das sie ein Interface implementiert in dem ein gestrichelter Pfeil von dem Interface zur Klasse gemalt wird:
```mermaid
classDiagram
class Person{
+ name:string
+ birthYear:Date
+ getName():string
+ Person()
}
class Child{
- height: double
+ getHeight():double
}
class Human{
+ name:string
+ getName():string
}
<<Interface>> Human
Child --|> Person
Person ..|> Human
```
### Abstract Classes
Abstrakte Klassen werden Definiert und wie normale Klassen extended:
```mermaid
classDiagram
class Person{
+ name:string
+ birthYear:Date
+ getName() string*
+ Person()
}
<<Abstract>> Person
class Child{
- height: double
+ getHeight():double
}
class Adult{
- height: double
+ getHeight():double
}
class Human{
+ name:string
+ getName():string
}
<<Interface>> Human
Child --|> Person
Adult --|> Person
Person ..|> Human
```
> [!NOTE] Abstrakte Methoden
> Abstrakte Methoden werden in dieser Art von Diagramm als Kursiv angezeigt, normalerweise definiert man sie aber so in einem UML Diagram:
> `methodName(){abstract}`
## Pfeiltypen und bedeutungen
### Ist-ein beziehung
Eine Ist-ein beziehung beschreibt eine Klasse mit Vererbung:
![[../../Assets/Pasted image 20250402144902.png]]
Beispiel:
```mermaid
classDiagram
class a
class b
a --|>b
```
A erbt von B
### HAT EIN Beziehung
Eine HAT EIn Beziehung beschreibt das eine Klasse eine Schnittstelle verwendet
### IMPLEMENTS Beziehung
Eine Implements Beziehung wird genutzt um zu beschreieben das eine Klasse eine Schnittstelle implementiert:
```mermaid
classDiagram
class a
<<interface>> a
class b
b ..|> a
```
```mermaid
classDiagram
class Auto{
-tankvolumen:double = 70
-tankinhalt:double = 7.0
-verbrauchPro100km:double = 7.0
+Auto()
+getTankvolumen() double
+getVerbrauchPro100km() double
+getTankinhalt() double
+istErreichbar(kilometer:double) boolean
+tanken(liter:double)
+fahren(strekckeKM:double) double
}
```
```mermaid
classDiagram
Person <|-- Lehrkraft
Person <|-- Schüler
Schüler <|-- Teilzeitschüler
Schüler <|-- Vollzeitschüler
class Person{
- Name:string
- Adresse:string
- Jahrgang:Date
+ Person(Name:string, Adresse:string, Jahrgang:String)
}
class Schüler{
- Schulform
}
class Teilzeitschüler{
- Arbeitgeber
}
class Vollzeitschüler{
}
class Lehrkraft{
}
```
```mermaid
classDiagram
class Rechteck{
-x: double
-y: double
-seteinlaengeA: double
-seitenlaengeB: double
+getter() double
+setter() void
+getFlaeche() double
}
Rechteck <|-- Quadrat
class Quadrat{
-seitenlaengeA: double
+setA() void
+getFlaeche() double #Nur mit seitenlaengeA
}
```
```mermaid
classDiagram
class Person{
-vorname:string
-nachname:string
+ausgeben() void
}
class Dozent
class Student{
-matrikelNr:int
+ausgeben() void
}
class Promotionsstudent{
-doktorVater:string
+ausgeben() void
}
Person<|--Student
Person<|--Dozent
Student<|--Promotionsstudent
```