🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #9686

Re: bledy popelniane przez programistow C#

#9686
From: Jaroslaw Kowalski
Date: Wed, 02 Nov 2005 12:05
84 lines
4179 bytes
"Marcin Grzębski" <mgrzebski@taxussi.no.com.spam.pl> wrote in message 
news:dka85j$mnh$1@nemesis.news.tpi.pl...
> Jaroslaw Kowalski wrote:
>> Ciekawi mnie po co w ogóle MS pozostawił w dotnecie takie nieobiektowe 
>> pojęcie jak publiczne pola.
>
> Co jest w tym nieobiektowego?
> Przepraszam bardzo ale takiej definicji obiektowości nie znam.

Jedną z podstawowych cech obiektowości jest (wybierz właściwe słowo):

1. encapsulation
2. hermetyzacja
3. enkapsulacja
4. kapsułkowanie (pozdrowienia dla p. JMD)
5. ...
6. ...
7. ...

Udostępnienie publicznego pola, po którym każdy z zewnątrz może pisać bez 
kontroli jest zaprzeczeniem tej idei.

>> Wystarczyło zabronić ich stosowania i w każdym przypadku generować 
>> automatycznie właściwość z ukrytym polem prywatnym przechowującym stan.
>
> No, to byłby naprawdę wynalazek na miarę "systemu totalitarnego
> programowania". Czy naprawdę tak ciężko jest samemu napisać
> kod właściwości?
> Dlaczego odbierać komuś możliwość korzystania z pól publicznych?

Ależ skąd. Chodzi raczej o generowanie automatyczne właściwości 
opakowujących te pola. W .NET masz rozróżnienie na pola i właściwości, gdzie 
raczej jest zgoda że w publicznych interfejsach należy używać właściwości. 
Gdyby wszystkie pola publiczne były przez kompilator tłumaczone jako 
właściwości (Property) a nie pola (Field) to zniknąłby problem 
kompatybilności binarnej.

>> JITter dość dobrze radzi sobie z inline'owaniem takich konstrukcji jak 
>> trywialne get/set więc chyba nie powinno być problemu wydajnościowego. 
>> Zachowana zostałaby za to binarna kompatybilność kodu w przypadku 
>> zdefiniowania własnej operacji get/set w przyszłości.
>
> Oczywiście wszystko da się zrobić. Ale jak to się ma do
> przejrzystości kodu i składni samego języka?

Mówię tylko o tym, że dla uniknięcia Field'ów w interfejsie publicznym 
kompilator mógłby tłumaczyć:

--------
public int Counter;
--------

każdorazowo na

--------
private int _Counter;
public int Counter
{
    get { return _Counter; }
    set { _Counter = value; }
}
--------

public readonly typ nazwa; byłoby tłumaczone jako właściwość z akcesorem(?) 
get a pola prywatne zostałyby po staremu.

> Osobiście jestem przeciwnikiem tego co M$ zrobił ze składnią
> właściwości o różnych modyfikatorach dostępu, czyli:
>
> public int IntValue {
> get {
> // ...
> }
> protected set {
> // ... }
> }

A ja jestem za. W Soodzie bardzo chętnie bym powitał takie usprawnienie już 
w .NET 1.1. Chodzi głównie o możliwość ustawienia "set" jako "internal". 
Czyli biblioteka/assembly/pakiet kodu sama może zmodyfikować jakąś 
właściwość a klienci mogą tylko ją czytać. Obecnie muszę robić SetXXX() do 
ustawiania i int XXX { get; } do pobierania.

Jarek 
Technical Details
Message-ID: <dkaa5t$1842$1@node3.news.atman.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!not-for-mail
References: <1130508326.894711.153970@z14g2000cwz.googlegroups.com> <1eocwqzx1mywz$.dlg@piotr-wlodarek.pl> <dk4mhr$r5s$1@atlantis.news.tpi.pl> <4f5ksod9hocm.dlg@piotr-wlodarek.pl> <dk4t9e$pk5$1@inews.gazeta.pl> <crxbo9q0fdfi.dlg@piotr-wlodarek.pl> <dk5fb4$dmh$1@nemesis.news.tpi.pl> <13nmve9r1u93s$.dlg@piotr-wlodarek.pl> <dk7dd9$6rv$1@node1.news.atman.pl> <dka85j$mnh$1@nemesis.news.tpi.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.atman.pl!not-for-mail
From: "Jaroslaw Kowalski" <jaak@wyrzuc.to.jkowalski.net>
Newsgroups: alt.pl.comp.lang.csharp
Subject: Re: bledy popelniane przez programistow C#
Date: Wed, 2 Nov 2005 13:05:57 +0100
Organization: ATMAN
Lines: 86
Message-ID: <dkaa5t$1842$1@node3.news.atman.pl>
References: <1130508326.894711.153970@z14g2000cwz.googlegroups.com> <1eocwqzx1mywz$.dlg@piotr-wlodarek.pl> <dk4mhr$r5s$1@atlantis.news.tpi.pl> <4f5ksod9hocm.dlg@piotr-wlodarek.pl> <dk4t9e$pk5$1@inews.gazeta.pl> <crxbo9q0fdfi.dlg@piotr-wlodarek.pl> <dk5fb4$dmh$1@nemesis.news.tpi.pl> <13nmve9r1u93s$.dlg@piotr-wlodarek.pl> <dk7dd9$6rv$1@node1.news.atman.pl> <dka85j$mnh$1@nemesis.news.tpi.pl>
NNTP-Posting-Host: saturn.atm.com.pl
X-Trace: node3.news.atman.pl 1130933245 41090 217.17.34.18 (2 Nov 2005 12:07:25 GMT)
X-Complaints-To: abuse@atman.pl
NNTP-Posting-Date: Wed, 2 Nov 2005 12:07:25 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.3790.1830
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.1830
X-RFC2646: Format=Flowed; Response
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit