Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Greške
  • Sigurnost i Java virtuelna mašina. Obimna osnovna biblioteka

Sigurnost i Java virtuelna mašina. Obimna osnovna biblioteka

Dakle, Java ima dugu i tešku istoriju razvoja, ali vrijeme je da razmislimo šta se dogodilo sa kreatorima, koja svojstva ova tehnologija ima.

Najpoznatija, a ujedno i najžešća rasprava, imanje je mnogo- ili cross-platform... Već je rečeno da se to postiže korišćenjem JVM virtuelne mašine, koja je običan program koji izvršava operativni sistem i pruža Java aplikacijama sve potrebne mogućnosti. Pošto su svi JVM parametri navedeni, ostaje jedini zadatak - implementirati virtuelne mašine na sve postojeće i korišćene platforme.

Prisustvo virtuelne mašine određuje mnoga svojstva Jave, ali hajde da se sada zadržimo na sledećem pitanju - da li je Java kompajlirani ili interpretirani jezik? U stvari, koriste se oba pristupa.

Izvorni kod bilo kojeg Java programa predstavljen je običnim tekstualnim datotekama koje se mogu kreirati u bilo kojem uređivaču teksta ili specijalizovanom razvojnom alatu i imaju ekstenziju .java. Ove datoteke se unose u Java kompajler, koji ih prevodi u poseban Java bajt kod. To je ovaj kompaktan i efikasan skup instrukcija koji podržava JVM i sastavni je dio Java platforme.

Izlaz kompajlera se čuva u binarnim datotekama sa ekstenzijom .class. Java aplikacija koja se sastoji od takvih fajlova se dovodi na ulaz virtuelne mašine, koja počinje da ih izvršava, odnosno tumači, pošto je to sam program.

Mnogi programeri su isprva oštro kritizirali Sunov hrabri slogan "Piši jednom, trči svuda", otkrivajući sve više nedosljednosti i nedosljednosti na različitim platformama. Međutim, mora se priznati da su jednostavno bili previše nestrpljivi. Java je tek rođena, a prve verzije specifikacija nisu bile dovoljno sveobuhvatne.

Ubrzo je Sun došao do zaključka da jednostavno slobodno objavljivanje specifikacija (kao što se radilo mnogo prije Jave) nije dovoljno. Također je potrebno kreirati posebne procedure za provjeru usklađenosti novih proizvoda sa standardima. Prvi takav test za JVM sadržavao je samo oko 600 provjera, godinu dana kasnije njihov broj je porastao na deset hiljada i od tada se povećava (upravo taj test nije mogao proći MS IE 4.0 svojevremeno). Naravno, autori virtuelnih mašina su ih sve vreme unapređivali, eliminisali greške i optimizovali njihov rad. Ipak, bilo kojoj tehnologiji, čak i vrlo dobro zamišljenoj, potrebno je vrijeme da se stvori visokokvalitetna implementacija. Java 2 Micro Edition (J2ME) trenutno prolazi kroz sličan razvojni put, ali o tome kasnije.

Sljedeće najvažnije svojstvo je Java objektna orijentacija, koja se uvijek spominje u svim člancima i saopštenjima za javnost. O samom objektno orijentisanom pristupu (OOP) govori se u sledećem predavanju, ali je važno naglasiti da je u Javi skoro sve implementirano u obliku objekata – niti i tokovi podataka, umrežavanje, rad sa slikama, sa korisničkim interfejsom. ., rukovanje greškama, itd. Na kraju krajeva, svaka Java aplikacija je kolekcija klasa koje opisuju nove tipove objekata.

Detaljna diskusija o Java objektnom modelu odvija se tokom kursa, međutim, mi navodimo glavne karakteristike. Prije svega, kreatori su napustili višestruko nasljeđe. Odlučeno je da previše komplikuje i zamagljuje programe. Jezik koristi alternativni pristup - poseban tip "interfejsa". O tome se detaljno govori u odgovarajućem predavanju.

Nadalje, Java se primjenjuje jako kucanje... To znači da svaka varijabla i bilo koji izraz imaju tip koji je već poznat u vrijeme kompilacije. Ovaj pristup se koristi za pojednostavljenje identifikacije problema, jer kompajler odmah prijavljuje greške i ukazuje na njihovu lokaciju u kodu. Potraga za izuzecima (izuzeci - tako se u Javi nazivaju pogrešne situacije) tokom izvršavanja programa (runtime) zahtijevat će složeno testiranje, a uzrok kvara može se pronaći u potpuno drugoj klasi. Dakle, potrebno je uložiti dodatni napor u pisanje koda, ali je njegova pouzdanost značajno povećana (a to je jedan od temeljnih ciljeva zbog kojih je novi jezik stvoren).

U Javi postoji samo 8 tipova podataka koji nisu objekti. Definisani su od prve verzije i nikada se nisu mijenjali. To je pet tipova cijelih brojeva: byte, short, int, long, kao i karakterni char. Zatim dva frakciona tipa float i double, i konačno logički tip boolean. Takvi tipovi se nazivaju jednostavni, odnosno primitivni (od engleskog primitive), a o njima se detaljno govori u predavanju o tipovima podataka. Svi ostali tipovi su objektni ili referentni (eng. referenca).

Iz nekog razloga, Java sintaksa je mnoge zavarala. Zaista se temelji na sintaksi C / C ++ jezika, pa ako pogledate izvorni kod programa napisanih na ovim jezicima i na Javi, nećete odmah moći razumjeti na kojem je od njih napisan koji jezik. Iz nekog razloga, to je dalo mnogo razloga da se misli da je Java pojednostavljeni C++ sa dodatnim karakteristikama kao što je sakupljač smeća. U nastavku ćemo pogledati automatski sakupljač smeća, ali velika je greška misliti da je Java isti jezik kao C++.

Naravno, kada su razvijali novu tehnologiju, autori Jave su se oslonili na široko rasprostranjen programski jezik iz raznih razloga. Prvo, oni su sami smatrali C++ svojim glavnim alatom u to vrijeme. Drugo, zašto izmišljati nešto novo kada postoji savršeno prikladno staro? Konačno, očito je da će nepoznata sintaksa uplašiti programere i značajno zakomplikovati uvođenje novog jezika, a na kraju krajeva, Java je trebala postati široko rasprostranjena što je prije moguće. Stoga je sintaksa samo malo pojednostavljena kako bi se izbjegle pretjerano zbunjujuće konstrukcije.

Ali, kao što je već spomenuto, C++ je bio suštinski neprikladan za nove zadatke koje su postavili programeri iz kompanije Sun, pa je Java model ponovo izgrađen, i to u skladu sa potpuno drugačijim ciljevima. Dalja predavanja će postepeno otkrivati ​​specifične razlike.

Što se tiče objektnog modela, on je bio prilično modeliran na takvim jezicima kao što je Smalltalk iz IBM-a, ili Simula jezik razvijen još 60-ih godina u Norveškom računarskom centru, na koji se poziva tvorac Jave, James Gosling.

Još jedno važno svojstvo Jave - lakoća učenja i razvoja - također je dobilo kontroverzne ocjene. Zaista, autori su se potrudili spasiti programere od najčešćih grešaka koje čak i iskusni C / C ++ programeri ponekad čine. A prvo mjesto ovdje zauzima rad sa pamćenjem.

U Javi, od samog početka, automatski mehanizam za sakupljanje smeća(od engleskog garbage collector). Pretpostavimo da program kreira neki objekat, radi s njim, a onda dođe trenutak kada više nije potreban. Potrebno je osloboditi zauzetu memoriju kako se ne bi ometalo normalno funkcionisanje operativnog sistema. U C / C ++, to se mora uraditi eksplicitno iz programa. Očigledno, kod ovakvog pristupa postoje dvije opasnosti - ili brisanje objekta koji je nekom drugom potreban (a ako mu se zaista pristupi, doći će do greške), ili ne brisanje objekta koji je postao nepotreban, što znači curenje memorije, tj. je program počinje da troši sve više i više RAM-a.

Prilikom razvoja u Javi, programer uopće ne razmišlja o oslobađanju memorije. Virtuelna mašina sama broji broj referenci na svaki objekat, a ako postane nula, onda je takav objekat označen za obradu od strane sakupljača smeća. Dakle, programer samo treba da se uveri da nema referenci na nepotrebne objekte. Sakupljač smeća je pozadinska nit izvršavanja koja redovno skenira postojeće objekte i uklanja one koji više nisu potrebni. Ni na koji način ne možete utjecati na rad sakupljača smeća iz programa, možete samo eksplicitno pokrenuti njegov sljedeći prolaz koristeći standardnu ​​funkciju. Jasno je da to uvelike pojednostavljuje razvoj programa, posebno za programere početnike.

Međutim, iskusni programeri nisu bili zadovoljni činjenicom da nisu mogli u potpunosti kontrolisati sve što se dešava sa njihovim sistemom. Ne postoje tačne informacije kada će tačno objekat koji je postao nepotreban biti obrisan, kada će nit sakupljača smeća početi da radi (i samim tim zauzima sistemske resurse) itd. Ali, uz svo dužno poštovanje prema iskustvu takvih programera, treba napomenuti da je ogroman broj kvarova programa napisanih na C / C ++ uzrokovan nepravilnim radom s memorijom, a ponekad se to događa čak i sa široko rasprostranjenim proizvodima vrlo ozbiljne kompanije.

Osim toga, poseban naglasak stavljen je na lakoću savladavanja nove tehnologije. Kao što je već spomenuto, očekivalo se (a ta su očekivanja bila opravdana, kao potvrda ispravnosti odabranog puta!) da Java dobije što širu primjenu, čak i u onim kompanijama u kojima se nikada ranije nisu bavile programiranjem na takvom nivou ( kućni aparati kao što su tosteri i aparati za kafu, kreiranje igrica i drugih aplikacija za mobilne telefone itd.). Postojao je i niz drugih razmatranja. Proizvodi za obične korisnike, a ne za profesionalne programere, moraju biti posebno pouzdani. Internet je postao World Wide Web jer su se pojavili laički korisnici, a mogućnost kreiranja apleta im je podjednako privlačna. Trebao im je jednostavan alat za izgradnju robusnih aplikacija.

Konačno, Internet procvat 90-ih je dobio zamah i uveo nove, strože vremenske rokove razvoja. Dugoročni projekti, koji su bili uobičajeni u prošlosti, prestali su da zadovoljavaju potrebe kupaca, novi sistemi su morali biti kreirani za najviše godinu dana, pa čak i za nekoliko mjeseci.

Osim uvođenja sakupljača smeća, poduzeti su i drugi koraci kako bi se olakšao razvoj. Neki od njih su već spomenuti - odbacivanje višestrukog nasljeđivanja, pojednostavljenje sintakse, itd. Mogućnost kreiranja višenitnih aplikacija implementirana je u prvu verziju Jave (istraživanja su pokazala da je to vrlo zgodno za korisnike, a postojeći standardi su zasnovani na teletip sistemima, koji su zastareli mnogo godina unazad). O ostalim karakteristikama bit će riječi u narednim predavanjima. Međutim, odavno je opšte prihvaćeno da je izgradnja i održavanje sistema zapravo lakša u Javi nego u C/C++. Međutim, svejedno, ovi jezici su stvoreni za različite svrhe, a svaki ima svoje neosporne prednosti.

Sljedeće važno svojstvo Jave je sigurnost. Početni fokus na distribuirane aplikacije, a posebno odluka da se apleti pokreću na klijentskoj mašini, učinili su sigurnost glavnim prioritetom. Postoji čitav niz mjera na djelu u bilo kojoj Java virtuelnoj mašini. U nastavku je samo kratak opis nekih od njih.

Prvo, ovo su pravila za rad sa memorijom. Već je rečeno da se brisanje memorije vrši automatski. Njegovu rezervaciju takođe određuje JVM, a ne kompajler, ili eksplicitno iz programa; programer može samo naznačiti da želi da kreira još jedan novi objekat. Pokazivači na fizičke adrese su u principu odsutni.

Drugo, prisustvo virtuelne mašine-interpretera čini mnogo lakšim odsecanje opasnog koda u svakoj fazi rada. Bajtkod se prvo učitava u sistem, obično u obliku datoteka klase. JVM pažljivo provjerava da li se svi pridržavaju općih Java sigurnosnih pravila i da ih ne kreiraju napadači na neki drugi način (i ako nisu oštećeni u prijenosu). Zatim, tokom izvršavanja programa, tumač može lako provjeriti valjanost svake akcije. Mogućnosti klasa koje su učitane s lokalnog diska ili preko mreže značajno se razlikuju (korisnik može lako dodijeliti ili ukloniti određena prava). Na primjer, apleti nikada neće pristupiti lokalnom sistemu datoteka po defaultu. Takva ugrađena ograničenja nalaze se u svim standardnim Java bibliotekama.

Konačno, postoji mehanizam za potpisivanje apleta i drugih aplikacija preuzetih preko mreže. Poseban sertifikat garantuje da je korisnik primio kod tačno onako kako ga je proizvođač izdao. To, naravno, ne pruža dodatna sredstva zaštite, ali omogućava klijentu da ili odbije raditi s aplikacijama nepouzdanih proizvođača, ili odmah vidi da su u programu napravljene neovlaštene promjene. U najgorem slučaju zna ko je odgovoran za štetu.

Sveukupnost opisanih svojstava Jave omogućava da se tvrdi da je jezik veoma pogodan za razvoj Internet i intranet (interne korporativne mreže) aplikacija.

Konačno, važna karakteristika Jave je njena dinamičnost. Jezik je vrlo dobro koncipiran, stotine hiljada programera i mnoge velike kompanije su uključene u njegov razvoj. Glavne faze ovog razvoja sumirane su u sljedećem odjeljku.

Dakle, da rezimiramo. Java platforma ima sljedeće prednosti:

  • prenosivost, ili cross-platform ;
  • objektna orijentacija, kreiran je efikasan objektni model;
  • poznata C / C ++ sintaksa;
  • ugrađen i transparentan sigurnosni model;
  • orijentacija na Internet zadatke, mrežno distribuirane aplikacije;
  • dinamičnost, lakoća razvoja i dodavanje novih karakteristika;
  • lakoća učenja.

Ali ne treba pretpostaviti da lakše učenje znači da uopće ne morate učiti jezik. Pisanje zaista dobrih programa, izgradnja velikih, složenih sistema, zahtijeva dobro razumijevanje svih osnovnih Java koncepata i korištenih biblioteka. O tome se radi u ovom kursu.

Glavne Java verzije i proizvodi

Odmah da rezervišemo da se ovde pod proizvodima podrazumevaju softverska rešenja kompanije Sun, koja su „referentna implementacija“.

Dakle, Java je prvi put najavljena 23. maja 1995. godine. Glavni proizvodi dostupni u to vrijeme u obliku beta verzija bili su:

  • Specifikacija Java jezika, JLS, specifikacija jezika Java (opisivanje vokabulara, tipova podataka, osnovnih konstrukcija, itd.);
  • JVM specifikacija
  • Java Development Kit, JDK - Alat za razvojne programere koji se uglavnom sastoji od uslužnih programa, standardnih biblioteka klasa i demonstracija.

Specifikacija jezika je tako dobro napisana da se do danas koristi praktično nepromijenjena. Naravno, napravljen je veliki broj pojašnjenja, detaljniji opisi, dodane su neke nove karakteristike (na primjer, deklaracija unutrašnjih klasa), ali osnovni koncepti ostaju nepromijenjeni. Ovaj kurs se u velikoj meri oslanja na jezičke specifikacije.

JVM specifikacija je prvenstveno namenjena kreatorima virtuelnih mašina i stoga je jedva da je koriste Java programeri.

JDK je dugo bio osnovni alat za razvoj aplikacija. Ne sadrži nikakve uređivače teksta, već radi samo na postojećim Java datotekama. Kompajler je predstavljen uslužnim programom javac (java kompajler). Virtuelnu mašinu implementira java. Za probno pokretanje apleta postoji poseban uslužni program koji se zove appletviewer. Konačno, obezbeđen je javadoc alat za automatsko generisanje dokumentacije iz izvornog koda.

Prva verzija je sadržavala samo 8 standardnih biblioteka:

  • java.lang - osnovne klase potrebne za rad bilo koje aplikacije (naziv je skraćenica za jezik);
  • java.util - Mnogo korisnih pomoćnih klasa
  • java.applet - klase za kreiranje apleta;
  • java.awt, java.awt.peer - biblioteka za kreiranje grafičkog korisničkog interfejsa (GUI), nazvana Apstraktni alat za prozore, AWT, detaljno opisana u predavanju 11;
  • java.awt.image - dodatne klase za rad sa slikama;
  • java.io - rad sa streamovima i datotekama;
  • java.net - umrežavanje.

Dakle, sve biblioteke počinju sa Javom, one su standardne. Svi ostali (počevši od com, org, itd.) mogu se promijeniti u bilo kojoj verziji bez podrške za kompatibilnost.

Konačna verzija JDK 1.0 objavljena je u januaru 1996. godine.

Hajde da odmah objasnimo sistem imenovanja verzija. Oznaka verzije sastoji se od tri znamenke. Prvi je uvijek 1. To znači da se održava puna kompatibilnost između svih verzija 1.x.x. To jest, program napisan u starijem JDK-u će se uvijek uspješno izvršavati na novijem. Kompatibilnost unatrag se održava kad god je to moguće - ako je program kompajliran sa novijim JDK-om, a nisu korištene nove biblioteke, tada će u većini slučajeva stare virtuelne mašine moći da izvrše takav kod.

Druga cifra je promijenjena sa 0 na 4 (posljednja u vrijeme kada je kurs kreiran). U svakoj verziji došlo je do značajnog proširenja standardnih biblioteka (212, 504, 1781, 2130 i 2738 - broj klasa i interfejsa sa 1.0 na 1.4), a takođe su dodane neke nove karakteristike samom jeziku. Uslužni programi uključeni u JDK su također promijenjeni.

Konačno, treća znamenka označava razvoj jedne verzije. Ništa se ne menja u jeziku ili bibliotekama, samo se eliminišu greške, vrši se optimizacija, mogu se menjati (dodati) argumenti korisnosti. Dakle, najnovija verzija JDK 1.0 je 1.0.2.

Iako razvojem verzije 1.x ništa nije uklonjeno, naravno, neke funkcije ili klase su zastarjele. Oni su proglašeni zastarjelima, i iako će biti podržani dok se ne objavi 2.0 (a još se ništa o tome nije čulo), nije preporučljivo koristiti ih.

Uz prvi uspjeh JDK 1.0 stigle su i kritike. Glavni nedostaci koje su programeri pronašli su sljedeći. Prvo je, naravno, izvedba. Prva virtuelna mašina bila je veoma spora. To je zbog činjenice da je JVM, u stvari, interpreter, koji uvijek radi sporije od izvršavanja kompajliranog koda. Međutim, uspješna optimizacija koja je otklonila ovaj nedostatak još je bila pred nama. Uočene su i prilično loše mogućnosti AWT-a, nedostatak rada sa bazama podataka i drugo.

U decembru 1996. objavljena je nova verzija JDK 1.1, a beta verzija je odmah puštena za slobodan pristup. Konačna verzija je objavljena u februaru 1997. Šta je dodato u novo izdanje Jave?

Naravno, posebna pažnja je posvećena performansama. Mnogi delovi virtuelne mašine su optimizovani i prepisani koristeći Assembler, a ne C kao ranije. Pored toga, od oktobra 1996. Sun razvija novi proizvod - kompajler za pravovremeno, JIT. Njegov zadatak je da prevede Java bajt kod programa u "matični" kod operativnog sistema. Time se vrijeme pokretanja programa povećava, ali se izvršavanje može ubrzati u nekim slučajevima i do 50 puta! Od jula 1997. postoji implementacija za Windows i JIT je uključen u JDK kao standard sa mogućnošću onemogućavanja.

Dodane su mnoge važne nove funkcije. JavaBeans, tehnologija najavljena još 1996. godine, omogućava vam da kreirate vizuelne komponente koje se lako mogu integrisati u alate za vizuelni razvoj. JDBC (Java DataBase Connectivity) omogućava pristup bazama podataka. RMI (Remote Method Invocation) olakšava kreiranje distribuiranih aplikacija. Podrška nacionalnom jeziku i sigurnost su poboljšani.

U prve tri sedmice JDK 1.1 je preuzet preko 220.000 puta, a za manje od godinu dana više od dva miliona puta. Trenutno se verzija 1.1 smatra potpuno zastarjelom i njen razvoj je zaustavljen na 1.1.8. Međutim, zbog činjenice da najčešći pretraživač MS IE još uvijek podržava samo ovu verziju, i dalje se koristi za pisanje malih apleta.

Pored toga, Sun je počeo da nudi Java Runtime Environment (JRE) 11. marta 1997. godine. Zapravo, ovo je minimalna implementacija virtuelne mašine koja je potrebna za pokretanje Java aplikacija, bez kompajlera ili drugih razvojnih alata. Ako korisnik želi samo da pokreće programe, to je upravo ono što mu treba.

Kao što vidite, glavni nedostatak ostaje slaba podrška za grafički korisnički interfejs (GUI). U decembru 1996. Sun i Netscape su najavili novu biblioteku, IFC (Internet Foundation Classes), koju je Netscape u potpunosti razvio u Javi, kako bi precizno kreirao složeni prozorski interfejs. U aprilu 1997. godine objavljeno je da kompanije planiraju da kombinuju Sun-ov AWT i Netscapeov IFC kako bi stvorili novi proizvod Java Foundation Classes, JFC, koji bi uključivao:

  • poboljšan prozor

Java jezik. Uvod.

Dugo je bilo teško zamisliti kompjuterski časopis bez članka o jeziku Java. O njemu su pisale čak i popularne novine i časopisi kao što su The New York Times, The Washington Post i Business Week.

Nemoguće je zapamtiti da je Nacionalni javni radio ikada posvetio desetominutni program nekom programskom jeziku. Dobro ili loše zavisi od tačke gledišta. A ulaganje od 100 miliona dolara u proizvodnju softvera kreiranog pomoću specifičnog programskog jezika?! Televizijske kompanije CNN, CNBC i drugi mediji samo su pričali, i još uvijek govore, o tome kako Java jezik to može i hoće.

Međutim, ova knjiga je za ozbiljne programere, a pošto je Java ozbiljan programski jezik, imamo o čemu da razgovaramo. Dakle, nećemo se upuštati u analizu reklamnih obećanja i pokušavati da saznamo šta je u njima istina, a šta fikcija. Umjesto toga, opisati ćemo Javu kao programski jezik dovoljno detaljno (uključujući, naravno, karakteristike koje joj omogućavaju da se koristi za rad na Internetu, što je, u stvari, izazvalo toliku reklamnu hajku). Nakon toga, pokušaćemo da odvojimo stvarnost od fantazije objašnjavajući šta Java jezik može, a šta ne može.

U početku je postojao jaz između reklamnih obećanja i stvarnih mogućnosti Java jezika. Kako je sazrevala, tehnologija je postala stabilnija i pouzdanija, a očekivanja su pala na razuman nivo. Java se sada sve više koristi za kreiranje "srednjeg softvera" koji održava komunikaciju između klijenata i serverskih resursa (kao što su baze podataka).

Iako ove važne aplikacije nisu prevelike, Java jezik se u ovoj oblasti pokazao najkorisnijim zbog svoje mašinske nezavisnosti, višenitnosti i mogućnosti mrežnog programiranja. Pored toga, Java je preuzela vodeću ulogu u ugrađenim sistemima, postajući de facto standard za prenosive uređaje, virtuelne kioske, kompjutere u automobilu i slično. Međutim, prvi pokušaji prepisivanja široko rasprostranjenih programa za osobne računare u Javi bili su neuspješni - rezultirajuće aplikacije su se pokazale kao male snage i spore. Pojavom nove verzije neki od ovih problema su riješeni, a ipak se mora priznati da su korisnici, općenito, potpuno ravnodušni prema jeziku na kojem su napisani programi koje su kupili. Vjerujemo da će glavne prednosti jezika Java doći od stvaranja novih vrsta uređaja i aplikacija, umjesto da se prepisuju postojeći programi.

Jezik Java kao programski alat

Kako je programski jezik Java premašio svoja reklamna obećanja. To je nesumnjivo jedan od najboljih jezika koji je dostupan ozbiljnim programerima. Java ima potencijal da bude odličan programski jezik, ali sada je vjerovatno prekasno. Kada se pojavi novi programski jezik, odmah se javlja gadan problem kompatibilnosti sa prethodno kreiranim softverom. Štaviše, čak i ako se promene u ovim programima mogu izvršiti bez mešanja u njihov tekst, teško je tvorcima jezika koji je tako toplo pozdravljen u javnosti, kao što je Java, da direktno kažu: „Da, možda smo napravili greška u razvoju verzije X, ali verzija Y će biti bolja." Kao rezultat toga, dok čekamo dalja poboljšanja, moramo reći da se struktura Java jezika neće značajno promijeniti u bliskoj budućnosti.

Očigledno pitanje je: " Kako ste poboljšali jezik Java?"Ispostavilo se da to nije učinjeno poboljšanjem samog programskog jezika, već radikalnom promjenom biblioteka programa napisanih na jeziku Java. Sun Microsystems je promijenio sve: počevši od naziva pojedinačnih bibliotečkih funkcija (učinivši ih smislenijim) i metode rada grafičkih modula (promena načina na koji rukujemo događajima i delimično prepisivanje programa rada), a završava se kreiranjem novih jezičkih karakteristika, kao što su alati za štampanje, koji nisu bili dostupni u Javi 1.0, što je rezultiralo mnogo korisnija platforma za programiranje od svih prethodnih verzija jezika Java.

Microsoft je objavio svoj vlastiti proizvod pod nazivom J++, koji je povezan sa jezikom Java. J ++ interpretira Java virtuelna mašina (Java virtuelna mašina) prilikom izvršavanja bajtkoda, ali jezici imaju različita sučelja u odnosu na eksterne kodove. J++ i Java jezici imaju skoro istu sintaksu. Međutim, Microsoft je kreirao dodatne jezičke konstrukcije. Svi oni imaju prilično sumnjivu vrijednost, sa izuzetkom Windows API-ja. Pored činjenice da ovi jezici imaju istu sintaksu, njihove osnovne biblioteke (stringovi, uslužni programi, alati za mrežno programiranje, višenitni alati, matematičke biblioteke, itd.) su u suštini iste.

Međutim, grafičke biblioteke, korisnički interfejs i udaljeni pristup objektima su potpuno različiti između ovih jezika. Microsoft trenutno više ne podržava J++, pošto je razvio novi jezik, C#, koji ima mnogo zajedničkog sa Javom, ali koristi drugu virtuelnu mašinu. Ova knjiga ne opisuje J++ ili C#.

Prednosti Java jezika

1) Jedna od glavnih prednosti Java jezika je nezavisnost od platforme na kojoj se pokreću programi: Isti kod se može pokrenuti pod Windows, Solaris, Linux, Machintosh i još mnogo toga.
Ovo je zaista neophodno kada se programi preuzimaju preko Interneta za kasnije izvršavanje pod različitim operativnim sistemima.

2) Još jedna prednost je to sintaksa jezika Java slična je sintaksi jezika C++, a programerima koji poznaju jezike C i C++ nije teško da je nauče... Istina, za programere koji poznaju Visual Basic jezik, ova sintaksa može biti neobična.

Ako nikada niste programirali na C++, neki od pojmova koji se koriste u ovom odeljku možda vam neće biti jasni. U ovom slučaju, možete ga preskočiti. Dok dođete do kraja 6. poglavlja, ovi termini će vam postati poznati.

3) Takođe, Java - potpuno objektno orijentisani jezik, čak i više od C ++... Svi entiteti u Javi su objekti, sa izuzetkom nekoliko primitivnih tipova, kao što su brojevi. (Budući da je lako razvijati složene projekte sa objektno orijentisanim programiranjem, ono zamjenjuje starije strukturirano programiranje. Ako niste upoznati sa objektno orijentiranim programiranjem, poglavlja 3-6 će vam dati sve što trebate znati o tome.)

Međutim, nije dovoljno razviti još jedan, malo poboljšani, dijalekt jezika C ++. Osnovno je važno da je lakše razviti programe bez grešaka u Javi nego u C ++. Zašto? Java programeri su dugo razmišljali zašto su programi napisani na C++ tako skloni greškama. Oni su jeziku Java pružili sredstva da eliminišu samu mogućnost kreiranja programa koji bi sakrili najčešće greške. Da bi to uradio, jezik Java je uradio sledeće.

4) Isključena je mogućnost eksplicitne alokacije i oslobađanja memorije.
Java memorija se automatski vraća prikupljanjem smeća. Programator je zagarantovan protiv grešaka u vezi sa zloupotrebom memorije.

5) Uvedeni istiniti nizovi i nedozvoljena aritmetika pokazivača.
Sada programeri, u principu, ne mogu izbrisati podatke iz memorije zbog nepravilne upotrebe pokazivača.

6) Otklonjena je mogućnost brkanja operatora dodjeljivanja sa operatorom poređenja jednakosti.
Sada ne možete čak ni kompajlirati if (ntries = 3) izraz. ... ... (Visual Basic programeri ovdje možda uopće ne primjećuju nikakav problem, jer je ova greška izvor većine nesporazuma u C i C ++).

7) Višestruko nasljeđivanje je isključeno. Zamijenjen je novim konceptom - interfejsom koji je pozajmljen iz jezika Objective C.
Interfejs daje programeru gotovo sve što programer može dobiti od višestrukog nasljeđivanja, izbjegavajući pritom složenost upravljanja hijerarhijama klasa.

Karakteristike jezika Java

Jednostavno
Interpreted
Distribuirano
Pouzdan
Safe
Neovisno o mašini
Objektno orijentisan
Visoke performanse
Višenitno
Dynamic
Arhitektura računara nezavisna

Već smo se dotakli nekih od ovih tačaka u prošlom dijelu. U ovom odeljku ćemo: obezbediti citate iz priručnika Java jezika koji otkrivaju karakteristike jezika; Podijelimo sa čitateljima svoja razmišljanja o određenim svojstvima jezika, na osnovu vlastitog iskustva rada s njegovom najnovijom verzijom.

Jednostavno

Željeli smo stvoriti sistem koji je jednostavan za programiranje, ne zahtijeva dodatnu obuku i koji uzima u obzir ustaljenu praksu i standarde programiranja. Stoga, iako smo smatrali da je jezik C ++ neprikladan za ove svrhe, jezik Java je dizajniran da bude što sličniji njemu kako bi sistem učinio dostupnijim. Java jeziku nedostaju mnoge retko korišćene, nejasne i opskurne karakteristike C++ koje, po našem mišljenju, donose više štete nego koristi.

Java sintaksa je u suštini očišćena verzija C++ sintakse. Ovaj jezik nema datoteke zaglavlja, aritmetiku pokazivača (i same pokazivače), strukture, unije, preopterećenje operatora, virtuelne osnovne klase itd. (Razlike između Jave i C++ opisane su u C++ napomenama razbacanim po knjizi.) Međutim, programeri nisu nastojali da isprave sve nedostatke jezika C++.

Na primjer, sintaksa naredbe switch u jeziku Java ostala je nepromijenjena. Poznavajući jezik C ++, biće lako preći na sintaksu jezika Java.
Ako obično koristite okruženje za vizuelno programiranje (kao što je Visual Basic), Java jezik će vam se činiti komplikovanim.
Njegova sintaksa često izgleda prilično čudno (iako nije teško razumjeti značenje izraza). Što je još važnije, jezik Java zahtijeva mnogo više programiranja. Ljepota Visual Basica je u tome što njegovo okruženje za vizualno programiranje omogućava da kreirate infrastrukturu aplikacija gotovo automatski. Postizanje istog rezultata sa Javom zahteva ručno programiranje, ali rezultira mnogo kraćim programima.

Postoji, međutim, i treća vrsta programskog okruženja koja vam omogućava da kreirate programe koristeći tehnologiju "povuci i ispusti".

Drugi aspekt jednostavnosti je kratkoća. Jedan od ciljeva jezika Java je da omogući razvoj programa koji se mogu potpuno nezavisno izvršavati na malim mašinama. Glavni tumač i pomoćna sredstva za klasu su veličine oko 40 KB; standardne biblioteke i alati za urezivanje niti (posebno samostalno mikrojezgro) zauzimaju još 17: KB.
Ovo je ogroman uspjeh. Imajte na umu, međutim, da su biblioteke podrške za GUI mnogo veće.

Objektno orijentisan

Jednostavno rečeno, objektno orijentirano programiranje je tehnika programiranja koja se fokusira na podatke (tj. objekte) i načine pristupa njima. Po analogiji sa stolarijom, objektno orijentisani majstor je uglavnom fokusiran na stolicu koju pravi, a tek sekundarno ga zanimaju alati potrebni za to; u isto vreme, stolar koji nije orijentisan na objekte misli samo na svoje alate. Objektno orijentisana svojstva Jave i C++ su u suštini ista.

Objektna orijentacija je dokazala svoju vrijednost u proteklih 30 godina i bez nje je nemoguće zamisliti moderan programski jezik. Zaista, objektno orijentisane karakteristike jezika Java su uporedive sa jezikom C ++. Osnovna razlika među njima leži u mehanizmu višestrukog nasljeđivanja, za koji je jezik Java našao najbolje rješenje, kao i u modelu metaklase jezika Java.

Reflection (Poglavlje 5) i Object Serialization (Poglavlje 12) vam omogućavaju da implementirate trajne objekte i alate za izgradnju grafičkih korisničkih interfejsa od komponenti koje nisu u kutiji.

Ako nikada niste programirali na objektno orijentisanim jezicima, pažljivo pročitajte poglavlja 4-6. Ova poglavlja pokrivaju osnove objektno orijentiranog programiranja i pokazuju vam prednosti razvoja složenih projekata u odnosu na tradicionalne, proceduralno orijentirane jezike kao što su C ili Basic.

Distribuirano

Java ima veliku biblioteku programa za prenos podataka zasnovanih na TCP/IP (Transmission Control Protocol/Internet Protocol), HTTP (Hypertext Transfer Protocol) ili FTP (File Transfer Protocol). Protokol za prenos datoteka. Aplikacije napisane na jeziku Java mogu otvarati i pristupati objektima preko mreže pomoću iURL-ovi (Uniform Resource Location) su laki kao i lokalna mreža.

Java jezik pruža moćno i lako za korištenje web iskustvo. Svi koji su ikada pokušali pisati programe za rad na Internetu na drugim jezicima bit će ugodno iznenađeni kako se najteži zadaci, na primjer, otvaranje mrežnih veza (veza utičnica), lako rješavaju u Javi. Elegantan mehanizam takozvanih servleta čini rad servera izuzetno efikasnim.

Servleti su podržani od strane mnogih popularnih Web servera. (Umrežavanje će biti obrađeno u Svesku II.) Komunikaciju između distribuiranih objekata u Javi obezbeđuje mehanizam za pozivanje udaljenih metoda (ova tema je takođe pokrivena u Svesku 2).

Pouzdan

Jezik Java je dizajniran za kreiranje programa koji moraju pouzdano raditi u svim situacijama. Jezik Java fokusira se na rano otkrivanje grešaka, dinamičku provjeru (tokom izvršavanja programa) i izuzetke sklone greškama... Jedina značajna razlika između Jave i C++ je model Java pokazivača, koji isključuje mogućnost prepisivanja dijela oštećenje memorije i podataka.

Ova nekretnina je također vrlo korisna. Java kompajler detektuje greške koje drugi jezici pronalaze samo u toku rada. Osim toga, programeri koji su proveli mnogo sati tražeći grešku koja je uzrokovala oštećenje memorije zbog neispravnog pokazivača bit će vrlo srećna što se takvi problemi u principu ne mogu pojaviti u jeziku Java.

Ako ste prethodno programirali u Visual Basic ili COBOL jeziku koji ne koristi eksplicitno pokazivače, možda nećete razumjeti zašto je to toliko važno. C programeri su manje sretni. Potrebni su im pokazivači za pristup nizovima, nizovima, objektima, pa čak i datotekama. Prilikom programiranja u Visual Basic jeziku, ništa od ovoga nije potrebno, a programer ne mora da brine o alokaciji memorije za ove entitete. S druge strane, mnoge strukture podataka u jeziku bez pokazivača vrlo je teško implementirati. Za uobičajene strukture kao što su nizovi i nizovi, pokazivači nisu potrebni. Moć pokazivača dolazi u obzir samo tamo gdje ne možete bez njih, kao na primjer kada kreirate povezane liste. Java programer se zauvijek riješio nevažećih pokazivača, pogrešnih alokacija i curenja memorije.

Safe

Java jezik je namijenjen za korištenje u umreženom ili distribuiranom okruženju. Zbog toga je velika pažnja posvećena sigurnosti. Java jezik vam omogućava da kreirate sisteme koji su zaštićeni od virusa i neovlašćenog pristupa.

U prvom izdanju napisali smo: „Nikad ne reci nikad“ i bili smo u pravu. Grupa stručnjaka za sigurnost na Univerzitetu Princeton otkrila je prve sigurnosne greške u Javi 1.0 ubrzo nakon što je prva verzija JDK-a puštena u prodaju. Štaviše, i oni i drugi stručnjaci su nastavili i kasnije su otkrili sve više grešaka u sigurnosnim mehanizmima svih narednih verzija jezika Java.

Pozitivna strana ove situacije je to što je razvojni tim Java jezika proglasio nultu toleranciju za bilo kakve sigurnosne greške i odmah je počeo rješavati sve probleme pronađene u sigurnosnom mehanizmu apleta. Konkretno, objavljivanjem internih specifikacija Java interpretera, Sun je znatno olakšao pronalaženje skrivenih sigurnosnih grešaka i doveo je nezavisne stručnjake da ih pronađu.

Ovo je povećalo vjerovatnoću da će bilo kakve greške u sigurnosnom sistemu uskoro biti otkrivene. U svakom slučaju, izuzetno je teško prevariti sigurnosni sistem jezika Java. Do sada pronađene greške bile su gotovo suptilne i (relativno) malobrojne.

Sun-ova sigurnosna web stranica nalazi se na sljedećem URL-u: http://java.sun.com/sfaq/.

Evo nekih situacija koje Java sigurnosni sistem sprečava.

1) Prelijevanje steka izvršnog programa, što je uzrokovano ozloglašenim "crvom" koji se širio Internetom.

2) Oštećenje memorijskih područja izvan prostora koji je dodijeljen procesu.

3) Čitanje i pisanje lokalnih datoteka pomoću sigurnog učitavača klasa kao što je web pretraživač koji onemogućava pristup takvim datotekama.

Sve ove sigurnosne mjere su prikladne i obično rade besprijekorno, ali diskrecija nikada ne škodi. Iako su dosad pronađene greške bile daleko od trivijalnih, a detalji njihove pretrage često se drže u tajnosti, mora se priznati da je vjerovatno još uvijek nemoguće dokazati sigurnost Java jezika.

Vremenom su jeziku dodane nove zaštite. Počevši od verzije 1.1, koncept digitalno potpisanih klasa pojavio se u jeziku Java. Kada koristite digitalno potpisanu klasu, možete biti sigurni u autora. Ako joj vjerujete, ovoj klasi možete dodijeliti sve privilegije dostupne na vašem stroju.

Microsoftov alternativni mehanizam isporuke koda oslanja se na ActiveX tehnologiju i koristi samo digitalne potpise radi sigurnosti. Očigledno, to nije dovoljno - svaki korisnik Microsoft softvera može potvrditi da se programi poznatih proizvođača često kvare, stvarajući tako rizik od oštećenja podataka. Java sigurnost je mnogo pouzdanija od ActiveX tehnologije jer kontroliše aplikaciju od trenutka kada se pokrene i sprečava je da prouzrokuje štetu.

Nezavisna od arhitekture

Kompajler generiše objektnu datoteku, čiji format ne zavisi od arhitekture računara - prevedeni program može da radi na bilo kom procesoru pod kontrolom sistema za izvršavanje Java programa. Da bi to uradio, Java kompajler generiše komande bajt koda koje ne zavise od specifične arhitekture računara. Bajt kod je dizajniran na takav način da se može lako interpretirati na bilo kojoj mašini ili prevesti u mašinski ovisan kod u hodu.

Ovo nije nova ideja. Prije više od 20 godina, i Pascal implementacijski sistem Niclausa Wirtha i UCSD Pascal koristili su istu tehnologiju. Upotreba bajtkodova daje veliku prednost tokom izvršavanja programa (iako sinhrona kompilacija to kompenzira u mnogim slučajevima). Programeri jezika Java obavili su odličan posao u razvoju skupa instrukcija bajtkoda koje dobro funkcionišu na većini modernih računara, lako se pretvarajući u stvarne mašinske instrukcije.

Neovisno o mašini

Za razliku od C i C ++ jezika, Java specifikacija nema aspekte specifične za implementaciju. I veličina osnovnih tipova podataka i aritmetičke operacije nad njima su dobro definirane.

Na primjer, int u Javi uvijek znači 32-bitni cijeli broj. U C i C++, tip int može značiti ili 16-bitni ili 32-bitni cijeli broj, kao i cijeli broj proizvoljne veličine, prema izboru programera određenog kompajlera. Jedino ograničenje je da veličina tipa int ne može biti manja od veličine kratkog int i veličine dugog int. Fiksna veličina numeričkih tipova izbegava mnoge probleme povezane sa pokretanjem programa na različitim računarima. Binarni podaci se pohranjuju i prenose u fiksnom formatu, čime se također izbjegavaju nesporazumi povezani s različitim redoslijedom bajtova na različitim platformama (konflikt "veliki/mali endian"). Stringovi se čuvaju u standardnom Unicode formatu.

Biblioteke, koje su deo sistema, definišu mašinski nezavisan interfejs. Na primjer, jezik pruža apstraktnu klasu Window i njene implementacije za Unix, Windows i Macintosh operativne sisteme.

Svako ko je ikada pokušao da napiše program koji podjednako dobro radi na Windows-u, Macintosh-u i deset verzija Unixa zna da je to veoma težak zadatak. Java verzija je napravila herojski pokušaj da riješi ovaj problem pružanjem jednostavnog kompleta alata koji prilagođava uobičajene elemente korisničkog interfejsa širokom spektru softverskih platformi. Nažalost, biblioteka, koja je zahtijevala dosta rada, nije nam omogućila da postignemo prihvatljive rezultate na različitim platformama. (Istovremeno su se pojavile različite greške u grafičkim programima na različitim platformama.)

Međutim, ovo je bio samo početak. U mnogim aplikacijama, neovisnost stroja je daleko važnija od sofisticiranosti grafičkog korisničkog interfejsa. Ovo su aplikacije koje su imale koristi od Jave 1.0. Međutim, komplet alata za grafičko korisničko sučelje je sada potpuno redizajniran i više ne ovisi o korisničkom sučelju na glavnom računalu. Nova verzija je sadržajnija i, po našem mišljenju, korisniku privlačnija od prethodnih.

Interpreted

Java interpreter se može poslati na bilo koju mašinu i izvršiti bajtkod direktno na njemu. Pošto je uređivanje linkova lakši proces, razvoj softvera može postati mnogo brži i efikasniji.

Ovo može biti prednost pri razvoju aplikacija, ali citat je očigledno preterivanje. U svakom slučaju, Java kompajler u Java Software Development Kitu (JSDK) je prilično spor. (Neki kompajleri treće vrste, poput onih iz IBM-a, su mnogo brži.) Brzina ponovnog prevođenja je samo jedan faktor koji karakteriše efikasnost programskog okruženja. Kada uporedite brzinu Jave u odnosu na Visual Basic, možda ćete biti razočarani.

Visoke performanse

Dok su interpretirani bajtkodovi općenito više nego adekvatni u performansama, postoje situacije u kojima su potrebne još veće performanse. Bajtkodovi se mogu prevesti u hodu (u toku rada) u mašinske kodove za određeni procesor na kojem aplikacija radi.

Ako se interpretator koristi za izvršavanje bajtkodova, izraz "visoke performanse" ne bi trebao biti korišten. Međutim, na mnogim platformama moguća je drugačija vrsta kompilacije, koju obezbjeđuju kompajleri-JIT-ovi u pravom trenutku. Oni prevode bajt kod u mašinski ovisan kod, pohranjuju rezultat u memoriju, a zatim ga pozivaju po potrebi. Budući da se interpretacija izvodi samo jednom, ovaj pristup višestruko povećava brzinu rada.

Uprkos činjenici da su sinhroni prevodioci i dalje sporiji od kompajlera zavisnih od mašine, oni su u svakom slučaju mnogo brži od interpretatora, omogućavajući 10- ili čak 20-struko ubrzanje za neke programe. Ova tehnologija se stalno poboljšava i na kraju može dostići brzine koje tradicionalni prevodioci nikada ne mogu nadmašiti. Na primjer, sinhroni prevodilac može odrediti koji dio koda se izvršava češće i optimizirati ga za brzinu izvršavanja.

MULTI-THREAD

Pruža bolju interaktivnost i izvođenje programa.

Ako ste ikada pokušali da izvršite višenitna izračunavanja u bilo kom drugom programskom jeziku, bićete prijatno iznenađeni koliko je to lako uraditi u Javi. Java niti mogu iskoristiti prednosti višeprocesnih sistema ako to operativni sistem dozvoljava. Nažalost, implementacije streamova na većini platformi se veoma razlikuju jedna od druge, a programeri Java jezika ne pokušavaju da postignu uniformnost. Samo kod za pozivanje niti ostaje isti za sve mašine; Java jezik pomera implementaciju višenitnog rada na osnovni operativni sistem ili biblioteku niti. (Niti su obrađene u tom II.) Uprkos tome, jednostavnost višenitnog rada čini Javu tako privlačnom za razvoj serverskog softvera.

Dynamic

Na mnogo načina, Java je dinamičnija od C ili C++. Dizajniran je tako da se lako prilagođava okruženju koje se stalno mijenja. Nove metode i objekti mogu se slobodno dodavati u biblioteke bez nanošenja štete. Jezik Java olakšava dobijanje informacija o napretku programa.

Ovo je vrlo važno kada trebate dodati kod u program koji je već pokrenut. Vrhunski primjer za to je kod koji se preuzima sa Interneta za izvršavanje od strane pretraživača. U Javi 1.0 nije bilo lako dobiti informacije o napretku programa koji se izvršava, ali trenutna verzija Java jezika izlaže programeru i strukturu i ponašanje objekata programa koji se izvršava.
Ovo je veoma vredno za sisteme koji treba da analiziraju objekte tokom izvršavanja programa. Takvi sistemi uključuju GUI buildere, pametne debagere, dodatke i baze podataka objekata.

Java i Internet

Ideja je jednostavna - korisnici preuzimaju Java bajtkodove sa Interneta i izvršavaju ih na svojim mašinama. Java programi koji se pokreću na web pretraživačima nazivaju se apleti. Da biste koristili aplet, potreban vam je web pretraživač koji može tumačiti bajt kodove. Izvor jezika Java je licenciran od strane Suna, koji insistira da i sam jezik i struktura njegovih osnovnih biblioteka ostanu nepromijenjeni. Nažalost, u stvarnosti to nije slučaj. Različite verzije pretraživača Netscape i Internet Explorer podržavaju različite verzije jezika Java, od kojih su neke značajno zastarjele. Ova nesretna situacija stvara sve više prepreka u razvoju apleta koji koriste prednosti najnovije verzije jezika Java. Da bi rešio ovaj problem, Sun je razvio Java Plug-in, koji obezbeđuje najsavremenije okruženje za pokretanje Java programa zasnovano na Netscape i Internet Explorer pretraživačima.

Učitavanje apleta je kao ugrađivanje slike u web stranicu. Aplet postaje dio stranice, a tekst se obavija oko prostora koji zauzima. Međutim, razlika je u tome što je slika sada živa. Reaguje na korisničke komande, menja svoj izgled i obezbeđuje prenos podataka između računara na kojem se aplet pregleda i računara na kojem se aplet pokreće.

Učitavanje apleta je kao umetanje slike u web stranicu. Aplet postaje dio stranice, a tekst se obavija oko prostora koji zauzima. Poenta je da je slika "živa". Reaguje na unos korisnika, menja svoj izgled i prenosi podatke između računara koji pokreće aplet i računara koji pokreće aplet.

Na sl. 1.1 pokazuje dobar primjer dinamičke web stranice koja izvodi složene proračune i koristi aplet za prikaz molekula. Da biste bolje razumjeli strukturu molekule, možete je rotirati ili zumirati sliku pomoću miša. Takve manipulacije se ne mogu vršiti na statičnim web stranicama, ali apleti to omogućavaju. (Ovaj aplet se može naći na http: //jmol.sourceforge.net.)

Rice. 1.1. Jmol applet

Apleti se mogu koristiti za dodavanje novih dugmadi i tekstualnih polja na web stranicu. Međutim, ovi apleti se sporo učitavaju preko telefonske linije.

Slično se može učiniti sa dinamičkim HTML-om, obrascima jezika za označavanje hiperteksta (HTML) ili skript jezikom kao što je JavaScript. Naravno, prvi apleti su bili namijenjeni animaciji: vrteći se globusi, rasplesani likovi iz crtanih filmova, maštoviti tekstovi i tako dalje. Međutim, većina gore navedenih može raditi animirane GIF-ove, a Dynamic HTML, u kombinaciji sa skriptiranjem, čini mnogo više od apleta.

Kao rezultat nekompatibilnosti pretraživača i nedosljednog učitavanja preko sporih mrežnih veza, apleti koji ciljaju web stranice nisu bili veliki napredak. U lokalnim mrežama (intranetima) situacija je potpuno drugačija. Obično nemaju problema sa propusnim opsegom, pa je vrijeme učitavanja apleta nevažno. Na lokalnoj mreži možete odabrati željeni pretraživač ili koristiti Java Plug-In program. Zaposleni ne mogu premjestiti program koji se isporučuje preko mreže na pogrešnu lokaciju ili ga pogrešno instalirati, a administrator sistema ne mora zaobići sve klijentske mašine i ažurirati programe na njima. Veliki broj programa dizajniranih za obračun zaliha, zakazivanje godišnjih odmora, nadoknadu putovanja i slično razvile su mnoge korporacije u obliku appleta baziranih na pretraživaču.

Dok smo pisali knjigu, klatno se ponovo okrenulo sa klijentskih programa na programiranje na strani servera. Konkretno, aplikacijski serveri mogu koristiti mogućnosti nadzora Java virtuelne mašine za automatsko balansiranje opterećenja, povezivanje veza baze podataka, sinhronizaciju objekata, sigurno gašenje i ponovno učitavanje i druge procese potrebne za skalabilne serverske aplikacije, koje je gotovo nemoguće ispravno implementirati. Stoga su programeri koji kreiraju aplikacije mogli kupiti ove složene mehanizme umjesto da ih sami razvijaju. Ovo je povećalo produktivnost programera - fokusirali su se na logiku svojih programa, a da ih ne ometaju detalji povezani sa radom servera.

Java zona developerWorks sadrži stotine članaka, tutorijala, savjeta i sadržaja iz Java zajednice koji će vam pomoći da izvučete maksimum iz Java platforme i povezanih tehnologija prilikom razvoja aplikacija. Međutim, ambicioznim programerima koji tek počinju sa Javom može biti teško da se snađu u ogromnom broju resursa dostupnih na Internetu. Stoga smo kreirali ovu stranicu, koja pruža pregled osnovnih Java tehnologija u opštem kontekstu mogućnosti ovog jezika. Pronađite veze do resursa za dalje učenje Jave, kao što su članci developerWorksa za početnike i drugi obrazovni resursi, te veze za preuzimanje za IBM proizvode.

Da li ste ambiciozni Java programer? Ova stranica pruža pregled glavnih Java™ tehnologija i njihovog mjesta u razvoju modernog softvera. Sa linkovima na uvodne članke developerWorksa o ovoj i srodnim temama, drugim obrazovnim materijalima, preuzimanjima i IBM proizvodima, ova stranica je odlična polazna tačka za učenje Jave.

Šta su "Java tehnologije"?

Java je i programski jezik i platforma.

Prvo, Java je objektno orijentisana na visokom nivou programski jezik... At kompilacija, koji se izvršava jednom tokom izrade aplikacije, Java kod se konvertuje u kod srednjeg jezika ( bytecode). Zauzvrat, bajt kod se analizira i izvršava ( interpretirano) Java virtuelna mašina (JVM), koja deluje kao prevodilac između jezika Java i hardvera operativnog sistema. Sve Java implementacije moraju emulirati JVM tako da se aplikacije koje pišete mogu izvoditi na bilo kojem sistemu koji uključuje Java virtuelnu mašinu.

Drugo, Java jeste softverska platforma, čije se verzije isporučuju za različite hardverske sisteme. Postoje tri verzije Jave (pogledajte odjeljak Izdanja Java platforme ispod). Platforma uključuje JVM i Java Application Programming Interface (API), koji je opsežan skup gotovih softverskih komponenti (klasa) koje olakšavaju razvoj i implementaciju apleta i aplikacija. Java API pokriva mnoge aspekte razvoja Jave, uključujući osnovnu manipulaciju objektima, mrežno programiranje, sigurnost, generiranje XML-a i web usluge. API je organiziran kao skup biblioteka tzv u paketima koji sadrže klase i interfejse za rešavanje povezanih problema.

Pored API-ja, svaka potpuna implementacija Java platforme mora uključivati ​​sljedeće:

  • Alati za programere za kompajliranje, pokretanje, praćenje, otklanjanje grešaka i dokumentovanje aplikacija.
  • Standardni mehanizmi za postavljanje aplikacija u korisničko okruženje.
  • Setovi alata koji vam omogućavaju da kreirate složena grafička korisnička sučelja.
  • Integracijske biblioteke za programski pristup bazama podataka i udaljenu manipulaciju objektima.

JVM je također dokazani okvir za pokretanje aplikacija napisanih na jezicima koji nisu Java. Konkretno, Groovy, Scala i specijalizirane implementacije Ruby-a i Python-a pružaju programerima mogućnost izvršavanja dinamičkih i funkcionalnih jezika na JVM-u (za više informacija pogledajte Kakva je Java veza s dinamičkim jezicima i funkcionalnim programiranjem?) .

Java jezik je razvio Sun Microsystems. Trenutno se razvoj Java tehnologija, uključujući rad na specifikacijama, referentnim implementacijama i testovima kompatibilnosti, odvija pod kontrolom otvorene neprofitne organizacije JCP (Java Community Process), koja okuplja Java programere i korisnike licenci. Sun je 2007. objavio besplatnu verziju Jave, koja uključuje osnovne komponente platforme, pod GNU GPL v2 (GPLv2) licencom. Više o ovoj verziji možete pročitati u odjeljku Java i razvoj besplatnog softvera.

Zašto biste trebali naučiti Javu?

Glavna prednost Java jezika je prenosivost Java aplikacija, tj. Mogućnost rada na bilo kojoj hardverskoj platformi i operativnom sistemu, budući da su svi JVM-ovi, bez obzira na kojoj platformi rade, sposobni da izvršavaju isti bajt kod.

Java jezik i platforma su izuzetno skalabilni. Možete lako kreirati aplikacije za uređaje sa ograničenim resursima prilagođavanjem softvera koji je originalno napisan za desktop. Međutim, Java je takođe idealna za razvoj Web aplikacija na strani servera koje omogućavaju korisniku pristup računarskim resursima na Webu. Mogućnost sigurnog izvršavanja koda učitanog preko weba prvobitno je ugrađena u Javu, tako da Java pruža visok nivo sigurnosti pri radu preko Interneta. Web aplikacije se pokreću u runtime okruženjima tzv Web kontejneri koji pružaju mnoge zgodne usluge, uključujući slanje zahtjeva, sigurnost i istovremenost, upravljanje životnim ciklusom i pristup API-jima kao što su imenovanje, upravljanje transakcijama i e-pošta. Neki od njih su napisani u Javi serveri aplikacija koji se ponašaju kao Web kontejneri za druge komponente Java, XML i Web usluga koje su u interakciji s bazama podataka i dinamički prikazuju sadržaj web stranice. Ovi serveri takođe obezbeđuju okruženje za primenu poslovnih aplikacija i alata za upravljanje transakcijama, grupisanje, sigurnost, povezanost i potrebne nivoe dostupnosti, performansi i skalabilnosti.

Podržavajući upotrebu otvorenih standarda u poslovnim aplikacijama, Java otvara velike mogućnosti za korištenje web usluga zasnovanih na XML-u kako bi pomogla poslovnim partnerima u razmjeni informacionih resursa i aplikacija. Java je u srcu mnogih IBM-ovih tehničkih konsultantskih proizvoda i usluga (IBM proizvodi i tehnologije za Java programere) i igra ključnu ulogu u nekoliko ključnih poslova kompanije.

  • Istražite IBM pristup i naučite kako vam SOA može pomoći da kreirate heterogene aplikacije s funkcionalnošću iz više izvora, kako unutar tako i izvan poduzeća, podržavajući tako horizontalne poslovne procese. IBM pruža niz poslovnih korisnika i IT profesionalaca koji će vam pomoći da počnete s ovom tehnologijom.
  • je pristup baziran na komponentama koji nudi IBM i koji pruža čitav niz mogućnosti za strateške promjene. Pružena rješenja su zasnovana na fleksibilnom, proširivom softveru zasnovanom na otvorenim standardima (uključujući Javu) i hardverskoj infrastrukturi.

Izdanja Java platforme
Postoje tri izdanja Java platforme koja omogućavaju programerima aplikacija, dobavljačima usluga i proizvođačima hardvera da kreiraju rješenja koja zadovoljavaju potrebe određenih grupa korisnika.

  • Java SE (Java platforma, standardno izdanje)... Koristeći Java SE, možete izgraditi i implementirati Java aplikacije za desktop i servere, te razviti ugrađeni softver i programe za sisteme u realnom vremenu. Java SE izdanje uključuje klase potrebne za kreiranje Web usluga i osnovne komponente Java EE (Java Platform, Enterprise Edition). Trenutna verzija Java SE platforme je Java SE 6, poznata i kao "Mustang". Međutim, mnogi programeri još uvijek koriste Java SE 5 (Java 5.0, ili "Tiger").
    • Za odličan pregled Java SE 5 funkcija, pogledajte članke u kolumni. Većina aspekata programiranja za Java SE 5 platformu, za koju su izgrađene mnoge postojeće aplikacije, i dalje su relevantne za Javu SE 6.
    • Ovaj članak opisuje nove funkcije u Javi SE 6 za praćenje i procjenu performansi aplikacije.
    • Ovaj članak pruža uvod u jezik skriptiranja koji radi na platformi Java SE 6 i služi da pojednostavi programiranje složenih korisničkih interfejsa.
    • Ova dvodijelna serija pod naslovom pruža uvod u API koji pruža Java SE 6 koji omogućava Java aplikacijama da izvršavaju dinamički skriptni kod i obrnuto. ...
  • Java EE (Java Platforma, Enterprise Edition)... Ova poslovna verzija platforme pomaže programerima da izgrade i implementiraju prenosive, pouzdane, skalabilne i sigurne Java aplikacije na strani servera. Nadovezujući se na mogućnosti Java SE, Java EE pruža Web usluge, modele komponenti, udaljene i upravljačke API-je za implementaciju poslovnog softvera u SOA-i i Web 2.0.
    • Pročitajte članke i za uvodni pregled mogućnosti najnovije verzije Java EE platforme.
    • Pogledajte seriju - popularan okvir za izgradnju laganih i pouzdanih Java EE aplikacija.
    • Za više informacija o Javi EE, pogledajte članke u koloni.
    • Članci u seriji Početak rada: Migracija na Java platformu napisani su posebno za .NET, Windows klijent/server i ASP programere kako bi im pomogli da pređu na Javu.
  • Java ME (Java platforma, mikro izdanje)... Java ME pruža okruženje za izvršavanje aplikacija napravljenih za širok spektar mobilnih i ugrađenih sistema kao što su mobilni telefoni, PDA uređaji, set-top box uređaji i štampači. Ovo izdanje platforme pruža fleksibilna korisnička sučelja, robustan sigurnosni model, cijeli niz ugrađenih mrežnih protokola i moćnu podršku za mrežne i vanmrežne dinamički učitane aplikacije. Aplikacije zasnovane na Java ME specifikacijama mogu raditi na različitim uređajima i još uvijek biti u mogućnosti da iskoriste svoje sistemske mogućnosti.

Koje su tehnologije glavne komponente Java platforme?

Java zona developerWorks sadrži uključenu Javu. U nastavku su navedene neke od komponenti, mogući paketi dodataka i proširenja uključena u svako izdanje platforme. Svaka tehnologija ima kratak opis i vezu do resursa koji opisuju njeno mjesto u svijetu Java. Imajte na umu da su mnoge komponente uključene u sva tri izdanja Java platforme.

Tehnologije uključene u Java SE:

  • Java Foundation Classes (Swing)(JFC) je zbirka biblioteka Java klasa koje se koriste za kreiranje grafičkih korisničkih interfejsa i drugih grafičkih funkcija u Java klijentskim aplikacijama. Menadžment .
  • JavaHelp je platformski nezavisan proširivi sistem pomoći koji omogućava programerima i tehničkim piscima da ugrade stranice pomoći u aplete, softverske komponente, aplikacije, operativne sisteme i uređaje, i kreiraju sisteme za veb pomoć. Pogledajte članak.
  • Hvala za Java izvorni interfejs(JNI) Java aplikacije koje se pokreću unutar JVM-a mogu komunicirati sa programima i bibliotekama napisanim na drugim programskim jezicima.
  • Tehnologija Java Web Start Pojednostavljuje primenu Java aplikacija omogućavajući korisnicima da preuzmu i pokreću bogat softver, kao što su tabele, klikom na dugme miša, bez instalacije (pogledajte članak).
  • Povezivanje Java baze podataka(JDBC) je API koji pruža sredstva za pristup većini relacijskih izvora podataka iz Java aplikacija. Može se povezati sa mnogim SQL bazama podataka, kao i sa drugim tabelarnim izvorima podataka kao što su proračunske tablice i ravni fajlovi.
  • Java Advanced Imaging(JAI) je objektno orijentirani API koji pruža jednostavan model programiranja visokog nivoa za pojednostavljenje manipulacije slikama.
  • Java Authentication and Authorization Service(JAAS) je tehnologija koja pruža usluge sa sredstvima za autentifikaciju korisnika i provjeru njihovih prava pristupa. Uključuje Java implementaciju standardnog PAM (Pluggable Authentication Module) okvira i podržava autorizaciju na nivou korisnika.
  • Java Cryptography Extension(JCE) je skup paketa koji obezbjeđuju infrastrukturu i implementacije za enkripciju, generiranje i razmjenu ključeva i algoritame koda za provjeru autentičnosti poruke (MAC). Ova tehnologija također uključuje podršku za simetrične, asimetrične, blokovne i stream šifre, kao i za stream-safe i zapečaćene objekte. Više detalja možete pronaći u priručniku.
  • Java objekti podataka(JDO) je standardni apstraktni model postojanosti za Java objekte zasnovan na interfejsima. Omogućava programerima da direktno pohranjuju instance domenskih Java klasa u trajno skladište (kao što je baza podataka). U nekim slučajevima, ovaj model može zamijeniti direktno upisivanje u datoteku, serijalizaciju, JDBC, kao i korištenje EJB komponenti na strani servera, kojima upravljaju kontejneri (Container Managed Persistence - CMP) i nezavisno pohranjujuće stanje (Bean Managed Persistence - BMP).
  • Plasticna kesa Java Management Extensions(JMX) pruža alate za izgradnju distribuiranih, modularnih, dinamičkih i Web dostupnih aplikacija za upravljanje i nadgledanje uređaja, softvera i mreža na osnovu pružanja usluga (pogledajte članak).
  • Java Media Framework(JMF) vam omogućava da dodate audio, video i druge medijske informacije u Java aplikacije i aplete (pogledajte priručnik).
  • Java imenovanje i interfejs imenika(JNDI) je objedinjeno sučelje za pristup različitim imenima i uslugama imenika na korporativnoj mreži. Omogućava aplikacijama da se efikasno povežu na različite usluge imenovanja i imenika u heterogenom okruženju preduzeća.
  • Java Secure Socket Extensions(JSSE) je zbirka paketa za sigurnu razmjenu informacija na Internetu. Oni implementiraju Java verziju protokola Secure Sockets Layer (SSL) i Transport Layer Security (TLS) i obezbjeđuju sredstva za šifriranje podataka, provjeru integriteta poruke i autentifikaciju na serveru i klijentu (potonje je opciono).
  • Java Speech API(JSAPI) uključuje JSGF (Java Speech Grammar Format) i JSML (Java Speech Markup Language) specifikacije. Ovaj paket pruža mogućnosti za korištenje govornih tehnologija u korisničkom interfejsu. JSAPI je višeplatformski API za podršku prepoznavanju glasovnih komandi, sistemima za unos govora i sintezi govora. Za više detalja pogledajte sljedeći odjeljak članka.
  • Java 3D je API koji pruža višeplatformske i skalabilne mogućnosti za rad sa 3D grafikom u Java aplikacijama. API je organiziran kao skup objektno orijentiranih sučelja koji se sklapaju u jedan, jednostavan model programiranja visokog nivoa.
  • Mehanizam Metadata Facility Omogućava programerima da definiraju atribute za klase, sučelja, polja i metode tako da mogu biti podvrgnuti posebnom rukovanju razvojnim alatima, alatima za implementaciju i bibliotekama trećih strana u vrijeme izvođenja (pogledajte članak).
  • Java Content Repository API je API za pristup spremištima sadržaja u Java SE, bez obzira na njihovu implementaciju. Takva spremišta su sistemi za upravljanje informacijama visokog nivoa i proširene su verzije klasičnih spremišta podataka.
  • Enumerations(enumeracija) je tip podataka koji vam omogućava da opišete različite stavke podataka kao otkucani skup konstanti.
  • Generici(generički tipovi) vam omogućavaju da kreirate klase sa parametrima (apstraktnim tipovima) koji su specificirani u fazi instanciranja. Pogledajte članak za detalje, a također pogledajte članak o tome kako generički tipovi olakšavaju rad s kolekcijama u Javi SE 6.0.
  • Komunalne usluge Konkurencija je skup klasa koje pružaju funkcionalnost srednjeg sloja tipično potrebnu za aplikacije za paralelnu obradu.
  • Java API za XML obradu(JAXP) je API koji Java aplikacije mogu koristiti za raščlanjivanje i transformaciju XML dokumenata, bez obzira na korišteni XML procesor. Ovo omogućava aplikacijama da lako prelaze između različitih procesora bez promjene koda aplikacije. Zauzvrat, JAXB tehnologija ( Java API za XML povezivanje) pruža mogućnosti za automatizaciju mapiranja XML dokumenata i Java objekata.
  • SOAP sa prilozima API za Javu(SAAJ) pruža programerima funkcije za generiranje i obradu poruka u skladu sa SOAP 1.1 specifikacijom, specificirajući SOAP sa prilozima. Za više detalja pogledajte članak).

J2EE tehnologije:

  • Enterprise JavaBeans(EJB) je model komponenti koji pojednostavljuje razvoj međuopreme pružanjem usluga kao što su upravljanje transakcijama, sigurnost i povezivanje baze podataka.
  • Specifikacija portleta definira skup API-ja za izgradnju portala u Javi, pokrivajući aspekte kao što su agregacija i prezentacija informacija, personalizacija i sigurnost (pogledajte članak).
  • JavaMail je API koji pruža skup apstraktnih klasa koje modeliraju sistem pošte.
  • Java Message Service(JMS) je API koji podržava kreiranje prenosivih Java aplikacija za razmjenu poruka. Definiše zajednički skup osnovnih koncepata i programskih strategija za sve JMS-kompatibilne sisteme za razmenu poruka.
  • JavaServer Faces(JSF) pruža model programiranja koji vam pomaže da izgradite Web aplikacije sastavljanjem stranica od komponenti korisničkog interfejsa za višekratnu upotrebu, povezivanjem tih komponenti za izvore podataka i događajima koje generiše klijent za rukovaoce servera. Za više informacija pogledajte vodič iz dva dijela i seriju članaka iz serije kolumni.
  • JavaServer Pages(JSP) pruža Web programerima sredstva za brzo kreiranje i jednostavno održavanje dinamičnih web stranica na više platformi koje razdvajaju korisničko sučelje i generiranje sadržaja tako da dizajneri mogu mijenjati oznake bez dodirivanja dinamički generiranog sadržaja (pogledajte vodič.
  • Standardna biblioteka oznaka za stranice JavaServera(JSTL) je kolekcija specijaliziranih oznaka koje pružaju standardni format za izvođenje radnji koje zahtijevaju mnoge web aplikacije. Pogledajte Osvježite svoje JSP stranice pomoću JSTL-a i seriju od četiri dijela pod nazivom.
  • Java servleti proširite funkcionalnost Web servera pružanjem višeplatformskog pristupa zasnovanog na komponentama za izgradnju Web aplikacija koji je slobodan od ograničenja performansi CGI.
  • Arhitektura J2EE konektora(JCA) pruža standardnu ​​arhitekturu za povezivanje J2EE aplikacija sa heterogenim informacionim sistemima preduzeća (EIS). Ova arhitektura definira skup skalabilnih i sigurnih mehanizama zasnovanih na transakcijama pomoću kojih dobavljači EIS-a mogu obezbijediti standardne adaptere resursa za uključivanje u poslužitelj aplikacija. Za više informacija pogledajte članke i priručnik.
  • J2EE specifikacija upravljanja(JMX) definira model upravljanja informacijama za J2EE platformu. Ovaj model je posebno dizajniran za interakciju sa mnogim sistemima i kontrolnim protokolima. Sadrži standardne alate za mapiranje na zajednički informacioni model (CIM), SNMP bazu informacija za upravljanje (MIB) i Java objektni model koristeći J2EE upravljačku EJB komponentu (MEJB) rezidentni server EJB.
  • Java Transaction API(JTA) je API na visokom nivou za implementaciju i nezavisan od protokola koji pruža programima i aplikacijskim serverima sredstva za pristup transakcijama. Java Transaction Service(JTS) definiše implementaciju menadžera transakcija koji podržava JTA i implementira, na osnovnom nivou, mapiranje na Object Transaction Service (OTS 1.1) OMG-a. Proširivanje transakcije u JTS-u se implementira korištenjem Inter-ORB protokola (IIOP). Za više detalja pogledajte članak.

Tehnologije koje su dio J2ME:

  • Mobile Information Device Profile(MIDP) je jedna od dvije konfiguracije koje čine Java runtime okruženje za mobilne uređaje sa ograničenim resursima. MIDP pruža osnovnu funkcionalnost za aplikacije, uključujući alate za kreiranje korisničkih interfejsa, povezivanje sa mrežnim resursima, lokalno skladištenje podataka i upravljanje životnim ciklusom.
  • Konfiguracija povezanog uređaja(CDC) je standardizirana infrastruktura za izgradnju i implementaciju aplikacija kojoj se može pristupiti s mnogih umreženih i ugrađenih uređaja.
  • Mobile 3D Graphics API za J2ME(M3G) je lagani interaktivni 3D API koji je dodatak J2ME. Više o njemu možete pročitati u dvodijelnoj seriji.

Java tehnologije i razvoj web aplikacija

Java je već dugi niz godina primarni jezik za razvoj Web aplikacija. Poslednjih godina pojavili su se mnogi okviri i biblioteke koje olakšavaju kreiranje Java Web aplikacija, uključujući bogate interaktivne Web 2.0 aplikacije.

Pogledajte sljedeće resurse za Java Web Development.

  • Ova kolumna predstavlja Grails, moderan okvir za izgradnju web aplikacija napisan u Groovy. Grails vam omogućava da neprimetno kombinujete prethodno napisani Java kod sa mogućnošću korišćenja fleksibilnog i dinamičkog jezika za skriptovanje. Za više informacija o Groovyju, pogledajte kakav je odnos Jave prema dinamičkim jezicima i funkcionalnom programiranju ispod?.
  • Ajax je programska metodologija koja koristi jezike za skriptiranje na strani klijenta za komunikaciju s web serverom tako da se stranice mogu brzo osvježiti bez potrebe za potpuno ponovnim učitavanjem. U ovoj seriji članaka ćete naučiti kako vam Ajax može pomoći kao Java programeru. Pogledajte developerWorks za više informacija.
  • JavaServer Faces (JSF) pruža model programiranja koji vam pomaže da izgradite Web aplikacije sastavljanjem stranica od komponenti korisničkog interfejsa za višekratnu upotrebu, povezujući te komponente sa izvorima podataka i događaje generisane klijentom sa serverskim rukovaocima. Za više informacija pogledajte vodič iz dva dijela i seriju članaka u seriji kolumni.
  • Eclipse Web Tools Platform (WTP) proširuje popularno Eclipse razvojno okruženje dodavanjem alata za pravljenje Web aplikacija zasnovanih na Java EE tehnologijama (pogledajte tutorijal).
  • Pogledajte developerWorks za mnoge druge odlične materijale o ovim temama.

Java Technologies, SOA i Web Services

Service Oriented Architecture (SOA) je komponentni model koji povezuje funkcionalne module aplikacije (poznate kao Usluge odakle dolazi taj termin Web usluge) kroz strogo opisane interfejse i ugovore. Definicije interfejsa su nezavisne od hardvera, operativnog sistema i programskog jezika u kojem je usluga implementirana, čime se održava jedinstvena komunikacija između usluga koje su komponente različitih sistema. SOA je primjer labavo spregnutog modela programiranja koji pruža alternativu klasičnim čvrsto povezanim objektno orijentiranim modelima.

Kreirani na ovom principu, web servisi vam omogućavaju da opišete poslovna pravila i procese u XML-u, tako da se interakcija aplikacija može obavljati bez obzira na platforme i programske jezike koji se koriste. XML tehnologije promovišu prenosivost podataka i pojednostavljuju kreiranje poruka, dok Java tehnologije omogućavaju pisanje prenosivog koda. XML i Java dobro funkcionišu zajedno, što ih čini savršenom kombinacijom tehnologija za izgradnju i implementaciju Web usluga.

Za više informacija pročitajte sljedeće materijale:

  • Stranice i stranice DeveloperWorksa mogu vam pomoći da se krećete kroz ove izazovne tehnologije.
  • U ovoj seriji ćete naučiti o infrastrukturi Java Web usluga i novim funkcionalnim slojevima koji su izgrađeni na tim uslugama.
  • Ovaj članak predstavlja elegantan stil dizajna web usluga pod nazivom Representational State Transfer (REST) ​​i objašnjava kako koristiti Javu za izgradnju RESTful Web usluga.
  • Razumijevanje JAX-RPC (Java API-based RPC za rad sa XML) tehnologije je od suštinskog značaja za kreiranje efikasnih Java Web usluga.
  • JAX-WS je očigledan sljedeći korak u evoluciji JAX-RPC-a. Praktični uvod u ovaj novi API dat je u tutorijalu.
  • Ova serija je vodič za arhitekturu komponenti usluga (SCA), specifikaciju koja opisuje SOA model za razvoj aplikacija i sistema.
  • Ovaj članak pruža uvod u okvir Service Data Objects, koji pojednostavljuje Java EE model podataka za izgradnju SOA aplikacija.

Kakve veze Java ima sa dinamičkim jezicima i funkcionalnim programiranjem?

Mnogi programeri koji počinju sa Javom imaju veliko iskustvo sa drugim programskim jezicima. Istovremeno, čak i najugledniji programeri priznaju da Java nije idealan jezik za rješavanje od svega problemi sa kojima se susreće u praksi. Srećom, uz podršku za JVM, možete u potpunosti iskoristiti današnje dinamičke skripte i funkcionalne jezike kada razvijate aplikacije za Java platformu. Fleksibilnost i dinamičnost ovih jezika pokazali su se vrlo korisnim prilikom izrade prototipa i implementacije određenih vrsta aplikacija.

Više o mogućnostima korištenja dinamičkih i funkcionalnih jezika na Java platformi možete pročitati u materijalima, linkovi do kojih su dati u nastavku.

  • Groovy skriptni jezik omogućava Java programerima da koriste svoje najpoznatije jezičke konstrukcije i biblioteke, istovremeno pružajući fleksibilno, dinamično razvojno okruženje koje ne zahtijeva kompilaciju, pojednostavljuje sintaksu i podržava skriptiranje unutar uobičajenih Java aplikacija. Detaljan pregled mogućnosti ovog jezika dat je u člancima u seriji.
  • Novi API za skriptiranje u Javi SE 6, koji je kompatibilan sa Java SE 5 i sadrži mali skup interfejsa i klasa, pruža jednostavan način za pozivanje skripti napisanih na desetinama jezika iz Java koda. Pomoću njega možete učitati i pozvati vanjske skripte u vrijeme izvođenja, dinamički mijenjajući ponašanje vaše aplikacije. Više o ovom API-ju možete pročitati u dvodijelnoj seriji pod naslovom.
  • Da li ste vatreni pobornik funkcionalnog programiranja? Zatim treba obratiti pažnju na kolonu u kojoj se govori o Scali, programskom jeziku za JVM koji kombinuje funkcionalan i objektno orijentisan pristup razvoju.
  • VM-ovi već dugo podržavaju alternativne programske jezike. U člancima u kolumni možete pročitati o JVM implementacijama jezika kao što su Rexx, Ruby, JavaScript, Python i neki drugi.

Java i razvoj besplatnog softvera

Postoji bezbroj načina za pravljenje Java biblioteka, kompleta alata, okvira, programa i aplikacijskih servera koji otvaraju dodatne mogućnosti programerima da iskoriste ovu moćnu platformu. Određeni broj besplatnih tehnologija je tokom vremena ugrađen u Java platformu, dok su druge ostale popularne kod Java programera tokom godina, u nekim slučajevima djelujući kao de facto standardi.

  • Apache Software Foundation (EN) okuplja mnoge projekte otvorenog koda, od kojih je većina razvijena pomoću Java tehnologije. Neki od članova ove porodice projekata su navedeni u nastavku.
    • Apache Struts je okvir za izgradnju Web aplikacija koje prate arhitekturu Model-View-Controller.
    • Apache Shale je još jedan moderan okvir za pravljenje web aplikacija koji je naslijeđen od Struts-a i baziran je na JSP (JavaServer Pages) tehnologiji. Za uvod u Shale pogledajte članke u seriji.
    • Apache Ant je de facto standard za automatizaciju procesa izgradnje Java aplikacija.
    • Apache Maven Build Tool dizajniran je imajući na umu zahtjeve modernih softverskih projekata, sa dinamičkom interakcijom između razvojnih timova i oslanjanjem na mnoge nezavisno podržane komponente (pogledajte vodič).
    • Apache Tomcat je popularan Web kontejner koji podržava servlete i stranice Java servera (JSP).
    • Projekat Apache Geronimo se odnosi na kreiranje potpuno kompatibilnog sa specifikacijama Java EE servera aplikacija zasnovanog na čisto besplatnoj tehnologiji. Možete pročitati više o Geronimu u ovom članku i na web stranici developerWorks za obilje korisnog sadržaja.
    • Apache Derby je server relacijske baze podataka u potpunosti implementiran u Javi. Uvod u Derby je dat u članku.
  • Eclipse (EN) je otvorena i nezavisna razvojna platforma i skup osnovnih alata za pravljenje softvera. Napisan je na Javi i pruža dodatnu infrastrukturu koja olakšava razvoj, integraciju i korištenje softverskih alata. IBM je jedan od osnivača Eclipse.org i aktivno učestvuje u upravnom odboru i pododborima projekta. O nekim komponentnim tehnologijama Eclipse platforme za kreiranje Java aplikacija možete pročitati u sljedećim materijalima:
    • AspectJ je aspektno orijentisana ekstenzija za jezik Java koja se može koristiti za modularnu implementaciju unakrsne funkcionalnosti kao što je evidentiranje ili rukovanje izuzetcima.
    • Standardni komplet alata za vidžete (EN) (SWT) je komplet alata koji vam omogućava da iskoristite snagu operativnog sistema za kreiranje elemenata korisničkog interfejsa na efikasan i prenosiv način.
    • Mylyn je moćan sistem upravljanja poslovima za Eclipse korisnike. Za detaljne upute pogledajte članke i, ranije poznat kao "Acegi Security for Spring", je moćno i fleksibilno sigurnosno rješenje za poslovne aplikacije izgrađeno na vrhu Spring okvira. To je detaljno obrađeno u četiri članka iz serije.
  • Sun Microsystems je takođe pokrenuo sledeće projekte zajednice na java.net:
    • Openjdk

Kako razviti vještine Java programiranja?

Postoje dva glavna načina na koje možete razviti svoje vještine programiranja na Javi: pohađati namjenski kurs obuke (sa opcijama sertifikacije) ili naučiti Javu samostalno vježbajući kodiranje. Kursevi obuke ne samo da vam omogućavaju da učite iz iskustva kvalifikovanih programera, već vam takođe pružaju priliku da dobijete sertifikat koji može da ubedi potencijalnog poslodavca da posedujete veštine neophodne da odgovorite na tehničke izazove sa kojima se suočavamo. Na taj način možete produbiti svoje znanje u različitim oblastima Jave, samostalno eksperimentišući i koristeći sve raspoložive resurse. Koji god put da odaberete, sljedeći resursi će vam pomoći.

  • Vodiči i članci
    • DeveloperWorks ima opsežnu kolekciju koja je na drugom mjestu nakon samog kodiranja u smislu korisnosti u učenju Jave.
    • Članci su serije i odlični su za poboljšanje vaših vještina Java jezika.
    • Korištenje teorije dizajna za kreiranje aplikacija u stvarnom svijetu raspravlja se u člancima u seriji.
    • Iskusni Java programeri unaprijed ugrađuju alate u svoje aplikacije kako bi ih otklonili i testirali. DeveloperWorks ima nekoliko članaka u seriji - Eclipse-bazirane igre u realnom vremenu za učenje Java programiranja. Za uvod u CodeRuler pogledajte Osvajanje srednjovjekovnih kraljevstava pomoću CodeRulera.
  • IBM-ovi kursevi tehničke obuke
    • Uživajte u širokom spektru Java kurseva na mreži, licem u lice i multimedija od IBM Global Services.
  • Certifikat
    • Možete polagati nekoliko ispita da biste stekli certifikate koji pokazuju vaše vještine programiranja na Javi. Za kurseve za certifikaciju pogledajte web stranicu Java Certification.
    • IBM osnažuje vaše vještine u tehnologijama vezanim za Java, kao što je izgradnja poslovnih aplikacija za WebSphere, Rational softver, DB2, XML i SOA.
  • Forumi
    • Moderiran od strane stručnjaka sa dugogodišnjim iskustvom u tehnologiji Java, ovo je najinteraktivniji način učenja jezika Java.

IBM proizvodi i tehnologije za Java programere

IBM je jedan od lidera u praktičnoj primeni Java tehnologija. Sljedeće su veze na neke od IBM proizvoda i tehnologija dostupnih programerima za Java platformu.

  • Besplatni proizvodi za preuzimanje:
    • (Java Developer Kit) je kolekcija alata za pravljenje i testiranje apleta i aplikacija za Java SE i Java ME na raznim popularnim operativnim sistemima, uključujući Windows, Linux i AIX.
    • (IBM razvojni paket za Eclipse) je Eclipse-bazirani nepodržani komplet alata za razvojne programere koji vam omogućava da izgradite i pokrenete aplikacije u vašem vlastitom gotovom razvojnom okruženju.
    • : Možete preuzeti besplatne Eclipse softverske pakete sa developerWorksa, uključujući paralelne proizvode Calisto i Europa.
    • je virtuelno skladište obećavajućih Java tehnologija koje se razvijaju u IBM-u. To uključuje API-je, IDE, razvojne komplete, referentne implementacije i uslužne programe. Ispod su linkovi za neke od tehnologija predstavljenih u alphaWorksu.
    • ... Ovaj uslužni program vam pomaže da raščlanite i generišete probne Ant skripte za izgradnju projekata razvijenih sa Eclipse, Rational i WebSphere IDE za Java EE i SCA platforme.
    • (IBM alat za modeliranje i analizu uzoraka za Java Garbage Collector). Ovaj uslužni program analizira detaljne GC datoteke praćenja, analizira upotrebu memorije hrpe (hrpe) i preporučuje podešavanje aplikacije na osnovu rezultata simulacije memorije. (Secure Shell Library za Javu) je lagana implementacija SSH-2 protokola razvijena od strane Internet Engineering Task Force (IETF). Pruža sigurne alate za autentifikaciju i druge sigurne usluge koje rade preko nezaštićene mreže. omogućava vam da konsolidujete i transformišete podatke, čime se povećava produktivnost, fleksibilnost i produktivnost vašeg poslovanja pružanjem brzog pristupa informacijama koje su vam potrebne.

Šta je informaciona sigurnost? Ovo je stanje sigurnosti informacija koje osigurava njihovu povjerljivost, dostupnost i integritet.

Obično je za procjenu stanja informacione sigurnosti potrebno razumjeti i analizirati prijetnje i njihove izvore, procijeniti nivo štete, vjerovatnoću implementacije i relevantnost prijetnji, rizika (opciono) koji mogu uticati na naš sistem/ informacije.

Po mom mišljenju, nemoguće je procijeniti sigurnost određene tehnologije ili programskog jezika bez vezivanja za konkretan način implementacije, odnosno bez konkretnog gotovog softverskog proizvoda na jeziku koji ima detaljnu tehničku specifikaciju sa opisom arhitektura i funkcionalnost. Ali ni to neće biti dovoljno, jer je potrebno procijeniti stanje sigurnosti gotovog informacionog sistema sa njegovom specifičnom arhitekturom, skupom komponenti, poslovnim procesima, informacijama i, konačno, ljudima. Daću vam primjer izgradnje kuće. Posjedujemo materijale (pijesak, cement, lomljeni kamen, cigla itd.) i alate (kantu, lopatu, lopaticu itd.). Kvalitetu i pouzdanost gotove kuće nećemo moći procijeniti samo prema korištenim materijalima/alatu: koliko će dugo stajati, hoće li biti napuknuta, hoće li biti hladna ili tiha. Potrebno je odabrati projekt kuće, tehnologiju izgradnje i tim majstora. I tek nakon završetka izgradnje, moći ćemo izmjeriti usklađenost s projektom, GOST-om, SNiP-om, provjeriti mjerenja toplinske zaštite, buke, opterećenja, analizirati kvalitetu cementa i odgovoriti na većinu pitanja. Ali glavno pitanje "koliko će to ostati?" nećemo imati tačan odgovor, jer ne znamo sve uslove rada kuće i sve faktore koji će uticati tokom čitavog vremena.

Kako zaštititi Javu

Uzmimo za primjer Javu . To je objektno orijentisani programski jezik; Java programi se prevode u Java bajt-kod, koji izvršava Java virtuelna mašina (JVM), program koji obrađuje bajt kod i predaje instrukcije hardveru kao tumač. Prednost ovog načina izvršavanja programa je potpuna nezavisnost bajtkoda od operativnog sistema i hardvera, što vam omogućava pokretanje Java aplikacija na bilo kom uređaju za koji postoji odgovarajuća virtuelna mašina.

« Univerzalni jezik ”zvuči lijepo, ali najčešći problem je i naličje medalje - curenje memorije u JVM-u, što dovodi do prelijevanja memorije i rušenja. U vezi sa ovim problemom nisu isključene ranjivosti, jer je osnovni postulat pouzdanosti da što jednostavnije to bolje. U ovom slučaju se tako složen kolač sastavlja od osiguravanja kompatibilnosti velikog broja platformi i operativnih sistema da je gotovo nemoguće pratiti i zatvoriti sve ranjivosti pronađene u njima i brzo ih eliminirati. Za isti Microsoft, ranjivosti se mogu pronaći i popraviti nakon 4-8 godina, a to je ako se ne uzimaju u obzir neprijavljene karakteristike ostavljene namjerno ili greškom.

Iz moje prakse: kada programeri dodaju novu funkcionalnost koja je povezana sa već implementiranom, ili poprave staru funkcionalnost, onda u 15% slučajeva pokvare proizvod koji je prethodno radio. A ako u isto vrijeme ne izvrše potpuno testiranje, na izlazu imamo proizvod s novom funkcionalnošću, ali sa starom djelomično ne radi. Postoje i razlike u kodiranju za različite platforme, verzije OS-a, softver. U tom smislu, može se zamisliti koliko je teško održavati programski jezik Java i JVM, a da ne spominjemo sigurnosne probleme.

Trenutno je objavljen Java Development Kit 10, koji nam nudi standardne sigurnosne mehanizme, objavljen za Java SE 8 i opisan u Sigurnosnoj dokumentaciji. Ništa novo nije dodano u desetoj verziji.

Imajte na umu da Oracle ima Java sigurnosni centar resursa. Generalno, kompanija dijeli Java sigurnost u četiri glavna dijela:

A) Programeri bi trebali:

Pratite i koristite sve najnovije razvojno okruženje i sigurnosna ažuriranja;

Koristite programe za provjeru ispravnosti koda (na primjer, Checker Framework);

B) administratori sistema bi trebali:

Pratite i koristite sva najnovija ažuriranja za Javu i potrebne komponente za rad proizvoda (uključujući OS, biblioteke, okvire, itd.);

Koristite Java pravila implementacije opisana od strane and;

Koristite pouzdanu vremensku oznaku.

C) krajnji korisnici bi trebali:

Uvijek koristite najnoviju originalnu verziju Jave;

D) stručnjacima za sigurnost je potrebno:

Koristite napredne alate za upravljanje i poboljšajte sigurnost (na primjer, Advanced Management Console);

Pratite pravovremenu instalaciju svih sigurnosnih ažuriranja;

Važno je da svi poštuju i poštuju sigurnosna pravila i propise. Postizanje stanja sigurnosti na adekvatnom nivou može se postići samo zajedno i uz korištenje svih raspoloživih mjera (tehničkih, organizacionih). Kao što moja praksa pokazuje, u 60% organizacija, IT i servisi za sigurnost informacija se dobro snalaze sa bezbednošću, kao i sa korisnicima koji koriste korporativne uređaje i povezani su na jedan domen. Ali najnekontroliraniji u ovoj oblasti su programeri, vođe timova, arhitekte.

Razvoj softvera i sigurnosna pitanja

U širem smislu, glavni razlozi sigurnosnih problema u aplikacijama tokom razvoja softvera su sljedeći:

A) Nerazumijevanje bezbjednosne terminologije općenito, a da ne spominjemo specifična znanja i primijenjena rješenja.

U pravilu, programeri sigurnost povezuju u najboljem slučaju sa sljedećim stvarima: kontrolom pristupa i evidentiranjem i zaštitom lozinkom, rjeđe - zaštitom veze na https razini (koristeći mehanizme šifriranja koji su standardno dostupni izvan kutije). Odnosno, formalno će koristiti sigurnosne metode, koje će zapravo ostati formalne, "za pokazivanje", ne uzimajući u obzir zahtjeve i nijanse:

Za lozinke: obično se koriste zadane vrijednosti i nisu dodatno konfigurirane za dužinu, snagu, učestalost promjene, neponovljivost, broj pokušaja. Često se ovi parametri ne mogu podesiti, jer nisu bili uključeni u zadatak obima za razvoj softvera, što dovodi do potrebe za dodavanjem koda.

Za upravljanje i evidentiranje pristupa: u najboljem slučaju, programeri su opisali grupe ili uloge korisnika i objekte pristupa koji bi trebali biti dostupni u softveru. U najgorem slučaju, sami programeri su "podijelili" sekcije i objekte na one potrebne korisnicima i administratorima. U prvom slučaju, dobijamo sistem koji se može fleksibilno konfigurisati, ali je potrebno dosta vremena za konfigurisanje i pregovaranje o pravima. U drugom - formalni sistem kontrole pristupa. Osim toga, programeri moraju razumjeti koje vrste informacija iu kojem obimu treba da se evidentiraju. Međutim, često im se ne daju ove informacije, što dovodi do nedovoljnih detalja u evidenciji za analizu incidenata ili razumijevanje onoga što se dešava u softveru. Ili na redundantno skladištenje dnevnika i velike količine informacija, što nameće značajna ograničenja u mogućnosti pohranjivanja informacija u potrebnom vremenskom periodu (na primjer, od jedne do tri godine) ili postoji potreba za kupovinom dodatnih skladišta informacija. Uz redundantno snimanje informacija, nastaju dodatni problemi sa brzinom analize i analize incidenata i brzinom pronalaženja potrebnih informacija. Višak rada također može zahtijevati dodatna sredstva za proširenje osoblja, kupovinu SIEM sistema sa jedinstvenim pravilima za obradu informacija, ili može dovesti do rizika povezanih sa zastarjelim informacijama. Istovremeno, previše vremena se troši na analizu i obradu informacija.

Zaštita komunikacijskih kanala nije ništa manje važna, posebno za platne i bankarske sisteme, gdje su, osim otkrivanja ličnih i ličnih podataka, mogući i finansijski gubici. Najčešće se događa da ne razmišljaju o zaštiti kanala i medija za prijenos informacija, a ako i razmišljaju, koriste "podrazumevane" postavke, na primjer, TLS / SSL. Ali i tu postoje neke posebnosti u izboru verzije protokola (TLS 1.1, 1.2, 1.3 ili SSL v1-3), algoritma enkripcije (RC4, IDEA, Triple DES, SEED, Camellia ili AES), dužine ključa. Ponekad se, na primjer, odabere ispravan TLS 1.2 protokol, sa AES enkripcijom, dužine ključa od 256 bita, ali zaboravite na mogućnost izbora adrese na portu 443 za HTTPS ili portu 80 za HTTP, umjesto da blokirate port 80, zbog čega postaje moguće dobiti pristup putem neosiguranog kanala. Ili, na primjer, podižu infrastrukturu na virtualnim mašinama i uopće ne razmišljaju o potrebi zatvaranja pristupa mreži između virtualnih mašina.

B) Drugi problem je vezan za poslovanje, jer ulaže novac u specifičnu specijalnu funkcionalnost koja ne uzima u obzir sigurnosne blokove.

Nažalost, biznis ne razumije uvijek zašto bi trebao trošiti resurse na sigurnosne blokove, ako od njih nema funkcionalne koristi, proizvod neće donijeti više novca, ali postoje samo vjerovatni rizici koji možda neće funkcionirati. Poslovanje češće razumije potrebu za ulaganjem u sigurnost kada se incident u vezi s informacijskom sigurnošću već dogodio.

Nažalost, za to nije kriv samo biznis, već i njegovo okruženje koje:

Također ne razumije sigurnost;

Pošteđen budžet za stručnjake za informacionu bezbednost (oni se uopšte ne angažuju ili se angažuju visokospecijalizovani stručnjaci, ili se angažuje jedna osoba da bude odgovorna za sve);

Nisam mogao razumno prenijeti potrebu za sigurnošću i korektno opravdati postojeće rizike (reputacijske, finansijske, privremene).

C) Problem sa komunikacijom u kompaniji ili nedostatak iste.

To je slučaj kada preduzeće i njegovo okruženje razumeju potrebu i važnost informacione bezbednosti. Dodijelili su budžete, angažovali odgovarajuće stručnjake, ali postoje poteškoće u komunikaciji između poslovnih jedinica i informatičke sigurnosti/IT usluga, programera.

D) Nedostatak svijesti običnih korisnika kompanije o pitanjima sigurnosti informacija.

Pretpostavimo da imate sve potrebne odjele, stručnjake, tehničke i organizacijske mjere. Ali korisnici se opiru i ne žele da rade po pravilima. Ovo je vrlo česta situacija, a potrebno ju je i sveobuhvatno rješavati, jer ljudi ne razumiju zašto im je potreban dodatni rad kako bi se uskladili sa pitanjima sigurnosti informacija (skenirati datoteke antivirusom, zapamtiti složene lozinke, poznavati i pridržavati se politika i poslovanja). procesi itd.). Neophodno je periodično organizovati majstorske kurseve, na nivou domaćinstva reći šta je to informaciona bezbednost, koji problemi i rešenja postoje, komunicirati globalne ciljeve i zadatke informacione bezbednosti i motivisati ih i njihov uticaj na poslovanje.

E) Nedostatak arhitekata informatičke sigurnosti – stručnjaci za informacijsku sigurnost nisu uvijek uključeni u razvoj softvera, a sami programeri razmišljaju o sigurnosti arhitekture i korištenju pisanih i gotovih sigurnosnih obrazaca (Security patterns).

Programeri ne znaju sve nijanse i ne znaju, jer je njihov zadatak da završe razvoj i pređu na sljedeći. Ako dublje uđete u sam razvoj, proces je mnogo komplikovaniji nego što se čini. Stoga je potrebno jasno dobiti zadatak od poslovanja, razložiti ga na razumljive mini-zadatke za programere, sprovesti razvoj, provesti alfa i beta testove, učitati, funkcionalne testove, popraviti greške, vratiti se na testove - ovaj proces je cikličan i dugo. Stoga nije iznenađujuće da nemaju dovoljno resursa da promisle o sigurnosti proizvoda do najsitnijih detalja.

Da biste razgovarali o sigurnosti, morate riješiti probleme opisane iznad. Ne opisujem konkretno opcije rješenja, jer sve zavisi od konkretnih problema, okruženja, uslova. Ne postoji univerzalna tableta i moraju se poduzeti sve mjere opreza. Osnovni zadatak je da svi zaposleni u kompaniji proniknu, razumiju i ispoštuju zahtjeve sigurnosti informacija i budu zainteresirani da ih poštuju. I tek tada će se moći govoriti o efektivnosti i dobrom stepenu zrelosti informacione sigurnosti u kompaniji.

Top srodni članci