AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Vorteile eines Records gegenüber einer eigenen Klasse?
Thema durchsuchen
Ansicht
Themen-Optionen

Vorteile eines Records gegenüber einer eigenen Klasse?

Ein Thema von malo · begonnen am 2. Feb 2005 · letzter Beitrag vom 4. Feb 2005
Antwort Antwort
Seite 2 von 2     12   
Robert_G
(Gast)

n/a Beiträge
 
#11

Re: Vorteile eines Records gegenüber einer eigenen Klasse?

  Alt 4. Feb 2005, 00:26
Zitat von Binärbaum:
Records sollte man verwenden, wenn es darum geht, schon strukturierte Daten zu speichern (z.B. Adressdaten). Da braucht man dann auch keine Klassen. Klassen sind aber dann nützlich, wenn man für die Daten bestimmte Funktionen/ Prozeduren braucht, die immer wieder auf diese Daten zugreifen. Da sind Klassen sinnvoller als Records.

MfG
Binärbaum

//Edit: immer diese Rechtschreibfehler
Gerade STRUKTURIERTE Informationen haben in records nichts zu suchen.
Strukturiere Infos lassen sich doch viel schöner, flexiber und performanter in Instanzen von Klassen abbilden, die Felder von Instanzen einer Klasse besitzen.
Wenn man nicht gerade mit einem Pointer auf einen Vorschlaghammer (PSledgeHammer = ^TSledgeHammer; ) alle wild umherirrenden Pointer auf Records zusammenhaut, muss man in Kauf nehmen dass sie STÄNDIG KOPIERT werden!
Primitive Typen machen nur Sinn, wenn sie unter einer gewissen Größe bleiben (ca. 10-20 Bytes). Ansonsten verliert man beim Kopieren zuviel Performance gegenüber Objektzeigern (4 Bytes). Zum Bsp: Niemand wird eine Klasse verwenden um einen Int zu benutzen.
Records haben keine Konstruktoren, Destruktoren, Methoden, Properties (sind zwar auch Methoden...) das alleine macht sie schon komplett unnütz um strukturierte Information zu halten.
Die Tatsache, dass man sie nicht voneinander ableiten kann sollte sie komplett verbannen.

Sicher haben Records ihre Daseinsberechtigung, wie will man diese ganzen ekligen Win32 Funktionen ohne Records verwenden?
Das heißt aber nur, dass man diese Zugriffe in Klassen verpacken kann. Records oder API-Aufrufe haben IMHO in der eigentlichen Anwendung nix zu suchen.

Ich persönlich gehe soweit, dass ich Arrays in 99% aller Fälle durch Listen/Collections ersetze. Die kann man schließlich ableiten, wachsen/schrumpfen lassen und mit Methoden, Events und Properties schmücken. Arrays könen nix außer Elemente eines Types zu halten...

Das waren nur meine 2 Cents, zum Thema Vergewaltigung einer OOP-Sprache mit unflexiblen mittelalterlichen Herangehensweisen.
Vielleicht bin ich auch einfach zu sehr .Net-versaut...
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#12

Re: Vorteile eines Records gegenüber einer eigenen Klasse?

  Alt 4. Feb 2005, 01:52
Die Frage an sich könnte auch heißen : "Was schmeckt besser : Äpfel, Birnen oder ein Record ?"

Was man machen kann, heißt noch lange nicht, daß man es machen muß oder sogar soll !! Records kommen aus dem Bereich Datenbank. Man mußte sich pro Datensatz eine Struktur ausdenken, die eben strukturiert ist. Z.B. ging es darum, ein Datum mit Tag, Monat und Jahr abzubilden. Wobei nur integer zur Verfügung stand. Deshalb ein Record mit 3 Untervariablen als integer. Später wurde das dann noch komprimiert usw.

Zu jedem Datum jetzt noch eigene Behandlungsroutinen mitzuschleppen und abzuspeichern ? Was soll das ? Das geht anders viel eleganter. Nun kommen noch Listen Arrays usw. ins Spiel. Gut, ich bleibe mal bei dem Datum : Ich speichere also in der DB einen Monat als Zahl, z.B. 2 für Februar. Der Anwender will nun aber nicht die 2 haben, sondern das Wort "Februar". Was liegt da näher, als die Monatsnamen in einem Array zu speichern ?

Besteht der leiseste Zweifel daran, daß es demnächst nicht mehr 12, sondern 13 Monate oder mehr gibt, so würde ich auch Listen verwenden. Vorher aber nicht.

Lange Rede kurzer Sinn :

Überlegen, ob sich und wenn, dann was sich ändern kann. Bleibt alles so wie gehabt, dann Arrays, Records und ordinale Typen. Geht es ums speichern von Daten dann sowieso. Im Programm selber macht es aber schon Sinn eventuell mit Objekten zu hantieren. Wer nicht mal grundsätzlich OOP einsetzt für ein etwas größeres Programm, der ist selber Schuld und kann letztenendes sowieso einpacken. Aber auch dann gilt, sich das genau zu überlegen, wo was nützlich ist.
Gruß
Hansa
  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
 
#13

Re: Vorteile eines Records gegenüber einer eigenen Klasse?

  Alt 4. Feb 2005, 07:06
Zitat von Hansa:
Die Frage an sich könnte auch heißen : "Was schmeckt besser : Äpfel, Birnen oder ein Record ?"
So hat jeder berechtigterweise seine eigenen Vorlieben und Paradigmen. Deshalb geht es hier nicht um richtig oder falsch!!! In diesem Fall gehöre ich der gleichen Denkschule an wie Robert_G. Irgendwie empfinde ich es logischer, wenn ein Integer wie unter .net seine ToString() Methode gleich mitbringt anstatt eine "externe" Methode (IntToStr) dafür zu verwenden.
Zitat von Hansa:
Was man machen kann, heißt noch lange nicht, daß man es machen muß oder sogar soll !! Records kommen aus dem Bereich Datenbank. Man mußte sich pro Datensatz eine Struktur ausdenken, die eben strukturiert ist. Z.B. ging es darum, ein Datum mit Tag, Monat und Jahr abzubilden. Wobei nur integer zur Verfügung stand. Deshalb ein Record mit 3 Untervariablen als integer. Später wurde das dann noch komprimiert usw.
Gerade in diesem Bereich habe ich die Erfahrung gemacht, dass es wesentlich effektiver ist die Datensatzsturktur auf Objekte abzubilden. Gerade wg der Möglichkeiten der Events und Vererbung. In meinem derzeitgen Projekt mache ich massiv davon gebrauch.
Zitat von Hansa:
Zu jedem Datum jetzt noch eigene Behandlungsroutinen mitzuschleppen und abzuspeichern ? Was soll das ? Das geht anders viel eleganter. Nun kommen noch Listen Arrays usw. ins Spiel. Gut, ich bleibe mal bei dem Datum : Ich speichere also in der DB einen Monat als Zahl, z.B. 2 für Februar. Der Anwender will nun aber nicht die 2 haben, sondern das Wort "Februar". Was liegt da näher, als die Monatsnamen in einem Array zu speichern ?
Hier hätte ich in der Datenbank eine Tabelle mit den Monatsnamen und würde beim SELECT die Nummer gegen den Monatsnamen austauschen.
Zitat von Hansa:
Besteht der leiseste Zweifel daran, daß es demnächst nicht mehr 12, sondern 13 Monate oder mehr gibt, so würde ich auch Listen verwenden. Vorher aber nicht.
In der Buchhaltung gibt es 13 Monate. Manchmal soger 14
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Vorteile eines Records gegenüber einer eigenen Klasse?

  Alt 4. Feb 2005, 07:13
ohne Records könnte man man einen Großteil der ApiAufrufe nicht nutzen da eben eine Struktur erwartet wird bzw. ein Pointer auf diese Struktur. natürlich könnte man an dieser stelle auch ein PChar übergeben der die gewünschte länge hat und diesen dann im Hauptprogramm auseinander stückeln, aber das bringt mehr aufwand als nutzen.
Diesen Apifunktionen Objecte zu übergeben geht nicht da die Objecte sich schon zwischen den Delphiversionen unterscheiden und von DLL's die in anderen Programmiersprachen geschrieben wurden erst recht nicht verwendet werden können.

Oder wie wöllte man ohne Records zum Beispiel folgende Funktionen benutzen
Code:
BOOL GetWindowPlacement(
    HWND hWnd,   // handle of window
    WINDOWPLACEMENT *lpwndpl    // address of structure for position data
   );
Code:
BOOL GetWindowRect(
    HWND hWnd,   // handle of window
    LPRECT lpRect    // address of structure for window coordinates
   );
Man könnte in diesen Fällen eben nur den Umweg über PChars gehen und diese dann später zerpflücken was wie schon geschrieben bissl zu viel aufwand wäre.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#15

Re: Vorteile eines Records gegenüber einer eigenen Klasse?

  Alt 4. Feb 2005, 07:23
Zitat von Robert_G:
Sicher haben Records ihre Daseinsberechtigung, wie will man diese ganzen ekligen Win32 Funktionen ohne Records verwenden?
Das heißt aber nur, dass man diese Zugriffe in Klassen verpacken kann. Records oder API-Aufrufe haben IMHO in der eigentlichen Anwendung nix zu suchen.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Vorteile eines Records gegenüber einer eigenen Klasse?

  Alt 4. Feb 2005, 07:29
Zitat:
Das heißt aber nur, dass man diese Zugriffe in Klassen verpacken kann. Records oder API-Aufrufe haben IMHO in der eigentlichen Anwendung nix zu suchen
Ist das jetzt ironie? Wenn ich einen Record in einer Klasse hab ist er somit doch auch in meiner Hauptanwendung
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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
 
#17

Re: Vorteile eines Records gegenüber einer eigenen Klasse?

  Alt 4. Feb 2005, 07:32
Zitat von SirThornberry:
Zitat:
Das heißt aber nur, dass man diese Zugriffe in Klassen verpacken kann. Records oder API-Aufrufe haben IMHO in der eigentlichen Anwendung nix zu suchen
Ist das jetzt ironie? Wenn ich einen Record in einer Klasse hab ist er somit doch auch in meiner Hauptanwendung
Nein, das ist keine Ironie. Robert_G möchte damit sagen, dass man die API-Aufrufe in Klassen kapseln sollte ( macht die VCL auch). Dann kann der Anwender der Klasse wie gewohnt in OOP Strukturen denken.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#18

Re: Vorteile eines Records gegenüber einer eigenen Klasse?

  Alt 4. Feb 2005, 07:49
aber die klasse welche die API-Funktion kapselt verwendet doch auch records..
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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
 
#19

Re: Vorteile eines Records gegenüber einer eigenen Klasse?

  Alt 4. Feb 2005, 07:52
Zitat von SirThornberry:
aber die klasse welche die API-Funktion kapselt verwendet doch auch records..
Ja - wie sollte es denn sonst funktionieren. Aber darum geht es gar nicht. Es geht darum, dass der Anwender der Klasse sein OOP-Denkmodell bei der Programmierung nicht verlassen muss. Das macht das kapseln von API-Aufrufen in Klassen sinnvoll.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#20

Re: Vorteile eines Records gegenüber einer eigenen Klasse?

  Alt 4. Feb 2005, 07:57
ok, ich hab die ausgangsfrage so verstanden ob records überhaupt noch gebraucht werden.
Desweiteren finde ich es bissl übertriebeben für
Delphi-Quellcode:
BOOL GetWindowRect(
    HWND hWnd, // handle of window
    LPRECT lpRect // address of structure for window coordinates
   );
eine Klasse zu schreiben. das würde doch die ganze Anwendung nur übelst ausbremesen wenn ich jeden aufruf von "BeginPaint" etc. in eine Klasse packe. Dann würde aus einer Zeile für den Aufruf mindestens 3 werden weil ich vorher noch eine instanz erstellen muss und diese auch wieder freigeben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 01:20 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