Thread Liskovsches Sommerloch (19 answers)
Opened by rosti at 2025-06-25 09:13

rosti
 2025-06-25 09:13
#197072 #197072
User since
2011-03-19
3617 Artikel
BenutzerIn
[Homepage]
user image
Auf Wikipedia findet sich ein aufschlußreicher Artikel
https://de.wikipedia.org/wiki/Liskovsches_Substitu...

dem nach eine Klasse Kreis als Unterklasse von Ellipse unzulässig ist weil Klasse Ellipse eine Methode hat welche beide Halbachsen verändert, weil dann der Kreis kein Kreis mehr ist. Die im Artikel beschriebene Lösung ist dann noch verwirrender.

Also, ich würde mal sagen, daß der Kreis durchaus eine Subklasse von Ellipse sein darf, ggf. auch umgekehrt (je nach Aufgabenstellung) und daß man die Methoden die nicht in das Liskovsche Substitionsprinzip passen, einfach überschreibt. Darüber hinaus wäre auch noch das Prinzip der Polymorphie, d.h., daß die Ellipse 2 Eigenschaften hat in denen die Länge der Halbachsen (x,y) stehen, der Kreis jedoch nur eine(r). So kann die Methode scale($x, $y) prüfen, ob eine Ellipse vorliegt oder ein Kreis und muß nicht einmal überschrieben werden.


Code (perl): (dl )
1
2
my $el = Ellipse->new(x => $x, y => $y);
my $kr = Kreis->new(r => $r);



Oder es wird für die 2. Halbachse ein Default festgelegt:

Code (perl): (dl )
1
2
3
4
5
sub scale{
  my $self = shift;
  my $x = shift;
  my $y = shift || $x;
}


Ganz analog wäre meine Vorgehensweise bei einer Methode draw(); ohne gegen irgendwelche OOP-Prinzipien zu verstoßen.


Und sicher gibts noch weitere Möglichkeiten Liskov gerecht zu werden?
Last edited: 2025-06-25 10:43:42 +0200 (CEST)
http://blog.rolfrost.de/

The art of steam.

View full thread Liskovsches Sommerloch