Introduction To Java

  • December 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Introduction To Java as PDF for free.

More details

  • Words: 18,228
  • Pages: 55
Introduction to JAVA

Stránka 1

Introduction to JAVA OBSAH

Prvá kapitola Krátka história jazyka Java a sumár 12 princípov Javy. Druhá kapitola Opis rozdielov medzi procedurálnym a objektovo-orientovaným programovaním. Tretia kapitola Prvým krokom v Java programovaní, je získanie potrebných nástrojov. Štvrtá kapitola Opis všetkých elementov, ktoré budeme používať pri programovaní. Piata kapitola Teraz, keď poznáme Java syntax, môžeme sa naučiť ako je implementovaný objektovo-orientovaný dizajn v Jave. Šiesta kapitola Selena nás prevedie Java a HTML kódom, potrebným k napísaniu java aplikácie. Siedma kapitola Po dokončení kódu appletu, ďalším krokom vo vývoji bude rozhodnutie sa, ako poskytnúť program web browserom na sieti. Ôsma kapitola Všetko, čo treba vedieť, aby sme mohli vytvoriť archívy .zip, .cab a .jar. Deviata kapitola Teraz budeme musieť prejsť od jednoduchej aplikácie k zložitejšej. Aby sme to mohli urobiť, pozrieme sa na AWT balík tried, ktorý je distribuovaný spolu s JDK. Desiata kapitola Väčšina moderných uživateľských rozhraní (interfaces) je založená na tzv. komponentoch, ktoré sa dajú používať viackrát. Sú to napríklad tlačidlá, scroll bary, menu bary, atď.

Prvá kapitola Úvod k Jave

Java je programovací jazyk, ktorý bol originálne vyvinutý v Sun Microsystems (pod vedením Jamesa Goslinga a Billa Joya) v roku 1991. Zámerom Javy bolo poskytnutie platformovo nezávislého programovacieho jazyka a operačného systému pre spotrebnú elektroniku (TV, videá, toastery, ...). Ako sa však neskôr ukázalo, Java sa nedostala do spotrebnej elektroniky, ale do našich web browserov. Java sa zdala byť perfektne stavaná pre Web. Jazyk samotný bol veľmi malý (lebo bol písaný na to, aby sa zmestil do toasterov a budíkov, ktoré nemajú veľkú pamäť). Preto sa programy napísané v Jave mohli veľmi ľahko prenášať sieťou. Ďalej, Java je platformovo nezávislá. To znamená, že na každom počítači s Java Virtual Machine (JVM) môže bežať Java program. Program môže byť napísaný hocikde a spustený hocikde. To je dôležité lebo ak jazyk nemôže fungovať na každom počítači, tak potom jazyk nemôže byť použitý pre sieť lebo tá musí byť fungujúca pre kazdý počítač, jazyk a prostredie. Platformová nezávislosť funguje preto lebo Java je interpretovaná a nie kompilovaná. Na rozdiel od C a C++ kódu nie je Java skompilovaná na špecifickú platformu, ale na nezávislý byte code. Tento byte code je šírený po sieti a interpretovaný pomocou JVM (väčšinou zabudovaného v browseroch) na tej ktorej platforme. Možno pomôže názorný obrázok:

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 2

䥇 Takže ako programátor sa musíte starať len o naprogramovanie a preloženie aplikácii do byte code. Nebude záležať na akej platforme to urobíte, ale budete vedieť, že vaša aplikácia pobeží všade.

Java vs. ostatné jazyky

POZNÁMKA: V syntaxe a exekúcii je Java veľmi podobná zjednoduchšenej (zlepšenej) verzii C++. Je to veľmi robustný, distribuovateľný, vysoko výkonný, objektovo-orientovaný, multivláknový jazyk so všetkými bežnými funkciami. Stavia na dlhoročných vývojoch jazka C++ a preberá z neho všeko dobré a vynecháva všetko zlé. Napriek tomu, bude chybou ak si budete myslieť, že Java je "vylúhovaná" z C++ alebo C+++. Java sa delí o podobné znaky s takými jazykmi ako sú SmallTalk a Lisp a tiež so scriptovými jazykmi ako Tcl a Perl. Java a JavaScript majú toho veľmi málo spoločného, s výnimkou mena. Java je plnohodnotný objektovo-orientovaný jazyk schopný žiť v alebo mimo browserov. Na druhej strane JavaScript je limitovaný objektovo-založený scriptový jazyk. Ako väčšina scriptových jazykov, tak aj JavaScript je určený na riešenie problémov zliepaním už existujúcich prostriedkov, namiesto toho aby si vytvoril vlastné prostriedky a tak vyriešil problém. Napríklad: JavaScript môže byť použitý na kontrolu browsera alebo na dynamické modifikovanie dokumentov, ktoré budú zobrazené. Java môže byť použitá na naprogramovanie browsera.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 3

Vidíte, že JavaScript je poriadne limitovaný v porovnaní s Javou.

12 princípov

Gary Cornell vyňal z Java White Paper, ktorý pochádza z javasoftu 12 základných princípov. Tu nájdete ich citáciu. · Java je jednoduchá "Chceli sme postavť systém, ktorý by bol ľahko programovateľný, bez zbytočného profesionálneho tréningu, za pomoci bežných dnešných praktík. Napriek tomu, že C++ bol od tohto cieľu veľmi vzdialený postavali sme Javu tak podobnú C++ ako sa len dalo, aby sme zabezpečili zrozumiteľnosť systému. Java postráda, veľa, málo používaných, zle pochopených a záludných funkcií C++, ktoré z našich skúseností neprinášajú žiaden osoh." ·

Java je malá "Ďalším aspektom jednoduchosti je veľkosť. Jednou z úloh Javy bola možnosť písania samostatných aplikácií aj pre malé stroje (počítače, palmPC, ...)."

·

Java je objektovo-orientovaná "Jednoducho povedané, objektová-orientácia je technika programovania, pri ktorej sa zameriava na dáta (=objekty) a interface k nim ... Objektovo-orientované vybavenie pochádza z C++"

·

Java je distribuovateľná "Java má obrovskú knižnicu rutín zameraných na TCP/IP protokoly ako HTTP a FTP. Java aplikácie môžu otvoriť a mať prístup k objektom na sieti za pomoci URL, tak isto ľahko ako majú prístup k objektom na lokálnom súborovom systéme."

·

Java je robustná "Java je určená na písanie programov, ktoré musia byť spoľahlivé v mnohých veciach. Java kladie veľký dôraz na skoré kontrolovanie možných problémov, ďalšie dynamické (run time) kontrolovanie a elimináciu situácií, ktoré sú problémové."

·

Java je bezpečná "Java je určená pre sieťové prostredie. Preto bolo vynaloženého mnoho úsilia na bezpečnosť. Java umožňuje konštrukciu bez vírusových a prispôsobivých systémov."

·

Java je platformovo nezávislá "Java kompilátor vygeneruje byte kód, ktorý nie je závislý na počítačovej architektúre. Je ľahko interpretovaný na každom počítači a ľahko sa prekladá do strojového kódu každého počítača."

·

Java je prenosná "Narozdiel od C a C++, neexistujú v Jave 'implementačno-závislé' aspekty špecifikácie. To znamená, že napríklad veľkosti primitívnych dátovych typov sú určené, tak ako je určené správanie sa aritmetických úkonov na nich."

·

Java je interpretovaná "Java interpreter môže interpretovať Java byte code priamo na počítači pre ktorý je interpreter určený. Takže vývojový proces môže byť oveľa rapídnejší."

·

Java je vysoko výkonná "Výkonnosť interpretácie byte code býva väčšinou adekvátna, ale niekedy sú na ňu kladené väčšie nároky. Vtedy môže byť byte code preložený do strojového kódu pre konkrétne CPU na ktorom aplikácia beží."

·

Java je multi-vláknová "Výhody sú v lepšej interaktivite a real-time správaní. Je to preto lebo program môže vykonávať viac vecí naraz."

·

Java je dynamická

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 4

"Vo viacerých veciach je Java viac dynamická ako C alebo C++. Bola dizajnovaná na prispôsobenie sa prostrediu ... Knižnice môžu jednoducho pridať nové metódy a príležitostné premenné bez zmeny na ich klientoch." Ako vidíte Java je fantastický jazyk. Programovanie v Jave je jednoduché a zábavné. Na rozmýšľanie v Jave je potrebné najprv pochopiť, čo je to objektovo-orientované programovanie. hore

Druhá kapitola Úvod k Objektovo-orientovanému programovaniu

Dnes každý hovorí o Objektovo-orientovanom programovaní. Ale čo to vlastne je? Objektovo-orientované programovanie (OOP) je metóda programovania s nasledujúcimi charakteristikami: 1. OOP dovoľuje programátorom vymodelovať reálny svet ako nikdy predtým. 2.

OOP je tiež metóda programovania, ktorá slúži na tvorbu rapídnych prototypov. Objektovo-orientované programy môžu byť vytvorené a upravované veľmi rýchlo lebo OOP ponúka programátorovi excelentné nástroje pre abstrakciu.

3. OOP produkuje viac krát použiteľný kód. Keď sú raz objekty vymyslené a napísané, neni potrebné ich zase vymýšľať a písať. 4.

OOP pomáha programátorom pracovať v dynamickom prostredí. Objektovo-orientované programy môžu byť rýchlo a ľahko modifikované, tak aby sa prispôsobovali meniacim sa podmienkam v reálnom svete.

Teraz sa pozrime čo hovorí o OOP Bruce Eckel, guru na JAVA objektovú orientáciu: "Objektovo-orientované programovanie pôsobí na viac skupín. Menežérom sľubuje rýchlejší a lacnejší vývoj a údržbu. Pre analytikov a dizajnérov sa stáva modelovací proces jednoduchším a prináša jasné, ovládateľné dizajny. Pre programátorov prináša eleganciu a jasnosť objektového modelu a silu objektovo-orientovaných nástrojov a knižníc, ktoré robia programovanie veľmi príjemným a zvyšujú produktivitu. Vyzerá to tak, že každí vyhráva. Ak sú tu nejaké nevýhody, tak potom náklady spojené s výukou. Rozmýšľať objektovo je dramatické odpútanie sa od procedurálneho rozmýšľania. A proces tvorenia objektov je oveľa náročnejší ako tvorba procedúr, hlavne keď sa snažíme vytvoriť viac krát použiteľné objekty." Dobre, takže toto bolo dosť abstraktné. Poďme sa na OOP pozrieť z iného uhla. Možno nezaškodí trochu histórie.

Procedurálne založené programovanie

V 70. rokoch bolo procedurálne programovanie plné hnevu. V jazyku procedurálneho programovania, píše programátor inštrukcie za sebou a počítač ich vykonáva v tom poradí od začiatku až po koniec. Napríklad, procedurálne založený program môže fungovať takto:

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 5

Komplexnejší program môže obsahovať logické vetvy ako zobrazuje tento príklad na obrázku:

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 6

Aj v prípade komplexnejšieho logického toku, hlavný princíp zostáva rovnaký ... určitý súbor inštrukcií je vykonávaný od začiatku až po koniec, každý nový krok je založený a viazaný na ten predchádzajúci.

Obmedzenia procedurálne zameraného programovania

Napriek tomu, že procedurálne orientované programy sú extrémne výkonné, majú určité obmedzenia. Pravdepodobne najväčším obmedzením je tendencia rozsiahlych programov založených na procedurálnom programovaní k tzv. "špagetovému kódu". Špagetový kód je taký kód, ktorý bol modifikovaný toľkokrát, že jeho logická postupnosť (znázornená na obrázkoch na predchádzajúcej strane) sa stane, tak zauzlená, že každý nový programátor, ktorý sa bude chcieť zapojiť do tvorby programu, bude potrebovať dvojmesačný kurz na pochopenie, o čom vlastne ten program je. Prečo vlastne vzniká špagetovosť programov? Takže, v realite, programátorova úloha začína vtedy, keď dopíše verziu 1.0 svojej softwareovej aplikácie. Než sa spamätá, bude bombardovaný desiatkami požiadaviek na modifikáciu, odstránenie chýb a pohŕdaním nad jeho úbohým kódom. Keď chce uspokojiť používateľov, musí pristúpiť k modifikácii kódu. To môže viesť k pridaniu nových slučiek do kódu, zmene logického prúdenia programu a to všetko k pridaniu nových metód, knižníc a premenných. Nanešťastie, v procedurálnych jazykoch neexistujú žiadne vstavané nástroje pre abstrakciu a modularizáciu. Preto je ťažké pridávať nové prvky alebo meniť pracovné prúdenie programu bez toho, aby sme sa nemuseli vracať a modifikovať aj ostatné časti programu. Namiesto prepracovania prúdenia programu a začatia písania od začiatku, väčšina programátorov tlačená časom bude používať rôzne záplaty na opravenie kódu. To vedie k druhému problému procedurálneho programovania. Nielenže sa samotný kód stáva ťažko pochopiteľný, ale ako rastie, tak sa stáva ťažko modifikovateľný. Pretože všetko je viazané na niečo iné, nič nie je nezávislé. Keď zmeníme jednu časť kódu procedurálneho programu, s veľkou pravdepodobnosťou pokazíme tri iné časti, ktoré sa môžu nachádzť v nejakej knižnici, na ktorú sme určite zabudli. Posledným problémom špagetovosti je, že kód, ktorý napíšete dnes, vám nepomôže pri písaní ďalšieho kódu zajtra. Procedurálne napísaný kód má vlastnosť odolávať kopírovaniu a potom voľnému vkladaniu do programu. Preto programátori píšu pre každý program to isté sto rôznymi spôsobmi, podľa toho ako im to dovoľuje samotné logické prúdenie programu. Procedurálne-orientované programova-nie je veľmi významné. Takže, netreba si myslieť, že ho nebudete potrebovať a je dobré ovládať ho. Nie je nič lepšie ako účinná metodológia. V niektorých prípadoch, objektovo-orientované zameranie bude najlepšie vyhovovať vašim požiadavkam, ale v iných prípadoch, môže byť zvolenie inej metódy oveľa praktickejšie. PS: Dobre napísaný procedurálneorientovaný program môže byť ľahko pochopiteľný a ľahko modifikovateľný s množstvom kódu, ktorý sa dá použiť viackrát. Ale dobre napísaný program sa ťažko hľadá, obzvlášť, keď celé skupiny programátorov pracujú na rôznych verziach programu. Faktom je, že procedurálne jazyky postrádajú "syn-taktický cukor" potrebný pre abstrakciu. A preto prichádza OOP.

Objektovo orientované programovanie

Okey, takže v neskorých 80. rokoch bol softwareový priemysel celý "zašpagetovaný" a hľadal nejaké východisko. Vtedy prišlo na svet objektovo orientované programovanie (OOP). OOP bolo navrhnuté, tak aby pomohlo riešiť komplexnosť softwaru cez abstrakciu. V OOP, programujete malé, samostatné kúsky kódu, ktoré lepšie korešpondujú so spôsobom ako premýšľate o programe a ako program odzrkadľuje skutočnosť. Namiesto postavenia jedného mamutieho procedurálneho programu, ktorý dokáže všetko, ale je zložitý - komplexný, v OOP staviate veľa malých kúskov programu, ktoré sa ľahko používajú a ktoré dokážu navzájom spolupracovať a v skupine riešiť potrebné úlohy. Táto tímová práca bola zrelizovaná vďaka abstrakcii (oddeleniu). Abstrakcia je zjednoduchušovací proces; zoberieme komplexný problém a schováme ho, aby sme sa mohli zameriať na vyšiu úroveň, ktorá nemusí byť tak komplexná. V OOP je abstrakcia implementovaná použitím objektov. Objekty rozdelia komplexné problémy na malé časti, s ktorými sa ľahko pracuje. Poďme sa pozrieť ako ...

Objekty

Objekty sú samostatne fungujúce malé čirne skrinky, ktoré sú nezávislé na kóde, ktorý na ne poukazuje alebo ich používa.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 7

Čierna skrinka je inžiniersky termín, ktorý sa dá vysvetliť následovne: Najprv niečo vložíme do čiernej skrinky. Potom čakáme, kým je naša vec "magicky pretransformovaná" v čiernej skrinke. Nakoniec dostaneme novú premenenú vec späť zo skrinky. Krása čiernej skrinky spočíva v tom, že jediné čo potrebujeme vedieť je, ako niečo vložiť do skrinky a čo z nej môžeme očakávať. To ako prebieha to kúzlo vo vnútri nepotrebujeme vedieť. Pri objektoch uvažujeme o ich dvoch charakteristikách. A to: vlastnostiach a metódach. 1. Vlastnosti opisujú kvality objektu 2. Metódy určujú správanie sa objektu Typická príručka o objektoch, by ponúkla nasledovné vysvetlenie: Objekt Mačka Vlastnosti

Metódy

Farba očí

Pradie

Počet končatín

Chytá myši

Zvláštnosť

Trhá gauč

Aj keď toto nie je dobrý príklad, niekedy, keď sa snažíme vysvetliť čo je to objekt, povieme, že objekty sú podstatné mená, vlastnosti sú prídavné mená a metódy sú zase slovesá. Poďme sa teraz pozrieť na realistickejší objekt, s ktorým sa môžete stretnúť vo vašom kóde. Vybrali sme si objekt "VÝBEROVÉ POLE" z formulára HTML: Pomaranč Objekt VÝBEROVÉ POLE má niekoľko vlastností. Poprvé, má veľkosť, ktorá korešponduje s počtom viditeľných prvkov. Môže byť nastavené, aby umožňovalo výber viacerých položiek. Objekt VÝBEROVÉ POLE má aj metódy. Napríklad, VÝBEROVÉ POLE vie ako zobraziť zoznam položiek, keď používateľ klikne na šípku. Taktiež, keď si užívateľ vyberie položku z poľa, výberove pole vie ako ju má vybrať. A výberové pole tiež vie ako má zatvoriť ponuku, keď si užívateľ vybral z ponuky. Tabuľka dole zobrazuje náš objekt VÝBEROVÉ POLE Objekt VÝBEROVÉ POLE Vlastnosti

Metódy

Veľkosť

Otvor výberové pole

Spôsob výberu

Vyber položku

Zoznam položiek

Zatvor výberové pole

Abstrakcia pomocou objektov sa realizuje za pomoci štyroch základných charakteristík objektov:

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA · · · · Teraz

Stránka 8

Encapsulation (zapúzdrenie) Inheritance (dedenie) Overloading (viacnásobná definícia) Polymorphism (mnohotvarosť) sa pozrieme na každú z nich ...

Encapsulation (zapúzdrenie)

Krása objektov spočíva v tom, že ich môžeme používať aj bez toho aby sme vedeli ako fungujú vo vnútri. Ako sme povedali predtým, objetkty sú "malé čierne skrinky". Čo to presne znamená? Znamená to, že nikto okrem objektu nemusí vedieť ako sú jeho metódy a vlastnosti definované a implementované. To sa nazýva "encapsulation" (zapúzdrenie) a je základom dobrej objektovo-orientovanej tvorby programu. Je počet položiek uložený ako vektor alebo pole? Prebieha vyhľadávanie rýchlym vyhľadávaním alebo bublinkovým? Ako sa označí vybratá položka a ako sa označí viac vybratých položiek naraz? Enkapsulácia znamená, že odpoveď na všetky otázky je "private", čiže súkromná - pozná ju len samotný objekt. Aké to má výhody? Výhody spočívajú v tom, že keď budem chcieť použiť objekt VÝBEROVÉ POLE, nebudem sa musieť zaoberať so zložitým kódom, ktorý sa stará o fungovanie objektu. Namiesto toho len použijem samotný objekt v mojej aplikácii a budem ho využívať. Je to oveľa výhodnejšia koncepcia programovania, ktorá umožňuje oveľa ľahšie pochopiť a modifikovať kód programu lebo sa zaoberáte len malou časťou kódu v danom okamžiku. Ja ako vývajár nepotrebujem strácať čas nad zložitosťou kódu objektu VÝBEROVÉ POLE, ja ho len použijem. Je to tiež dobrá metafóra pre reálny svet, ktorý je vytvorený zo zapúzdrených objektov. Zoberte si počítač, ktorý práve používate na čitanie tohto článku. Vieta ako pracuje jeho procesor? Pravdepodobne, nie. Ale to je v poriadku. Procesor pracuje aj bez toho, aby ste vedeli ako. A fakt, že nepotrebujete tráviť čas učením sa elektronického inžinierstva, znamená, že môžete vytvárať veci "používaním" procesora.

Application Programming Interface (API)

Čo teda vieme o objekte a čo potrebujeme urobiť, aby sme mohli objekt použiť? Jedinú vec, ktorú programátor musí vedieť, je, ako získať informáciu z objektu, keď je informácia potrebná alebo ako povedať objektu, aby vykonal určitú úlohu, keď treba niečo urobiť. Napríklad, uvažujme o situácii, keď web browser chce vedieť aká položka je vybraná vo VÝBEROVOM POLI lebo "surfer" klikol na políčko VYKONAJ a on potrebuje sformulovť HTTP požiadavku. V tomto prípade sa jednoducho web browser opýta objektu VÝBEROVÉ POLE na to čo je označené a VÝBEROVÉ POLE mu odpovie. Ako sa browser opýta objektu VÝBEROVÉ POLE čo je práve označené? Väčšinou, objekty poskytujú Application Programming Interface (API), ktoré umožňuje iným objektom (ako web browser alebo iná väčšia aplikácia) získať informácie alebo vyzvať na vykonanie určitej operácie. API je súbor verejne dostupných metód, ktoré povoľujú alebo ovplyvňujú určité časti informácií o stave objektu. V hore uvedenom prípade, VÝBEROVÉ POLE bude mať API metódu, ktorá bude vraciať hodnotu vybranej položky. Vo všeobecnosti, interakcia medzi web browserom a objektom môže vyzarať takto: Web Browser:

Objekt Výberové pole:

Hej objekt VÝBEROVÉ POLE, surfer práve stlačil tlačidlo VYKONAJ a ja potrebujem dať dokopy URL reťazec, aby som mohol vykonať HTTP požiadavku. Čo je práve vybrané? "Jablká" sú práve vybrané.

Web browser celý šťastný sformuluje HTTP požiadavku, bez toho aby potreboval poznať "čaro", ktoré používa objekt VÝBEROVÉ POLE. Prečo by sme mali ísť cez proces pýtania sa na dáta, namiesto priameho prístupu k nim? Prečo musíme isť cez "accessor metódu" (prístupovú metódu)? Enkapsulácia objektov a poskytnutie API metód verejnosti, nám umožní schovanie vlastností a metód, ktoré sú potrebné pre abstrakciu formou čiernej skrinky. Tým zabezpečíme, že aj keď budeme meniť objekt VÝBEROVÉ POLE, ale API zostane nezmenené, všetky objekty a rutiny, ktoré ho využívajú zostanú neporušené. Nikoho nezaujíma kód vo vnútri objektu. Zaujíma ich len API daného objektu.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 9

Keby sme umožnili browserom priamy prístup k spôsobu uloženia dát, aby mohli zistiť, čo je vybrané, nemali by sme možnosť tento spôsob meniť, aj keby sme poznali iný, oveľa lepší. Bolo by to spôsobené tým, že ak aby sme chceli zmeniť spôsob akým VÝBEROVÉ POLE pracuje, museli by sme zmeniť aj spôsob browsera, akým bude pristupovať k objektu VÝBEROVÉ POLE. Keby sme podporovali stovky browserov bola by to nočná mora. Ale keď budeme viesť browser k tomu, aby vždy použil prístupovú metódu, keď bude pristupovať k dátam, tak potom môžeme ľubovoľne meniť spôsob akým bude VÝBEROVÉ POLE uchovávať dôležité informácie. Pokiaľ API objektu zostáva nezmenené, browseri nie sú ovpyvnené zmenami v objekte. To robí písanie a modifikovanie kódu oveľa jednoduchším a z veľkej časti rieši problém špagetovosti.

Inheritance (dedenie)

Výhody objektov tam ale nekončia. Objekty majú špeciálnu schopnosť - dediť fungovanie iných objektov. Vysvetlíme si to na metafóre s mačkou. Mačka je určite mačka. Keďže je mačkou, tak má vlastnosti ako: fúzy, vťahovateľné pazúry a ostré zuby. Taktiež vieme, že má metódy: keď je šťastná, tak pradie, chytá myši a trhá gauč keď si na ňom brúsi pazúry. Ale mačka je viac ako len mačka. Je to tiež aj cicavec. Ako cicavec, dedí určité atribúty, ktoré sú spoločné pre všetky cicavce. Napríklad má prsné žľazy, teplú krv, potomstvo sa vyvýja v tele matky, dýcha atď. Okey, teraz sa pozrime na realistickejší objekt, ktorý môžete použiť vo svojom kóde a skúsme nájsť podobnú logiku, ktorá platila pre mačku. Zoberme si Textové pole a Kódové pole HTML formuláru, ktoré sú zobrazené dole. Text Kód

Objekt kód je presne taký istý ako objekt text, s tým rozdielom, že nezobrazuje to čo napíšeme, ale namiesto toho zobrazí len hviezdičky. Takže pole pre kód je ako mačka a pole pre text je ako cicavec. Pole pre kód zdedilo všetky znaky a fungovanie z pola pre text a pridalo si určitú vlastnosť, ktorá ho robí iným. V prípade objektu Kódového pola, môžeme povedať, že objekt Pola pre kód "je" Textové pole s pridanou vlastnosťou, zobrazovať hviezdičky namiesto napísaného slova. Pri rozmýšľaní o dedení a objektoch, je dobré, keď vidíme rozdiel v "je" a "má" vzťah. Objekty môžu mať totižto obidva druhy vzťahov medzi sebov. Napríklad môžeme povedať, že objekt mačka je objektom objektu cicavec. Ale nemôžeme povedať, že objekt mačka má objekt cicavec a je objektom mozgu. V našom hore uvedenom príklade môžeme povedať, že Pole pre kód "je" Polom pre text a "má" priestor na písanie textu. Aký máme úžitok z dedenia? Ak nájdeme objekt, ktorý niekto iný vytvoril a je skoro taký istý ako ten náš, ktorý potrebujeme, tak ho môžeme použiť s tým, že pridáme funkcie, ktoré potrebujeme, bez toho aby sme poškodili jeho staré funkcie a bez toho aby sme museli zisťovať ako vlastne fungujú. Inými slovami povedané, dedenie nám umožňuje jednoduché použitie už vytvoreného kódu. V našom prípade sme nemuseli na vytvorenie objektu Pole pre kód, písať celý objekt ešte raz, ale namiesto toho, sme ho skoro celý zdedili.

Overloading (viacnásobná definícia)

Objekty sú dostatočne inteligentné na to aby boli dynamické. Majú schopnosť reagovať rôzne v závislosti od rôznych situácií. Je to veľmi dôležité lebo API to robí flexibilnejším a ľahšie pochopiteľným pre toho, kto vidí kód prvý krát. Znamená to, že API má schopnosť postupne sa rozrastať, bez toho aby nejako ovplyvnilo starší kód. Pozrime sa na príklad. Povedzme, že máme metódu "print()". Prvá otázka, ktorú sa môžete spýtať je: "Čo tlačí táto metóda: text, obrázky alebo niečo iné?" Použitím "overloading" môže byť vytvorený objekt, ktorý by dokázal riešiť hocijaké situácie jednou metódou. Na základe toho by bol schopný tlačiť to, o čo bol požiadaný. Namiesto potreby mať oddelené metódy ako printObrázok(), printText() a printČísla() máme jednu metódu print(), ktorá dokáže určiť a potom riešiť rôzne situácie.

Polymorphism (mnohotvarosť)

Nakoniec, objekty majú všetky vlastnosti svojich predkov (objektov, z ktorých pochádzajú). A podľa potreby sa môžu zmeniť a zastúpiť potrebný objekt. Znamená to, že "mačka" objekt môže slúžiť ako "cicavec" objekt, keď je to potrebné. Jednoducho povedané, polymorphismus (mnohotvarosť) je volanie metód zdola hore. Výhody polymorphismu sú, že sa dajú veľmi jednoducho pridávať nové triedy už do existujúcich objektov, bez toho aby sme porušili už napísaný kód.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 10

Napríklad, ak máme metódu regulujTelesnúTeplotu(), ktorá používa ako parameter objekt, z už hotovej triedy cicavec, potom môžeme vždy pridať nové objekty do triedy cicavec, bez toho aby sme porušili kód našej metódy. Okey dosť bolo teórie o objektovo-orientovanom programovaní. Najlepšia cesta k pochopeniu OOP vedie cez samotné programovanie. V ďalšej časti si poviem niečo o tom, čo treba urobiť, aby sme mohli začať písať programy v JAVE. hore

Tretia kapitola Získanie JDK

Okey, OOP je dosť abstarktné a ak ste ako ja, tak už ste určite z tej teórie zblbnutý. Takže urobme krok vred a začnime sa zaoberať niečím konkrétnym. Poďme získať našu vlastnú kópiu Java Developer's Kit (JDK), aby sme mohli vyskúšať niektoré naše poznatky už na konkrétnych príkladoch. JDK je súbor vývojových zdrojov, ktoré nám umožňujú vytvárať, kompilovať a spúšťať Java programy. Obsahuje také základné komponenty ako knižnice Java tried (Java class libraries), kompilátor java kódu (javac bytecode compiler) a virtuálny počítač (Java virtual machine) nazývaný applet prehliadač (appletviewer), ktorý môžeme použiť na spúšťanie aplikácií. POZNÁMKA: Keď začnete používať JDK, hneď zistíte, že nie je veľmi príťažlivé. Väčšina interakcie s JDK bude len za pomoci textového editoru alebo príkazového riadku. Samozrejme, že existuje množstvo iných vývojových nástrojov ako Symantec Cafe, Microsoft SDK, Visual J++, ... , ktoré sa zameriavajú na príjemné prostredie a poskytujú programátorovi robustnejšie a jednoduchšie (drag-and-drop) prostredie. Avšak, na začiatok, doporučujem, aby ste používali JDK. Budete mať zvláštny (krásny) pocit, keď budete písať a potom kompilovať Java program. Vizuálne vývojové nástroje sú síce pekné, ale nepomôžu Vám pochopiť vnútornú štruktúru jazyka.

Na získanie najnovšej verzie JDK nasmerujte svoj web browser na adresu Javasoft a stiahnite si ju. V čase písania tohto článku najnovšou verziou JDK je JDK 2.0. Toto prosterdie je ešte stále vo vývoji a preto by som ho neodporúčal používať na vytváranie nejakých reálnych aplikáci. Počkajte chvíľu, kým trochu "dospeje". Ale nič Vám nebráni v tom, aby ste si ho nainštalovali a vyskúšali. Radšej si stiahnite najnovšiu stabilnú verziu JDK, ktorá je v tomto čase označená JDK 1.2.2. JDK 1.2.2 prináša nové prvky v týchto oblastiach: Java@A@A 2DTM API, Java Accessibility API, Drag and Drop, Application Services, Extensions Framework, Collections, Input Methods, Version Identification, Weak References, Java interface definition language (IDL), Java Virtual Machine* Debugger Interface (JVMDI), the Java Servlet standard extension a Javadoc Doclets. Významné zmeny boli urobené aj v komponentoch JavaBeans architektúre, Java Security API, Java Remote Method Invocation (RMI) technology, Object Serialization, Java Sound API, Java Archive (JAR) a Java Native Interface (JNI) API. Zvýšenie výkonnosti bolo dosiahnuté na základe podpory vlákna operačného prostredia OS SolarisTM, kompresie pamäte nahraných tried, rýchlejšiemu rozdeleniu pamäte a správy nepotrebných tried v pamäti a podporou knižníc JNI portu. Tu je ukážka, ako by mala vyzerať stránka, z ktorej sa sťahuje JDK. Nezabudnite si stiahnúť aj on line tutorial, budeme ho neskôr používať.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 11

A takto vyzerá okno, ktoré sa mi otvorilo, keď som začal sťahovať JDK. Celé to má okolo 20 MB, takže budete musieť chvíľu počkať kým sa Vám to celé stiahne.

Inštalovanie JDK

Po stiahnutí súboru, ho bežným spôsobom rozbalte a spustite inštaláciu. Inštalačný program Vás prevedie cez celý proces inštalácie JDK. Takto to vyzeralo, keď som spustil inštaláciu na svojom počítači.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 12

Aby ste si zachovalil poriadok na hardisku, doporučujem, nainštalovať JDK do nasledujúceho adresáru: "C:\Java\Sun\JDK_VERZIA" lebo v budúcnosti si určite zoženiete aj iné JAVA nástroje a tiež aj rôzne knižnice a podobne. Keď skončí inštalácia, mali by ste mať JDK nainštalované na svojom počítači. Takto vyzerala moja stromová štruktúra po inštalácii.

Tu to ale nekončí. Napriek tomu, že najnovšou verziou je JDK 1.2.2, neznamená to, že ho môžete používať na tvorenie aplikácií. Chcete predsa, aby Vaše applety boli spustiteľné na všetkých browseroch (aj tých starších). Musíte sa preto vrátiť niekoľko rokov dozadu a používať JDK 1.0.2. JDK 1.2.2 je krásny súbor nástrojov. Je dobré mať ho a používať na tvorbu "server side" (servlety, ...) aplikácií. Ale na tvorbu aplikácií pre "client side", neodporúčam používať verzie novšie ako 1.0.2. Browsery sa postupne dotiahnú a búdú rozmieť aj najnovším Java zdrojom, ale dovtedy je najlepšie tvoriť applety čo najjednoduchšie a najmenšie, aby im rozumel každý browser. Takže, po nainštalovaní JDK 1.2.2 urobte to isté s JDK 1.0.2.

Nastavenie vášho vývojového prostredia

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 13

Aby sme mohli používať JDK, musíme počítaču povedať, kde sa nachádza. Bežne to znamená, nastavenie dvoch premenných: CLASSPATH a PATH. Pretože používam Windows PC, povieme si ako sa nastavujú premenné pre tento typ prostredia. Ale premenné CLASSPATH a PATH by mali byť podobne dostupné aj na iných platformách. V prípade Windows, informácie o prostredí by mali byť uložené v autoexec.bat súbore, ktorý sa väčšinou nachádza na "C:\autoexec.bat". V prípade UNIX, to bude .rc súbor, ako napríklad tcsh.rc. POZNÁMKA: Vo Windows NT, je jednoduchšie kliknúť pravým tlačítkom na desktope na ikonu "My Computer" a vybrať "Properties". Jednou z vlastností, ktorú môžete vybrať je "Environment". Pred tým, než začnete čokoľvek robiť, uložte si tento súbor ako autoexec.prejava. Ak niečo pokazíte, vždy sa bude môcť vrátiť k pôvodným nastaveniam. Teraz použite svoj obľúbený textový editor a pripravte sa na modifikovanie súboru. Vlastne budete modifikovať/pridávať dva riadky. Prvý riadok je ten, ktorý určuje cestu, čiže PATH. Definícia PATH je väčšinou súbor absolútnych ciest oddelených bodkočiarkou: PATH = miesto kde sa nachádza java bin adresár;iné informácie o cestách Napríklad môj vyzerá takto: PATH=f:\Java\Microsoft\SDK-Java\Bin;f:\Java\Sun\jdk102\bin A teraz treba povedať počítaču, kde nájde všetky tie class (triedy) súbory, ktoré potrebuje JDK. Robí sa to definovaním CLASSPATH premennej nasledovnou synataxou: set CLASSPATH=.;miesto, kde sa nachádzajú java triedy; Napríklad u mňa to vyzerá takto: set CLASSPATH=.;c:\Java\Sun\jdk1.1.4\lib\classes.zip; Posledné, čo treba urobiť, je reštartovať počítač, aby sa nové premenné nahrali do systému. V UNIXe sú elementy v PATH a CLASSPATH oddeľované dvojbodkou namiesto bodkočiarky. Preto príklady uvedené vyšie, budú v UNIXE vyzerať nasledovne: PATH=/Java/Microsoft/SDK-Java/Bin:/Java/Sun/jdk1.1.4/ bin Okey, nastavením prostredia sme skoro pripravený na náš prvý java program. Ale než tak urobíme, poďme sa pozrieť na jazyk samotný, aby sme sa oboznámili s jehou synataxou, potrebnou na písanie kódu. Dobre, nastal čas na písanie kódu. V ďalšej časti si povieme niečo o Java syntaxe. hore

Štvrtá kapitola Poznámky

Často sa stáva, že si chcete do samotného Java kódu vložiť poznámky. Poznámky sú malé časti dokumentácie zapracovanej do samotného kódu, ale neviditeľné pre Java prekladač. Prečítať si ich môže len osoba, ktorá si prezerá kód. Poznámky pomáhajú dokumentovať to, čo váš kód robí a ako treba s určitou časťou kódu pracovať, keď ju pôjde niekto modifikovať. Poznámky sú základom pre tímovú prácu na jednom projekte alebo, keď budete chcieť aby niekto pokračoval už v začatom kóde. Poznámky nám tak isto pomáhajú nachádzať rôzne nedostatky v našej práci. Pri pokuse o vysvetlenie, určitej časti kódu, niekomu inému sa najlepšie a najľahšie hľadajú vlastné chyby. Často nám akt dokumentovania pomáha uvedomiť si, že niečo sme spravili dosť "nemožne". Keby bol kód čistý a mal by zmysel, nebol by problém okomentovať ho. Ak sa váš kód nedá okomentovať, radšej sa zamyslite nad jeho prerobením.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 14

Nakoniec, je dôležité nájsť si spôsob komentovania a naučiť sa kedy ho používať. Napríklad, tu je dobrý dôvod na použitie poznámky: i++; // zväčšenie i o jeden Obetujte svoj čas a okomentujte radšej, čo prebieha v určitom bloku kód, namiesto komentovania každého riadku kódu samostatne. Samozrejme, že ak sa v programe nachádzajú určité časti kódu v jednom riadku a sú dôležité, kludne k nim môžete pridať svoj komentár. Je to len a len na vás. Existuje viacero spôsobov, ako označiť poznámky v JAVE. Pre jedno riadkové poznámky môžete použiť takýto "//" zápis. Pozrite si ukážku z kódu: // Inicializuj premenné... int vek = 28; // Deklaruj a inicializuj vek Všimnite si, že jedno riadkové poznámky sa môžu nachádzať v ridku samotné alebo spoločne s kódom. Na špecifikovanie viac riadkovej poznámky použite kombináciu "/*" a "*/" ako to je vidieť v nasledujúcom príklade: /* Toto je jednoduchá trieda (class), ktorá je použitá na ukážku viac riadkových poznámok. Bola napísaná Selenom Solom pre Web Programming Tutorial. */ // Definuj Example class s jednou // metódou main(), ktorá vypíše // "Hello Cyberspace!" do štandardného výstupu. public class Example { public static void main(String[] args) { System.out.println("Hello Cyberspace!"); } } Určite ste si všimli, že pri použití "//" zápisu pri viac riadkovej poznámke bolo treba "//" použiť v každom riadku. A nakoniec, ak píšte poznámky, ktoré by sa mali objaviť v javadoc dokumente mali by ste použiť nasledujúcu kombináciu "/**" a "*/". Tu je malá ukážka: /* Toto je jednoduchá trieda (class), ktorá je použitá na ukážku viac riadkových poznámok. Bola napísaná Selenom Solom pre Web Programming Tutorial. Táto poznámka sa neobjaví v java dokumentácii. */ /** Definuj Example class s jednou metódou main(), ktorá vypíše "Hello Cyberspace!" do štandardného výstupu. Táto poznámka sa objaví v javadoc. */ public class Example { public static void main(String[] args) { System.out.println("Hello Cyberspace!");

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 15

} }

Výpis do štandardného výstupu

Okey, ako ste iste uhádli z kódu na predchádzajúcej stránke, môžete v Jave dosiahnúť výpis do štandardného výstupu, použitím System.out.println() metódy. Neskôr sa budeme rozprávať o špecifikách metód, ale nateraz bude dobré, keď budete vedieť, že môžete dosiahnúť výpis v príkazovom riadku (aplikácie) alebo v Java Console (applety) za pomoci nasledujúcej metódy: System.out.println(reťazec); Napríklad: System.out.println("Hello Cyberspace!"); Dole je ukážka Netscape Java Console.

Java konzolu v Netscape nájdete pod Communicator -> Java Console. V IE budete musieť povedať browseru, aby vám umožnil prístup ku konzole. Kliknite na Tools -> Internet Otions -> Advanced -> VM Menu položka "Java Console Enabled". Potom môžete konzolu spustiť cez View -> Java Console.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 16

System class má samozrejme aj zopár ďaľších metód, ktoré nám umožňujú aj iné veci okrem výpisu. Aby ste sa dozvedeli viac o týchto metódach, tak si prečítajte online dokumetáciu. Neskôr budeme rozprávať o tom, ako čo najefektívnejšie využívať online dokumentáciu, ale vy už teraz môžete vedieť, že System class nájdete v java.lang balíku.

Premenné

V každom programovacom jazyku sú hlavným stavebným prvkom premenné a na ich základe sa stavia všetko ostatné. Premennú si môžete predstaviť ako niečo na "držanie miesta" alebo "meno", ktoré reprezentuje jednu alebo viac hodnôt. V podstate je to dátova štruktúra, poskytnutá samotným jazykom. Všeobecná syntax pre definíciu premennej je nasledovná: menoPremennej = hodnota; Napríklad môžeme priradiť hodnotu tridsať, k premennej nazvanej vek, syntaxou: vek = 30; Odteraz, až kým nezmeníme hodnotu, bude skript prekladať vek, ktorý "drží miesto" hodnote na nami zvolenú hodnotu. Takže, keď potom povieme: System.out.println(vek); Java konzola zobrazí hodnotu "30". Pomenovávanie premenných V Jave si môžete premenné pomenovať ako len chcete, pokiaľ použijete len znaky zo sady Unicode a nepoužijete "Java Keywords" čiže slová rezervované samotným jazykom. Najlepšie bude, keď budete používať znaky z nasledujúcich intervalov "A-Z, a-z, 0-9 alebo _".

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 17

Samozrejme, že premenné nám majú pomôcť pochopiť, čo sa deje v programe. A preto je namieste, aby sme zvolili inteligentnú cestu pomenovávania, napriklad: "krstnéMeno". Všimnite si, že sme vytvorili premennú krstnéMeno, v ktorej prvé slovo začína malým písmenom, druhé veľkým a nie sú medzi nimi medzery. To je zaužívaná prax v Jave a nebol by na škodu, keby ste si na to zvykli aj vy. Poznámka: veľa vývojárov používa "_" na označenie súkromných, čiže "private" premenných, ako "_adminMeno" a VŠETKY_ VEĽKÉ na označenie statiky.

Typy dát

Java je "silne založená na písaní". Znamená to, že každý typ premennej musí byť zadeklarovaný. Pozrite si nasledujúci príklad: boolean jeTanečníkomPolky = true; int vek = 30; Inými slovami povedané, Java potrebuje vedieť o aký typ dát sa jedná. Ak má premenná držať hodnotu boolean, musí tak byť aj zadeklarovaná. Keď už raz zadeklarujete typ hodnoty, ktorú bude premenná reprezentovať, nebude môcť reprezentovať iný typ hodnoty. Dôvod, prečo to všetko treba zapisovať je, aby Java mohla narábať s pamäťou počítača, keď beží Java program. Každému typu premennej je pridelená určitá časť pamäte, v závislosti na tom, koľko daný typ potrebuje. Dvojciferné celé číslo, napríklad, bude potrebovať menej pamäte ako dvanásťciferné desatiné číslo. Takže, keď deklarujeme typ premennej, hovoríme počítaču, koľko pamäte má vyhradiť na hodnotu danej premennej. Výhodou "silného písania" je, že Java kód môže byť jednoducho prenášaný z jedného PC do druhého. Avšak, mali by ste vedieť, že keď premennú zadeklarujete na istý typ hodnôt a potom jej priradíte iný typ hodnôt, tak hodnoty budú skomolené a váš program bude produkovať nesprávne výsledky. V Jave je osem typov premenných: int, short, long, byte, float, double, char a boolean. Teraz sa poďme lepšie pozrieť na každú z nich, aby sme pochopili, čo vlastne sú.

Typ

Pamäť v bajtoch

Poznámky

int

4

Celé číslo v intervale od -2 147 483 648 do 2 147 483 647. Toto je najčastejšie používaný typ celého čísla lebo ako často počítate s číslami väčšími ako 2 miliardy?

short

2

Celé číslo v intervale od -32 768 do 32 767. Keď vaša premenná bude ohraničená, použitie short namiesto int je dobrý spôsob ako ušetriť pamäť.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 18

long

8

Celé číslo v intervale od -9 223 372 036 854 775 808L do 9 223 372 036 854 775 807L. Ak počítate s takými veľkými číslami, asi pracujete pre NASA.

byte

1

Používa 8 bitov na reprezentáciu čísla v intervale od -128 do 127.

float

4

Float sa používa na reprezentovanie celých čísel s desatinými miestami ako napr.: 12,3456. Platné hodnoty môžu mať 6-7 desatiných miest.

double

8

Double pracuje ako precíznejší float. Platné hodnoty majú až do 15 desatiných miest. Vo viacerých prípadoch budete používať double namiesto float, pretože rozdiel vo veľkosti potrebnej pamäte nie aj až tak veľký a precíznosť je predsa len o niečo lepšia.

char

2

Char typ sa používa na reprezentáciu jedného znaku použitím Unicode kódovania.

boolean 1

Tento typ premennej môže byť buď pravdivý alebo nepravdivý.

Deklarovanie, priradenie a zlievanie premenných Deklarovanie premennej Ako sme už povedali, ak chcete použiť premennú, musíte špecificky zadeklarovať jej typ. Na deklarovanie typu, jednoducho napíšete typ a potom meno premennej. Tak ako v nasledujúcom príklade: byte b; short vek; long štátnyDlh; boolean jeMuž; Tiež môžete zadeklarovať viac premenných jedného typu naraz. Robí sa to nasledovne: int vek, početRokovVZamestnani, početDetí; Priradenie a inicializácia premennej Keď už máte zadeklarovaný typ premennej, môžete pristúpiť k jej inicializácii a priradení určitej hodnoty k nej. Priradenie a inicializácia je jednoduchá. Napíšete meno premennej = istá hodnota. Pozrite si nasledujúci príklad: int vek; vek = 28; Samozrejme, že môžete deklarovať a priradiť hodnoty k premenným naraz. Stačí použiť nasledovnú synatx: int vek = 28;

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 19

Zlievanie (premena z jedného typu na iný) Čo ak chceme vynásobiť 2 x 1,5? Alebo všeobecnejšie int x double? Bude výsledok int alebo double alebo niečo iné? V takomto prípade, keď je Java v pochybnostiach, výsledný typ bude ten, ktorý je menej obmezdujúcejší, aby sa vyhla chybám. V našom prípade to bude double lebo ten má menej obmedzení. Nasledujúca tabuľka ukazuje ako budú typy zmené, keď to bude možné. byte --> short --> int --> long --> float --> double Ale čo ak pôjdeme opačným smerom? Zoberme si, že budeme mať dve double premenné a budeme chcieť aby ich výsledok bol int. Na tento druh premeny, jednoducho pred priradením hodnoty, ktorá má byť zmenená vložíme do zátvoriek typ novej premennej. V nasledujúcom príklade zmeníme double na int: double d = 123,465; int i = (int) d; V tomto prípade bude priradená hodnota "123".

Pomocné objekty jednotlivých typov premenných O doteraz spomínaných typoch premenných sa dá povedať, že to sú "primitívne typy", pretože predstavujú jednoduché hodnoty s už zadefinovanými charakteristikami. Sú to pevne dané elementy. Java však poskytuje aj súbor tzv. "odkazových" typov, ktoré obsahujú objektové polia, reťazce a ďalšie komplexnejšie dátové štruktúry. Budeme o nich viac rozprávať, keď ich budeme používať. Je ale dobré vedieť, že Java nám poskytuje odkazové "obalové" typy, ktoré zabezpečia väčšiu funkčnosť pre každý primitívny typ. Všetky tieto triedy (classes) sa dajú nájsť v java.lang a zahŕňajú: Boolean, Character, Double, Float, Integer, Long a String. Každá trieda obsahuje pomocné metódy, ktoré nám umožnia ľahšie narábať s hodnotami. Jedna z najužitočnejších vecí je, možnosť jednoduchej premeny z jedného typu na iný. Takže môžete zmeniť hodnotu integeru na jej reprezentáciu v premennej typu string nasledovne: Integer(20).toString(); Prezrite si zoznam metód jednotlivých objektov:

Boolean final static Boolean FALSE

Vytvorí Boolean s nepravdivou hodnotou.

final static Boolean MAX_VALUE

Vráti 65535 (toto sa dostalo do boolean class nedo-patrením).

final static Boolean MIN_VALUE

Vráti 0 (toto sa dostalo do boolean class nedopa-trením).

final static Boolean TRUE

Vytvorí Boolean s pravdivou hodnotou.

Boolean(String s)

Vytvorí Boolean založený na reťazci. Pravdivý je pravdivý. Všetko ostatné je nepravdivé.

Boolean (boolean value)

Vytvorí Boolean so špecifickou boolean hodnotou.

boolean booleanValue()

Vráti boolean hodnotu Boolean objektu.

boolean equals(Object object)

Vráti pravdivý ak sú objekty rovnaké, nepravdivý ak nie sú.

static boolean getBoolean(String s)

Vráti pravdivý ak s je pravdivé. Inak vráti nepravdivý.

int hashCode()

Vráti Boolean hash kód.

String toString()

Vráti reťazcovú reprezentáciu Booleanu.

static Boolean valueOf(String s)

Vráti Boolean reprezentáciu reťazca. Character

final static int MAX_RASIX

Maximálny radix, ktorý môže byť použitý pri premene čísla na int (reprezentovaného ako znak). Hodnota je 36.

final static int MIN RADIX

To isté ako predchádzajúce, ale vracia 2.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 20 Character (char value)

Vráti hodnotu reprezentujúcu znak.

char charValue()

Vráti reprezentujúci znak znakového objektu.

static int digit(char ch, int base)

Premieňa ch na int.

boolean equals(Object o)

Testuje totožnosť medzi objektami.

static char forDigit(int digit, int base)

Vráti reprezentujúci znak čísla v špecifickej základni.

int hashCode()

Vráti "hash" kód.

static boolean isDigit(char c)

Vráti "pravda" ak je hodnota znaku mezdi 0 a 9.

static boolean isJavaLetter(char c)

Vráti "pravda" ak je hodnota znaku z abecedy alebo znak $ alebo _

static boolean isLetter(char c)

Vráti "pravda" ak je hodnota znaku písmeno.

static boolean isLetterOrDigit(char c)

Vráti "pravda" ak je hodnota znaku písmeno alebo číslo

static boolean isLowerCase(char c)

Vráti "pravda" ak je hodnota znaku napísaná malým (priklad: a, ale nie A).

static boolean isSpace(char c)

Vráti "pravda" ak je hodnota znaku medzera, tab, nový riadok alebo ENTER.

static boolean isUpperCase(char c)

Vráti "pravda" ak je hodnota znaku napísaná veľkým (priklad: A, ale nie a)..

static char toLowerCase(char c)

Mení znak na znak písaný malým (teda A na a).

String toString()

Vracia reprezentáciu znaku ako reťazec.

static char toUpperCase(char c)

Mení znak na znak písaný veľkým (teda a na A). Double

final static double MAX_VALUE

Vráti maximálnu hodnotu.

final static MIN_VALUE

Vráti minimálnu hodnotu.

final static double NaN

Double, ktoré nie je číslom.

final static double NEGATIVE_INFINITY

-1.0/0.0

final static double POSITIVE_INFINITY

1.0/0.0

Double(double value)

Vráti reprezentáciu Double hodnoty double.

Double (String s) throws NumberFormatExcepion

Vráti reprezentáciu Double hodnoty string.

static long double doubleToLongBits(double value)

Vráti reprezentáciu bitu.

double doubleValue()

Vráti reprezentáciu Double hodnoty double.

boolean equals(Object o)

Testuje totožnosť medzi objektami.

float floatValue()

Vráti hodnotu za desatinou čiarkou Double.

int hashCode()

Vráti "hash" kód.

int intValue()

Vráti int reprezentáciu Double.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 21 boolean isInfinite()

Vráti "pravda" ak je rovné KLADNÉ alebo ZÁPORNÉ nekonečno.

static boolean isInfinite(double d)

Vráti "pravda" pravdy.

boolean isNaN()

Vráti "pravda" ak Double neexistuje.

static double longBitsToDouble(long l)

Double reprezentácia bitov.

long longValue()

Vráti long reprezentáciu Double.

String toString()

Vráti String reprezentáciu Double.

static String toString(double d)

Mení d na String.

static Double valueOf(String s) throws NumberFormatException Mení String na Double Float final static float MAX_VALUE

Vráti maximálnu hodnotu.

final static float MIN_VALUE

Vráti minimálnu hodnotu.

final static float NaN

Float, ktoré nie je číslom.

final static float NEGATIVE_INFINITY

-1.0/0.0

final static float POSITIVE_INFINITY

1.0/0.0

Float(double value)

Vráti Float reprezentáciu double hodnoty.

Float(float value)

Vráti Float reprezentáciu float hodnoty.

Float (String s) throws NumberFormatExcepion

Vráti Float reprezentáciu string hodnoty.

double doubleValue()

Vráti double reprezentáciu Floatu.

boolean equals(Object o)

Testuje totožnosť medzi objektami.

static int floatToIntBits(float value)

Vráti reprezentáciu bitu.

float floatValue()

Vráti Float reprezentáciu Floatu.

int hashCode()

Vráti "hash" kód.

static float intBitsToFloat(int value)

Vráti float reprezentáciu int bitov.

int intValue()

Vráti int reprezentáciu Floatu.

boolean isInfinite()

Vráti "pravda" ak je rovné KLADNÉ alebo ZÁPORNÉ nekonečno.

static boolean isInfinite(float f)

Vráti "pravda" pravdy.

boolean isNaN()

Vráti "pravda" ak Float neexistuje.

long longValue()

Vráti long reprezentáciu Floatu.

String toString()

Vráti String reprezentáciu Floatu.

static String toString(float f)

Mení f na String.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 22 static Float valueOf(String s) throws NumberFormatException

Mení String na Float. Integer

final static int MAX_VALUE

Vráti maximálnu hodnotu.

final static int MIN_VALUE

Vráti minimálnu hodnotu.

Integer(int value)

Vráti Integer reprezentáciu int hodnoty.

Integer (String s) throws NumberFormatExcepion

Vráti Integer reprezentáciu String hodnoty.

double doubleValue()

Vráti double reprezentáciu Integeru.

boolean equals(Object o)

Testuje totožnosť medzi objektami.

float floatValue()

Vráti float reprezentáciu Integeru.

static Integer getInteger(String propName)

Vráti Systémovú vlastnosť k danému kľúču.

static Integer getInteger(String propName, int val)

Vráti Systémovú vlastnosť k danému kľúču.

int hashCode()

Vráti "hash" kód.

int intValue()

Vráti int reprezentáciu Integeru.

long longValue()

Vráti long reprezentáciu Integeru.

static int parseInt(String s) throws NumberFormatException

Vráti int reprezentáciu Stringu.

String toString()

Vráti String reprezentáciu Integeru.

static String toString(int i)

Mení i na String.

static Integer valueOf(String s) throws NumberFormatException Mení String na Integer. Long final static long MAX_VALUE

Vráti maximálnu hodnotu.

final static long MIN_VALUE

Vráti minimálnu hodnotu.

Long(long value)

Vráti Long reprezentáciu long hodnoty.

Long (String s) throws NumberFormatExcepion

Vráti Long reprezentáciu String hodnoty.

double doubleValue()

Vráti double reprezentáciu Longu.

boolean equals(Object o)

Testuje totožnosť medzi objektami.

float floatValue()

Vráti float reprezentáciu Longu.

static Long getLong(String propName)

Vráti Systémovú vlastnosť k danému kľúču.

static Long getLong(String propName, long val)

Vráti Systémovú vlastnosť k danému kľúču.

int hashCode()

Vráti "hash" kód.

int intValue()

Vráti int reprezentáciu Longu.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 23 long longValue()

Vráti long reprezentáciu Longu.

static long parseLong(String s) throws NumberFormatException Vráti long reprezentáciu Stringu. String toString()

Vráti String reprezentáciu Longu.

static String toString(long l)

Mení l na String.

static Long valueOf(String s) throws NumberFormatException

Mení String na Long.

Reťazce Ako ste si mohli všimnúť, v Jave nie je premenná typu string. Napriek tomu, že v Jave nie je teno typ premennej zabudovaný, môžete namiesto neho použiť triedu String, ktorá ho plne nahradí. O triedach a ich použití budeme hovoriť viac v budúcich častiach. Ale bude dobre, keď si predstavíme aspoň triedu String, aby sme ju mohli začať používať. Na použitie Stringu, jednoducho použijeme rovnakú syntax, ako keby to bol jeden z typov premenných: String s = "Ahoj Cyberspace"; Reťazce majú zopár metód, pomocou ktorých s nimi môžete robiť podobné veci ako v Perle. Keď chcete získať viac informácií o metódach, tak použite on-line dokumentáciu. Ako sa dokumentácia používa, o tom budeme hovoriť neskôr, ale je dobre vedieť, že triedu String nájdete v java.lang balíku.

Polia Zoznamové polia (známe jednoducho ako "polia") posúvaju koncept skalárnych premenných do vyššej úrovne. Skalárne premenné asociujú jednu hodnotu s jednou premennou, ale zoznamové polia asociujú k jednému názvu pola celý "zoznam" hodnôt. Java má zabudovanú triedu pre polia, ktorú môžete používať na držanie rôznych hodnôt, ale len vtedy, ak sú všetky hodnoty rovnakého typu. V Jave sú polia dosť obmedzujúce. Napríklad, ak raz zadáme veľkosť poľa už ho viac nemôžeme zmeniť. Pri dynamickom pridávaní hodnôt do pola, teda ak potrebujeme vytvoriť pole väčšie a pridať doň hodnoty staré plus hodnoty nové, musíme použiť arrayCopy() z triedy java.lang.System. Pre dynamicky meniacu sa štruktúru bude lepšie, keď použijete Vektorovú triedu z balíka java.util. Budeme ju spomínať neskôr. Ale v prípadoch, kde nepotrebujeme dynamicky meniť dátovú štruktúru, polia slúžia veľmi dobre. Java ponúka tzv. "zero-based" polia, ktoré sú definované podobne ako premenné. Najprv deklarujeme aký typ dát bude uložený v poly, potom názov pola a nakoniec jeho veľkosť. Pozrite si tento príklad: int[] intArray = new int[50]; Pole bude uchovávať 50 integerov indexovaných od 0 po 49. Pre získanie alebo uloženie dát jednoducho použijeme index. Napríklad na zaplnenie pola od 0 po 49 a potom vypísanie hodnoty pod indexom 49 môžeme použiť nasledovný postup: int[] intArray = new int[50]; for (int i = 0; i < 50; i++) { intArray[i] = i; } for (int i = 0; i < 50; i++) { System.out.println("Hodnota: " + intArray[i]); } System.out.println(intArray[50]); Java nám tak isto dovoľuje definovať pole aj pri jeho inicializácii, ako vidíme tu:

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 24

int[] intArray = {0,1,2,3,4};

Operátory Java ponúka niekoľko operátorov, aby som mohli manipulovať s premennými. Matematické operátory Ako iné jazyky, tak aj Java ponúka možnosť robiť matematické operácie. Tabuľka zachytáva všetky poskytované funkcie. Operátor

Opis

Príklad

+

Vykonáva sčítanie

int x = 1; int y = 2; int z = x + y // z = 3

-

Vykonáva odčítanie

int x = 2; int y = 1; int z = x - y // z = 1

*

Vykonáva násobenie

int x = 2; int y = 2; int z = x * y // z = 4

/

Vykonáva delenie

int x = 4; int y = 2; int z = x / y // z = 2

%

Získava zvyšok (modulus) int x = 6; int y = 4; int z = x % y // z = 5

Jednu vec si treba zapamätať pri používaní matematických operátorov v Jave. Treba si dávať pozor na používané typy premenných. Inak povedané, ak požijeme dva rôzne typy premenných, Java použije zlivenie (viď. 5 časť), aby sa dopracovala k správnemu výsledku. Určujúce operátory Ako sme si ukázali v predchádzajúcom odstavci, premenné používajú určujúce operátory. Ak pracujeme s číselným typom premenných, tak môžeme použiť viac druhov operátorov, ako len "=". Nasledujúca tabuľka ukazuje, ktoré to sú: Operátor

Opis

=

Rovnosť. Všimnite si, že môžete reťazovo pridelovať operátor ako: x=y=x=0

+=

Sčítanie (x=1; x+=2; //x=3)

-=

Odčítanie

/=

Delenie. Nezabudnite na automatické zlievanie (casting)!

*=

Násobenie

%=

Modulus (zvyšok)

^=

Bitwise XOR (bitový exkluzívny súčet)

&=

Bitwise AND (bitový súčin)

|=

Bitwise OR (bitový súčet)

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 25 <<=

Posun do ľava o n bitov.

>>=

Posun do prava o n bitov.

>>>=

Bitový posun do prava doplnkový bit je nula.

Zvyšovanie a znižovanie Java ponúka aj základné operátory pre zvyšovanie a znižovanie s prefixovým a postfixovým zápisom. Pamätajte na to, že pri prefixe je najprv hodnota zvýšená alebo znížená a až potom sa s ňou robia operácie. Pri postfixe je to naopak. Najprv sa vykoná operácia a až potom sa zmení hodnota. Najlepšie je to vidieť na príklade: int int int int int int

x = 3; y = 3; sum1 = sum2 = sum3 = sum4 =

2 2 2 2

* * * *

x++; // sum1 je 6 a x je 4 ++y // sum2 je 8 a y je 4 x--; // sum3 je 6 a x je 2 --y // sum4 je 4 a y je 2

Priorita Nakoniec, v Jave sú operátory usporiadané hierarchicky. Hierarchiu ukazuje tabuľka. Priorita

Operátor

Asociácia

1

++, --, ~!, +, -, (unary), (type cast)

R

2

*/%

Ľ

3

+, -, + (concatination)

Ľ

4

>>>, >>, <<

Ľ

5

<, <=, >, >=

Ľ

6

==, !=

Ľ

7

&

Ľ

8

^

Ľ

9

|

Ľ

10

&&

Ľ

11

||

Ľ

12

?:

R

13

=, *=, /=, %=, +=, -=, <<=, >>=, >>>=, &=, ^=, |=

R

Kontrola prúdenia Jedny z najsilnejších programovacích nástrojov v Jave sú kontrolné štruktúry. Kontrolné štruktúry sa používajú na vytvorenie základnej logiky, ktorá riadi naše aplikácie. Tieto kontrolné štruktúry používajú boolean logiku na vytvorenie inteligencie v skripte, ktorý musí reagovať na rôzne požiadavky klienta. Všetky kontrolné štruktúry sú rozdelené na riadiaci výrok (vysvetlený nižšie) a výrokový blok. Výrokový blok je skupina príkazov, ktoré sú vykonané naraz. Blok je zoskupenie príkazov v zložených zátvorkach {}. Nižšie je uvedený jednoduchý príklad bloku. { prvý príkaz

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 26

druhý príkaz tretí príkaz } Java vykoná každý príkaz zo skupiny po poradí. Kedy, ako a či vykoná skupinu príkazov, o tom už rozhoduje riadiaci výrok. if / else if / else Najznámejším riadiacím výrokom je "if" test. If test kontroluje, či je nejaký výrok pravdivý. Ak je, vykoná príkazy vo výrokovom bloku. Java používa jednoduché binárne porovnávanie, ako test pravdivosti. Ak je výsledok nejakej operácie pravdivý, operácia vráti jednotku a výrokový blok je vykonaný. V opačnom prípade, operácia vráti nulu a výrokový blok nie je vykonaný. Ukazuje to tento príklad: if (name.equals("Selena Sol")) { System.out.println("Hello Selena.\n"); } V tomto príklade Java kontroluje, či má skalárna premenná name hodnotu "Selena Sol". Ak sa hodnota zhoduje, porovnávajúca operácia vráti jednotku a aplikácia vykoná vypísanie mena, na základe príkazov v bloku. Ak Java zistí, že meno sa nezhoduje so "Selena Sol" nevykoná príkazy v bloku. If test ponúka aj alternatívy: "else" a "else if" riadiace výroky. Else if pridáva možnosť druhého kontrolovania pravdivosti a else definuje konečný kurz akcií v prípade vrátenia nuly if alebo else if testom. Nasledujúci kód to ukazuje. if (vek == 28) { System.out.println("Máš 28 rokov!"); } else if (vek == 29) { System.out.println("Máš 29 rokov!"); } else { System.out.println("Nie si ani 28 ani 29 ročný!"); } while While riadiací výrok nám umožňuje opakovanie príkazov v bloku, kým nie je splnená určitá požiadavka. while (x <=100) { X++ System.out.println("x is: " x); } // // // // //

Pri while opakovaní, je akcia vykonaná len v prípade vrátenia jednotky testom. Zaujímavou alternatívou je do / while opakovanie, ktoré vykoná akciu "pred" odtestovaním.

for For je ďalším perfektným riadiacím výrokom. Základná syntax pre for je nasledovná: for ([počiatočný stav]; [test]; [zvýšenie]) { [akcia na vykonanie]

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 27

} "Počiatočný stav" definuje, kde sa má opakovanie začať. "Test" definuje logiku opakovania, umožnením skriptu zistiť podmienky, ktoré určujú akcie vykonávané aplikáciou. "Zvýšenie" definuje ako má skript vykonať opakovanie. Napríklad môžeme vykonať viditeľné odpočítavanie za pomoci for opakovania. for (int x = 10;X >=0;x--) { System.out.println("x is: " x); } POZNÁMKA: Na zmenšenie, použijeme menoPremennej--. Na zvýšenie, použijeme menoPremennej++.

Kontrola podmienok Tieto operátory: ==, !=, >, >=, <, <= môžeme použiť na určenie rovnosti(nerovnosti). Na kontrolu viacerých podmienok naraz používame && a || operátory. (8 > 2) && (2 == 3) // Vráti nulu lebo // jeden z výrokov je nepravdivý. (8 >= 2) || (2 == 3) // Vráti jednotku lebo // najmenej jeden výrok je pravdivý. // Všimnite si, že druhá kontrola // je pri zistení pravdivosti // prvého výroku hneď ukončená. Switch výrok Ale to nie je všetko. Java uvádza aj nový riadiaci výrok nazvaný switch. Switch výrok umožňuje zadať jednu premennú a kontrolovať ju pe viaceré hodnoty. Ukazuje to nasledovný príklad: switch (input) { case 1; { System.out.println("Zadal si 1"); break; } case 2; { System.out.println("Zadal si 2"); break; } case 3; { System.out.println("Zadal si 3"); break; } } Break Ako môžete vidieť, Java ponúka aj break výrok na prerušenie opakovania. hore

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 28

Piata kapitola Classes (triedy) Dobre, teraz keď poznáme základy syntaxy v Jave, je čas na to, aby sme sa naučili ako je implementovaný objektovo-orientovaný dizajn v Jave. Základnou jednotkou v objetovej-orientácii v Jave je class (trieda). Class býva často opisovaný ako hlavný plán (nákres - modrák) objektu. Umožňuje programátorovi definovať všetky vlastnosti a metódy, ktoré definujú objekt interne, všetky API metódy, ktoré definujú objekt externe a všetku syntax potrebnú pre riadenie encapsulation, inheritance a polymorphismu. V úlohe plánu (modráku), class určuje ako bude daný objekt vyzerať, ale pritom samotný class nie je tým objektom. Keď Java virtual machine tvorí konkrétny objekt z plánu classu, má za úlohu vytvoriť "instance" (príklad) classu. Teda plán (modrák) sa použije na vytvorenie objektu, ktorý sa uloží do pamäte počítača. Takto vytvorený objekt, bude potom schopný použiť metódy a polia definované svojou triedou (class). Veľa ľudí používa nasledujúce metafóry na opis vzťahu medzi triedou a objektom: Predstavte si triedu ako formičku na koláč a "instance" bude ten vyformovaný koláčik. Podobne si môžete predstaviť triedu ako projekt domu a "instance" ako dom. Je dôležite vedieť, že z jednej triedy sa môže vytvoriť viac ako jedna "instance" počas bežania programu. Najdôležitejšie je to, že každý takto vytvorený objekt má svoje vlastné kópie metód a polí, takže počas života programu sa objekty vyvýjajú nezávisle jeden od druhého. Napríklad trieda Button môže byť použitá na vytvorenie dvoch tlačítok v programe. Vytvorené tlačítka majú každé svoje vlastne pole "Lable" a pole s "Background Color". Počas programu jedno tlačítko môže byť modré a po stlačení vypíše: "Hello Cyberspace". Druhé môže byť červené a po stlačení bude vypisovať: "Hello Selena". Obidve zostávajú objektami Button lebo sú vytvorené z triedy Button, ale každý nadobúda unikátne vlastnosti lebo je jednou z "instance" triedy. Môžete porovnať dva objekty a zistiť či sú z jednej triedy za použitia "instanceof" príkazu ako v nasledujúcom príklade. if (nejakyObjekt instanceOf Button) { ...urob niečo.... }

Abstract Classes vs. Interfaces Na záver by bolo dobré, keby som vysvetlil čo sú to abstraktné triedy a interfaces. Môj výklad bude založený na otázke, ktorú som dostal pred pár dňami: >kedy je trieda abstraktná? >kedy sa definuje interface? >aký je rozdiel medzi abstraktnými triedami a interfaces? Abstraktná trieda je špeciálnym typom Java triedy z nasledujúcou charakteristikou: · Abstraktné triedy nemôžu vytvoriť "instance", teda nemôžu sa z nich vytvoriť objekty · Abstraktné triedy sa používajú ako super triedy a metódou dedenia, tvoria triedy, ktoré môžu vytvárať "instance" · Abstraktné triedy obsahujú základné implementácie metód, ktoré využívajú triedy vzniknuté dedením Myslím si, že abstraktné triedy najlešie pochopíme na príklade z reálneho sveta. Uvažujme o triede cicavcov. Ako si pamätáte zo základnej školy, cicavce majú spoločné určité metódy a vlastnosti, ako je fakt, že sú teplo krvné, riadia si homeostázu a majú ochlpenie. Napriek tomu, by nebol rozumné vytvoriť objekt z tejto triedy. Uvažujte o tom v reálnom svete. Neexistuje žiadny "čistý" cicavec. Ale namiesto toho, existuje veľa rôznych cicavcov (opice, veľryby, ľudia, ...), ktoré vznikli z tried, ktoré zdedili dôležité vlastnosti a metódy zo super triedy cicavce. (Pravidlo č.1: Abstraktné triedy nemôžu vytvoriť "instance", teda nemôžu sa z nich vytvoriť objekty) Cicavec je viac kategória ako konkrétna vec. Je to nejaké koncepčné zariadenie na združenie objektov s rovnakými charakteristikami. Je to organizačný nástroj na definovanie hierarchie. (Pravidlo č.2: Abstraktné triedy sa používajú ako super triedy a metódou dedenia, tvoria triedy, ktoré môžu vytvárať "instance") Napriek tomu, trida cicavce nie je len jednoduchý organizačný nástroj. Má určitý podiel na práci. Definuje metódy a vlastnosti. Výsledkom je, že triedy ako pes, veľryba, človek nepotrebujú robiť túto robotu. (Pravidlo č.3: Abstraktné triedy obsahujú základné implementácie metód, ktoré využívajú triedy vzniknuté dedením)

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 29

Takže, načo sú abstraktné triedy dobré pre programátora? Sú veľmi výhodnými nástrojmi pri tvorbe knižníc objektov. Abstraktná trieda dáva možnosť vytvorenia nejakej triedy, z ktorej budeme môcť tvoriť ďaľšie triedy s rovnakou funkčnosťou. Poskytujú nám možnosť zadefinovania metód a vlastností, ktoré budú používať triedy, ktoré vznikli dedením. Treba si ale pamätať, že samotná abstraktná trieda sa sama nemôže použiť. Páči sa mi príklad, ktorý uvádza Barry Boone vo svojej príručke Java 2 Exam Guide "Predstavte si triedu Transakcia, ktorá bude použitá v aplikácii home bankingu. Táto trieda má dve podtriedy: Vklad a Výber. Nemalo by význam tvoriť "instance" z triedy Transakcia. Aj samotný užívateľ nehovorí bankomatu, že chce urobiť transakciu. Ale namiesto toho mu povie, či chce urobiť Výber alebo Vklad." Myslím si, že Barry mohol ísť ešte o krok ďalej. Nielenže to nemá zmysel vytvárať objekt z triedy Transakcia, ale je to aj niečo, od čoho chcete vy ako vývojár, byť odradený. Zadeklarovaním abstraktnej triedy nútite ostatných programátorov chápať, ako pracuje vaša hierarchia.

Interface je ako abstraktná trieda, v ktorej interfaces nie sú vytvárané na objekty. Tu končí podobnosť s abstraktnými triedami. Interfaces sa nezaujímajú o vytvorenie supertriedy, z ktorej sa potom tvoria podtriedy. Podobne, interfaces neobsahujú základné implementácie, ktoré používaju podtriedy. Namiesto toho, interaface definuje súbor "unimplemented" metód, ktoré musí nejaký objekt implementovať, aby mohol o sebe poveadť "official implementor of the interface". Interfaces sú vlastne kontrakty, ktoré zabezpečujú, že najký objekt, ktorý sa rozhodol implementovať ich interface, sa rozhodol implementovať určitú sadu metód. Takémuto objektu, ktorý implementoval interface, može veriť každý iný objekt a môže si byť istý, že zdiela metódy určené interfaceom. Podobne ako abstraktné triedy, aj interfaces sú prostriedky, ktoré pomáhajú programátorom udržať kontrolu nad knižnicami objektov a zavádzajú štandardizáciu pre ďaľší vývoj. Sú tu na to aby nám pomohli udržať vysoké štandardy pri písaní kódu.

Metódy Ako sme už skôr (kapitola 2) povedali v našom rozprávaní o objektovo-orientovanom programovaní, metódy sú slovesami objektov. Metódy, ako podprogramy v objektovo-orientovanom programovaní, sú základnou jednotkou funkčnosti objektu. Sú telom vykonávateľného kódu vrámci triedy, ktorý môže byť použitý na ovplyvnenie objektu vytvoreného z triedy. Metódy pozostávajú z nasledujúcich komponentov: · meno metódy · zoznam vstupov (inputs), ktorý môže byť prázdny · typ výstupu, ktorý môže byť "void", čiže prázdny, ak metóda nič nevracia · kód, ktorý vykoná určitú vec Vlastne, niektoré metódy, ako napr. abstraktné metódy, nepotrebujú vykonávateľný kód. Abstraktné metódy sa používajú podobne ako interfaces na pomoc pri definovaní skeletu funkčnosti ale prenechávajú všetko ostatné pre iné metódy. Pozrite si nasledujúcu ukážku kódu: int add(int a, int b) { return (a+b); } V tomto prípade sme vytvorili metódu, ktorá sčítava dva integery, ktoré sú v nej zastúpené ako argumenty. Výstupom metódy je výsledok. Metóda je nazvaná "add" a môže byť použitá v kóde, podobne ako to je vidieť na príklade nižšie, kde mySum vráti 7. int mySum = add(3, 4) Metódu môžeme definovať len v rámci definície tela triedy. Hore uvedený kód nebude samostatne fungovať, pokým nie je súčasťou triedy.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 30

Operator Overloading Ďalšou cool vlastnosťou Javy je, že metódy môžu byť viac násobne definované. Ako napríklad rovnaký názov metódy môže byť použitý na rôzne druhy implementácie toho istého deja. Pamätáte sa ešte na príklad z 2 kapitoly printObrázok(), printText() a printČísla()? Jedinou požiadavkou pri overloadingu je, že každá verzia metódy bude používať iné súbory parametrov ako argumenty (niekedy sa tomu hovorí, že každá metóda má "vlastný podpis" - different signature), ako je to vidieť na príklade: int add(int a, int b) { return (a+b); } double add(double a, double b) { return (a+b); } float add(float a, float b) { return (a+b); } Pretože metódy patria špecifickým triedam, je dobré mať rovnaké pomenovanie pre metódu s rovankými argumentami v rôznych triedach. Tak napr. Button class môže mať metódu setLabel (String s) a Label môže mať tiež metódu setLabel(String s). Tieto dve metódy nebudú vo vzájomnom konflikte, lebo každá patrí špecifickej triede.

Inheritance Ineheritance je v Jave veľmi jednoduchá a je riadená "extends" slovami - rozširujúcimi výrazmi. Ako asi predpokladáte, podtriedy pracujú presne ako ich supertriedy (dedia všetkú funkčnosť) s tým rozdielom, že ešte pridávajú určitú extra funkčnosť. Ak triedu niečo špecificky nerozširuje, tak potom bude automaticky rozšírená z root Object triedy. V nasledujúcom príklade vytvoríme podtriedu Appletu nazvanu myApplet: public class myApplet extends Applet { ...nové polia a metódy... } Ďaľšie rozširovanie je tranzitívne. Ak vytvoríme podtriedu z triedy, ktorá je už podtriedou, tak vytvorená podtrieda získava funkčnosť oboch supertried. Neoceniteľné v Jave je aj to, že okrem dedenia funkčnosti supertriedy, môžeme túto funkčnosť aj modifikovať. Je to dosiahnuté zrušením určitej metódy supertriedy. Zrušenie sa dosiahne vytvorením vlastnej metódy s rovnakým názvom "signature", ako metóda, ktorú chceme zrušiť. Java virtual machine uperdností našu metódu pred metódou supertriedy. Samozrejme, že môžeme používať aj metódy a polia supertried, ak pred názov pridáme slovo "super". super.názovmetódy(); Slovo super je obzvlášť dôležité pri použití Constructor-u v podtriedach, lebo tie nedokážu dediť constructor-y zo supertried. Takže, ak budeme chcieť použiť constructor budeme ho musieť volať za použitia slova super zo supertriedy. Ukazuje to nasledujúci príklad: class myFrame extends Frame { public myFrame() { super();

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 31

} public myFrame(String title) { super(title); } ...zvyšok vašich metód a polí.... } Java obsahuje aj slovo "final", ktoré zabraňuje, aby sa z triedy vytvárali podtriedy, aby boli metódy zrušené a aby sa menili už deklarované typy premenných. Využíva sa to ale veľmi zriedkavo.

Tvorenie a použitie tried na príklade Takže, ako vyzerá trieda? Poďme jednu vytvoriť. Pretože sme sa ešte nedostali do takej hĺbky Javy, naša trieda bude veľmi malá. Vytvoríme Announcer class, ktorý je zodpovedný za ohlasovanie určitých fráz. Pozrite si nasledujúci kód (nezlaknite sa ho, hneď si všetko vysvetlíme): public class Announcer { private String _announcement; public Announcer() { _announcement = "Hello Cyberspace"; } public Announcer(String s) { _announcement = s; } public void printAnnouncement() { System.out.println(_announcement); } public void setAnnouncement(String s) { _announcement = s; } public String getAnnouncement() { return _announcement; } } Verte tomu, alebo nie, ale na 23 riadkoch kódu sme ukázali vytvorenie objektu, vytvorenie public API, encapsulation a polymorphism (inheritance si ukážeme na príklade neskôr). Vidíte aké je jednoduché objektovo-orientované programovanie v Jave! Poďme si teraz kód rozkúskovať a vysvetliť si, ako sme dosiahli náš objektovo-orientovaný cieľ.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 32

Špecifikátor prístupu Prvé, čo si všimnete na našej triede je slovo "public". Pár riadkov nižšie je slovo "private". Čo znamenajú tieto slová? Slová public, private a protected (nepoužili sme ho v našom príklade) slúžia na definovanie oblasti (možnosti). Oblasťou triedy, metódy, vlastnosti je vymedzené, kto má k nej prístup. "Public" oblasť napríklad, znamená, že každému je dovolený prístup. Na druhej strane, do "private" oblasti má prístup len samotný objekt. A do "protected" oblasti len objekty, ktoré boli vytvorené z danej triedy. Ak nezadefinujeme oblasť (hovorí sa tomu "friendly" oblasť), tak všetky triedy budú mať prístup. V našom príklade, každý objekt má možnosť prístupu k Announcer triede a môže ju použiť na vytváranie Announcer objektov. Taktiež má každý prístup k použitiu printAnnouncement() metódy, aby mohol objekt Announcer zobraziť správu. Jedine samotný objekt Announcer má právo prístupu k obsahu správy, ktorý je uložený v _announcement. Samozrejme, že aj vonkajšie objekty môžu požiadať o zmenu annoucementu za použitia get a set API, poskytnutých Annoucer triedou. Výhodou vymedzovania oblastí je vynútenie používania encapsulation. Programátori sú nútení, aby schovávali dáta objektov a poskytovali API, ako napr. setAnnouncement(). V podstate "private" kľúčové slová stavajú steny čiernych skriniek (black box kapitola 2), ktoré sú rozhodujúcimi prvkami v objektovo-orientovanom dizajne.

Definovanie objektov Hneď po kľúčovom slove "public" vidíme ďaľšie kľúčové slovo "class". Toto slovo sa používa na označenie bloku kódu, ktorý definuje triedu. Z tejto triedy môžeme neskôr vytvoriť objekt. V našom prípade v príklade definujeme triedu nazvanú "Announcer". Mimochodom, trieda je definovaná v *.java súbore, ktorý je skompilovaný kompilátorom na *.class súbor. Obyčajne, Vaše *.java a *.class súbory budú mať rovnaký názov ako samotná trieda. Takže Announcer trieda by bola uložená v súbore Announcer.java a skompilovaná do súboru Announcer.class. Keď je raz trieda špecifikovaná, tak je aj definovaná. Na definovanie triedy si určite pamätáte. Treba zadefinovať jej vlasnosti a metódy. V našom príklade máme jednu vlastnosť _announcement a zopár metód: Announcer(), Announcer(), setAnnouncement(), getAnnouncement(), and printAnnouncement().

Konštrukcia Hey, počkajte chvíľu ... Čo je Announcer() metóda a prečo sú až dve? Hmm, Announcer() je špeciálna metóda nazývaná "Constructor". Constructor metóda, ktorá má vždy zhodné meno s *.class súborom, slúži na samotnú "konštrukciu" objektu z triedy. Keď je tvorený objekt, tak je táto metóda volaná, aby sa inicializoval objekt. Ale raz sa zavolá, už viackrát sa volať nebude. Takže by ste mali zapísať inicializačný kód len sem. Načo sú teda dve? Toto je príklad polymorphismu. Rozdiel medzi dvomi verziami Announcer() je, že jedna nemá žiadne argumenty a tá druhá má jeden argument - String. V prvom prípade, bude vytvorený Announcer objekt so správou "Hello Cyberspace!" V druhom prípade, zase objekt so správou, ktorá vznikla na základe objektu, ktorý vytvoril Announcer!

Vývoj API Po definovaní constructors, udidíte metódy printAnnouncement(), getAnnouncement() a setAnnouncement(). Tieto metódy reprezentujú verejné API tejto triedy a môžu byť volané aj inými objektami. Dovoľujú iným objektom v rámci "object space" narábať s Announcer objektom. V prípade printAnnouncement() a setAnnouncement() majú vonkajšie objekty možnosť požiadať Announcer objekt o vykonaie práce. V prípade getAnnouncement(), vonkajšie objekty zase môžu žiadať od Announceru nejaké dáta. Ako môžete vidieť, ak má metóda za úlohu vracať nejakú hodnotu, hodnota vracaného typu je špecifikovaná v definícii metódy a metóda musí vrátiť hodnotu tohoto typu. V našom prípade getAnnouncement() metóda vracia reťazec obsiahnutý v premennej _announcement.

Vytváranie a používanie objektu Tak, kde sú tie iné objekty a ako je vlastne Announcer objekt vytvorený? Na vytvorenie objektu, Java používa kľúčové slovo "new". Pozrite si nasledujúcu triedu nazvanú Test, ktorá vytvára Announcer a používa jeho public API na výpis announcementu. public class Test { public static void main(String[] args) { Announcer a = new Announcer(); a.printAnnouncement(); } } Nezameráme sa teraz na syntax triedy Test. Namiesto toho sa zameráme na to, ako Test class používa Announcer class. Všimnite si, že Test class používa nové kľúčové slovo na vytvorenie Announcer objektu a potom volá printAnnouncement() metódu z Announcer objektu za použitia "dot notation" (bodkový zápis).

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 33

Dot notation sa používa na prístup k vlasnostiam a metódam v objekte. V tomto prípade máme Announcer objekt nazvaný "a" a pristúpime k printAnnouncement() metóde v a. Je veľmi dôležité špecifikovať objekt, ktorý chceme používať, lebo je dosť pravdepodobné, že v rovnakom čase môže existovať viacero Announcer objektov. Z toho dôvodu treba presne povedať, z ktorého objektu chceme volať printAnnouncement() metódu. V nasledujúcom príklade si ukážeme všetko, čo sme sa naučili o triedach. Vytvoríme tri Announcer objekty, dva budú používať základný constructor a jeden bude používať alternatívny. Potom použijeme setAnnouncement() API metódu, aby sme zmenili announcement druhého objektu. Nakoniec necháme všetky Announcer objekty vypísať svoje announcementy za pomoci dot notation. public class Test { public static void main(String[] args) { Announcer a = new Announcer(); Announcer b = new Announcer(); Announcer c = new Announcer("Hello Sol"); b.setAnnouncement("Hello World"); a.printAnnouncement(); // vypíše Hello Cyberspace! b.printAnnouncement(); // vypíše Hello World c.printAnnouncement(); // vypíše Hello Sol } } hore

Šiesta kapitola Budovanie aplikácie Okay, poďme sa pozrieť na zvyšok triedy Test, lebo je to dosť špeciálna trieda. Test class je vlastne veľmi malá Java aplikácia, ktorá môže byť skompilovaná a spustená. Tu je zase jej kód ... public class Test { public static void main(String[] args) { Announcer a = new Announcer(); a.printAnnouncement(); } } Z minulej kapitoly by ste mali byť už oboznámení z definície tejto triedy. Taktiež, by ste už mali byť oboznámení s obsahom main() metódy. Ale čo je to main() metóda a prečo tam nie je constructor pre Test? Main() metóda je veľmi špeciálna metóda, lebo pracuje aj bez vytvárania z triedy. Dokáže to preto, lebo je metódou "static". Static je kľúčové slovo, ktoré keď sa použije spolu s triedou, tak nie je potrebné z triedy nič vytvárať, aby mohla fungovať. Všimnite si, že main() metóda môže použiť aj pole reťazcov ako argumenty. Dá sa to využiť v prípade, keby sme chceli aplikácii poslať nejaké informácie z príkazového riadku. Ale v tomto prípade, nebudeme posielať žiadne argumenty.

Kompilovanie aplikácie Je veľmi jednoduché skompilovať aplikáciu, ak ste si už nainštalovali a nakonfigurovali JDK. Stačí ísť do adresáru, kde máte súbor *.java a použiť javac na skompilovanie do bytecode nasledovným príkazom: javac názov_súboru.java

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 34

(alebo niekedy aj javac *.java na skompilovanie všetkých súborov v jednom adresári) Proces kompilovanie je zachytený nižsie:

Spustenie aplikácie Keď je kód skompilovaný, môžeme aplikáciu spustiť na Java Virtual Machine. Aby sme tak mohli urobiť, stačí napísať v tom istom adresári: java názov_súboru

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 35

Vyskúšajte si to skompilovaním a potom spustením Test aplikácie. Nezabudnite, že musíte mať dva súbory. Jeden Announcer.java a druhý Test.java.

Nefunguje to! Pretože to, s čím narábame, sú počítače, môže sa stať, že pri kompilácii a spúšťaní Test aplikácie niečo nefunguje tak ako má. Tu je zopár riešení. Chyba "Bad command or filename"

Riešenie Neurobil ste preklep? Ak nie, tak nemáte správne zadefinovanú PATH a počítač nevie nájsť javac, alebo Java Virtual Machine. Skúste správne zadefinovať PATH, alebo napíšte presnú cestu k javac: c:\java\sun\jdk1.2.2\bin\javac Test.java

(príklad)

"ClassDefNotFound Error"

Nedefinovali ste správne vašu CLASSPATH a java compiler nevie nájsť java class knižnce, ktoré potrebuje.

"Public class Test must be defined in a file called 'Test.java'"

Treba si dávať pozor pri písaní veľkých a malých písmen v Jave. Pravdepodobne ste napísali javac test.java. Skúste to s veľkým "T".

"Can't find class Test/ class"

Pravdepodobne ste chceli spustiť váš test.class a napísali ste java Test.class. Koncovku *.class by ste mali vynechať. Skúste java Test

"Can't find class test"

Znovu pozor na veľké a malé písmená. Asi ste napísali java test a má to byť java Test.

"Test.java:7: ';' expected"

Zabudli ste ukončiť ten riadok bodkočiarkou.

"Return required at end of java.lang.String getAnnouncement()"

Zabudli ste napísať return _announcement;

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 36 na konci metódy. Pamätajte si, že keď poviete, že niečo vrátite, tak to musíte aj vrátiť. "Announcer.java:22: Undefined variable: _ announcement"

V tomto prípade je _announcement zle napísaný. Ale môže to tiež znamenať, že ste definovali premennú _ announcement v metóde, ktorá nie je prístupná. Pamätajte, že ak má byť premenná prístupná aj iným metódam, musí byť definovaná mimo metódy.

Písanie appletov Applety sú programy, ktoré bežia na web stránke a využívajú prostriedky, ktoré im ponúka web browser - Java Virtual Machine (JVM) a základná sada knižníc tried. Keď sa dostanete na stránku, kde je zakomponovaný applet, tak sa najprv zobrazí šedá plocha. Pomaly sa potom nahrá celý applet a objaví sa na mieste šedej plochy. Naviac sa applety môžu otvoriť aj vo vlastnom okne. Znamená to, že sa objavia vo vlastnom aplikačnom okne, ktoré sa otvorí z okna browseru. Toto okno môže byť nezávisle od okna browseru posúvané a môžeme meniť jeho rozmery. Väčšinou ale, samostatné okná appletov, majú dole napísané: "Warning: Applet Window". To upozorňuje užívateľa, že okno je súčasťou appletu, ktorý beží v browseri. Toto hlásenie tam zámerne pridali tvorcovia browserov, aby sa predišlo omylom a zamieňaniu so sytémovými oknami, alebo oknami iných aplikácií. AWT class java.awt.Applet definuje applet. Táto trieda poskytuje všetky základné vlastnosti a metódy, ktoré vytvárajú objekt applet.

Životný cyklus appletu Applet začína "žiť", keď browser nahrá jeho triedy a zavolá jeho metódu init(). Preto by ste mali v metóde init() mať incializačný kód, ako napríklad incializovať premenné. Po skončení incializácie, browser zavolá metódu start() v applete. Od tohoto okamihu, môže začať užívateľ používať applet. Ale čo sa stane, keď užívateľ prejde na inú web stránku počas bežania appletu? Web browser zavolá metódu stop(), aby si applet mohol "oddýchnuť", kým užívateľ bude surfovať niekde po webe. Ak sa vráti späť k appletu, tak browser znovu zavolá metódu start() a applet je pripravený na používanie. Nakoniec, ak sa užívateľ rozhodne zatvoriť browser, tak ten ešte pred ukončením zavolá metódu destroy(), aby sa uvoľnili systémové prostriedky, ktoré používal daný applet. Samozrejme, že môžete obísť hociktorú z metód, aby ste mohli zaviesť vlastnú logiku v cykle bežania appletu. Napríklad budete chcieť zaviesť vlastnú logiku do metódy stop(), ktorá vykonáva nejaké cleanup alebo save operácie. A ešte nakoniec, môžete obísť metódu destroy(), na vykonanie jednorázových úloh, ktoré umožnia dokončenie programu. Príkladom môže byť výčistenie vlákien (threads), ktoré boli spustené v init() metóde.

Applety príkladom Okey, ešte stále nám zostáva pár vecí, o ktorých si musíme niečo povedať, pred tým ako začneme tvoriť vlastný applet. Pozrite sa, ako taký applet vyzerá, aby ste vedeli čo nás čaká. Všimnite si, že musíme importovať applet package. import java.awt.*; import java.applet.*; public class Hello extends Applet { public void init() { System.out.println ("Boli sme incializovaní"); } public void start() { System.out.println("Boli sme spustení"); } public void stop() { System.out.println("Boli sme zastavení");

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 37

} public void destroy() { System.out.println("Boli sme zničení"); } }

Applet a HTML Po napísaní kódu pre applet, budeme ho musieť ešte skompilovať na vytvorenie Java .class súboru, ktorý sa používa na spúštanie programu. Ak používate JDK, nasledujúci príkaz sa použije na kompiláciu appletu (ako vidíte, je totožný s príkazom na kompiláciu aplikácie): javac Hello.java Skontrolujte si, že ste naozaj v adresári, kde sa nachádza súbor .java, ktorý idete kompilovať a že ste napísali správne jeho názov. Po skompilovaní Hello.java súboru, by ste mali mať v tom istom adresári aj Hello.class súbor. Teraz sme pripravení, distribuovať applet po webe. Aby sme to mohli urobiť, musíme vytvoriť HTML stránku, ktorá zobrazí applet za použitia <APPLET> HTML tagov. Keď web browser interpretuje HTML stránku zaslanú web serverom, tak ju začne hneď dekódovať. Inak povedané, každý tag, ktorý nájde načíta a dekóduje. Ak narazí na <APPLET>, tak ho ignoruje, ak nepozná (nepodporuje) Javu, alebo požiada server o applet, ktorý sa nachádza na mieste, ktoré je zadefinované v <APPLET> tagu. Tu je ukážka, ako by mohol vyzerať <APPLET> tag na HTML stránke: <TITLE>Môj Applet! <APPLET CODEBASE = "http://www.x.com/MyApplet/" CODE = "MojApplet.class" ALT = "Môj Applet" NAME = "MojApplet" WIDTH = "100" HEIGHT = "100" ALIGN = "LEFT" VSPACE = "5" HSPACE = "5"> ... Tu je text, ktorý sa zobrazí, ak browser nepodporuje Javu. Nasledujúca tabuľka vysvetľuje atribúty <APPLET> tagu: Atribút CODE

Opis Špecifikuje meno class súboru, ktorý spúšťa applet.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 38 CODEBASE

Špecifikuje, základný adresár na web serveri, kde sa nachádzajú .class súbory.

ALT

Špecifikuje text, ktorý bude zobrazený, ake je browser schopný spúšťať Java applety, ale konkrétne tento applet sa mu nepodarilo spustiť.

NAME

Špecifikuje meno appletu v rámci kontextu HTML a iných appletov, ktoré môžu bežať na tej istej stránke.

WIDTH a HEIGHT

Špecifikuje veľkosť plochy v pixeloch, ktorá je určená pre applet.

ALIGN

Špecifikuje ako bude applet zarovnaný v rámci našej stránky. Môžete použiť nasledujúce hodnoty s týmto atribútom: TOP, BOTTOM, LEFT, RIGHT, TEXTTOP, MIDDLE, ABSMIDDLE, BASELINE, BOTTOM. Sú to štandardné HTML hodnoty, ktoré sa napr. používajú aj pri obrázkoch. Ich presnú definíciu nájdete v príručke o HTML.

VSPACE a HSPACE

Špecifikuje, aký veľký rám v pixeloch má byť okolo appletu.

Applet Tag na príklade Tu je príklad kódu, ktorý môžeme použiť na web stránke na applet Hello, ktorý sme vytvorili. <APPLET WIDTH = "200" HEIGHT = "100" CODE = "Hello.class"> Všimnite si, že sme zadali výšku a šírku appletu. Na to aby sa applet zobrazil musíme zadefinovať jeho rozmery. V prípade, že nechceme, aby sa applet spustil, alebo v prípade, že applet hneď po spustení beží v samostatnom okne, zadáme veľkosť 0. <APPLET WIDTH = "0" HEIGHT = "0" CODE = "HelloAwtApplet.class"> V bežných prípadoch budeme chcieť, aby sa applet zobrazil. V tom našom, chceme, aby mal veľkosť 200 x 100 pixelov. Tu je celý kód HTML stránky, ktorú môžeme použiť na zobrazenie nášho appletu: <TITLE>Hello Hello applet sa zobrazí tu:

<APPLET WIDTH = "200" HEIGHT = "100" CODE = "Hello.class">

Applet Viewer

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 39

Okrem web browsera, akým je napr. Internet Explorer, si applety môžeme spúšťať aj cez "appletviewer" program, ktorý je súčasťou JDK. V príkazovom riadku stačí napísať: appletviewer hello.html Všimnite si, že spúšťame HTML súbor a nie samotný applet. Appletviewer hľadá v súbore cestu k appletu a keď ju nájde, tak spustí applet. Všetok ostatný HTML kód okolo appletu bude ignorovať.

Parametre appletu Existuje ešte jeden veľmi dobrý trik, ktorý sa dá použiť s HTML. Povedzme, že chceme applet Hello využiť globálnejšie. Teda, že applet nebude zobrazovať len frázu Hello Cyberspace. Ale bude schopný zobraziť frázu, ktorú mu zadá tvorca HTML kódu. Aby sme to dosiahli, budeme musieť trochu zmeniť náš applet, aby zobrazoval text zadefinovaný v HTML, namiesto pevne zadefinovaného textu v samotnom applete. Parametre pre applet sa zadávajú definovaním medzi začiatočným a koncovým applet tagom. Tu je príklad, v ktorom HTML dáva appletu dva parametre: <APPLET WIDTH = "200" HEIGHT = "100" CODE = "Hello.class"> Prvý parameter má názov "text" a hodnotu "Prajem Vám pekný deň". Druhý parameter má názov "rychlost" a hodnotu "pomaly". V applete môžeme pristúpiť k parametrom cez getParameter() metódu. Táto metóda je súčasťou Applet triedy. Tu je modifikovaná init() metóda nášho appletu, ktorá berie hodnoty z parametrov definovaných v HTML kóde. V tomto prípade hľadá parameter text a jeho hodnotu posúva ďalej Text constructoru. public void init() { String text = null; try { text = getParameter("text"); } catch (Exception e) {} if (text == null) text = ""; setLayout(new BorderLayout()); add(new Text(text), "Center"); }

Obmedzenia appletu Keďže applety bežia v rámci web browserov, existujú určité obmedzenia. Tú sú základné obmedzenia appletov: · Applet nemôže spúšťať súbory, ani zapisovať do súborov na lokálnom počítači. · Applet nemôže komunikovať s inými počítačmi okrem toho, na ktorom beží. · Applet nemôže pristupovať k samotnému systémovému kódu. Toto sú základné obmedzenia, s ktorými applety pracujú. Existujú samozrejme spôsoby, ako sa dajú tieto obmedzenia obísť, ale ak tvoríte bežný applet, tak to nebude potrebné. hore

Siedma kapitola Úvod Po dokončení kódu appletu, ďalším krokom vo vývoji bude rozhodnutie sa, ako poskytnúť program web browserom na sieti. V predchádzajúcej kapitole sme si to ukázali na príklade. Napísali sme applet, skompilovali sme ho a vytvorili html stránku. Takto sme applet pripravili na uvdenie do siete. Má to však jeden háčik. Tento spôsob je reálny, len pri appletoch "príkladoch". Nie je reálnym pre ozajstné aplikácie. Namiesto umiestnenia samotných class súborov na sieť, je pravdepodobné, že ako budú rásť applety, tak vzrastie aj potreba použitia jednej z technológií na distribúciu, ktoré sú dostupné pre Java vývojárov. To, že umiestnenie samotných class súborov bude fungovať, neznamená že, to bude efektívny spôsob distribuovania appletu.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 40

Určite poznáte tzv. Internet bottlenecky, čiže miesta, kde je malá pripustnosť liniek. Ak ste surfovali po Internete a skúšali si rôzne applety, tak určite viete o čom hovorím. Napriek tomu, že backbony Internetu prenášajú obrovské množstvá dát závratnými rýchlosťami, väčšina surferov pristupuje k Internetu pomocou modemov. A to je veľmi pomalé spojenie. V skutočnosti je to tak pomalé, že ak sa bude applet sťahovať veľmi dlho, tak potencionálni klienti radšej pôjdú niekam inam, akoby sa mali niekoľko minút pozerať na sivé okno. A vaše vynaložené úsilie bude zbytočné. Môžno by sme sa mali zastaviť a povedať aké pomalé je pomalé spojenie. Povedzme, že priemerný surfer na vašich stánkach používa 14.4 modem. Je zrejmé, že to nie je typická rýchlosť priemerného web vývojára, ale veľmi realistická pre väčšinu obyčajných surferov. A ešte ňou najmenej dva roky zostane. S 14.4 modemom, môžu surferi očakávať, že stiahnutie 1 kb bude trvať 1 sekundu. Z toho vyplýva, že na stiahnutie appletu o veľkosti 60 kb, budú potrebovať 1 minútu. Čo je ale horšie, musíme k tomu ešte pripočítať čas, ktorý bude potrebovať ich browser na spustenie virtual machine a na spustenie appletu. Väčšina ľudí má trpezlivosť okolo 5 sekúnd. Už viete o čom hovorím? Java tradične rieši bottlenecky tým, že sa snaží byť veľmi malým jazykom. Ďalej, vývoje v JDK sú postupne zakomponovávané do hlavných web browserov, takže väčšina tried, ktoré bude váš applet potrebovať, budú rezidentné na strane klienta. Až do nedávna tu neboli spôsoby, ako adresovať veľkosti appletov a ich tried, ktoré používali. Naštasie, posledné výskumy a pokroky v archivácii a kompresii, umožnili vývojárom spraviť ich obrovské applety "priateľské pre modemy".

Tri situácie Počkať! Je naozaj lepšie používať jednu z týchto nových technológií na distribúciu obrovských aplikácií? Nie je jednoduché odpovedať na túto otázku, lebo to závisí od špecifík vašej situácie. Uveďme si tri možné situácie: Ťažká váha Povedzme, že máte obrovskú aplikáciu s množstvom tried. Bežný užívateľ, ale pri svojej práci bude potrebovať, len určité časti aplikácie a nevyužije všetky ponúkané funkcie pri jednom použití. Preto, všetko čo užívateľ nebude potrebovať, je len zbytočná "ťažká váha" pri exekúcii aplikácie. Takže v takejto situácii, archiváciou budete nútiť uživateľa, aby si stiahol aj to čo nebude potrebovať. A keď to ešte zkomprimujete, môže sa čas ešte viac predĺžiť, lebo potom bude treba dekomprimovať zase aj nepotrebné triedy. Vidíme, že v tomto prípade archivácia a dokonca ani komprimovaná archivácia nie je tým dobrým riešením. Spúšťacie tlačítko a ukazovč progresu sťahovania Zase si predstavme, že máme veľký applet a surferi odchádzajú z našich stránok len preto, lebo trvá strašne dlho kým sa applet stiahne. Myslíte si, že dobrým nápadom, by bolo umiestniť nejaké jednoduché tlačítko, ktoré by sa hneď zobrazilo a po jeho stlačení by sa objavil ukazovaťeľ progresu sťahovania. Ten by ukazoval postupne v percentách počet už stiahnutých tried. Ak to chcete naozaj použiť, budete musieť do svojho kódu zakomponovať niečo podobné: try { Class C = Class.forName("mojaTrieda1"); thinButton.setLabel("Loading...20%"); thinButton.repaint(); C = Class.forName("mojaTrieda2"); thinButton.setLabel("Loading...40%"); thinButton.repaint(); C = Class.forName("mojaTrieda3"); thinButton.setLabel("Loading...60%"); thinButton.repaint(); C = Class.forName("mojaTrieda4"); thinButton.setLabel("Loading...80%"); thinButton.repaint(); } catch (ClassNotFoundException e) { System.out.println("Class not found exception"); }

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 41

Jednoduché tlačítko vyrieši problém dlhého sťahovania a ukazovateľ progresu bude dobrým psychologickým ťahom. Ale zase to nebudé dobré riešenie, ak to bude archív. Tlačítko sa nám zobrazí, až vtedy, keď už bude celý archív stiahnutý a sme zase tam, kde sme nechceli byť. Web server si mädlí ruky Jedinou "oficiálnou" výhodou archívov je, že web browser musí urobiť len jeden HTTP request, aby mohol stiahnúť applet. Toto chráni browser pred potrebou robiť nové HTTP spojenia pre každú triedu, obrázok, alebo iný dátový súbor, ktorý je potrebný na fungovanie appletu. Ak máte tucet súborov vo vašom applete, tak archívom ušetríte až 11 HTTP spojení. Wow to je až 11 krát rýchlejšie. No, nie je to celkom tak. Čas potrebný na otvorenie HTTP spojenia je minimálny. A vlastne, čím viac spojení máme otvorených, tým lepšie pre nás. Ak browser používa multi - tasking pri sťahovaní viacerých súborov, tak máme veľkú šancu, že sa nahrajú skôr, ako keby sa nahrával len jeden veľký súbor - archív.

Prečo archív? Načo teda archivovať (okrem iného, ak je možnosť komprimovať)? Hlavné nebezpečie multi-taskingu spočíva v tom, že ak bude mať každý otvorených veľa spojení, tak skončíme s obrovskou zápchou na Internetovej dialnici. Ďalej, s rastom vašich spojení so serverom rastie aj jeho zaneprázdnenosť. Ak dvaja ľudia, sťahujú applet pozostávajúci z 12 súborov ako archív, tak server má dočinenie len s dvomi spojeniami. Ale ak má server poskytnúť applet nearchivovaný, tak vznikne až 24 spojení. A viete si predstaviť ako to začne server spomalovať. Takže, oficiálne by ste mali stále archivovať. Zmyslom archivácie nie je, výkonnostné zlepšenie, ale ohľaduplnosť. Archiváciou si plníte svoju malú úlohu na udržaní rýchlosti Internetu. Tým pádom, ale súhlasíte s určitým spomalením svojej vlastnej práce. Ako ste určite predpokladali, veľmi málo ľudí na sieti toto dodržiava a je ohľaduplných. Aj taký dvaja rivali, ako MS Internet Explorer a Netscape Navigator sa predbiehajú v tom, kto je rýchlejší. V poslednej dobe sme počúvali od oboch strán: "My sme rýchlejší." "Nie, my sme rýchlejší." Ale ako dosahujú svoje rýchlosti? Robením nespočetného množstva spojení. Takže rýchlosť, ale za akú cenu? A ako sa dá profitovať s množstva otvorených spojení? Asi takto: Pretože, 12 spojení na stiahnutie jedného appletu zdržiava server, tak ten im pridelí vyšiu prioritu ako spojeniu, pri ktorom sa sťahuje jeden súbor. Čo má teda web dizajner robiť? Zo sebeckej perspektívy, je výhodnejšie použiť multi-tasking. Dizajnér sa musí spýtať: "Prečo by som mal byť ohľaduplný voči iným a tým pádom byť menej konkurencie schopný?" Ohľaduplnosť a morálka zostávajú len na vás. Napriek tomu by som vám odporučil, aby ste sa zamysleli nad vyťaženosťou serveru, ktorý používate. Ak je váš applet umiestnený na vašom servery, ktorý nie je až tak vyťažený, kľudne použite multi-tasking a dajte mu nejakú prácu. Ale ak používate verejný server, myslite aj na ostatných užívateľov. Tiež si spočítajte množstvo ušetreného času pri multi-taskingu. Je jasné, že archiváciou troch súborov nijako výrazne nepomôžete serveru. Posledné slovo Ako je vidieť, rozhodnúť sa ako distribuovať applet, je z dizajnérskeho hľadiska poriadne ťažké. Bez ohľadu na to, aké je vaše rozhodnutie, na distribúciu treba niekoľko nástrojov. Táto kapitola vám povie niečo viac o dostupných technológiach, aby ste mohli efektívne distribuovať svoje applety.

.zip, .cab a .jar História distribúcie Ako sme už hovorili, v počiatkoch vývoja v Jave, neexistovali prakticky žiadne archivácie. Vo väčšine prípadov, musel vývojár umiestniť každý class súbor, ako samostatný súbor na web server v rovnakej hierarchii ako sú definované balíky (packages) vašich Java súborov. Napríklad, ak ste mali com.test.utility balík, potrebovali ste adrsárovú hierarchiu com/test/utility v adresári, kde sa nachádzal hlavný class súbor. Nanešťastie to znamenalo, že browser musel vytvoriť vždy nové HTTP spojenie pre každý súbor. Keď vezmeme do úvahy vyťaženosť servera, priepustnosť siete a internetových škriatkov :), tak prídeme k tomu, že to mohlo viesť k značnému spomaleniu. A treba dodať, že súbory, neboli nijako komprimované. Archivovanie appletov formátom ZIP od Netscape Iniciatívy sa ujal Netscape, ktorý umožnil vývojárom umiestniť do jedného nekomprimovaného súboru všetky class súbory spolu s podpornými súbormi ako sú obrázky, zvuky a iné dáta. Napriek tomu, že súbory neboli komprimované, bol to veľký skok v distribúcii Java appletov. Každému, kto používal Netscape Navigator, stačilo stiahnuť len jeden .zip súbor. Preto väčšina vývojárov umiestňovala spolu so samotnými súbormi aj jeden .zip súbor, v ktorom boli zbalené. To umožnilo užívatelom Netscape Navigatoru, stiahnutie rýchlejšieho ZIP súboru a užívateľom iných broserov, možnosť stiahnúť applet klasickou cestou. <TITLE>Môj Applet <APPLET CODE = "mojApplet.class" WIDTH = "200" HEIGHT = "400" ARCHIVE = "mojApplet.zip">

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 42

Kompresia archívov formátom CAB od Microsoftu Šliapuc na päty Netscapu, Microsoft rýchlo uviedol CAB formát, aby vyrovnal skóre a ako to máva vo zvyku, aby urobil veci ešte zložitejšie pre vývojárov. CAB súbory kopírovali podobnú logiku ako mali ZIP súbory Netscape. Vývojár mohol archivoať svoj applet do jediného súboru a pomocou parametru CABBASE mohol navigovať Internet Explorer k stiahnutiu appletu. HTML kód vyzeral asi takto: <TITLE>Môj Applet <APPLET CODE = "mojApplet.class" WIDTH = "200" HEIGHT = "400"> CAB súbory mali jednu výhodu. Internet Explorer podporoval aj komprimovanú podobu CAB archívu. To malo nesmierny prínos pri sťahovaní veľkých appletov, lebo veľke súbory mohli byť skomprimované do menších. Ale, ako som už spomínal, znamenalo to viac problémov pre toho, kto chcel publikovať svoj applet. Po prvé, musel na server umiestniť len samotné súbory (pre používateľov menej rozšírených browserov ako Hot Java). Po druhé, musel umiestniť Zip súbor pre používateľov Netscape Navigatoru. A nakoniec, po tretie, musel pre používateľov Internet Exploreru umiestniť aj súbor CAB. Podpisovanie archívov formátom JAR od Netscape Aby sme tak rýchlo neskončili boj o prvenstvo na webe, tak Netscape a Sun sa dali dokopy a vytvorili JAR (Java ARchive) formát. Distribuovaný ako súčasť JDK 1.1, JAR je platformovo nezávislý formát (založený na ZIP formáte), ktorý umožňuje vývojárom zabaliť a skomprimovať applet a všetky jeho podporné súbory (class súbory, obrázky, ...) do jedného súboru. Ďalej, JAR umožnil autorom appletov, digitálne sa podpísať a tým zabezpečiť autentifikáciu pôvodu appletu. Vytvárať a manipulovať s JAR súbormi môžete cez jar utilitu, ktorá poskytuje príkazy podobné populárnym UNIXovým tar príkazom. Odkaz v HTML na JAR súbor bude vyzerať nasledovne. <TITLE>Môj Applet <APPLET CODE = "mojApplet.class" WIDTH = "200" HEIGHT = "400" ARCHIVE = "mojApplet.jar">

Príprava appletu pre web Momentálne je distribúcia veľmi nepohodlná pre vývojárov. Na podporu Internet Exploreru je najlepšie vytvárať CAB súbory. Napriek tomu, že nové verzie Internet Exploreru už podporujú aj JAR súbory, predsa len CAB súbory podporuje viac verzií Explorerov. A ak si ich chceme podpísať, je lepšie použiť CAB súbor. Na podporu najnovších browserov od Netscape a Sun, by ste mali použiť JAR formát. Na podporu starších verzií Netscape Navigatoru musíte priložiť aj ZIP formát. Nakoniec, treba nechať applet tak ako je vytvorený (čiže nekomprimovať ho), aby ho vedeli nájsť aj rôzne málo rozšírené browsery. A ako sa vlastne vytvárajú všetky tieto formáty. V ďalšej kapitole si o tom povieme. hore

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 43

Ôsma kapitola Tvorba .zip archívu Ako prvý archív, ktorý budete asi chcieť vytvoriť, bude ZIP archív - najstarší a najviac podporovaný zo všetkých spomenutých druhov. To je aj dôvod (mýslím to, že je tak rozšírený), prečo nebude zložité nájsť nejaký prgram na tvorbu tohoto archívu. A to pre hociktorú platformu. Treba si len dávať pozor, aby podporoval súbory s dlhými názvami lebo v Jave sa často používajú dlhé pomenovania. Doporučujem populárny shareware produkt WinZip 95, ktorý je možné nájsť na www.jumbo.com. Inak, všetky podobné utility, by mali mať podobný interface a možnosti, takže aj keď nepoužívate Windows, mali by ste z nasledujúcich riadkov získať predstavu o tom ako sa tvorí archív. Prvým krokom je, zozbierať všetky triedy a podporné súbory pre spustenie appletu do stromovej štruktúry, tak ako je to zadefinované v kóde appletu. Nemal by to byť problém, lebo vlastne vytvoríte len zrkadlovú kópiu štruktúry disku, kde máte umiestnené všetky dôležité súbory určené na kompiláciu. Po príprave súborov, by ste mali pretiahnúť najvyšie položený adresár do WinZipu. Tak isto môžete použiť pravé tlačítko myši a vo Windows Exploreri kliknúť na najvyšie položený adresár a z ponúknutého menu vybrať "Add to Zip". Po označení adresára, ktorý chcete skomprimovať sa vám zobrazí "Drag and Drop Dialog", ktorý ponúkne viacero možností archivovania. Väčšinou je samotná komprimácia za pomoci tohoto dialógového okna veľmi jednoduchá, ale pre vaše pohodlie ponúkam krátky popis, ako by mali vyzerať nastavenia. Vyberte si meno archívu a napíšte ho do "Add to Archive" textového poľa. Nastavte kompresiu na "None" pomocou "Compression" výberového poľa. Potom nastavte WinZip aby archivoval všetky súbory, vrátane tých v podadresároch, označením položky "Recursive Folders" v skupine "Folders". Keď máte všetko nastavené, stlačte "Add" tlačítko a nechajte urobiť WinZip svoje kúzlo. Behom krátkeho času, WinZip dokončí archiváciu vášho appletu. Skontrolujte si, či rekurzívne ukladá štruktúru adresárov. Ale to ešte nie je koniec. V archíve sú zbytočné súbory, ako .html, .java a podobne. Tie tam vôbec nemusia byť. Veď browser potrebuje .class súbory a obrázky. Preto posledným krokom bude odstránenie týchto súborov za pomoci "Actions | Delete" výberu z ponuky menu WinZipu. Po zmazaní zbytočných súborov, môžete uploadnúť archív na server a pomocou ARCHIVE atribútu ho sprístupniť verejnosti. <APPLET CODE = "MojApplet.class" ARCHIVE = "MojApplet.zip" WIDTH = "140" HEIGHT = "140"> Všimnite si, že aj napriek tomu, že hlavný class súbor je obsiahnutý v archíve, musíte naň upozorniť za pomoci CODE atribútu. Veď predsa browser musí vedieť kde má začať. A pri browseroch, ktoré nepodporujú ZIP archívy je to o to dôležitejšie.

Tvorba .cab súboru Po vytvorení ZIP archívu môžeme prejsť k vytváraniu CAB (CABinet) archívu, ktorý bude určený pre používateľov Microsoft Internet Exploreru. Vytváranie CAB archívu nie je až také pohodlné, ako vytváranie ZIP archívu a to z dôvodu, že neexistuje žiadne grafické rozhranie podobné WinZipu pre CAB. Namiesto toho treba použiť príkazový riadok CABARCu. CABARC je kompresno / archivovací program distribuovaný spolu s Microsoft SDK a nájdete ho buď v adresári "bin" alebo "bin/packsign" hlavného adresára SDK. CABARC používa nasledujúci formát: CABARC [options] command cabfile [@list] [files] [dest_dir] Options a commands sú zosumarizované v nasledujúcej tabuľke: Parameter

command

L

používa sa na vypísanie obsahu cabinetu

N

používa sa na vytvorenie cabinet súboru

X

používa sa na vyňatie súboru(ov) z CAB archívu options

-c

potvrdzuje súbory, ktoré budú vykonané

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 44 -o

prepíše (overwrites) bez upozornenia pri extrakcii

-m

nastavuje aký typ kompresie sa použije LZX:<15..21>, MSZIP, alebo NONE. Štandardná hodnota je MSZIP

-p

používa sa na zachovanie cesty súborov

-P

používa sa na odstránenie určitého prefixu keď sa pridáva súbor do archívu

-r

používa sa na prechod do podadresárov, keď sa pridáva súbor do archívu

-s

rezervuje v cabinete pristor na podpis. Napríklad -s 6144 rezervuje 6k

-I

používa sa na zadanie ID cabinetu. Štandardná hodnota je 0

CABINET Commands Ako vidíte, existuje viacero príkazov (commands) podporovaných CABARCom. Môžete zobrazovať, pridávať a vynímať súbory z archívu. Pretože najviac nás zujíma vytváranie CAB archívov, v prvom rade budeme používať "N" command. Napríklad, nasledujúci príkaz, by vytvoril CAB archív s názvom "MojApplet.cab", ktorý by obsahoval všetky súbory z daného adresára. cabarc N MojApplet.cab *class CABARC nám umožňuje zobraziť svoj obsah za pomoci príkazu "L". cabarc L MojApplet.cab *class Príkaz "L" zobrazí informáciu o veľkosti každého súboru v archíve, dátum a čas kedy bol súbor pridaný do archívu, ako aj jeho atribúty. CABARC nám umožňuje odoberať z archívu jednotlivé súbory za pomoci príkazu "X". Tak napríklad na vyňatie súboru SupportClass.class z archívu, ktorý sme si vyšie vytvorili, by sme použili nasledujúci príkaz: cabarc X MojApplet.cab SupportClass.class Všimnite si, že pri vynímaní súborov, štandardné správanie CABARCu je dotaz o pre-písaní súborov, ak majú rovnaké meno, ako tie, ktoré sú vynímané. CABINET Options Určite budete aplikovať aj možnosti pri vykonávaní príkazov v CABARCu. Za príklad si zoberme MojApplet program, ktorý sme používali v tejto kapitole. MojApplet obsahuje viacero súborov a podadresárov. Ak by sme použili príkaz "N", ako sme si to vyšie ukázali, nedosiahli by sme archiváciu všetkých potrebných komponentov. Museli by sme každý adresár a súbor pridávať samostatne. Našťastie CABARC obsahuje možnosť -r, ktorá zabezpečí ukladanie do archívu v stromovej štuktúre, v akej sa súbory nachádzajú na hardisku. Na vytvorenie funkčného archívu teda použijeme nasledovný príkaz: cabarc -r N MojApplet.cab * Možnosť -r nám do archívu pridá všetky súbory. Ale mi chceme, aby sa pridali len tie, ktoré naozaj potrebujeme. Teda nie súbory s koncovkou *.java, *.txt, *.html a podobne. Ide nám o to, aby bol CAB súbor čo najmenší. Riešenie je jednduché. Môžeme použiť niečo podobné: cabarc -r N MojApplet.cab *class *.jpg, *.gif V tomto prípade sa do archívu dostanú len súbory s koncovkou, ktorú špecifikujeme.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 45

Odkaz na CABINET Naša práca ešte ale neskončila. Po vytvorení CAB archívu je potrebné umiestniť ho na server a sprístupniť web browserom za pomoci parametra CABBASE. <APPLET CODE = "MojApplet.class" ARCHIVE = "MojApplet.zip" WIDTH = "140" HEIGHT = "140"> V tomto prípade Internet Explorer na základe parametra použije CAB archív.

Tvorba .jar súboru Po vytvorení ZIP A CAB archívov, môžeme prejsť k vytváraniu JAR (Java ARchive) archívom, ktoré sú určené pre používateľov novších verzií Netscape Navigatoru a HotJavy. Vytváranie JAR súborov je veľmi podobné vytváraniu TAR súborov, s ktorým je väčšina UNIXových vývojárov oboznámená. Tak isto ako pri CAB archívoch, neexistuje grafické rozhranie na tvorbu JAR archívov a preto je potrebné použiť príkazový riadok a JAR program dodávaný spolu s JDK 1.1 ovládať cez príkazy. JAR program sa nachádza v "bin" podadresári hlavného adresára JDK (je to tam, kde sa nachádza aj javac a appletviewer). JAR používa nasledujúci formát: jar [command][options] jarfile [manifest file] [files]

Parameter

command

t

používa sa na vypísanie obsahu JAR súboru

c

používa sa na vytvorenie JAR súboru

x

používa sa na vyňatie súboru(ov) z JAR archívu

v

generuje podrobný výpis chýb

f

špecifikuje názov archívu

m

používa sa na vloženie manifestu z manifestového súboru

O

používa sa len na uloženie. Nie je použitá kompresia a súbor môže býť zapísaný aj v CLASSPATH

M

špecifikuje, aby sa nevytvoril manifest súbor

Vytváranie JAR súboru Na vytvorenie JAR súboru použite základnú formu: jar cvf JARNÁZOVSÚBORU zoznamsúborov Príkaz "c" hovorí JAR programu, že vytvárame JAR archív, "v" mu prikazuje vytvorenie záznamu o tom, ako postupoval pri tvorbe archívu a všetkých chybách, ktoré sa vyskytli a nakoniec "f" príkaz bude informovať JAR program o tom, že špecifikujeme názov JAR archívu. Narozdiel od CABARCu, JAR pridá všetky súbory v ich pôvodnej stromovej štruktúre. JAR má podobne ako CABARC, problém s pridávaním veľkého množstva súborov do archívu, ale na rozdiel od CABARCu, tu neexistuje jednoduchý spôsob, ako určiť, ktoré súbory sa nemajú pridať. Preto, na vylúčenie nepotrebných súborov, musíme zadať veľmi podrobné informácie v príkaze: jar cvf MojApplet.jar *.class Images/*.jpg Images/*.gif Utility/*.class Vypísanie zoznamu súborov v a vyňatie súborv z JAR súboru

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 46

Na vypísanie obsahu JAR súboru sa použije namiesto "c" príkazu "t" príkaz. Ako príklad si môžeme uviesť výpis súborov, ktoré sme pridali do archívu v predchádzjúcich odstavcoch: jar tvf MojApplet.jar Veľmi podobne, za pomoci "x" príkazu, sa dajú vybrať všetky súbory z archívu, ktorý sme vytvorili vyššie: jar xvf MojApplet.jar JAR manifest Manifest súbor je zoznam súborov v rámci archívu, ktoré majú byť podpísané. Viac informácií o manifestoch nájdete na stránkach www.javasoft.com Distribúcia JAR archívov Po vytvorení JAR súboru, už stačí len umiestniť ho na web server a ukázať k nemu cestu pomocou atribútu ARCHIVE. <APPLET CODE = "MojApplet.class" ARCHIVE = "prvyProgram.jar" WIDTH = "x" HEIGHT = "y"> Jedným zaujímavým trikom je, že môžete napísať viacej *.jar súborov oddelených čiarkou: <APPET CODE = "MojApplet.class" ARCHIVE = "classes.jar, graphics.jar" WIDTH = "x" HEIGHT = "y"> Tak ako pri CAB a ZIP archívoch, aj pri JAR archívoch atribút CODE musí byť zadaný. hore

Deviata kapitola Použite AWT balíka na stavbu GUI Teraz urobíme veľký skok: prejdeme od jednoduchej aplikácie k zložitejšej, ktorá sa bude podobať na tie, ktoré budete písať v reálnom živote. Poslúži nám na to balík AWT tried, ktorý je distribuovaný spolu s JDK. Ako bolo napísané v jendnom článku "Web Programming 101", obrovskou výhodou používania Javy je, že ponúka možnosť vytvárať web-based grafické rozhranie (GUI). GUI (Graphical User Interface) je jednou z najkrajších vecí dnešného programovania. Namiesto nútenia užívateľa, aby musel pracovať s neinteraktívnym príkazovým riakom, ako je to na obrázku dole, máme možnosť ponúknuť mu rozhranie, ktoré sa jednoducho ovláda a je podobné tomu, ktoré bolo prvýkrát predstavené na počítačoch Macintosh a neskôr bolo prebraté aj Microsoftom. GUI robí používanie počítačov jednoduchým a zábavným.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 47

Zameriame sa na používanie AWT balíka, ktorý nám umožní tvoriť GUI. Predtým než začneme, budeme musieť pochopiť, ako získať požadovanú funkčnosť z daných knižníc AWT. Nebudeme si tu rozoberať všetky metódy, polia a konštruktory všetkých java objektov lebo to by bolo na npísanie celej knihy. Našťastie nie je vôbec potrebné kupovať si nejakú knihu, aby sme sa naučili všetko o java user-interface dizajne. Jediné čo potrebujeme, je vedieť ako používať on-line API príručku, ktorá je generovaná utilitou javadoc. Predpokladajme, že ste si stiahli dokumetáciu, keď ste si sťahovali JDK. Ak ste tak neurobili, dokumentáciu si môžete stiahnúť z Javasoftu. Nás bude zaujímať hlavne java AWT balík, pretože v ňom nájdeme väčšinu tried, o ktorých bude reč v tomto tutoriale. On-line dokumetácia obsahuje všetky informácie potrebné na postavenie uživateľského rozhrania. Špeciálne sa zaoberá verejným API, ktoré budeme používať. Poďme sa napríklad pozrieť na dokumetáciu o AWT button objekte.

Ukážka hierarchie Inheritance Každá trieda začína sekciou popisujúcou jej hierarchiu Inheritance. Hierarchia nám ukazuje, z ktorej triedy pochádza nami skúmaná trieda. Názorne to vidieť napr. na Button inheritance diagrame. Je vidieť, že je rozšírením Componentu a Objectu. java.lang.Object | +----java.awt.Component | +----java.awt.Button Výhoda toho, že poznáme hierarchiu inheritance spočíva v tom, že ak požadujeme určitú funkčnosť a tá sa práve nenachádza v triede, ktorú sledujeme, tak vieme, kde máme hľadať. Uvediem príklad. Predpokladajme, že chceme zmeniť farbu tlačítka (button). Veľmi rýchlo zistíme, že neexistuje metóda na zmenu farby v triede Button. Ale my predsa vieme, že farba sa musí dať zmeniť lebo na webe sme videli tlačítka rôznych farieb. Pozrieme sa teda na hierarchiu a zistíme, že Button môže zdediť (inherit) "chameleónske" vlastnosti od Componentu.

Konštruktory Ďalšou zaujímavou sekciou v online dokumentácii je Constructor Index. Constructor Index načrtáva možný constructor, ktorý sa dá použiť na vytvorenie požadovaného objektu. V prípade Buttonu, môžete vidieť, že má dva constructory (ak kliknete na konštruktor, tak získate detailné informácie o ňom). · Button() ktorý vytvorí button · Button(String) ktorý vytvorí button so zvoleným popisom Takže viete, že môžete vo svojom kóde použiť nasledujúcu syntax na vytvorenie tlačítka: Button b = new Button(); alebo

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 48

Button b = new Button("Klikni na mňa"); Metódy Dozviete sa tiež o mnohých metódach, ktoré môžete použiť na manipuláciu objektu. Všetky verejné metódy sú dostupné cez bodkový zápis a parametre, ktoré sa im posielajú sú tiež zobrazené. Viete napríklad, že ak použijete setLable() metódu, tak je musíte zadať nejaký reťazec ako parameter. Všimnite si, že ak klinete na nejakú metódu tak sa zobrazí jej detailný popis spolu s typom hodnoty, ktorú vracia.

Ukážka použitia on-line dokumentácie Ako by sme použili button v aplikácii? Presne tak, ako sme to urobili s Announcer triedou, použili by sme "new" kľúcové slovo na vytvorenie Buttonu a potom by sme použili bodkový zápis na ovplyvnenie jeho stavu. Napríklad: Button myButton = new Button(); myButton.setLabel("My Button"); Uvažujme o komplexnejšom príklade, v ktorom umiestnime tlačidlo do rámiku. Použijeme konštruktor na zobrazenie bieleho textu "Hello Cyberspace" na čiernom podklade za použitia metód zdedených z Conponetu. Všimnite si prvý riadok. Základom je import awt balíka, aby java vedela, kde má hľadať button triedu. Tiež si všimnite, že používame bodkový zápis na referenciu farby v Color triede. Import sa dá vynechať a potom treba použiť zápis s absolútnou cestou: java.awt.Button myButton = new java.awt.Buttton(); Imort nám ale ušetrí veľa písania lebo je to akási skratka. import java.awt.*; public class TestFrame { public static void main(String[] args) { Frame f = new Frame(); f.reshape(10,10,200,200); Button b = new Button("Hello Cyberspace"); b.setBackground(Color.black); b.setForeground(Color.white); f.add(b); f.show(); } } hore

Desiata kapitola Komponenty Väčšina moderných rozhraní je založená na koncepte komponentov, ktoré plnia úlohu "vecičky", ktorá vykonáva určitú funkciu v uživateľskom prostredí. S komponentami by ste mali byť veľmi dobre oboznamení, ak ste pracovali s počítačom, ktorý vznikol po polovici osemdesiatych rokov. Bežné komponenty zahŕňajú Button, SrollBar, MenuBar, atď., ktoré sú základom GUI (Graphical User Interface), ktoré bežne používate. JDK ponúka dostatok rozmanitých sád komponentov, ktoré sú už hotové a dajú sa jednoducho používať. Ako pomocka poslúži online dokumentácia. Všetky tieto komponenty vychádzajú zo základnej abstraktnej triedy java.awt.Component. Abstraktnej preto lebo nemá zmysel instantiate (vytvárať) Component objekt. Namiesto toho sa rozšíri trieda Component tak, aby vznikol funkčný komponent. Trieda Component je tzv. "použiteľný" Component, ktorý obsahuje všetky metódy, ktoré by mal bežný komponent obsahovať. Možnože príklad pomože pochopiť problematiku abstraktnej triedy. Môžete si

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 49 predstaviť cicavca ako abstraktnú triedu a psa ako rozšírenú (extended) triedu z cicavca. Je zrejmé, že sa dá vytvoriť objekt pes a že objekt cicavec je nemožné vytvoriť. Nakoniec, veď neexistuje žiadne zviera, ktoré by bolo "len" cicavcom. Existuje jedine "druh" cicavca.

Špeciálne, Component class definuje také veci ako zarovnanie, farbu pozadia a popredia, fonty, veľkosť, pozíciu atď. Mali by ste si preštudovať online dokumentáciu pre podrobný zoznam metód a polí, aj keď na nasledujúcich stránkach sa pokúsim priblížiť najdôležitejšie z nich na príkladoch. Poďme sa pozrieť na najbežnejšie komponenty, ktoré nám ponúka JDK.

Lable ako statický text Lable class umožňuje vypísať jeden riadok textu v našej aplikácii. Nie je k tomu viac čo dodať. Pozrite si nasledujúci príklad: Vo všetkých nasledujúcich príkladoch budeme používať add() metódu na pridanie komonentov do Frame objektu, aby sa nám zobrazili na monitore. O Frame a add() si povieme niečo hneď v ďalšej časti, takže nemajte obavy zo špecifík baseFrame a add(), namiesto toho si všímaje ako sa v rámci nich komponenty používajú. import java.awt.*; public class LabelExample { public static void main(String[] args) { Frame baseFrame = new Frame(); baseFrame.setLayout(new GridLayout(3,1)); baseFrame.reshape(10,10,200,200); baseFrame.setTitle("Label Example"); Label labelLeft = new Label("Hello Cyberspace!"); labelLeft.setForeground(Color.white); labelLeft.setBackground(Color.black); Label labelRight = new Label("Hello Cyberspace!", Label.RIGHT); labelRight.setFont(new Font("Helvetica", Font.BOLD, 15)); Label labelCenter = new Label("Hello Cyberspace!", Label.CENTER); baseFrame.add(labelLeft); baseFrame.add(labelRight); baseFrame.add(labelCenter); baseFrame.show(); } } Ukážkový kód vedie k tomuto výsledku:

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 50

Komponenty pre vstup textu JDK ponúka TextField a TextArea komponenty, ktoré slúžia na vstup text od užívateľa. Sú odvodené z TextComponentu, takže ak chcete zistiť ďalšie metódy, ktoré by tu zjavne mali byť, skontolujte si TextComponent v dokumentácii. import java.awt.*; public class TextEntryExample { public static void main(String[] args) { Frame baseFrame = new Frame(); baseFrame.setLayout(new GridLayout(2,1)); baseFrame.reshape(10,10,200,200); baseFrame.setTitle("Label Example"); TextField myTextField = new TextField(); myTextField.setText("Here is some " + "default and selected text"); myTextField.setSelectionStart(0); myTextField.setSelectionEnd(4); myTextField.setEditable(false); TextArea myTextArea = new TextArea ("The Text Area widget \n" + "allows multiple line text entry." + "it is also worth \n noting that it " + "will dynamically create scroll " + "bars \n if the text goes beyond the " + "boundaries of the widget"); baseFrame.add(myTextField); baseFrame.add(myTextArea); baseFrame.show(); } } Po skompilovaní dostávame nasledujúci výsledok:

Check Boxy a Check Box skupiny

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 51

Check Box a Check Box skupiny sú dôverne známe komponenty, ktoré dávajú uživateľovi možnosť výberu z viacerých možností. Check Box ponúka možnosť vybrať si alebo nevybrať si danú možnosť. Check Box skupina slúži vývojarom na to, aby mohli zoskupiť viacero Check Boxov do skupiny a vybrať sa z nich dá len jeden. V nasledujúcom príklade sme použili ako samostatné CheckBoxy, tak aj ich skupiny. Všimnite si, že samostatné CheckBoxy sa dajú označiť obidva, ale v skupine sa dá vybrať len jeden. import java.awt.*; public class CheckExample { public static void main(String[] args) { Frame baseFrame = new Frame(); baseFrame.setLayout(new GridLayout(4,1)); baseFrame.reshape(10,10,200,200); baseFrame.setTitle("Check Example"); Checkbox jdkChoice = new Checkbox("JDK"); Checkbox afcChoice = new Checkbox("AFC"); CheckboxGroup sexGroup = new CheckboxGroup(); Checkbox maleChoice = new Checkbox("male", sexGroup, false); Checkbox femaleChoice = new Checkbox("Female", sexGroup, false); baseFrame.add(jdkChoice); baseFrame.add(afcChoice); baseFrame.add(maleChoice); baseFrame.add(femaleChoice); baseFrame.show(); } }

Možnosti Jedným z problémov Check Boxov a Check Box skupín je, že zaberajú veľa miesta. Ak ponúkame na výber veľa možností, možno bude lepšie použiť Choice Control. import java.awt.*; public class ChoiceExample {

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 52

public static void main(String[] args) { Frame baseFrame = new Frame(); baseFrame.setLayout(new GridLayout(4,1)); baseFrame.reshape(10,10,200,200); baseFrame.setTitle("Choice Example"); Choice choice = new Choice(); choice.addItem("Selena"); choice.addItem("Eric"); choice.addItem("Mark"); baseFrame.add(choice); baseFrame.show(); } }

Listy Choice Control má jednu nevýhodu. Vždy je vidieť len vybranú možnosť. V prípade, že chceme, aby bolo vidieť viac možností, teda aj tie, ktoré nie sú vybrané stačí použiť List komponent. import java.awt.*; public class ListExample { public static void main(String[] args) { Frame baseFrame = new Frame(); baseFrame.reshape(10,10,200,200); baseFrame.setTitle("List Example"); List list = new List(3, true); list.addItem("Selena"); list.addItem("Eric"); list.addItem("Mark"); list.addItem("Bob Frog"); baseFrame.add(list); baseFrame.show(); } }

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 53

Menu a Menu Bars Menu umožňuje organizovať podobné funkcie aplikácie do jedného, veľmi ľahko ovládateľného centralizovaného objektu. Existuje viacero druhov Menu, ale najznámejším je typ MenuBar. MenuBars sa dnes nachádzajú takmer v každej aplikácii a umožňujú jednoduchý prístup k ďalším funkciám aplikácie. Väčšinou sa nachádzajú v hornej časti obrazovky. import java.awt.*; public class MenuExample { public static void main(String[] args) { Frame baseFrame = new Frame(); baseFrame.reshape(10,10,200,200); baseFrame.setTitle("Menu Example"); MenuBar bar = new MenuBar(); Menu fileMenu = new Menu("File"); Menu editMenu = new Menu("Edit"); Menu specialMenu = new Menu("Special"); fileMenu.add(new MenuItem("Open")); fileMenu.add(new MenuItem("Save")); fileMenu.addSeparator(); fileMenu.add(new MenuItem("Exit")); bar.add(fileMenu); bar.add(editMenu); bar.add(specialMenu); baseFrame.setMenuBar(bar); baseFrame.show(); } }

Scrollbars Určite, skôr ako o tom budete vedieť budú uživatelia napĺňať vami napísanú aplikáciu takým množstvom dát, že už nebude postačovať na ich zobrazenie len jedna obrazovka a bude treba použiť nejaké rozumné riešenie.

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24

Introduction to JAVA

Stránka 54

Väčšina programátorov to rieši použitím ScrollBarov. Tie umožňujú posúvať aplikáciu, tak aby bolo možné vidieť aj tie časti, ktoré sa momentálne nezmestili na obrazovku. Ale keďže kódovanie ScrollBarov pesahuje rámec tohto tutoriala, nebudeme sa im venovať. Stačí si pozrieť online dokumentáciu alebo jednu z milióna kníh o programovaní v Jave. Buttons Buttons (tlačidlá) sú najpoužívanejším komponentom v dnešných prostrediach. Stretávame sa s nim v Menu, na ScrollBaroch, rôznych ToolBaroch a mnohých ďalších komponentoch. Je ťažké predstaviť si nejaký interface bez tlačidla. Button trieda definuje štandardné tlačidlo, ktoré má 3D efekty. Po kliknutí myšou sa zatlačí a zase sa vráti do pôvodnej pozícíe. Už sme videli mnoho kódu, ktorý ukazoval ako sa vytvára tlačidlo, takže to nebudeme znovu opakovať. Canvases Canvas trieda pripravuje plochu na to, aby sa dalo na nej kresliť. Bližšie sa o tejto triede dozviete v online dokumentácii. hore

Autor - © Selena Sol Preklad - © europium website © europium web site All rights reserved

file://localhost/C:/DOCUME~1/Luma/LOCALS~1/Temp/Rar$EX00.405/Introduction%20to%20JAVA.html

25. 01. 2006 18:32:24


Related Documents

Introduction To Java
May 2020 10
Introduction To Java
December 2019 25
Introduction To Java
November 2019 23
Introduction To Java
June 2020 18
Java Introduction
May 2020 15