AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Accessing a Record Structure Programatically

Accessing a Record Structure Programatically

Ein Thema von Pluto · begonnen am 14. Mai 2008 · letzter Beitrag vom 22. Mai 2008
Antwort Antwort
Seite 2 von 2     12
Hansa

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

Re: Accessing a Record Structure Programatically

  Alt 18. Mai 2008, 05:23
Zitat von Pluto:
Noch ein Hinweis:
Nicht jeder, der hier eine Frage stellt, ist ein Anfänger. Bemerkungen wie "also OOP lernen" sollte man mit Vorsicht verwenden!..
Der Titel lässt aber andere Schlüsse in Richtung "Anfänger" zu !! Du willst zudem einem Record Intelligenz beibringen. Das ist aber OOP, ob es Dir passt oder nicht.
Gruß
Hansa
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#12

Re: Accessing a Record Structure Programatically

  Alt 18. Mai 2008, 09:06
Zitat von Pluto:
War hier unpassend, zumal die Frage sich auf Records bezog. Ein Record ist ein Typ aber kein Objekt. Den hat schon Prof. Wirth 1972 definiert, als noch niemand an Objekte dachte.
ganz so ist es nicht. hier war schon der vertreter von objektorientierung schlechthin (Smalltalk lebendig. hatte damals aber die allgemeinen programmiersprachen noch nicht infiziert.

siehe hierzu auch:
PS: records und opp sind zwei welten. denn die idee von opp war ja gerade intelligente daten zu kreieren welche wissen wie sie verarbeitet werden können. daher wäre die recorderweiterung seit D2006 als mini-opp anzusehen
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#13

Re: Accessing a Record Structure Programatically

  Alt 18. Mai 2008, 09:13
Zitat von Pluto:
Googlen brachte einen Eintrag von www.experts-exchange.com, der eine Lösung versprach.
Die sind recht teuer! Hab's doch mal mit einem Probeaccount versucht:
Ich habe noch einen Gratis Account von früher.
Du kannst den Direktlink angeben, dann kann ich schauen, ob dort etwas zutreffendes steht.
Thomas
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: Accessing a Record Structure Programatically

  Alt 18. Mai 2008, 11:02
Da Records statisch sind, ist es überflüssig, die RTTY-Information im Code verfügbar zu machen.

Du kannst aber einen Parser implementieren, der deine Recordstruktur einliest und die entsprechende Information zur Laufzeit generiert.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#15

Re: Accessing a Record Structure Programatically

  Alt 18. Mai 2008, 14:14
Zum Thema OOP:
ein guter Programmierer muss merken, wenn ein Record für das gegebene Problem zu schwach ist
und aus dem Record eine Klasse machen.
Er wird dem Record auch nicht länger nachtrauern, sondern die Änderung wird durchgezogen
(je früher desto besser).
Und wenn es an vielen Stellen eine Umstellung gibt, zeigt das nur, wie bitter nötig dies war.

Zum Thema Array:
viele Programmierer greifen zum Array (meist zum dynamischen Array) obwohl eine TList-Klasse
wesentlich geeigneter für das Problem wäre.
Ein Array hat keine eigene Intelligenz, während TList, TObjectList, ... dem Programmierer viel Arbeit abnehmen!

Zum Thema Quicksort:
Beim Sortieren werden im Prinzip nur 2 Funktionen benötigt COMPARE und EXCHANGE.
Exchange, also das Vertauschen zweier Elemente, ist für TList völlig problemlos, ganz gleichgültig
welche Daten vertauscht werden. (beim Array geht das nicht)
Beim Compare, also das Vergleichen zweier Element wird Detailwissen über die Daten notwendig.
Hier kann eine Klasse gegenüber einem Record seinen Vorteil ausspielen, denn die Compare-Methode kann quasi automatisch bereitgestellt werden.

Zitat von Hansa:
Wie wärs denn mit einem Listen-Objekt ? In TObjectList kann man die Record-Struktur reinpacken und das Ding kennt die Methode Sort. Es müsste also nur eine Vergleichsroutine gebastelt werden.
Genau das ist der richtige Weg!
Noch einfacher ist allerdings mein Vorschlag mit den MemoryDatasets. Da bekommst du suchen, sortieren, usw. auf dem Silbertablett geliefert.
Ein Memorydataset ist sozusagen eine TObjectList mit eingebauter RTTI und vielen zusätzlichen Funktionen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Accessing a Record Structure Programatically

  Alt 18. Mai 2008, 14:54
Zitat von sx2008:
Exchange, also das Vertauschen zweier Elemente, ist für TList völlig problemlos, ganz gleichgültig welche Daten vertauscht werden. (beim Array geht das nicht)
Also das Vertauschen zweier (gleich aufgebauter) Records ist auch ohne wissen des Recordaufbaus extrem einfach möglich ... muß ja nur der Speicherinhalt getauscht werden.

Zum Vergleichen hast'e aber recht, denn ohne Wissen über den Aufbau weiß man ja nicht wie man was vergleichen muß.


Aber ob man nun das Wissen über den Aufbau in der Programlogic versteckt, oder in einem Objekt einbaut ... irgendwo muß dieses wissen dennoch hin, also ist doch für so einen einfachen Aufbau kaum ein Unterschied (Record<>Object), nur daß man beim Objekt und wenn es an mehreren Stellen im Programm verwendet wird, alles etwas besser sortiert hat (direkt im Objekt).
nja, dafür haben Object/TList,TTMemoryTable und Co. wiederrum einen etwas/wesendlich größeren Overhead, als der pure Record.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Pluto

Registriert seit: 1. Dez 2005
Ort: Dietzenbach
53 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Accessing a Record Structure Programatically

  Alt 22. Mai 2008, 20:24
Dank für alle Antworten!

an grenzgänger:

Du hast Recht: Ich muß mich korrigieren. Pascal war etwa zeitgleich zu Smalltalk.
Die Links waren sehr interessant. Da habe ich dann noch etwas tiefer gegraben:
Erste Gedanken und Entwicklungen zu OOP findet man in der Literatur bereits Anfang 1960 !

an toms:

Dank für Deinen Vorschlag - aber ich habe die unbrauchbaren Antworten bereits gelesen.

an alzaimar:

Das ist richtig, RTTI war ein Irrweg. Parsen ist möglich, die Exe wertet ja den Record aus,
also kennt sie auch die Struktur.
Das wäre hier aber overkill. Mein Programm läuft, auch wenn der Code etwas weniger
elegant ist, als ursprünglich gedacht.

an sx2008:

zu Quicksort:
Auch bei Arrays kann ich zwei Elemente vertauschen, meine Quicksort Routine für
Arrays läuft einwandfrei.
zu MemoryDataset:
Mir ist nicht klar, was Du mit "MemoryDataset" meinst. In der Delphi-Hlfe taucht dieser Begriff nicht auf.
Meinst Du etwa TClientDataset?
Das verwende ich in Datenbankprogrammen nahezu überall. Es ist blitzschnell, hat viele Vorzüge, wie
Filtern und Clonen, auch kann man kleinere Tabellen einfach als XML abspeichern und laden.

Allerdings werde ich bei begrenzten kleineren Strukturen auch weiterhin Arrays benutzen.
So z.B. für Matritzenberechnungen. Da bleibt der Code einfach und übersichtlich.
OOP kann manchmal auch overkill sein. Man sollte der Aufgabe angepasst pragmatisch, nicht dogmatisch programmieren.

Grüße,
Pluto
begin
if Aufwand > Ergebnis then exit;
end;
  Mit Zitat antworten Zitat
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 09:15 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