1. díl - Úvod do jazyka Java

Java Základní konstrukce Úvod do jazyka Java

Vítejte u prvního dílu seriálu o Javě. Budeme se učit postupně, od úplných začátků až po složité konstrukce, objektové modely a např. práci s databází. S trochou trpělivosti a vytrvalosti se z tebe tak stane dobrý programátor.

Abychom plně poruzuměli jazyku Java, ohlédněme se do minulosti na to, jak se programovací jazyky vyvíjely. Bude pro nás totiž důležité pochopit, jak Java pracuje a proč je dobré programovat právě v tomto jazyce.

Vývoj programovacích jazyků

1. generace jazyků - Strojový kód

Procesor počítače umí vykonávat jen omezené množství jednoduchých instrukcí, které jsou uloženy jako sekvence bitů, jsou to tedy čísla. Ta se mu obvykle zadávají v hexadecimální (šestnáctkové) soustavě. Instrukce jsou tak elementární, že umožňují pouze např. sčítání adres nebo skoky mezi instrukcemi. Nelze např. jednoduše sečíst dvě čísla, musíme se na čísla dívat jako na adresy v paměti a takové sečtení čísel zabere několik instrukcí. Program sčítající dvě čísla by vypadal např. takto:

2104
1105
3106
7001
0053
FFFE
0000

Instrukce se procesoru předloží v binární podobě. Takovýto kód je samozřejmě extrémně nečitelný a závisí na instrukční sadě daného CPU. Určitě v tomto jazyce nebude jednoduché tvořit nějaké programy, bohužel každý program musí být nakonec do tohoto jazyka přeložen, aby mohl být na procesoru počítače spuštěn.

Strojový kód

2. generace jazyků - Assembler

Assembler (zkráceně ASM) není o nic jednodušší, než strojový kód, ale je lidsky čitelný. Jedná se o strojový kód, ve kterém mají instrukce slovní označení (kód), čili si člověk nemusí pamatovat čísla. Kódy instrukcí se poté přeloží na výše uvedený strojový kód. Stejný program by v ASM vypadal takto:

ORG 100
LDA A
ADD B
STA C
HLT
DEC 83
DEC –2
DEC 0
END

Vidíme, že je to poněkud lidštější, ale stále nezasvěcení lidé vůbec netuší, jak program funguje (včetně mne).

3. generace jazyků

Jazyky v třetí generaci konečne nabízí uživateli určitou abstrakci nad tím, jak program vidí počítač, zaměřují se na to, jak program vidí člověk. Naše čísla jsou vnímána již jako proměnné, zdrojový kód připomíná matematický zápis.

Sečtení dvou čísel by v jazyce C vypadalo takto:

int main(void)
{
        int a, b, c;
        a = 83;
        b = -2;
        c = a + b;
        return 0;
}

Všichni asi tušíme, co program dělá, sečte čísla 83 a -2 a výsledek uloží do proměnné c. U všech jazyků třetí generace je samozřejmě výhodou vysoká čitelnost. S dalším vývojem šly jazyky ještě dál a přinesly objektově orientované programování, ale o tom až později. Jazyky v třetí generaci spadají v zásadě do třech kategorií:

Kompilované jazyky

Kompilované (neřízené) jazyky mají tedy svůj zdrojový kód v jazyce, kterému lidé dobře rozumí. Tento zdrojový kód se samozřejmě musí přeložit do strojového kódu, aby ho bylo možné na procesoru spustit. Tento překlad zajišťuje překladač (kompiler), který přeloží najednou celý program do stroj. kódu.

Kompiler

Kompilace má tyto výhody:

  • Rychlost - Jediné zbrždění spočívá v jednorázové kompilaci, přeložený program poté běží srovnatelně rychle, jako kdyby byl napsán např. v ASM.
  • Nepřístupnost zdroj. kódu - Program se šíří již zkompilovaný, není jej možné jednoduše modifikovat pokud zároveň nevlastníte jeho zdroj. kód.
  • Snadné odhalení chyb ve zdroj. kódu - Pokud zdrojový kód obsahuje chybu, celý proces kompilace spadne a programátor je s chybou seznámen. To značně zjednodušuje vývoj.

Dále jsou tu samozřejmě nevýhody:

  • Závislost na platformě - Program je stále závislý na platformě, tedy na typu procesoru a operačním systému. Zkompilovaný program nemůžeme vzít a přenést na jinou platformu bez toho, aby byl na této platformě zkompilován.
  • Nemožnost editace - Jakmile se program jednou zkompiluje do strojového kódu, nelze ho editovat jinak, než opětovnou kompilací. To pochopitelně platí i pro výše zmíněné jazyky.
  • Memory management - Vzhledem k tomu, že počítač danému programu nerozumí a jen mechanicky vykonává instrukce, můžeme se někdy setkat s velmi nepříjemnými chybami s přetečením paměti. Kompilované jazyky obvykle nemají automatickou správu paměti a jsou to jazyky nižší (s nižším komfortem pro programátora). Běhové chyby způsobené zejména špatnou správou paměti se kompilací neodhalí.

Příkladem kompilovaných jazyků jsou např. jazyk C, jeho objektový následník C++ nebo Pascal/Delphi.

Interpretované jazyky

Interpretace se snaží řešit problém přenositelnosti programů mezi různými platformami a také přichází s vyšším komfortem pro programátora. Interpret funguje podobně, jako kompiler, jen nepřekládá program celý najednou, ale překládá pouze to, co je v danou chvíli potřeba. (Interpreter znamená v angličtině tlumočník, tedy nejprve vyslechne jednu větu mluvčího a tu poté přeloží a vysloví. Překlad probíhá během proslovu, tedy běhu programu, po větách/instrukcích. Kompiler/překladač přeloží rozhovor celý najednou a poté ho celý přečte.). Můžeme si představit, že výše uvedený zdrojový kód by interpret četl po jednotlivých řádcích, tu část by vždy zkompiloval do strojového kódu a vykonal. Výsledek kompilace by zahodil a přesunul by se na další řádek. Možná vám to připadá jako plýtvání výkonem procesoru a je pravda, že tento způsob běhu programu také není zrovna nejrychlejší.

Interpret

Jaké může mít tedy tento postup výhody? Je jich hned několik:

  • Přenositelnost: Program je plně přenositelný, pokud existuje interpret pro danou platformu, půjde tam zdrojový kód programu spustit (a vývoj interpretu je snažší, než vývoj kompilátoru).
  • Jednodušší vývoj - Ve vyšších jazycích jsme odstíněni od správy paměti, kterou za nás dělá tzv. garbage collector (řekneme si o něm v seriálu více). Často také nemusíme ani zadávat datové typy a máme k dispozici vysoce komfortní kolekce a další struktury.
  • Stabilita - Díky tomu, že interpret kódu rozumí, předejde chybám, které by zkompilovaný program jinak klidně vykonal. Běh interpretovaných programů je tedy určitě bezpečnější, dále umožňuje zajímavou vlastnost, tzv. reflexi, kdy program za běhu zkoumá sám sebe, ale o tom později.
  • Jednoduchá editace - Program můžeme vyvíjet po částech a nahrávat na cílové umístění, díky tomu, že se nemusí kompilovat, ho je možné jednoduše editovat "za běhu".

Interpret má tři zásadní nevýhody:

  • Rychlost - Interpretace může být mnohdy velmi pomalá a program tak plně nevyužívá výkon počítače.
  • Často obtížné hledání chyb - Díky kompilaci za běhu se chyby v kódu objeví až v tu chvíli, kdy je kód spuštěn. To může být někdy velmi nepříjemné.
  • Zranitelnost - Protože se program šíří v podobě zdrojového kódu, každý do něj může zasahovat nebo krást jeho části.

Příkladem interpretovaného jazyka je např. PHP. Na většině webů ten poměrně pohodlný jazyk výkonově stačí, ale například Facebook používá speciální kompilovanou verzi PHP, zájemci ať se podívají na projekt HipHop for PHP.

Jazyky s virtuálním strojem

Napadlo vás, co by se stalo, kdyby se oba dva výše zmíněné způsoby spojily? Pokud ano, gratuluji, vynalezli jste virtuální stroj. Jedná se o nejmodernější podobu jazyka, která je v současné době také nejrozšířenější a nejlepší volbou pro vývoj většiny aplikací. Nebudu tajit, že do této kategorie spadá samotná Java nebo C#.

Zdrojový kód je nejprve přeložen do tzv. mezikódu, kterému se u Javy říká bytecode. Jedná se v podstatě o strojový (binární) kód, který má ale o poznání jednodušší instrukční sadu a přímo podporuje objektové programování. Tento mezikód je potom díky jednoduchosti relativně rychle interpretovatelný tzv. virtuálním strojem (tedy interpretem, v případě Javy je to tzv. JVM - Java Virtual Machine). Výsledkem je strojový kód pro náš procesor.

Virtuální stroj

Určitě jste trochu vyděšeni, ale věřte, že jsme v podstatě odstranili nevýhody interpreta i kompileru a můžeme využívat mnohé z jejich výhod:

  • Odhalení chyb ve zdrojovém kódu - Díky kompilaci do bytekódu jednoduše odhalíme chyby ve zdrojovém kódu.
  • Stabilita - Díky tomu, že interpret kódu rozumí, zastaví nás před vykonáním nebezpečné operace a na chybu upozorní. Můžeme také provádět reflexi (i když pro bytekód, ale od toho jsme většinou odstíněni).
  • Jednoduchý vývoj - Máme k dispozici hitech datové struktury a knihovny, správu paměti za nás provádí garbage collector.
  • Slušná rychlost - Rychlost se u virtuálního stroje pohybuje mezi interpretem a kompilerem. Virtuální stroj již výsledky své práce po použití nezahazuje, ale dokáže je cachovat, sám se tedy optimalizuje při četnějších výpočtech a může dosahovat až rychlosti kompileru. Start programu bývá pomalejší, protože stroj překládá společně využívané knihovny.
  • Málo zranitelný kód - Aplikace se šíří jako zdrojový kód v bytekódu, není tedy úplně jednoduše lidsky čitelná.
  • Přenositelnost - Asi je jasné, že hotový program poběží na každém železe, na kterém se nachází virtuální stroj.

Java a JDK

Java je distribuována ve třech edicích:

  • Java SE - Standardní Edici budeme používat pro začátek
  • Java EE - Enterprise Edice není ve skutečnosti jiná Java, ale sada knihoven do JSE, která umožňuje vytvářet velké webové aplikace. Je poměrně komplikovaná, ale ve firmách extrémně žádaná. Pokud se ji naučíte, budete velmi žádaní programátoři.
  • Java ME - Mikro Edice běží v SIM kartách, pračkách a dalších elektronických zařízeních (Oracle tvrdí, že Java pohání 9 miliard zařízení).

Pro spuštění našich aplikací budeme potřebovat JRE (Java Runtime Environment), což je běhové prostředí obsahující virtuální stroj. Pro vývoj budeme potřebovat JDK (Java Development Kit), které obsahuje knihovny a nástroje pro vývojáře.

Další výhodou Javy je, že je zcela zdarma a tedy dostupná všem vývojářům. Aplikace v Javě lze také spouštět přímo ve webovém prohlížeči pomocí Java Web Start. Ten se také automaticky stará o aktualizaci vaší aplikace.

Jazyky s virtuálním strojem ctí objektově orientované programování a jedná se o současný vrchol vývoje v této oblasti. Existují i jazyky 4. a 5. generace, ale ty mají specifické použití a nebudeme se s nimi zde zatím zabývat.

Nyní víme, s čím to vlastně budeme pracovat. Příště si ukážeme práci s IDE (programátorským prostředím) NetBeans a vytvoříme si svůj první program.


 

  Aktivity (2)

Článek pro vás napsal David Čápka
Avatar
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Jak se ti líbí článek?
Celkem (96 hlasů) :
4.864574.864574.864574.864574.86457


 



 

 

Komentáře
Zobrazit starší komentáře (21)

Avatar
Taskkill
Redaktor
Avatar
Taskkill:

Pokud chceš programovat a ne jen kódit .... V drtivé většině případů je nutná škola, kvalitní škola a poctivě deset let ( říká se ) na sobě makat.

Editováno 12. dubna 1:20
 
Odpovědět  -2 12. dubna 1:19
Avatar
Jiří Gracík
Redaktor
Avatar
Jiří Gracík:

Pro holky jsou úplně ideální czechitas:
http://www.czechitas.cz/

Pomůže ti to se základy a třeba i nasměruje správným směrem :)

Odpovědět 12. dubna 1:37
Creating websites is awesome till you see the result in another browser ...
Avatar
pocitac770
Redaktor
Avatar
pocitac770:

Nezáleží na tom, kdo jsi. Kluk, holka, dítě, důchodce... :D Kdokoliv se může naučit prpgramovat, zvláště zde ve virtuálním světě jde jenom o tom, co máš v hlavě, ne jak "vypadáš".
Hlavní je dát si nějaký cíl. Proč to děláš? Proč se chceš naučit programovat? Co by jsi strašně ráda naprogramovala? (Tady radši začni s něčím menším)
Já taktéž nemám školu, kurzy, nic, akorát tyto webovky (ok, plus nějaké specializované stránky na určité problémy, ale pořád je to jenom internet). Taky jsem začínal (a stále pokračuji) v javě a pamatuju si, jak i blbej Hello World mě naplňoval úžasným pocitem, že je to start do novýho života :)
Někde zde jsem narazil na větu "Pokud dokáže člověk naprogramovat plně funkční Tetris, tak je nadějným programátorem". Tak jsem si řekl, že naprogramuju Tetris. Chvíli to trvalo, ale podařilo se. Tím byl vlastně jeden cíl pryč, ale aktuálně jsem se dostal do sféry MC programování (díky vlivu na jednom nejmenovaném serveru), takže už nedělám jenom programy do šuplíku, které nikdo nevyužije, ale uživatelé se již najdou, a konečně to má nějaký smysl. Aktuálně pracuju na úpravě jedné modifikace která bude přímo použita na serveru, kam budou chodit desítky, možná stovky lidí... A moje jméno bude svítit v author listu
Všechno tohle bez nějakých škol, ne, jediné, co mě do toho dostalo byla chuť a štěstí, že jsem před pár lety našel tyto webovky. Samozřejmě, že později půjdu na vysokou školu s tímto zaměření, ale to je jenom budoucnost...
Vem si to jako příklad, že i noob, co o tom nic neví a jenom si čte tutoriály to může někam dotáhnout :)

Editováno 12. dubna 7:35
 
Odpovědět  +3 12. dubna 7:33
Avatar
Ryu Kassiela Koperová:

Děkuji všem, co mi tady zatím odpověděli ^^ Czechitas rozhodně vypadají zajimavě :) Jen si budu muset práci naplánovat tak, abych stihla pár z jejich přednášek :D Ale myslím, že to bude stát za to ^^ Nic není zadarmo a pokud něco chci, musím pro to něco obětovat, čas, peníze, nervy... ^_^ Pak... Jsem mladá, deset let klidně tomu obětuji ale stejně si myslím, že to bude málo a po celý život si to bude brát můj čas ^^ Na školu bych ráda šla :D Jen bude chvilku trvat, než tam budu moci jít ^^ A Děkuji počítač770 ^^ Tohle mi dalo ještě větší naději! Budu se snažit, i když jsem lehce natvrdlá :D Ale pokud něco chci, tak si za tím půjdu... Děkujiiii ^_^/

Odpovědět  ±0 12. dubna 10:23
Nikdo neříkal, že musíme být normální. ^_^
Avatar
Neaktivní uživatel:

Ahoj vsem,je mi 55 let,a chci se ucit programovat

Odpovědět 24. září 14:09
Neaktivní uživatelský účet
Avatar
Tomáš Brůna
Redaktor
Avatar
Odpovědět  +1 24. září 14:12
Lepší být šprt než blbec :)
Avatar
Neaktivní uživatel:

To je moje vec.

Odpovědět 24. září 14:15
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Libor Šimo (libcosenior):

To je fakt. :-D
A uc sa programovat.
To si nam oznamovat nemusel. ;-)

Editováno 24. září 15:11
Odpovědět 24. září 15:09
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Přemas
Člen
Avatar
Přemas:

Diky za clanek, zacinam v jave a tento styl vykladu mi fakt vyhovuje :)

 
Odpovědět 3. října 23:58
Avatar
Petr Smejkal
Člen
Avatar
Petr Smejkal:

Pro představu mi článek dobře posloužil. Díky.

 
Odpovědět 16. listopadu 16:23
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 31. Zobrazit vše