Najpre da se ogradim: ja volim Javu i ovo nije nikakvo flejmovanje. Samo da ukažem na nekoliko netačnih sitnica koje se provlače i po mnogim Java knjigama, a vidim ih i ovde.
Citat:
Aleksandar Vidakovic:
C++ je problematičan kod višestrukog nasleđivanja, dok se u Javi to radi preko interfejsa, ako se u međuvremenu nije i to promenilo?!
Višestruko nasleđivanje je problematično ako ne znaš tačno šta radiš, ali samo po sebi je jako moćan koncept i uopšte ne stoji da je bolje zabraniti ga (osim preko interfejsa). Za primer dobro iskorišćenog višestrukog nasleđivanja pogledati npr ATL.
Citat:
Aleksandar Vidakovic:
Zatim nema brige oko dinamičke alokacije i dealokacije memorije. Kada zatreba JVM alocira, kada ne treba više tada Đubretar (GC) dealocira.
Tačno. Samo, mnogi zaboravljaju da je memorija samo jedan od resursa koji može da "curi" ako se ne oslobađa posle upotrebe. Postoje fajlovi, konekcije na bazu, kernel objekti, itd, itd, a kod njih GC ne pomaže ništa. U C++u se za takve objekte naprave wrapper klase, pa se u destruktor stavi oslobađanje resursa. Čim se objekat izbriše (bilo da izađe iz opsega kod automatskih promenljivih ili sa delete kod dinamičke memorije), destruktor automatski "očisti" zauzete resurse. Kod Jave i C#-a to nije moguće odraditi, baš zbog GC-a koji onemogućava determinističko uklanjanje objekata iz memorije.
Citat:
Aleksandar Vidakovic:
Ako se želi brzo i čisto OOP, tada je Java sigurno br.1, a ako se želi postići isto samo malo brže i uz više muke i kucanja, C++-u nema konkurencije, ali ako se želi postići isto to, ali uz samo nekoliko otkucanih redova, tada je Perl zakon! :D
O Perl-u ne znam skoro ništa i njega ću ovde da preskočim. Međutim, priče o mnogo većoj produktivnosti Jave i ostalih GC jezika u odnosu na C i C++, ma koliko bile raširene, jednostavno nigde nisu potvrđene merenjem. Naprotiv, postoje merenja koja se mogu naći ovde:
www.ipd.uka.de/~prechelt/Biblio/jccpprtTR.pdf
ili ovde:
www.linux.sarang.net/ftp/mirro.../pdf/qt-vs-java-whitepaper.pdf
koja pokazuju da Java programeri nisu ništa produktivniji nego programeri u ostalim programskim jezicima. Uopšte uzev, izgleda da izbor programskog jezika mnogo manje utiče na produktivnost nego što se to obično misli.
Java je odličan programski jezik za početnike (kao i C#), jer ih "primorava" da poštuju neke dobre programerske običaje. Posebno mi se dopada kako je rešeno rukovanje izuzecima (exception handling) u Javi. Među profesionalcima, Java je jako raširena pre svega tamo gde je potrebno prenositi programe sa jedne platforme na drugu: server-side programi pod Unix platformama i "mali uređaji" (embeded devices).
orez i dobio je 100 000 dinara.