🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #15266

Re: pl.comp.objects FAQ (Frequently Asked Questions and more)

#15266
From: Sektor van Skijl
Date: Sun, 04 Mar 2007 21:09
51 lines
2689 bytes
Dnia Sun, 04 Mar 2007 17:46:12 +0100, Marcin 'Qrczak' Kowalczyk skrobie:
> Dnia 04-03-2007, nie o godzinie 14:50 +0000, Sektor van Skijlen
> napisa³(a):

> > > if obj is anotherObj : # sprawdza czy to te same obiekty
> > > if obj == anotherObj : # sprawdza czy zawarto¶æ obiektów jest równa.
> >
> > > Czy o to Ci chodzi?
> >
> > W³a¶nie NIE o to mi chodzi. Chodzi o to, ¿e ma byæ dostêpny TYLKO operator ==,
> > natomiast od definicji typu zale¿y czy porównuje on to¿samo¶æ, czy warto¶æ.

> To siê sprawdza, ale tylko w jêzykach, w których podstawowe warto¶ci s±
> realizowane przez obiekty immutable. Je¶li tak nie jest, czyli kiedy
> typ, który powinien byæ typem warto¶ciowym, jest realizowany jako obiekt
> ze stanem, czyli kiedy ten obiekt ze stanem tak naprawdê modeluje
> zmienn± tego typu, a nie warto¶æ tego typu, to mamy konflikt: równo¶æ
> zmiennych powinna porównywaæ zmienne jako takie, ale czê¶ciej chcemy
> porównywaæ bie¿±ce warto¶ci tych zmiennych i to zazwyczaj robi operator
> ==. Czyli po pierwsze dzia³a niezgodnie z ogólnymi wytycznymi, a po
> drugie porównanie zmiennych w razie czego te¿ powinno byæ dostêpne.

Ha! W razie czego!

No w³a¶nie o to chodzi, ¿e nie. Je¶li okre¶lamy dany typ jako warto¶ciowy, to
to¿samo¶æ przechowuj±cego j± obiektu nie powinna nas interesowaæ w ogóle.

Je¶li jest to potrzebne do jakich¶ wewnêtrznych operacji, to powinno byæ
dostêpne w inny sposób, jakim¶ specjalnym interfejsem, dostêpnym tylko
wewn±trz implementacji. U¿ytkownik powinien dostaæ do tego standardowe API, z
operatorem porównania porównuj±cym warto¶ci.

Zauwa¿, po co w C++ stosuje siê wska¼niki i referencje do takich typów jak
int, czy std::string. Je¶li ju¿, to stosuje siê albo uogólnienie przekazywania
(const T&), albo przekazuje siê do zmodyfikowania (T&, T*). Czy widzia³e¶
kiedykolwiek w jakim¶ rzeczywistym programie, ¿eby kto¶ porównywa³ dwa
wska¼niki do int (pomijaj±c przypadek, gdy wska¼nik do int jest u¿ywany jako
iterator do tablicy int-ów - czyli zastosowanie jest inne, ni¿ warto¶æ
referencji)?

Dlatego to¿samo¶ci± dla obiektów warto¶ciowych jest warto¶æ. Obiekty mog±
sobie t± warto¶æ przekazywaæ jak chc±, a nawet - jak pamiêtasz, dyskutowali¶my
o tym - warto¶ci mog± byæ symulowane przez predefiniowane unikalne obiekty i w
takim przypadku porównanie to¿samo¶ci takich obiektów jest równowa¿ne
porównaniu warto¶ci, choæ to ju¿ jest szczegó³ implementacyjny.


--
//  _    ___         Michal "Sektor" Malecki <sektor(whirl)kis.p.lodz.pl>
\\ L_ |/ `|  /^\ ,()                         <ethouris(O)gmail.com>
// \_ |\  \/ \_/ /\ C++ bez cholesterolu: http://www.intercon.pl/~sektor/cbx
"Java is answer for a question that has never been stated"

Message-ID: <esfchn$t5r$1@kujawiak.man.lodz.pl>
Path: polish.pugleaf.net!archive.newsdeef.eu!mbox2nntp-pl.comp.objects.mbox.gz!number1.nntp.dca.giganews.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!t-online.de!news.nask.pl!news.nask.org.pl!news.prz.edu.pl!lublin.pl!news.man.lodz.pl!not-for-mail
References: <pl-comp-objects-faq-1-1166202604@ict.pwr.wroc.pl> <erl5gf$bi2$1@inews.gazeta.pl> <eru75v$dmm$1@bandai.magma-net.pl> <ervbaa$am4$1@inews.gazeta.pl> <pan.2007.02.26.21.12.45.8078@go2.pl> <es6b6u$2ls$1@kujawiak.man.lodz.pl> <esbllu$51n$1@bandai.magma-net.pl> <esbv7t$7o$1@kujawiak.man.lodz.pl> <1172940339.25227.28.camel@qrnik> <escc9e$2h2$1@kujawiak.man.lodz.pl> <esd1k1$9bp$1@bandai.magma-net.pl> <esemb6$2r3$1@kujawiak.man.lodz.pl> <1173026771.18775.7.camel@qrnik>