Java(tm) - iba silné reči?

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.

Ako vznikla

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:


Najprv sa Pokúsim podložiť vhodné vlastnosti Javy pre koncového užívateľa, potom pre programátora.

Naozaj bezpečná?

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:

Ada bol jazyk vytvorený pre americkú armádu. Programy v ňom vytvorené mali byť bezpečné a spoľahlivé. Preto ako prvý mal systém výnimiek, ktorými sa ošetrujú chybové stavy. Tiež obsahoval balíky (package), predchodcu dnes používaných tried. Výnimky od nej prebrali neskoršie špecifikácie C++ a Java.

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.

Prenositeľnosť

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ť...

32 bitov je dnes už všade...

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...

Multiprocesová

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.

Objektovo orientovaná

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.

Štandardné balíky(knižnice) - dielo mnohých expertov pre nás

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:

Java je je zadarmo!

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.

Na WWW sú len jabĺčka v Jave, nie programy...

Á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.

Čo je potom JavaScript?

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.

Ako si vybrať?

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žité zdroje

Použil som svoje krátke skúsenosti a knihy

(C) 1998 Peter Kehl