AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verschachtelte Objekte

Ein Thema von Sadum · begonnen am 9. Sep 2006 · letzter Beitrag vom 15. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Sadum

Registriert seit: 30. Aug 2006
9 Beiträge
 
#1

Verschachtelte Objekte

  Alt 9. Sep 2006, 21:55
Hallo,

Ich möchte gerne Objekte direkt wie 'Stammbäume' verwalten, um allgemeine Probleme immer weiter in 'Unterobjekte' zu sortieren, anstelle durch Vererbung einen ungeordneten Haufen Nachfahren zu erzeugen.

Also zum Beispiel (Pseudo Code):

Fahrzeug.PKW.Jeep.bauen;

Anstelle von:

PKW = class (Fahrzeug);
Jeep = class (PKW);
Jeep.bauen;

Das Problem ist nur, dass ich zwar Unterobjekte in Objekte stecken kann, diese aber leider die Methoden und Felder des Objektes in dem sie stecken nicht nutzen können (man könnte in Jeep.bauen ja z.B. eine bereits vorhandene Prozedur PKW.bauen des übergeorneten Objekts 'PKW' verwenden wollen), da wenn ich sie als Nachfahren des übergeordneten Objekts deklariere, ich sie nicht auch schon als einen Bestandteil des übergeordneten Objekts verwendet haben darf (was aber für die Schachtelung nötig ist).
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Verschachtelte Objekte

  Alt 9. Sep 2006, 21:59
Das von dir angestrebte System hat einen eklatanten Nachteil: wenn du einen neuen Nacfahren hinzufügst, mußt du das komplette System anpassen. Ich sehe auch keinen Vorteil in dieser Vorgehensweise. was gefällt dir an Vererbung nicht?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Verschachtelte Objekte

  Alt 9. Sep 2006, 22:04
Hallo, virtuelle Methoden sind dein Mittel der Wahl.

Delphi-Quellcode:
type
  TAuto = class
  public
    procedure Bauen; virtual; abstract;
  end;

  TJeep = class(TAuto)
  public
    procedure Bauen; override;
  end;
So kannst du jederzeit jeep.Bauen oder (jeep as TAuto).Bauen aufrufen, auch wenn du so was hast:

Delphi-Quellcode:
function IrgendeinAuto:TAuto;
begin
  if Random > 0.5 then
    Result := TJeep.Create
  else
    Result := TPKWCreate;
end;
Kannst du sowas machen:

Delphi-Quellcode:
with IrgendeinAuto do
begin
  Bauen;
  {Fahren;
  Verschrotten;}
 //nur so als beispiel ;)
  Free;
end;
EDIT: Wobei das, was du jetzt hier willst, mir eher sinnlos erscheibnt. So eine Klassen"hierarchie", mein ich
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
HalloDu

Registriert seit: 24. Apr 2006
Ort: Oelde
267 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Verschachtelte Objekte

  Alt 9. Sep 2006, 22:06
Ich würde es mal so versuchen:
Delphi-Quellcode:
type TPKW = class
     Jeep: TJeep
     procedure Fahren;
     end;
type TJeep = class
     Wuestenjeep: TWuestenjeep;
     GelaendeIndex: Integer;
     end;
type TWuestenjeep = class
     procedure Springen;
     end;
Damit könntest du dann in solche Konstrukte bauen: PKW.fahren; PKW.Jeep.GeleandeIndex; PKW.Jeep.Wuestenjeep.Springen; Trotzdem würde ich dir die gute alte Vererbung empfehlen.

Hoffe es hilt dir beim

Mfg HalloDu

EDIT: Ich kann meinen Vorrednern nur zustimmen: Versuch es mit Vererbung.
Frederic H.
  Mit Zitat antworten Zitat
Sadum

Registriert seit: 30. Aug 2006
9 Beiträge
 
#5

Re: Verschachtelte Objekte

  Alt 9. Sep 2006, 22:19
Zitat von mkinzler:
Das von dir angestrebte System hat einen eklatanten Nachteil: wenn du einen neuen Nacfahren hinzufügst, mußt du das komplette System anpassen. Ich sehe auch keinen Vorteil in dieser Vorgehensweise. was gefällt dir an Vererbung nicht?
Ich finde damit ist alles einfach besser sortiert.
Delphi selbst verwendet diese Vorgehensweise doch auch:

form1.label1.caption := 'Test';

oder noch stärker bei TWebBrowser:

form1.WebBrowser1.OleObject.document.forms.item(nr ).elements.item(nr).click;

Zitat von HalloDu:
Ich würde es mal so versuchen:
Delphi-Quellcode:
type TPKW = class
     Jeep: TJeep
     procedure Fahren;
     end;
type TJeep = class
     Wuestenjeep: TWuestenjeep;
     GelaendeIndex: Integer;
     end;
type TWuestenjeep = class
     procedure Springen;
     end;
Es ist gerade mein Problem, dass eben so etwas nicht geht, weil ich bei der Deklaration von TPKW, den Ausdruck 'Jeep: TJeep'
gar nicht verwenden darf, da TJeep noch gar nicht bekannt ist!
  Mit Zitat antworten Zitat
HalloDu

Registriert seit: 24. Apr 2006
Ort: Oelde
267 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Verschachtelte Objekte

  Alt 9. Sep 2006, 22:26
Delphi muss das benutzen, weil dort zuerst einmal die Unterobjekte von TForm verschieden seien können und man z.B. kein TLabel von einer TForm ableiten kann. Diese Hierachie kommt auch zustande weil das TForm Objekt ein Visueller Container ist in den man andere Objekte stecken kann.

Mfg HalloDu

Zu deiner Bemerkung: Die Typen müssen auch so stehen, also letzter Type muss als erstes definiert werden also: 1.Wuestenjeep, 2.Jepp, 3. PKW

EDIT: Und falls du Together hast kannst du Hierachie mit Verebung auch viel besser verwalten als mit deinem Konzept, dass ja nunmal sehr aufwendig ist.
Frederic H.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Verschachtelte Objekte

  Alt 9. Sep 2006, 22:27
Das hat aber einen ganz anderen Aufbau!

Das ist ja keine Klassenhierarchie.

Zwischen
Fahrzeug->PKW->BMW->Z3
besteht doch ein ganz anderer zusammenhang als zwischen
root->node1->properties->name



@Dein Problem: "forward declaration"

Delphi-Quellcode:
type
  T1 = class;
  T2 = class
    t1_ding: T1
  end;
  T1 = class
    t2_ding: T2;
Ansonsten, das bei dir ja nur in eine richtung geht, kannst fus einfach umdrehen und zuerst TWüstenAusgrabungsPyramidenFallenAusweichBrückenba uJeep deklarieren
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Sadum

Registriert seit: 30. Aug 2006
9 Beiträge
 
#8

Re: Verschachtelte Objekte

  Alt 9. Sep 2006, 23:20
Zitat von DGL-luke:
@Dein Problem: "forward declaration"

Delphi-Quellcode:
type
  T1 = class;
  end;
  T2 = class;
    t1_ding: T1;
  end;
  T1 = class
    t2_ding: T2;
  end;
Leider nimmt Delphi bei mir so ein Konstrukt nicht. -> Meldung: Bezeichner redefiniert!

Und mit
Delphi-Quellcode:
type
  Tjeep = class
  public
      procedure fahren;
  end;

type
  Tpkw = class
  public
      gelaendeindex : integer;
      jeep : Tjeep;
  end;

implementation

procedure Tjeep.fahren;
begin
    showmessage ('Jeep fährt'+inttostr(gelaendeindex)); // Fehler
end;
habe ich wie gesagt das Problem, dass Tjeep.fahren nicht auf Variablen des übergeorneten Objekts (gelaendeindex) zugreifen kann.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Verschachtelte Objekte

  Alt 9. Sep 2006, 23:23
Delphi-Quellcode:
type
  T1 = class;
  end;
  T2 = class;
    t1_ding: T1;
  end;
  T1 = class
    t2_ding: T2;
  end;
Das ist nicht das, was ich vorgeschlagen hatte
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
HalloDu

Registriert seit: 24. Apr 2006
Ort: Oelde
267 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Verschachtelte Objekte

  Alt 9. Sep 2006, 23:35
Ich hab jetzt mal kurz ein Beispiel, wie du das haben möchtest geschrieben, aber dabei ist mir aufgefallen, dass auch die Zeilen sehr lang werden.
Hier ist das Beispiel

EDIT: An deinem Beispiel siehtst du auch wie unpraktisch dein Konzept ist, denn du kannst nicht auf Variablen und Methoden von Übergeorneten Objekten zugreifen, was bei Vererbung in den meisten Fällen möglich ist.
Angehängte Dateien
Dateityp: rar bsp_194.rar (163,0 KB, 7x aufgerufen)
Frederic H.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 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