Entwickler-Ecke

Sonstiges (Delphi) - [OOP]Konzeptproblem


Marco D. - So 21.01.07 22:31
Titel: [OOP]Konzeptproblem
Also ich habe einen Fehler in meinem Konzept entdeckt. Ich möchte z.B. folgendes machen können:

Delphi-Quelltext
1:
MyClass.Attributes[index].DataType := 'bool';                    

Ich hatte mir schon die Klassen TParameter, TParameterlist, TAttribute und TAttributelist entwickelt. In Planung waren noch TMethod, TMethodlist und TObjectClass.
Nun jedoch habe ich ein Problem:
Laut meinem Konzept würde der Code von oben so lauten:

Delphi-Quelltext
1:
MyClass.Attributes.Attributes[index].DataType := 'bool';                    

Ich war erst der Meinung, ich könnte z.B. die Verwaltung der Attribute (TAttribute) in die Unit Attributelist (TAttributelist) auslagern. Wenn ich nun aber TObjectClass definiere:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
unit ObjectClass;

interface

type

TObjectClass = class
   private
    //blubb
   public
     property Attributes: TAttributelist //hier kann ja eigentlich nicht TAttributelist hin!
end;

implementation

end.

dann habe ich ein Problem, weil:

Delphi-Quelltext
1:
2:
3:
4:
5:
//TAttributelist hat u.a. folgende Property
property Attribute[index: integer]: TAttribute read GetAttribute write SetAttribute;

//So würde der Aufruf dann aussehen
MyClass.Attributes.Attributes[index].DataType := 'bool';

Da ich aber nicht zweimal Attributes haben will, müsste die Verwaltung von TAttribute, die eigentlich TAttributelist übernehmen sollte, direkt in TObjectClass implementiert werden. Da es aber auch noch MyClass.Methods[index] geben soll, kann ich das nicht so machen, da die Verwaltung auf einer verketteten Liste basiert und ich diese nicht zweimal in die gleiche Klasse einbauen will.
Was kann man jetzt tun?


BenBE - So 21.01.07 22:39

Du kannst Array-Properties als Default deklarieren ... Dann würde das 2. Attributes implizit von Delphi ergänzt werden.


tommie-lie - So 21.01.07 22:41

Ich bin mir nicht sicher, ob ich verstanden habe, wie deine Klassen aussehen. Ist TAttributeList.Attributes ein Array Property (property Attributs[index: Integer]: TAttribute;)? Wenn ja, dann interessierst du dich vielleicht für den Modifier default.


Marco D. - So 21.01.07 22:43

user profile iconBenBE hat folgendes geschrieben:
Du kannst Array-Properties als Default deklarieren ... Dann würde das 2. Attributes implizit von Delphi ergänzt werden.

Öhm wie würde das im Code genau aussehen? So?

Delphi-Quelltext
1:
 property Attribute[index: integer]: TAttribute read GetAttribute write SetAttribute; default;                    

Oder muss das in TObjectClass?

user profile icontommie-lie hat folgendes geschrieben:
Ich bin mir nicht sicher, ob ich verstanden habe, wie deine Klassen aussehen. Ist TAttributeList.Attributes ein Array Property (property Attributs[index: Integer]: TAttribute;)? Wenn ja, dann interessierst du dich vielleicht für den Modifier default.

BenBe war schneller. :P Du hast aber Recht! :zustimm:


tommie-lie - So 21.01.07 22:46

user profile iconMarco D. hat folgendes geschrieben:
So?
Jo.


Marco D. - Di 23.01.07 18:31

Ich habe jetzt das gleiche Problem, nur analog mit TMethod in das die Property Parameters hinein soll. :P

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
unit Method;


interface

uses Parameterlist,main,Objectclass;

type

TMethod = class

 property Parameters: TParameterlist //und jetzt?

//TParameterlist:

 property Parameter[index: integer]: TParameter read GetParameter write SetParameter; default;

Was muss ich in der Unit Method hinzufügen?


tommie-lie - Di 23.01.07 20:17

user profile iconMarco D. hat folgendes geschrieben:
Was muss ich in der Unit Method hinzufügen?
Das gleiche, was du auch in der Unit ObjectClass hinzugefügt hast. Wenn mich meine Erinnerungen nicht im Stich lassen war das exakt "nichts".