AGB  ·  Datenschutz  ·  Impressum  







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

Vorteile von Records gegenüber Objekten

Offene Frage von "JamesTKirk"
Ein Thema von Luckie · begonnen am 6. Mai 2011 · letzter Beitrag vom 12. Mai 2011
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#21

AW: Vorteile von Records gegenüber Objekten

  Alt 6. Mai 2011, 12:47
Ich finde, vieles kann man mit beiden lösen (TObject oder Record).
Der Unterschied bzw. die Eignung ergibt sich dann, wenn man viele dieser Strukturen verwalten will. Bei Records müsste man ein Array of <meinRecord> verwenden. Wobei dann das Handling (Records löschen, hinzufügen etc.) relativ umständlich ist und man mit SetLength(Array, Count) u.d.gl. arbeiten müsste. In so einem Falle würde ich dann TObject bevorzugen, weil dann einfach eine TList genutzt werden kann (mit ihrem gesamten Funktionsumfang).
Records verwende ich bei fester Anzahl. Da wird das Array of Record nur einmalig auf die richtige Länge gesetzt und jeder Record kann (z.B) aus eine Ini oder XML eingelesen werden, wobei so ein Record einfach die entsprechenden Methoden (zB. LoadFromXML, SaveToXML) selbst beinhalten kann.
Das macht manches einfach einfacher
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#22

AW: Vorteile von Records gegenüber Objekten

  Alt 6. Mai 2011, 12:51
Ein Nachteil von Records ist sicherlich, das ich die ganze Speicherverwaltung am Hals habe, wenn ich Records in Listen unterbringen will (Siehe VirtualTreeview).

Also GetMem und add Pointer in Liste. Beim Aufräumen freemem nicht vergessen.

Peter
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#23

AW: Vorteile von Records gegenüber Objekten

  Alt 6. Mai 2011, 12:52
Bei Records müsste man ein Array of <meinRecord> verwenden.[...] In so einem Falle würde ich dann TObject bevorzugen, weil dann einfach eine TList genutzt werden kann [...]
Records kann man auch in Listen verwalten - erst recht in generischen?!


@hanspeter:
Ebenfalls nicht, wenn man generische Listen nutzt.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#24

AW: Vorteile von Records gegenüber Objekten

  Alt 6. Mai 2011, 12:53
Ein Nachteil von Records ist sicherlich, das ich die ganze Speicherverwaltung am Hals habe, wenn ich Records in Listen unterbringen will (Siehe VirtualTreeview).

Also GetMem und add Pointer in Liste. Beim Aufräumen freemem nicht vergessen.

Peter
Für sowas würde ich auf jedenfall Klassen verwenden. Wobei das immer auf die Architektur im Hintergrund ankommt. In dem Fall: DataManager enthält alle Datenobjekte, dann gibts ein FilterManager, der dem VST/VDT/VTV dann nur die passenden anbietet und so eben nur eine Referenz darauf bekommt. Um die Freigabe muss sich der DataManager kümmern.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#25

AW: Vorteile von Records gegenüber Objekten

  Alt 6. Mai 2011, 13:06
Bei Records müsste man ein Array of <meinRecord> verwenden. Wobei dann das Handling (Records löschen, hinzufügen etc.) relativ umständlich ist und man mit SetLength(Array, Count) u.d.gl. arbeiten müsste.
TList<> , die Generische


Wenn man die Daten an mehreren Stellen verlinken will, dann kommt man mit Objewkten auch besser, da dort die Zeiger schon eingebaut sind.

Bei Objekten muß man den Speicher aber auch überall selber erstellen und diese eventuell auch wieder manuell freigeben.

Ein Array of TObjekt macht da dann schon mehr arbeit, als ein Array of Record .
Einfach ein einziges SetLength und schon sind alle Records vorhanden.
$2B or not $2B

Geändert von himitsu ( 6. Mai 2011 um 13:10 Uhr)
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#26

AW: Vorteile von Records gegenüber Objekten

  Alt 6. Mai 2011, 13:51

Ein Array of TObjekt macht da dann schon mehr arbeit, als ein Array of Record .
Einfach ein einziges SetLength und schon sind alle Records vorhanden.
Ich meine das, zumindest in einer Procedure die Records auf dem Stack angelegt werden.
Also vergesse nicht Stackframe hochzusetzen. Wo ist eigentlich der Stack bei modernen Processoren begrenzt? "Unendlich" Speicherplatz hat man nur auf dem Heap.

Peter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#27

AW: Vorteile von Records gegenüber Objekten

  Alt 6. Mai 2011, 14:47
Es werden nur die sttischen Daten auf den Stack gelegt, wie die ganzen Grundtypen (integer und Co.), die kleinen Records und die teilweise schon recht großen statischen Arrays.
Bei dynamischen Arrays liegt ja nur der Zeiger auf'm Stack.

nja, ich glaub am Stack haben die nicht viel verändert, aber da man mehr virtuellen RAM zur Vefügung hat, wird man den schon recht hochschrauben können.
Aber da es eh nicht sinnvoll ist, den Stack all zu sehr zu belasten, stellt sich diese Frage meistens ja garnicht erst.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#28

AW: Vorteile von Records gegenüber Objekten

  Alt 6. Mai 2011, 16:50
Vorteil class :
* Vererbung (inklusive virtuelle Methoden)
* implizite Pointer auf den Heap

Vorteil record :
* variante Teile
* konstante Initialisierung möglich
* können anonym deklariert werden
* liegen auf dem Stack
* schreiben in/lesen aus Datei (falls keine automatisierten Typen verwendet werden)
* können Operatoren beinhalten (gilt diese Einschränkung für Klassen noch immer?) => wichtig für Generics

Vorteil object (wer sagt, dass die deprecated sind, mag für Delphi recht haben, aber nicht für FPC (erst recht nicht im Compiler selbst )):
* konstante Initialisierung möglich
* liegen auf dem Stack
* Vererbung (inklusive virtuelle Methoden)

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#29

AW: Vorteile von Records gegenüber Objekten

  Alt 6. Mai 2011, 17:02
* können Operatoren beinhalten (gilt diese Einschränkung für Klassen noch immer?)
Das wird und kann sich auch nicht ändern.

Zitat von siehe Beitrag #9:
Bei Objekten geht sowas aber nicht (niemals, also nicht ohne soeinen komischen Garbage-Collector)
Wie gesagt, für Interfaces wäre es eigentlich möglich.
Wobei von mir ja eine der kleinen Mathe-libs als Beispiel diehnt, wie man ein interface danz nett in einem Record verpackt mit Operatoren versehen könnte.
$2B or not $2B
  Mit Zitat antworten Zitat
Elvis

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

AW: Vorteile von Records gegenüber Objekten

  Alt 6. Mai 2011, 18:14
Eine Sache, die vllt immer etwas kurz kommt:
Records sind da, um sich eigene Datentypen zu bauen. Zum Beispiel eine Zahl mit unendlich vielen Stellen.
Da sie Operatoren besitzen können, kann das komplett transparent passieren. Also kann man sich selbst einen Typen schaffen, der sich genauso natürlich verhält, wie es Integer tut.

Außerdem gibt es ab & zu die Notwendigkeit Speicherbereiche exakt abzubilden. Zum Beispiel weil man eine DLL-Funktion aufruft, die Daten in einer genauen Struktur erwartet, oder weil man in ein genau definiertes binäres Dateiformat schreibt.

Ansonsten fällt mir jetzt nix ein, für das ein Record tatsächlich, auf die gesamte Projekt-Lebenszeit[1], irgendeinen Sinn macht.

Wie ich bereits in einem anderem Thread schrieb: Wer Records benutzt um Objekte oder Entitäten abzubilden, weil er keinen Bock auf Speichermanagement hat, der hat sich für die falsche Laufzeitumgegung entschieden. Denn derjenige will ganz offensichtlich eigentlich eine Umgebung mit Unterstützung für Garbage-Collection verwenden.
In Delphi hat man nunmal manuelle Speicherverwaltung für Klassen, und Kalssen sind in Delphi das einzge, was auf Dauer in der Lage ist, Objekte und Abläufe abzubilden.
Wer das nicht mag, sollte sich genau überlegen, was das eigentlich für ihn bedeutet, oder ob er sich nicht mit wirklichen OOP anfreunden will.



[1] nicht nur bis man die aktuelle Methode geschrieben hat
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
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    


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 07:43 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