Java programski jezik – Šta je i za šta se koristi?

java-programski-jezik

Java programski jezik

Java programski jezik je objektno orijentisani programski jezik za opštu upotrebu, koji je razvila kompanija Sun Microsystems  polovinom 90-ih godina prošlog veka.

Ono što je Java jeziku donelo veliku popularnost, bila je mogućnost izvršavanja na različitim platformama. Ovo je bilo moguće, jer se Java ne izvršava direktno nad operativnim sistemom, već posredstvom Java virtuelne mašine (JVM).


Ovim, za to vreme jedinstvenim pristupom, Java je osigurala svoje mesto na tronu kompajliranih programskih jezika široke upotrebe. Od tada se koristi u mnogim poslovnim sistemima, softverima banaka, brokerskih kuća i svugde gde je potrebna pouzdanost i skalabilnost aplikacije.
I danas, Java ostaje jedan od najšire upotrebljavanih programskih jezika, iako su i drugi jezici uspeli da implementiraju platformnu nezavisnost (npr. C#).

Zašto Java?

James Gosling, Mike Sheridan i Patrick Naughton, grupa inženjera kompanije Sun, inicirala je jezički projekat Java u junu 1991. Jezik je nazvan Hrast (engl. Oak), i bio je namenjen za programiranje kućnih elektronskih uređaja (televizora, video rekordera i sl.).

James'gosling

Ime projekta Hrast je kasnije promenjeno u Java, po brendu Java kafe, koja je dobila ime po istoimenom ostrvu Java. Zbog toga logo jezika Java prikazuje čašu vruće kafe. Postoji još jedna verzija porekla imena jezika, koja se odnosi na aluziju na aparat za kafu kao primer kućnog uređaja, za koji je programski jezik prvobitno kreiran.

java-programski-jezik

Koliko je teško naučiti Javu?

Java je od početka projektovana tako da olakša prelazak programerima koji prelaze sa drugih jezika (npr. C++ , odakle je i preuzet veliki deo sintakse).  Iako mnogi kritikuju Javu zbog njene redundantne sintakse, ne može se osporiti da je Java kod, ukoliko se napiše pravilno, relativno lak za održavanje i razumljiv.

Java je neiscrpno polje učenja. Trenutno je aktuelna Java 9, koja je donela neka unapređenja postojećih API-ja (Collections API), kao i neke nove funkcionalnosti koje olakšavaju projektovanje (npr. REPL, pomoću kojeg je moguće evaluirati metode bez potrebe za pokretanjem celog programa).

Java jezik spada u kategoriju jezika srednje težine. Ono što ga čini dosta jednostavnijim u odnosu na C++ ili C, jeste postojanje sistema Garbage Collector-a. Ova funkcionalnost omogućava automatsko upravljanje memorijom, koje dosta olakšava rad programeru. S druge strane, nikada se ne može postići ista efikasnost kao korišćenjem „ručnog“ alociranja memorije kao u C++ ili C-u.
Kako je Java objektno orjentisana, sav kod koji pišemo nalazi se u okviru klasa (fajlovi sa .java ekstenzijom). U okviru klase, nalaze se elementi u sledećem redosledu:

  • Import (uvoz) drugih biblioteka i klasa koje se koriste u našoj klasi
  • Deklaracija same klase, zajedno sa modifikatorima pristupa i tipom klase (interfejs, apstraktna klasa ili obična klasa)
  • Stvarni kod koji opisuje logiku klase, koji se sastoji od polja (atributa) i metoda

Naziv klase mora biti isti kao i naziv .java fajla u kojem se ona nalazi.  U okviru jedne klase, mogu postojati dodatne, privatne klase, koje se mogu koristiti samo za potrebe klase u kojoj se nalaze.

Apstraktne klase, interfejsi i nasleđivanje

Malopre smo pomenuli da postoje tri tipa klase: obična klasa, interfejs i apstrakstna klasa. Kako Java implementira sistem nasleđivanja, postoje određena pravila:

  • Jedna klasa može nasleđivati samo jednu klasu (bila to obična ili apstraktna klasa)
  • Jedna klasa može implementirati više interfejsa

Ono što razlikuje apstraktnu klasu od obične jeste to što ona, pored običnih metoda za koje je pružena implementacija, mora imati i tzv. apstraktne metode. To su metode koje nemaju implementaciju, već je na klasama koje nasleđuju apstraktnu klasu da te metode implementiraju. Apstraktne klase ne mogu se inicijalizovati (ne možemo napraviti objekat od apstraktne klase). Za razliku od interfejsa, one mogu imati polja.
Interfejs predstavlja ugovor. Klasa koja implementira interfejs, obavezuje se da pruži implementaciju metoda definisanih u interfejsu. Interfejsi nemaju polja (izuzetak su statičke konstante) i ne mogu imati implementirane metode.

Modifikatori pristupa

Java, kao objektno orijentisani programski jezik, implementira sistem kontrole pristupa (enkapsulacija).

U Javi razlikujemo četiri modifikatora pristupa, od najstriktnijeg do najotvorenijeg: privateprotectedpackage private (default) i public.

java-modifikatori-pristupa

Ovi modifikatori pristupa se mogu primeniti na bilo koji od elemenata klase u Javi (polja, metode) dok se na samu klasu može primeniti ili public modifikator pristupa, čime klasa postaje dostupna iz svih drugih klasa, ili se ostaviti bez modifikatora. Na ovaj način, klasi se dodeljuje modifikator package-private i klasa postaje dostupna samo drugim klasama iz istog paketa (package – način za grupisanje Java klasa korišćenjem fajl sistema).

Pravilo palca za određivanje pravog nivoa pristupa jeste – početi sa što striktnijeg i proširivati nivo pristupa ako postoji eksplicitna potreba za tim.

Polimorfizam

Polimorfizam predstavlja jedan od četiri principa OOP (objektno orjentisanog programiranja).

Polimorfizam je pružanje jednog interfejsa entitetima različitih tipova. Postoji nekoliko različitih vrsta polimorfizma:

  • Ad hoc polimorfizam: kada funkcija ima različite implementacije u zavisnosti od snabdevenih parametara. Ad hoc polimorfizam je podržan u mnogim programskim jezicima korišćenjem preklapanja funkcija.
  • Parametarski polimorfizam: kada kod pišemo bez specificiranja nekog određenog tipa i stoga ga možemo koristiti transparentno sa bilo kojim brojem novih tipova. U zajednici objektno orijentisanog programiranja, ova vrsta polimorfizma je poznata kao generics, odnosno generic programming. U svetu funkcionalnog programiranja, ova vrsta polimorfizma se skraćeno zove samo polimorfizam.
  • Podtipovi: podtipovi neke klase mogu se podmetnuti u metodi, koja kao argument prima objekat njihove nadklase. Na ovaj način se ponašanje same metode menja u zavisnosti od tipa prosleđenog argumenta.

Npr. ukoliko imamo interfejs Calculator.java sa metodom sum(int a, int b) i klase koje ga implementiraju sa nazivima
ScientificCalculator.java RegularCalculator.java.
Sada, zamislite da imamo metodu u nekoj drugoj klasi, koja kao parametar prima objekat tipa Calculator. Dakle, ne zahteva se konkretna implementacija, već je ulazni parametar definisan putem interfejsa.
Ta metoda ne zna koju će konkretnu metodu pozvati pri stvarnom izvršenju programa – da li metodu sum(int a, int b) nad objektom tipa ScientificCalculator, ili nad objektom tipa RegularCalculator. Ovo je jedan primer runtime polimorfizma.

A sad, hajde da malo pređemo na nešto zanimljivije. Vreme je da kodiramo!

Najjednostavniji primer Java programa (Hello World)*

Za pisanje ove jednostavne aplikacije, koristićemo NetBeans razvojno okruženje (IDE). NetBeans je jedan od tri vodeća IDE za Javu (druga dva su Eclipse IntelliJ).

Nakon što smo pokrenuli razvojno okruženje, treba kreirati projekat.

netbeans-java-create-project
Kreiranje projekta u Netbeans-u

Projekat u Javi predstavlja jednu funkcionalnu celinu u kojoj su objedinjeni kodovi za neku funkcionalnost softvera (najčešći primer su „Server“, „Client“ i „Common“ iliti zajednički projekat).
Pravimo projekat tipa „Java application“ i aplikaciju imenujemo „HelloWorldApp“. Tokom kreiranja projekta, biramo opciju automatskog generisanja „main“ klase. Na ovaj način dobijamo potrebnu infrastrukturu „za džabe“ (kreira se paket sa nazivom aplikacije i u njemu klasa sa „main“ metodom, koja nosi isti naziv).

Sada možemo napisati kod.

Liniju 19 u kodu zamenjujemo logikom naše aplikacije, praćenu komentarom koji objašnjava kod (komentari se u Javi označavaju sa „//“:

System.out.println("Hello World!");
// Display the string.

Sada kada imamo definisano ponašanje aplikacije, potrebno je da naš .java fajl kompajliramo. Biramo „Build Project“ opciju iz padajućeg menija „Run“ u razvojnom okruženju:

Ukoliko se „bildovanje“ završi sa rezultatom BUILD SUCCESSFUL, sve je u redu i možemo preći na pokretanje programa.
Ako je pak rezultat BUILD FAILED, proverite svoj kod, pošto najverovatnije imate neku grešku u sintaksi.

Kada uspešno izbildujemo projekat, bytecode fajl sa ekstenzijom .class je kreiran. Možemo pokrenuti našu aplikaciju.

Iz padajućeg Run menija biramo opciju „Run project“ i aplikacija se, ako je sve u redu, izvršava.

netbeans-hello-world-run-application

Kao što je očekivano, dobili smo ispis teksta „Hello World“ na našem standardnom izlazu.

*Ova pokazna vežba za svrhu ima da približi sintaksu i workflow razvoja Java aplikacije i kao takva nije tutorial u klasičnom smislu reči. Mnogi detalji setapovanja su izostavljeni. Detaljniji tutoriali će uslediti u drugim člancima.

 

Kao što vidite, Java programi su dosta jednostavni za pisanje i izvršavanje. Sve se može uraditi kroz korisnički interfejs razvojnog okruženja, ali i kroz komandnu liniju.

Za kraj ovog članka, hajde da vidimo kako će to Java tehnologija promeniti vaš život (ne na neki čudesan, već sasvim praktičan način).

Kako će Java tehnologija promeniti vaš život

Ne mogu da vam obećam uspeh, bogatstvo, dođavola, čak ni posao ako naučite Javu, ali ovo su neke od prednosti koje nam ona pruža:

  • Možete početi brzo: Iako je Java moćan obejektno-orijentisani jezik, izuzetno je laka za učenje, pogotovo za programere koji su već upoznati sa jezicima kao što su C ili C++.
  • Manje koda: Poređenje programskih parametara (broj klasa, broj metoda itd.) pokazuje da Java program, koji ima istu funkcionalnost kao njegov C++ pandan, može biti i do 4 puta koncizniji.
  • Bolji kod: Java programski kod ohrabruje dobre programerske navike, dok automatski sistem za upravljanje memorijom, Garbage Collector sprečava „curenje memorije“ (eng. memory leak). Njegova objektna orijentisanost i izuzetno bogat i razgranat API, omogućavaju korišćenje testiranog i pouzdanog koda i samim tim izbegavanje omašaka u kodiranju („bagova“).
  • Brži razvoj softvera: Pošto smo već zaključili da je Java dosta jednostavnija od C++ programskog jezika, pokazalo se da za razvoj iste aplikacije u Javi treba i do 2 puta manje vremena, nego za razvoj iste aplikacije u C++ programskom jeziku.
  • Izbegavanje zavisnosti od platforme: Naš program možemo zadržati platformno nezavisnim, tako što nećemo koristiti bibliotke pisane u drugim programskim jezicima.
  • „Piši jednom, pokreni bilo gde“: Zbog toga što se Java kompajlira u mašinski nezavisan bajtkod, ponašanje aplikacije je konzistentno na svim platformama.
  • Lakša distribucija koda: Uz novu tehnologiju „Java Web Start“, korisnici mogu da pokrenu vašu Java aplikaciju jednim klikom miša (ili pritiskom na ekran osetljiv na dodir). Verzija softvera se automatski proverava pri pokretanju i po potrebi ažurira.

 

Da zaključim: Nadam se da sam vas ovim sažetim predstavljanjem Java progamskog jezika i platforme zainteresovao i podstakao da detaljnije istražite ovu izuzetnu tehnologiju.
Ukoliko imate nekih pitanja, ili vas interesuju detaljnije neki delovi članka, možete ostaviti komentar na dnu stranice.

Do sledećeg pisanja, srećno programiranje!

Gotovo.