Article View: pl.comp.objects
Article #15714Re: pl.comp.objects FAQ (Frequently Asked Questions and more)
From: Mariusz Lotko
Date: Sun, 04 Mar 2007 18:37
Date: Sun, 04 Mar 2007 18:37
89 lines
4514 bytes
4514 bytes
Adam Karpierz wrote:
> "Sektor van Skijlen" <ethouris@guess.if.gmail.com.is.valid.or.invalid>
> wrote:
>>> 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ść.
Tu się nie zgodzę. W przypadku C++ porównuje się zawsze wartość
obiektu. W przypadku wskaźnika wartością jest adres obiektu na
jaki wskaźnik wskazuje.
Operator == dla dwóch obiektów powinien _zawsze_ porównywać równość
semantyczną ich _zawartości_, a nie kombinować z ich tożsamością.
Nie widzę szczególnego powodu, żeby wskaźniki nazywać "obiektami
niewartościowymi", skoro pełnią one funkcję referencji, czy jak
kto woli, identyfikatora obiektu.
Każdą dowolną parę obiektów można w prosty sposób zweryfikować
pod kątem "czy to te same obiekty" mając do nich referencję, np.
bool teSame(const Klasa& a, const Klasa& b)
{
return &a == &b;
}
lub czy to równe obiekty
a == b
Co odpowiada konstrukcjom z Pythona jakie podalem w poprzednim poście.
> Czyli chodzi ci ogolnie o to, aby cos bylo sp...dzielone
Wszystko można zepsuć, jeśli się tylko za mocno kombinuje nie zważając
na intencje twórcy (tu: twórcy C++).
> Jesli do porownania wartosci jak i tozsamosci istnieje
> w danym jezyku ten sam operator to taki jezyk mozna sobie
> usnac za syf, a nie jezyk
Operator ten sam, pytanie na czym go użyjesz (na obiektach, czy na
identyfikatorach obiektów, za które w C++ można uznać wskaźniki).
> Podobnie z operatorem przypisania
> Jelsi do skopowiania obiektu uzywa sie tego samego
> operatora co do przypisania referencji to jest to rowniez syf.
j.w.
> Wiec jest doklandie odwrotnie niz piszesz:
>
> Chodzi o to, że maja być dostępny inny oparator do porownania
> wartosci a inny do porownania tozsamosci obiektow
Tak by było rzeczywiście najlepiej. Ale uważam, że operator == jest
i tak lepszy w C++ niż w Javie. Bo niby dlaczego logiczna równość
miałaby dotyczyć wyłącznie relacji bycia tym samym obiektem?
Idealnie jest to w Pythonie: operator == jak w C++ i operator "is"
jak w Javie.
> Podobnie chodzi o to aby byl dostepny inny operator do
> 'clone' obiektu a inny do zmiany referencji
To też jest w C++ rozgraniczone:
C o1 = inny; // kopiowanie obiektu
C* o2 = &inny; // przypisywanie "referencji".
C& o3 = inny; // przypisywanie referencji.
Schody zaczynają się, gdybyśmy napisali
o3 = jeszcze_inny; // ... bo to już znowu jest kopiowanie, a nie zmiana
// referencji
No ale taki już jest ten C++...
>
> Porzadne jezyki tak maja (mialy nawet w latach 60-tych),
> a jesli np ten syf zwany C++ tego nie ma to nazwij to zwyczajnie syfem.
> i przejdz nad tym do porzadku dziennego, a nie probuj robic
> z tego syfu kamieni szlachetnych.
Jako fan C++ nie zgadzam się co do syfu, ale zgadzam się, że dorabianie
teorii tu, gdzie jej nie ma i nie będzie, nie czyni niczego lepszym.
--
Mariusz Lotko
Technical Details
Message-ID:
<esf3am$r52$1@bandai.magma-net.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.magma-net.pl!not-for-mailReferences:
<pl-comp-objects-faq-1-1166202604@ict.pwr.wroc.pl> <pan.2007.02.22.19.13.55.43827@go2.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> <eses6u$8fm$1@inews.gazeta.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.magma-net.pl!not-for-mail From: Mariusz Lotko <imie.nazwisko@wp.pl> Newsgroups: pl.comp.objects Subject: Re: pl.comp.objects FAQ (Frequently Asked Questions and more) Date: Sun, 04 Mar 2007 19:37:50 +0100 Organization: Magma Systemy Komputerowe Lines: 90 Message-ID: <esf3am$r52$1@bandai.magma-net.pl> References: <pl-comp-objects-faq-1-1166202604@ict.pwr.wroc.pl> <pan.2007.02.22.19.13.55.43827@go2.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> <eses6u$8fm$1@inews.gazeta.pl> NNTP-Posting-Host: 192.168.21.22 Mime-Version: 1.0 X-Trace: bandai.magma-net.pl 1173033110 27810 192.168.21.22 (4 Mar 2007 18:31:50 GMT) X-Complaints-To: usenet@news.magma-net.pl NNTP-Posting-Date: Sun, 4 Mar 2007 18:31:50 +0000 (UTC) User-Agent: KNode/0.10.4 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit