...
 
Commits (2)
......@@ -481,11 +481,21 @@ Paradoxe Anforderungen zeigen, dass gutes Design eine Kunst ist.
auch nur diese eine Klasse betrifft.
Allgemein sollte ein Klasse/Paket möglichst wenig interne Details
nach außen preisgeben.
\item Dazu gehört: Behalten Klassen ihre internen Datenstrukturen für sich?
Eine Klasse, die eine Liste von Objekten verwaltet,
sollte selbst Methoden zum Hinzufügen, Löschen, u.\,s.\,w.\ bereitstellen.
Sie sollte \emph{keine} veränderbare Referenz auf die Liste nach außen geben
und ihre Aufrufer die Liste verändern lassen.
Für Java siehe z.\,B.~\href{https://docs.oracle.com/javase/10/docs/api/java/util/Collection.html#unmodview}{Unmodifiable View Collections}.
\item Lose Koppelung zwischen Klassen/Paketen?
Abhängigkeiten zu fremden Schnittstellen
machen spätere Änderungen aufwendiger.
Im UML Diagramm sollten möglichst wenig Verbindungen
Im UML-Diagramm sollten möglichst wenig Verbindungen
zwischen Klassen zu sehen sein.
\item Keine indirekten Abhängigkeiten?
Wenn eine Abhängigkeit zwischen Objekten sein muss, soll sie direkt und explizit sein.
Sich stattdessen an Referenzen entlangzuhangeln sieht auf dem Papier aus wie lose Kopplung,
koppelt aber tatsächlich mehr Klassen enger aneinander.
Siehe auch \href{http://www.ccs.neu.edu/research/demeter/demeter-method/LawOfDemeter/general-formulation.html}{Law of Demeter}.
\item Starke Kohäsion innerhalb von Klasse/Paket?
Wenn Methoden einer Klasse eigentlich unabhängig voneinander sind,
......@@ -521,10 +531,15 @@ Paradoxe Anforderungen zeigen, dass gutes Design eine Kunst ist.
Das impliziert:
Eine Klasse/Paket/Methode sollte für sich verständlich sein,
ohne dass Kontext notwendig ist.
\item Sind Methoden frei von unerwarteten Nebeneffekten?
Eine Methode, die Informationen aus einem Objekt zurückgibt,
sollte nichts Wesentliches am Objektzustand verändern.
Auch eine Methode, die dazu dient, den Objektzustand zu verändern,
sollte nur eine überschaubare Änderung durchführen.
Siehe auch \href{https://en.wikipedia.org/wiki/Command%E2%80%93query_separation}{Command-query separation}
\end{itemize}
Ähnlich zu den üblichen Entwurfsmustern,
gibt es auch Anti-Entwurfsmuster.
Ähnlich zu den üblichen Entwurfsmustern gibt es auch Anti-Entwurfsmuster.
Also Muster, die man im Entwurf erkennen kann,
die praktisch immer zu Problemen führen.
Ein paar Beispiele, die in vergangenen PSE-Projekten auftraten:
......