![]() |
OOP machts mir schwer (Design von Klassen)
Hi,
Also ich befinde mich gerade in folgender Situation: Ich habe eine Basisklasse und 3-4 davon abgeleitete Klassen. Sagen wir mal das ganze sieht so aus (aufs wesentliche reduziert):
Delphi-Quellcode:
Nun würde man es intelligenterweise so machen:
TBase = class
end; TClass1 = class(TBase) procedure DoSomething; end; TClass2 = class(TBase) procedure DoSomething; end; TClass3 = class(TBase) procedure DoSomething; end; // etc
Delphi-Quellcode:
Jedoch gibt es das Problem, dass sich die Procedure DoSomething in jeder abgeleiteten Klasse in ungefähr genau einer Code-Zeile unterscheidet, wodurch ich sie nicht einfach von TBase erben kann. Außerdem ist diese Zeile auch nicht am Anfang oder am Ende der Procedure, so dass ich nicht mit inherited arbeiten kann, sondern die ganze Procedure bis auf eine Zeile genau abschreiben muss... nun hatte ich eine Idee:
TBase = class
procedure DoSomething; end;
Delphi-Quellcode:
Nur bin ich mir nicht so sicher, ob diese Lösung so schön ist...
TBase = class
protected procedure Zeile; virtual; public procedure DoSomething; end; TClass1 = class(TBase) protected procedure Zeile; override; end; procedure TBase.Zeile; begin end; procedure TBase.DoSomething; begin // Code Zeile; // Code; end; procedure TClass1.Zeile; begin // Zeile in TClass1 end; Was sagt ihr dazu? Gibt es bessere Methoden? Gruß Neutral General |
Re: OOP machts mir schwer (Design von Klassen)
Die Idee ist gar nicht mal so schlecht.
Ich würde diese Methode Abstrakt definieren, so dass jede Ableitung diese Methode implementieren muss. Natürlich kannst Du dann die Basisklasse nicht mehr instanzieren, aber das ist ja vielleicht auch gar nicht notwendig? |
Re: OOP machts mir schwer (Design von Klassen)
Du könntest das Template Method Design Pattern einsetzen.
![]() 1.) in der Basisklasse wird der allgemeine Ablauf vorgegeben. Diese Methode ist public.
Delphi-Quellcode:
2.) die virtuellen Methoden Phase1 und Phase2 werden in den abgeleiteten Klassen überschrieben und bleiben protected.
TBase = class
private procedure Vorberechnung; ... protected procedure Phase1; virtual; abstract procedure Phase2; virtual; abstract; public procedure DoSomething; end; procedure TBase.DoSomething; begin // ein fiktiver Ablauf Vorbrechnung; Phase1; SaveData; if bedingung then Phase2; end; |
Re: OOP machts mir schwer (Design von Klassen)
Zitat:
Zitat:
Also ihr habt mir sehr geholfen ;) Die größte Schwierigkeit, die jetzt noch besteht und bei der ihr mir nicht helfen könnt, ist einen Namen für meine abstrakte Procedure zu finden :gruebel: :wall: :roll: Gruß Neutral General |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 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