From: cl@clemfix.heaven7.sub.org (Clemens M. Pichl)
Newsgroups: de.comp.lang.c++
Subject: Re: Objectidentifer (was: Re: Lippmann - was ist das?)
Distribution: world
Date: Sun, 13 Dec 92 17:59:25 GMT
Organization: Ein alter Karolinger

vaillant@rama.informatik.rwth-aachen.de writes in article <vaillant.724087013@rama>:
> 
> martin@mwtech.UUCP (Martin Weitzel) writes:
> >In article <vaillant.723748577@hathi> vaillant@hathi.informatik.rwth-aachen.de (Stefan Vaillant) writes:
> >|Auf Pointer kann man wohl in keiner OO Sprache verzichten
> >Was zu beweisen waere.  (Ich nehme an, wir sprechen hierbei nicht ueber
> >Pointer als Hilfsmittel der Implementierung der Sprache bzw. des Lauf-
> >zeitsystems sondern ueber Pointer in Anwendungsprogrammen.)
> >|   (in C++/Eiffel/..: Pointer = Objektidentitaet).
> >Da ich Eiffel nicht kenne, kann ich hier nur fuer C++ sprechen:  Ob man
> >Pointer-Identitaet als Objekt-Identitaet ansieht, haengt von der Definition
> >des Begriffs Identitaet ab.
> 
> Wie definierst Du denn den Begriff "Objektidentitaet"(OID)?
> Wenn Du nicht Pointerwerte als OID's verwendest, was dann?
> 
> 
> Die mir bekannten Definitionen von Objektidentitaet vertragen sich alle
> mit C++-Zeigern:
>   Khoshafian Copeland: "Identity is that property of an object which 
>                         distinguishes it from all other object"
> oder [besser]
>   Catell/ODM: "Object identity: Objects can have a unique identity
>                independent of the values that they contain."
> Catell stellt zwei Forderungen auf:
>   1) OID's muessen vom System generiert werden.
>   2) die generierten OID's aller existierenden Objekte
>      muessen verschieden sein.
> 
> 
> Wenn ich in C++ schreibe:
>   Object *o1 = new Object;
>   Object *o2 = new Object;
> dann kann ich die Werte in `o1' oder `o2' als Objektidentitaeten verwenden:
>   1) sie werden durch `new' vom C++-Laufzeitsystem erzeugt.
>      (zumindest bei default-`new')
>   2) Es ist: `o1 != o2'
>      (zumindest, wenn zwischen den beiden `new' kein `delete o1' steht.
>       Sollte ich da einen C++ Nachteil vergessen haben?  :-)  )
> 
> Das ist fuer Programmierer von modernen (imparativen) Hochsprachen nicht
> besonders spannend. Bei manchen Anwendungen mit relationalen Datenbanken
> erfordern nicht vorhandene OID's unnoetigen Mehraufwand!

Das Problem hierbei ist, das die Identifikatoren nur zur Lebenszeit des 
Objekts gueltig sind, und somit nicht zur Referenzierung durch andere Objekte
benutzt werden koennen. Wer garantiert mir denn, wenn ich den Pointer 
irgendwo speichere, dass das Objekt, was sich dahinter verbergen soll noch
an dieser Stelle existiert? Oder: Was passiert, wenn der Pointer inzwischen 
fuer ein anderes Objekt benutzt wird?

BTW: Objektidentitaet in OODBs verlangt --- neben den oben genannten 
Eigenschaften ---, dass die OIDs (hier Surrogate genannt) nie wieder 
vergeben werden duerfen. Und das duerfte ja fuer Pointer nicht gelten.

Gruss 
	Clemens
> 
> Stefan
> 

--
Clemens Pichl                                   cl@zelator.in-berlin.de
Karolingerplatz 3                               cl@clemfix.heaven7.sub.org
1000 Berlin 19                                  clemens@cs.tu-berlin.de

(030) 302 74 18