C vs Java

46 отговора 1985 прегледа
#1

C vs Java

Начинаещ програмист съм и се интересувам какви са предимствата и недостатъците на Java спрямо C.

Също така някой би ли ме светнал за идеята на object oriented програмиране?

Отговор
в отговор на radobg #2

Re: C vs Java

Neznam mnogo Java - samo malki neshta moga da pisha,

C:

Predimstwa: Kompilatori ima za wsjaka platforma ili operacionna sistema. Naj-razpostranenia ezik za programirane. Sushtestwuwat kupishta biblioteki, materiali, knigi, uchebnitzi za ezika C. Standartiziran e. Ima preprocesor za C sus golemi wuzmozhnosti - no nared s tova vurwjat i problemi... wizh nedosttatuzi. C ima prost i jasen ABI (Application Binary Interface) - programi ili moduli pisani na C lesno mogat da se izwikat ot drugi ezitzi ili scriptopodobni takiva. Naprimer TCL, Perl, Java, Python sa chesti "izpolzwachi" na C napisan kod.

Nedostatutzi: Preprocesor - wupreki che tova e goljamo predimstwo, preprocesora sus wuzmozhnostta si da wkljuchwa (#include) drugi failove stava goljama prechka pri golemi proekti i sledene na modifikaciite (koj fail da se prekompilira - i koj ne). Tova vazhi za wsichki podobni ezitzi (C++ naprimer). W srawnie Borland Pascal generira .TPU failove ili .DCU w koito w dvoichen wid e zapisano, ot kakuv drug modul ili sors dadenia fail zawisi - i dali ima nuzhda ot prekompilatzia.

C++:

Predimstwa: Obektno orientirano programirane, shabloni (templates), modifikatori za tipa. STL - lesno i shablonno izpolzwane na chesto izpolzwani algorithmi (mapove, setove, hashove, list, arrays i prochie).

Nedostatutzi: sushtite kato predimstwata. Obektno orientiranoto programirane kutza sus wuzmozhnostta si da nasledjawash s multiple-inheritance, shablonite puk sus nerazbiraemostta na koda, a modifikatorite sus izcherpwaneto na wariantite (const func, ne-const func) za razlichni tipove funkcii. STL wupreki che e dobra na pruw pogled biblioteka e neudobna kogato se stigne do trasirane (debugwane) na programata, suvmestimost (ima 4-5 versii na STL) i lesna razbiraemost (koj metod, funckia trjabwa da se wika postojanno, koj ne) - osven tova chesto razlichnite versii na STL-a imat i razlichna slozhnost na njakoi ot algoritmite si. Naj-goljam nedostatuk na C++ e nejasnotata pri initializiraneto na modulite, i sushto ABI interfejsa (kak ot drug ezik, sreda da se izwika C++ funckia).

tirulirutatuutuu
Отговор
в отговор на radobg #3

Re: C vs Java

Java има малко общо със C, повече общо със C++.

Най-съществената разлика между Java и C/C++ е липсата на пойнтери, т.е. в Java не можеш да вземеш адреса на променлива. Това е едно от местата, където възникват най-много грешки при програмиране - излизане извън рамките на масив, използване на памет, която още не е алокирана, или вече е освободена. Идеята на Java е, че ако това не може да стане, програмите ще се пишат по-бързо, понеже по-малко време ще се налага да се отделя за debugging. За това обаче се заплаща с по-бавно време за изпълнение.

Друга разлика е наличието в Java на Garbage Collector(GC) - помагало за тези, които не знаят да броят. GC също спомага за по-бавното изпълнение, понеже при всяко включване обхожда всичката памет на програмата и избива кеша на процесора.

Трето, Java няма templates, които присъстват в C++ и които са може би най-голямото предимство на C++ пред C.

Четвърто, Java обикновено се компилира до т.нар. bytecode, който е машинно независим, вместо до обектен (машинен) код, макар че има и компилатори, които създават native код.

Пето, както malkia вече спомена, C и C++ са стандартизирани от не само от ANSI, но и от ISO, докато Sun се отказаха от първоначалната си идея да дадат Java за стандартизиране от ECMA. Това допълнително ги поставя в неизгодна позиция.

Отговор
в отговор на malkia #4

Re: C vs Java

> preprocesora sus wuzmozhnostta si da wkljuchwa (#include) drugi failove stava goljama prechka pri golemi proekti i sledene na modifikaciite (koj fail da se prekompilira - i koj ne).
Da, bavno e, no vse pak stava. A na Java hich ne moje.

Отговор
в отговор на Potencialen emigrant #5

Re: C vs Java

tova naprimer e spunka za nashia proekt - pulna rekompilatzia na proekta ni e 45 minuti....

smjana na local_user.h (kojto se includwa ot wsjakude) samo za drebni neshta i gledaj kvo stava....

no ot druga strana - ima problemi koito bez preprocesora se reshawat mnogo tromavo...

Naprimer ASSERT(), CHECK(), PRINT() i raznite tam podobni helperski macrosi - wuw Release w nikakuw sluchai ne trjabwa i da ima pomen ot tjah - purwo che mozhe da ne uspee prilozhenieto ti da mine dadeni Technical Requirments, wtoro che shte wurshi izlizshna rabota, koda shte e po-goljam i posledno - dosta po-baven.

Sushto e dobre che mozhe specialno per user da si ima specifichen koda (naprimer #ifdef USER_MALKIA... blah blah.... #endif)....

Wsichko tova e prekrasno, a za ostanalite kenefa e vdjasno... kakto peeshe edin rapar... obache....

Tova zabavja kompilatziata strashno mnogo - che dazhe dosadno...

hmmm.... i osven wsichko tova e nekaksi trudno i nevinagi tochno kogato stava duma za "buildwane na dependancitata" (mallee kak zwuchi - ako ma chue Petur Berona - takava drasnipaliklechica she me upari zad ushite)...

tirulirutatuutuu
Отговор
в отговор на malkia #6

Re: C vs Java

V Java nyama kak da se build-nat dependency-tata. Na po-golyam proekt (razbiray - poveche ot 1 chovek i sled merge na promenite ot kolegite) si e meko kazano nevyzmojno da precenish dali shte minesh samo s rebuild na promenenite faylove. I zatova - yako pylen rebuild, inache riskuvash razni psevdobugcheta da ti izkochat, i da se chudish otde sa, a to ot izostanali class faylove, problemi s run-time svyrzvaneto i etc.
Predpochitam ideologiyata na C s headerite - tam pone moje da se preceni tochno kakvo tryabva da se rebuild-ne, i da si spokoyn - shtesh/ne shtesh - tfa e :-))) I build-time svyrzvaneto e edna dopylnitelna proverka. A Java - shtesh/ne shtesh - pylen rebuild.

Отговор
в отговор на Potencialen emigrant #7

Re: C vs Java

hmm.. ne go znaeh tova - az predpolagah che problema tam e reshen. Taka li e sus C#-a? sushto - az samo ot integriranata sreda sum kompiliral i malki sorscheta pod linux - no bez da stupwam po-nadulboko....

tirulirutatuutuu
Отговор
в отговор на malkia #8

Re: C vs Java

какво точно се счита обектно програмиране? готови класове и templates?

в такъв случай не е ли възможно да се прилагат подобни неща и в C като се дефинират библиотеки?

Редактирано от radobg на

Отговор
в отговор на radobg #9

Re: C vs Java

Klasovete sa obektno orientirano programirane. Teplates kato takiva niamat nishto obshto s obektite, mojesh da imash template i na funkcia. To templates sa konceptualno po-blizki do preprocesor.

НЕ МЕ ЕБЕ КАК Е ВУТЕ, АЗ ГЛЕДАМ ДА СЪМ ДОБРЕ
Отговор
в отговор на malkia #10

Re: C vs Java

Ami nali v CLR uj ima palna informacia za dependency na klasovete - tia ne e li dostatachna da se opredeli koe da se rebuildne?

НЕ МЕ ЕБЕ КАК Е ВУТЕ, АЗ ГЛЕДАМ ДА СЪМ ДОБРЕ
Отговор
в отговор на Perin #11

Re: C vs Java

imenno - no nali sushtata ja ima i w javata - kogato zadawash "import"... ta za tova se chudih... w C# using

tirulirutatuutuu
Отговор
в отговор на radobg #12

Re: C vs Java

OOP se swezhda do tam - che potrebitelja ne znae za wutreshnata implementatzia na daden obekt, no znae aparat za suzdawaneto, upravlenieto i unishtozhawaneto mu (new, function members, delete). Po tozi nachin wmesto da wikash funckii i da im podawash obekt - ti prosto izpolzwash obekt, kato wikash negovi funckii...

No tova ne e wsichko, ponjakoga ti se nalaga da wikash edni i sushti funckii, no na razlichni obekti - OOP ti dawa wuzmozhnost tova da go realizirash elegantno bez da pishesh mnogo kod. Naprimer - po wreme na voina - predstawi si che komandwashtia dava "PULEN NAPRED" kato komanda - kum wsichki obekti (tankove, pehotinci, motoristi, sekwi tam). Wseki ot tjah ima "funckia" PULEN_NAPRED - no e s razlichna wutreshna realizatzia - wazhnoto e che ima edin obsht metod razbiraem za wsichki obekti.

C++ ti dawa wuzmozhnost sushto da postrojawash hierarchia i nasledjawane na klasovete ot koito sa obektite ti. Naprimer PEHOTINETZ, RPG9, SWURZOCHNIK, KARTECHAR wsichki mogat da se nasledjat ot edin klas - t.e. kogato sa bili w armiata - te wsichkite sa hodili na edni i sushti zanimania kak da hodjat NAPRED - dokato TANKISTITE, BRONETRANSPORTJORITE sa gi uchili kak da hodjat NAPRED upravljavajki mashinata... T.e. purwite mozhe da gi prichislish kum obsht klas "PEHOTNI", wtorite "MOBILNI" - i funckiata realizirashtat ti PULEN_NAPRED e nuzhno da ja realizirash samo za klasa PEHOTNI, ne za wseki PEHOTINETZ, RPG9, SWURZOCHNIK, KARTECHAR... Po-kusno poslednite chetiri prosto shte nasledjat PEHOTNI, i eventualno shte realizirat drugi specifichni funckii.

Ima dosta po-dobri primeri w knigite.... tam sus cvetja, zhivotni, zool gradini, shapki...
Cheti cheti :) :)

tirulirutatuutuu
Отговор
в отговор на radobg #13

Re: C vs Java

> какво точно се счита обектно програмиране? готови класове и templates?

Не ми се повтарят дефинициите от книгите, нито мога да дам по-добри.

> в такъв случай не е ли възможно да се прилагат подобни неща и в C като се дефинират библиотеки?

Напълно е възможно (и често се прави) да програмираш обектно-ориентирано, без това да е предвидено в езика. Gtk+ библиотеката (написана на C) е един добър пример. ОО езиците просто улесняват (а в случая с Java и принуждават) ООП, понеже имат вградени средства за това. В C не можеш истински да скриеш променливите от дадена структура - от програмиста, който ги ползва зависи да спазва самодисциплина и да използва интерфейсните функции, които си предоставил, вместо директно да манипулира данните.

Отговор
в отговор на hoopla #14

Re: C vs Java

Osven tova za da programirash obektno na neobekten ezik triabva da si presazdadesh strukturata na virtualnite tablici (izpolzvani za virtualnite funkcii), da mislish za takiva neshta kato mnojestveno naslediavane i t.n. ... i da si gi pishesh sam. To che mogat da se pootdeliat v biblioteka mogat, ama tvoia kod pak shte e po-goliam. Mojesh da si igraesh s makrosi da napodobiavash neshtata ... no mai niama smisal.

НЕ МЕ ЕБЕ КАК Е ВУТЕ, АЗ ГЛЕДАМ ДА СЪМ ДОБРЕ
Отговор
в отговор на malkia #15

Re: C vs Java

Toz import gleda class faylovete, a ne source-a. Tam e problemyt. Da rechem, build-nal si proekta. Kolegata ti e mahnal veche nyakakyv klas (kato source). Ti obache go izpolzvash nyakyde v tvoyte source-ove. Update-vash (ot CVS, sys VSS malko tochno ne stava taka :-). Build-vash (no ne re-) i vsichko e... OK, shtoto class faylyt za tozi klas si ti stoi ot predishen build. Dokato ne commit-nesh, i kolegata ti posle ne update-ne. Tova e nay-malkiya primer.
Dependency-tata tryabva da se opredelyat vyz osnova na source-a, no v Java tova e ekvivalentno na pylen rebuild.

Отговор
в отговор на radobg #16

Re: C vs Java

Щом си начинаещ по-добре почни с ПАСКАЛ. Създаден е точно за тази цел, а откакто излезе Delphi се доближава по полезност до С/С++.

Между другото С/С++ са на по-ниско ниво от JAVA, тоест ако не ти е ясно какво става при изпълнението на програмата, по-лесно ще програмираш на JAVA.

Е това си е мое мнение.....

Аз съм!
Отговор
в отговор на radobg #17

Re: C vs Java

Не програмирам на C/C++ и затова едва ли моето мнение ще ти помогне много, ноимам много познати, които досега са се занимавали основно със C и вече работят доста и с Java. Java е подходяща програмиране от страна на сървъра, а както някой беше казал във форумите - C/C++ - waste of time for web development. Иначе излезе на хоризонта се появява нещо ново - .Net платформата на Microsoft. За нея можеш да програмираш и на C#. Колкото за desktop програмиране, по-добре ще е да те упъти някой друг в този форум, който се занимава с това, но определено за начинаещ е по-добре да започнеш с Java, отколкото със C++. И Паскал е добра идея, но само доколкото да навлезеш в материята.
Успех.

Отговор
в отговор на radobg #18

Re: C vs Java

Opredeleno Java e mnogo po dobre ot kolkoto C - az naprimer tyrsia veche tri dni che i poveche i niama edin server ili pone edin client rabotesht pod windows - i da e prost che da razbera kak se pishe takova neshto - i kato gledam mnogo ot programistite ne znaiat kak se pravi taqkova neshto - a to stava sys WinSock biblioteka ama tova koeto namerih e za Linux i za windows ne uspiah da go podkaram vypreki che avtora beshe obiasnil koe kakvo - prosto C i C++ si umriaha ne stavat za rabota novoto vreme iziskva zhertvi.

Отговор
в отговор на Fasttrack #19

Re: C vs Java

> prosto C i C++ si umriaha ne stavat za rabota novoto vreme iziskva zhertvi.

Да бе, те на Microsoft сървърите все на Java са писани. Ти пък намери един пример...

Отговор
в отговор на Fasttrack #20

Re: C vs Java

Baba ti iska jertvi :-)))

I moeto pyrvo zapoznanstvo s BSD sockets beshe pod Windows, i az polzvah primer za UNIX. Ama za 1-2 chasa si podkarah daje elementarno FTP klientche. Na drugiya den absolyutno syshtiya source se kompilirashe (che i vyrveshe :-) i pod Linux s gcc - 1-2 #ifdef-a samo.

Kaji mi druga prichina da se prisyedniya kym t.nar. "novo vreme" (tozi izraz mi namirisva na izkufyal starec :-), s tova ne me ubedi :-)

Отговор