Zitat von
DeerHunter:
Ich versuche gerade mich ein wenig in
OOP zu üben
Hallo DeerHunter,
wenn Du Dich wirklich in
OOP üben willst, solltest Du vor allem versuchen, ohne Unterscheidungen der Typen Deine Funktionalität abzubilden. Also keine Kunstrukte der Art:
Delphi-Quellcode:
case myObject.ClassType of
TMyClass1: DoSth;
TMyClass2: DoSthElse;
...
zu verwenden (zumal dies in Delphi ohnehin nicht ohne weiteres mit einem
case möglich ist), sondern Delegation und Vererbung ausnutzen.
Möchtest Du bspw. einen unterschiedlichen Text in Abhängigkeit der Klasse ausgeben, könnte eine Lösung so aussehen:
Delphi-Quellcode:
type
TMyBaseClass = class
public
function GetText: string; virtual; abstract;
end;
TMyClassA = class(TMyBaseClass)
public
function GetText: string; override;
end;
TMyClassB = class(TMyBaseClass)
public
function GetText: string; override;
end;
Deine Liste erwartet dann lediglich Exemplar der Klasse
TMyBaseClass und führt die Operation
GetText aus.
Verfolgt man diesen Ansatz konsequent (zB für das Zeichnen, Laden, Speichern, Bewegen, etc.), kann der Klient (der Programmteil, der mit heterogenen Klassen arbeitet) zwar von der konkreten Klasse abstrahieren, jedoch überfrachtest Du entweder Deine Klassen mit zu vielen Methoden und schaffst eine Art "ich kann alles"-Klasse, die wohl schwer zu beherrschen sein wird (typisch für Delphi-Programme
) , oder Du machst Dich zu sehr von einer strikten Vererbungslinie abhängig.
Wenn Du an diesem Punkt angekommen sein solltest, lohnt sich ggf ein Blick in die Menge von Entwurfsmustern (hier: Besuchermuster/Visitor Pattern) oder der Einsatz von Interfaces.
Viel Erfolg!