Macht Software anhand von Maßzahl messbar bzw. vergleichbar.
Wir schauen auf Qualitäts-Metriken v. Programmcode
Koppelung
Kohäsion
# Koppelung
Maß der Abhängigkeit zwischen Softwareelementen.
Anstreben von: Loose Coupling
Es gibt 2 Stufen von Koppelung:
Tight Coupling
”starke Koppelung”
tritt auf, wenn eine Klasse direkt auf Implementierungen anderer Klassen zugreift = Wartbarkeit wird beeinträchtigt
Loose Coupling
”schwache Koppelung”
Klassen haben nur minimale Kenntnisse zu anderen Klassen
Zugriff auf Funktionalität läuft über Interfaces = flexibel & wartungsfreundlich
2 unterschiedliche Arten v. Koppelung:
Interaktionskoppelung
Maß an Funktionalität eines anderen Objekt, Klasse
tritt auf, wenn Objekte einer Klasse, Methoden von Objekten anderer Klassen aufrufen
Vererbungskoppelung
Ausmaß der Abhängigkeit der erbenden & der Basisklasse (falsche Vererbung)
tritt auf, wenn ein Objekt einer Klasse direkt auf ein anderes Objekt einer Klasse verweist (erbt)
# Interaktionskoppelung
Passiert bei direkter Abhängigkeit von einer Klasse auf eine andere Klasse.
Das macht beide Klassen voneinander abhängig.
Einfache Beispiele:
# Beispiel ohne Interaktionskoppelung
Umgehen von Interaktionskoppelung durch Observer-Pattern (siehe Skizze).
⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠ You can decompress Drawing data with the command palette: ‘Decompress current Excalidraw file’. For more info check in plugin settings under ‘Saving’
Wenn von einer Basisklasse die geerbten Methoden in den Kindklassen zur Gänze überschrieben werden verliert Vererbung ihren Sinn = Vererbungskoppelung tritt auf.
Mithilfe von Objektkomposition kann man diese auflösen.
Beispiel:
Hier ist Fly() unpassend für die RubberDuck beispielsweise.
Es entsteht also eine unnötige Abhängigkeit, weil RubberDuck dieses Verhalten nicht braucht/umsetzen kann.
Guter Lösungsansatz - Objektkomposition.
Einfach erweiterbar & wartungsfreundlich. Der bestehende Code muss bei Erweiterung nicht geändert werden.
Verwendung von Objektkomposition/“Strategie-Pattern” - Verhalten von Objekt kann zur Laufzeit verändert werden. Duck Klasse weist “Strategien” (Quack, Fly) per interfaces dynamisch zu.
⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠ You can decompress Drawing data with the command palette: ‘Decompress current Excalidraw file’. For more info check in plugin settings under ‘Saving’