Porovnání C a Javy pro začátečníka

blizz

Re: Porovnání C a Javy pro začátečníka
« Odpověď #60 kdy: 22. 01. 2011, 19:11:47 »
Citujem:

Citace
inkluzívny polymorfizmus: objekt môže patrit do viacerých typov, ktoré sú usporiadané podla inklúzie. Objekt podtriedy sa môže vyskytnút všade tam, kde sa vyžaduje objekt niektorej z jeho nadtried.

...
...
...
Stací? Najprv si doštudujte základy OOP.

Ono všetky tie definicie sú pravdepobne ekvivatelné a problém je s pochopením slova mnohotvátvost. Najviac sa mi páci definícia s inklúziou, i ked by ma neprekvapilo, keby pre vela ludí bola nezromitelná. Prosím, prv nez zacnete machrovat definiciami na jedno kopyto, najprv pochopte sémantiku písma a nie iba syntax. V tomto osobne skôr súhlasim s inkvizitorom, lebo pod zmenou tvaru fakt prestavím zmenu tvaru a nie ten istý tvar iba osekaný o nejaké veci (to je tá inklúzia). Ako najcistejši polymorfizmus mi prídu interfacy.

Omyl, interface neni polymorfizmus!, interface úzko súvisií s inkluzívnym polymorfizmom. Na to aby mohol objekt morfovat na nejaké rozhranie musí ho trieda ktorej je tento objekt inštanciou najprv implementovat.  (S polymorfizmom súvisia aj pojmy ako dynamické viazanie + virtuálne metódy vs. statické viazanie atď, ale to už je fakt offtopic.)

Tým rozhraním môže byt aj trieda object, o ktorej sme sa tu pôvodne bavili. Inkvizítor tvrdil že morfovanie typu Type1 na typ object neni polymorfizmus. A taktiež tvrdil že pri polymorfizme objekt stráca informáciou o type ktorého je inštanciou. V oboch prípadoch sa Inkvizítor mýlil. Aj inštanciu triedy Type1 ktorá morfovala na typ object môžem kedykoľvek opätovne pretypovať na typ Type1.

Kód: [Vybrat]
var a = new Type1();
object b = a;
var c = b as Type1;

b is Type1; //true
« Poslední změna: 22. 01. 2011, 19:15:14 od blizzboz »


alefo

Re: Porovnání C a Javy pro začátečníka
« Odpověď #61 kdy: 22. 01. 2011, 23:55:27 »
No keby 8MB, lenze ked to pustim tak asi 10s, oo.org sa pusta rychlejsie, cucne si 145M, k tomu mi bezi netbeans, firefox+par dalsich veci a uz ma disk chudak co robit. Zato utorrent zabere prijemnych 17M v pamati, starsia verzia tak 7 a spusti sa instantne. Java proste nie je prisposobena moc dobre na desktop, nejde o nejake programatorske vymozenosti, ale o to co ma z toho uzivatel. Ale na serveri jednoznacne ano.

To porovnanie je veselé v tom, žeuTorrent je napísaný pomerne efektívne, podľa Wikipedie je to C++, ale bez stdlibu a s mnohými vlastnými náhradami. Ktovie, ako je napísaný Vuze.

Na druhej strane NetBeans v základnej verzii zožerie 200 MB, len tak fukne...

a na tretej strane môj Firefox na 30 taboch 400 MB.

Samozrejme, prvá to vyžerie Java :-)

Inkvizitor

Re: Porovnání C a Javy pro začátečníka
« Odpověď #62 kdy: 23. 01. 2011, 12:16:42 »
Je mi fakt líto, blizbozzi, že pokračuju v této off topic diskusi, nicméně Vaše základní nepochopení principu polymorfismu mě nenechává chladným a horší je, že pomocí Internetu se podobné bludy často šíří jako lavina. Základní nepochopení na Vaší straně je v tom CO nabývá různého tvaru v polymorfismu. Tím je abstrakce (rozhraní) a nikoliv konkrétní objekt. V jazycích typu Java je polymorfismu dosahováno pomocí hierarchie (podtyp) nebo pomocí implementace rozhraní coby speciální jazykové konstrukce. To ale není jediná možnost, jak dosáhnout polymorfismu. K nastudování doporučuji například následující článek: http://en.wikipedia.org/wiki/Duck_typing, který ukazuje, jakým způsobem je možné v některých jazycích dosáhnout polymorfismu bez explicitní deklarace implementovaného společného rozhraní v dané třídě. To společné rozhraní tam prostě implementováno je. V následujícím odkazu je ukázáno, jak je něco podobného možné udělat ve staticky typované Scale: http://markthomas.info/blog/?p=66 (IMO daleko lepší možnost, než použití dynamic v C#).

Teď zpátky k Vašemu nešťastnému příkladu:

Kód: [Vybrat]
var list = new List<object>() { new Type1(), new Type2() };
Tady se žádný polymorfismus nepoužívá (skutečnost, že do seznamu je možné vložit instance tříd Type1 a Type2 je dána dědičností). Ukázkou polymorfismu by bylo, kdybyste procházel vytvořený seznam instancí potomků třídy object a volal některou z metod společného rozhraní, které objekty zdědily v rámci třídní hierarchie. V případě, že by třída object nedefinovala žádné metody, nebylo by možné polymorfismus demonstrovat vůbec.

Další problém Vašeho svérázného chápání slova polymorfismus je v představě, že objekty mění svůj tvar tím, že je dosadíme do proměnné nadřazeného typu. Nikoliv, objekt tvar nemění, zůstává úplně stejný, jako vždycky byl a jako vždycky bude. Mění se pouze způsob, jakým na daný objekt nazíráme, přesněji řečeno dochází k zúžení (slovy iwtu osekání) našeho náhledu na daný objekt, které může být samoúčelné nebo může sloužit právě k tomu, abychom mohli využít polymorfismu způsobem, jakým to dovolují Java a spol. V Pythonu a v dalších dynamických jazycích se nic podobného používat nemusí a přesto je možné pracovat s polymorfismem (viz první odkaz).

Inkvizitor

Re: Porovnání C a Javy pro začátečníka
« Odpověď #63 kdy: 23. 01. 2011, 12:17:49 »
Mimochodem, omlouvám se za neustálé komolení přezdívky; to skutečně nebyl záměr.

Re: porovnání C a Javy pro začátečníka
« Odpověď #64 kdy: 23. 01. 2011, 12:43:08 »
tak jsem se rozhodl začít s javou, protože se mi líbí prostředí netbeans a přijde mi přívětivé, můžu poprosit o nějakou doporučenou literaturu(tu v ČJ) nebo nějaké webové tutoriály(ty můžou být klidně v AJ)
Osobně se mí líbí kniha od Pavla Herouta: http://www.root.cz/clanky/ucebnice-jazyka-java-recenze/


blizz

Re: Porovnání C a Javy pro začátečníka
« Odpověď #65 kdy: 23. 01. 2011, 20:18:48 »
samozrejme že objekt zostáva rovnaký ale v rámci abstrakcie mení svoj vonkajší tvar (morfovanie - zmena formy) práve vy ste pôvodne tvrdili že objekt sa mení a stráca typovú informáciu, nie ja.

Citace
Kód: [Vybrat]
var list = new List<object>() { new Type1(), new Type2() };
Tady se žádný polymorfismus nepoužívá (skutečnost, že do seznamu je možné vložit instance tříd Type1 a Type2 je dána dědičností).

je to polymorfizmus. bezohľadu či nadtrieda obsahuje nejaké metódy (objekt môže kľudne morfovať aj na prázdne rozhranie). samozrejme že je to dané dedičnosťou objekt morfuje na svojho predka. ale nebaví ma s vami ďalej diskutovať pretože som vám vygooglil dostatok definícií polymorfizmu a vy si neustále opkaujete len tú svoju ktorú ste si vymysleli. oberá ma to o čas. Nemá zmysel diskutovať s niekym kto ostatných presviedča že čierna je v skutočnosti biela, že všetci sa mýlia len on má pravdu.

Re: Porovnání C a Javy pro začátečníka
« Odpověď #66 kdy: 23. 01. 2011, 20:20:37 »
@Blizzboot: Polymorfismus nemusi mit nic spolecneho s dedicnosti.

blizz

Re: Porovnání C a Javy pro začátečníka
« Odpověď #67 kdy: 23. 01. 2011, 21:49:15 »
@Blizzboot: Polymorfismus nemusi mit nic spolecneho s dedicnosti.

to som ani nikde netvrdil.

Inkvizitor

Re: Porovnání C a Javy pro začátečníka
« Odpověď #68 kdy: 24. 01. 2011, 23:48:35 »
No, se mnou, blizzbozi, nesouhlasíte jedině Vy. Dosud jste to ale zřejmě nepochopil, iwtu měl snahu Vám to s tou syntaxí a sémantikou naznačil. Já jsem řekl, co jsem považoval za nutné, trápit Vás už nebudu.