🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #13119

Re: Dlaczego uzywamy Javy?...

#13119
From: Sektor van Skijlen
Date: Wed, 09 Nov 2005 20:38
117 lines
6515 bytes
Dnia Wed, 9 Nov 2005 19:39:33 +0100, Filip Sielimowicz skrobie:
> > Co i tak nie zmienia faktu, że komplikacja języka wcale jednoznacznie nie
> > świadczy o jego jakości.
> Czyżbyś się asekurował na wypadek, gdyby współ-dyskutant jednak pokazał, że 
> C++ jest trudniejszy ? ;)))

Nie; asekuruję się na wypadek, gdyby współ-dyskutant zaczął udowadniać (w
ciapkach), że C++ jest gorszy przez stwierdzenie, że jest bardziej
skomplikowany.

> Jeśli przyjmiemy, że jedną z podstawowych rzeczy w tych językach jest 
> obiektowość,

Ja takiego założenia nie przyjmuję. Język ma dostarczać możliwości
wystarczające do rozwiązania tego problemu, przy czym oczywiście powinien
posiadać pewną formę obiektowości. Jaka to będzie forma, to już nie jest
istotne ALA język dobrze się nadaje do rozwiązania danego problemu.

> to niestety obiektowość C++ jest IMHO dużo bardziej zawiła,

Przecież jest zrobiona dokładnie tak samo jak w Javie.

Przyjrzyj się najpierw, czym się różni obiektowość Smalltalka i Javy, to wtedy
będziesz miał jasny pogląd co do tych "zawiłości".

> a w zasadzie nie 
> widzę
> zalet tej zawiłości. A chodzi mi np. o ideę dziedziczenia wielobazowego

A, o to ci chodzi. Przyznam, nie rozumiem, co to ma być za "zawiłość".

> (np.  z dopuszczeniem dziedziczenia obu klas bazowych po wspólnych
> przodkach, w szczególności po tej samej klasie abstrakcyjnej), dziedziczenie
> wirtualne itp pomysły - 

Nie no te wszystkie rzeczy to jest wyłącznie konsekwencja wprowadzania
dziedziczenia wielobazowego.

Kurde, który ja to raz już piszę... niedługo zbierze mi się na kolejną porcję
advocacy na stronce. Dziedziczenie w C++ jest wyłącznie _ficzerem_ językowym,
który w niektórych przypadkach _można_ wykorzystać do dziedziczenia w sensie
obiektowym. Dziedziczenie wielobazowe w sensie obiektowym nie ma sensu; z tym
się jak najbadziej zgodzę. Co prawda Stroustrup w swoich książkach próbuje
udowodnić, że ma, ale ja się z tym nie zgadzam.

Natomiast za pomocą dziedziczenia wielobazowego można tworzyć odpowiednie
systemy struktur i dostarczać dodatkowe właściwości do poszczególnych
struktur, które powiedzmy że czasem są rzeczywiście klasami. W prawdziwych
projektach obiektowych w C++ zazwyczaj dzieje się to właśnie w ten sposób, że
istnieje tylko jedna struktura, która jest faktycznie "klasą bazową" w sensie
obiektowym. Inne struktury mają za zadanie dostarczyć klasie odpowiednie
dodatkowe właściwości lub interfejsy. I w ten sposób można przeprowadzić
hierarchię "w sensie obiektowym" od korzenia do klasy wyjściowej. Tak jest np.
w Qt, gdzie wszystkie widżety dziedziczą po QWidget, a ten po QObject.

> których w Javie nie ma i nie widzę potrzeby, by takowe wprowadzać.

Jasne. W zamian wprowadzono inne.

> Zasada jest prosta: nie ma dziedziczenia wielobazowego, są interfejsy,

Ładnie powiedziane. Dzięki temu np. nie można tworzyć własnych typów
wartościowych, a implementując interfejs trzeba zawsze dostarczyć definicję
każdej poszczególnej metody (w C++ interfejs wygenerowany z IDL-a to struktura
bez pól i z metodami czysto-wirtualnymi). A dziedziczyć interfejsy można?
(pytam, bo nie wiem)

> wszystkie metody są wirtualne,

Dzięki czemu jeśli np. zapomnisz dać final, to możesz mieć piękne efekty
specjalne przy wołaniu metod z konstruktora.

> nie ma pojęcia "destruktor", w szczególności nie ma tej "niesymetrii"
> rozwiązania, które jest w C++: destruktor jako stojący po drugiej
> stronie barykady co konstruktor

Funkcjonalnie tak. Ale nie definicyjnie.

> działą wg. zdecydowanie innych zasad: np.  może być wirtualny lub nie.

A wiesz chociaż, dlaczego? :@

> I inne podobne smaczki, dot. np. wywoływania konstruktorów klas 
> bazowych.

Nie rozumiem. Że co, że zamiast super/base musisz użyć jawnej nazwy klasy
(oraz jawnie wołać konstruktor klasy dziedziczonej wirtualnie)?

> W javie jest jeden prosty schemat i nawet jak czasem może i toporny, to 
> jednak bardzo
> przejrzysty.

Dlaczego? Uzasadnij. Na razie to wychodzi na to, że przez brak dziedziczenia
wielobazowego.

> W javie może trochę przytłaczać liczba różnych rodzajów klas: wewnętrzne,
> statyczne, anonimowe, lokalne itp itd. Ale wg. mnie ta różnorodność na tym
> poziomie jest względnie bezpieczna - nie wprowadza poważnych zagrożeń, bo
> różnice nie powodują zmian w zachowaniu się obiektów

Pozwól, że nie uwierzę.

> (że wywołaął sięnie ta metoda, co chciałem ...)

No, szczególnie jak ktoś ją przedefiniował.

> a jedynie decydują o dostępności szerszego kontekstu i ew. czasie życie
> obiektu.

Nie widzę, żeby to było mniej skomplikowane od wielorakiego dziedziczenia.


-- 
//  _    ___         Michal "Sektor" Malecki <sektor(whirl)kis.p.lodz.pl>
\\ L_ |/ `|  /^\ ,()                         <ethourhs(O)wp.pl>
// \_ |\  \/ \_/ /\ C++ bez cholesterolu: http://www.intercon.pl/~sektor/cbx
"I am allergic to Java because programming in Java reminds me casting spells"
Technical Details
Message-ID: <dktmom$6s7$1@kujawiak.man.lodz.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.pionier.net.pl!news.man.lodz.pl!not-for-mail
References: <8mfsm19fuhr2d95ar8fsjllvd2j0crhtfq@4ax.com> <dklksm$nc3$1@inews.gazeta.pl> <dkn9sm$rsq$1@news.onet.pl> <dknakv$7n4$1@inews.gazeta.pl> <dkob5d$u25$1@bandai.magma-net.pl> <b7dvm1pcid4ihg1m0dkup6p0chdtakla1l@4ax.com> <dkqrp2$scm$1@bandai.magma-net.pl> <dkqtm4$iq5$1@inews.gazeta.pl> <dkqvrp$t1i$1@inews.gazeta.pl> <dkr5mf$7n3$2@kujawiak.man.lodz.pl> <dks6b7$i00$1@inews.gazeta.pl> <dkteeb$jc7$1@kujawiak.man.lodz.pl> <dktfp0$cfa$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.pionier.net.pl!news.man.lodz.pl!not-for-mail
From: Sektor van Skijlen <ethouris@pl.wp.spamu.lubie.nie.invalid>
Newsgroups: pl.comp.objects
Subject: Re: Dlaczego uzywamy Javy?...
Date: Wed, 9 Nov 2005 20:38:46 +0000 (UTC)
Organization: LODMAN - Metropolitan Area Network in LODZ, Poland
Lines: 117
Sender: Michal Malecki <sektor@zly.kis.p.lodz.pl>
Message-ID: <dktmom$6s7$1@kujawiak.man.lodz.pl>
References: <8mfsm19fuhr2d95ar8fsjllvd2j0crhtfq@4ax.com> <dklksm$nc3$1@inews.gazeta.pl> <dkn9sm$rsq$1@news.onet.pl> <dknakv$7n4$1@inews.gazeta.pl> <dkob5d$u25$1@bandai.magma-net.pl> <b7dvm1pcid4ihg1m0dkup6p0chdtakla1l@4ax.com> <dkqrp2$scm$1@bandai.magma-net.pl> <dkqtm4$iq5$1@inews.gazeta.pl> <dkqvrp$t1i$1@inews.gazeta.pl> <dkr5mf$7n3$2@kujawiak.man.lodz.pl> <dks6b7$i00$1@inews.gazeta.pl> <dkteeb$jc7$1@kujawiak.man.lodz.pl> <dktfp0$cfa$1@news.onet.pl>
NNTP-Posting-Host: zly.kis.p.lodz.pl
Mime-Version: 1.0
X-Trace: kujawiak.man.lodz.pl 1131568726 7047 212.191.89.2 (9 Nov 2005 20:38:46 GMT)
X-Complaints-To: abuse@man.lodz.pl
NNTP-Posting-Date: Wed, 9 Nov 2005 20:38:46 +0000 (UTC)
User-Agent: tin/1.6.2-20030910 ("Pabbay") (UNIX) (SunOS/5.9 (sun4u))
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit