V poslednom čase sa toto slovo v informatickej komunite často používa.
Programy pre internet, objektovo orientované a klient/server architektúry,
to všetko pokrýva Java. Áno, tieto a ešte ďalšie vlastnosti má Java. Čo to
je, aký má význam pre Vás i pre mňa osobne, sa tu skúsim načrtnúť. Bude to krátky popis jej vlastností z rôznych hľadísk.
Vznikla vo firme Sun Microsystems roku 1990. Tím vedený Jamesom
Goslingom mal pôvodne navrhnúť programovací jazyk pre spotrebné
elektronické prístroje ako diáre, fotoaparáty, mikrovlné trúby. Jazyk
pôvodne nazývaný Oak (dub) bol jednoduchý, spoľahlivý a nezávislý na
architektúre procesora. To potvrdzuje aj slogan od Sun o Jave: Write Once,
Run Anywhere(tm). V roku 1993 sa dostal do prostredia WWW práve pre úplnú prenositeľnosť na všetkých procesoroch vyhovojúcim požiadavkam Javy.
V súčasnosti je Java považovaná za najbezpečnejší programovací jazyk.
V bielej knihe jazyka Java pripisuje Sun Jave tieto vlastnosti:
Dovolím si povedať, že programy vytvorené v Jave sú dnes najbezpečnejšie z GUI(Graphic User Interface-programy s grafickym rozhranim) a všeobecne orientovaných programov. Dôvody:
Prenositeľnosť znamená, že programy v Jave nemôžu svojvoľne riadiť stav procesora a periférii. Teda ani napr. privlastniť si všetky systémové zdroje, ovládať priamo hardware, zasahovať do pamäťovej oblasti iných procesov. Časť programu avšak môže byť vytvorená v procesorovo závislom jazyku ako assembler a C (native metódy). Tie môžu bezpečnosť narušiť.
Dynamickosť - v Jave sa všetky objekty (v C++ terminológii: inštancie tried) alokujú dynamicky. Uvoľňujú sa automaticky. Ak je nedostatok pamäti, VM spustí proces garbage collector, ktorý sám vyhľadá nepoužívané objekty, Na ktoré už neexistuje žiaden odkaz, a uvoľní ich. Teda nemôže nastať prípad, že program sa pokúsi použiť objekt, ktorý predtým dealokoval. Okrem toho, Java nepodporuje ukazatele (smerníky). Premenné neprimitívnych typov, teda tried, sú vždy referencie - skryté ukazatele. Teda pracuje sa s nimi jako so smerníkmi, a pri prístupe k členským položkám alebo metódam (v C++ terminológii: členským funkciám) sa skryte dereferencujú. Java má prísnu typovú kontrolu. Okrem návratovej hodnoty metód nedovoľuje používať typ void. Nepozná typ void*. Naviac, za behu programu (runtime) overuje prípustnosť explicitného pretypovania. Tým sa zabraňuje skrytým chybám, ktoré vznikajú v iných jazykoch pri práci s dynamicky a staticky alokovanými objektmi.
Pretože bola Java navrhnutá nezávislá na type procesora, sú v nej vytvorené programy prenositeľné. Teda nie sú potrebné rôzne verzie pre rôzne typy počítačov a operačných systémov. To sa zabezpečuje tým, že binárny kód generovaný pri kompilácii neobsahuje inštrukcie strojového kódu konkrétneho procesora. Miesto nich sú to inštrukcie Java Virtual Machine(VM), jednoduché elementárne operácie, ktoré sa pri spustení programu preložia do strojového kódu konkrétneho procesora (just in time). VM pritom pre program zabezpečuje bežné služby poskytované operačným systémom. Zdrojové súbory majú koncovku JAVA. Binárne súbory s koncovkou CLASS sa spúšťajú programom JRE alebo JAVA. Vykonávanie je asi 3x pomalšie než u programov vytvorených napr. V jazykoch C, C++. Preto sa Java nehodí pre programy náročné na rýchlosť. To nevadí, ak ide o bežné programy s grafickým rozhraním, pretože procesor aj tak väčšinu času čaká na pokyny užívateľa. Naviac, programy v Jave majú jednu ďalšiu dôležitú vlastnosť...
Java vyžaduje 32 bitový procesor a sytém. Súvisí to s prenositeľnosťou, pretože základný primitívny dátový typ int je definovaný ako 32 bitový. Pre užívateľa na PC platforme to znamená potrebu procesora rádu aspoň 386 a Win32(tm). Pod Windows95(tm) je takejto aplikácii vyhradený vlastný pamäťový priestor, preto svojimi chybami by nemala ohroziť iné programy a operačný sytém. Pretože Windows95(tm) je, aký je, vždy to tak nefunguje...
Presnejšie, viacvláknová(multithreading). Znamená to, že v Jave sa ľahko tvoria programy s viacerými vláknami - paralelne vykonávanými blokmi kódu, ktorý využíva spoločný pamäťový priestor. Aby nevznikli problémy so súčasným používaním rovnakých objektov, používa sa synchronizácia uzamkynaním objektov, prípadne celých tried. Na každom objekte môže naraz pracovať len jedna synchronizovaná metóda a viac nesynchronizovaných. Ďalšie paralelne vykonávané synchronizované metódy nad týmto objektom musia počkať na jej ukončenie.
OOP (objektovo orientované programovanie) je nový spôsob programovania. V ňom sa kladie väčší dôraz na dáta než na kód. Je to zdôvodnené tým, že dáta sa menej menia ako vykonávaný kód-funkcie. Dá sa povedať, že Java programátora núti k OOP. Objekty-premenné, v C++ nazývané inštancie tried, majú svoj typ-triedy. Triedy sú podobné štruktúram v C++, ale vedia oveľa viac: majú možnosť mať svoje vlastné funkcie-metódy (v C++ členské funkcie), ktoré pracujú nad zložkami tohoto objektu.
Ďalším princípom je zapúzdrenie, teda vyhradenie súkromných premenných objektu, ku ktorým majú prístup len jeho metódy, a verejné premenné. Metódy môžu byť tiež súkromné a verejné. Trieda môže byť potomkom inej triedy, prípadne i viacerých rozhraní. Od predka tým zdedí všetky jeho premenné a metódy, ku ktorým pridá svoje vlastné. Niektoré zdedené metódy môže zmeniť - to je ďalší princíp OOP, polymofnosť. Takýto potomok sa totiž môže použiť všade tam, kde je vyžadovaný objekt(premenná) typu jeho predka. Pri volaní jeho zmenených(preťažených) metód sa ale vyvolajú metódy potomka, i keď v čase prekladu nikto nevedel, akého typu ten objekt bude. Isté je, že bude buď daného typu(predka), alebo nejaký jeho potomok. Z dôvodu dedičnosti pribudli okrem špecifikátorov public a private(verejný a súkromný) ešte private protected(prístupný potomkom), protected(prístupný potomkom a balíku) a default(štandardne prístupný - viditeľný len vo svojom balíku). Balík je istá skupina tried, ktoré spolu súvisia a majú svoj stupeň viditeľnosti. Na všetky triedy v Jave sa odkazuje bodkovou notáciou v tvare NázovBalíka.NázovTriedy.
API(Application Programming Interface), teda aplikačné programovacie
rozhranie, je niekoľko kvalitne navrhnutých balíkov. Tie nám pomôžu vytvoriť
efektívne a spoľahlivé aplikácie. Implementujú štandardné dátové štruktúry
ako zásobník, dynamický zoznam, hashovaciu tabuľku, pole s dynamickou
veľkosťou(java.util.Vector). Ďalej sú tam triedy výnimiek na spracovanie
chybových stavov programu. Veľmi dobré sú navrhnuté vstupno/výstupné prúdy
(streamy), ktoré sa dajú zreťazovať, filtrovať... Sú tu samozrejme aj balíky
podporujúce tvorbu grafického užívateľského rozhrania (GUI). Ich zoznam je:
Voľnošíriteľný je kompilátor, preložené i zdrojové súbory štandardných balíkov a dokumentácia. Tvoria JDK - Java Development Kit. Najnovšia verzia je asi 1.1.4. Je voľne dostupná i s rôznymi inými zdrojmi na Sun sites - u nás, najlepšie na http://sunsite.uakom.sk.
Áno, pretože v Jave sa dajú vytvoriť applety, i programy.
Aplety sú objekty odvodené od triedy java.applet.Applet. To meno znamená,
že trieda Applet sa nachádza v balíku java.applet. Applet je potomkom
triedy java.awt.Panel, ktorá môže obsahovať grafické komponenty a riadiace
prvky. Nemôže mať vlastné menu, ani sa nemôže sám zavrieť. Trieda Applet
má rozhranie, ktorým môžu konkrétne aplety, jej potomkovia, napr.
zobrazovať obrázky alebo prehrať audioklip.
Aplet sa vkladá do HTML stránky a zobrazí sa s nastavenou veľkosťou priamo v dokumente. Nemôže spustiť žiadne iné programy ani nemôže používať lokálny disk, ak mu to užívateľ v nastavení WWW prezerača nepovolí. Ak vytvorí svoje ďalšie okno, ktoré už môže mať svoje menu, jeho názov varuje, že je vytvorené apletom. Môže byť tiež digitálne podpísaný, teda overene neporušený a nezmenený pri prenose z domovského servera. Tu je príklad vloženia apletu do HTML a ako to vyzerá v skutočnosti:
<html> <body> Toto je bežný text v HTML. Ďalej je vloženie apletu Test.class so šírkou 150 a výškou 100 bodov. Ako parameter text dáme reťazec Vitajte! <APPLET CODE="Test.class" WIDTH=150 HEIGHT=100> <PARAM NAME="text" VALUE="Vitajte!"> </APPLET> </body> </html> Toto je bežný text v HTML. Ďalej je vloženie apletu Test.class so šírkou 150 a výškou 100 bodov. Ako parameter text dáme reťazec Vitajte!Môžete si pozrieť zdrojový kód tohto príkladu. Program v Jave toho spraví oveľa viac. Môže mať bežný textový výstup, alebo komunikovať grafickým užívateľským rozhraním (GUI). Vykonáva úlohy ako programy v iných jazykoch. Pretože je distribuovaný, ľahko sa v ňom tvoria sieťové a komunikačné programy typu klient/server. API obsahuje podporu pre SQL databázy.
JavaScript(tm) je jazyk vytvorený Netscape Communications pre programovanie grafických a textových objektov v HTML stránke. Je podobný Jave. Narozdiel od Javy je skriptovým jazykom, teda nekompilovaným. Zdrojový text je priamo vložený do HTML stránky. Môžme ním programovať reakcie stránky na akcie užívateľa, kontrolovať údaje formulára pred odoslaním. Je oveľa pomalší než Java, ktorá má pole pôsobnosti vyhradené na jeden obdĺžnikový aplet a svoje okolie môže ovplyvniť veľmi málo.
Ak chcete tvoriť grafické HTML stránky so živou grafikou, použite JavaScript. V blízkej dobe sa to bude dať robiť i v Jave. Tá je najlepším riešením, ak chcete robiť bezpečné a na platforme nezávislé programy. V skutočnosti je najlepšie kombinovať oba - správanie grafických prvkov v HTML stránke programovať v JavaScripte. Ten odošle po kontrole dáta z formulárov na Váš server, kde ho spracuje Javovská aplikácia(server). Tak nemusíte vôbec používať CGI(Common Gateway Interface). Program v Jave je sice programátorsky viac náročný než CGI skript, ale ponúka viac možností. Je bezpečnejší a nezávislý od typu WWW servera a procesora.
Definícia pojmov proces a thread. Proces je samostatne vykonávaný kód programu
paralelne s jeho ďalšími procesmi. Každý proces má svoj vlastný adresový priestor (má vyhradenú časť operačnej pamäti).
Thread(vlákno) je takisto samostatne vykonávaný kód programu
paralelne s ďalšími vláknami. Narozdiel od procesov thready toho istého
programu majú spoločný adresový priestor. Thready i procesy môžu medzi sebou
komunikovať. (Voľne preložené z knihy On to Java.)
Použil som svoje krátke skúsenosti a knihy