This commit is contained in:
David Schirrmeister
2024-06-09 21:47:55 +02:00
parent cc0ef991fc
commit 5d0ad57e2e
41 changed files with 566 additions and 1 deletions

View File

@ -0,0 +1,55 @@
# Agile Design
> [UML](UML.md) ist nicht Software Design
- Diagramme repräsentieren einen Teil des SW-Designs
- Source Code
- Design ist ein abstraktes Konzept
- Struktur und Form des Projekts
- Detaillierte Beschreibung der Klassen, Module, Methoden
## What goes wrong with Software
- Im besten Fall
- Projekt startet mit klarem Bild, was das System tun soll
- Design ist ein Bild in den Köpfen der Devs
- Mit Glück: Klarheit des Designs schafft es bis zum ersten Release
- Häufig geht vorher was schief
- Programm wird schwieriger wartbar
- kleinste Änderungen werden kompliziert
- Neudesign geht meistens schief
- Das alte System wächst weiter, neues muss mithalten
- Probleme im neuen Design entstehen
- Software geht kaputt, wenn es anfängt mit Design Smells:
## Design Smells
### Rigidity (Steifigkeit)
- Das Design ist schwer zu ändern
- Code ist schwer zu ändern
- kleine Änderungen erzeugen Probleme in dependent Modulen
- je mehr Module geändert werden müssen, desto mehr steif ist das Design
- Ergebnis:
- Änderungen dauern deutlich länger als gedacht
### Fragility (Zerbrechlichkeit)
- Das Design ist einfach kaputtzumachen
- Neue Probleme sind in unvorhergesehenen Umgebungen
- Lösen dieser Probleme führt zu neuen Problemen
- Fragilität wird mit der Zeit höher
- Ist sehr normal
- Module sind bekannt dafür, dass sie repariert werden müssen
- Sind auf der Bug Liste
- Niemand will sich der Aufgabe widmen
### Immobility
- Das Design ist kaum neu zu benutzen
- Enthält Teile, die in anderen Systemen sinnvoll wären
- Risiko involviert in Aufteilung
- Ungünstig, aber sehr häufig
### Viscosity
- Es ist schwer das Richtige zu tun. Zwei Formen:
1. Viskosität der Software
- Devs entscheiden zwischen Designerhaltung und einfacher Lösung
- Design sollte design erhaltende Änderungen fördern
2. Viskosität der Umgebung
- h

View File

@ -0,0 +1,105 @@
```mermaid
classDiagram
class Person
<<abstract>> Person
Person : - name
Person : - adress
class Tourguide
Tourguide : - certifiedAdventurePackages <AdventurePackage*> vector
class Participant
class AdventurePackage
AdventurePackage : - title
AdventurePackage : - description
class Accommodation
Accommodation : - name
Accommodation : - adress
class Trip
Trip : - startingDate
class Booking
Booking : - payed
Booking : - dateOfBooking
Tourguide --|> Person
Participant --|> Person
Trip "1..*" *-- "1..*" AdventurePackage
Trip "*" *-- "1" Accommodation
Participant "1..*" -- Booking
Booking "1..*" -- "1..*" Trip
Tourguide "1" --* "*" Trip
Tourguide "1..*" -- "1..*" AdventurePackage
```
```mermaid
sequenceDiagram
actor Tom as Tom : Human
participant LibGui as libGUI
participant Lib as Lib
participant CTom as Tom : Customer
activate LibGui
Tom -) LibGui: name = "HP1"
LibGui ->>+ Lib: getEbook("HP1")
create participant EBook as HP1 : EBook
Lib -->>+ EBook: <<create>> EBook("HP1", 3.99)
note right of EBook: Im Konstruktor von EBook fehlt<br/>die Zuweisung des Preise.<br/>Hier ergänzt
EBook --)- Lib: return
Lib --)- LibGui: return
LibGui --)+ Tom: return
Tom -)- LibGui: clickBorrowButton
LibGui ->>+ Lib: getEbook("HP1")
Lib ->>+ CTom: borrow("HP1")
CTom ->>+ EBook: getPrice()
EBook --)- CTom: return 3.99
CTom ->> CTom: charge(3.99)
CTom --)- Lib: return
Lib --)- LibGui: return
LibGui ->>+ EBook: generateLink()
EBook --)- LibGui: return link
LibGui ->>+ CTom: showLink()
CTom --)- LibGui: return
LibGui --) Tom: return
destroy EBook
LibGui -x EBook: <<destroy>>
destroy CTom
LibGui -x CTom: <<destroy>>
destroy Lib
LibGui -x- Lib: <<destroy>>
destroy LibGui
Tom --x LibGui: <<destroy>>
```
```mermaid
classDiagram
class Kreis{
<<abstract>>
- radius : ft
+ setRadius()
}
class Ellipse{
- breite : ft
- hoehe : ft
+ setBreite()
+ setHoehe()
}
Ellipse --|> Kreis
```