Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekt erzeugen - aber welche Klasse - und wie zugreifen? (https://www.delphipraxis.net/70388-objekt-erzeugen-aber-welche-klasse-und-wie-zugreifen.html)

MarioM. 29. Mai 2006 17:17


Objekt erzeugen - aber welche Klasse - und wie zugreifen?
 
Guten Tag zusammen,

ich habe folgendes Problem, und hoffe, Ihr könnt mir dabei behilflich sein.

Ich habe zwei Klassen geschrieben, TSuzuki und TKawasaki.

Ich möchte nun in meinem Programm, je nachdem was der User auswählt, ein Objekt aus dieser Klasse erzeugen; und hier hört es auch schon auf mit dem Wissen um OOP, bzw. fangen die Probleme an.

Ich habe zwar schon einige Tutorials diesbezüglich gelesen, allerdings haben die sich alle mit einfachen Beispielen befasst, in dem eine Klasse geschrieben, und daraus dann ein Objekt erzeugt wurde.

Nun also zum Problem.

Normalerweise erzeuge ich ein Objekt dadurch, dass ich eine Variable erstelle, dieser einen Typ zuweise, und dann z.B. sage

Delphi-Quellcode:
var
  MeineVariable: TMeinTyp;
begin
  MeineVariable := TMeinTyp.Create;
end;
Nun ist es in meinem aktuellen Beispiel aber so, dass ich noch nicht weiss, was für ein Typ das sein wird, es kann also TSuzuki oder TKawasaki sein.

Muss ich dem Fall zwei Variablen anlegen, und je nachdem welcher Typ benötigt wird, eine von den beiden erzeugen, also so:

Delphi-Quellcode:
var
  MeineSuzuki: TSuzuki;
  MeineKawasaki: TKawasaki;
begin
  if Maschine = 'Suzuki' then begin
    MeineSuzuki := TSuzuki.Create;
  end
  else if Maschine = 'Kawasaki' then begin
    MeineKawasaki := TKawasaki.Create;
  end;
end;
Das wäre ja ziemlich umständlich, gerade wenn es dann mehrere Klassen sind.

Und meine zweite Frage:
Ich möchte natürlich mehrere dieser Objekte erzeugen. Wie kann ich dann später auf diese Objekte zugreifen? Ich meine, die heissen dann ja alle MeineSuzuki oder MeineKawasaki - geht das überhaupt, oder kann ich da irgendwie zur Laufzeit Variablen anlegen?


Verzeiht bitte, dass ich so ein für Euch sicherlich triviales Problem habe, aber ich beginne gerade erst mit der OOP und bin diesbezüglich nirgends fündig geworden - danke.

Thorben77 29. Mai 2006 17:33

Re: Objekt erzeugen - aber welche Klasse - und wie zugreifen
 
Ein Vorschlag: Erstell eine Klasse TMotorrad, von der die andern beiden abgeleitet werden:
Klassendeklarationen:
Delphi-Quellcode:
type
  TMotorrad = class(TObject)
    // Eigenschaften und Methoden, die beide Klassen gemeinsam haben sollen
  end;

  TSuzuki = class(TMotorrad)
    // hier alles suzukispezifisches
  end;

  TKawasaki = class(TMotorrad)
    // und hier kawasakispezifisches
  end;
Verwendung:
Delphi-Quellcode:
var
  MeinMotorrad: TMotorrad;
begin
  if Maschine = 'Suzuki' then
  begin
    MeinMotorrad := TSuzuki.Create;
  end
  else
  if Maschine = 'Kawasaki' then
  begin
    MeinMotorrad := TKawasaki.Create;
  end;
end;
Unterscheiden, welche Marke es ist, kannst Du später so:
Delphi-Quellcode:
if MeinMotorrad.ClassType = TSuzuki then
  // ...

 // oder für Kawasaki:
if MeinMotorrad.ClassType = TKawasaki then
  // ...
MfG

shmia 29. Mai 2006 17:44

Re: Objekt erzeugen - aber welche Klasse - und wie zugreifen
 
Zitat:

Zitat von MarioM.
Und meine zweite Frage:
Ich möchte natürlich mehrere dieser Objekte erzeugen. Wie kann ich dann später auf diese Objekte zugreifen? Ich meine, die heissen dann ja alle MeineSuzuki oder MeineKawasaki - geht das überhaupt, oder kann ich da irgendwie zur Laufzeit Variablen anlegen?

Schau dir mal die Klasse TObjectList aus der Unit contnrs an.

MarioM. 29. Mai 2006 17:49

Re: Objekt erzeugen - aber welche Klasse - und wie zugreifen
 
Hallo,

das sieht ja schonmal gut aus - vielen Dank :)

Und das funktioniert auch, wenn ich diese Funktion aufrufe, dass ich dann beliebig viele 'MeinMotorrad' mal als Suzuki und mal als Kawasaki habe?

Ich meine, wenn ich dann folgendes habe:

MeinMotorrad (Kawasaki)
MeinMotorrad (Kawasaki)
MeinMotorrad (Suzuki)
MeinMotorrad (Kawasaki)
MeinMotorrad (Suzuki)
MeinMotorrad (Suzuki) <---- wie bekomme ich diese Suzuki?
MeinMotorrad (Kawasaki)
MeinMotorrad (Kawasaki)
MeinMotorrad (Suzuki)
MeinMotorrad (Suzuki)
MeinMotorrad (Kawasaki)

Wie kann ich dann eine von diesen direkt ansprechen?
Ich meine, jedes Objekt hat ein Feld ID, welches eindeutig ist.
Aber wie kann ich nun ein bestimmtes Objekt über seine ID ansprechen?

Per SQL würde ich einfach SELECT * FROM ... WHERE ID=XXX schreiben, was hier aber wohl nicht funktioniert :?

Edit: OK, ich schaue mir mal TObjectList an - danke ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 Uhr.

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