AGB  ·  Datenschutz  ·  Impressum  







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

Objektvergleich

Offene Frage von "mytar"
Ein Thema von mytar · begonnen am 28. Dez 2004 · letzter Beitrag vom 29. Dez 2004
Antwort Antwort
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#1

Objektvergleich

  Alt 28. Dez 2004, 16:09
Ich hab jetzt das Problem,
dass ich 2 Objekte vom selben Typ vergleichen muss.

Die beiden instanzierten Objekte sind beide vom gleichen Typ,
ich möchte nun diese Objekte auf den Inhalt überprüfen,
d.h. gleiche Attribut-Werte usw.

Ich hab von der Funktion Delphi-Referenz durchsuchenCompareMem() gehört.
Ich möchte nicht alle einzelen Attribute vergleichen müssen,
denn ich persönlich halte nur den Speichervergleich für
eine optimale Lösung. Denn diese Funktion wäre dann allgemein
verwendbar.

Danke
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Objektvergleich

  Alt 28. Dez 2004, 17:28
Mit CompareMem geht das recht einfach:

Delphi-Quellcode:
if CompareMem(obj1, obj1, obj1.InstanceSize) then
  ShowMessage('Gleich');
Beachte, dass der Vergleich nur bitweise durchgeführt wird. Enthalten die Objekte Zeiger zu unterschiedlichen Speicherstrukturen, die die gleichen Daten enthalten, fällt der Vergleich dennoch negativ aus. Das passiert u.a. auch bei langen Strings!
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Objektvergleich

  Alt 29. Dez 2004, 10:38
*push*
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Objektvergleich

  Alt 29. Dez 2004, 11:41
du könntest dein "objekt" ja mal hier posten... dann kann man dir sagen ob das überhaput per CompareMem geht, da Chewie es schon gesagt hat es nicht der fall sein muss dass es möglich ist...

grüße, paresy
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#5

Re: Objektvergleich

  Alt 29. Dez 2004, 12:43
Hallo mytar,

i.A. wird Dein Ansatz mit CompareMem nicht funktionieren und entspricht darüber hinaus auch nicht dem Paradigma des OO: Ein Objekt ist bestimmt Durch seine Struktur (hier: Klasse), sein Verhalten (hier: Kombination aus Attributen und Klasse) sowie dessen einzigartiger Identität (niemals identisch bei verschieden Objekten).

Weil Du von Objekten identischer Klassen ausgehst (was in sich schon ein zweifelhafter Ansatz ist und zugunsten eines, der von identischen Typen ausgeht, aufgegeben werden sollte vgl. Booch) scheinst Du lediglich die gleichheit der Attribute überprüfen zu müssen. Während aber Attribute gleich sein können, obgleich sie eine unterschiedliche Identiät aufweisen (siehe Objekte selbst, aber auch in Delphi als Referenzen implementierte Datentypen wie Strings) und ein vergleich über deren Speichersignatur bzw Referenz bereits fehlschlegt, kann es darüber hinaus auch sein, dass sich die Implementierung einer Klasse auf Attribute stützt, die "nach Außen" keine Bedeutung haben (z.B. ein Referenzzähler bei Objekten, die Interfaces unterstützen).
Gerade letzterer Punkt sollte zeigen, dass Du von der Implementierung durch den Compiler abstrahieren solltest und stattdessen einen Ansatz über Reflektion (RTTI) oder Delegation (siehe Implementierungen von Assign btw AssignTo) wählen solltest...
gruß, choose
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Objektvergleich

  Alt 29. Dez 2004, 15:53
Genauer gesagt, habe ich eine Liste von Objekten (von der gleichen Klasse instanziert).
Ich will aber weitere Objekte zur Laufzeit nur hinzufügen, wenn das identische (gleiche Attribute, usw.) nicht schon enthalten ist.

Bietet nicht TObjekt oder eine davon abgeleitete Klasse eine Vergleichsmethode oder so was ähnliches?

Danke
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Objektvergleich

  Alt 29. Dez 2004, 16:14
Zitat von mytar:
Bietet nicht TObjekt oder eine davon abgeleitete Klasse eine Vergleichsmethode oder so was ähnliches?
Nein, und du weißt warum, wenn du die vorherhigen Postings durchliest. Eine bitweise Identität wirst du mittels CompareMem feststellen können, aber im Allgemeinen musst du einen elementweisen Vergleich durchführen. Das machst du am einfachsten, indem du in der Klasse eine Methode definierst, die ein anderes Objekt entgegennimmt und jedes Elememt der einen mit dem entsprechenden Element der anderen vergleicht.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: Objektvergleich

  Alt 29. Dez 2004, 16:17
Langsam verstehe ich.

So etwas ist nur jeweils für Instanzen der selben Klasse geeignet,
und muss ich einzeln für jedes Unterobjekt mit CompareMem machen.

Hab ich das richtig verstanden?

Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:42 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