Jáva programozási nyelv


Java

Tartalomjegyzék

Röviden az elõzményekrõl
A nyelv legfontosabb tulajdonságai 
Egyszerû 
Objektumorientált 
Architektúrafüggetlen és hordozható 
Interpretált és dinamikus 
Robusztus és biztonságos 
Többszálú 
Elosztott

Összefoglalás
Végezetül néhány kérdés, kétely

 Fontosabb WWW címek 


Duke A Sun-nál már megint kitaláltak valamit 1: új programozási nyelvtõl hangos az Internet, itt van a Jáva 2 - angolosan Java! Manapság mindenki errõl beszél: kisebb és nagyobb cégek lelkesen üdvözlik az új nyelvet, technológiát; csatlakozó, támogató nyilatkozataikkal telve a szaksajtó. Az - esetleges tõkeerõs - ellenzõk egyelõre bölcsen hallgatnak vagy - rosszmájú vélemények szerint - ravasz módon, beépülve, belülrõl próbálják kisajátítani, a saját ízlésüknek, piaci érdekeiknek megfelelõre formálni az alakuló technológiát. Programozók, felhasználók lelkes és szkeptikus hada vitázik egymással, a nyelvvel foglalkozó hírcsoport, a comp.lang.java meghaladja a nagy "vetélytárs" nyelvhez tartozó comp.lang.c++ forgalmát. 1996 elsõ félévében a Jáva nyelvrõl másfél tucat könyv megjelenése várható. Izzanak az Internet vonalak a Sun és a Netscape FTP szerverei környékén, ahonnan letölthetõk az elsõ ismerkedéshez szükséges programok. Végezetül egy ún. Jávát értõ böngészõvel (Java-aware browser) rendelkezõ szerencsések egyre gyakrabban bukkannak a WWW világában meghökkentõ oldalakra, olyanra, ahol például a fenti vörös orrú, fekete sapkás, figura - Duke-nak hívják - vidáman lengeti felénk a bal kezét!

 Pont ez az integetés az, ami megindokolja, hogy miért kell nekünk egy új programozási nyelv, amikor olyan jól megvoltunk mi az X-szel (itt mindenki behelyettesítheti a kedvencét). Ugyan a Jáva nyelv tulajdonságainak felsorolásánál megtalálhatunk számos olyan divatos kifejezést - pl. objektumorientált, párhuzamos, elosztott, stb. -, amik nélkül manapság egyetlen a valamire való programozót sem lehetne elcsábítani a kedvenc, ódivatú nyelvének pontosvesszõi és zárójelei mellõl, de ez még kevés lenne a sikerhez, elvégre világmegváltó nyelvek napról napra születnek. Szerintem a várható sikernek ezen felül két jelentõs indoka van: elõször is sok befolyásos számítástechnikai cég elhitte, hogy van benne fantázia és most - remélhetõleg - dõl a pénz a fejlesztésre.

 HotJava A felhasználók szempontjából sokkal fontosabb a másik érv: a Jáva nyelv összeházasodott napjaink legdivatosabb számítástechnikai játékszerével, az Internet hálózattal. A házasságból egyelõre két gyermek született, a Sun HotJava- illetve a Netscape WWW böngészõ programjának új, 2.0 verziója. Bár mindkét gyermek fejletlenke még, csak béta korúak, de már ki-kimutatják oroszlánkörmeiket, sõt újabb gyerekek érkezése is várható. Mellesleg a HotJava teljes egészében Jáva nyelven íródott, azt bizonyítandó, hogy a nyelv eléggé izmos ilyen méretû feladatok megoldására.

 Egy ilyen Jávát értõ böngészõvel az egér egyetlen óvatlan kattintására nem csak adatokat, de teljes, futni képes programokat is letölthetünk a kiszolgálóról, amely aztán el is indul a mi számítógépünkön. Akinek errõl a vírusok, férgek és egyéb rosszindulatú programok jut az eszébe, nyugodjon meg, késõbb még lesz errõl is szó!

 Mire jó egy ilyen program? Hát természetesen bármire - a Jáva általános célú programozási nyelv -, a program nálunk fut, nem terheli az eredeti kiszolgálót, jópofa dolgokat rajzol, menükkel, párbeszédablakokkal tarkítja a képernyõnkre, hangokat ad, egyszóval életet lehel a letöltött dokumentumba. Persze ennél többet is tehet, például felveheti a kapcsolatot azzal a kiszolgálóval, ahonnan hozzánk került és a két gép tisztességes elosztott rendszerként buzgón kommunikálni kezd, abból pedig bármi kisülhet.

 A hagyományos böngészõk képesek arra, hogy az általuk ismert, elõre beprogramozott protokollokat - HTTP, FTP, Gopher, News, ... - használva felvegyék a kapcsolatot egy-egy kiszolgálóval és onnan adatokat töltsenek le, amelyeket, amennyiben a formátumát korábban ismerték - HTML, GIF, JPEG, ... -, akkor megjelenítsék. Viszont ha az URL-ben (a kiszolgáló gépet és az ott tárolt információt megadó címben) ismeretlen protokollt adtunk meg, akkor szegény böngészõ kétségbeesetten széttárja a karját. Ha csak az adat formátuma ismeretlen, a helyzet egy fokkal jobb: a böngészõ letölti a teljes adathalmazt, majd - ha szerencsénk van - továbbpasszolja a megjelenítés feladatát egy másik programnak, legrosszabb esetben tárolhatja azt a helyi lemezünkön, hátha majd egyszer megértjük, mi van benne. A Jávát értõ böngészõkben viszont a kiszolgálóról letöltött Jáva programok bõvíthetik a felhasználható kommunikációs protokollokat (protocol handler) és a megjeleníthetõ adattípusokat (content handler).

 applets Az önállóan futtatható programok (application) és a böngészõk által letölthetõ és futtatható "programkák" (applet) között nem nagy a különbség, legfeljebb csak a biztonsági meggondolások miatt a böngészõk szigorúbban figyelik, korlátozzák a hálózatról letöltött programkákat. Önálló programnál ilyen védelem nincs, a felhasználó nyilván tudja, mit és miért indított el.

 A halózaton letölthetõ programok ötlete új színt hoz az elosztott rendszerekben divatos ügyfél-kiszolgáló paradigmába: a programok igény szerinti letöltése (distributed on demand) elmossa a kiszolgáló és az ügyfél közötti éles határokat.

 

Röviden az elõzményekrõl

Az 1990-es évek elején valahol a Sun berkeiben elindult egy kevéssé fontos projekt azzal a céllal, hogy a cég betörjön a felhasználói elektronikai piac egy új, az ún. "okos", processzorral vezérelt, programozható (smart) készülékeket alkalmazó területére. E készülékcsalád jellegzetes képviselõje a kábel-TV társaságok által használt vezérlõ (set-top box). Az ilyen készülékek programozásához igény volt olyan architektúra-független technológiára, amely lehetõvé tette a kész programok a hálózaton keresztül a készülékbe letöltését, megbízható futtatását.

 A projekt kezdetben a C++ nyelvet használta, ám a fejlesztõk ezt is, a többi, akkor hozzáférhetõ programozási nyelvet is alkalmatlannak találták a célkitûzéseik maradéktalan megvalósítására, hát új nyelvet terveztek maguknak. Kiindulási alapként a C++ nyelvet használták, kigyomlálva belõle - az általuk - bonyolultnak, nem megbízhatónak talált szerkezeteket, hozzáadva innen-onnan átvett, hasznosnak tûnõ ötleteket, nyelvi elemeket.

 A felhasználói elektronikai alkalmazások lassabban fejlõdtek, mint azt elõre várták, a projekt szép csendben el is halt volna, ha közben az Internet hálózat nem indul rohamos fejlõdésnek. Szerencsére észrevették, hogy az Internet hálózat hasonló körülményeket teremt és hasonló igényeket támaszt egy új programozási technológiával szemben.

 

A nyelv legfontosabb tulajdonságai

About
Egyszerû A nyelv szintaxisa és szemantikája nagyban hasonlít a sokak által ismert C illetve C++ programozási nyelvhez, megkönnyítve a kezdeti ismerkedést. A C++ nyelvbõl elhagytak néhány - programozói vagy fordítóprogram írói szempontból - bonyolult elemet. Kimaradt például az operátorok felüldefiniálásának lehetõsége (operator overloading), a többszörös öröklõdés. Eltûnt a goto utasítás, az automatikus típuskonverziók (coercion), az összetett adatszerkezetek közül a union, illetve C++-ban már amúgy is szükségtelen struct.

 Azért szerencsére nem gyomláltak ki mindent a C++-ból, megmaradt például a futásidejû hibák lekezelésének mechanizmusa, az. ún. kivételkezelés (exception handling). Bár az "igazi programozók" megkönnyezik az eltávozott goto utasítást, de helyette címkézett ciklusokat, többszintû break és continue utasítást kaptunk.

 Sokaknak elsõre - többeknek talán másodszorra is - furcsa, de a Jáva nem használ mutatókat (pointer), egy csapásra megszûntetve ezzel a C programozók kedvelt programozási hibáinak egész seregét. A programozó munkáját nagymértékben megkönnyíti az is, hogy a nyelv automatikusan felszabadítja a már nem használt tárterületeket (szemétgyûjtés, garbage collection).

 Ízelítõül álljon itt a kötelezõ "Szervusz világ" program egy kicsit módosított változata, amely az elsõ paraméterben megadott szöveget írja ki a "World" helyett, már amennyiben van ilyen. 

class HelloWorldApp

{

   public static void main (String args[])

   {

      System.out.println("Hello ");

      if (args.length == 0)

         System.out.println("World!");

      else

         System.out.println(args[0] + "!");

   }

}
Objektum-
orientált
Manapság az objektumorientáltság divatos programozási paradigma, bár a szakirodalom nem teljesen egységes a kritériumainak meghatározásában. A Jáva lényegében a C++ objektumorientált tulajdonságait tartalmazza. A programozó absztrakt adattípusként viselkedõ osztályokat definiálhat, az osztályok mûveleteket - módszereket - tartalmaznak, amelyek a rejtett adatreprezentáción (egyedváltozók) operálnak. Létrehozhatunk objektumokat, azaz egyes osztályokba tartozó egyedeket. Osztályok definiálásánál felhasználhatunk már meglévõ osztályokat, az új osztály (a leszármazott) örökli a szülõ adatait, módszereit. A módszerek hívásánál a meghívott módszer futási idõben, objektum aktuális típusának megfelelõen kerül kiválasztásra (virtuális módszerek, polimorfizmus).

 Az egyes osztályokban definiált változók és módszerek láthatóságát a C++-ban megismert módon - private, protected és public - lehet megadni.

 Eltérést jelent a C++-hoz képest, hogy a Jávában a beépített, egyszerû adattípusú - numerikus, logikai és karakter típus - változók kivételével minden objektum; az egyetlen összetett adattípus, a tömb (array) teljes értékû osztályként viselkedik. A program nem tartalmaz globális változókat és globális eljárásokat, minden adat és eljárás valamilyen objektumhoz, esetleg osztályhoz kötõdik. Persze a C++-t ismerõk tudják, hogy a globális változókat és függvényeket helyettesíteni lehet ún. osztályváltozókkal és statikus függvényekkel, ezek itt is használhatók.

 A Jávában minden módszerhívás - a fent említett statikus módszerek kivételével - virtuális. A C++-hoz hasonlóan lehetõségünk van az egyes objektumok típusát futási idõben lekérdezni (ez a C++-ban is viszonylag új nyelvi elem az ún. RTTI, Run-Time Type Interface), sõt itt akár az osztályok forrásprogramban definiált nevét futás közben is felhasználhatjuk például objektumok létrehozására. Az osztályok mellett a Jáva az Objective-C programozási nyelvbõl átvette az Interface fogalmat. Az Interface nem más, mint módszerek egy halmaza - adatszerkezeteket, egyedváltozókat nem tartalmaz -, amelyet egyes osztályok megvalósíthatnak (implementálhatnak). A Jáva a C++-szal ellentétben nem engedi meg a többszörös öröklõdést, viszont Interface-ek használatával, egyszerûbben, kevesebb implementációs problémával hasonló hatást lehet elérni. 

Architektúra-
független
és hordozható
Napjaink hálózatait heterogén hardver- és szoftver architektúrájú számítógépek alkotják. A programok fejlesztését nagymértékben megkönnyítené, ha a forráskódból elõállított program bármely architektúrán azonos módon futna. Ezen cél elérése végett a Jáva nyelv nem tartalmaz architektúra- vagy implementációfüggõ elemeket. A C nyelvvel ellentétben a beépített adattípusok (pl. int) mérete - tárolásához szükséges memória mérete, a típus értelmezési tartománya - nyelvi szinten meghatározott.

 Ahhoz, hogy a lefordított program változtatás nélkül futtatható legyen különbözõ hardver architektúrákon, a fordítóprogram a programot nem egy konkrét processzor gépi kódjára, hanem egy képzeletbeli hardver - virtuális gép (virtual machine) - utasításrendszerére fordítja le. Az így létrejött közbülsõ, ún. Byte kódot töltjük le a célarchitektúrára, ahol a virtuális gépet megvalósító program értelmezi és hajtja végre.

 A hordozhatóság nem csak a virtuális gépi utasítások, hanem a nyelv mellet szabványosított rendszerkönyvtárak szintjén is jelentkezik, ezek a könyvtárak valósítják meg a legfontosabb, operációs rendszerekhez kötõdõ feladatokat, mint például a be- és kiviteli rendszert, vagy a programok grafikus kezelõi felületét.

 Egy új architektúrán akkor futtathatók a Jáva programok, ha már implementálták rá a virtuális gépet, beleértve a rendszerkönyvtárakat is. A virtuális gépet C-ben írták, a kód POSIX.1 szabványnak megfelelõ operációs rendszert tételez fel, így viszonylag kis munkával hordozható. A hordozhatóság érdekes aspektusa a fejlesztõi környezet hordozhatósága. A környezet egyes részei, mint például a fordítóprogram, nyomkövetõ eszközök, vagy maga a HotJava böngészõ is Jáva nyelven íródott. Na és ha a Jáva programok hordozhatók, akkor hipp-hopp (?), az egész környezet is átkerült az új architektúrára. 

Interpretált
és dinamikus
Az interpretált végrehajtás - kombinálva a klasszikus kapcsolatszerkesztõ (linker) helyett futás idejû betöltéssel - a fejlesztési ciklust nagy mértékben felgyorsítja. A Jávából eltûntek a C-bõl ismert header állományok, feltételes fordítás, más programállományok fordítás közbeni beolvasása (#include). A lefordított programok tartalmaznak a szerkesztéshez szükséges minden információt. Elég csak a megváltozott állományokat lefordítanunk - nincs szükség a C-nél megszokott make programra, a forrásállományok közötti függõségek feltérképezésére -, a program máris futtatható. Egyébként a Jáva támogatja a nagybani programozást, összetartozó osztályok egy csomagba (package) foghatók, egyszerre fordíthatók. A láthatóság is figyelembe veszi a csomagokat, a C++ explicit friend deklarációjának szerepét itt a csomagra - de csak a csomagra - vonatkozó láthatóság veszi át. A kapcsolatszerkesztõ helyét az ún. osztály-betöltõ (class-loader) veszi át, amely futás közben - ha szükség van rá - betölti az egyes osztályokat megvalósító lefordított, Byte kódú programállományokat. Az osztály-betöltõ nem csak helyi állományokból, de szükség esetén a hálózaton keresztül is képes kódot letölteni.

 Többek között a betöltõ feladatának megkönnyítése végett a Byte kód tartalmaz a forráskódból átvett szimbolikus- illetve típus információkat. Lássunk egy példát arra, hol jöhet jól ez az információ.

 Az objektumorientált programozási paradigma egyik nagy ígérete, hogy általános célú, könnyen felhasználható osztály-könyvtárakat, "szoftver-IC-ket" hozhatunk létre a segítségével. Sajnos a C++ nyelv ilyen tekintetben nem váltotta be teljesen a hozzá fûzött reményeket. Nagyon nehéz olyan osztályokat tervezni, amelyeket késõbb nem kell majd úgy módosítani, hogy ne kelljen azt például új - bár a programozók elõl rejtett - adatkomponensekkel vagy módszerekkel bõvíteni. Bár az osztály külsõ interfésze nem feltétlen változott meg, ám a C++ az osztály reprezentációját, tárbeli elrendezését kihasználó fordítási mechanizmusa miatt ilyenkor az összes, a megváltozott osztályt - akár csak öröklésen keresztül - felhasználó programot újra kell fordítani. Ezt hívják "törékeny alaposztály" (fragile base class) problémának. A Jáva ezt a problémát úgy kerüli meg, hogy az osztályok adatkomponenseire, módszereire a Byte kódban is szimbolikusan hivatkoznak, a hivatkozások konkrét címekké kötése csak futási idõben, a virtuális gépben történik meg.

 A közbülsõ kódban megmaradt szimbolikus információk megkönnyítik a programok nyomkövetését. Sajnos az interpretált végrehajtásnak van egy nagy hátránya is, a programok sokkal - becslések szerint 10-20-szor - lassabban futnak, mint a gépi kódú megfelelõik. Bár a virtuális gép elég ügyesen lett kitalálva és a fordítóprogram is mindent megtesz azért, hogy ezt a virtuális architektúrát a lehetõ legjobban kihasználja, de még így sem vetekedhet a gépi utasítások sebességével. Ehhez még hozzáadódik a szimbolikus hivatkozások feloldásának ideje, a különbözõ betöltési- és futásidejû ellenõrzések - ld. késõbb -, a tárgazdálkodási modellel járó szemétgyûjtési algoritmus futásához szükséges idõ.

 E lassúság ellen jelenleg nem sokat tehetünk, legfeljebb azzal vigasztalhatjuk magunkat, hogy az alkalmazások jelentõs részénél - gyakori felhasználói közremûködést, vagy hálózati kommunikációt igénylõ programoknál - a program sebessége nem a legfontosabb követelmény. Persze a Jáva programok meghívhatnak gépi kódú (native) eljárásokat is, de ezzel elvesztjük az architektúra- függetlenség, hálózaton letölthetõség tulajdonságát. De bejelentettek olyan fordítóprogramot is, amely közvetlenül gépi kódra fordít.

 Legígéretesebbnek az úgynevezett "röptében fordítás" (just-in-time, on-the-fly compilation) ötlete tûnik. A Byte kód úgy tele van tömve szimbolikus információkkal, hogy elvileg nem nehéz - ezt kiindulási nyelvnek tekintve - optimalizáló fordító programot írni hozzá. Ráadásul a virtuális gép utasításrendszere nagyon hasonlít napjaink processzoraiéhoz, könnyû belõle jó kódot generálni. A fordítás történhet az egyes osztályok betöltésekor - a szükséges ellenõrzések után -, esetleg végrehajtás közben. Futás közben esetleg az is eldõlhet, hogy érdemes-e az adott programrészletet lefordítani, mert gyakran használjuk, avagy megmaradhat interpretáltnak.

 Másik érdekes kísérlet, hogy a Sun a Jáva virtuális gépet sziliciumon is megvalósítja, hamarosan kaphatók olyan mikroprocesszorok, amelyek a Jáva Byte kódot közvetlenül futtatják. 

Robusztus
és biztonságos
Ez a két fogalom a Jáva esetében kéz a kézben jár. Robusztus egy nyelv, ha megakadályozza vagy futás közben kiszûri a programozási hibákat, biztonságos, ha megakadályozza, hogy rosszindulatú programok kerüljenek a rendszerünkbe. Mindkét célkitûzés eléréséhez gyakran hasonló módszereket használhatunk.

 A robusztusság nyelvi szinten a szigorú, statikus típusosságban jelenik meg. Minden adatnak fordításkor jól definiált típusa van, nincsenek automatikus konverziók, az explicit konverzió csak kompatibilis típusoknál sikerül, egyébként legkésõbb futtatáskor programhibát (exception) okoz. A mutatók eltûnésével rengeteg potenciális hibalehetõség eltûnt a nyelvbõl - pl. NULL pointer hivatkozás, levegõben lógó mutatók -, persze elvesztettük az "igazi programozók" egyik kedvencének, az int-eknek és a mutatóknak ide-oda alakítgatásának lehetõségét is. A dinamikus szemétgyûjtés megkímél bennünket a hasznos memória elszivárgásától (memory leak). Az egyedüli összetett adatszerkezet, a tömb használatakor a túlcímzést futási idõben ellenõrzik. Az osztály-betöltõ arra is figyel, hogy a módszereket megfelelõ típusú paraméterekkel hívjuk meg.

 A biztonság (security) a robusztussággal kezdõdik, a fordító csak korrektül viselkedõ programokat ad ki magából. Ez elegendõ lehet önálló alkalmazásoknál, de a programkák letöltésénél ennél többre van szükség. Kezdjük azzal, hogy ki garantálja, hogy a letöltött Byte kódot valóban egy megbízható Jáva fordító hozta létre, nem pedig egy bit-betyár barkácsolta össze a hexadecimális szerkesztõjével? A Byte kód minden utasítása információt tartalmaz az operandusok típusáról, az osztály-betöltõ - függetlenül attól, hogy a helyi háttértárról vagy a hálózatról tölt be - ellenõrzi, hogy a program megfelel-e a nyelv szabályainak. Eldönti például, hogy minden operandus valóban a megfelelõ típusú, nem használjuk ugyanazt az adatot más-más típusúként is. Ellenõrizhetõ az is, hogy a módszerek a vermüket konzisztensen használják-e, valamint hogy a kód nem fér-e hozzá számára nem engedélyezett - a nyelv definíciója szerint láthatatlan, rejtett - adatkomponensekhez, módszerekhez.

 A betöltõ egy hivatkozott osztályt elõször mindig a helyi háttértárból próbál betölteni, csak akkor fordul a hálózaton elérhetõ kiszolgálóhoz, ha az osztály nincs meg a helyi rendszeren. Így elkerülhetõ, hogy trójai falóként valamelyik rendszerkönyvtár helyett azonos nevû, távolról betöltött programot futtassunk.

 Ha a betöltött programkák átjutottak a betöltõ konzisztencia-ellenõrzésén, akkor a virtuális gép felügyelete alatt kezdenek futni, ez ellenõrzi, hogy a programok csak engedélyezett tevékenységet hajtanak végre. Szigorúan szabályozott - vagy teljesen tiltott - például helyi állományokhoz való hozzáférés, tiltott más helyi programok indítása, jelentõsen korlátozott a hálózaton felvehetõ kapcsolatok címzettje.

 Sajnos ezen biztonsági szabályok erõsen korlátozzák a programkák képességeit. Biztonsági szempontból legfeljebb a helyi rendszerbõl betöltött - többé-kevésbé megbízható -, illetve hálózatról letöltött - eleve gyanús - osztályok között lehet különbséget tenni. Késõbbiekben lehetõség lesz nyilvános kulcsú titkosítás segítségével azonosítható forrású, garantáltan eredeti, változatlan, "megbízható" programok letöltésére és futtatására is. 

Többszálú A programok jelentõs része párhuzamosan végrehajtható részletekre - vezérlési szálakra - bontható. Így jobban kihasználható a számítógép központi egysége, a programok a külsõ - például felhasználói - eseményekre gyorsabban reagálhatnak. Az egymással kommunikáló, viszonylag laza kapcsolatban álló szálakra bontott feladat könnyebben áttekinthetõ, megvalósítható és belõhetõ. A többszálú programozáshoz a Jáva nyelvi szinten biztosítja az automatikus kölcsönös kizárást: szinkronizált (synchronized) módszerek vagy utasítások, valamint a szálak létrehozásához, szinkronizációjának megvalósításához a rendszerkönyvtár tartalmaz egy ún. Thread osztályt. A Thread osztály a Hoare-féle feltételes változók (conditional variable) modelljét követi. Természetesen az összes, a rendszerkönyvtárakban definiált osztály használható többszálú programokból anélkül, hogy aggódnunk kellene az esetleges hibás mûködés miatt (thread-safeness).

 A Jáva virtuális gép a szálak futtatásához prioritáson alapuló preemptív - de nem feltétlenül idõosztásos - ütemezõt tartalmaz. Ez magyarázza például azt, hogy - a jelentõs felhasználói igények ellenére - nem született még Jáva virtuális gép a Microsoft Windows 3.1-es - csak kooperatív ütemezést tartalmazó - rendszerére.

 A többszálú programozás támogatása ellenére a Jáva nyelv - legalábbis mostani változatában - valósidejû programok írására nem alkalmas. A virtuális gép nem tartalmaz határidõs ütemezési képességeket, de még a prioritás-öröklést sem ismeri, a jelenleg implementált szemétgyûjtõ algoritmus sem alkalmas valósidejû futtatásra - bár ez utóbbi a virtuális gép "magánügye", a programok változtatása nélkül könnyen lecserélhetõ. 

Elosztott A Jáva technológiát beharangozó ismertetõk mindenhol kiemelik, hogy a technológia elosztott (distributed) rendszerek létrehozását támogatja. Itt azért én megjegyezném, hogy az elosztottság eléggé cseppfolyós fogalom, a Jáva jelenleg sokkal kevesebbet tud, mint amit sokak - köztük én is - szeretnének.

 Az elosztottság jelenleg két formában jelenik meg: mint már említettem, az osztály-betöltõ képes Jáva Byte kódot a hálózaton letölteni. Ezen túl a rendszerkönyvtárak tartalmaznak a TCP/IP protokollcsalád alacsonyabb, szállítási (TCP és UDP), valamint magasabb, alkalmazói (pl. FTP, HTTP) szintû protokollok kezélésére szolgáló osztályokat.

 De egy Jáva program nem elosztott objektumorientált rendszer, nincs mód távoli objektumok létrehozásra, transzparens távoli módszerhívásra. Viszont komoly, biztató kisérletek történnek a Jáva és a CORBA (Common Object Request Broker Architecture) összeházasítására, de láttam már a hálózaton CORBA-tól független, de hasonló funkciókat nyújtó kisérleti osztály-könyvtárat is. 

Összefoglalás

Surfer Duke A Jáva számos fent felsorolt tulajdonsága miatt érdekes, figyelemre méltó programozási nyelv; a nyelv tervezõi sokat tanultak a korábbi tapasztalatokból. Bár véleményem szerint a C++-t, mint objektumorientált nyelvet a közeljövõben nem fogja kiszorítani, de bizonyos - nem túl nagy méretû, interaktív, grafikus felhasználói felületû - feladatok megoldásánál hódítani fog. Az pedig, hogy szorosan összefonódik a World Wide Web-el, garantálja a rohamos elterjedését, szinesebbé, gazdagabbá téve az Internet hálózat világát. Bár nem kell feltétlenül hálózathoz kötõdnie: nem lennék meglepve, ha hamarosan multimédiás CD-k lejátszásához is Jávával felcsinosított böngészõket használnánk.

 Persze a Jáva képességeivel nem egyedülálló napjaink számítástechnikájában. Hasonló úton indult el az Apple a Dylan rendszerével, a Microsoft pedig a Blackbird-del, emlegetnek egy Python nyelvet, a Free Software Foundation is foglalkozik virtuális gépen alapuló program-interpretálással és még lehetne sorolni a hasonól célú nyelveket, rendszereket.

 Ha a Jáva nyelv mégis elterjed - márpedig szerintem erre minden esély megvan -, akkor ehhez hozzájárul a jó reklám, az ügyes marketing stratégia valamint a felhasználók és legfõképpen a szoftvergyártók erkölcsi és anyagi támogatása. Márpedig a szoftvergyártók tényleg ráharapni látszanak az új technológiára, olyannyira, hogy reménytelennek látszik teljes felsorolást adni azokról a cégekrõl, amelyek csatlakoztak, forrás licenszet vásároltak. Remélem nem sértem meg a kimaradókat, a teljesség igénye nélkül: a Sun-nál külön részleget hoztak létre a Jáva fejlesztésekre. A WWW szempontjából talán a legjelentõsebb esemény, hogy a Netscape megvásárolta a technológiát és integrálja az új böngészõjébe. Windows 95 alatti fejlesztõrendszerrel jelent meg a Symantec, hasonló termék kifejlesztését jelentette be a Borland, megvásárolta a technológia felhasználási jogát az IBM, sõt még a Microsoft is komolyan érdeklõdik.

 Ha már a licenszekrõl beszéltem: nincs szükség licenszre ahhoz, hogy valaki Jáva programot illetve programkákat fejlesszen, a lefordított programot terjessze. Azon OEM szoftverfejlesztõk, akik a Jáva technológiát integrálni akarják termékeikbe, forrás licenszet vásárolhatnak.

 A Jáva technológiához kapcsolódóan csomó név és grafika a Sun - regisztrált - védjegye. Ezek közül a cikk elején látott Duke és a HotJava szimbóluma, a gõzölgõ kávéscsésze csak a Sun által használható. Hamarosan lesz egy ún. "Jávával turbósított" (Java Powered) grafika az olyan WWW lapokhoz, amelyek Jáva programkákat tartalmaznak, valamint egy "Jávával kompatibilis" (Java Compatible) grafika azon OEM termékeknek, amelyek elõállítói megvásárolták a forrás licenszet, termékükbe beépítették ezt a technológiát - pl. új architektúrára implementálták a virtuális gépet - és sikeresen megfeleltek a - most készülõ - kompatibilitási tesztnek.

 Ha valaki Jáva programokat akar fejleszteni, legegyszerûbb, ha a Sun-tól ingyenesen letölthetõ Jáva Fejlesztõi Csomagot (Java Development Kit) használja, ami tartalmaz egy fordítóprogramot (javac), egy nyomkövetõt, hibakeresõt (jdb) a futtatáshoz szükséges virtuális gépet és egy a programkákat futtató alkalmazást (AppletViewer). A Sun a JDK-t csak a Solaris 2.x, Windows 95 és Windows NT operációs rendszerekre készítette el, de más fejlesztõk nagyon sok egyéb elterjedt operációs rendszerre is hordozták. Igen, van a Linux-on is.

 Komoly fejlesztéshez használhatók az integrált fejlesztõi környezetek (Integrated Development Environment, IDE), jelenleg a legismertebbek a Sun, a Microsoft és a Symantec termékei. A programkák futtatására pedig jók például a Netscape Navigator, illetve a Microsoft Internet Explorer Web böngészõk is. A Netscape csaknem minden elterjedt architektúrán fut, a Microsoft egyelõre csak a Windows 95/NT rendszeren, bár mindkét cég igéri a Windows 3.11-es változatát is.

Végezetül néhány kérdés, kétely

Duke A Jáva technológia hatalmas léptekkel fejlõdik. Látszólag nagy a nyomás fejlesztõgárdán, hogy minél hamarabb "végleges" változattal álljanak elõ. A nagy sietségben maradhatnak a rendszerben átgondolatlan, elnagyolt megoldások. "Jó" - azaz rossz - példa erre a grafikus programozási könyvtár (AWT, Abstract Windowing Toolkit) esete, amelyet az alfa és béta verzió között teljesen átírtak, de, bár mûködik, - nem csak - nekem még ez a mostani sem nagyon tetszik: a fejlesztõk beismerték, hogy a Netscape sürgette õket. Persze az objektumorientált könyvtárak bõvíthetõk, akár lecserélhetõk is, de nem mindegy, mi kerül az 1.0-s verzió specifikációba. "Ami tapad az ragad", a korábbi verziókkal való kompatibilitás megõrzése miatt a rendszerek teherként hurcolják magukkal az elsõ verziók elsietett döntéseit.

 Az sem látszik még, hogy a technológiát mennyire fogja egy-két erõs cég a saját érdekeinek megfelelõ irányba elvinni, avagy megmarad-e szélesebb körû érdekeket, véleményeket tükrözõ, nyílt technológiának. A C++ nyelvre is ráfért az elmúlt években bekövetkezett, széles felhasználói kört megmozgató tisztázási, szabványosítási eljárás, gondolom a Jávának sem ártana. Nem látom például, hogy azon felül, hogy a Jáva karakterei 16 bites Unicode rendszerben vannak ábrázolva, valaki foglalkozna a nemzetköziesítés (internalization) kérdéseivel.

 Sokan attól is félnek, hogy a "végleges" verzió megjelenése után a SUN szigorít a licensz politikáján, túl költségessé teszi a fejlesztõrendszerét, vagy pl. a HotJava-t. A WWW hálózat terjedésében jelentõs szerepet játszott az a tény, hogy a szükséges programok - kiszolgálók is, böngészõk is - szabadon hozzáférhetõk, ingyenesek voltak. Bár jelenleg a Netscape uralni látszik a böngészõk piacát, de nem biztos, hogy mindenki meg tudja, vagy akarja fizetni ennek az árát. Kérdés, hogy más kereskedelmi, vagy szabadon terjesztett böngészõk mennyire veszik át a Jáva technológiát, a WWW szerverek üzemeltetõi, a HTML lapok szerzõi mekkora potenciális, Jávát értõ olvasótáborra számíthatnak.

 Kiváncsi vagyok, hogy a felhasználók - fõleg a nagy cégek - mennyire fogadják el a rendszerbe beépített biztonsági mechanizmusokat. Elsõ ránézésre megbízhatónak - ha néha túl korlátozottnak is - tûnik a rendszer, ám tapasztalatok szerint a vírusírók zseniálisak. Ha elõbukkan néhány biztonsági luk, a felhasználók bizalma hamar megcsappanhat, elvégre a hálózaton letöltött programok hiányos védelmi rendszer mellett potenciálisan hatalmas zûröket okozhatnak a helyi rendszerben.

 Mindezen kérdések ellenére én bizalommal tekintek a Jáva jövõjére.


Lábjegyzetek

1
Talán sokan emlékeznek rá, hogy a SUN-nál már korábban is kitaláltak olyan érdekes, innovatív technológiákat, amelyek az üzleti vetélytársaknak nem nagyon tetszettek. Volt egyszer például egy News ablakozó rendszer, ami ellen elkezdték támogatni az MIT-n folyó X Window rendszer fejlesztést és létrehozták az X Konzorcium-ot. Késõbb a SUN beadta a derekát, õ is átállt az X-re, de ragaszkodott a saját ablakkezelõjéhez, az OpenWindows-hoz. Hát ezt sem szerették, így létrejött a Motif, és a SUN újra beadta a derekát ...
2
Bár itt Magyarországon a Jáva szót hallva az Indonéz szigetvilág egyik legnagyobb szigetére gondolunk, az amerikaiak inkább - a kezdetben onnan importált - kávéra (az elkészített italra) asszociálnak. Ezért találhatók a témakörben olyan elnevezések, mint HotJava, Digital Espresso...

Fontosabb WWW címek

Elsõdleges információforrások

Jáva gyûjtemények

Jáva GYIK-ok (Gyakran Ismétlõdõ Kérdések, FAQ)

Bevezetõk a Jávával ismerkedõknek

Jáva könyvekrõl


Kiss István

 Counter
updated: 96/06/15, http://www.eunet.hu/infopen/cikkek/java/article.htm 1