🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #334855

Re: [outro] ]Re: Delphi do zastosowan domowych

#334855
From: Wojciech "Spook" Sura
Date: Fri, 20 Jan 2012 12:17
97 lines
6028 bytes
Dnia 20.01.2012 o 09:04 Arivald <NOSPAMarivald@interia.pl> napisał(a):
> Ładnie się C++ rozwija ;-)

To prawda :) Ale zdecydowanie wolniej niż Delphi, choć z drugiej strony  
pracuje nad nim dosyć duży komitet, więc jest szansa, że każda zmiana  
będzie mocno przemyślana.

>> Do licha, ale wysoko wycelowałem. W C++ nie ma nawet własności, trzeba
>> poprzestać na getterach i setterach. Można co najwyżej zrobić przekręt i
>> zdefiniować podklasę żeby umożliwić zapis instancja.wlasnosc[4] = 3;
>
> Tu podobnie. I nie nazwał bym tego przekrętem. W C++ tworzenie klasy  
> jest bardzo tanie, znacznie tańsze niż w Delphi. Dodatkowo można  
> przeładować operatory, tak że koniec końców używanie takiej "property"  
> nie będzie się niczym różniło od jej użycia w Delphi.
>
> A kompilacja template w momencie tworzenia instancji daje możliwość  
> utworzenia jednego, prostego template klasy "property", i potem  
> kompilator sam będzie generował instancje dla różnych typów.
> A jak dodasz do tego mechanizm trejtów (traits), z odpowiednią  
> konkretyzacją dla np. callbacków, to daje się łatwo zaimplementować  
> bardzo skomplikowane działania.

Można, panie Arivaldzie, tylko że w Delphi - zgaduję, ale chyba trafnie -  
własności są cukrem składniowym dla wywołania gettera lub settera. Aby  
zrealizować składniowo własności w C++ trzeba byłoby wyprodukować trochę  
kodu, który istniałby tylko dla wygody programisty, a z drugiej strony  
spowalniał pracę algorytmów (nawet jeśli o rozkazy procesora, to po  
podniesieniu o kilka rzędów byłyby to już mierzalne czasy).

>> Z drugiej strony w Delphi bardzo brakuje C++owego consta. W C++ const
>> nie jest formalnie deklaratorem stałej, tylko modyfikatorem. Na  
>> przykład:
>>
>> int * i; // Wskaźnik do inta;
>> const int * i; // Wskaźnik do stałego inta. Wskaźnik można
>> przedefiniować, ale wartości wskazywanej przez niego - nie
>> int const * i; // Stały wskaźnik do inta. Wskaźnika nie można
>> przedefiniować, ale wartość przez niego wskazywaną - tak
>> const int const * i; // Stały wskaźnik do stałego inta.
>>
>> Ciekawie są też skonstruowane metody z constem. Metoda const zobowiązuje
>> się do niemodyfikowania zawartości klasy, na przykład:
>
> Hmmm... Ja o takich metodach myślę nieco innaczej. Metoda const to taka  
> metoda którą można wywołać na rzecz obiektu który jest const. Bo w  
> szczególnych wypadkach ona może jednak zmienić pola klasy.

Hmm. Może zmienić, ale chyba tylko pośrednio, prawda? To znaczy na  
przykład wywołać metodę na składowej, która jest klasą. Zmiana będzie  
pośrednia: bezpośrednia zawartość klasy pozostanie niezmieniona, natomiast  
klasa zmieni się jako całość.

Chyba, że mówi Pan jeszcze o czymś innym?

> Co w tym mądrego? Bo nie widzę.

Kompletnie nic - w momencie, w którym wie się, jak jest skonstruowane to  
wywołanie. Ale jeśli widzi się taką konstrukcję na początku nauki języka,  
to wygląda, jakby ktoś wstrzyknął do obiektowego języka składnię rodem z  
plików wsadowych. Nie brzmi to specjalnie atrakcyjnie, prawda?

> To że strumień ma operatory << i >> dla większości wbudowanych typ to  
> konieczność.

Powiedziałbym bardziej, że konwencja, a nie konieczność. Nic nie stoi na  
przeszkodzie, aby << i >> zastąpić metodami read() i write(), jak w innych  
językach. C++ jest językiem, który pozwala - prawie że - zbudować nowe,  
własne konstrukcje językowe, ale moim zdaniem taka elastyczność jest  
bardziej jego przekleństwem niż zaletą.

> Istotniejszy jest fakt że w każdej klasie możesz przeładować operatory  
> << i >> w kontekście strumienia, dzięki czemu klasa sama będzie  
> wiedziała jak się zapisać i jak się wczytać z dowolnego strumienia.

No to już jest jakiś argument, ale z drugiej strony klasa może  
implementować interface, powiedzmy, ISerializable, który ma metody void  
SaveTo(Stream s) i void LoadFrom(Stream s). Po raz wtóry to jest tylko  
kwestia konwencji zapisu.

> Bo strumienie standardowe to podstawowa metoda interakcji z  
> użytkownikiem? A tego przeciążenia i łańcucha nie widać, tego się nauczy  
> później.

No właśnie w moim przypadku to nie działa - nie znoszę, jak ktoś mi mówi  
"używaj tego, bo tak należy pisać". Lubię wiedzieć, jak coś działa. A poza  
tym jeśli chodzi o interakcję, to metod jest dużo - ot, choćby printf i  
scanf (i ich wersje safe).

Pozdrawiam -- Spook.

-- 
! ._______. Warning: Lucida Console sig!    //)    !
! || spk ||    www.spook.freshsite.pl      / _ """*!
! ||_____||        spook at op.pl         / '  | ""!
! |  ___  |   tlen: spoko_ws gg:1290136  /. __/"\ '!
! |_|[]_|_|  May the SOURCE be with you! \/)     \ !
Technical Details
Message-ID: <op.v8dtq2biyumhbd@notebook.asus>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <1nva6kty8t73b$.dlg@hell.heaven> <jf99kg$t6e$1@news.dialog.net.pl> <162t4ulo0stz4.dlg@hell.heaven> <op.v8cee3coyumhbd@notebook.asus> <1i4rse32tw0m7.dlg@hell.heaven> <op.v8ciulumyumhbd@notebook.asus> <jfb799$qli$1@news.dialog.net.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: "Wojciech \"Spook\" Sura" <spook.no@spamming.op.pl>
Newsgroups: pl.comp.lang.delphi
Subject: Re: [outro] ]Re: Delphi do zastosowan domowych
Date: Fri, 20 Jan 2012 13:17:16 +0100
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 178
Message-ID: <op.v8dtq2biyumhbd@notebook.asus>
References: <1nva6kty8t73b$.dlg@hell.heaven> <jf99kg$t6e$1@news.dialog.net.pl> <162t4ulo0stz4.dlg@hell.heaven> <op.v8cee3coyumhbd@notebook.asus> <1i4rse32tw0m7.dlg@hell.heaven> <op.v8ciulumyumhbd@notebook.asus> <jfb799$qli$1@news.dialog.net.pl>
NNTP-Posting-Host: 89-76-141-48.dynamic.chello.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1327061822 13949 89.76.141.48 (20 Jan 2012 12:17:02 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Fri, 20 Jan 2012 12:17:02 +0000 (UTC)
X-User: spoko_ws
X-Antivirus: avast! (VPS 120120-0, 2012-01-20), Outbound message
X-Antivirus-Status: Clean
User-Agent: Opera Mail/11.60 (Win32)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit