Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi verschiedene Datentypen" zusammenfassen" (https://www.delphipraxis.net/40880-verschiedene-datentypen-zusammenfassen.html)

billi 22. Feb 2005 16:49


verschiedene Datentypen" zusammenfassen"
 
Hallo,
ich sitze momentan an einer kleinen Studienarbeit für meinen Info-LK. Wenn sie fertig ist, soll das Programm alle Operationen rund um Binäre- und AVL- Bäume grafisch darstellen. Dazu bin ich dabei eine eigene Unit zu programmieren.
Mein Problem ist jetzt aber, dass ich gerne eine Wahlmöglichkeit für die Datentype der Werte hätte. D.h. ob ich den Baum nur mit integer Werten fülle, oder ob ich mit strings arbeite.
Nun stehe ich vor dem Problem wie ich das implementieren soll: einfach zwei Units (eine für strings und eine für integer) zu nehmen erdscheint mir doch ein bisschen mit "Kanonen auf Spatzen geschossen". Gibt es irgendwie eine Möglichkeit, einen "Oberdatentyp" zu verwenden, der beide Typen (string und integer) verwendet?
Momentan arbeite ich nur mit Strings:
Delphi-Quellcode:
TDaten = string;
TToKnoten = ^TKnoten;
TKnoten = record
            Daten  : TDaten;
            ToLinks : TToKnoten;
            ToRechts : TToKnoten
         end;
Ich bin mal auf eure Rückmeldungen gespannt.
Vielen Dank,
Markus

Dax 22. Feb 2005 16:53

Re: verschiedene Datentypen" zusammenfassen"
 
Wenn du schon mit so arbeitest, nimm doch eine Integerklasse und eine Stringklasse, beide von einer abstrakten Klasse TDatenBasis abgeleitet. Die kannst du dann deinem Knoten zur Laufzeit beliebig zuordnen. Dabei sollte allerdings beachtet werden, dass sich die verschiedenen Typen nicht vermischen, also das ein Knoten mit einem String bestückt ist und ein anderer mit einem Integer, wenn du nur mit Integern arbeitest. Das könnte knallen ;)

billi 22. Feb 2005 16:57

Re: verschiedene Datentypen" zusammenfassen"
 
Vielen Dank für die schnelle Antwort!
Sowas in der Art hatte ich mir auch schon gedacht, nur hapert es da bei mir etwas mit der Umsetztung (insbes. Typendeklaration).
Man müssta dann halt in jeder Procedure schaun mit welchem typ man gerade arbeitet, aber ansonsten hört sich das net schlecht an...

Dax 22. Feb 2005 16:59

Re: verschiedene Datentypen" zusammenfassen"
 
Wenn du mit den separaten Typen arbeitest, könntest du die Prozeduren, die die Typen bearbeiten, doch gleich in die Klassendeklaration aufnehmen. Dann hättest du die Sicherheit, das nur das getan wird, was getan werden soll und nicht eine Stringoperation auf deinen Integer angewendet wird ;)

negaH 22. Feb 2005 17:26

Re: verschiedene Datentypen" zusammenfassen"
 
Oder du nimmst Variants als Datentyp. Ja ich weis, dies ist zwar universell aber nicht besonders schnell. Vorteil ist du kannst Integer die als Strings vorliegen denoch sortieren.
Da du ja sowieso ein DEMO Projekt machst würde ich Variants nehmen, da kommts mehr auf Übersichtlichkeit und Strukturierung als auf Performance an.

Gruß Hagen

billi 22. Feb 2005 18:01

Re: verschiedene Datentypen" zusammenfassen"
 
Also, das mit den Variants hört sich zwar interessant an, aber zum einen habe ich da überhaupt keine Ahnung von und eine Einarbeitung scheint mir, nach den was ich bislang gelesen hab, auch net so simpel.
Der Vorschlag von Dax erscheint mir da schon einfacher umzusetzen.

Zitat:

Zitat von Dax
nimm doch eine Integerklasse und eine Stringklasse, beide von einer abstrakten Klasse TDatenBasis abgeleitet. Die kannst du dann deinem Knoten zur Laufzeit beliebig zuordnen.

Wie hab ich mir das aber genau vorzustellen? Ev. wär etwas code ganz hilfreich...

Dax 22. Feb 2005 18:12

Re: verschiedene Datentypen" zusammenfassen"
 
Du hast in jedem Knoten in obigem Code ein Element des Typs TDaten. Dieses änderst du einfach in TDatenBasis um und definierst wie folgt:
Delphi-Quellcode:
type
  TDatenBasis = class
  public
    // Eine Beispielmethode
    procedure Work; virtual; abstract;
  end;
In den Rumpf der Klasse fügst du noch die Methoden ein, die du zum arbeiten brauchst. Da du nicht weißt, mit welchen Typ von Daten du arbeiten wirst, definierst du die Methoden als abstract, also ohne Code. Den Code musst du später schreiben, wenn du deine Klasse, z.B. TInteger von der Basisklasse ableitest:
Delphi-Quellcode:
type
  TInteger = class(TDatenBasis)
  private
    fDaten: Integer;
  public
    procedure Work; override;
  end;

// Weiteres in der Unit

procedure TInteger.Work;
begin
  // Mache was mit fDatan oder anderen Dingen
end;
Weil du in der Basisklasse bereits alle Methoden, die du später brauchst, definiert hast, kannst du ohne umständlicher und eventuell gefährliche Typecasts mit deinen String-, Integer-, Char-, Floating-Point-Klassen usw. arbeiten. Je nach belieben und dem angestrebten Funktionsumfang kannst du beliebig viele dieser Methoden hinzufügen.

PS: Hagens Methode ist viel einfacher. Du deklarierst dein Feld nicht als TDaten, sondern als Delphi-Referenz durchsuchenVariant und kannst mit diesem Variant arbeiten, als wäre es gleichzeitig Integer, String, Floating-Point-Zahl, Zeichen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 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