AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

records oder klassen?

Ein Thema von JayZ · begonnen am 21. Mai 2016 · letzter Beitrag vom 9. Jun 2016
Antwort Antwort
Seite 1 von 2  1 2   
mkinzler
(Moderator)

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

AW: records oder klassen?

  Alt 21. Mai 2016, 19:21
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;
Markus Kinzler
  Mit Zitat antworten Zitat
recall

Registriert seit: 21. Dez 2004
Ort: Hannover
9 Beiträge
 
Delphi XE5 Professional
 
#2

AW: records oder klassen?

  Alt 23. Mai 2016, 07:30
"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).
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.064 Beiträge
 
Delphi 12 Athens
 
#3

AW: records oder klassen?

  Alt 23. Mai 2016, 07:58
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: records oder klassen?

  Alt 23. Mai 2016, 10:24
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)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: records oder klassen?

  Alt 23. Mai 2016, 10:25
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:
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.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (23. Mai 2016 um 10:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.165 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: records oder klassen?

  Alt 27. Mai 2016, 02:28
Bei
Delphi-Quellcode:
procedure irgendwas;
var
  pmyrecord : ^myrecordtype;
begin
  new(pmyrecord);
...
end;
Ist es der Heap der die Daten aufnimmt.
Nööö bzw. das sind den hier die Daten?

"Die Daten" ist hier ein Pointer...

und genau das hat jaenicke hiermit gemeint...

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.
Natürlich nicht der "eine" Record, der mit einer Variablen definiert ist...

"Früher" wurden halt Records genutzt um Daten zu Speichern... Also war der Record EIN Datensatz. Da man nur 64KB Datensegment hatte, konnte man nicht beliebig viele Daten in einen Array of Record halten, sondern musste den Speicher vom HEAP anfordern. (New/Getmen)

Daher der Hinweis auf: Selber reservieren und freigeben...

Eine Klasse ist eigentlich "fast" nix anderes nur das man hier direkt den Pointer auf den Speicher hat... (Und noch ein bisschen mehr)

Also ob ich

Delphi-Quellcode:
type
  TMyDaten = Record
               Bla : Integer;
               Foo : boolean;
             end;
var
  PMyDaten = ^MyDaten;
begin
  New(PMyDaten);
  try
    PMyDaten^.Bla := 42;
  finally
    Dispose(PMyDaten);
  end;
end;
oder

Delphi-Quellcode:
type
  TMyDaten = Class
    public
      Bla : Integer;
      Foo : boolean;
  end;

Var
  MyDaten : TMyDaten;
begin
  MyDaten := TMyDaten.Create;
  try
    MyDaten.Bla := 42;
  finally
    MyDaten.Free;
  end;
end;
Ist "fast" gleich...

Mavarik
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.124 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: records oder klassen?

  Alt 23. Mai 2016, 10:49
Moin recall,

"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.
(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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#8

AW: records oder klassen?

  Alt 23. Mai 2016, 11:48
http://delphi.about.com/od/windowssh...developers.htm

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: records oder klassen?

  Alt 23. Mai 2016, 12:22
Und was hat der Unterschied zwischen Stack und Heap jetzt mit Records und Klassen zu tun?
(naja einen Berührungspunkt wird man bestimmt finden)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

AW: records oder klassen?

  Alt 23. Mai 2016, 13:10
Und was hat der Unterschied zwischen Stack und Heap jetzt mit Records und Klassen zu tun?
Records werden auf dem Stack erstellt, Klassen auf dem Heap. Daher auch der Unterschied mit Erstellen/Freigeben.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:17 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