Article View: de.comp.lang.c++
Article #69Re: Objectidentifer (was: Re: Lippmann - was ist das?)
From: Clemens M. Pichl
Date: Sun, 13 Dec 1992 17:59
Date: Sun, 13 Dec 1992 17:59
67 lines
3551 bytes
3551 bytes
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
Technical Details
Message-ID:
<724269565snx@clemfix.heaven7.sub.org>Path:
arc1-ca.pugleaf.net!sparky!uunet!zaphod.mps.ohio-state.edu!sol.ctr.columbia.edu!ira.uka.de!math.fu-berlin.de!news.netmbx.de!zelator!heaven7.in-berlin.de!clemfix!clReferences:
<vaillant.724087013@rama>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!sparky!uunet!zaphod.mps.ohio-state.edu!sol.ctr.columbia.edu!ira.uka.de!math.fu-berlin.de!news.netmbx.de!zelator!heaven7.in-berlin.de!clemfix!cl 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 Message-ID: <724269565snx@clemfix.heaven7.sub.org> References: <vaillant.724087013@rama> Date: Sun, 13 Dec 92 17:59:25 GMT Organization: Ein alter Karolinger Lines: 68