Vererbung ist eine Möglichkeit, den Code vorhandener Objekte wiederzuverwenden oder einen Subtyp aus einem vorhandenen Objekt oder aus beiden zu erstellen, abhängig von der Unterstützung der Programmiersprache.
Wann sollten Sie Vererbungsmuster gegenüber Mixins in dynamischen Sprachen bevorzugen? Mit Mixins meine ich das eigentliche richtige Einmischen, wie das Einfügen von Funktionen und Datenelementen in ein Objekt zur Laufzeit. Wann würden Sie beispielsweise die prototypische Vererbung anstelle von Mixins verwenden? Um deutlicher zu veranschaulichen, was ich mit mixin meine, …
In Meyers Object-Oriented Software Construction (1988) definiert er das Open / Closed-Prinzip wie folgt: Ein Modul gilt als offen, wenn es noch zur Erweiterung zur Verfügung steht. Beispielsweise sollte es möglich sein, Felder zu den enthaltenen Datenstrukturen oder neue Elemente zu den von ihnen ausgeführten Funktionen hinzuzufügen. Ein Modul gilt …
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 …
In unserer Rails-Anwendung fügen wir Benachrichtigungen hinzu. Einige davon sind blocking: Sie stoppen den Fortschritt der hinzugefügten Ressource, da einige Informationen zu dieser Ressource fehlen. Andere Benachrichtigungen sind einfache Benachrichtigungen, die nur Informationen enthalten. Heute hatte ich eine Diskussion mit einem anderen Programmierer in unserem Team. Ich habe die Vererbungsstruktur …
Derzeit habe ich zwei abgeleitete Klassen, Aund Bbeide haben ein gemeinsames Feld, und ich versuche zu bestimmen, ob es in die Basisklasse aufgenommen werden soll. Es wird nie von der Basisklasse aus referenziert, und sagen Sie, wenn irgendwann auf der Straße eine andere Klasse abgeleitet wird C, die kein a …
In Java stehen vier Zugriffsmodifikatoren für Methoden zur Verfügung: public - Jede Klasse kann diese Methode verwenden. protected - Klassen in demselben Paket und Unterklassen in jedem Paket können diese Methode verwenden. private - Nur diese Klasse kann diese Methode verwenden. no modifier ("package private") - Nur Klassen im selben …
Aus heutiger Sicht passt diese Frage nicht zu unserem Q & A-Format. Wir erwarten, dass die Antworten durch Fakten, Referenzen oder Fachwissen gestützt werden, aber diese Frage wird wahrscheinlich Debatten, Argumente, Abstimmungen oder erweiterte Diskussionen hervorrufen. Wenn Sie der Meinung sind, dass diese Frage verbessert und möglicherweise erneut geöffnet werden …
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 …
Heute ist mir aufgefallen, dass ich protectedim C ++ - Code grundsätzlich keine Methoden verwende, da ich selten das Bedürfnis habe, nicht öffentliche Methoden eines übergeordneten Elements aufzurufen. Ich verwende protected in Java im Muster der Template-Methode, aber da Sie private Methoden in C ++ überschreiben können, brauche ich das …
Diese Seite befürwortet Komposition über Vererbung mit dem folgenden Argument (umformuliert in meinen Worten): Eine Änderung der Signatur einer Methode der Oberklasse (die in der Unterklasse nicht überschrieben wurde) führt an vielen Stellen zu zusätzlichen Änderungen, wenn Vererbung verwendet wird. Wenn wir jedoch Komposition verwenden, befindet sich die erforderliche zusätzliche …
Ich habe eine Klasse, die eine andere Klasse eines gemeinsamen Basistyps umschließt. Da die Basistyp-Schnittstelle ziemlich groß ist, müssen viele Passthrough-Funktionen geschrieben werden. Ich suche nach einem Weg, dies zu vermeiden. Machen wir ein Beispiel: Car / \ Volvo VolvoWithTrailer Jetzt muss ich jede Funktion in der Autoschnittstelle für VolvoWithTrailer …
Ich versuche mir Software-Engineering beizubringen und stoße auf widersprüchliche Informationen, die mich verwirren. Ich habe OOP gelernt und was abstrakte Klassen / Schnittstellen sind und wie man sie verwendet, aber dann lese ich, dass man "Komposition gegenüber Vererbung bevorzugen" sollte. Ich verstehe Komposition ist, wenn eine Klasse ein Objekt einer …
Der folgende Code verursacht einen Speicherverlust: #include <iostream> #include <memory> #include <vector> using namespace std; class base { void virtual initialize_vector() = 0; }; class derived : public base { private: vector<int> vec; public: derived() { initialize_vector(); } void initialize_vector() { for (int i = 0; i < 1000000; i++) …
Ist es für Klassen mit optionalen Feldern besser, Vererbung oder eine nullfähige Eigenschaft zu verwenden? Betrachten Sie dieses Beispiel: class Book { private String name; } class BookWithColor extends Book { private String color; } oder class Book { private String name; private String color; //when this is null then …
Leere Interfaces werden, soweit ich das beurteilen kann, im Allgemeinen als schlechte Praxis eingestuft - insbesondere, wenn Dinge wie Attribute von der Sprache unterstützt werden. Wird eine Schnittstelle jedoch als "leer" betrachtet, wenn sie von anderen Schnittstellen erbt? interface I1 { ... } interface I2 { ... } //unrelated to …
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.