🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #15740

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

#15740
From: Sektor van Skijlen
Date: Sun, 04 Mar 2007 21:09
52 lines
4271 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"
Technical Details
Message-ID: <esfchn$t5r$1@kujawiak.man.lodz.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!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>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.nask.pl!news.nask.org.pl!news.prz.edu.pl!lublin.pl!news.man.lodz.pl!not-for-mail
From: Sektor van Skijlen <ethouris@guess.if.gmail.com.is.valid.or.invalid>
Newsgroups: pl.comp.objects
Subject: Re: pl.comp.objects FAQ (Frequently Asked Questions and more)
Date: Sun, 4 Mar 2007 21:09:11 +0000 (UTC)
Organization: LODMAN - Metropolitan Area Network in LODZ, Poland
Lines: 52
Sender: Michal Malecki <sektor@zly.kis.p.lodz.pl>
Message-ID: <esfchn$t5r$1@kujawiak.man.lodz.pl>
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>
NNTP-Posting-Host: zly.kis.p.lodz.pl
Mime-Version: 1.0
X-Trace: kujawiak.man.lodz.pl 1173042551 29883 212.191.89.2 (4 Mar 2007 21:09:11 GMT)
X-Complaints-To: abuse@man.lodz.pl
NNTP-Posting-Date: Sun, 4 Mar 2007 21:09:11 +0000 (UTC)
User-Agent: tin/1.6.2-20030910 ("Pabbay") (UNIX) (SunOS/5.9 (sun4u))
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit