Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:modellierung:warum:start [26.10.2021 07:40] – [Wann ist ein Klassenentwurf "gut"?] Mareike Nutz | faecher:informatik:oberstufe:modellierung:warum:start [26.10.2021 08:56] (aktuell) – [Wann ist ein Klassenentwurf "gut"?] sbel | ||
---|---|---|---|
Zeile 18: | Zeile 18: | ||
Ein Klassenentwurf ist also " | Ein Klassenentwurf ist also " | ||
- | * **Kohäsion**: Die Kohäsion | + | ==== Kohäsion ==== |
- | * **Kopplung**: Die Eigenschaft " | + | |
+ | Die **Kohäsion** einer Klasse definiert ihren logischen Zusammenhalt als Einheit. Erkennen kann man das daran, wie deutlich Sie sich von anderen Klassen des Modells abgrenzt, aber auch daran, dass ihre Methoden für klar umrissene Aufgaben zuständig sind. Das **Single-Responsibility-Prinzip** besagt, dass jede Klasse | ||
+ | |||
+ | ==== Kopplung | ||
+ | |||
+ | Die Eigenschaft " | ||
+ | |||
+ | Abhängigkeiten bezieht sich damit sowohl auf die Zahl der Assoziationen (Kontrollkopplung) als auch auf die Komplexität der Bindung (Datenkopplung)((Und noch auf ein paar Aspekte mehr...)). | ||
+ | |||
+ | Schnittstellen zwischen Klassen sollten | ||
===== Grundregeln für gute Klassenentwürfe ===== | ===== Grundregeln für gute Klassenentwürfe ===== | ||
Zeile 29: | Zeile 38: | ||
==== Kapselung und Geheimnisprinzip ==== | ==== Kapselung und Geheimnisprinzip ==== | ||
- | Klassenvariablen niemals öffentlich (public) deklarieren. Zugriff auf Attribute von anderen nur über sondierende und verändernde Methoden (get- und set-Methoden) möglich. Änderungen am internen Aufbau der Klasse haben keine Auswirkungen auf andere Klassen, welche mit dieser assoziiert sind. | + | **Klassenvariablen niemals öffentlich** (public) deklarieren. Zugriff auf Attribute von anderen nur über **sondierende** und **verändernde** Methoden (get- und set-Methoden) möglich. Änderungen am internen Aufbau der Klasse haben keine Auswirkungen auf andere Klassen, welche mit dieser assoziiert sind. |
- | + | ||
- | Die Verwaltung der Position der Münzen in unserem Beispiel ist in Verantwortung der Muenzen-Klasse. Sollte die Verwaltung intern später auf ein Array mit zwei Feldern für x- und y-Koordinate umgestellt werden, so müssten bei direktem Zugriff von außen alle zugreifenden Klassen mitverändert werden - wenn der Zugriff über Getter- und Setter-Methoden gekapselt ist, müssen die assoziierten Klassen nichts über den internen Aufbau der Muenzen-Klasse wissen. Man spricht vom **Geheimnisprinzip**. | + | |
- | Anhand von Zuständigkeiten modellieren heißt, dass eine Klasse einen logisch sinnvollen und klar abgegrenzten Aufgabenbereich besitzt. Im Murmelspiel nimmt das Loch lediglich Murmeln auf, verwaltet aber nicht deren Koordinaten. | + | |
+ | Die Verwaltung der Position der Münzen in unserem Beispiel ist in Verantwortung der Muenzen-Klasse. Sollte die Verwaltung intern später auf ein Array mit zwei Feldern für x- und y-Koordinate umgestellt werden, so müssten bei direktem Zugriff von außen alle zugreifenden Klassen mitverändert werden - wenn der Zugriff über Getter- und Setter-Methoden gekapselt ist, müssen die assoziierten Klassen nichts über den internen Aufbau der '' | ||
==== Klar abgegrenzte Klassen-Zuständigkeiten ==== | ==== Klar abgegrenzte Klassen-Zuständigkeiten ==== | ||
- | Entlang Zuständigkeiten zu modellieren bedeutet, dass eine Klasse einen logisch sinnvollen und klar abgegrenzten Aufgabenbereich besitzt. Im Münz-Schnipssspiel | + | **Entlang Zuständigkeiten** zu **modellieren** bedeutet, dass eine **Klasse** einen logisch sinnvollen und klar abgegrenzten Aufgabenbereich besitzt. Im Münz-Schnipsspiel |
==== Semantische, | ==== Semantische, | ||
- | Dasselbe, was für die Aufteilung des Problems in Klassen gilt, gilt innerhalb der Klassen für die Methoden: Jede Methode sollte eine klare Aufgabe haben - und einen Namen, der die Aufgabe auch verdeutlicht. | + | Dasselbe, was für die Aufteilung des Problems in Klassen gilt, gilt innerhalb der Klassen für die Methoden: Jede Methode sollte eine klare Aufgabe haben - und einen Namen, der diese Aufgabe auch verdeutlicht. |
- | Die Klasse Spieler hat zwei Methoden - "muenzeEinwerfen" | + | Die Klasse Spieler hat zwei Methoden - '' |
==== Keine Redundanz (DRY-Prinzip) ==== | ==== Keine Redundanz (DRY-Prinzip) ==== | ||
- | Man sollte es tunlichst vermeiden, identischen, | + | Man sollte es tunlichst vermeiden, identischen, |
In unserem Beispiel gibt es eine Methode '' | In unserem Beispiel gibt es eine Methode '' | ||