Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: lamiczka_lamova_z_lamova 07. 01. 2011, 18:53:18

Název: Porovnání C a Javy pro začátečníka
Přispěvatel: lamiczka_lamova_z_lamova 07. 01. 2011, 18:53:18
Dobrý den.
mohl bych vás poprosit o porovnání C a Javy, pro začátečíka který umí kódovat v html a css, a malinko(spíš pochopil co, co dělá a přemýšlel jak by se to dalo využít) programovat v pascalu? Chci se začít učit, četl jsem zhruba tohle:
C: +člověk se přiučí o PC
    +může ručně spravovat pamět, takže programátor získá slušné návky
Java: + OOP

Ale mohli byste mi prosím sepsat skutečné výhody pro začátečníka
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: Gentoo 07. 01. 2011, 19:33:31
C - celkem jednoduchy jazyk se kterym napises optimalni a rychly program. Je spise pro takove nizkourovnove programovani.

Java - moderni jazyk, ktery je jednoduchy, multiplatformni a umi OOP. Zvladne ho kde kdo. Program v nem napises nekolikanasobne rychleji nez v C, ale program v C bude radove rychlejsi.

Pokud chces v budoucnu programovat "za penize", nauc se Javu.
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: křupan 07. 01. 2011, 20:08:02
Výhody pro začátečníky jsou u obou stejné. Pro oba jazyky existuje velké množství srozumitelných učebnic, ukázkových příkladů a dalších materiálů. IMHO pro začátečníka jsou vlastnosti jednotlivých jazyků irelevantní. Pro učení je dobrý i pascal.
Citace
Pokud chces v budoucnu programovat "za penize", nauc se Javu.
Spíš se nauč oboje  :)
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: Jose.D 07. 01. 2011, 20:15:41
Java je takova "hodna mama". Kdyz udelas nejakou chybu, tak te upozorni, "tohle a tohle mas, blbe, na tom a tom radku..", ale vykon neni uplne supr. Zatimco v c & c++ (ktere bych doporucoval vic, nez samotne c) je mozne udelat temer cokoliv, ale kdyz se to nepovede, tak dost casto to skonci nejakou chybou, ktere neni snadne odhalit.

IMHO na uceni je lepsi java.
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: lamiczka_lamova_z_lamova 07. 01. 2011, 20:17:50
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)
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: křupan 07. 01. 2011, 20:41:30
Oficiální tutoriály od Sunu/oraclu, česky knihy od Pecinovského a Herouta. Pro začátek a snažší pochopení OOP se občas doporučuje použít prostředí http://www.bluej.org/ (http://www.bluej.org/).
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: Solitary 07. 01. 2011, 20:42:42
Osobne povazuju http://www.root.cz/clanky/ucebnice-jazyka-java-recenze/ (http://www.root.cz/clanky/ucebnice-jazyka-java-recenze/) za slusny odrazovy mustek... existuji pak i dve pokracovani zabyvajici se GUI a knihovnami.
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: lamiczka_lamova_z_lamova 07. 01. 2011, 21:20:41
zeptám se ještě co si myslíte o knihách: Virius Miroslav - Java pro zelenáče, Java 6 výukový kurz, Thinking in Java
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: iwtu 07. 01. 2011, 21:30:19
thinking in Java je super. Cesky autori okrem Pecinovskeho nevedia fajn pisat o Jave. Ale ak mam byt uprimny, mne zo vsetko najkrajsi pride original tutorial http://download.oracle.com/javase/tutorial/ (http://download.oracle.com/javase/tutorial/)

Vazne, C++ sa neda... Ale Java je z tych jazykoch, ktory sa da cely naucit z Internetu a vazne ti netreba nejaku fyzicku knihu.
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: vvv 07. 01. 2011, 22:34:07
Thinking in Java je supr, doporucuju.
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: alefo 07. 01. 2011, 23:45:12
Ked vies po anglicky, tak Head First Java a TIJava.

Ked nevies, tak TIJ, zial len v 2. edicii, kde nie su veci z patkovej Javy a Pecinovsky.
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: lamiczka_lamova_z_lamova 08. 01. 2011, 07:59:21
anglicky umim, akorát v našem městě knížy v ájině neseženu a z amazoonu neobjednávám, takže musí být k dostání v podobě e-booku, jinak se ještě jednou zeptám na tu knihu Java 6 výukový kurz, protože kamarád mi ji nabízí za 100Kč včetně CD protože mu leží jen doma a nikdy ji neotevřel
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: vlasák 08. 01. 2011, 08:10:33
Java 6 výukový kurz není pro začátečníky. Není to učebnice programování, ale učebnice Javy. Tu si nech jako 2. nebo 3. knihu. Navíc do půl roku tady bude Java 7, takže si spíš počkej na Java 7 výukový kurz.
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: alefo 08. 01. 2011, 12:11:55
Thinking in Java, 3 edicia je zadarmo k dispozicii: http://www.mindview.net/Books/TIJ/

Pokial chces papierovu verziu, tak sa to fakt redukuje na toho Pecinovskeho, lebo TIJ (v cestine vysla v 2 zvazkoch) je uz mozno aj vypredana

Alebo treba googlit ;-)
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: Michal Štrba 17. 01. 2011, 14:59:23
Java je takova "hodna mama". Kdyz udelas nejakou chybu, tak te upozorni, "tohle a tohle mas, blbe, na tom a tom radku..", ale vykon neni uplne supr. Zatimco v c & c++ (ktere bych doporucoval vic, nez samotne c) je mozne udelat temer cokoliv, ale kdyz se to nepovede, tak dost casto to skonci nejakou chybou, ktere neni snadne odhalit.

IMHO na uceni je lepsi java.
Ved to ze to je "takova hodna mama" ;). Ta ta rozmazna, a prd nauci. Dla mna je lepsie zacat s ceckom lebo tam sa nenaucis len kodit ale aj programovat. Potom mozes v pohode prejist aj na trebars javu ale zacinat v nej myslim neni dobry napad
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: ondra.novacisko.cz 17. 01. 2011, 15:29:21
Spíš doporučuju Visual C++ Express.  Pro začátečníka skvělé prostředí, lepší než vi+gcc+gdb. I pro programování v Eclipse CDT musí člověk už něco umět, aby si to dokázal nastavit.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Ondra Satai Nekola 17. 01. 2011, 16:45:22
Jako prvni "opravdovy" jazyk bych C nebral ani nahodou. Jako druhy, treti jazyk je to skvela volba, ktera cloveku ukaze hodne veci do hloubky. Ale jako prvni knihu take nedavame detem Fucaultovo kyvadlo vytistene malym pismem.
Zacal bych Pythonem (alternativne Ruby, Smalltalkem, Scheme...), v mirne horsim pripade Javou. Zacatecnik imo nema byt postaven naraz pred vsechny problemy, bude mu stacit prvni varka (algoritmizace, cykly, podminky, volani funkci, rekurze). Bude rad, ze napise print vysledek a ono to vypise vysledek (ruku na srdce, trebas IO je v C sice logicke, ale aby ho clovek pochopil, tak musi chapat hodne i netrivialnich veci).

Takze ma rada: zacit mensim problemem (Python, Ruby, Java...), nabrousit si na nem drapy a pak jit smer C. Lepsi dostat do zacatku nejaky ten bonus zadarmo (sprava pameti, bohate knihovny, bezpecnost runtime...) nez si namlatit cumak. Nekoho to zoceli, ale vetsinu odradi. Prvni kroky jsou tezke a pozitivni zpetna vazba neocenitelna.

Z knih pro zacatecniky neznam nic lepsiho nez edici Head first. Zacal bych Head first programming (pouziva Python), ale i Head first Java nebo Head first Python jsou dobre navrzene ucebnice.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: biggles001 17. 01. 2011, 16:57:39
Na začátek je docela dobry php, syntaxe je dost podobná Cčku, člověk nemusí řešit alokaci paměti a spoustu dalších věcí, navíc se jde v něm docela dobře naučit objektovy programování (ale nemám s tím moc zkušeností, OOP nemusím). Jediny co mě v php štvě jsou $ před každou proměnnou.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Jakub D. 17. 01. 2011, 18:56:22
Z pohledu zacatecnika je tu jeste jedna dulezita otazka: kolik casu mi zabere v tom kterem jazyce udelat neco zajimaveho, co bude fungovat. Treba hru, jednoduchy editor textu atd. Pro zacatecnika je myslim dulezite, aby co nejrychleji dostal nejake vysledky, a mel tak motivaci pokracovat dal.

K tomu je asi nejlepsi PHP a Java. Jen pro porovani: absolvoval jsem dva kurzy: Java a C++. Kazdy z nich byl prednasen a cvicen schopnymi lidmi. Zatimco v kurzu Javy se ke konci delaly kolekce, GUI, prace se siti a dalsi, v kurzu C++ se stale zapolilo se zaklady (cti ukazately :-)), ale prakticky vysledek nikde.

Pokud budete chtit psat drivery nebo vlastni OS (sic!), tak se specifika C++ doucite. Tak jako tak by jste casem, po zdokonaleni se mel pribrat dalsi jazyk, neni vhodne zustavat u jednoho.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: blizz 17. 01. 2011, 19:35:39
Z pohledu zacatecnika je tu jeste jedna dulezita otazka: kolik casu mi zabere v tom kterem jazyce udelat neco zajimaveho, co bude fungovat. Treba hru, jednoduchy editor textu atd. Pro zacatecnika je myslim dulezite, aby co nejrychleji dostal nejake vysledky, a mel tak motivaci pokracovat dal.

K tomu je asi nejlepsi PHP a Java.

PHP by sa začiatočník určite nemal učiť ako prvý jazyk, lebo získa zlé programátorské návyky.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: blizz 17. 01. 2011, 19:40:22
Na začátek je docela dobry php, syntaxe je dost podobná Cčku, člověk nemusí řešit alokaci paměti a spoustu dalších věcí, navíc se jde v něm docela dobře naučit objektovy programování (ale nemám s tím moc zkušeností, OOP nemusím). Jediny co mě v php štvě jsou $ před každou proměnnou.

PHP umožňuje programovať objektovo ale neni to oo jazyk v pravom zmysle slova. A vôbec nevedie programátora k tomu aby myslel v objektoch.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Inkvizitor 17. 01. 2011, 23:28:51
Jakub D.: Pokud bych chtěl rychlý výsledek, rozhodně bych si vybral nějaký jazyk, který má REPL (interaktivní rozhraní). To, pokud vím, Java nesplňuje a pro PHP existuje jakési udělátko od tvůrců Facebooku, které jsem neviděl.

Pokud bych chtěl mít extra rychlé výsledky, rozhodně bych nevolil "čtvrtinový assembler", tedy Javu (C je poloviční assembler, Java je poloviční C), ale Python nebo Ruby, já mám zkušenosti s Pythonem a z hlediska rychlosti výsledku mohu doporučit. V Pythonu se na žádné kolekce ala Java moc nehraje, prostě máš pole objektů nebo slovník a strč si tam, co chceš. Navíc je "batteries included", tj. v základní distribuci snad kromě pořádného GUI lze dělat všechno, co začínajícího programátora napadne.

Ze staticky typovaných jazyků bych volil asi Scalu. Namísto Javy rozhodně.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: blizz 18. 01. 2011, 00:03:26
"V Pythonu se na žádné kolekce ala Java moc nehraje, prostě máš pole objektů nebo slovník a strč si tam, co chceš."

takto?:

object[] pole = { "retazec", 1999 };
var kolekcia = new List<object>() { "retazec", 1999 }
var slovnik = new Dictionary<object, object>()
{
   {"x", 2},
   {55, "werqwe"},
   {ff, 5.5},
   {5.5, -1}
};

"Ze staticky typovaných jazyků bych volil asi Scalu. Namísto Javy rozhodně."

typická otrepaná fráza.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Inkvizitor 18. 01. 2011, 00:24:39
Sorry, blizzbossi, ale co jsi mi tím vyvrátil? Já jsem nikde netvrdil, že v Javě nelze udělat pole obecných objektů, jenom jsem řekl, že Python je dynamicky typovaný jazyk a tudíž v poli máš OBECNĚ to, co tam narveš (a bez garance, kterou zajišťují staticky typované jazyky). Jasně že si můžeš dát v Javě nohu za krk a programovat podobným způsobem, byť daleko méně elegantně. Pokud se pro to ale rozhodneš, s největší pravděpodobností jsi udělal něco špatně.

S tou "typickou otřepanou frází" jsi mě rozesmál. Já napíšu, že bych JÁ OSOBNĚ zvolil raději Scalu (z dobrých důvodů, ale to není podstatné, neuváděl jsem je) a ty na mě s "otřepanou frází".  ;D
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: pravdokop 18. 01. 2011, 02:36:15
Uvědomte si, že vše, co má běžet opravdu rychle, je a ještě dlouho bude programováno v C/C++. Navíc uvidíte "pod pokličku" všech zpomalovacích vrstev jako je java nebo C# a budete schopni odhadovat, jak zatíží ten či onen algoritmus procesor. Pokud někomu dělá problém se tyto nepříliš složité jazyky naučit, tak ať raději vůbec neprogramuje, stejně to bude stát za starou belu.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Ondra Satai Nekola 18. 01. 2011, 09:21:56
Uvědomte si, že vše, co má běžet opravdu rychle, je a ještě dlouho bude programováno v C/C++. Navíc uvidíte "pod pokličku" všech zpomalovacích vrstev jako je java nebo C# a budete schopni odhadovat, jak zatíží ten či onen algoritmus procesor. Pokud někomu dělá problém se tyto nepříliš složité jazyky naučit, tak ať raději vůbec neprogramuje, stejně to bude stát za starou belu.
Da se souhlasit s tim, ze C udela z programatora lepsiho programatora. Ale stale v tom nevidim duvod, proc by to mel byt prvni jazyk. Zacit jednodusim a pokracovat ke slozitejsimu. (S tim, ze by se mel clovek naucit C++ i pokud se jim nechce zivit, bych ale uz nesouhlasil. Pro praxi je to jazyk uzitecny, ale na rozdil od plain C tam neni nic, co by podstatne rozsirilo programatorovu mysl. Navic je to dost nestastne navrzeny jazyk, ktery zabere hodne casu, ale vse v nem je jinde lepe.)
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Peter Fodrek 18. 01. 2011, 11:36:05
Pozrime si Tiobe Index
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

To je pouzivanost jazykov v praxi
a  tomu prepojenost jazykov podla historika Erica Levenza
http://levenez.com/lang/

Z ktoreho zistis, ze  C s OOP je  C++, Java je C++ bez smenikov, a C#  je zmrvena Java, z C/C++ vychdza aj ObjectiveC.


Z Tiobe indexu ale zistis,. ze za tento mesiac brutalne narasta Jazyk Symbolickych Instrukcii  (Assembly Language) a jazyk umelej inteligencie LISP.

C je len lepsi citatelny "Assembler" a teda ta na neho pripravi. C umoznuje aj funkcionalne konstrukcie, ktore ta pripravia na LISP.
 


JAVA-e by som sa v uvode vyhybal, ak sa chces nieco naucit

Dvaja profesori z New York University sa v obšírnejšej rozprave zaoberali problémom, ktorý trápi mnohých zamestnávateľov v IT priemysle: programátorské schopnosti nových absolventov počítačových vied sa postupne znižujú. Podľa nich za to môžu úvodné kurzy Javy a skriptovacích jazykov.

http://www.itnews.sk/spravy/software/2008-01-17/c87894-programatorske-schopnosti-absolventov-klesaju-problemom-je-java
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: pssp 18. 01. 2011, 14:27:37
Ja by som ako prvy odporucal Basic. U mna to fungovalo :-)

Seriozne ... asi by som si vybral skor podla toho, comu sa chcem venovat (jednoduche webove stranky (php), webove aplikacie (php, java, python), hry (c, c++, java, ...), desktop applikacie (c++, objc, java, ...), android (java), iphone (objc), ... nieco uplne ine). Po zvladnuti jedneho jazyka sa dalsie daju naucit rychlejsie, vela konceptov sa medzi jazykmi opakuje, aj ked rozdiely samozrejme su, napr. medzi C a Javou je dost velky skok. Hlavne to berte sportovo, netreba sa nikam ponahlat, programovanie je obrovske pole a naucit sa nieco vyzaduje kopec casu a odhodlania. Have fun!
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Mac 18. 01. 2011, 14:52:22
Když budeš umět třeba C/C++, tak můžeš napsat program pro příkazovou řádku. Aby měli programy nějaké textové nebo grafické rozhraní, je potřeba se také naučit knihovny, např. ncurses, GTK+ nebo Qt. Na hry třeba SDL nebo OpenGL atd. atd. Taky se budeš muset učit algoritmy. Programování je prostě závazek na celý život.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Michal Štrba 18. 01. 2011, 15:05:34
Zacal bych Pythonem (alternativne Ruby, Smalltalkem, Scheme...)
Hej, python je tiez fainy. Zrovna v nom robim ;)
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: andy 18. 01. 2011, 19:55:43
V podstate si to pocul dobre, dalsia vyhoda C su vacsinou standartne dostupne hlavickove subory a libky (rozne systemove rozhrania atd).
Java je podla mna lahsia, ma vyhodu GC ale musis zvladnut aj OOP. Nie je pravda, ze by bola Java nejako vyrazne pomalsia ako C, je to skor v jednotkach %, ale zere ovela viac pamate.
Ak si chces robit jednoduche oknoidne aplikacie pod windows, porozmyslaj aj nad C#.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Mordae 18. 01. 2011, 20:28:32
Nedavno tady na foru byl skvelej vtip.

Tuk, tuk. Kdo tam? ... ... ... ... ... ... ... ... ... ... ... ... Java.

Je to vcelku vystizne. V benchmarcich, obvykle matematickeho charakteru, je Java rychla. V normalnim provozu ma takovou rezii, ze se to neda. Koukni na http://www.jelovic.com/articles/why_java_is_slow.htm (http://www.jelovic.com/articles/why_java_is_slow.htm).

V C se dobre pisi nektere veci. Takovy ten plumbing, veci, u kterych zalezi na rychlosti, UNIXove systemove nastroje a podobne. Graficke aplikace se take daji, ale kdyz to srovnas napriklad s Pythonem, je to na dlouhe lokte.

Webove veci se dobre pisi v Pythonu, nebo v Ruby. PHP je ksindl (dva roky, nikdy vice), je uplne rozbite a autori jsou diletanti.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Ondra Satai Nekola 18. 01. 2011, 20:43:52
Dovolil bych si poznamenat, ze kopec prispevku tu obsahuje uzitecne informace na tema "jaky jazyk zvolit pro muj projekt", ale pri vyberu prvniho programovaciho jazyka pro zacatecnika jsou spise irelevantni.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: aštar šeran 18. 01. 2011, 21:19:13
Mě by zajímalo vysvětlení následujících dvou fenoménů, které se objevují u lidí, kteří tvrdí že Java je nepoužitelně pomalá.
1. Proč to vždy dokazují odkazem na články minimálně 10 let staré?
2. Proč místo Javy často doporučují Python, který je i oproti Javě několikanásobně pomalejší(rychlostí běhu i paměťovou náročností)?
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: andy 18. 01. 2011, 21:35:28
Dobra poznamka. Ak ti to pomoze, ja som sa ucil ako prvy basic na 8bite, potom pascal (zaklady oop a tak). Potom je to uz jedno..

Inak benchmarky ja mam rad..http://shootout.alioth.debian.org/ naklikni si C a potom pascal a porovnaj s javou -server (pozor, rataju tam aj startup time). Java7 by mala o nieco zrychlit.

Ale rychlost je dost irelevantna ak ti ide o to naucit sa programovat...dokonca ani na jazyku nezalezi (myslim rozumne imperativne jazyky :) ).
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: NoName 18. 01. 2011, 21:46:31
Těžko lze obecně říct, jaký programovací jazyk je pro začátečníka nejlepší. Jak tu již padlo, důležité je, co si od toho, že se začnete učit programovat slibujete a kam to chcete dotáhnout. Je třeba si také uvědomit, že si s nejvyšší pravděpodobností nevystačíte pouze s jedním jazykem, ale postupně se jich naučíte více. Který jazyk bude ten první, není tedy zase až tak důležíté. Ale při volbě vyššího programovacího jazyka jako "toho prvního", může být později přechod k nižším jazykům více bolestivý, než by to bylo naopak (hlavně práce s ukazeteli a ruční správa paměti).

Pokud začnete s C a naučíte se v něm psát řádkové aplikace využívající složitějších datových struktur, správně spravovat paměť a pracovat s ukazateli, rozhodně to nebude na škodu. Naopak získáte spoustu znalostí, povědomí o ceně různých operací a konstrukcí, zkrátka jak se lidově říká: "Budete do toho vidět." Přechod k objektově orientovaným programovacím jazykům bude potom pouze přirozeným vývojem Vašich programátorských dovedností a bude mnohem méně bolestivý, než by tomu bylo naopak.

Na druhou stranu je třeba říci, že nízkoúrovňové jazyky jako C jsou poměrně zákeřné. Zvláště slabá typová kontrola, nepříjemné a těžko odhalitelné chyby vznikající při práci s ukazeteli a ruční správě pěměti.

Dle mého mínění lze říci, že začít přímo s vyššími programovacími jazyky podporujícími OOP není špatně, nicméně začít s nižšími není na škodu a je poměrně přínosné.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Jaroslav Hájek 19. 01. 2011, 09:59:08
Nedavno tady na foru byl skvelej vtip.

Tuk, tuk. Kdo tam? ... ... ... ... ... ... ... ... ... ... ... ... Java.

Je to vcelku vystizne. V benchmarcich, obvykle matematickeho charakteru, je Java rychla. V normalnim provozu ma takovou rezii, ze se to neda. Koukni na http://www.jelovic.com/articles/why_java_is_slow.htm (http://www.jelovic.com/articles/why_java_is_slow.htm).


Není nad takové analýzy, které jsou evidentně roky staré (Java generics existují už přes 6 let), a při dnešním pohledu jen dokazují, jak se autor, zřejmě považující svou analýzu za nadčasovou (protože ji ani nedatoval), krásně mýlil, jako většina proroků.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Mordae 19. 01. 2011, 12:30:32
Není nad takové analýzy, které jsou evidentně roky staré (Java generics existují už přes 6 let), a při dnešním pohledu jen dokazují, jak se autor, zřejmě považující svou analýzu za nadčasovou (protože ji ani nedatoval), krásně mýlil, jako většina proroků.
Mě by zajímalo vysvětlení následujících dvou fenoménů, které se objevují u lidí, kteří tvrdí že Java je nepoužitelně pomalá.
1. Proč to vždy dokazují odkazem na články minimálně 10 let staré?
2. Proč místo Javy často doporučují Python, který je i oproti Javě několikanásobně pomalejší(rychlostí běhu i paměťovou náročností)?

OK, sypu si popel na hlavu, nehledal jsem moc dlouho. Na druhou stranu... ukazte mi jedinou aplikaci, napsanou v Jave, ktera ma ekvivalent v C/C++ a je "snappier".

Jinak, je mi burt, jestli budete psat aplikace v Jave, Pythonu, C, nebo C#. Do okamziku, nez je budu muset pouzivat. Potom bych proste jen rad videl, ze uzivatelske rozhrani reaguje s maximalni prodlevou 100ms a nezpusobuje mi zachvaty beznadeje a zurivosti.

Dovolil bych si poznamenat, ze kopec prispevku tu obsahuje uzitecne informace na tema "jaky jazyk zvolit pro muj projekt", ale pri vyberu prvniho programovaciho jazyka pro zacatecnika jsou spise irelevantni.

Ne tak docela. Podle meho nazoru nema smysl jit se "ucit jazyk", nebo "ucit programovat" jen tak, bez cile. Me se pri uceni obvykle osvedcilo vybrat si nejaky prakticky cil, mensi projekt a ten pote realizovat nastrojem, ktery se mi libi a ktery bych si rad osvojil. Ma to nekolik vyhod; zaziju si postupy, ktere se pouzivaji, mohu srovnat vice nastroju pro stejnou ulohu a sam sebe motivuji dilcimy uspechy.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Ondra Satai Nekola 19. 01. 2011, 12:40:01
Dovolil bych si poznamenat, ze kopec prispevku tu obsahuje uzitecne informace na tema "jaky jazyk zvolit pro muj projekt", ale pri vyberu prvniho programovaciho jazyka pro zacatecnika jsou spise irelevantni.

Ne tak docela. Podle meho nazoru nema smysl jit se "ucit jazyk", nebo "ucit programovat" jen tak, bez cile. Me se pri uceni obvykle osvedcilo vybrat si nejaky prakticky cil, mensi projekt a ten pote realizovat nastrojem, ktery se mi libi a ktery bych si rad osvojil. Ma to nekolik vyhod; zaziju si postupy, ktere se pouzivaji, mohu srovnat vice nastroju pro stejnou ulohu a sam sebe motivuji dilcimy uspechy.

To je samozrejme dobra varianta. Ale je trochu zradna - clovek se (na rozdil od "vyuky pro vyuku") lehce namotivuje, ale muze snadno zacit bastlit, udelat spatna rozhodnuti, natlouci si nos... a prijit o motivaci. Navic se obloukem dostavame opet na to same misto: prvni projekt musi byt dost maly a dost lehky. Zacit projektem, ktery vede k pouziti C (assembleru, Perlu, Fortranu...) je spatny napad.

Sam se ted snazim naucit svou milou programovat. Jako dobra kombinace mi prijde kombinace skvele ucebnice s hodne cvicenimi (Head first programming), az se dostaneme o kus dal, tak si dohodneme nejaky snadny projekt, na kterem si to vyzkousi v praxi (je biolozka, takze to tipnu na nejakou simulaci evoluce, mozna neco z teorie her). Kdybych ji hodil doprostred projektu, tak ji bude chybet nadhled, pokud bych ho moc odkladal, tak ji nedojde, jak moc uzitecny nastroj dostava do rukou.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Mordae 19. 01. 2011, 18:30:12
Navic se obloukem dostavame opet na to same misto: prvni projekt musi byt dost maly a dost lehky. Zacit projektem, ktery vede k pouziti C (assembleru, Perlu, Fortranu...) je spatny napad.

Tady asi zalezi na tom, jak pro koho. Nekdo, kdo uz se v Linuxu hrabe dele by nemel mit problem s mensim projektem v C. Jinak ale chapu a v zasade souhlasim.

Sam se ted snazim naucit svou milou programovat. Jako dobra kombinace mi prijde kombinace skvele ucebnice s hodne cvicenimi (Head first programming), az se dostaneme o kus dal, tak si dohodneme nejaky snadny projekt, na kterem si to vyzkousi v praxi (je biolozka, takze to tipnu na nejakou simulaci evoluce, mozna neco z teorie her). Kdybych ji hodil doprostred projektu, tak ji bude chybet nadhled, pokud bych ho moc odkladal, tak ji nedojde, jak moc uzitecny nastroj dostava do rukou.

Jasne, rozumim. Hmm, moje biolozka nechce o programovani ani slyset... :-(
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: blizz 21. 01. 2011, 00:40:35
Sorry, blizzbossi, ale co jsi mi tím vyvrátil? Já jsem nikde netvrdil, že v Javě nelze udělat pole obecných objektů, jenom jsem řekl, že Python je dynamicky typovaný jazyk a tudíž v poli máš OBECNĚ to, co tam narveš (a bez garance, kterou zajišťují staticky typované jazyky). Jasně že si můžeš dát v Javě nohu za krk a programovat podobným způsobem, byť daleko méně elegantně. Pokud se pro to ale rozhodneš, s největší pravděpodobností jsi udělal něco špatně.

Prečo by malo byť "Špatne" využívanie výhod OOP a polymorfizmu? Veď to je ten najsprávnejší prístup. Aj staticky typované jazyky umožňujú programovať dynamicky napr c# obsahuje typ dynamic, object pascal typ variant atď ale v praxi sa využívajú veľmi málo pretože programovať bez typovej bezpečnosti je ako súložiť s prostitútkou bez kondómu.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Inkvizitor 21. 01. 2011, 08:39:32
Proč pleteš dohromady polymorfismus a degradaci typové informace tlačením objektů do obecného pole? V Pythonu a spol. prakticky neexistuje záruka, že daný objekt má nějaký typ a rozhraní až do chvíle, kdy se na to při běhu zeptáme nebo to rohraní zkusíme použít. Ve statických jazycích to až na výjimky takto být nemusí. Vždyť sis sám odpověděl: programovať bez typovej bezpečnosti je ako súložiť s prostitútkou bez kondómu.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Jaroslav Hájek 21. 01. 2011, 09:41:33

OK, sypu si popel na hlavu, nehledal jsem moc dlouho. Na druhou stranu... ukazte mi jedinou aplikaci, napsanou v Jave, ktera ma ekvivalent v C/C++ a je "snappier".

Jinak, je mi burt, jestli budete psat aplikace v Jave, Pythonu, C, nebo C#. Do okamziku, nez je budu muset pouzivat. Potom bych proste jen rad videl, ze uzivatelske rozhrani reaguje s maximalni prodlevou 100ms a nezpusobuje mi zachvaty beznadeje a zurivosti.

Tak s GUI nemám žádné zkušenosti, ale třeba naše firma má v Javě spoustu replikovaných serverů (aplikací), které chroustají až statisíce QPS. Nemáme asi žádné duplicitní servery v C++ (protože to tu neřídí banda idiotů), ale myslím, že vědí, proč Javu nasazují (C++ se používá taky).
Podstatné pro nás není, který jazyk chroustá rychleji smyčky - to dělají oba dost rychle, ale ve kterém se dá rychleji žonglovat s vlákny, sockety, streamy, časovači a tak dále. V tom je Java silná. Hlavní slabinou Javy není rychlost, ale paměť (ten server má běžet víceméně nepřetržitě, a Java průběžnou GC tak docela nestíhá), ale i s tím se dá poradit.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: blizz 21. 01. 2011, 10:25:57
Proč pleteš dohromady polymorfismus a degradaci typové informace tlačením objektů do obecného pole? V Pythonu a spol. prakticky neexistuje záruka, že daný objekt má nějaký typ a rozhraní až do chvíle, kdy se na to při běhu zeptáme nebo to rohraní zkusíme použít. Ve statických jazycích to až na výjimky takto být nemusí. Vždyť sis sám odpověděl: programovať bez typovej bezpečnosti je ako súložiť s prostitútkou bez kondómu.

Veď práve toto je polymorfizmus (mnohotvárnosť, objekty vzhľadom na okolnosti, menia svoj tvar). Aká degradácia typovej informácie? Tá typová informácia tam samozrejme stále je:

Kód: [Vybrat]
var list = new List<object>() { new Type1(), new Type2() };
Kód: [Vybrat]
if (list[0] is Type1) MessageBox.Show("list[0] je inštancia triedy typu: Type1");
alebo

Kód: [Vybrat]
MessageBox.Show("list[0] je inštancia triedy typu: " + list[0].ToString());
ak teda neviete čo je polymorfizmus tak si prejdite základy OOP!
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Ondra Satai Nekola 21. 01. 2011, 10:27:10
Jednou vetou: staticke a silne typovani nejsou to same.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: sparrow 21. 01. 2011, 12:36:50
Ke studiu Javy je vhodný MIT OpenCourseWare(odkaz níže). Je to sedm lekcí Javy z MIT, po každém cvičení je tam zadaný úkol se zdrojáky. Používal jsem to a pak pro mě kurz Javy na FI byl snažší. Knížka Java pro zelenáče je skvělá, autor je kapacita, jenže díky tomu se to téměř nedá sehnat, leda v knihovně. Jediná nevýhoda je, že látku poměrně rychle přerostete. Nebo se podívej po kurzech Javy na českých vysokých školách, určitě nějaké materiály najdeš.

Btw. srovnávat C a Javu je jako srovnávat jablka s hruškama :)

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-092-introduction-to-programming-in-java-january-iap-2010/
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Petr Mejzlík 21. 01. 2011, 13:20:41
Aká degradácia typovej informácie? Tá typová informácia tam samozrejme stále je:
Je tam, ale kontrolujeme ji až za běhu. To je stejné jako v pythonu. Tam taky typová informace je (python je silně typovaný), nemůžeme ale provést typovou kontrolu při překladu (python je dynamicky typovaný).
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Lukas 21. 01. 2011, 15:46:39
Ja osobne bych zacatecnikovi, ktery ma zkusenosti s webem doporucil se naucit kombinaci C# a C++, poradi je otazka, ja osobne jsem se ucil nejdriv C++ a pak C# ale podle me to neni tak dulezite. Doporucil bych tyhle dve, proste proto ze s tou kombinaci mam dobre zkusenosti. Navic se mi zda ze Java ( stejne jako C# winforms ) v zakladu nepouziva HW akceleraci, coz na rychlosti GUI nijak nepridava, kdezto WPF jo, a GUI je krasne svizne a hezke, coz v dnesni dobe "prodava" =)

V C++ se naucit delat do konzole, hlavne pochopit praci s pointery a STL. Vic podle me neni potreba.

C# se naucit kvuli GUI, WPF je dobra cesta jak prijit rychle k peknemu rozhrani, navic prace s XAML je hodne podobna klasickemu HTML a pro webare je z toho takovy ten pocit "to znam".

Hodne, hodne moc dulezita vec kterou je v dnesni dobe potreba se naucit jsou thready, s tema nvm jak moc poradit, ja sem se je naucil v C++ na CVUT, na webu nvm jak by byl kvalitni material, ale spis bych doporucil k "samouceni" bez vykladu C# protoze C++ hodne logickych chyb bez reci prezvejka a clovek se nic nenauci protoze pak cumi na chybu a nevi kde kdy a proc.

Do zacatku to budes delit, pokud bude cilem aplikace vykon, napises to v C++, pokud look, napises to v C#. Jakmile prijde chvile kdy to budes potrebovat spojit a mit oboji tak se naucis importovat DLLka ( coz je v C# jen o malo tezsi nez import knihovny ) a ses za vodou dokud nedojdes k tem threadum, jakmile pochopis ty, tak uz vicemene chapes vse je potreba a uz se budes ucit veci specificke pro tvoji ulohu.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Ondra Satai Nekola 21. 01. 2011, 15:58:27
@Lukas: To jsou presne dovednosti a schopnosti, ktere zacatecnik nepotrebuje. Zacatecnik potrebuje pochopit kompozici a dekompozici, algoritmy a datove struktury. Nepotrebuje loadovat DLL nebo malovat okenka. To je az aplikace neceho elementarnejsiho.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: alefo 21. 01. 2011, 16:08:54
V Jave sa GUI aplikácie extrémne nepresadili presne kvôli mýtu, že ,,Java je pomalá", a to je dôvod, prečo sú prakticky jediné killer GUI aplikácie len prostredia na vývoj v Jave.

Paradoxne, situácia dnes je úplne inde a napr. v NetBeans je možné naklikať aplikáciu práve tak, ako kedysi v Delphi. (A Swing je hardvérovo akcelerovaný :-))

Ako tvrdí kolega, začiatočník potrebuje uchopiť algoritmizáciu a dátové štruktúry, prípadne možnosti knižníc, ktoré povedú k funkčnému a ,,aha aha, čo som naprogramoval" programu.

Ide o to, aby začiatočník vedel zapísať idey v nejakej prístupnej forme a nemusel zápasiť s hardvérom, resp. technickými aspektami jazyka.
Pokročilé elementy ako ,,naučme sa pointre, lebo kto nevie pointre, je lama", zmienené thready a kadejaké ďalšie vylomeniny sa dajú pokojne urobiť aj neskôr.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Lukas 21. 01. 2011, 16:26:43
DLL, thready atd jsem psal az v konecne fazi samozrejme na relativne pokrocilou aplikaci, mozna jsem je radsi nemel zminovat, jen sem si vzpomnel na noci nad semestralkou s hlaskou segmentation fault tak jsem se mirne zasnil =)
 
Ale s nazorem "nepotrebuje malovat okenka" nesouhlasim, neni to prece jen o malovani, ale o pochopeni predavani udalosti a zprav a vubec o nejakem alespon trosku reprezentativnim vzhledu aplikace. To ze napise cely vykonny kod do obsluhy tlacitka je vec druha, ale kazdy nejak zacinal, hlavne ze pochopi jak se predavaji hodnoty mezi objekty atd.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: daemonna 21. 01. 2011, 16:53:41
jazyk C urcite nie.. ak chces byt pouzitelny programator tak najprv sa nauc principy OOP a potom vyberaj jazyk...

ak c++, tak jednoznacne Qt (qt.nokia.com)
ak java, tak hlavne pozeraj na java 1.6 a vyhni sa vsetkym historickym manualom ;)
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Inkvizitor 21. 01. 2011, 20:51:15
blizboz: Pokud jsem Váš příspěvek dobře pochopil, tak to, co jste popsal, rozhodně není polymorfismus. Polymorfismus je možnost používat stejný interface u objektů různých typů a nikoliv schopnost konkrétního objektu (instance) "měnit svůj tvar". Pokud jsem tedy pochopil Váš příspěvek správně, nejsem to já, kdo potřebuje něco doučit. S tou degradací to už vysvětlili jiní. Jde o degradaci ve smyslu omezení schopnosti kompilátoru rozhodnout o správnosti kódu, omezení samodokumentovatelnosti kódu, zhoršení čitelnosti kódu a zvýšení rizika zavlečení chyby (příklad s prostitutkou a kondomem).
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Inkvizitor 21. 01. 2011, 21:22:41
Ale teď zpátky k tématu. Podle mě je stejně důležité, jako se naučit programovat, naučit se neprogramovat. Základem by mělo být vždycky vyřešení konkrétní úlohy a to může být nejrychlejší v tabulkovém procesoru, v databázi typu Access, v nějakém programu pro statistiku atd. Tedy zvládnout doménu, ve které se úloha nachází, porozumět zadání a korektně vyřešit úlohu v nejkratším možném čase. Pochopit význam Parettova pravidla a nesnažit se v řešení jít dál, než je nutné. Troufám si tvrdit, že není špatné začít zrovna tady.

Další úrovní je pak logicky naučit se jazyk, který má dostatečně velkou abstrakci a velkou zásobu standardních knihoven. Navrhoval jsem Python, ale existují i jiné alternativy (třeba Ruby). V takovém jazyce je možné snadno vyřešit spoustu úkolů bez velké námahy a bez vynalézání kola.

Pokračoval bych algoritmizací - naučit se základní algoritmy (řazení, binární vyhledávání, procházení do šířky a do hloubky) a porozumět datovým strukturám typu strom nebo hash. Naučit se základy OOP a pochopit jeho výhody i nevýhody. Zde je možné pokračovat v Pythonu (Ruby...) nebo zkusit třeba Scalu, Javu, C#. Statické jazyky vedou k lepšímu pochopení úlohy typů, parametrizace, variance apod.

Další krok je naučit se teorii složitosti (Amdahlův zákon), základy vícevláknového / víceprocesového programování (synchronizace, komunikace apod.) a zjistit, že existují úlohy, které jsou paralelizovatelné a úlohy, u nichž dominuje sekvenční složka.

Naučit se SQL, vztahy mezi tabulkami, normální formy, pochopit význam indexů, případně si něco zjistit o relační algebře. Nastudovat si význam a použití uložených procedur.

Teprve pak bych doporučoval nořit se hlouběji do operačního systému, naučit se C a případně C++, pochopit, jakým způsobem se alokuje paměť, naučit se pointerovou aritmetiku atd.

Co zbývá? Exkurze do jiných paradigmat (funkcionální a logické programování), ASM, textové algoritmy, základy konstrukce kompilátorů atd. atp.

Samozřejmě lze jít i jinou cestou - začít si programovat milion šestý grafický nebo textový editor v C, udělat si framework, který už existuje (a pravděpodobně je daleko lepší, než ten, který si člověk bez dostatečných zkušeností a s omezeným časem udělá sám a i tato cesta člověka mnohé naučí. Osobně doporučuju jít obecně "odshora dolů" a ne naopak. Ale to je na každém.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: blizz 22. 01. 2011, 01:00:53
Polymorfismus je možnost používat stejný interface u objektů různých typů a nikoliv schopnost konkrétního objektu (instance) "měnit svůj tvar".

Citujem:

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

zdroj: http://neuron.tuke.sk/~zvada/statnice/I/07/index.html#polymorfizmus

Citace
Polymorfizmus (viacznačnosť) je schopnosť objektu nadobúdať viacero foriem. Najčastejšie použitie polymorfizmu je vtedy, keď v referencii na triedu rodiča používame odkaz na objekty triedy potomka.

zdroj: http://kiwiki.fmtnuni.sk/mediawiki/index.php/Java_-_polymorfizmus

Citace
Polymorfismus (lze česky označit jako mnohotvárnost) je způsob přístupu k instancím a je to nejvyšší stupeň OOP.
Odborně řečeno: polymorfismus spočívá v praxi například v tom, že na místo, kde je očekávána instance nějaké třídy, můžeme dosadit i instanci libovolné její podtřídy (třídy, která přímo či nepřímo z této třídy dědí), která se může chovat jinak, než by se chovala instance rodičovské třídy (ovšem v rámci mantinelů daných popisem rozhraní).

zdroj: http://programujte.com/?akce=clanek&cl=2007021001-kurz-delphi-ii-5-lekce

Stačí? Najprv si doštudujte základy OOP.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: iwtu 22. 01. 2011, 01:24:25
Ale teď zpátky k tématu. Podle mě je stejně důležité, jako se naučit programovat, naučit se neprogramovat. Základem by mělo být vždycky vyřešení konkrétní úlohy a to může být nejrychlejší v tabulkovém procesoru, v databázi typu Access, v nějakém programu pro statistiku atd. Tedy zvládnout doménu, ve které se úloha nachází, porozumět zadání a korektně vyřešit úlohu v nejkratším možném čase. Pochopit význam Parettova pravidla a nesnažit se v řešení jít dál, než je nutné. Troufám si tvrdit, že není špatné začít zrovna tady.

...

Krásny príspevok. Neradím počuvať niekoho, kto navrhuje jednoznačné, ba dokonca najlepšie riešenie.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: iwtu 22. 01. 2011, 01:34:05
Citujem:

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

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

Ono všetky tie definicie sú pravdepobne ekvivatelné a problém je s pochopením slova mnohotvátvosť. Najviac sa mi páči definícia s inklúziou, i keď by ma neprekvapilo, keby pre veľa ľudí bola nezromiteľná. Prosím, prv nez začnete machrovať 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 najčistejši polymorfizmus mi prídu interfacy.

ale mýslim, že je to úplne offtopic.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: andy 22. 01. 2011, 02:19:48
alefo problem nie je v rychlosti gui, ale pusti si azureus a potom utorrent a pochopis.

Inak autor tohoto vlakna sa musi dobre zabavat..
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: alefo 22. 01. 2011, 07:46:50
Citace
alefo problem nie je v rychlosti gui, ale pusti si azureus a potom utorrent a pochopis.
Vieš to rozviesť? (Okrem toho, že uTorrent má 300kB a Vuze 8MB).
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: andy 22. 01. 2011, 15:49:28
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.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: blizz 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
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: alefo 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 :-)
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Inkvizitor 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 (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 (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).
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Inkvizitor 23. 01. 2011, 12:17:49
Mimochodem, omlouvám se za neustálé komolení přezdívky; to skutečně nebyl záměr.
Název: Re: porovnání C a Javy pro začátečníka
Přispěvatel: Ivo Peterka 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/
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: blizz 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.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Ondra Satai Nekola 23. 01. 2011, 20:20:37
@Blizzboot: Polymorfismus nemusi mit nic spolecneho s dedicnosti.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: blizz 23. 01. 2011, 21:49:15
@Blizzboot: Polymorfismus nemusi mit nic spolecneho s dedicnosti.

to som ani nikde netvrdil.
Název: Re: Porovnání C a Javy pro začátečníka
Přispěvatel: Inkvizitor 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.