Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| de:modul:ffit:3-jahr:java:learningunits:lu16:b [2026/01/06 00:53] – apeter | de:modul:ffit:3-jahr:java:learningunits:lu16:b [2026/01/06 10:08] (aktuell) – apeter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== LU16b - Prinzipien 3 (OCP, Law of Demeter) ====== | ====== LU16b - Prinzipien 3 (OCP, Law of Demeter) ====== | ||
| - | Wir betrachten dieses Mal die Prinzipien **OCP** und das **Law of Demeter**. | + | Wir betrachten dieses Mal die Prinzipien **OCP** und das **LoD**. |
| ===== Prinzipien ===== | ===== Prinzipien ===== | ||
| Zeile 14: | Zeile 14: | ||
| * //YAGNI (You Ain’t Gonna Need It)// | * //YAGNI (You Ain’t Gonna Need It)// | ||
| * //SoC (Separation of Concerns)// | * //SoC (Separation of Concerns)// | ||
| - | * **Law of Demeter | + | * **LoD (Law of Demeter |
| P.S.: SOLID steht für SRP, OCP, LSP, ISP, DIP | P.S.: SOLID steht für SRP, OCP, LSP, ISP, DIP | ||
| Zeile 22: | Zeile 22: | ||
| Das Open/Closed Principle besagt, dass ein Programm, zwar offen sein soll für (sinnvolle) Weiterentwicklung, | Das Open/Closed Principle besagt, dass ein Programm, zwar offen sein soll für (sinnvolle) Weiterentwicklung, | ||
| - | Als Faustregel kann man Klassen tendenziell schliessen, während Interfaces geöffnet werden. Der Modifier '' | + | Schlecht wäre in diese Hinsicht zum Beispiel ein zentrales Switch-Case-Konstrukt, |
| + | |||
| + | Als Faustregel kann man Klassen tendenziell schliessen, während Interfaces geöffnet werden. Der Modifier '' | ||
| Der Modifier '' | Der Modifier '' | ||
| - | ==== Law of Demeter | + | ==== LoD ==== |
| - | Das Law of Demeter | + | Das Law of Demeter |
| + | |||
| + | Ein konkretes Beispiel finden Sie auf https:// | ||
| + | |||
| + | Ein starkes Indiz, dass dieses Prinzip verletzt wurde sind (lange) Getter-Ketten. | ||
| <code java> | <code java> | ||
| - | get().get(); | + | customer.getCart().getItems().get(0).getProduct().getPrice(); |
| </ | </ | ||
| + | |||
| + | Solche Fälle sollten in mehrere kleinere Methoden in ihren jeweiligen Entitäten aufgeteilt werden, so dass keine Klasse alle Entitäten der Kette kennen muss. | ||