Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi OOP - Wie Struktur für verschiedene Objekte erstellen? (https://www.delphipraxis.net/122636-oop-wie-struktur-fuer-verschiedene-objekte-erstellen.html)

Andreas L. 19. Okt 2008 19:15


OOP - Wie Struktur für verschiedene Objekte erstellen?
 
Abend,
ich lese verschiedene Dateien aus. Die gesammelten Daten werden in abgeleiteten TObjects gespeichert (jede ausgelesener Wert entspricht einer Eigenschaft). Die TObjects werden mit einer TList verwaltet. Manche Dateien haben mehr oder weniger Eigenschaften.

Beispiel Datei 1:
Code:
[bla]
wert1=abc
wert2=def
Beispiel Datei2:
XML-Code:
<root>
  <wert1>abc</wert1>
</root>
(Wie man sieht können die Dateien verschiedene Strukturen haben). Ich kann ja jetzt schlecht einfach eine Eigenschaft leer lassen, aber soll ich für jeden Dateityp eine eigene Klasse erstellen? Dann muss wiederrum für jede Klasse eine abgeleitete TList her. Und für jede Liste müssen dann sämtliche Routinen wiederholt implementiert werden. Verfolge ich einen komplett falschen Ansatz? Wie würdet ihr das lösen?

Hansa 19. Okt 2008 19:27

Re: OOP - Wie Struktur für verschiedene Objekte erstellen?
 
Wenn schon, dann würde ich eine TObjectlist nehmen. TObject genau nach Bedarf definieren (quasi wie Record) und diese Objekte in die Liste eintragen. Ich weiß, dass das geht. Ob und wie das mit der TList geht ? :gruebel:

Andreas L. 19. Okt 2008 19:32

Re: OOP - Wie Struktur für verschiedene Objekte erstellen?
 
Zitat:

Zitat von Hansa
Wenn schon, dann würde ich eine TObjectlist nehmen. TObject genau nach Bedarf definieren (quasi wie Record) und diese Objekte in die Liste eintragen. Ich weiß, dass das geht. Ob und wie das mit der TList geht ? :gruebel:

Ok, das geht. Die Komponente die die ObjectList enthält hat eine Eigenschaft

Delphi-Quellcode:
property Items[Index: Integer]:TMyObject read getObject write SetObject default;
Jetzt gibt GetObject halt immer ein TMyObject zurück (sozusagen die Basisklasse). Dann muss der Entwickler aber immer selber Casten.

Delphi-Quellcode:
if Component.Items[0] is TMyObjectNr2 then
  TMyObjectNr2(Component.Items[0]).Wert1 := 'xyz'
else if Component.Items[0] is TMyObjectNr1 then
...
...
Finde ich ziemlich unschön. Gibts da nicht einen besseren weg?

Namenloser 19. Okt 2008 19:45

Re: OOP - Wie Struktur für verschiedene Objekte erstellen?
 
Ja. Leite dir eine Klasse von der TObjectList ab, in der du die Property und die Methoden überschreibst. Such mal nach "typensichere Liste".

Uwe Raabe 19. Okt 2008 21:24

Re: OOP - Wie Struktur für verschiedene Objekte erstellen?
 
Zitat:

Zitat von Andreas L.
Jetzt gibt GetObject halt immer ein TMyObject zurück (sozusagen die Basisklasse). Dann muss der Entwickler aber immer selber Casten.
...
Finde ich ziemlich unschön. Gibts da nicht einen besseren weg?

Ja, auf Delphi 2009 upgraden und Generics verwenden :wink:

Andreas L. 21. Okt 2008 12:38

Re: OOP - Wie Struktur für verschiedene Objekte erstellen?
 
Zitat:

Zitat von Uwe Raabe
Zitat:

Zitat von Andreas L.
Jetzt gibt GetObject halt immer ein TMyObject zurück (sozusagen die Basisklasse). Dann muss der Entwickler aber immer selber Casten.
...
Finde ich ziemlich unschön. Gibts da nicht einen besseren weg?

Ja, auf Delphi 2009 upgraden und Generics verwenden :wink:

Die Komponente(n) werden OpenSource. Muss also Abwärtskompatibel sein.

So wie es aussieht spar ich mir mit alle dem nur die Deklaration des Constructor und destructors. Sämtliche Routinen wie z. B. das hinzufügen eines Items oder die Filterfunktion muss ich jedesmal neu deklarieren. Gibts nicht doch eine bessere Lösung?

Evtl. eine TCollection anstatt TObjectList?

Namenloser 21. Okt 2008 14:13

Re: OOP - Wie Struktur für verschiedene Objekte erstellen?
 
TCollection ist nur für visuelle Komponenten nötig, weil sie (afaik) bestimmte Methoden für die RTTI implementiert. Die Item-Listen von Menüs, Toolbars usw. sind z.B. alle von TCollection abgeleitet.

jfheins 21. Okt 2008 15:20

Re: OOP - Wie Struktur für verschiedene Objekte erstellen?
 
TCollection ist auch für non-visuelle Objekte praktisch ;)

Neben der Tatsahe, dass man das Streaming nicht neu erfinden muss bekommt man sowohl auf- als auch abwärtskompatibilität geschenkt ;)

Such mal nach
Delphi-Quellcode:
dpCollectiion
:arrow: http://www.delphipraxis.net/internal...ct.php?t=62023 ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz