![]() |
Ist Vererbung streng linear?
Sorry, wenn der Titel fachlich unkorrekt formuliert ist, aber da mir das Thema fremd ist, ist mir nichts besseres eingefallen.
Also, bevor ich mich möglicherweise in eine falsche Richtng bewege, möchte ich eine konzeptionelle Frage geklärt wissen. Ich versuche die Fragestellung am besten mit einem Beispiel zu erläutern: Ich habe eine Basisklasse mit der Funktionsmenge A und füge durch Ableitung und Erweiterung eine Funktionsmenge B hinzu; meine neue Klasse besitzt dann die Funktionsmenge AB. Für eine andere Aufgabe verwende ich wiederum die Basisklasse A und füge eine Funktionsmenge C hinzu, meine neue Klasse beinhaltet damit die Funktionsmenge AC. Im Laufe der Zeit entstehen auf diese Art und Weise mehrere neue Klassen jeweils mit dem Vorfahren A und den neuen Funktionsmengen AB, AC, AD, AE etc. In einem neuen Anforderungsprofil seien zu einem späteren Zeitpunk die Funktionsmengen A, C und D notwendig - habe ich dann die Möglichkeit die Klassen AC und AD gemeinsam als Vorfahren einer neuen Klasse mit der Funktionsmenge ACD zu vereinen? |
Re: Ist Vererbung streng linear?
In Delphi nicht, da Delphi keine Mehrfachvererbung unterstützt.
|
Re: Ist Vererbung streng linear?
Danke für die schnelle Antwort! Also ist meine Idee/Überlegung in anderen Sprachen umgesetzt worden. Welche Sprachen ermöglichen ein solches Vorgehen?
|
Re: Ist Vererbung streng linear?
In C++ geht das z.B. AFAIK (ih kann mich aber auch irren, meine das aber gelesen zu haben).
|
Re: Ist Vererbung streng linear?
c++. Da aber Mehrfachvererbung zu Problemen führt unterstützen neuere Sprachen wie Delphi, Java, c#, ... keine Mehrfachvererbung von Klassen mehr. es wird nur die Mehrfachvererbung von Interfacen unterstützt.
|
Re: Ist Vererbung streng linear?
Wie mkinzler schon gesagt hat: Sowas funktioniert in Delphi nicht.
Was du allerdings machen kannst ist ein eine Klasse auf Basis mehrerer Interfaces. Also z.B.
Delphi-Quellcode:
Ist natürlich jetzt nicht so das was du wolltest aber naja. Sowas ähnliches halt :mrgreen:
type
IOne = interface(IUnknown) ['..'] procedure One; end; ITwo = interface(IUnknown) ['..'] procedure Two; end; TOneTwo = class(TInterfacedObject, IOne, ITwo) public procedure One; procedure Two; end; Gruß Neutral General |
Re: Ist Vererbung streng linear?
Ok, deswegen werde ich nicht auch noch C++ lernen wollen. Das würde meinen Hobby-Zeitrahmen dann endgültig sprengen. In der Konsequenz muss man also in Delphi immer "linear oben drauf packen".
Führt spontan zu folgender An- und Abschlußfrage: Wird Code aus eingebundenen Units nicht vom Programm genutzt, dann wird ja wohl der Code auch nicht in die EXE eingebunden! Ist das bei den verwendeten Klassen auch so? Also, um beim Beispiel zu bleiben ich habe eine "Superklasse" mit der Funktionsmenge ABCDE, verwende aber nur ACD - wird dann der Code von B und E auch "außen vor gelassen"? Kannn ich mir eigentlich nicht so recht vorstellen... |
Re: Ist Vererbung streng linear?
Huhhh, Neutral General, sei nicht enttäuscht, aber das sagt mir erst einmal gar nix. Da ich jetzt aber doch schon recht müde bin, möchte ich da auch nicht weiter einsteigen. Ich schaue mir das morgen mal an - Danke an alle für die Antworten :hi:
|
Re: Ist Vererbung streng linear?
Oder eine Fasade(siehe Entwurfsmuster) einführen. Das ist eine Klasse, die in deinem Beispiel die Funktionsmenge ACD hat. Dazu muss jeder Funktionsaufruf an ein Objekt der entsprechenden Klasse weitergeleitet werden. Allerdings musst du aufpassen, dass dein Kontext immer aktuell ist, für den Fall dass die Berechnung einer Funktion von irgendwelchen Objektvariablen abhängt.
|
Re: Ist Vererbung streng linear?
Das Problem an der Mehrfachvererbung ist es, dass sie u.U. zu Inkonsistenzen führen kann, wenn mehrere Basisklassen verschiedene Implementierungen einer Methode haben.
Bei Interfaces handelt es sich von attributlose vollständig abstrakte Klassen. So kann es zu zu keine Konflikte kommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz