Java 7
Učebnice objektové architektury pro začátečníky

Obálka 1. dílu

Naposledy aktualizováno:   
2016-07-07 – 11:21:09

Obsah

Poznámky ke knize

Kniha měla být původně dalším vydáním populární učebnice
Myslíme objektově v jazyku Java.
Změny v jazyce a pokroky při výzkumu optimální metodiky výuky
však vedly k natolik zásadnímu přepracování původního textu,
že se nakladatel rozhodl ji vydat jako novou knihu,
která tentokrát vychází ve dvou dílech.

Stránku prvního dílu právě čtete, stránku druhého dílu nazvaného
Java 8 – Úvod do objektové architektury pro mírně pokročilé najdete zde.

Oproti předchozím verzím je v těchto knihách kladen ještě větší důraz na to,
aby se studenti naučili především zásady návrhu správné architektury,
protože vlastní kódování stále více přebírají nejrůznější generátory kódu.
Tento záměr je proto uveden i v podtitulech.

Soubory ke stažení

Úvodní poznámky

Balík doprovodných programů je vždy uložen jako samorozbalovací archiv,
který je naprogramován v jazyku Java, takže vyžaduje,
abyste již měli na svém počítači Javu instalovánu.
Další podmínky na vás neklade.

Archiv spustíte obdobně jako jiné programy,
tj. povětšinou poklepáním na příslušný soubor.
Po jeho spuštění se otevře dialogové okno (viz obrázek),
v němž zadáte vše potřebné a spustíte generaci požadovaných doprovodných programů.

Máte-li na počítači instalovaný nějaký (většinou komprimační) program,
který se prohlásí za "vlastníka" JAR-souborů,
nemusí vám dovolit spustit JAR-soubor poklepáním.
Bude-li proto váš počítač trucovat a bude odmítat JAR-soubor jednoduše spustit,
zkuste program spustit z příkazového řádku zadáním příkazu:

  java -jar <cesta-k-Jar-souboru>

V některých operačních systémech, např. ve Windows,
nemusíte dokonce ani zadávat celou cestu k souboru,
ale stačí pouze přetáhnout soubor do okna příkazového řádku
a systém cestu na konec aktuálního příkazového řádku sám doplní.

Generátor doprovodných programů

Generátor projektů pro první díl je v souboru
UOA-1_Java7_v3.07.6203_2016-07-07.jar.
V názvu souboru je vždy je uvedeno číslo verze doplněné datem jejího vzniku.
Počáteční trojka říká,
že se jedná o třetí verzi knihovny doprovodných programů pro moje knihy,
další dvojčíslí pak specifikuje podverzi.
Následující čtyřčíslí označuje interní číslo verze v mém správci verzí
a na závěr názvu je uvedeno datum vzniku daného souboru.

Pokud vám nebude ve vašich programech něco fungovat, podívejte se sem,
jestli na podobný problém nenarazil už někdo před vámi
a jestli proto není k dispozici novější verze.

Použití generátoru je jednoduché. Po spuštění souboru se otevře dialogové okno,
v němž do vstupního pole Cílová složka: zadáte cílovou složku,
do které se mají vygenerované projekty ukládat (složka musí existovat).
Nemáte-li odkud její adresu zkopírovat a nechce-li se vám vypisovat,
můžete stisknout tlačítko Procházet ...
a složku najít, resp. vytvořit prostřednictvím dialogového okna.

Pod vstupním polem je seznam s názvy projektů, které je možno vygenerovat.
Projekty vybíráte klepnutím myši. Chcete-li jich vybrat více,
můžete využít přeřaďovačů CTRL a SHIFT, které zde fungují standardně.
Chcete-li vybrat všechny projekty, stačí pod seznamem stisknout tlačítko
Generovat všechny.

Po zadání cílové složky a seznamu generovaných projektů
stiskněte tlačítko OK
a během chvilky se v zadané cílové složce požadované projekty objeví.

Odstranění diakritiky

V projektech pro první díl je používaná diakritika,
protože mám vyzkoušeno, že se pak v nich začátečníci lépe vyznají,
a pro začátečníky je tato učebnice určena především.

Pokud náhodou někdo diakritiku v programech nesnáší,
má možnost si stáhnou program Prevod_kodovani.jar
a s jeho pomocí veškerou diakritiku ze souborů odstranit
(případně nastavit jakékoliv jiné kódování).

Aplikační okno převodníku kódování

Osobně se však domnívám, že by si "nesnašeči diakritiky"
měli raději pořídit anglickou verzi této učebnice,
v níž je žádná diakritika obtěžovat nebude.

Program pro odstranění diakritiky vyžaduje pouze zadání zdrojové složky,
tj. složky se soubory, které se chystáte převést do jiného kódování,
a cílové složky, což je složka, do které se uloží překódované programy.
Soubory, které dostanete ode mne mají kódování UTF-8.
Budete-li je chtít "odháčkovat",
nastavte cílové kódování ASCII (tato kombinace je přednastavena).

Převáděné soubory jsou textové soubory, u nichž chcete změnit kódování,
Kopírované soubory jsou různé obrázky, které chcete jenom zkopírovat,
Ignorované soubory bude program opravdu ignorovat a do cílového projektu se nedostanou
a Speciální soubory jsou soubory, které jsou sice v ASCII, ale skrytě používají diakritiku. Typicky jsou to soubory *.properties, bluej.pkg a package.bluej. Ty je třeba při "odháčkování" projít a tuto skrytou diakritiku z nich také odstranit.

Opravy nalezených chyb (errata)

Přes veškeré kontroly se do knihy vloudilo pár chybiček.
Zde jsou opravy těch, na něž jsem přišel já nebo čtenáři.


Strana 197, 1. řádek
V knize:
Rozhraní IHýbací proto můžeme stejně dobře prohlásit za potomka rozhraní IPosuvný.
Správně:
Rozhraní IHýbací proto můžeme stejně dobře prohlásit za potomka rozhraní INafukovací.
Strana 310, 2. odstavec, 3. řádek
V knize:
Stisknete-li však Cancel nebo zavřete-li okno tlačítkem na titulkové liště či stiskem ESC,
vrátí prázdný ukazatel (null), protože jste nic nezadali.
(Na obsahu textového pole v okamžiku zavření okna v takovém případě nezáleží).
Správně:
Zavřete-li však okno tlačítkem na titulkové liště či stiskem ESC,
bude se vše vyvíjet poněkud jinak. Jak, to záleží na způsobu, jakým jste otevřeli dotazovací okno.
 

Výše uvedené disproporce mezi výkladem a skutečností vznikly z toho, že jsem mezi vydáními upravil
metody třídy IO tak, aby bylo možno ovlivnit umístění dialogových oken (nyní si třída IO pamatuje,
kde se nacházelo naposledy zavřené dialogové okno a umístí příští otevírané okno na stejně místo).
Neuvědomil jsem si však, že při tomto vylepšování se vnitřně začal používat jiný kód třídy
javax.swing.JOptionPane, a ten na některé události reaguje poněkud jinak.


Strana 394, 2. odstavec odspodu, 1. řádek
V knize:
Metoda zobraz()
Správně:
Metoda nakresli()

Strana 396, 1. odstavec odspodu, 2. řádek
V knize:
zobraz()
Správně:
nakresli()

Strana 431, 4. odstavec, 1. až 3. řádek
V knize:
Ve třetí kapitole jsme se naučili naprogramovat konstrukce,
s nimiž jsme se seznámili ve třetí kapitole. Nyní rozšíříme
svůj repertoár o dovednosti, s jejichž protějšky jsme se sice
při našich hrátkách v druhé kapitole nesetkali, ...
Správně:
Ve druhé části jsme se naučili naprogramovat konstrukce,
s nimiž jsme se seznámili ve části první. Nyní rozšíříme
svůj repertoár o dovednosti, s jejichž protějšky jsme se sice
při našich hrátkách v první části nesetkali, ...

Strana 462, 2. odstavec, 1. řádek
V knize:
15. krok: Implementace rozhraní ITvar a její test
Správně:
15. krok: Implementace rozhraní INafukovací a její test


Nejčastější dotazy (FAQ)

Tato sekce je určena pro odpovědi na vaše nejčastější dotazy.

Na počátku jsou dotazy, které se netýkají přímo vykládané látky,
ale jsou zaměřeny na některé související záležitosti:
instalaci JDK, BlueJ, konfiguračního doplňku a doprovodných programů,
některé vlastnosti BlueJ, apod.

Za nimi jsou pak dotazy k textu knihy.
Ty jsem seřadil podle stránek, na nichž se nachází text,
při jehož studiu se objevily nejasnosti.

Budete-li mít nějaký dotaz, ať už k látce či prostředí, pošlete mi
mail s předmětem začínajícím UOA1_J7_Dotaz:
Bude-li se dotaz týkat něčeho obecnějšího,
zveřejním zde odpověď i pro ty ostatní.



Dotaz:
Mám problémy se spuštěním programu BlueJ.

Odpověď:
Podívejte se, zda jste program program (Javu nebo BlueJ) neinstalovali do složky,
v jejíž cestě jsou nějaké paznaky (vykřičník, mezera, ...).
S mezerou se již autoři programu vyrovnali,
ale některé další znaky (např. právě vykřičník) stále vyvolávají kolize,
protože je Java interně používá k něčemu jinému.


Dotaz:
Při překladu doprovodných programů hlásí překladač chyby.

Odpověď:
Pravděpodobně budete mít instalovánu špatnou verzi Javy.
Doprovodné programy k této učebnici vyžadují nejméně verzi 7.


Dotaz:
Rád bych změnil barvu pozadí diagramu tříd na bílou.
Jak to má udělat?

Odpověď:
Při instalaci konfiguračního doplňku se do složky <BlueJ_Home>\lib
nahrál soubor BlueJ.defs.
Na jeho konci najdete příkazy pro nastavení barev
nejrůznějších součástí aplikačního okna.


Dotaz:
Mám problém hned na straně 62 a to ten,
že když chci vytvořit novou instanci obdélníku
tak se mi po stisku pravého tlačítka nezobrazí Vámi popsaný
dialog se seznamem konstruktorů,
ale okno kde je:
Otevřít v editoru, Přeložit, Odstranit.
Jak to udělám, abych z toho dostal Vámi popsané menu konstruktorů?

Odpověď:
Důvodem je, že si čtenář zapomněl nechat třídy nejprve přeložit.
Chcete-li, aby s vámi třída komunikovala,
nesmí mít spodní část svého obdélníku v diagramu tříd šrafovanou.


Dotaz:
V projektu 101a_Tvary nejsou v grafických entitách naprogramované metody
posunVlevo(int vzdalenost) a posunVzhuru(int vzdalenost)
.

Odpověď:
Ty tam opravdu nejsou, ale ale dokumentace těchto metod,
která se při jejich volání zobrazí v dialogovém okně, v němž zadáváte hodnotu parametru,
jasně říká, že při zadání záporné vzdálenosti se vydáte opačným směrem.
Pro realizaci funkce oněch zdánlivě chybějících metod proto stačí
zadávat zápornou hodnotu vzdálenosti, o kterou se má objekt posunout.


Dotaz:
Mám problém v kapitole 8.6 Návrhový vzor Prototyp.
Po vytvorení Demonštračného testu na strane 160
a vytvorení testovacej metódy testPlynuléPohyby
mi síce beží všetko dobre, ale po odstranení všetkých štyroch šípiek
deklarujúcich implementáciu rozhrania ITvar
mi vyhlási pri preklade triedy ITvarTest nasledujúcu chybu:

no suitable method found přesunNa(int,int,Mnohotvar)
method Přesouvač.přesunNa(Pozice,IPosuvný) is not applicable
(actual and formal argument lists differ in length)
Method Přesouvač.přesunNa(int,int,IPosuvný) is not applicable
(actual argument Mnohotvar cannot be converted to IPosuvný by method invocation conversion)

a tým pádom mi nefunguje to, čo popisujete nižšie.

Odpověď:
Obávám se, že jsem v zájmu zrychlení práce napsal příklad „ručně“,
místo abych jej vytvořil v interaktivním režimu,
a přitom jsem přehlédl, že se BlueJ v tomto ohledu chová nekorektně.
Omlouvám se za svoji nedůslednost při testování popisovaných příkladů.
Doteď jsem si myslel, že jsem ten příklad opravdu vyzkoušel v interaktivním režimu.

Vyrábíme nyní s jedním mým studentem upravenou verzi BlueJ,
kterou interně označujeme BlueJ++.
Ta bude schopna podporovat řadu nových funkcí
a mimo jiné v ní bude odstrasněna i tato nekorektnost.
BlueJ++ by mělo být k dipsozici na jaře 2015.

Každopádně děkuji za upozornění
a omlouvám se za svoji nedůslednost při testování popisovaných příkladů.
Jak už jsem řekl, doteď jsem si myslel,
že jsem ten příklad opravdu vyzkoušel v interaktivním režimu.


Dotaz:
Když v projektu 115a_Operatory v súbore VstupVystup.java na riadku 35
zmením prázdny reťazec za null:

String příjmení = IO.zadej("Zadej své příjmení:", null);
trieda sa skompiluje a program funguje normálne. Prečo?

V triede IO sú tri preťažené metódy a to:

keď jej pošlem správu: IO.zadej("Zadej sve prijmeni:", null);
podľa čoho prekladač rozhodne ktorá metóda sa zavolá?
Konštanta null predsa nie je typu String?

Odpověď:
Je řada příkazů, kdy se překladač neumí rozhodnout a nutí programátora,
aby konstantu null přetypoval na požadovaný typ,
aby se překladač mohl při výběru volané metody správně rozhodnout.

Náš příklad ale mezi ně nepatří, v našem příkladu to má překladač jednoduché:
První dvě metody mají druhý parametr primitivního typu,
kdežto třetí metoda má druhý parametr objektového typu.
Konstanta null zastupuje odkaz na instanci objektového typu,
a proto si přikladač odvodil, že má zavolat třetí z přetížených metod.