Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Klasse und Record (https://www.delphipraxis.net/74842-problem-mit-klasse-und-record.html)

Koller 9. Aug 2006 14:04


Problem mit Klasse und Record
 
Ich habe eine eigene Klasse, die Records verwaltet. Innerhalb der Klasse werden diese TData genannt und in einer dritten Unit deklariere ich den Record TData, sodass ich beliebige Dinge damit verwalten kann. Nun möchte ich in meinem Programm zwei solcher Listen benutzen, wobei jede einen anderen Record-Typen verwaltet. Ich kann also nicht zwei Instanzen dieser Klasse erzeugen, da ja sonst jede den gleichen Record-Typen benutzen würde.
Eine Möglichkeit wäre, aus der einen Klasse zwei zu machen und dann den Klassen-,Unit- und Recordnamen zu ändern und einen zweiten Record-Typen zu deklarieren, jedoch umständlich.
Gibt es keine bessere Möglichkeit?

Bernhard Geyer 9. Aug 2006 14:09

Re: Problem mit Klasse und Record
 
Wenn es unbedingt ein Record sein muß und nicht eine Klasse müßtest Du mit Varianten Teilen in deinem Record arbeiten.
Ob das aber Übersichtlicher wird ...

Ich empfehle dir hier mit Klassen zu arbeiten wobei du eine Basisklasse hast und 2 ableitungen für deine 2 Verwaltungslisten.

Koller 9. Aug 2006 14:14

Re: Problem mit Klasse und Record
 
Zitat:

Zitat von Bernhard Geyer
Ich empfehle dir hier mit Klassen zu arbeiten wobei du eine Basisklasse hast und 2 ableitungen für deine 2 Verwaltungslisten.

Welche Funktion soll denn die Basisklasse haben und welche die 2 Ableitungen? An so etwas habe ich auch schon gedacht, aber bin an dieser Frage und damit auch an der Umsetzung gescheitert. Die Klasse muss man sich so wie eine StringList bloß mit Records vorstellen.
PS: Warum komm ich beim Klick auf Antworten immer zu Startseite? :gruebel:

Jürgen Thomas 9. Aug 2006 14:27

Re: Problem mit Klasse und Record
 
Zitat:

Zitat von Koller
Zitat:

Zitat von Bernhard Geyer
Ich empfehle dir hier mit Klassen zu arbeiten wobei du eine Basisklasse hast und 2 ableitungen für deine 2 Verwaltungslisten.

Welche Funktion soll denn die Basisklasse haben und welche die 2 Ableitungen? An so etwas habe ich auch schon gedacht, aber bin an dieser Frage und damit auch an der Umsetzung gescheitert. Die Klasse muss man sich so wie eine StringList bloß mit Records vorstellen.

Die Basisklasse soll alles das enthalten, was zu jedem dieser "Records" gehört; z.B. Erzeugen einer Liste, Einfügen und Entfernen von Elementen usw. Du könntest Dich z.B. an TCollection orientieren (siehe Quelltext in {Delphi}\source\Win32\rtl\common\Classes.pas).

Die Ableitungen enthalten dann alles, was speziell zu einem "Record" gehört; die Elemente der Basisklasse werden teils direkt verwendet, teils überschrieben.
Zitat:

Zitat von Koller
PS: Warum komm ich beim Klick auf Antworten immer zu Startseite? :gruebel:

Genau kann ich das auch nicht erklären, ich habe mich am Anfang auch gewundert. Nach dem Absenden eines Beitrags gibt es eine Auswahl, wo man weitermachen will; man muss sich nur schnell genug entscheiden.

Ich hoffe, ich konnte etwas helfen. Jürgen

Koller 9. Aug 2006 20:50

Re: Problem mit Klasse und Record
 
Zitat:

Zitat von Jürgen Thomas
Die Ableitungen enthalten dann alles, was speziell zu einem "Record" gehört; die Elemente der Basisklasse werden teils direkt verwendet, teils überschrieben.

Die Records haben ja nichts 'spezielles'. Sie haben nur anderen Inhalt und andere Namen. Innerhalb der Klasse ist der Inhalt ja egal,darum weiß ich nicht, wenn ich Vererbung benutze, an die Tochterklassen 'spezielles' einbauen soll. :(

Jürgen Thomas 10. Aug 2006 08:12

Re: Problem mit Klasse und Record
 
Zitat:

Zitat von Koller
Die Records haben ja nichts 'spezielles'. Sie haben nur anderen Inhalt und andere Namen. Innerhalb der Klasse ist der Inhalt ja egal,darum weiß ich nicht, wenn ich Vererbung benutze, an die Tochterklassen 'spezielles' einbauen soll. :(

Wenn die Struktur der Records identisch ist - also hinsichtlich Name, Typ und Größe der 'Felder' -, kannst Du natürlich statt dessen mit einer einzigen Klasse arbeiten. Die verschiedenen Listen sind dann mehrere Instanzen der gleichen Klasse.

Wenn sich die Struktur der Records unterscheidet, musst Du verschiedene Klassen deklarieren.

Wenn sich die Arbeiten wesentlich unterscheiden, die Du mit verschiedenen Records erledigen willst, kannst Du verschiedene Klassen deklarieren. (Im Sinne der OOP könnten/sollten auch solche Aufgaben als Methoden in die Klassen verlagert werden - jedenfalls soweit es von der Arbeit, der Bedeutung und Wiederverwendbarkeit der Klasse und dem Gesamtzusammenhang sinnvoll ist.)

Ich hoffe, dass jetzt klarer ist, was ich meine. Jürgen

Koller 10. Aug 2006 12:32

Re: Problem mit Klasse und Record
 
Zitat:

Zitat von Jürgen Thomas
Wenn die Struktur der Records identisch ist - also hinsichtlich Name, Typ und Größe der 'Felder' -, kannst Du natürlich statt dessen mit einer einzigen Klasse arbeiten. Die verschiedenen Listen sind dann mehrere Instanzen der gleichen Klasse.

Klar.
Zitat:

Zitat von Jürgen Thomas
Wenn sich die Struktur der Records unterscheidet, musst Du verschiedene Klassen deklarieren.

Klar.
Zitat:

Zitat von Jürgen Thomas
Wenn sich die Arbeiten wesentlich unterscheiden, die Du mit verschiedenen Records erledigen willst, kannst Du verschiedene Klassen deklarieren. (Im Sinne der OOP könnten/sollten auch solche Aufgaben als Methoden in die Klassen verlagert werden - jedenfalls soweit es von der Arbeit, der Bedeutung und Wiederverwendbarkeit der Klasse und dem Gesamtzusammenhang sinnvoll ist.)

Im Grunde unterscheiden sich beide Listen nicht. Sie verwalten nur einen anderen Record-Typen, d.h. ich müsste zwei Klassen haben, die im Prinzip identisch sind, nur statt z.B. TData eben TData2 verwalten.

Jürgen Thomas 10. Aug 2006 14:35

Re: Problem mit Klasse und Record
 
Zitat:

Zitat von Koller
Im Grunde unterscheiden sich beide Listen nicht. Sie verwalten nur einen anderen Record-Typen, d.h. ich müsste zwei Klassen haben, die im Prinzip identisch sind, nur statt z.B. TData eben TData2 verwalten.

Genau das ist der Punkt: Sind TData und TData2 "im Prinzip identisch" oder vollständig identisch?

1. Wenn sie vollständig identisch sind, kannst Du mit einer Klasse arbeiten; andernfalls müssten es verschiedene Klassen sein.

2. Die Listen können ggf. "analog" aufgebaut werden: TListe1 als Liste von TData und TListe2 als Liste von TData2. Schau dazu doch einmal in der Delphi-Hilfe unter dem Stichwort "Mit Listen arbeiten"; vielleicht findest Du dort die richtige Anregung.

Jürgen

Koller 13. Aug 2006 14:27

Re: Problem mit Klasse und Record
 
Danke für die bisherigen Antworten, aber das hat mich nicht wirklich weitergebracht, weil mein Problem wohl zu abstrakt ist. :(
Noch ein Versuch:
Also die Klasse ist eine verkettete Liste, die auf Zeigern basiert und einen Record-typen (TData) verwaltet. Ich würde gerne, dass man dem Constructor als Parameter den Namen des Record-Tyen übergeben könnte. Beispielsweise so:
Delphi-Quellcode:
type
 TData = record
    i: integer;
    s: string;
 end;
 TData2 = record
    b: TBitmap;
    name: string;
 end;

var
 List1, List2: TLinkedList; //die Klasse heißt TLinkedList

List1 := TLinkedList.Create(TData);
List2 := TLinkedList.Create(TData2);
Wie müsste dann die Deklaration des Constructors ausehen?

Jelly 13. Aug 2006 14:33

Re: Problem mit Klasse und Record
 
Warum nutzt du nicht TObjectList, um Objekte abzulegen... Statt der Records dafür einfach die Daten in Objekten speichern:

Delphi-Quellcode:
type
  TData = class
  public
    i: integer;
    s: string;
  end;
Mit TObjectList kannst Du leicht Objekte hinzufügen, löschen usw.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 Uhr.
Seite 1 von 2  1 2      

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