fotoMNs
 Miroslav Nesrsta senior
MNs-úvod O stránke Curr. Vitae Kontakt Linky


webdesigner: self
 
   arrow (1K)
Chvála Javy
Java nie je len ďalší z radu programovacích jazykov, hoci moderný a efektívny, ani módna záležitosť. Java je v dnešnej podobe komplexná platforma pre vývoj a beh širokého spektra aplikácií v heterogénnom sieťovom prostredí. História Javy je pomerne krátka. Začiatkom 90. rokov minulého storočia skupina výskumných pracovníkov vo firme Sun Microsystems pracovala na projekte vývoja univerzálneho softvéru slúžiaceho na riadenie a programovanie sieťových zariadení a tzv. vnorených systémov ako napr. čipy v mobilných telefónoch, spotrebnej elektronike a pod.
Výskumníci pôvodne rátali s využitím programovacieho. jazyka C++, čoskoro však usúdili, že tento jazyk je pre ich účely príliš zložitý, nejednoznačný a nespoľahlivý. Preto sa vydali vlastnou cestou a vytvorili si pre svoje potreby nový jazyk. Projekt tak trocha predbehol svoju dobu a bol by asi upadol do zabudnutia nebyť razantného nástupu internetu v r. 1995. Vtedy manažment vo fy Sun dospel k poznaniu, že nový jazyk je ideálny pre použitie v heterogénnynch sieťových prostrediach, ako je aj internet. Preto vo firme pripravili koncept univerzálnej programovacej platformy, orientovanej na sieťové prostredie a nezávislej od použitého hardvéru či operačného systému. Platforma a programovací jazyk dostali názov Java, vraj preto, že jeho tvorcovia radi pili kávu (java je americký slangový výraz pre kávu).
Prvá edícia Javy s označením 1.0 obsahovala knižnicu tried, pozostávajúcu zo siedmich základných balíkov, ktoré pokrývali najdôležitejšie oblasti použitia, ako je práca s reťazcami, matematické funkcie, sieťové funkcie, práca s grafikou apod. K rozšíreniu Javy prispela jednak jej voľná licencia - vývojové prostredie na tvorbu aplikácií v Jave, Java Development Kit bola k dispozícii zadarmo, jednak vytvorenie webového prehliadača Hotjava, ktorá ako prvý umožňoval prehliadanie stránok s vloženými mikroaplikáciami, tzv. appletmi. Applety poskytovali nevídanú mieru interaktivity na dovtedy statických webových stránkach a tak podporu technológie Java ohlásili v rýchlom slede aj výrobcovia dvoch najznámejších webových prehliadačov Netscape a Microsoft. Už v roku 1997 firma Sun uvoľnila ďalšiu edíciu javy s označením 1.1. V špecifikácii jazyka došlo k niekoľkým menším, ale užitočným zmenám, najväčšie rozšírenie však podstúpila knižnica tried. Počet balíkov sa rozšíril zo 7 na 22 - pribudla lepšia podpora grafiky, možnosť práce s komprimovanými súbormi, s databázami, a ďalšie možnosti. V priebehu ďalších rokov počiatočné nadšenie zo strany tvorcov webových stránok pre applety opadlo a Java sa postupne pretransformovala na reálne použiteľnú technológiu. Najnovšia edícia Javy s marketingovým označením Java 2 Platform predstavuje skutočne komplexnú programovaciu platformu.
Požiadavky, stanovené pri vývoji programovacieho jazyka Java, boli vedené povahou výpočtového prostredia, v ktorom musí byť software rozmiestnené. Masívny rast Internetu a svetovej web siete vedie ku kompletne novému spôsobu nazerania na vývoj a distribúciu softwéru. V záujme existencie vo svete elektronickej komercie a distribúcie, technológia Java musí umožniť vývoj aplikácií bezpečných, vysokovýkonných a vysoko robustných, bežiacich na viacerých platformách, v heterogénnych a distribuovaných sieťach. Činnosť na viacerých platformách v heterogénych sieťach ruší platnosť tradičných schém binárnej distribúcie programov, ich vydaní, opráv závad a pod. Pre prežitie v tejto džungli, programovací jazyk Java musí byť z hľadiska architektúry neutrálny, portabilný (prenosný) a dynamicky adaptovateľmý. Systém, ktorý sa vyvinul tak, aby vyhovel týmto potrebám, je jednoduchý a tak sa bežní vývojári programovací jazyk Java ľahko naučia a môžu ho ľahko používať pre programovanie, objektovo orientovaný, aby prevzal výhodu moderných softwérových vývojových metodológií a aby sa hodil do distribuovaných client-server aplikácií, viacúlohový (multithreading) pre vysokú výkonnosť v aplikáciách, ktoré si vyžadujú vykonávanie veľa súčasne bežiacich aktivít a ínterpretovaný, pre maximálnu portabilitu a dynamické schopnosti.
Nezávislosť na platforme a "portabilita"

Technológia Java je navrhnutá tak, aby podporovala aplikácie ktoré budú šírené v prostredí heterogénnych sietí, V takýchto prostrediach, aplikácie musia byť schopné vykonávania na celom rade hardvérových architektúr. V rámci tohto radu hardvérových platforiem, aplikácie sú vykonávané nad radom operačných systémov a musia spolupracovať cez rôzne rozhrania programovacích jazykov. Pri klasickom spôsobe vývoja aplikácií musí tvorca softvéru vytvoriť osobitnú kompiláciu zdrojového kódu programu pre každú podporovanú platformu a neraz aj pre každý podporovaný operačný systém. To je nesporne časovo aj finančné náročné. Pre vyriešenie problému vyššie uvedenej rôznorodosti prostredia, nezávislosti od konkrétneho prostredia, program v Jave nie je v binárnej forme zložený z natívnych inštrukcií toho-ktorého procesora, ale z inštrukcií tzv byte kódu (ByteCode), inštrukčného súboru nezávislého na platforme. Kompilátor Javy generuje ByteCode, čo je architektonicky neutrálny bezprostredný formát navrhnutý tak, aby bol tento kód efektívne prenášaný k rôznorodým platformám. Interpetovaná povaha technológia Java rieši súčasne problém binárnej distribúcie, ako aj problém verzií. Tie isté byte kódy programovacieho jazyka Java budú bežať na akejkoľvek platforme.
Medzi hardvér a softvér príslušnej platformy a program v Jave je vložená vrstva tzv virtuálneho počítača Java VM. Program v jave je takto možné spustiť na ľubovoľnej platforme, pre ktorú existuje Java VM. Architektonicky neutrálna a portabilná platforma jazyka technológie Java je známa ako Java virtual machine (Java VM). Je to špecifikácia abstraktného stroja pre ktorý môžu kompilátory programovacieho jazyka Java generovať kód. Špecifické implementácie Java VM pre špecifické hardvérové a softvérové platformy potom poskytujú konkrétnu realizáciu vitruálneho stroja VM.
  
íNeutralita architektúry je len jedna časť systému, ktorý je skutočne portabilný. Technológia Java privádza portabilitu na vyšší stupeň tým, že je striktná vo svojej definícii základného jazyka. Všetky údajové typy majú presne stanovený rozsah, všetky jazykové konštrukcie sa správajú za každých okolností rovnako. Programy v Jave sú rovnaké na všetkých platformách - v Jave nenájdeme veci, definované ako "implementačne závislé", nie sú tu údajové typy, nekompatibilné cez hardvérové a softvérové architektúry. Vlastnosťou zásadného významu v tomto smere je, že systém Java VM je primárne založený na špecifikácii rozhrania POSIX - definícia priemyselného štandardu portabilného systémového rozhrania.

Objektovo orientovaný (OO) prístup

V súčasnosti už klasický procedurálny a funkcionálny spôsob návrhu aplikácie je prežitok. Objektovo orientovaná (OO) analýza, návrh a programovanie vedú k prehľadnejšej štruktúre, lepšej orientácii v programe a k menšej náchylnosti na výskyt chýb. Výhoda OO prístupu spočíva v jeho snahe napodobniť objekty reálneho sveta, ich stavy a správanie - na rozdiel od klasického procedurálneho prístupu s napodobňovaním "myslenia"očítača. Java podporuje všetky dôležité princípy OO programovania

  - zapuzdrenie stavu objektov a ukrytie jeho vnútra vonkajším svetom 
  - komunikácia medzi objektmi pomocou správ
  - polymorfné správanie sa objektov, teda rôzna reakcia rôznych objektov na jednu a tú istú správu
    triedy ako šablóny pre tvorbu objektov
  - jednoduchá dedičnosť (na simuláciu viacnásobnej dedičnosti slúžia tzv. rozhrania)


Relatívne jednoduchá a známa

Java je jednoduchý a čistý jazyk bez množstva najrôznejších výnimiek a špecialít (na rozdiel napr. od C++). S výnimkou polí nemá žiadne vlastné dátové štruktúry, všetko je riešené prostredníctvom knižničných modulov. Na dokonalé zvládnutie C++ je potrebné mať pomerne rozsiahle vedomosti, dostatočne dlhú prax a obdobie osvojovania si tohto jazyka je časovo náročné. Java bola od začiatku navrhovaná tak, aby krivka učenia sa programátora bola pokiaľ možno čo najstrmšia tak, aby už po krátkom období osvojovania bolo možné niečo užitočné vyprodukovať. Autori jazyka pri návrhu Javy vychádzali z existujúcich objektovo orientovaných jazykov, z ktorých systematicky odstraňovali príliš komplikované črty, až kým dospeli ku žiadúcemu minimalistickému stavu. Java je ukážkovým príkladom jednoduchého a pritom, pre predpokladaný rozsah úloh, dostatočne výkonného jazyka.
Java nie je celkom nový jazyk. Veľkou prednosťou Javy je jej príbuznosť s C++, čo znamená, že kto ovláda základy C++, nebude mať so zvládnutím Javy žiadne problémy. Program v Jave vyzerá na pohľad takmer ako program v C++. Java používa podobné údajové typy, operátory, jazykové konštrukcie i príkazy. Na rozdiel od C++ však oslobodzuje programátora od pamätania si komplikovaných pravidiel a postupov (napr. pri alokácii pamäte), odstraňuje mnohé síce užitočné, ale pri nesprávnom použití nebezpečné konštrukcie a nepozná ukazovateľa, čo je zrejme najčastejšia príčina chýb v programoch C++.

Robustná, spoľahlivá a bezpečná

Java je robustná a spoľahlivá. Oproti jazykom ako C++ má Java oveľa prísnejšiu syntax, takže veľa potenciálnych zdrojov chýb je odstránených už počas prekladu zdrojového kódu. Kontrola binárnych tried pokračuje aj vo fáze behu programu. Linkovanie sa deje dynamicky v okamihu, keď je tá-ktorá trieda potrebná. Java VM počas behu kontroluje správnosť a konzistentnosť načítavaných tried, správnosť typov parametrov volaných metód a podobne. Iným veľkým rozdielom javy oproti C++ je oveľa robustnejšia a spoľahlivejšia správa pamäte. V Jave nie je možné pristupovať k nejakej oblasti pamäte iným ako povoleným spôsobom a okrem toho, uvoľňovanie nepotrených objektov z pamäte je automatické.
Java je bezpečná. Vzhľadom na predpokladané použitia Javy v implicitne nezabezpečených sieťových prostrediach, pri jej návrhu sa kládol veľký dôrazu na bezpečnostné opatrenia, znemožňujúce potenciálne zneužitie existujúceho kódu na iné, ako predpokladané účely. Prvým, pomerne dôležitým predpokladom je samotný pamäťový model Javy. Programátor nikdy nevie, kde a akým spôsobom sú v pamäti uložené jednotlivé inštancie tried a aká je ich vnútorná reprezentácia. Keďže v Jave neexistujú nijaké ukazovatele, nie je tu možnosť pristupovať do ľubovoľnej, explicitne určenej oblasti pamäte. Ďalším ochranným prvkom je mechanizmus načítavania tried (tzv. class loader). Ten zabezpečí, že nie je možné štandardné triedy, ktoré sa vždy nachádzajú na lokálnom systéme, nahradiť podvrhnutými verziami, načítavanými zo siete. Okrem toho, každá načítavaná trieda prejde dôslednou kontrolou byte kódu, ktorá nekorektné, nebezpečné alebo inak neakceptovateľné triedy odmietne načítať.

Vysoká výkonnosť versus Java je interpretovaná

Java je interpretovaná. V podstate každý program je počas behu interpretovaný - klasické natívne programy sú však interpretované priamo procesorom. Programy v Jave, vzhľadom na prítomnosť vrstvy virtuálneho stroja, musia byť interpretované softvérovo, čo vnáša spomalenie. Avšak vývoj v oblasti počítačov prináša stále zvyšovanie rýchlosti a tak virtuálne stroje sú stále efektívnejšie, takže nevýhoda spomaľovania behu interpretáciou u Javy sa postupne zmenšuje.
Pojem výkonnosť je vždy otázka úvah. Platforma Java dosahuje vysokú výkonnosť adoptovaním schémy, pomocou ktorej interpretor môže bežať plnou rýchlosťou bez potreby kontroly run-time prostredia. Automatic garbage collector / automatický "zber odpadu" beží ako vlákno na pozadí s nízkou prioritou, zabezpečujúc vysokú pravdepodobnosť, že pamäť bude dostupná keď je to potrebné, čo vedie ku lepšej výkonnosti. Aplikácie, ktoré vyžadujú veľký objem výkonu počítača, môžu byť riešené tak, že procesne intenzívne sekcie môžu byť podľa potreby prepísané do natívneho strojového kódu a postúpené na rozhranie a platformu Java. Vo všeobecnosti, používatelia zistia, že interaktívne aplikácie reagujú rýchlo aj keď sú interpretované.

Multithreading a dynamika

Java podporuje "multithreading". Multithreading poskytuje možnosť existencie viacerých threadov (vykonávacích vlákien) v rámci jedného procesu. Všetky vlákna zdieľajú adresný priestor a prostriedky materského procesu, len z hľadiska plánovača procesov vystupujú ako samostatne plánovateľné entity - to značí, že súťažia o procesor. Java je jeden málo jazykov, ktorý zahŕňa podporu multithreadingu na úrovni jazyka Priamo pomocou príslušnej triedy a jej metód je možné vytvárať, spúšťať i zastavovať jednotlivé vlákna.
Java je dynamická. Pri vývoji aplikácií v Jave sa klasická linkovacia fáza odkladá až do okamihu, keď je príslušná trieda naozaj potrebná. Kompilátor všetky odkazy na triedy ukladá nie v binárnom, číselnom tvare, ale v symbolickom, mennom. Znamená to okrem iného, že pri zmene definície jednej triedy nie je nevyhnutné opätovne prekladať zdrojové súbory všetkých tých tried, ktoré so zmenenou triedou pracujú. Používané triedy môžu byť naťahované z lokálneho systému, ale aj miesta, dostupného cez sieť. Veľkou výhodou je, že triedy v Jave majú svoju vlastnú run-time reprezentáciu, takže je možné za behu programu zisťovať typ akéhokoľvek objektu, dokonca možno vytvoriť inštanciu triedy, ktorej názov bude známy až počas behu programu

Java versus C++

Súčasný stav vývoja programovacích jazykov ukazuje, že Java je dôležitý štandardný programovací jazyk a že ním zostane v dlhodobej perspektíve. Podľa niektorých zdrojov informácií by sa mala Java stať najpoužívanejším programovacím jazykom (malo by ju používať cez 50 % firiem a projektov). Je však súčasne pravda, že najnáročnejšie programy budú naďalej robené v jazyku C++ , ktorý je naďalej hlavným programovacím jazykom pre profesionálnych programátorov. C++ má rad vlastností, ktoré v Jave doteraz nie sú prítomné Našťastie, C++ zdieľa veľa vlastností s Javou. Základná časť gramatiky je u obidvoch jazykov takmer rovnaká. Avšak filozofia programovania a štruktúry programu veľkého rozsahu sú v C++ celkom odlišné. Stále viac vysokých škôl zavádza Javu ako programovací jazyk svojich úvodných kurzov programovania. V tejto oblasti už má Java vo svete takmer dominantnú pozíciu.
Java je ideálny jazyk pre úvodný kurz pre tých, ktorí chcú ďalej pokračovať v osvojovaní si C++ a veľa toho, čo má byť obsiahnuté v kurze pre Javu, bude tiež potrebné pri C++.

Literatúra:

   -  Firemná literatúra fy Sun
   -  Materiály uverejnení v časopise PC Revue
Copyright © 2006, Miroslav Nesrsta senior.