Delphi-PRAXiS
Seite 1 von 3  1 23   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   records oder klassen? (https://www.delphipraxis.net/189248-records-oder-klassen.html)

JayZ 21. Mai 2016 18:46

records oder klassen?
 
hey ich habe einge frage und zwra wann sollte man klassen brauchen und wann sollte man records verwenden? kann ich in recrods auch objekte absperichern und falls ja wie mache ich das mit dem konstruktor den ndas geht ja bei einem recrod gar nicht? danke schon mal!:stupid:

jaenicke 21. Mai 2016 18:53

AW: records oder klassen?
 
Das wäre einfacher, wenn du einen konkreten Anwendungsfall nennen würdest.

Allgemein würde ich in den meisten Fällen Klassen benutzen.
Auch zum Beispiel in Kombination mit Interfaces.

Ausnahmen sind zum Beispiel, wenn du Klassenoperatoren verwenden möchtest oder direkt mit reserviertem Speicher arbeiten möchtest, zum Beispiel zur Nutzung der Windows API.

JayZ 21. Mai 2016 20:07

AW: records oder klassen?
 
Zitat:

Zitat von jaenicke (Beitrag 1338639)
Das wäre einfacher, wenn du einen konkreten Anwendungsfall nennen würdest.

Allgemein würde ich in den meisten Fällen Klassen benutzen.
Auch zum Beispiel in Kombination mit Interfaces.

Ausnahmen sind zum Beispiel, wenn du Klassenoperatoren verwenden möchtest oder direkt mit reserviertem Speicher arbeiten möchtest, zum Beispiel zur Nutzung der Windows API.

also ich weiss nicht ich habe records gerade erste endtdeckt wofür wäre es zum beispielk dnn gut? ich kann ja dort auch funktionen erstellen also wofrür ein objekt erstellen wenn ich recrods benutzen kann? was ist denn klassenoperationen?

mkinzler 21. Mai 2016 20:21

AW: records oder klassen?
 
Beispiel Komplexe Zahl:


Ohne Class Operator:

Delphi-Quellcode:
TComplex = Record
  r: Double;
  i:Double;
End;

function ComplexAdd ( a, b: TComplex); TComplex;

...

c := ComplexAdd(a, b);
Mit

Delphi-Quellcode:
TComplex = Record
  r: Double;
  i:Double;
  Class Operator Add( a, b: TComplex); TComplex;
End;

...

c := a + b;

recall 23. Mai 2016 08:30

AW: records oder klassen?
 
"Historisch" gesehen waren records einmal Klassen, die nur Eigenschaften hatten (keine Methoden etc.). Allerdings sind diese beiden Datentypen immer mehr zusammengrückt, weswegen die Abgrenzung inzwischen etwas schwerer zu verstehen ist. Manchmal wird (auch eher historisch bedingt) das eine oder andere von APIs vorgegeben. Ich denke nicht, dass da man eine allgemeine Regel formulieren sollte, wann man was benutzt. "Falsch" ist keines von beiden.

Hier etwas zu Records:
https://www.delphi-treff.de/object-p...datentypen/#m9

Und hier was zu Klassen:
https://www.delphi-treff.de/object-p...n-und-objekte/

Klassenfunktionen sind übrigens Funktionen, die aufgerufen werden können, ohne dass ein Objekt einer Klasse erzeugt werden muss. Damit kann man natürlich innerhalb so einer Klassenfunktion nicht auf Variablen der Klasse zugreifen, weil ja kein Speicher reserviert wurde (d.h. kein Objekt erstellt).

jaenicke 23. Mai 2016 08:58

AW: records oder klassen?
 
Der Hauptunterschied bleibt aber:
Bei Klassen arbeitet man mit Pointern, bei Records muss man diese explizit benutzen und den Speicher auch ggf. Selbst reservieren und freigeben.

bra 23. Mai 2016 11:24

AW: records oder klassen?
 
Zitat:

Zitat von jaenicke (Beitrag 1338677)
Der Hauptunterschied bleibt aber:
Bei Klassen arbeitet man mit Pointern, bei Records muss man diese explizit benutzen und den Speicher auch ggf. Selbst reservieren und freigeben.

Irgendwie klingt der Satz für mich falsch.

Records: müssen nicht erzeugt und freigegeben werden
Klassen: müssen erzeugt und wieder freigegeben werden (Create...Free)

p80286 23. Mai 2016 11:25

AW: records oder klassen?
 
Zitat:

Zitat von jaenicke (Beitrag 1338677)
Der Hauptunterschied bleibt aber:
Bei Klassen arbeitet man mit Pointern, bei Records muss man diese explizit benutzen und den Speicher auch ggf. Selbst reservieren und freigeben.

Hast Du Dich da ein wenig verformmuliert?
Gerade bei der Nutzung von Klassen kann man das Pointer-Gewusel gut umgehen. Intern sieht das ein wenig anders aus. Und der/die nackte Record hat erst einmal nichts mit Pointern zu tun.
Daß Pointer und Records ein leistungsfähiges Gespann sind, würde ich nie in Abrede stellen.

Gruß
K-H

Edith:
Zitat:

Zitat von bra (Beitrag 1338690)
Records: müssen nicht erzeugt und freigegeben werden
Klassen: müssen erzeugt und wieder freigegeben werden (Create...Free)

Jain, wenn records in einem (statischen)Array genutzt werden ist das richtig. Hast Du z.B. eine einfach verkettete Liste, dann in den allermeisten Fällen nicht.

Christian Seehase 23. Mai 2016 11:49

AW: records oder klassen?
 
Moin recall,

Zitat:

Zitat von recall (Beitrag 1338675)
"Historisch" gesehen waren records einmal Klassen, die nur Eigenschaften hatten (keine Methoden etc.).

das dürfte wohl darauf ankommen, wie weit Du in der Historie zurückgehst.
Ursprünglich dienten Records dazu Daten strukturiert speichern und laden zu können. :wink:
(da waren Klassen bestenfalls in der Idee vorhanden)

Grundsätzlich wäre das dann wohl auch ein Anwendungszweck, bei dem man um Records kaum herumkommt.
(auch wenn bei der heutigen Verbreitung von (lokalen) Datenbanken und xml der Bedarf nicht mehr so hoch sein dürfte).

Wann auch immer Pointer ins Spiel kommen, man um zugeordnete Funktionen/Prozeduren nicht herumkommt oder diese
Datenstrukturen anderweitig zugeordnet werden müssen (z.B. als Object eines Eintrags einer StringListe, würde ich
wohl meist auf eine Klasse zurückgreifen.
Als Rückgabewert einer Funktion kann es mit einer Klasse schwierig werden, hier wäre dann wohl ein Record sinnvoller.
In diesem Falle könnte man dann, ersatzweise, aich einen const Parameter mit einer Klasse übergeben.

Rollo62 23. Mai 2016 12:48

AW: records oder klassen?
 
http://delphi.about.com/od/windowssh...developers.htm

Rollo


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 Uhr.
Seite 1 von 3  1 23   

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