Einzelnen Beitrag anzeigen

CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Klasseneigenschaften und ihre Getter (abstrakte Klasse)

  Alt 14. Mai 2007, 16:25
Hi,
der erste Punkt ist mir klar. Den will ich auch gar nicht in Frage stellen. Aber warum sollen Klasseneigenschaften überflüssig sein? Klasseneigenschaften selbst sind schonmal Bestandteil der VCL-OOP, wie man daran erkennt, dass sowas funktioniert:
Delphi-Quellcode:
TABC = class
private
  class function GetMyProp: string; static;
public
  class proprety MyProp: string read GetMyProp;
end;
(zumindest so in der Art, hab gerade kein Delphi zur Hand, um die genaue Syntax zu überprüfen.)

Die Idee ist, eben ohne Instanz Informationen über die Klasse zu erhalten. In meinem Fall zum Beispiel der Name der verwendeten Bibliothek (für jede Bibliothek gibt es eine Klasse, die Nachfahre einer abstrakten Klasse ist, die bereits die entsprechenden Methoden besitzen soll). Nun macht es keinen Sinn für die abstrakte Basisklasse irgendwelche Methoden zu implementieren, weil die Basisklasse selber nie verwendet werden wird. Alles Wesentliche, wie z.B. der Getter, soll auf die Nachfahren übertragen werden.
Sinn ist dann, dass sowas funktioniert:
Delphi-Quellcode:
var
  BaseConnection: TBaseConnection;
begin
  ShowMessage('Verwende ' + TOmniXmlConnection.LibName + ' als Bibliothek.');
  BaseConnection := TOmniXmlConnection.Create;
end;
Besonders interessant wird es dann, wenn die Klasse zur Designtime der Klassen noch gar nicht bekannt ist, sondern das ganze über einen Parameter vom Typ class of TBaseConnection läuft. Natürlich wäre das eine funktionierende Alternative:
Delphi-Quellcode:
TABC2 = class
public
  class function GetMyProp: string; virtual; abstract;
end;
Das funktioniert auch und ist gar kein Problem zu implementieren, aber es war halt mein Grundgedanke, das mit Eigenschaften zu lösen. So, dass der Getter dann vom Nachfahren nur noch überschrieben werden muss.

Die Unsinnigkeit meiner Idee kann ich also noch nicht so ganz nachvollziehen und ich denke meine Idee dahinter ist vielleicht jetzt etwas deutlicher geworden.

Die Lösung von alzaimar ist natürlich schon in etwa das, was ich eigentlich vor hatte. Nur wäre es meiner Meinung nach auch nicht widersprüchlich, wenn man den Umweg über die Klassenmethode nicht gehen müsste.

Chris
  Mit Zitat antworten Zitat