JavaSvet - otvorena java zajednica

 
glavna stranica arr2javasvet  english version arr2java.net

Java Tigar

Velja Radenković & Nemanja Kostić
20 Avg 2004
Ovaj članak su napisali Velja Radenković i Nemanja Kostić za časopic "COM". Posebno se zahvaljujemo Velji Radenkoviću, na čiju je inicijativu ostvarena saradnja i uz čiji trud je cela akcija sprovedena do kraja. Članak je objavljen u časopisu "COM" broj 148, od 27. jula 2004 na 6. strani.

Java tehnologija

Java je moderan objektno orijentisan programski jezik koji se danas može pronaći bukvalno na svakom koraku. Kada surfujete Internetom, sadržaj koji pregledate je u najvećem broju slučajeva generisan upravo Javom. Dok igrate igrice na mobilnom telefonu, igrate na aplikaciji koja je pisana u Javi. Ukoliko vršite transfer novca preko Interneta, "smart kartica" koju koristite za identifikaciju je takođe iz arsenala ove tehnologije. Čak i robot pod nazivom "Mars Spirit Robot" koji se nadavno spustio na planetu Mars je u potpunosti bio kontrolisan sa Zemlje upravo korišćenjem Jave.

Java prati razvoj mrežnog programiranja i čini osnovu za mrežne servise, desktop i mobilne aplikacije i odgovara na najšire zahteve razvoja distribuiranih sistema.

Java tehnologija se prvi put pojavila 1995. godine, kada je kompanija Sun Microsystems pokušala da svetu predstavi koncept "napiši jednom, startuj bilo gde" koji je kasnije i postao glavni slogan Java programskog jezika. Mogućnosti koje je Java tada ponudila svojom nezavisnošću od platforme na kojoj se izvršava su ubrzo prerasle sva očekivanja.

Sun Microsystems, koji je 1982. godine zapošljavao samo 4 radnika je danas postao globalni gigant sa kancelarijama u preko 170 zemalja, sa vrednostima akcija preko 40 milijardi dolara i sa ogromnom bazom Java programera za koje se procenjuje da ih ima preko 5 miliona.

Java tehnologiju danas podržavaju sve vodeće IT kompanije kao sto su IBM, ORACLE, BEA, Macromedia, Nokia, Ericsson, SAP, Sony, itd.

Java Tigar

Drugog januara ove godine kompanija Sun Microsystems javnosti je predstavila novu alfa verziju svoje Java platforme u standardnoj ediciji - J2SE 1.5 (radnog naziva Tigar).

Ubrzo posle toga izašla je i prva beta verzija, a u julu je Tigar dobio novi broj 5.0 (još uvek je u beta verziji). Po rečima ljudi iz Sun-a, na ovakav korak su se odlučili zbog najvećeg poboljsanja platforme i samog jezika u poslednjih deset godina tj. od prve zvanične verzije. Nama preostaje da pogledamo sta je to novo uz osvrt na poslednju zvaničnu verziju - 1.4.

Neka od obećanja koje nam dolaze od strane Sun-a, a vezano za novu verziju Jave, jesu usmerena ka povećanju pouzdanosti, dostupnosti, performantnosti i skalabilnosti Java aplikacija. Takođe, ogroman pomak je napravljen i u pojednostavljenju razvoja samih aplikacija čime se posao programera u mnogome olakšava. Najzad, Tigar verzija Jave je poseban akcenat stavila i na razvoj klijentskih desktop aplikacija za koje se smatralo da zaostaju za konkuretnim proizvodima kompanije Microsoft.

S obzirom da je lista novih mogućnosti povelika i daleko prevazilazi okvire ovog članka, navešćemo samo neke za koje smatramo da su najbitnije.

Anotacije (meta podaci)

Meta podaci obezbeđuju mogućnost asociranja novih podataka pored već postojećih kao što su klase, interfejsi, metode i polja. Ti dodatni podaci se nazivaju anotacije ili meta podaci, i oni mogu biti pročitani od strane Java kompajlera ili drugih alata za rad sa Java bajtkodom. Takođe, anotacije se mogu smestiti u sam kompajlirani .class fajl i naknadno biti pročitani u toku procesa izvršavanja, korišćenjem Java Reflection API funkcija. Anotacije se u kodu prepoznaju po znaku @.

Na ovaj način se smanjuje vreme razvoja Java aplikacija jer se mnogi ponavljajući delovi koda izbacuju, a i integracija u druge alate (poput aplikativnih servera) se znatno olakšava.

Primer kako se anotacijama izbacuje kod koji se često ponavlja:

Nekad:
public interface PingIF extends Remote {
   
public void ping() throws RemoteException;
}

public class Ping implements PingIF {
   
public void ping() {
       
// ...
   
}
}
Sad:
public class Ping {
   
public @remote void ping() {
       
// ...
   
}
}

Autoboxing/Unboxing

Razlika između primitivnih tipova i njihovih wrapper objekata više ne postoji. Programeri mogu slobodno da zaborave na primitivne tipove poput int, float, double i ostalih jer sa uvođenjem Autoboxing-a automatska konverzija stupa na scenu.

Razmotrimo deo koda koji sledi:

ArrayList brojevi = new ArrayList();
brojevi.add
(115);

Do verzije 5 ovakav kod se ne bi iskompajlirao jer metoda add ArrayList-e očekuje Object za parametar. Ovo je podrazumevalo pisanje dodatnog koda kako bi se prebrodila razlika između primitivnih tipova i njihovih wrapper objekata, poput sledećeg:

brojevi.add(new Integer(115));

Novi kompajler automatski dodaje kod koji konvertuje integralnu vrednost 115 u odgovarajući tip Integer, a to znači da je prvi primer sa stanovišta Jave 5 u potpunosti ispravan. Proces je poznat pod imenom Autoboxing.

Obrnut proces, automatsko konvertovanje objekta kao što je Integer u primitivnu vrednost int, naziva se Unboxing.

int broj = brojevi.get(0);

Nekada smo morali da koristimo odgovarajuću funkciju Integer objekta da bi dobili njegovu vrednost.

int broj = (brojevi.get(0)).intValue();

Generics

Uvođenjem generičkih tipova, manipulacija kolekcijama objekata je postala jednostavnija i sigurnija jer sad više ne stavljamo generalne Object-e u kolekcije već konkretne tipove objekata. Na ovaj način se izbegava konvertovanje, tj. ukoliko stavimo String u niz tada samo String iz tog niza možemo dobiti nazad. Ranije je sve pretvarano u Object tip pa se prilikom vađenja podataka iz niza, svaki konvertovao u njemu odgovarajući tip. Tada su se često javljale runtime greške - unesemo String, a greškom ga potom konvertujemo u Integer. Sada to više nije moguće, jer se takve greške uočavaju još prilikom kompajliranja programa.

Nekad:
LinkedList stringList = new LinkedList(); // ubacujemo Object tipove
stringList.add("Casopis");
stringList.add
("COM");
Sad:
// ubacujemo ono sto zelimo - String tipove
LinkedList<String> stringList = new LinkedList<String>();
stringList.add
("Casopis");
stringList.add
("COM");

Unapređene for petlje

Pojednostavljena je sintaksa samih for petlji.

Nekad:
int array[] = {1, 2, 3, 4};
int sum = 0;
for (int e = 0; e < array.length(); e++)
   
sum += array[e];
Sad:
int array[] = {1, 2, 3, 4};
int sum = 0;
for (int e : array)
   
sum += e;

Formatirani ispis

Uvedena je mogućnost formatiranja ispisa sadržaja na standardni izlaz (recimo ekran) korišćenjem printf funkcije - kao u C programskom jeziku.
Nekad:

String user = "Pera";
int total = 30;
System.out.printf
(user + " ima " + total + " godina\n");
Sad:
String user = "Pera";
int total = 30;
System.out.printf
("%s ima %d godina\n", user, total);

Importovanje statičkih funkcija

Ova novina u mnogome doprinosi čistijem izgledu samog koda, a samim tim i njegovoj većoj preglednosti.

Nekad:
double x = 16.0, a = 2.2, b = 3.3;
System.out.println
(Math.abs(x));
System.out.println
(Math.sqrt(x));
System.out.println
(Math.max(a, b));
Sad:
import static java.lang.Math.*;
...
double x = 16.0, a = 2.2, b = 3.3;
System.out.println
(abs(x));
System.out.println
(sqrt(x));
System.out.println
(max(a, b));

Swing

Poboljšanja su primetna i u delu platforme namenjenom izradi klijentskih aplikacija što se uglavnom odnosi na Swing.

Predstavljena su dva nova izgleda: Synth (skinnable look & feel) i Ocean (nova tema Metal Look & Feel-a).

U prethodnim verzijama Jave pravljenje novog izgleda zahtevalo je izvesnu programersku veštinu i poznavanje ekstenzibilne Look & Feel arhitekture. Synth u velikoj meri pojednostavljuje ovaj posao i čini ga dostupnim čak i neprogarmerima.

Jedno od prijatnih iznenadjenja je ugrađena podrška za štampanje u već odličnu JTable komponentu što bitno pojednostavljuje posao programera.

Sa stanovišta korišćenja radne memorije sve Swing komponente su optimizovane uvođenjem novih metoda koje omogućavaju eliminisanje dupliranog skladištenja minimalne, maksimalne i predefinisane veličine.

Rad na AWT-u iako primetan ostao je u okvirima otklanjanja nepravilnosti i propusta iz prethodnih verzija.

Virtuelna mašina

Doradom paralelnog skupljača đubreta (Garbage Collector-a) omogućeno je suptilnije rukovanje memorijom i eliminisana potreba za prosleđivanjem velikog broja komandnih argumenata pri definisanju željenih performansi aplikacije. To znači da će se JVM pobrinuti da uskladi količinu alocirane dinamičke memorije sa predefinisanim tj. željenim performansama.

Prvi put na raspolaganju imamo merač vremena visoke precizosti. Prvenstveno je namenjen merenju brzine izvršavanja delova Java programa. Osnovna jedinica ovog merača je nanosekunda. Bitno je napomenuti da osnovni interval ne treba mešati sa preciznošću ovog merača koja je zavisna od platforme i za Windows je oko jedne milisekunde.

Na kraju

Lista izmena je daleko duža od ovih nekoliko nabrojanih stavki. Svakako zanimljive novine predstavljaju i promene u enumeracijama, unapređena mogućnost dijagnostike, mogućnost monitoringa, varijabilni argumenti i još mnogo toga.

Programski jezik Java ulazi u novu eru svog postojanja i krupnim koracima se kreće napred. Točak inovacija koji Java pokreće više ne može da se zaustavi. Jednom rečju, ovo je sjajno vreme za biti Java programer.