Angenommen, wir haben eine Liste von Aufgabenentitäten und einen ProjectTaskUntertyp. Aufgaben können jederzeit geschlossen werden, es sei denn ProjectTasks, sie können nicht geschlossen werden, sobald sie den Status Gestartet haben. Die Benutzeroberfläche sollte sicherstellen, dass die Option zum Schließen eines gestarteten ProjectTaskObjekts niemals verfügbar ist. In der Domäne sind jedoch …
Ich versuche, die SOLID-Prinzipien von OOP zu verstehen, und bin zu dem Schluss gekommen, dass LSP und OCP einige Ähnlichkeiten aufweisen (um nicht mehr zu sagen). Das Open / Closed-Prinzip besagt, dass "Software-Entitäten (Klassen, Module, Funktionen usw.) für Erweiterungen offen, für Änderungen jedoch geschlossen sein sollten". LSP gibt in einfachen …
Die bestbewertete Antwort auf diese Frage nach dem Liskov-Substitutionsprinzip erfordert die Unterscheidung zwischen den Begriffen Untertyp und Unterklasse . Es wird auch darauf hingewiesen, dass einige Sprachen die beiden Sprachen miteinander verbinden, andere jedoch nicht. Für die objektorientierten Sprachen, die ich am besten kenne (Python, C ++), sind "Typ" und …
Ein bekannter Mangel der traditionellen Klassenhierarchien ist, dass sie schlecht sind, wenn es darum geht, die reale Welt zu modellieren. Als Beispiel soll versucht werden, Tierarten mit Klassen darzustellen. Dabei gibt es tatsächlich mehrere Probleme, aber eines, für das ich nie eine Lösung gesehen habe, ist, wenn eine Unterklasse ein …
Ich verfolgte diese hoch gestimmte Frage bezüglich eines möglichen Verstoßes gegen das Liskov-Substitutionsprinzip. Ich weiß, was das Liskov-Substitutionsprinzip ist, aber was mir immer noch nicht klar ist, kann schief gehen, wenn ich als Entwickler beim Schreiben von objektorientiertem Code nicht über das Prinzip nachdenke.
Angenommen, ich habe eine Schnittstelle FooInterfacemit der folgenden Signatur: interface FooInterface { public function doSomething(SomethingInterface something); } Und eine konkrete Klasse ConcreteFoo, die diese Schnittstelle implementiert: class ConcreteFoo implements FooInterface { public function doSomething(SomethingInterface something) { } } Ich möchte ConcreteFoo::doSomething()etwas Einzigartiges tun, wenn es einem bestimmten SomethingInterfaceObjekttyp übergeben wird …
Ich habe gelesen, dass das Substitutionsprinzip von Liskov verletzt wird, wenn: Voraussetzungen sind gestärkt, oder Nachbedingungen werden geschwächt Aber ich verstehe noch nicht ganz, wie diese beiden Punkte das Liskov-Substitutionsprinzip verletzen würden. Kann jemand bitte mit einem Beispiel erklären. Wie kann eine der oben genannten Bedingungen dazu führen, dass ein …
Ein gewisser Fehler von OOP wird mit einer Klasse Square angezeigt, die von Rectangle erbt, wobei Square logischerweise eine Spezialisierung von Rectangle ist und daher davon erben sollte, aber alles fällt auseinander, wenn Sie versuchen, die Länge oder Breite eines Quadrats zu ändern. Gibt es einen speziellen Begriff, um zu …
LSP gibt an, dass Klassen für ihre Basisklassen substituierbar sein sollten, was bedeutet, dass abgeleitete und Basisklassen semantisch äquivalent sein sollten. Aber gilt LSP auch für Klassen, die eine Schnittstelle implementieren? Mit anderen Worten, wenn eine von einer Klasse implementierte Schnittstellenmethode sich semantisch von den Erwartungen des Benutzers unterscheidet, würde …
Dieses Bild stammt aus Anwenden domänengesteuerter Designs und Muster: Mit Beispielen in C # und .NET Dies ist das Klassendiagramm für das Zustandsmuster, in dem a SalesOrderwährend seiner Lebensdauer verschiedene Zustände haben kann. Es sind nur bestimmte Übergänge zwischen den verschiedenen Zuständen zulässig. Jetzt ist die OrderStateKlasse eine abstractKlasse und …
Hintergrund: Ich entwickle ein Messaging-Framework. Dieser Rahmen ermöglicht: Senden von Nachrichten über einen Servicebus Abonnieren von Warteschlangen auf dem Nachrichtenbus Abonnieren von Themen auf einem Nachrichtenbus Wir verwenden derzeit RabbitMQ, aber ich weiß, dass wir in naher Zukunft auf Microsoft Service Bus (on Premise) umsteigen werden. Ich plane, eine Reihe …
Angenommen, ich habe: interface Thing { GetThing(); } class FastThing : Thing { public int GetThing() { return 1; } } class SlowThing : Thing { public int GetThing() { return GetThingFromDatabase(); } } Handelt es sich um eine Verletzung des Liskov-Substitutionsprinzips?
Inspiriert von dieser Antwort: Liskov Substitutionsprinzip erfordert , dass Voraussetzungen können in einem Subtyp nicht gestärkt werden. Nachbedingungen können in einem Subtyp nicht abgeschwächt werden. Invarianten des Supertyps müssen in einem Subtyp erhalten bleiben. Verlaufsbeschränkung (die "Verlaufsregel"). Objekte gelten nur durch ihre Methoden als veränderbar (Kapselung). Da Subtypen Methoden einführen …
Es gibt eine Klasse LinkedList mit Funktionen wie add_first (), add_last (), add_after (), remove_first (), remove_last () und remove (). Jetzt gibt es einen Klassenstapel, der Funktionen wie push (), pop (), peek () oder top () bereitstellt. Um diese Methoden zu implementieren, werden die LinkedList-Klassenmethoden erweitert. Handelt es …
Wenn Sie Circleextend habenEllipse , wird das Liskov-Substitutionsprinzip verletzt , da es eine Nachbedingung ändert: Sie können nämlich X und Y unabhängig voneinander festlegen, um eine Ellipse zu zeichnen, aber X muss für Kreise immer gleich Y sein. Aber liegt das Problem hier nicht darin, dass Circle der Untertyp einer …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.