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.
In den letzten Monaten scheint das Mantra "Komposition gegenüber Vererbung bevorzugen" aus dem Nichts aufgetaucht zu sein und fast zu einer Art Mem innerhalb der Programmgemeinschaft geworden zu sein. Und jedes Mal, wenn ich es sehe, bin ich ein bisschen verwirrt. Es ist, als ob jemand gesagt hätte "zugunsten von …
Die Idee, mehrere Vererbungen in einer Sprache zu unterstützen, hat mir immer gefallen. Meistens wird jedoch absichtlich darauf verzichtet, und der vermeintliche "Ersatz" sind Schnittstellen. Interfaces decken einfach nicht den gleichen Grund ab, den Mehrfachvererbung hat, und diese Einschränkung kann gelegentlich zu mehr Boilerplate-Code führen. Der einzige Grund, den ich …
Ich habe immer gelesen, dass Kompositionen der Vererbung vorzuziehen sind. Ein Blogbeitrag über andere Arten zum Beispiel befürwortet die Verwendung von Komposition anstelle von Vererbung, aber ich kann nicht sehen, wie Polymorphismus erreicht wird. Aber ich habe das Gefühl, wenn Leute sagen, sie bevorzugen Komposition, dann meinen sie wirklich, sie …
Wenn ein Quadrat eine Art Rechteck ist, warum kann ein Quadrat dann nicht von einem Rechteck erben? Oder warum ist es ein schlechtes Design? Ich habe Leute sagen hören: Wenn Sie Square von Rectangle ableiten lassen, sollte ein Square überall dort verwendbar sein, wo Sie ein Rechteck erwarten Was ist …
"Abstrakte Klasse" und "Schnittstelle" sind ähnliche Konzepte, wobei die Schnittstelle die abstraktere der beiden ist. Ein entscheidender Faktor ist, dass abstrakte Klassen bei Bedarf Methodenimplementierungen für abgeleitete Klassen bereitstellen. In C # wurde dieser Differenzierungsfaktor jedoch durch die kürzliche Einführung von Erweiterungsmethoden reduziert, die es ermöglichen, Implementierungen für Schnittstellenmethoden bereitzustellen. …
Ich bin noch ein Schüler in der High School (in der 10. Klasse) und ich muss noch einen Computerkurs in der Schule belegen. Alles, was ich bisher getan habe, ist durch Bücher. Diese Bücher haben mir Konzepte wie Vererbung beigebracht, aber wie hilft es, ein Programm in mehrere Klassen aufzuteilen? …
Ich beende gerade mein Masterstudium (in Informatik) und bewerbe mich um eine Stelle. Ich habe bemerkt, dass viele Unternehmen speziell nach einem Verständnis der Objektorientierung fragen. Beliebte Interviewfragen betreffen Vererbung, Polymorphismus, Zugriffsmethoden usw. Ist OO wirklich so wichtig? Ich hatte sogar ein Interview für einen Programmierjob in C und die …
C ++ hat eine einfache Mehrfachvererbung, viele Sprachentwürfe verbieten es als gefährlich. Einige Sprachen wie Ruby und PHP verwenden jedoch eine seltsame Syntax, um das Gleiche zu tun und nennen es Mixins oder Merkmale. Ich habe oft gehört, dass Mixins / Merkmale schwerer zu missbrauchen sind als Mehrfachvererbung. Was macht …
Hintergrund Ich entwerfe eine Sprache als Nebenprojekt. Ich habe einen funktionierenden Assembler, einen statischen Analysator und eine virtuelle Maschine dafür. Da ich mit der von mir aufgebauten Infrastruktur bereits nicht-triviale Programme kompilieren und ausführen kann, habe ich mir überlegt, an meiner Universität einen Vortrag zu halten. Während meines Vortrags erwähnte …
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 …
Ich habe in unserer (ziemlich großen) Codebasis einen Vererbungsbaum gefunden, der ungefähr so aussieht: public class NamedEntity { public int Id { get; set; } public string Name { get; set; } } public class OrderDateInfo : NamedEntity { } Soweit ich das beurteilen kann, wird dies hauptsächlich zum Binden …
Ich hatte eine Diskussion mit einem Kollegen, und es kam zu widersprüchlichen Vorstellungen über den Zweck der Unterklassenbildung. Meine Intuition ist, dass wenn eine primäre Funktion einer Unterklasse darin besteht, einen begrenzten Bereich möglicher Werte ihrer Eltern auszudrücken, es wahrscheinlich keine Unterklasse sein sollte. Er argumentierte für die gegenteilige Intuition: …
Betrachten Sie das folgende Design public class Person { public virtual string Name { get; } public Person (string name) { this.Name = name; } } public class Karl : Person { public override string Name { get { return "Karl"; } } } public class John : Person { …
Ich habe viele abstrakte Klassen / Methoden erstellt. Dann habe ich angefangen, Schnittstellen zu verwenden. Jetzt bin ich mir nicht sicher, ob Interfaces abstrakte Klassen nicht überflüssig machen. Sie benötigen eine vollständig abstrakte Klasse? Erstellen Sie stattdessen eine Schnittstelle. Sie benötigen eine abstrakte Klasse mit einer Implementierung? Erstellen Sie eine …
Angenommen, ich habe eine Klasse für andere Klassen, die erweitert werden sollen: public class LoginPage { public String userId; public String session; public boolean checkSessionValid() { } } und einige Unterklassen: public class HomePage extends LoginPage { } public class EditInfoPage extends LoginPage { } Tatsächlich hat die Unterklasse keine …
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.