Article View: pl.comp.objects
Article #15076Re: Wyj?tki w konstruktorze
From: Seweryn Habdank-Wojewódzki
Date: Sun, 03 Sep 2006 09:59
Date: Sun, 03 Sep 2006 09:59
202 lines
8446 bytes
8446 bytes
Witam
Aleksander Galicki wrote:
>> Nota bene C powstał na przełomie 1969-73, więc jakoś równolegle do
>> Pascala.
>
> Andrzej Lewandowski juz napisal, ze to C bylo reakcja na Pascal, nie
> odwrotnie.
Czy ja wskazałem, że C był pierswszy? Nie, napisałem, że powstał w podobnym
czasie.
>> I
>> ciekawe czy jest możliwe metaprogramowanie za ich pomocą.
>
> Nie. Makrogeneracja jest bowiem pojeciem ortogonalnym to typow
> parametrycznych.
Znaczy suię mówisz o języku C i składni:
#define macro(...) ...
W C++ szablony mają o wiele większą funkcjonalność, w szczególności są
kontrolowane typy, popatrz się na kod poniżej, który realizuje złożenie
dwóch
funkcji dwu argumentowych, jest on realizowany abstrakcyjnie, czyli zwracany
jest funktor, który możesz wywoływać jak funkcję (to jest transparentne dla
kogoś kto wykorzystuje tą skałdnię):
// f ( g ( x, y ), g ( x, y ) )
/* Adaptator class compose_f_gxy_gxy
*/
template <class OP1, class OP2>
class compose_f_gxy_gxy_t
: public std::binary_function<typename OP2::first_argument_type,
typename OP2::second_argument_type,
typename OP1::result_type>
{
private:
OP1 op1; // calculate: op1(op2(x,y),op2(x,y))
OP2 op2;
public:
// constructor
compose_f_gxy_gxy_t (const OP1& o1, const OP2& o2)
: op1(o1), op2(o2) {
}
// function call
typename OP1::result_type
operator()(const typename OP2::first_argument_type& x,
const typename OP2::second_argument_type& y) const {
return op1(op2(x,y),op2(x,y));
}
};
/* useful function for creating adaptator compose_f_gxy_gxy
*/
template <class OP1, class OP2>
inline compose_f_gxy_gxy_t<OP1,OP2>
compose_f_gxy_gxy (const OP1& o1, const OP2& o2) {
return compose_f_gxy_gxy_t<OP1,OP2>(o1,o2);
}
wynikiem compose_f_gxy_gxy jest funktor, który zachowuje się jak funkcja.
A jak to napiszesz jako define? Zauważ, że nie ma podanych typów dla
argumentów
funkcji g, one są uzyskiwane na drodze szablonowego rozpoznania.
#define compose_f_gxy_gxy(f,g) ....
> Mozesz mi uwierzyc. Zeby pisac o
> tym co jest nie tak z J2EE, trzeba w tym J2EE popracowac. Zawodowo i przez
> pare lat. Dlaczego? Dlatego, ze starasz sie do tezy "cos musi byc z J2EE
nie
> tak" dopasowac swoje z J2EE doswiadczenie, a poniewaz owe doswiadczenie
> ograniczaja sie do przejrzenia blizej niokreslonego "drzewka klas" to i
> argumenty wychodza takie jak "są one bardzo ciężkie i jest trochę kodu
> redundantnego".
Jest to tylko częściowo prawda. Właśnie jak się zabardzo wejdzie w
stereotypy
pisarskie w jakiejś bibliotece/języku/module to wtedy ma się tylko takie
myślenie, chociaż byłoby ono do bani. Bardzo dobrze jest na jakiś projekt
spojrzeć z wielu stron. A nie tylko z jednej, bo to powoduje że człowiek
brnie
w starych błędach.
>> Jest wiele rzeczy, które w C++ są ściągnięte z języków
>> funkcyjnych. Co mi się podoba. W C++ obiektowość jest zapożyczona ze
>> Smalltalka.
>
> Jednego z tych jezykow (C++, Smalltalk) musiales na zywe oczy nie widziec.
Mylisz się, ale już przyzwyczaiłem się, do tego, że ludzie z ekipy Javy
nietrafnie mnie oceniają.
A to przykład kodu z języka, którego nie widziałem na oczy. Ot taka
pojedyncza
metoda zwracająca finalState, który jest wyliczany poprzez sekwencyjne
dodawanie wartości do temporalState, po tym kiedy stwierdzone jest istnienie
elementu item. A wszystko dzieje się w pętli do: []. Poprzedzonej kreacją
obiektu State, aby było co zwracać.
fitValue: inputState
| finalState temporalState |
finalState := State new.
inputState
do:
[:stream | temporalStream := stream copy.
( temporalStream nextAvailable:
item size
) = item
ifTrue: [ finalState add: temporalState ]
].
^ finalState
> To nie zadna pysznosc, to megalomania i ignorancja tych ktorzy twierdza,
ze
> Java cos tam od C++ wziela. Java ma korzenie w Objective-C i Smalltalku.
> Konkretnie te C-like klamerki i typy prymitywne pochodza z Objective-C,
nie z
> C++.
Tak? To super. Wreszcie się ktoś przyznał, że Java pochodzi z któregoś z
języków C. Przepraszam, myślałem, że z C++.
> A ja w poprzednim tygodniu widzialem goscia (na job interview) z 15 lat
> experience, ktory na pytanie "czy wie pan cos o MVC" skrzywil sie i
> powiedzial
> "tak, ale swojego czasu zaimplementowalem lepszy". Ja nie musze ogladac
> zadnego kodu, zeby widziec, kiedy piszesz od rzeczy.
O. Super, cieszę się, że masz tak wielkie wyczucie. Wiesz inni też tak
sądzili
i mylili się. A mylili się, bo nie mogą zrozumieć, czemu piszę w C++ i
Javie,
bo oni jak już weszli w Javę, to ją tak pokochali, że już nie potrafią się
od
niej oderwać.
> To nie jest tak, ze nie ma co w Javie
> krytykowac - wrecz przeciwnie - jest tego w cholere, ale zeby cos z sensem
> krytykowac najczescie trzeba samemu tego bolesnie doswiadczyc.
Więc właśnie z powodu moich doświadczeń krytykuję, bo kiedyś też, myślałem,
że
wszstko da się najlepiej zrobić w Javie, ale okazało się, że nie i to był
początek mojego krytycyzmu. Teraz na ile moge staram się rozszerzać
horyzonty.
>> Zastanów się jaki design jest w Javie. co to jest niby dobry design?
>>
>> Popatrz się na klasy *Holder i *Helper.
>>
>> Czy nie lepiej było to napisac tak:
>> Holder < T >
>> Helper < T >
>
> ?? Ale o jakie klasy chodzi?
Napisałem, wyraźnie *Helper i *Holder.
org.omg.CORBA.AnyHolder
org.omg.CORBA.AnySeqHolder
org.omg.CORBA.BooleanHolder
org.omg.CORBA.BooleanSeqHolder
org.omg.CORBA.ByteHolder
org.omg.CORBA.CharHolder
org.omg.CORBA.CharSeqHolder
org.omg.DynamicAny.AnySeqHelper
org.omg.DynamicAny.AnyHelper // uwaga dokumentacja jest zepsuta
org.omg.CORBA.CharSeqHelper
org.omg.CORBA.BooleanSeqHelper
> Pomoge Ci znalezc jedna okropna
> klase w Javie - java.util.Calendar. Ta klasa - a takze kilka innych
> koszmarkow - wyladowala w Javie za sprawa najwiekszego specjalisty od
> koszmarkow - IBM.
Jasne, SUN za nic nie jest odpowiedzialny.
Np. błędy też są w JSR-73. Tylko, że ludzie z którymi to omawiałem, nie są
zarozumiali, nie twierdzą że ich pomysły sa jedyne słuszne. Okazuje się, że
oni potrafią dyskutować i widzieć błędy, ale Ty nawet tego nie wiesz, że
można
spojrzeć krytycznie na Javę (i kto tujest zaślepionym i zakochanym
megalomanem).
Wrezultacie dyskusjj ze mną jakoś ekipa JSR-73 nie obraziła się - wręcz
odwrotnie - spodobały się im moje krytyczne suygestie.
Chciałbym, abyś nie pisał na temat mojej wiedzy bądź nie wiedzy, ale podawał
konkrety związane nie z moją osobą, ale z językami programowania.
Pozdrawiam.
--
|\/\/| Seweryn Habdank-Wojewódzki
`\/\/
Technical Details
Message-ID:
<ede90p$a88$1@tkdami.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsfeed.tpinternet.pl!news.tkdami.net!news.tkdami.pl!not-for-mailReferences:
<1156145142.606030.39100@m73g2000cwd.googlegroups.com> <ece4m4$88j$1@inews.gazeta.pl> <ecesvp$k3h$3@kujawiak.man.lodz.pl> <eci6qt$h30$1@inews.gazeta.pl> <ch3qe25s17dild5v1m7ei4c43b0n2tka4e@4ax.com> <ecm9eg$g71$4@kujawiak.man.lodz.pl> <a1l0f215rtj4kj6o35sora0fd2bl0qn0k9@4ax.com> <87lkpbs6yq.fsf@hector.domek> <ecs10b$795$1@srv.cyf-kr.edu.pl> <i0b3f25nvj9fr6ats7kjvntr20g3gsruiu@4ax.com> <ecsal7$vje$2@tkdami.pl> <lic3f2thihtcitu6eavf9p8q485e6n4aeg@4ax.com> <ecsg43$c0h$1@tkdami.pl> <ecsoqp$l6f$1@inews.gazeta.pl> <ect3d4$jg4$1@tkdami.pl> <ectapn$mcg$1@inews.gazeta.pl> <ecuen4$cra$1@tkdami.pl> <ecvh3d$24i$1@inews.gazeta.pl> <ed3lkl$ob0$1@tkdami.pl> <ed591i$a5i$1@inews.gazeta.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsfeed.tpinternet.pl!news.tkdami.net!news.tkdami.pl!not-for-mail From: Seweryn Habdank-Wojewódzki <habdank@gmail.com> Newsgroups: pl.comp.objects Subject: Re: Wyj?tki w konstruktorze Date: Sun, 03 Sep 2006 11:59:11 +0200 Organization: VectraNet Oswiecim Lines: 203 Message-ID: <ede90p$a88$1@tkdami.pl> References: <1156145142.606030.39100@m73g2000cwd.googlegroups.com> <ece4m4$88j$1@inews.gazeta.pl> <ecesvp$k3h$3@kujawiak.man.lodz.pl> <eci6qt$h30$1@inews.gazeta.pl> <ch3qe25s17dild5v1m7ei4c43b0n2tka4e@4ax.com> <ecm9eg$g71$4@kujawiak.man.lodz.pl> <a1l0f215rtj4kj6o35sora0fd2bl0qn0k9@4ax.com> <87lkpbs6yq.fsf@hector.domek> <ecs10b$795$1@srv.cyf-kr.edu.pl> <i0b3f25nvj9fr6ats7kjvntr20g3gsruiu@4ax.com> <ecsal7$vje$2@tkdami.pl> <lic3f2thihtcitu6eavf9p8q485e6n4aeg@4ax.com> <ecsg43$c0h$1@tkdami.pl> <ecsoqp$l6f$1@inews.gazeta.pl> <ect3d4$jg4$1@tkdami.pl> <ectapn$mcg$1@inews.gazeta.pl> <ecuen4$cra$1@tkdami.pl> <ecvh3d$24i$1@inews.gazeta.pl> <ed3lkl$ob0$1@tkdami.pl> <ed591i$a5i$1@inews.gazeta.pl> Reply-To: habdank@gmail.com NNTP-Posting-Host: 82.139.21.12 Mime-Version: 1.0 X-Trace: tkdami.pl 1157277530 10504 82.139.21.12 (3 Sep 2006 09:58:50 GMT) X-Complaints-To: usenet@news.tkdami.pl NNTP-Posting-Date: Sun, 3 Sep 2006 09:58:50 +0000 (UTC) User-Agent: KNode/0.9.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit