Platforma Java - prehľad

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání

Čo je Java

Java je objektovo orientovaný jazyk, ktorý vychádza z jazykov C a C++. Podľa tvorcov javy (z knihy The Java Language: White papaer) je definovaná ako:

Java je jednoduchý, objektovo orientovaný, distribuovaný, interpretovaný, robustný, bezpečný, nezávislý na architektúre, prenositeľný, vysoko výkonný, viacprocesný a dynamický jazyk.

Jednotlivé prívlastky môžeme vysvetliť nasledujúco:

Jednoduchosť
Java je jednoduchý jazyk. Už pri návrhu Javy bolo cieľom vytvoriť jazyk, ktorý sa programátor rýchlo naučí. Preto obsahuje jazyk minimálny počet jazykových konštrukcií. Naviac sú tieto konštrukcie odvodené od existujúcich jazykov. Java nepodporuje ani štruktúry, uniony, preťaženie operátorov a ani viacnásobnú dedičnosť. Taktiež nie je podporovaná ani ukazateľová aritmetika. Java neobsahuje preprocesor (t.j. žiadne makrá ani direktívy), nie je povolené preťažovanie operátorov, je zavedený jednotný zápis pre prístup k objektom i knižniciam.
Objektovo orientovaný
Java bola od zažiatku navrhovaná ako objektovo orientovaný jazyk. Základné triedy (Java core API) sú usporiadané do hierarchií od všeobecnejších tried smerom ku konkrétnejším implementáciám. Najvšeobecnejšou triedou,. ktorá jev tejto hierarchii najvyššie je trieda Object.
Distribuovateľnosť
Java bola navrhnutá pre podporu aplikácií v sieťach. Java podporuje rôzne úrovne sieťového prepojenia. Otvorenie súboru na vzdialenom serveri sa nelíši od otvorenia lokálneho súboru. Java podporuje vytváranie dynamických a distribuovaných aplikácií aj ich automatické šírenie po sieti. Aj za behu aplikácie možno zabezpečiť upgrade softvéru.
Interpretácia
Zdrojové kódy nie sú kompilátorom preložené priamo do strojového kódu, ale do bajt-kódu (bytecode). Tým je zaručená prenositeľnosť programov. Tento bajtkód sa spustí pomocou virtuálneho stroja (virtual machine), ktorý tvorí vrstvu medzi operačným systémom sa vytvoreným bajtkódom.
Robustnosť
Podľa požiadaviek pri tvorbe jazyka Java, tento musí podporovať vytváranie spoľahlivého a robustného softvéru. Dôležitou skutočnosťou je, že Java je silno typový jazyk, sú vyžadované explicitné deklarácie premenných a kvôli tomuto je možné odhaliť chyby už dobe preklady do bajtkódu. Java obsahuje vlastného správcu pamäti (garbage collector), ktorýautomaticky zlučuje voľné miesta v pamäti, stará sa o odstránenie nepoužitých objektov a predchádza vytváraniu "dier" v pamäti. V Jave neexistuje priamy a nekontrolovaný prístup do pamäte - ukazovatele sú nahradené referenčnými premennými, vykonáva sa kontrola pri indexácii polí, zabraňuje sa prístupu ku zrušeným objektom. Prostredníctvom mechanizmu výnimiek možno zachytiť chyby a neočakávané stavy vyskytujúce sa za behu programu a umožniť jeho zotavenie.
Bezpečnosť
Java obsahuje bezpečnostné mechanizmy, ktoré chránia používateľa proti kódu pracujúcemu ako vírus alebo červ, ktorý by mohol napr. napadnúť súborový systém. Všetky berzpečnostné mechanizmy sú založené na filozofii, že ničomu a nikomu sa nedá veriť. Java nepodporuje prácu s ukazateľmi, teda programátor nemá dosah na to, kde v pamäti bude uložený určitý objekt.
Nezávislosť na architektúre
Programy nie sú prekladané do strojového kódu ale do bajtkódu. Takto vytvorený bajtkód môžeme spustiť na ľubovoľnej platforme (Windows, GNU/Linux, UNIX, Apple, ...), kde je nainštalovaný virtuálny stroj (Java Virtual Machine). Bezpečnosť aplikácií možno strážiť programovou kontrolou prístupu k objektom, vlastný kód programu je pred spustením verifikovaný, podporované sú šifrovacie štandardy atď.
Prenositeľnosť
Táto vlastnosť zamedzuje akýmkoľvek implementačne závislým aspektov jazyka. Aritmetika je definovaná podľa normy IEEE, čo zaručuje rovnaký výsledok na rozdielnych systémoch. Abecedy neanglických jazykov sú podporované pomocou šestnásťbitového znakového kódu Unicode. Hranica prenositeľnosti je sú definované normou POSIX (Portable Operating System Interface).
Výkonnosť
Java je interpretovaný jazyk. Avšak je jej rýchlosť viac ako prijateľná pre vykonávanie bežných programov. Voliteľnou časťou je interpreter typu Just-In-Time (JIT). Tento interpreter prekladá bajtkód do strojového kódu dynamicky na základe potrieb bežiaceho kódu.
Podpora vlákien
V dnešnej dobe je bežné vytvárať viacvláknové aplikácie. Jazyk zahŕňa prostriedky pre paralelný beh častí programu (multithreading) a ich synchronizáciu. Medzi vláknami musí byť zabezpečená možnosť komunikácie. Práca dvoch a viac vlákien musí byť bezkonfliktná a neblokujúca.
Dynamickosť
Program môže zavádzať triedy do pamäti podľa potreby. Triedy v Java majú svoju jedinečnú reprezentáciu v dobe behu programu. Ak predáme programu objekt, je možné zistiť, ku ktorej triede objekt patrí. Toto je zabezpečené vďaka run-time informácií type objektu.


Oficiálne logo Javy

Zaujímavosti:

  • java je slangový výraz pre kávu. Odtiaľ je aj prvé logo Javy.
  • maskotom Javy je Duke
    Duke, maskot Javy

Java Platforma

Najväčším prínosom Javy je nepochybne plná prenositeľnosť programov na ľubovoľnú platformu bez nutnosti ich rekompilácie. Programy sa totiž neprekladajú do strojového kódu konkrétneho procesora, ale do nezávislého podoby, tzv. bytového kódu (bytecode). Tento kód potom môže byť interpretovaný na akomkoľvek počítači alebo priemyselnom zariadení. Kompatibilita je teda zabezpečená na binárnej úrovni.

Hardvérové rozdiely zastrešuje tzv Java Platforma, ktorá obsahuje dve základné časti:

  • Abstraktný počítač - virtuálny stroj (Java Virtual Machine - JVM[1]), ktorý pozostáva z runtime systému, čo je časť, ktorá realizujúce väzbu na hardvér, a interpretra, ktorý vykonáva bytový kód.
    • Pre urýchlenie môže byť interpret voliteľne nahradený tzv JIT (Just-In-Time) kompilátorom, ktorý pri behu programu vykonáva najprv preklad do strojového kódu príslušného procesora.
  • Aplikačné programové rozhranie (Java Core API) - čo sú základné knižnice pre písanie programov. Výhodou je, že tieto knižnice nemusia byť s programom distribuované, pretože sú súčasťou Java platformy.

V súčasnej dobe prebieha návrh niekoľkých rozširujúcich programových rozhraní. Ide napríklad o podporu 2D a 3D grafiky (Java 2D a 3D API), zvuk (Java Audio API), správu siete (Java Management API), bezpečnosť (Java Security API) atď.

Zaujímavosť: Ak si pozriete v hexadecimálnom editore ľubovoľný súbor .class, čo je vlastne preložený kód java do bytekódu, tak prvé 4 bajty (hlavička súboru) sú vždy CAFE.

Verzie a edície Java

Platforma Java je založená na virtuálnom stroji (JVM), ktorý je implementovaný pomocou knižníc v operačnom systéme. Existujú 2 základné verzie Java platformy:

  • Java Runtime Enviroment - JRE. JRE je nutné na spúšťanie java programov. JRE obsahuje:
    • Virtuálny stroj (spúšťaný príkazom java)
    • Sadu základných knižníc (Java Core API)
  • Java Development - JDK. JDK je nutné pre vývoj java programov. JDK obsahuje:
    • java - nakladač pre Java aplikácie. Tento nástroj interpretuje class súbory vytvorené javac kompilátorom.
    • javac (java compilator) - prekladač ktorý prevádza zdrojový kód do Java bytecode
    • jar - archívátor, ktorý vytvorí balík skladajúci sa z preloženého Java zdrojového kódu a súvisiacich knižníc.
    • javadoc - generátor dokumentácie, ktorý automaticky generuje dokumentáciu z komentárov zdrojového kódu
    • jdb - debugger
    • ďalšie....
Platforma Java

Java platforma sa ďalej rozdeľuje na edície, podľa toho, aké knižnice obsahuje.

  • Java SE [2]
    • Java Standard Edition (J2SE) - Základná platforma pre aplikácie napísané v jazyku Java. Jej využitie je pre tvorbu desktopových aplikácií. J2SE obsahuje základné knižnice ako napríklad java.lang, java.io, java.nio, java.math, java.net, java.text, java.util, java.applet, java.beans, java.awt a ďalšie.
  • Java EE [3]
    • Java Enterprise Edition je platforma využívaná pre serverové riešenia. Oproti J2SE obsahuje naviac knižnice pre vývoj bezporuchových, distribuovaných, viac-vrstvových aplikácií bežiacich na aplikačnom serveri.
    • Java EE dopĺňa knižnice platformy J2SE o nasledujúce: javax.ejb, javax.enterprise.inject, javax.enterprise.context, javax.jms, javax.faces, javax.faces.component, javax.persistence, javax.xml.stream, javax.resource, ...
  • Java ME [4], [5]
    • Java Micro Edition (J2ME) je platforma navrhnutá pre mobilné zariadenia a vložené (embedded) systémy. Pretože možnosti a výkon mobilných zariadení sa veľmi líšia J2ME definuje konfigurácie a profily pre bližšiu špecifikáciu JRE. Konfigurácia definuje základné behové prostredie (JRE) ako základnú množinu tried a špecifického virtuálneho stroja (JVM), ktorý je schopný bežať na špecifickom zariadení.
Java platforma - zariadenia
  • Java FX [6]
    • Java FX je platforma pre vytváranie aplikácií v prostredí internetu, ktoré sú schopné bežať na rôznych zariadeniach (PC, hracie konzoly, set-top boxy, Blue-ray prehrávače, ...)

Odkazy