Java a mobilní telefony

Rychlý nástup mobilních telefonů s podporou Java 2 Micro Edition (J2ME) vyvolává velkou vlnu zájmu o tuto platformu jej...


Rychlý nástup mobilních telefonů s podporou Java 2 Micro Edition (J2ME)
vyvolává velkou vlnu zájmu o tuto platformu její budoucnost v handheldových
zařízeních nejrůznějších typů se ze současného pohledu jeví jako velmi
zajímavá. Následující článek je věnován popisu a porovnání jednotlivých
javových
platforem, přičemž důraz je kladen právě na J2ME.
Java je mezi běžnými programátory známa jako programovací jazyk. Někteří
dokonce vědí, že je to nejenom programovací jazyk, ale také platforma (dokonce
jsou to 4 platformy, ale to předbíhám). Když jsem však dělal letmý průzkum mezi
programátory, které jsem školil, a chtěl po nich, aby mi vysvětlili, co to ta
platforma je, dostával jsem většinou obecné, nic neříkající odpovědi. Pokusím
se proto alespoň stručně tuto mlhu rozfoukat.

K čemu platforma slouží
Účel platforem Javy je obdobný jako účel běžného operačního systému: má za úkol
odstínit aplikaci od operačního systému a hardwaru, na kterém běží, a přitom
umožnit maximální využití jeho možností. Na rozdíl od klasických uživatelských
operačních systémů typu Windows nebo Linux však "zákazníky" platforem nejsou
uživatelé, ale pouze aplikace. Java byla hned při svém zrodu v květnu 1995
vyhlášena jako jazyk, jehož programy nebudou záviset na platformě (zde bylo
platformou myšleno hardware + operační systém). Java sama měla být novou
platformou, jejíž aplikace poběží všude od internetových terminálů až po
superpočítače.

Jedna nestačí
Rozšíření Javy v některých směrech překonalo počáteční prohlášení jejích
tvůrců. Java se začala používat ve stále menších zařízeních a na druhou stranu
v ní byly vyvíjeny i rozsáhlé distribuované aplikace rozprostřené na řadě
vzájemně komunikujících počítačů.
Při tomto záběru bylo jasné, že jediná platforma není udržitelná pro všechny
typy počítačů a aplikací a že bude potřeba definovat několik platforem. Nejprve
bylo v říjnu 1996 ohlášeno API (česky knihovna) Java Card určené pro vývoj
aplikací pro čipové karty (tehdy se jí ještě platforma neříkalo, tento
přívlastek získala až později) tam byla potřeba samostatné knihovny více než
zřejmá. Nutnost jemnějšího dělení však začala být čím dále tím akutnější i pro
větší zařízení.
Po intenzivních vývojových pracech ohlásil Sun v květnu 1999 tři platformy:
J2EE (Java 2 Enterprise Edition), jež je zejména určena pro vývoj velkých
podnikových aplikací a distribuovaných systémů využívajících rozsáhlých
databází a často komunikujících se svými uživateli prostřednictvím webu a
dalších internetových technologií.
J2SE (Java 2 Standard Edition) jako pokračování dosavadní platformy pro vývoj
aplikací pro standardní stolní počítače.
J2ME (Java 2 Micro Edition), která byla určena především pro vývoj aplikací pro
mobilní telefony a PDA. Tato platforma byla optimalizována tak, aby co nejlépe
respektovala omezení těchto zařízení (malá paměť, méně výkonný procesor,
omezené uživatelské rozhraní) a na druhou stranu maximálně využila jejich
výhodných vlastností (např. trvalé připojení k síti).
Java Card zmíním pro úplnost i zde (nyní je už na stránkách firmy Sun
prezentována jako platforma).

Platforma je, když...
Jednou z příčin nezávislosti programů napsaných v jazyce Java na operačním
systému a hardwaru, na němž běží, je to, že se nepřekládají do strojového kódu
počítače (často se ani předem neví, kde poběží), ale do tzv. bajt-kódu. Na
počítači, na němž chceme takovýto program spustit, musíme nejprve instalovat
relativně jednoduchý program, který je označován jako virtuální stroj a který
čte přeložené bajt-kódy a hned je provádí (teď pominu to, zda je interpretuje
nebo přeloží do nativního kódu prostě je zodpovědný za jejich vykonání).
Platforma je pak tvořena třemi komponentami: první z nich je virtuální stroj,
druhou použitá verze jazyka Java a třetí komponentou je základní knihovna,
která svým způsobem definuje, co si můžeme ve svých programech dovolit a jak
toho můžeme dosáhnout. Prakticky veškerá komunikace aplikace s operačním
systémem (záleží-li vám na přenositelnosti, pak opravdu veškerá) probíhá
prostřednictvím uvedených složek platformy.

J2SE
J2SE nabízí vše potřebné k tomu, abyste mohli vyvinout plnohodnotnou
desktopovou aplikaci spolupracující s jinými aplikacemi v síti. Paleta nástrojů
je opravdu široká, počínaje komfortní knihovnou pro tvorbu oken přes práci se
soubory, vytváření a správu paralelních procesů, spolupráci s externími
databázemi a konče připojením k internetu a jiným sítím a dokonce i spouštěním
metod na jiných počítačích, šifrováním a dešifrováním zpráv a řadou dalších
funkcí. Počet tříd překročil ve verzi 1.4 úctyhodných 2 700 (pro zajímavost na
počátku měla Java asi 110 tříd). Uvědomíte-li si, že každá třída má řadu
zveřejněných metod a občas i atributů, pochopíte, že se jedná o velice mocný
aparát, který "myslí" opravdu téměř na všechno.

J2EE
Název platformy je vysloveně marketingovou záležitostí. Jedná se o platformu
podporující distribuované aplikace, tj. aplikace, které mohou být rozprostřené
na více počítačích. Termín "enterprise application" patřil však mezi tzv.
buzz-words, tj. módní termíny, o nichž sice manažeři ne vždy přesně vědí, co
znamenají, ale věří jim a jsou ochotni uvolnit prostředky na příslušný program.
Aplikace postavené na této platformě však mohou s výhodou vyvíjet a využívat i
menší společnosti a dokonce i jednotlivci. Vraťme se ale k vlastní platformě.
J2EE využívá stejný virtuální stroj i stejnou definici jazyka jako J2SE. Pouze
rozšiřuje knihovnu o dalších více než 400 tříd, které dále rozšiřují některé
oblasti pokryté v J2SE a kromě toho mají na starost především otázky komunikace
jednotlivých částí programu, které mohou být umístěny na různých počítačích,
podporu transakcí a některé další otázky specifické pro distribuované systémy.
Nezanedbatelnou součástí jsou i třídy pro tvorbu servletů.
Hlavní význam J2EE ale není v tom, jak má definovanou platformu, ale v dokonalé
spolupráci řady dalších programů.

J2ME
J2ME není ve skutečnosti platforma je to spíše oblast působnosti (stejně jako v
případě J2EE zapracoval marketing). Často se v souvislosti s ní setkáte s
termínem Wireless Java (bezdrátová Java), který se snaží postihnout, že
zařízení, pro něž je tato platforma určena, jsou bezdrátově připojitelná k
internetu (např. mobilní telefony). Tato platforma se těší stále většímu zájmu
a to zejména díky podpoře ze strany výrobců mobilních telefonů, budu se jí
proto věnovat podrobněji.
Možnosti zařízení v oblasti, na kterou byla J2ME zaměřena, jsou natolik
nesourodé, že pro J2ME byly definovány hned dvě "podplatformy" (Sun je sice
označuje jako konfigurace, ale podle definice jsou to vlastně platformy):
CDC (Connected Device Configuration) pro zařízení s 32bitovými procesory,
minimálně 512 KB paměti pro program (většinou ROM) a 256 KB paměti RAM pro data
alokovaná při běhu programu (typicky mívají tato zařízení alespoň 2 MB paměti).
Do této kategorie spadají většinou PDA (Personal Digital Assistant),
obrazovkové telefony a některé další, většinou stacionární přístroje.
Tato zařízení by měla být podle specifikace schopna implementovat všechny
požadavky kladené na virtuální stroj. Vzhledem k omezené kapacitě pro ně byl
vyvinut tzv. kompaktní virtuální stroj, označovaný CDC-VM (původně byl označen
CVM, ale vzhledem k možné záměně s KVM, o němž budu hovořit za chvíli, bylo
označení změněno). Ten (na rozdíl od standardního virtuálního stroje)
neobsahuje žádný JIT překladač, ale pouze interpret. Už má ale konkurenty,
kteří JIT překladač obsahují.
Z knihovny byly vypuštěny pouze balíky, které měly na starosti grafické
uživatelské rozhraní, komunikaci mezi počítači a přímou vazbu na procesor.
Třídy v balících pak byly poněkud "seškrtány", ale většina se jich do platformy
probojovala. Specifikace však ještě není uzavřena.
CLDS (Connected Limited Device Configuration) pro zařízení s 16 nebo 32bitovým
procesorem a minimálně 128 KB paměti pro program (většinou ROM) a 32 KB paměti
RAM pro data alokovaná za běhu programu. Povinnou výbavou těchto zařízení je
nepřetržitá možnost připojení k síti. Do této kategorie se řadí především
mobilní telefony.
Tato zařízení vyžadovala větší zásahy do standardu. Byl pro ně vyvinut
virtuální stroj označovaný Kilobyte Virtual Machine (KVM), což mělo postihnout
jeho malé paměťové nároky ty jsou sice opravdu malé, avšak jsou vykoupeny
některými omezeními jazyka. (I KVM má již konkurenty, kteří mají malé paměťové
nároky a přitom obsahují i JIT překladač. Lze očekávat, že v budoucích
zařízeních bude nahrazen.)
V programech po CLDC si musíte odpustit některé z možností standardní Javy
patří mezi ně reflexe, serializace, finalizace, slabé reference, nativní
rozhraní a datový typ double. Kromě toho KVM neverifikuje načítané třídy (tj.
neověřuje, zda neprovádí nějaké nepravosti), takže to místo něj musíme provést
již ve fázi překladu.
Vzhledem k malé paměti a omezením KVM zůstaly ze standardní knihovny jen balíky
java.io, java.lang a java.util, a i ty byly ještě "proškrtány". Oproti CDC byla
vypuštěna např. reálná aritmetika, možnost reflexe a větší část práce se
soubory. Z dynamických datových struktur zůstaly jen HashTable, Vector a Stack.
Do výsledné sady se neprobojovala ani mnohá užitečná rozhraní např. Comparator.
Naproti tomu byl přidán balík javax.microedition.io s jednou třídou, jednou
výjimkou a několika rozhraními pro vstup a výstup, jež umožňují snadné
připojení k síti.
Tato omezení však nejsou příliš omezující, protože platforma je určena pro
zařízení, pro která se nebudou vyvíjet žádné superdokonalé aplikace, ale která
budou sloužit spíše jako tenký klient pro geniální aplikace běžící na serveru.
Pro tyto účely je specifikace naprosto dostačující.

Java Card
Platforma Java Card je ve srovnání s ostatními platformami takovou
"pidiplatformou". To je ovšem vzhledem k očekávatelným možnostem zařízení, pro
něž je určena, pochopitelné. Předpokládá se, že platforma poběží na osmibitovém
procesoru s nejméně 16 KB ROM a 0,5 KB RAM. (Nepodceňujte je odmyslíte-li si
omezenou velikost paměti, která je jistě jen dočasná, je výpočetní výkon těchto
procesorů srovnatelný s výkonem prvních IBM PC.)
Jak sami odhadnete, z klasické Javy toho zde moc nezbylo. Virtuální stroj Java
Card Virtual Machine je opravdu maximálně zestručněný a ze základní knihovny
zde zbyla pouze povinná třída Object a několik tříd výjimek. V nové specifikaci
Java Card 2.0 se prosadilo i několik rozhraní. Z datových typů jsou použitelné
pouze byte a short. Na druhou stranu přibyla řada drobných balíků, které
vycházejí vstříc specifickým požadavkům tvůrců programů pro tyto karty. Pro
úplnost bych měl ještě dodat, že někdy bývá zařazována pod "platformu" J2ME je
to pouze věc pohledu.

J2ME ukažte se z profilu
Vrátím se ještě k platformě J2ME. Použijeme-li marketingové terminologie, jsou
platformy zaměřené vertikálně na různé požadované výpočetní výkony. Obchodníci
však rádi dělí trh také horizontálně podle zájmů jednotlivých skupin zákazníků
používajících příslušná zařízení. Pro tento účel byly v platformě J2ME
(přesněji v jejích 2 podplatformách) zavedeny profily, které adresují některé
konkrétní oblasti nasazení počítačů.
Profily definují nad platformou další nadstavbu (tj. rozšiřují knihovnu a mohou
vznášet další požadavky na hardware). Jejich přehled vidíte na obrázku.
Představme si jeden po druhém. Začneme zprava, protože platforma CDC je sice
méně omezující, nicméně také méně dotažená (ještě nevyšla finální verze její
specifikace), takže budu stručný:
Foundation Profile doplňuje základní knihovnu platformy o vyškrtané třídy. Jak
jeho název napovídá (a obrázek potvrzuje), je míněn jako základna dalších
profilů.
Personal Basis Profile přidává základní uživatelské rozhraní. Je určen pro méně
dokonalá zařízení, takže např. povoluje pouze jedno aktivní okno.
Personal profile je určen pro dokonalejší zařízení, a nabízí proto i
dokonalejší uživatelské rozhraní.
RMI Profile přidává k základnímu profilu balík Java.rmi a jeho podbalíky, které
společně umožňují vzdálené volání procedur na jiných počítačích a další síťové
"vymyšlenosti".
Game Profile, který je určen pro vývoj her, je stále ve stadiu definice
(ostatně jako většina ostatních) a není dokonce ještě ani jasno, jestli bude
vystavěn nad Foundation Profile nebo zda bude založen přímo na CDC.
PDA Profile (PDAP) je určen pro PDA, které mívají oproti mobilním telefonům
větší displej a propracovanější uživatelské rozhraní. Ani jeho návrh však ještě
nedospěl do finální verze.
Mobile Information Device Profile (MIDP) je profil, na který se v současné době
soustřeďuje největší pozornost. Je již prověřen praxí a v současné době se
připravuje verze 2.0. Je určen pro mobilní telefony a další zařízení, která
mají pouze malý displej a nepříliš dokonalou klávesnici (specifikace doslova
říká zařízení s jednoruční či dvouruční klávesnicí). Protože je opravdu ze
všech nejdůležitější, řekneme si toho o něm trochu více.
Profil MIDP je oproti CLDC trochu náročnější a požaduje, aby zařízení
poskytovalo 512 KB paměti (RAM + + ROM dohromady). Navíc požaduje minimálně 8
KB paměti, do které je možno zapisovat, ale která by se neměla při vypnutí
zařízení smazat. (To jsou požadavky na telefony, které si nyní můžete koupit
již za 6 000 Kč. Přitom tolik paměti měl v roce 1981 v ČSAV náš sálový počítač
IBM a to jsme si říkali, jaké máme dělo.)
Profil přidává k základní knihovně tři balíky:
javax.microedition.midlet obsahuje jednu abstraktní třídu, která je povinným
rodičem každého MIDletu (tak se v tomto profilu označují aplikace) a jednu
výjimku.
javax.microedition.lcdui se specializuje na třídy uživatelského rozhraní.
Nabízí nejen prostředky pro tvorbu jednoduchých formulářů s povely, textovými
vstupními poli, zaškrtávacími políčky, přepínači a seznamy, ale také sadu
nástrojů pro kreslení základních grafických útvarů (čára, obdélník, elipsa a
eliptická výseč), práci s texty a pro práci s obrázky, které může MIDlet buď
sám nakreslit nebo stáhnout ve formátu PNG.
javax.microedition.rms poskytuje prostředky pro uložení důležitých informací
mezi jednotlivými spuštěními daného MIDletu.
Kromě toho profil doplňuje balík javax.microedition.io o rozhraní
HttpConnection, jehož objekty umožňují komunikaci s okolním světem
prostřednictvím protokolu http.

Závěr
Java je použitelná opravdu všude od čipových karet až po superpočítače. Po éře
počátečního nadšení applety následovaného obrovským rozmachem distribuovaných
aplikací postavených na platformě J2EE nastává éra mikroaplikací na mobilních
telefonech a PDA. Značná část těchto aplikací bude komunikovat se svými
protějšky na serverech a bude tak moci využívat jejich databáze i výpočetní
výkon. Všichni velcí výrobci telefonů tuto novou éru zaznamenali, a podíváte-li
se do jejich nabídky, zjistíte, že všechny nové mobilní telefony včetně těch
nejlevnějších již Javu (přesněji řečeno MIDP) podporují. Lze očekávat, že
zanedlouho se bude objevovat i v zařízeních, s nimiž se setkáváme v domácnosti.
Skutečný rozsah jejího budoucího rozšíření je proto dnes jen těžko odhadnutelný.
Autor článku pracuje jako EDU Consultant ve firmě Amaio Technologies









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.