🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #15714

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

#15714
From: Mariusz Lotko
Date: Sun, 04 Mar 2007 18:37
89 lines
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-mail
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>

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