2. Osnovna svojstva Jave

Java je jednostavan, objektno-orijentiran, distribuiran, interpretivan, robustan, siguran, prenosiv, visokoučinkovit, višenitan i dinamički programski jezik.

Jednostavnost jezika očituje se u tome da ga programeri mogu brzo naučiti, jer je broj stvari koje treba upamtiti vrlo malen. Autorima Jave bio je cilj učiniti je što sličnijom programskim jezicima koje većina programera već dobro poznaje.

Objektna-orijentiranost znači da se kao programer možemo usredotočiti na podatke (objekte) i metode (klase – skup metoda) pomoću kojih ćemo obaviti neki posao, a da ne moramo uvijek samo voditi brigu o tome kako ćemo napisati pojedine dijelove programa.

Distribuiranost – Java ima ugrađene sve osnovne funkcije za rukovanje mrežnim protokolima. Uz nju dobivamo biblioteke klasa koje komuniciraju s protokolima TCP/IP, FTP i HTTP. Zahvaljujući ovoj ugrađenoj mrežnoj podršci, programi pisani u Javi mogu bez problema pristupati podacima koji su pohranjeni širom Interneta na različitim tipovima poslužitelja. Budući da je zamišljena tako da podrži postojeće mrežne resurse za Javu kažemo da je distribuirana.

Prenosivost i interpretiranje – Za razliku od kompiliranih jezika, kod kojih se iz izvornog koda odmah stvara izvršiva verzija programa namijenjena određenoj računalnoj platformi, prevođenje i izvršavanje Java aplikacija podijeljeno je u dvije faze. U prvoj Java kompilator iz izvornog koda programa stvara bajt-kod. Bajt-kod bismo mogli nazvati “izvršnom” verzijom programa, iako se ne izvršava pod nadzorom operativnog sustava nekog računala niti je posebno kompilirana za njega. Umjesto toga, bajt-kod je međukod koji se pokreće pod nadzorom Javinog izvršnog sustava. Taj izvršni sustav interpretira bajt-kod i prevodi njegove naredbe u naredbe specificirane za računalo na kojem se izvršava aplikacija. Upravo zbog toga što se prevođenje programa iz bajt-koda u jezik platforme (strojni jezik) obavlja tijekom izvršavanja programa, Java se smatra interpretiranim jezikom.

Da bi se Java prenijela na neku novu platformu, potrebno je samo napisati izvršni sustav za nju. Izvršni sustav susrest ćemo pod imenom Java Virtual Machine (prividni stroj za Javu). Taj prividni stroj nije ništa drugo do okolina unutar koje se izvršavaju Java aplikacije. Možemo ga zamisliti kao “računalo u računalu” koje pokreće samo Java programe. Izvršni sustav može, ako je ispravno prenesen na novu platformu, izvršavati sve Java aplikacije, bez obzira na to tko ih je i na kojem računalu napisao. Izvršni sustav ugrađuje se u pretraživačke programe kako bi mogli pokretati programe pisane u Javi, a čak i neki operativni sustavi imaju ugrađen izvršni sustav i mogu pokrenuti Java aplikaciju poput bilo koje druge aplikacije pisane i kompilirane za taj sustav. Java aplikacija ne mora se pritom niti najmanje mijenjati ili prilagođavati; ona se mrežom distribuira u svom bajt-kod obliku, a izvršni sustav je tijekom izvršavanja prevodi u specifične naredbe koje razumije računalo za koje je izvršni sustav napisan.

Robusnost – Budući da je bila namijenjena pisanju aplikacija koje će se izvršavati u uređajima što se ubrajaju u potrošačku elektroniku, Java je zamišljena tako da bude vrlo sigurna i pouzdana. To, naravno, ne znači da se ne može napisati program bez pogrešaka. Budući da precizno određuje veličine pojedinih tipova podataka i da zahtijeva precizno deklariranje metoda, Java omogućava kompilatoru da pronalazi programske pogreške. Javin memorijski sustav sam vodi brigu o oslobađanju i zauzimanju memorije, a zbog nepostojanja pokazivača nemoguće je da programer sam piše po nedozvoljenoj memorijskoj lokaciji i tako uništi neke podatke. Spomenuti sustav automatskog prikupljanja memorijskog smeća otklanja pojavljivanje memorijskih rupa.

Sigurnost – Kada se govori o Javi i sigurnosti izvršavanja Java programa nameću se sljedeća pitanja: Je li moguće u Javi napisati virus? Može li program pisan u Javi učiniti štetu na računalu na kojem se izvršava? Je li moguće u program unositi izmjene nakon što je kompiliran u bajt-kod? Odgovor je: Java je vrlo sigurna! Interpreter provjerava ispravnost bajt-koda tijekom izvršavanja. Iako je kompilator napravio ispravan bajt-kod, interpreter ga još jednom provjerava kako bi zaista bio siguran da nitko s njime ništa nije radio ili ga mijenjao između kompiliranja i izvršavanja. Interpreter sprječava izvršavanje sumnjivog koda i koda koji bi sadržavao nedozvoljene radnje, poput pokušaja direktnog pristupa memoriji, nevažećih klasa, pogrešnih parametara koji se nalaze uz naredbe bajt-koda, pokušaja kršenja prava pristupa datotekama na disku ili nepravilnih pretvaranja među tipovima podataka.

Nakon što se uvjerio u ispravnost bajt-koda, interpreter određuje memorijski raspored klasa, osnovnih elemenata od kojih se gradi Java aplikacija. To je druga razina zaštite Java programa. Netko, tko bi želio izmjeniti kompilirani program u bajt-kodu, to ne može učiniti jer ne zna kako će klase biti raspoređene u memoriji.

Odličan učinak – Svaki programski jezik koji se zasniva na interpretiranju pati od sporosti, jer proces interpretiranja zahtijeva dosta procesorskog vremena za prevođenje samih naredbi, pa se time gubi na brzini izvršavanja. Unatoč sporosti, za većinu radnji koje obavljamo pomoću Jave – kao što su stvaranje korisničkih sučelja ili mrežne komunikacije – nije potrebna velika procesorska snaga. Aplikacija većinu svojeg vremena provodi besposlena, čekajući sljedeću naredbu korisnika ili pristizanje novih podataka s mreže.

Višenitnost – Java je trenutno jedini programski jezik koji podržava višenitno izvršavanje programa. Višenitnost omogućava programeru da unutar svog programa pokrene više niti izvršavanja i time ubrza rad programa. Primjerice, jedna nit može u pozadini obavljati složena preračunavanja, dok druga već prikuplja nove podatke od korisnika. Višenitno izvršavanje programa donosi i veću učinkovitost procesora, jer jedna nit može koristiti njegove resurse u trenucima dok je druga nit besposlena.

Dinamičnost – Java je dinamički jezik, kojem se bez problema mogu dodavati novi objekti. Tako se i svi programi pisani u Javi ponašaju potpuno dinamički. To u praksi mnogo znači i donosi najviše prednosto kod pretraživačkih programa. Ako program pisan u Javi ili pretraživački program pokuša pristupiti nekom novom tipu podatka za koji ne zna kako ga obraditi, program može zamoliti poslužitelja da mu pošalje klasu koja rukuje tim tipom podataka. Program u Javi sam će se dinamički nadograditi dobivenom klasom i obaviti željeni posao.

Sadržaj