Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:modul:ffit:3-jahr:java:learningunits:lu05:b [2025/09/15 12:53] apeterde:modul:ffit:3-jahr:java:learningunits:lu05:b [2025/09/16 06:46] (aktuell) apeter
Zeile 1: Zeile 1:
 ====== LU05b - Prinzipien 2 (LSP, ISP) ====== ====== LU05b - Prinzipien 2 (LSP, ISP) ======
  
-==== Prinzipien ====+===== Prinzipien =====
  
   * //DRY (Don’t Repeat Yourself)//   * //DRY (Don’t Repeat Yourself)//
Zeile 18: Zeile 18:
 Wir fokussieren uns dieses Mal auf **LSP** und **ISP**. Wir fokussieren uns dieses Mal auf **LSP** und **ISP**.
  
-=== LSP ===+==== LSP ====
  
 Das Liskov Substitution Principle besagt, dass ein Programm, das Objekte einer Basisklasse T verwendet, auch mit Objekten der davon abgeleiteten Klasse S korrekt funktionieren muss, ohne dabei das Programm zu verändern. Das Liskov Substitution Principle besagt, dass ein Programm, das Objekte einer Basisklasse T verwendet, auch mit Objekten der davon abgeleiteten Klasse S korrekt funktionieren muss, ohne dabei das Programm zu verändern.
  
 Folgendes Beispiel verletzt das LSP, weil ein Kreis zwar eine Spezialform einer Ellipse ist, aber in diesem Fall nicht mit den Eigenschaften der Klasse ''Ellipse'' kompatibel ist.''setRadiusX()'' und ''setRadiusY()'' können nach wie vor auf dem Kreis aufgerufen werden und dadurch unerwünschte Nebeneffekte hervorrufen. Folgendes Beispiel verletzt das LSP, weil ein Kreis zwar eine Spezialform einer Ellipse ist, aber in diesem Fall nicht mit den Eigenschaften der Klasse ''Ellipse'' kompatibel ist.''setRadiusX()'' und ''setRadiusY()'' können nach wie vor auf dem Kreis aufgerufen werden und dadurch unerwünschte Nebeneffekte hervorrufen.
 +
 {{:de:modul:ffit:3-jahr:java:learningunits:lu05:uml_example_lsp.png|}} {{:de:modul:ffit:3-jahr:java:learningunits:lu05:uml_example_lsp.png|}}
  
 Besser wäre es die Klasse ''Circle'' direkt von ''Shape'' erben zu lassen. Besser wäre es die Klasse ''Circle'' direkt von ''Shape'' erben zu lassen.
  
-=== ISP === +==== ISP ==== 
-Das Interface Segregation Principle besagt, dass Interfaces nur logisch untrennbare Methoden vorgeben sollten. Das heisst in diesem Beispiel, die Methoden ''printDocument'', ''scanDocument'' und ''faxDocument'' sollten nur in einem gemeinsamen Interface definiert werden, falls sämtliche (zukünftige) Implementierungen alle Methoden zwingend benötigen. +Das Interface Segregation Principle besagt, dass Interfaces nur logisch untrennbare Methoden vorgeben sollten. Das heisst in diesem Beispiel, die Methoden ''printDocument'', ''scanDocument'' und ''faxDocument'' sollten nur in einem gemeinsamen Interface definiert werden, falls sämtliche (zukünftige) Implementierungen alle Methoden zwingend benötigen. 
 {{:de:modul:ffit:3-jahr:java:learningunits:lu05:uml_example_isp_1.png|}} {{:de:modul:ffit:3-jahr:java:learningunits:lu05:uml_example_isp_1.png|}}
  
-Ist dies nicht der Fall, so sollte man die Interfaces aufteilen. Dadurch können zukünftige Klassen nur einzelne Interfaces implementieren und sind nicht gezwungen irgendwelche Dummy-Implementierungen zu erstellen.  +Ist dies nicht der Fall, so sollte man die Interfaces aufteilen. Dadurch können zukünftige Klassen nur einzelne Interfaces implementieren und sind nicht gezwungen irgendwelche Dummy-Implementierungen zu erstellen.  
 {{:de:modul:ffit:3-jahr:java:learningunits:lu05:uml_example_isp_2.png|}} {{:de:modul:ffit:3-jahr:java:learningunits:lu05:uml_example_isp_2.png|}}
  
  
  • de/modul/ffit/3-jahr/java/learningunits/lu05/b.1757933633.txt.gz
  • Zuletzt geändert: 2025/09/15 12:53
  • von apeter