AGB  ·  Datenschutz  ·  Impressum  







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

Object dynamisch in einem Array erzeufen

Ein Thema von gangs-taas · begonnen am 11. Okt 2010 · letzter Beitrag vom 14. Okt 2010
Antwort Antwort
Seite 2 von 3     12 3      
gangs-taas

Registriert seit: 24. Mär 2009
364 Beiträge
 
#11

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 18:00
soo ich hab dann jetzt noch einmal ein paar frage :

1) OOP beduetet doch, dass ich die einzellnen Procedures und Properties "fest in ein objekt binde, so dass sie nach außen gekapselt erscheinen und nicht manipuliert werden können" (sinngemäß nach wikipedia)
ich versteh nicht warum ihr meint, dass die Array nicht OOP seien. Schließlich verwaltet das Array doch nur OBJEKTE (=> es gibt objekte => oop)
Was ist daran jetzt so falsch ? oder was hab ich noch nicht verstanden ?

2) zu dem code von shmia :
du schreibst, du würdest die Komponenten erzeugen und in die Liste packen
aber ich sehe einfach nicht, warum deine mehtode jetzt unbedigt so viel einfacher oder so wäre ...


lg
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 18:37
OOP fängt bei Delphi mit TObject an und baut sich darauf auf
Keine Arrays (das war damals) sondern TList (kommt von TObject) oder von TList abgeleitet.

Ein Großer Vorteil von OOP ist die Vererbung und das geht bei Array nicht
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#13

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 18:42
Also ich finde Templates nicht schwierig.

Im Bezug auf mein voriges Posting:

- das erste Listing 1 zu 1 übernehmen
- der zweite Listing ist das Objekt das in der Liste gespeichert werden, ein ganz normales Objekt. Das hat nichts mit dem Template zu tun.
- das dritte Listing macht jetzt den Trick, dazu kann man einfach mein Listing nehmen und an den entscheidenden Stellen ändern. (Bei uses die Unit angeben und beim 1. type die Klasse angeben, ab dem 2. type KANN der Name der Liste geändert werden.)

Benutzung wie normales TList mit Typisierung.

Delphi-Quellcode:
  ObjectX := TObjectX.Create(...);
  ObjectXList := TObjectXList.Create(...);

  ObjectX.blabla := ....
  ...

  ObjectXList.Add(Object);

  ...
  ...

  ObjectXList.Items[i].blaba..... (und nicht TObjectX(ObjectXList.Items[i]).blaba) oder
  ObjectXList[i].blaba..... (und nicht TObjectX(ObjectXList[i]).blaba)
Hat den entscheidenden Vorteil, daß in der Liste immer Objekte vom gewünschten Typ sind und keine Fehler produziert wenn ein falsches typecasting (weil nicht nötig ) gemacht wird.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#14

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 18:45
zu 1.)
Arrays sind relativ primitive Datentypen.
Das heisst jetzt nicht das an Arrays irgendetwas schlecht wäre;
es ist nur so, dass es Bausteine (Klassen und Objekte) auf höherer (Abstraktions-)Ebene gibt,
mit denen man bestimmte Dinge einfacher, besser und verständlicher lösen kann.

Man könnte eine Rangfolge (von primitiv bis abstrakt) der Datentypen aufstellen
1) char, integer, double, cardinal,...
2) array mit festen Grenzen, Aufzählungstypen
3) dynamische Arrays, Strings, Mengen
4) Records, Listen
5) Klassen
6) Templates
7) Zusammenarbeit mehrerer Klassen / Designpattern
OOP spielt sich hauptsächlich bei 5),6) und 7) ab.


zu 2.)
* ist dir aufgefallen, dass du Komponenten ganz einfach in "FMyList" packen kannst?
Delphi-Quellcode:
// Label erzeugen und an "FMyList" anhängen
lbl := TLabel.Create(FMyList {<== hier});
Einfacher geht's ja wohl nicht.
Dadurch das du FMylist als sogannten Owner (Besitzer) im Create angegeben hast,
landet das neue Label in FMyList.
* ist dir aufgefallen, dass du dir keinerlei Gedanken machen musst,
auf welcher Position das Label, Editfeld gespeichert wird?
Bei einem Array müsstest du a.) immer aufpassen dass das Array groß genug ist und b.)
immer mitzählen.
* ist dir aufgefallen, dass du deine Komponenten nirgends freigeben musst?
Weil FMyList dem Formular gehört wird FMyList und alles was darunter hängt AUTOMATISCH freigegeben.
Bei einen Array müsstest du in einer Schleife über alle Objekte gehen und jedes einzeln freigeben.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 19:03
Um Deine Objekte nur in einer Liste zu speichern kannst Du im Grunde beides nutzen (ist quasi Geschmackssache).
Mit einer TList oder TObjectList ist es aber insgesamt komfortabler.

Arrays würde ich nur bei sehr kleinen Mengen oder im Gegenteil bei größeren, mehrdimensionalen Mengen nutzen.

Wenn eine Sammlung von Objekten gespeichert werden, bietet sich eine TObjectList ideal an.
Das geht so weit, dass beim Löschen eines Objekts aus der Liste dieses auch automatisch freigegeben werden kann.

...

Vielleicht verwirrt Dich das o.g. Beispiel der geschätzten Kollegen mit dem "FMyList" etwas... (könnte ich mir zumindest vorstellen).
"FMyList" ist von der Klasse TComponent.
Diese verwaltet wiederum intern eine Liste von allen Komponenten, die ihr untergeordnet sind.
Auf diese könnte man z.B. in einer Schleife auch zugreifen z.B. durch

Delphi-Quellcode:
  I: Integer;
  C: TComponent;
begin
  for I := 0 to MyList.ComponentCount - 1 do
  begin
    C := MyList.Components[I];
    C.TuWas;
  end;
end;
Du kannst jedoch auch eine "richtige" TList oder TObjectObjectList verwenden und dann direkt damit arbeiten.

Die Beizeichnung "FMyList" ist also vielleicht etwas verwirrend, da ja keine TList benutzt wird.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (13. Okt 2010 um 19:06 Uhr)
  Mit Zitat antworten Zitat
gangs-taas

Registriert seit: 24. Mär 2009
364 Beiträge
 
#16

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 20:22
hey,
noch einmal vielen dank für eure vielen antworten.
Leider muss ich zugeben, dass ich bei der Hälfte nur Bahnhof versteh.

z.B. was Templates sind versteh ich nicht wirklich. Bzw. nicht ihren nutzen
auf der einzigen deutschen Internetseite (diei ch gefunden hab) steht zu Templates : [QUOTE = http://www.dummzeuch.de/delphi/objec...tsch.html]Dies ist eine Klasse mit einem Array, die beim Zugriff ueberprueft, ob der Index innerhalb der Arraygrenzen liegt.[/QUOTE]
okay heißt ein Template hilft also bei einem Array keine Elemente anzusprechen, die nich existieren.

kann ich nicht einfach überprüfen, ob das Array Element existiert und fertig ?

von dem Code den David Martens auf der ersten seite gepostet hat versteh ich ehrlich gesagt fast nichts.

So dann habt ihr von der ObjectList gesprochen. Das hinzufügen sieht ja ganz einfach aus, aber ich finde wenn ich ein Elemt ansprechen will und dafür jedesmal TKlasse(ObjectList.last).methode; schreiben muss, ist das ganze irg. umständlich.

Das was David Martens geschriebne hat :

Delphi-Quellcode:
  ObjectX := TObjectX.Create(...);
  ObjectXList := TObjectXList.Create(...);

  ObjectX.blabla := ....
  ...

  ObjectXList.Add(Object);

  ...
  ...

  ObjectXList.Items[i].blaba..... (und nicht TObjectX(ObjectXList.Items[i]).blaba) oder
  ObjectXList[i].blaba..... (und nicht TObjectX(ObjectXList[i]).blaba)
sieht ja wieder relativ einfach aus, aber wenn sich das immer noch auf Templates bezieht fürchte ich, dass ich damit nicht sonderlich viel machen kann, da ich die irg. nicht verstanden hab

Die Internetseite Link spricht davon, dass man TObjectList's so typisieren kann, dass man Elemente ähnlich Wie David M. das macht ansprechen kann.
Leider steht da auch nur ein haufen Code und keine Erklärung und ich versteh nicht wikrlich was sie wieso machen ...

Geändert von gangs-taas (13. Okt 2010 um 23:15 Uhr)
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#17

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 20:43
@David Martens
Ich wollt hier mal kurz in die Diskussion springen und sagen, dass dies Objectlist-Template eigentlich sehr gut funktioniert.
Es sieht zwar etwas ungewöhnlich aus, da man dies Templete 2x geteilt in die Unit einfügen muß, ansonsten spart es viel Platz/ Code.
Ein Nachteil habe ich aber ausgemacht, man kann dies Template nur einmal in eine Unit einfügen. Wenn man mehrere Listen -der Code ist jetzt ja schön kurz- in einer Unit verarbeiten will, funktioniert das nicht -jedenfalls bei mir-.

Gruss Jens
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 21:20
... was Tamplates sind versteh ich nicht wirklich
nur so am Rande es heißt Templates
okay heißt ein Tamplate hilft also bei einem Array keine Elemente anzusprechen, die nich existieren.
Nein, das ist nur ein Beispiel wie man Templates verwenden kann
So dann habt ihr von der ObjectList gesprochen. Das hinzufügen sieht ja ganz einfach aus, aber ich finde wenn ich ein Elemt ansprechen will und dafür jedesmal TKlasse(ObjectList.last).methode; schreiben muss, ist das ganze irg. umständlich.
Dafür nimmt man das Template von David Martens denn dann entfällt dieses umfudeln (nennt man Typecast)
Ohne Templates muss man halt den Typecast machen

Wenn du ein neueres Delphi hast (ab D2009) dann gibt es die Generics und da geht das dann ganz einfach
Delphi-Quellcode:
Type
  TFoo = class
   Data : string;
  end;

  TFooList = TObjectList<TFoo>;
Dieser Code ab D2009 bringt im Ergebnis den gleichen Effekt wie das Template von David Martens
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 22:15
Hallo,

die TList, TObectlist usw. arbeitet aber intern auch mit einem Pointer-Array.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 22:21
Also der arme gangs-taas tut mir leid.
Er wollte doch nur wissen, was sich für den Einstieg am einfachsten anwenden lässt...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 15:29 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