Article View: pl.comp.lang.c
Article #267712Re: Ciemna strona C++
From: Sebastian Kaliszewski
Date: Fri, 23 Nov 2007 17:05
Date: Fri, 23 Nov 2007 17:05
81 lines
4461 bytes
4461 bytes
Maciej Sobczak wrote:
> Etam, Seweryn, dałeś się wkręcić. To jest Naciąganie Gaci Przez Głowę
> (tm).
Może i jest. A może nie... nie będę się kłócił.
> class ClassForNormalUse
> {
> public:
> void doThis();
> void doThat();
> };
>
> class ClassWithAdditionalFeaturesForInitialization : public
> ClassForNormalUse
> {
> public:
> void readConfigFiles();
> void doSomethingSpecialAtTheBeginning();
> };
>
> ClassForNormalUse & getIt()
> {
> static ClassWithAdditionalFeaturesForInitialization x;
>
> x.readConfigFiles();
> x.doSomethingSpecialAtTheBeginning();
>
> // ok, object is ready for normal use:
> return x;
> }
>
> // ...
>
> ClassForNormalUse & x = getIt();
>
> x.doThis();
> x.doThat();
> x.readConfigFiles(); // WTF? no such method (in compile-time!)
>
>
> Nie trzeba kasować metod ze słownika, żeby podzielić funkcjonalność
> czegoś na etapy.
Tylko, że ten podział, żeby być skutecznym, musi przebiegać po granicy
wywoałania getIt(), co może być bardzo nienaturalne. Co gorsza getIt() można
zawołać tysiące razy, również pod koniec działania programu. Nie masz tu
żadnego nmechanizmu zabraniającego zastosowanie
ClassWithAdditionalFeaturesForInitialization również w czasie absolutnie z
inicjalizacją nie związanym.
Modyfikacja klasy przez usunięcie z niej metody zmienia typ. Czyli do pewnej
chwili działania programu mamy jakiś typ, ale po tem jest już typ inny. I
wszystkie (nawet tysiące) instancji typu pierwszego zostaje jednym
pociągnięciem zamienionych w instancje typu drugiego (i np. stają się
immutable).
Występowanie w programach zmiennych stałych, czyli obiektów które w czasie
normalnego działania programu są stałymi, ale na jego początku muszą zostać
zainicjowane na podstawie danych zewnętrznych.
> Wieloetapowość można naturalnie wyrazić ze statycznym systemem typów
> posługując się różnymi widokami na ten sam obiekt w różnych chwilach
> jego życia.
Ale musisz się zajmować każdym obiektem z osobna co jest uciążliwe. A tu
mówimy o życiu całej aplikacji a nie jednego obiektu.
> I nie, nie trzeba tego opisywać jako "zagadnienie dla zaawansowanych",
> bo już samo to określenie pokazuje, że kasowanie metod to zwykłe
> Naciąganie Gaci Przez Głowę (tm).
To samo określenie nic nie pokazjue. Ale taka konstrukcja jest w Pythonie
stosowana niezwykle rzadko. Zapewne dlatego, że dla normalnych ludzi
wystarcza konwencja (np nazwa z samych wielkich liter oznacza stałą lub
właśnie zmienną stałą). Wymuszanie czegoś takiego to pomysł bardziej
ceplusplusiczny(tm) a nie pytoniczny.
pzdr
\SK
Technical Details
Message-ID:
<fi70b4$8lg$1@bozon2.softax.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!bozon.softax.com.pl!not-for-mailReferences:
<fghgeo$spf$1@nemesis.news.tpi.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh206f$2d6$1@news.supermedia.pl> <fh2ma2$rd0$1@news.vectranet.pl> <fh2po8$d0c$1@news.dialog.net.pl> <fh9v4k$mss$2@bozon2.softax.pl> <fhaest$9or$1@news.vectranet.pl> <fheq5d$iot$1@bozon2.softax.pl> <fhhfae$bj$1@news.vectranet.pl> <fi1ot2$24s$1@bozon2.softax.pl> <fi20va$5ud$1@news.vectranet.pl> <fi45ok$g39$1@bozon2.softax.pl> <fi4m84$nme$1@news.vectranet.pl> <f15afef5-4a21-4ac2-8e62-cc0d9c5f71d1@b15g2000hsa.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!bozon.softax.com.pl!not-for-mail From: Sebastian Kaliszewski <s@get.it.off.to.reply.informa.pl> Newsgroups: pl.comp.lang.c Subject: Re: Ciemna strona C++ Date: Fri, 23 Nov 2007 18:05:31 +0100 Organization: Softax news server Lines: 81 Message-ID: <fi70b4$8lg$1@bozon2.softax.pl> References: <fghgeo$spf$1@nemesis.news.tpi.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh206f$2d6$1@news.supermedia.pl> <fh2ma2$rd0$1@news.vectranet.pl> <fh2po8$d0c$1@news.dialog.net.pl> <fh9v4k$mss$2@bozon2.softax.pl> <fhaest$9or$1@news.vectranet.pl> <fheq5d$iot$1@bozon2.softax.pl> <fhhfae$bj$1@news.vectranet.pl> <fi1ot2$24s$1@bozon2.softax.pl> <fi20va$5ud$1@news.vectranet.pl> <fi45ok$g39$1@bozon2.softax.pl> <fi4m84$nme$1@news.vectranet.pl> <f15afef5-4a21-4ac2-8e62-cc0d9c5f71d1@b15g2000hsa.googlegroups.com> NNTP-Posting-Host: 83.18.189.42 Mime-Version: 1.0 X-Trace: atlantis.news.tpi.pl 1195837265 842 83.18.189.42 (23 Nov 2007 17:01:05 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Fri, 23 Nov 2007 17:01:05 +0000 (UTC) User-Agent: Mozilla Thunderbird 1.0.2 (X11/20050322) X-Accept-Language: en-us, en In-Reply-To: <f15afef5-4a21-4ac2-8e62-cc0d9c5f71d1@b15g2000hsa.googlegroups.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit