Java pro začátečníky (obsah)

Podkategorie

Tato kategorie neobsahuje žádné podkategorie.

Články

Duke - maskot Javy Historie programovacího jazyka Java se začala psát na počátku 90. let, kdy ve společnosti Sun Microsystems vznikla v týmu Jamese Goslinga iniciativa pro vytvoření jednoduchého, ale efektivního jazyka určeného pro spotřební elektroniku. Výsledný jazyk se jmenoval Oak. V roce 1995, kdy internet začal masivně pronikat do každodenního života, si lidé ze Sun Microsystems uvědomili, že...


Zatímco minulý díl byl motivační a měl objasnit, proč je Java správná volba, v tomto dílu si nainstalujeme vše potřebné pro vývoj a předvedeme první javovský program. Jak již je v tutoriálech zvykem, bude to „Hello world“. Na závěr si řekneme něco o tom, jak vlastně javovské programy fungují. Instalace První věcí, kterou budeme potřebovat je Java SE Development Kit, což je běhové prostředí Javy a sada nástrojů nutných pro vývoj Java aplikací (k...


Tato kapitola bude věnována proměnným a primitivním datovým typům. Bohužel se jedná o látku, která sice není příliš náročná, ale je objemná, z tohoto důvodu se operacemi nad těmito typy budeme zabývat až v další kapitole. Co je to proměnná? Proměnná je pojmenovaná část paměti, kterou používáme k uložení informace. Vezmeme-li si jako příklad zaměstnance nějaké firmy, tak proměnná popisující jeho plat může mít hodnotu 25000, heslo k jeho uživ...


V tomto dílu seriálu si ukážeme několik věcí, které budou později naším každodenním chlebem. Nejprve zakončíme problematiku proměnných tím, že si ukážeme, kde jsou námi definované proměnné platné a jakým způsobem se dají proměnné přetypovat (změnit typ hodnoty – například z desetinného čísla na celé). Posléze si předvedeme, jaké základní operace nad daty můžeme v Javě vykonávat. Platnost proměnných Každá proměnná je platná (a nesmí být opětovně...


Minule jsme si ukázali třídu Math, která agreguje matematické operace, které nejsou soušástí jazyka jako takového. Tentokrát si ukážeme třídu pro práci s řetězci String a zjistíme, že objekty nejsou jen operace, ale také data. Dále si řekneme, co to jsou balíčky a také se naučíme vytvářet vlastní třídy (a jejich instance). Třída String S řetězci jsme již pracovali v druhém dílu tohoto seriálu (První program). Naučili jsme se, že řetězce se da...


Tentokrát si ukážeme, jak přidat ke třídě Animal z minulého dílu operace – metody. Nejprve si ukážeme, jak vypadá deklarace metod a vytvoříme několik instančních metod v duchu objektvé zásady zapouzdření. Poté si řekneme něco o životu objektů (konstruktory a garbage collection) a na závěr se naučíme vytvářet třídní metody a proměnné. Deklarace instanční metody Metoda je stejně jako třída tvořena hlavičkou a tělem. Hlavička začíná specifikátorem...


V minulých dílech jsme se věnovali objektům. V tomto dílu si ukážeme, jak vypadají konstrukce ovlivňující větvení programu – podmínky. Představíme si operátory porovnání, jejichž výstupem jsou pravdivostní hodnoty a řekneme si, jaká úskalí plynou z jejich použití. Pravdivostní hodnoty poté využijeme při rozhodování v podmínkách, ternárních operátorech a konstrukci switch. Od tohoto dílu dále silně doporučuji, abyste si kód nejen přečetli, ale ta...


Dnes v tomto seriálu přijdou na řadu cykly, jež umožňují vykonávat daný blok programu opakovaně, a které jsou společně s podmínkami základními stavebními kameny všech programů. Jejich možnosti si předvedeme na skromné vlastní implementaci třídy Math. Třída MyMath Třídu, kterou dnes budeme programovat, nazveme MyMath, abychom nekolidovali s jménem již zmíněné třídy Math, což by nás nutilo při jejím případném použití specifikovat vždy plně kvalif...


Minule jsme si ukázali, jak implementovat některé matematické operace. Tyto operace měly tu vlastnost, že vracely jednu návratovou hodnotu, což ovšem není vůbec podmínkou. Dnes si ukážeme, jakým způsobem můžeme vracet více proměnných stejného typu, aniž bychom pro ně museli vytvářet speciální návratový objekt. Struktura pole, o které budeme mluvit, není samozřejmě určena pouze pro návratové hodnoty. Její využití je především v ukládání vícero ...


V dnešním desátém dílu navážeme na díl předchozí a ukážeme si, jak vytvořit natahovací (dynamické) pole – kolekci ArrayList. Tato struktura je již v Javě připravena (a na lepší úrovni, než k jaké se dnes dostaneme), ale i tak je velmi vhodné, abychom si ukázali, jak přesně uvnitř funguje, protože bez pochopení základních principů jednotlivých kolekcí je takřka nemožné napsat efektivní program. Zároveň si touto malou exkurzí do skutečného světa p...


V tomto dílu se budeme zabývat dalším způsobem, kterak vytvořit v Javě cyklus – rekurzí. Ukážeme si rekurzivní algoritmus pro výpočet faktoriálu. Řekneme si, jaké jsou výhody a nevýhody takto formulovaných algoritmů. Vzpomeneme si na Fibonacciho posloupnost (která je z definice rekurzivní), ale dnes nám poslouží spíše jako odstrašující příklad. V úplném závěru zmíníme nástroj, který výrazně usnadní vyhledávání chyb v našich programech – debugger....


Tento díl bude zasvěcen dědičnosti a polymorfismu, což jsou jedny ze základních kamenů objektově orientovaného programování. Dědičnost nám umožní vytvářet podtypy jednotlivých tříd, zatímco pomocí polymorfismu dosáhneme volání vždy toho správného objektu. Dědičnost Jak již bylo řečeno v úvodu článku, dědičnost nám umožňuje vytvářet hierarchie tříd, ve kterých můžeme o libovolném uzlu říct, že je speciálním případem libovolného ze svých předků...


Minule jsme si ukázali, jakým způsob lze v Javě specifikovat podtypy. Tentokrát budeme postupovat opačným směrem – představíme si rozhraní a abstraktní třídy, což jsou konstrukty, které slouží ke generalizaci (zobecnění) tříd. Abstraktní třídy Stejně jako v minulém dílu si představme, že máme firmu, kde pracují zaměstnanci mnoha různých profesí (ředitele, sekretářky, uklízečky...). Tito zaměstnanci sdíli určité generické chování, které je sp...


Doposud jsme tiše předpokládali, že v našich programech vše půjde dle plánu a nikdy nedojde k nějaké nepředvídané situaci. Pod takovouto situací si můžeme představit chyby programu způsobené programátorem – dělení nulou, sáhnutí mimo rozsah pole, pokus o volání metody na nullové referenci a podobně. Druhou skupinou pak mohou být neplatné uživatelské vstupy – pokud uživatel předá do kolonky věk řetězec, pokusí se uložit soubor někam, kam nemá přís...


Kdysi jsme si řekli, že každý soubor může obsahovat právě jednu veřejnou třídu/rozhraní a libovolné množství neveřejných tříd a rozhraní. Dnes pronikneme hlouběji a ukážeme si, jakým způsobem můžeme definovat třídy uvnitř jiných tříd a rozhraní, případně dokonce uvnitř jednotlivých metod. Vnořené třídy/rozhraní Nejjednodušší variantou zanořených typů jsou vnořené třídy/rozhraní (nested/embedded class/interface). Jsou to typy, které jsou defin...


V desátém dílu jsme si ukázali první kolekci – dynamické pole (ArrayList). Dnes si vytvoříme další kontejner – spojový seznam (LinkedList). Spojový seznam je jedna z nejvděčnějších datových struktur. Přestože je implementačně poměrně jednoduchý, je zároveň velmi použitelný – je základem mnoha implementací zásobníku, fronty, grafu a dalších datových struktur. Dnes vytvoříme implementaci, jež nám zajistí základní funkcionalitu. Příště si ukážeme,...


V minulém dílu jsme implementovali spojový seznam. Námi vytvořená kolekce byla poměrně dobře použitelná, ale měla dva nedostatky – jeden týkající se znovupoužitelnosti a druhý výkonnostního rázu. Tyto neduhy si dnes vysvětlíme a kolekci patřičně upravíme. Nedostatek první: malá znovupoužitelnost Stávající implementace spojového seznamu umožňuje ukládat pouze hodnoty primitivního typu int. Kdybychom chtěli ukládat cokoliv jiného, tak bychom mu...


Doposud naše aplikace pracovaly vesměs s daty, která jsme jim interně zadali. V dnešním dílu si představíme datové proudy (streamy), pomocí kterých může naše aplikace komunikovat se svým okolím. Proudy pro nás ale nejsou žádnou novinkou, již jsme se s nimi mnohokrát setkali. Pro výpis na konzoli jsme volali metody proudu System.out, a když jsme ve 14. dílu získávali číslo ze standardního vstupu, tak jsme jej četli z proudu System.in. By...


Zatím jsme si v tomto seriálu představili konstrukty třídy (class) a rozhraní (interface). Dnes je doplníme o výčtový typ (enum), čímž tuto tématiku zakončíme. Co je to enum? Výčtový typ enum, který byl přidán do Javy ve verzi 5, nám umožňuje vytvářet vlastní datové typy, které mohou nabývat pouze určitého omezeného množství hodnot. Každé z těchto hodnot poté odpovídá právě jedna instance výčtu. Příkladem mohou být měsíce v roce (leden, úno...


V předešlých dílech jsme mimo jiné vytvářeli kolekce – dynamické pole a spojový seznam. Jejich použití nám oproti práci s polem v mnohém usnadnilo práci, zejména pak pokud jde o ukládání dat předem neznámé délky. Jedna otázka ovšem zůstala otevřená – vyhledávání. Vyhledávání Seznam Představme si, že vytváříme evidenci obyvatel nějakého státu. Prvním řešením, které nás napadne, je uložit všechny obyvatele do seznamu. Pokud budeme chtít zjis...


Tento díl se skládá ze dvou částí. Ta první je lehce teoretičtější, jelikož se zabývá porovnáváním výkonu našich algoritmů – asymptotickou složitostí. V druhé části si řekneme, jaké kolekce má Java připravené ve svých standardních knihovnách. Asymptotická složitost Asyptotická složitost slouží ke klasifikaci algoritmů na základě jejich výkonu na různě velkých datech. Motivace Představme si, že máme dva programy, které pracují v lineárním ...


Programy, které jsme dosud tvořili, byly striktně sekvenční – žádné dvě jejich části nebyly vykonávány ve stejném čase. V tomto dílu si ukážeme, jak vytvářet programy tak, aby některé úseky kódu probíhaly paralelně. Tohoto chování pak využijeme v dalších dílech věnovaných grafickému uživatelského rozhraní, kdy budeme vyžadovat, aby se v jednu chvíli zároveň překreslovalo rozhraní a probíhal výpočet (složitého) úkolu. Jelikož je však paralelní pr...


Minulý díl byl pro nás revoluční z pohledu využití zdrojů, jež nám moderní počítače nabízejí. Dnešní díl bude neméně přelomový – tentokrát z pohledu user experience – vysvětlíme si základy grafického rozhraní v Javě a pomocí knihovny Swing vytvoříme grafickou obdobu programu hello world. Na tyto základy pak navážeme v dalších dílech. Grafické knihovny v Javě Abstract Window Toolkit Historicky první standardní knihovnou pro tvorbu grafického ...


V minulém dílu jsme si řekli, jakým způsobem v Javě vytvoříme jednoduchou grafickou aplikaci. Dnes si ukážeme několik dalších komponent a ukážeme si, jakým způsobem jim lze přiřazovat chování. Hlavně si však předvedeme několik předdefinovaných správců rozmístění (layout managerů), které nám umožní skládat jednotlivé komponenty do smysluplných celků. Přiřazování akcí komponentám Každé uživatelské rozhraní je postaveno na interakci uživatel-ap...


V předchozích dvou dílech jsme si ukázali základy tvorby grafického rozhraní pomocí frameworku Swing. Uvedené příklady však měly k použitelné aplikaci velmi daleko. Dnes si proto ukážeme první skutečnou aplikaci – kalkulačku. Předem varuji, že je tento díl poněkud rozsáhlejší a náročnější – tak jako všechny skutečné aplikace. Na druhou stranu ale věřím, že o to více čtenáři přinese, jelikož si v něm ukážeme použití mnoha konstrukcí napříč téměř...