AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Verwalten von Objekten in einer Container-Klasse
Tutorial durchsuchen
Ansicht
Themen-Optionen

Verwalten von Objekten in einer Container-Klasse

Ein Tutorial von Luckie · begonnen am 12. Mär 2007 · letzter Beitrag vom 17. Apr 2007
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.680 Beiträge
 
Delphi 11 Alexandria
 
#1

Re: Verwalten von Objekten in einer Container-Klasse

  Alt 15. Mär 2007, 07:38
Zitat von IngoD7:
So, wie TAdressBook da jetzt steht (also nur mit der Eigenschaft Contacts), hat es augenscheinlich keinen besonderen Nutzen. Da könnte man auch gleich eine TContactList instanziieren und verwenden.
Das muss ich jetzt aber mal eine Lanze für Luckie brechen: Dieser Thread stellt ein Tutorial dar, wie man das betreffende Problem ideal umsetzt und keine Codebibliothek für eine Adressverwaltung. Die Klasse hätte ja auch TDideldum heissen können. Wer erinnert sich nicht an solch sinnvolle Aufgabenstellungen an der Uni: Erstellen Sie eine JAVA-Anwendung, die ein Flugbuchungssystem abbildet...

Zitat von Luckie:
Und genau deshalb wollte ich sie in dem Tutorial nicht verwenden.
Warum nicht? Man muss es sich doch nicht unnötig schwer machen. Sonst können wir ja IHMO gleich Assembler schreiben.
Sven Harazim
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Verwalten von Objekten in einer Container-Klasse

  Alt 15. Mär 2007, 08:33
Zitat von sh17:
Warum nicht? Man muss es sich doch nicht unnötig schwer machen. Sonst können wir ja IHMO gleich Assembler schreiben.
Naja, für ein Tutorial finde ich es auch sinnvoll nicht TObjectList zu nehmen.
Wobei man hier weiter gehen könnte und eine eigene Liste implementieren kann, die man dann anstatt TList verwendet.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.680 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Verwalten von Objekten in einer Container-Klasse

  Alt 15. Mär 2007, 08:40
ok, ich halt mich raus
Sven Harazim
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Verwalten von Objekten in einer Container-Klasse

  Alt 15. Mär 2007, 08:42
Zitat von sh17:
ok, ich halt mich raus
Pazifisten, pffft!
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.680 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Verwalten von Objekten in einer Container-Klasse

  Alt 15. Mär 2007, 08:45
Zitat von Elvis:
Pazifisten, pffft!
Ich schreib wieder was, wenn's spannend wird.
Sven Harazim
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Verwalten von Objekten in einer Container-Klasse

  Alt 15. Mär 2007, 09:03
Zitat von sh17:
Zitat von IngoD7:
So, wie TAdressBook da jetzt steht (also nur mit der Eigenschaft Contacts), hat es augenscheinlich keinen besonderen Nutzen. Da könnte man auch gleich eine TContactList instanziieren und verwenden.
Das muss ich jetzt aber mal eine Lanze für Luckie brechen:
Das brauchst du nicht. Es hat niemand eine Lanze vor Luckie in den Boden gerammt.

Letztlich sieht er es ja genauso, wie seine Antwort an Thorben_K ein Posting später zeigt.
Sowohl seinen als auch meinen Ausführungen ist diesbezüglich nichts hinzuzufügen.

Zitat von sh17:
Wer erinnert sich nicht an solch sinnvolle Aufgabenstellungen an der Uni: Erstellen Sie eine JAVA-Anwendung, die ein Flugbuchungssystem abbildet...
Ich.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Verwalten von Objekten in einer Container-Klasse

  Alt 15. Mär 2007, 21:53
Zitat von Elvis:
Eine streng typisierte Liste durch Erben von TList ist ein Ding der Unmöglichkeit.
Es könnte sein, das ich schon etwas eingerostet bin. Aber das sollte ein streng typisierter Nachfahre von
TList sein. Sieht eigentlich ganz einfach aus.
Delphi-Quellcode:
unit Unit2;

interface

uses classes;

Type

  TMyListItem = class(TObject)
  private
    FName: String;
    procedure SetName(const Value: String);
  public
    property Name : String read FName write SetName;
  end;

  TMyListItems = class(TList)
  protected
    function Get(Index: Integer): TMyListItem;
    procedure Put(Index: Integer; const Value: TMyListItem);
  public
    function Add : TMyListItem;
    procedure Clear; override;
    function Extract(Item: TMyListItem): TMyListItem;
    function First: TMyListItem;
    function IndexOf(Item: TMyListItem): Integer;
    procedure Insert(Index: Integer; Item: TMyListItem);
    function Last: TMyListItem;
    property Items[Index: Integer]: TMyListItem read Get write Put; default;
  end;

  implementation

{ TMyListItem }

procedure TMyListItem.SetName(const Value: String);
begin
  FName:=Value;
end;

{ TMyListItems }

function TMyListItems.Add: TMyListItem;
begin
  Result:=TMyListItem.Create;
  inherited Add(Result);
end;

procedure TMyListItems.Clear;
var
  iCnt : Integer;
begin
  For iCnt := 0 to Count - 1 do
    TObject(Items[iCnt]).Free;
  inherited Clear;
end;

function TMyListItems.Extract(Item: TMyListItem): TMyListItem;
begin
  Result:=TMyListItem(inherited Extract(Item));
end;

function TMyListItems.First: TMyListItem;
begin
  Result:=TMyListItem(inherited First);
end;

function TMyListItems.Get(Index: Integer): TMyListItem;
begin
  Result:=TMyListItem(inherited Get(Index));
end;

function TMyListItems.IndexOf(Item: TMyListItem): Integer;
begin
  Result:=inherited IndexOf(Item);
end;

procedure TMyListItems.Insert(Index: Integer; Item: TMyListItem);
begin
  inherited Insert(Index,Item);
end;

function TMyListItems.Last: TMyListItem;
begin
  Result:=TMyListItem(inherited Last);
end;

procedure TMyListItems.Put(Index: Integer; const Value: TMyListItem);
begin
  inherited Put(Index,Value);
end;

end.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Verwalten von Objekten in einer Container-Klasse

  Alt 15. Mär 2007, 22:15
Zitat von Jens Schumann:
Zitat von Elvis:
Eine streng typisierte Liste durch Erben von TList ist ein Ding der Unmöglichkeit.
Es könnte sein, das ich schon etwas eingerostet bin. Aber das sollte ein streng typisierter Nachfahre von
TList sein. Sieht eigentlich ganz einfach aus.
Keine Sorge, gegen Rost gibt es Mittelchen in jedem Baumarkt.
Wäre deine Liste wirklich streng typisiert könnte ich das nicht machen:
Delphi-Quellcode:
var
  list : TMyListItems;
  item : TMyListItem;
  evilValue : PInteger;
begin
  ...
  new(evilValue);
  list.Add(evilValue);

  item := list[0];

  WriteLn(item.Name); //Hmpf? Was steht denn da drin?
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Verwalten von Objekten in einer Container-Klasse

  Alt 15. Mär 2007, 22:46
Ich habe jetzt mal die Vorschläge eingearbeitet. Demo und PDF wurden auch aktualisiert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Verwalten von Objekten in einer Container-Klasse

  Alt 16. Mär 2007, 00:43
Zitat von Luckie:
Erst wird das Objekt in der Liste freigegeben und dann aus der selbigen gelöscht. Ebenso verfährt man beim Freigeben der Container-Klasse:
Delphi-Quellcode:
destructor TContactList.Destroy;
var
  i : Integer;
begin
  if FInnerList.Count > 0 then
  begin
    for i := FInnerList.Count - 1 downto 0 do
    begin
      TObject(FInnerList.Items[i]).Free;
    end;
  end;
  FInnerList.Free;
  inherited;
end;
Erst geht man die Liste durch und gibt alle in ihr enthaltenen Objekte frei. Dann gibt man die Liste selber frei. Wichtig ist, dass die Schleife rückwärts laufen muss, da die Eingangsbedingung einer for-Schleife nur beim Eintritt in die Schleife geprüft wird, aber in der Schleife entfernen wir ja Elemente, so dass wir, wenn die Schleife vorwärts liefe, über die Anzahl der Elemente hinauslaufen würden.
Ähm... also irgendwie passen diese Zeilen nicht zusammen... Du führst doch nur ein Free() aus und kein Delete() auf die einzelnen Objekte - die Schleife könnte also genauso gut vorwärts laufen. Isses schon zu spät oder hab ich gut aufgepasst?
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 19:57 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