Informace o průběhu, hodnocení, apod. | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 1 | ![]() |
O předmětu... | |
---|---|
Prakticky zaměřený bakalářský předmět Cílem je naučit základním principům objektového programování a algoritmizace Souvisí s
Předpokládají se základní znalosti strukturované algoritmizace a programování (v rozsahu Úvodu do programování), tj. např.:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 2 | ![]() |
Složky hodnocení předmětu | |
---|---|
Hodnocení má tři složky:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 3 | ![]() |
Kritéria hodnocení předmětu | |
---|---|
K ukončení zkouškou potřebujete:
K ukončení zápočtem potřebujete:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 4 | ![]() |
Obsah (sylabus) předmětu | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 5 | ![]() |
O přednášejícím... | |
---|---|
Tomáš Pitner
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 7 | ![]() |
Konzultační hodiny | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 8 | ![]() |
Informační zdroje | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 9 | ![]() |
Úvod do jazyka Java | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 10 | ![]() |
Z toho plyne, že... | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 12 | ![]() |
Další charakteristiky | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 13 | ![]() |
Java jako běhové prostředí | |
---|---|
Kód je při běhu dobře zabezpečen:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 14 | ![]() |
Java pro programátora (1) | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 15 | ![]() |
Java pro programátora (2) | |
---|---|
Konkrétní možnosti: | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 16 | ![]() |
Hlavní domény Javy (1) | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 17 | ![]() |
Hlavní domény Javy (2) | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 18 | ![]() |
Javová platforma | |
---|---|
Javovou platformu tvoří: | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 19 | ![]() |
Java je tedy dána... | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 20 | ![]() |
Vývoj Javy | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 21 | ![]() |
Specifikace a implementace Javy | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 22 | ![]() |
Verze Javy | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 23 | ![]() |
Aktuální verze | |
---|---|
(Stav k září 2003:)
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 24 | ![]() |
Získání distribuce Javy | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 25 | ![]() |
Stažení distribuce Sun | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 26 | ![]() |
Obsah vývojové distribuce Javy | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 27 | ![]() |
Obsah vývojové distribuce Javy (2) | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 28 | ![]() |
Pomocné nástroje ve vývojové distribuci | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 30 | ![]() |
Struktura javového programu | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 32 | ![]() |
Překlad a spuštění "Ahoj!" | |
---|---|
Překlad
Spuštění
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 34 | ![]() |
Vytvoření zdrojového textu "Ahoj!" ("for dummies") | |
---|---|
Vytvoření a editace zdrojového kódu v editoru PSPad 4.2.2 (dostupný zdarma, instalovaný na všech Win strojích v učebnách na FI) ![]() | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 35 | ![]() |
Překlad "Ahoj!" ("for dummies") | |
---|---|
Překlad překladačem javac (úspěšný, bez hlášení překladače) ![]() | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 36 | ![]() |
Spuštění "Ahoj!" ("for dummies") | |
---|---|
Spuštění voláním java ![]() | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 37 | ![]() |
Praktické informace (aneb co je nutné udělat) | |
---|---|
Cesty ke spustitelným programům (PATH) musejí obsahovat i adresář JAVA_HOME\bin | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 39 | ![]() |
Odkazy | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 42 | ![]() |
Úvod do objektového programování | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 43 | ![]() |
Vlastnosti objektu (1) | |
---|---|
Vlastnostmi objektů jsou:
Vlastnosti objektů - proměnné i metody - je třeba deklarovat. viz Sun Java Tutorial / Trail: Learning the Java Language: Lesson: Classes and Inheritance | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 45 | ![]() |
Vlastnosti objektu (2) | |
---|---|
Proměnné
Metody
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 46 | ![]() |
Příklad - použití třídy Clovek (1) | |
---|---|
Mějme deklarovánu třídu Clovek Metoda main v následujícím programu:
Tedy: vypíší se informace o obou vytvořených objektech - lidech. Nyní podrobněji k proměnným objektů. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 48 | ![]() |
Příklad - použití třídy Clovek (2) | |
---|---|
Ve výše uvedeném programu znamenalo na řádku:
Clovek ales: pouze deklarace (tj. určení typu) proměnné ales - bude typu Clovek. ales = new Clovek ("Ales Necas", 1966): vytvoření objektu Clovek se jménem Ales Necas. Lze napsat zvlášť do dvou řádků nebo (tak jak jsme to udělali) na řádek jeden. Každý příkaz i deklaraci ukončujeme středníkem. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 49 | ![]() |
Proměnné - deklarace | |
---|---|
Položky jmeno a rokNarozeni v předchozím příkladu jsou proměnné objektu Clovek. Jsou deklarovány v těle deklarace třídy Clovek. Deklarace proměnné objektu má tvar: modifikátory Typ jméno; např.: protected int rokNarozeni; | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 50 | ![]() |
Proměnné - datový typ | |
---|---|
Výše uvedená proměnná rokNarozeni měla datový typ int (32bitové celé číslo). Tedy:
Kromě celých čísel int nabízí Java celou řadu dalších primitivních datových typů. Primitivní typy jsou dané napevno, programátor je jen používá, nedefinuje. Podrobněji viz Datové typy v Javě Tam, kde nestačí diskrétní hodnoty (tj. primitivní typy), musíme použít typy složené, objektové.
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 51 | ![]() |
Proměnné - jmenné konvence | |
---|---|
Na jméno (identifikátor) proměnné sice Java neklade žádná speciální omezení (tedy mimo omezení platná pro jakýkoli identifikátor), ale přesto bývá velmi dobrým zvykem dodržovat při pojmenovávání následující pravidla (blíže viz podrobný rozbor na FIXME):
např.: protected int rokNarozeni; je identifikátor se správně (vhodně) utvořeným jménem, zatímco: protected int RokNarozeni; není vhodný identifikátor proměnné (začíná velkým písmenem) Dodržování těchto jmenných konvencí je základem psaní srozumitelných programů a bude vyžadováno, sledováno a hodnoceno v odevzdávaných úlohách i písemkách. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 52 | ![]() |
Proměnné - použití | |
---|---|
Proměnné objektu odkazujeme pomocí "tečkové notace":
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 53 | ![]() |
Proměnné - použití (2) | |
---|---|
Objektů (tzv. instancí) stejného typu (tj. stejné třídy) si můžeme postupně vytvořit více: Existují tady dva objekty, každý má své (obecně
různé) hodnoty proměnných - např. jsou různá jména obou lidí.
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 55 | ![]() |
Vytváření objektů | |
---|---|
Ve výše uvedených příkladech jsme objekty vytvářeli voláními new Clovek(...) bezděčně jsme tak použili
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 56 | ![]() |
Metody - příklad | |
---|---|
Výše uvedená třída Clovek měla metodu na výpis informací o daném objektu/člověku:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 58 | ![]() |
Volání metod | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 59 | ![]() |
Volání metod - příklad | |
---|---|
Vracíme se k prvnímu příkladu: vytvoříme dva lidi a zavoláme postupně jejich metodu vypisInfo. Vytvoří se dva objekty Clovek a vypíší se informace o nich.
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 60 | ![]() |
Parametry metod | |
---|---|
V deklaraci metody uvádíme v její hlavičce tzv. formální parametry. modifikatory seznamFormalnichParametru je tvaru: typParametru nazevFormalnihoParametru, ... Podobně jako v jiných jazycích parametr představuje v rámci metody lokální proměnnou. Při volání metody jsou f. p. nahrazeny skutečnými parametry. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 61 | ![]() |
Příklad předávání parametrů - primitivní typy | |
---|---|
Rozšiřme definici třídy Clovek o metodu zakric s parametry: Při zavolání:
tato metoda vypíše Kricim 10krat UAAAA! | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 63 | ![]() |
Příklad předávání parametrů - objektové typy (1) | |
---|---|
Následující třída Ucet modeluje jednoduchý bankovní účet s možnostmi:
Metoda prevedNa pracovat nejen se svým "mateřským" objektem, ale i s objektem kam předaným do metody... opět přes tečkovou notaci. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 64 | ![]() |
Příklad předávání parametrů - objektové typy (2) | |
---|---|
Příklad použití třídy Ucet:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 65 | ![]() |
Návrat z metody | |
---|---|
Kód metody skončí, tj. předá řízení zpět volající metodě (nebo systému - v případě startovní metody main), jakmile
Metoda může při návratu vrátit hodnotu - tj. chovat se jako funkce (ve pascalském smyslu):
Pozn.: I když metoda něco vrátí, my to nemusíme použít, ale je to trochu divné... | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 66 | ![]() |
Konstruktory | |
---|---|
Co a k čemu jsou konstruktory?
Syntaxe (viz výše):
Příklad využití tohoto konstruktoru: Toto volání vytvoří objekt pepa a naplní ho jménem a rokem
narození.
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 67 | ![]() |
Konstruktory (2) | |
---|---|
Jak je psát a co s nimi lze dělat?
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 68 | ![]() |
Přetěžování | |
---|---|
Jedna třída může mít:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 69 | ![]() |
Přetěžování - příklad | |
---|---|
Ve třídě Ucet přetížíme metodu prevedNa.
Ve třídě Ucet koexistují dvě různé
metody se stejným názvem, ale jinými parametry.
Pozn: I když jsou to teoreticky dvě úplně různé metody, pak když už se jmenují stejně, měly by dělat něco podobného. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 70 | ![]() |
Přetěžování - příklad (2) | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 71 | ![]() |
Shrnutí | |
---|---|
Objekty:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 73 | ![]() |
Odkazy na objekty | |
---|---|
Deklarace proměnné objektového typu ještě žádný objekt nevytváří. To se děje až příkazem - operátorem - new. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 74 | ![]() |
Přiřazování objektových proměnných | |
---|---|
V následující ukázce vytvoříme dva účty.
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 75 | ![]() |
Vracení odkazu na sebe | |
---|---|
Metoda může vracet odkaz na objekt, nad nímž je volána pomocí Příklad - upravený Ucet s metodou prevedNa vracející odkaz na sebe
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 76 | ![]() |
Řetězení volání | |
---|---|
Vracení odkazu na sebe (tj. na objekt, na němž se metoda volala) lze s výhodou využít k "řetězení" volání:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 77 | ![]() |
Proměnné a metody třídy - statické | |
---|---|
Dosud jsme zmiňovali proměnné a metody (tj. souhrnně prvky - members) objektu. Lze deklarovat také metody a proměnné patřící celé třídě, tj. skupině všech objektů daného typu. Ttakové metody a proměnné nazýváme statické a označujeme v deklaraci modifikátorem static | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 78 | ![]() |
Příklad statické proměnné a metody | |
---|---|
Představme si, že si budeme pamatovat, kolik lidí se nám během chodu programu vytvořilo a vypisovat tento počet. Budeme tedy potřebovat do třídy Clovek doplnit:
Pozn: Všimněte si v obou případech modifikátoru/klíčového slova static. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 79 | ![]() |
Objektové modelování v Javě | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 81 | ![]() |
Kroky řešení reálného problému na počítači | |
---|---|
Generický (univerzální, obecný...) model postupu:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 82 | ![]() |
Vývoj software je proces... | |
---|---|
(podle JS, SW inženýrství):
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 83 | ![]() |
Celkový rámec vývoje SW | |
---|---|
V tomto předmětu nás z toho bude zajímat jen něco a jen částečně:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 84 | ![]() |
Metodiky vývoje SW | |
---|---|
Tyto generické modely jsou dále rozpracovávány do podoby konkrétních metodik. Metodika (tvorby SW) je ucelený soubor inženýrských postupů, jak řízeným způsobem, s odhadnutelnou spotřebou zdrojů dospět k použitelnému SW produktu. Některé skupiny metodik:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 85 | ![]() |
Metodika typu "vodopád" | |
---|---|
Nevracím se nikdy o více jak jednu úroveň zpět:
Nyní zpět k Javě a jednoduchým programům... | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 86 | ![]() |
Organizace programových souborů | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 88 | ![]() |
Organizace zdrojových souborů | |
---|---|
v Pascalu nebyla (nutná) v Javě je nezbytná - zdrojové soubory organizujeme podle toho, ve kterých balících jsou třídy zařazeny (přeložené soubory se implicitně ukládájí vedle zdrojových) | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 89 | ![]() |
Příklad - svět chovatelů a jejich psů | |
---|---|
Zkusme naznačit, jak bychom realizovali jednoduchý systém, který bude
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 90 | ![]() |
Shromáždění informací o realitě | |
---|---|
Zjistíme, jaké typy objektů se ve zkoumaném výseku reality vyskytují a které potřebujeme zachytit Zjistíme a zachytíme vztahy mezi objekty našeho zájmu Zjistíme, které činnosti objekty (aktéři, aktoři) provádějí | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 91 | ![]() |
Jak zachytíme tyto informace | |
---|---|
neformálními prostředky - tužkou na papíře vlastními slovy v přirozeném jazyce formálně pomocí nějakého vyjadřovacího aparátu - např. grafického jazyka pomocí CASE nástroje přímo na počítači | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 92 | ![]() |
Zápis třídy do zdrojového souboru | |
---|---|
Soubor Zivocich.java bude obsahovat (pozor na velká/malá písmena - v obsahu i názvu souboru): public class Zivocich { ... popis vlastností (proměnných, metod...) živočicha ... } public značí, že třída je "veřejně" použitelná, tj. i mimo balík | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 94 | ![]() |
Balíky | |
---|---|
Balíky obvykle organizujeme do hierarchií, např.:
Neplatí však, že by
Hierarchie balíků má tedy význam spíše pro srozumitelnost a logické členění. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 96 | ![]() |
Příslušnost třídy k balíku | |
---|---|
Deklarujeme ji syntaxí: package názevbalíku;
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 97 | ![]() |
Jak zapisujeme dědění | |
---|---|
Klíčovým slovem extends : public class Clovek extends Zivocich { ... popis vlastností (proměnných, metod...) člověka navíc oproti živočichovi ... } | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 100 | ![]() |
Deklarace import NázevTřídy | |
---|---|
Deklarace import nesouvisí s děděním, ale s organizací tříd programu do balíků:
Import není nutné deklarovat mezi třídami téhož balíku! | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 101 | ![]() |
Příklad | |
---|---|
Cíl: vylepšit třídu Ucet Postup:
Vzorový zdroják sám o sobě nepůjde přeložit, protože nemáme třídu, na níž závisí. Celý kód vystavím až po kontrole příslušných úloh. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 104 | ![]() |
Přístupová práva | |
---|---|
Přístup ke třídám i jejim prvkům lze (podobně jako např. v C++) regulovat:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 106 | ![]() |
Granularita omezení přístupu | |
---|---|
Přístup je v Javě regulován jednotlivě po prvcích Omezení přístupu je určeno uvedením jednoho z tzv. modifikátoru přístupu (access modifier) nebo naopak neuvedením žádného. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 107 | ![]() |
Typy omezení přístupu | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 108 | ![]() |
Kde jsou která omezení aplikovatelná? | |
---|---|
Pro třídy:
Pro vlastnosti tříd = proměnné/metody:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 109 | ![]() |
Příklad - přátelský | |
---|---|
lokální v balíku = přátelský => přístupné jen ze tříd stejného balíku, už ale ne z podtříd, jsou-li v jiném balíku
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 112 | ![]() |
Přístupová práva a umístění deklarací do souborů | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 115 | ![]() |
Zadání úlohy 3. (zadává se v týdnu od 13. října) | |
---|---|
Cílem třetí úlohy je zvládnutí jednoduchého použití dědičnosti v objektovém programu. Hotovým základem je balík tomp.ucebnice.auta, v něm třídy Auto a Demo. Třídy tohoto balíku si stáhněte k sobě a pracujte s nimi lokálně (i když na UNIXech je teoreticky lze namapovat přímo z cesty /home/tomp/public_html/java/ucebnice/javasrc/ a dále.... Auto představuje třídu vozidel - aut, od této třídy zatím nebudeme vytvářet speciálnější typy aut - osobní, nákladní. Demo je třída, která musí fungovat, jakmile jí poskytneme/dopíšeme níže uvedené třídy. Do balíku tomp.ucebnice.auta.mycky napište třídy Mycka, RucniMycka a MyckaSUdrzbou tak, aby potomkem - podtřídou třídy Mycka byla RucniMycka a jejím potomkem MyckaSUdrzbou. Třída Mycka musí umět auto umýt (metoda s hlavičkou public double umyj(Auto a) - vrací cenu za umytí jako hodnotu typu double - cenu si zvolte sami dle uvážení...), obdobně navoskovat (metoda navoskovat) a musí nabízet "kompletní program" (metoda kompletniProgram) se slevou 20 % součtu cen jednotlivých služeb v rámci programu. Třída RucniMycka musí umět totéž jako Mycka a navíc musí umět čištění interiéru (metoda s hlavičkou public double vycistiInterier(Auto a)). Její "kompletní program" (metoda kompletniProgram) bude dostupný za cenu podobně spočtenou jako v předchozí třídě a bude obsahovat navíc čištění interiéru. Třída MyckaSUdrzbou musí umět totéž jako RucniMycka a navíc musí umět údržbu spodku vozidla (metoda s hlavičkou public double provedUdrzbuSpodku(Auto a)). Její "kompletní program" (metoda kompletniProgram) bude dostupný za cenu podobně spočtenou jako v předchozí třídě a bude obsahovat navíc údržbu spodku. Výsledkem - Vašim řešením - jsou tedy dopsané třídy umístěné v balíku tomp.ucebnice.auta.mycky. Pozn: ve třídách balíku tomp.ucebnice.auta.mycky budete v metodách používat třídu Auto - parametr typu Auto. Abyste jej v tomto místě zpřístupnili (je totiž v jiném balíku), musíte napřed deklarací třídy (po package, před class...) uvést import tomp.ucebnice.auta.Auto; - blíže viz slidy. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 116 | ![]() |
Příkazy a řídicí struktury v Javě | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 117 | ![]() |
Přiřazení odkazu na objekt | |
---|---|
Konstrukci = lze použít i pro přiřazení do objektové proměnné: Zivocich z1 = new Zivocich(); Co to udělalo?
Nyní můžeme odkaz na tentýž vytvořený objekt znovu přiřadit - do z2: Zivocich z2 = z1; Proměnné z1 a z2 ukazují nyní na stejný objekt typu živočich!!! Proměnné objektového typu obsahují odkazy (reference) na objekty, ne objekty samotné!!! | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 121 | ![]() |
Příklad použití "while" cyklu | |
---|---|
Dokud nejsou přečteny všechny vstupní argumenty:
Dalším příkladem je použití while pro realizaci celočíselného dělení se zbytkem: | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 127 | ![]() |
Příklad použití "do-while" cyklu | |
---|---|
Dokud není z klávesnice načtena požadovaná hodnota:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 129 | ![]() |
Příklad použití "for" cyklu | |
---|---|
Provedení určité sekvence určitý počet krát
Vypíše na obrazovku deset řádků s čísly postupně 0 až 9 Pět pozdravů nebo Výpis prvků pole objektů "for" cyklem | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 131 | ![]() |
Vícecestné větvení "switch - case - default" | |
---|---|
Obdoba pascalského select - case - else Větvení do více možností na základě ordinální hodnoty Syntaxe:
Je-li výraz roven některé z hodnot, provede se sekvence uvedená za příslušným case. Sekvenci obvykle ukončujeme příkazem break, který předá řízení ("skočí") na první příkaz za ukončovací závorkou příkazu switch.Vícecestné větvení | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 133 | ![]() |
Vnořené větvení | |
---|---|
Větvení if - else můžeme samozřejmě vnořovat do sebe:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 134 | ![]() |
Vnořené větvení (2) | |
---|---|
Je možné "šetřit" a neuvádět složené závorky, v takovém případě se else vztahuje vždy k nejbližšímu neuzavřenému if, např. znovu předchozí příklad:
Tak jako u cyklů - tento způsob zápisu nelze v žádném případě doporučit!!! | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 135 | ![]() |
Příkazy "break" | |
---|---|
Realizuje "násilné" ukončení průchodu cyklem nebo větvením switch Syntaxe použití break v cyklu:
použití u switch jsme již viděliVícecestné větvení "switch - case - default" | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 137 | ![]() |
Příkaz "continue" | |
---|---|
Používá se v těle cyklu. Způsobí přeskočení zbylé části průchodu tělem cyklu
Výše uvedený příklad vypíše čísla 1, 2, 3, 4, 6, 7, 8, 9, nevypíše hodnotu 5. Řízení průchodu cyklem pomocí "break" a "continue" | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 138 | ![]() |
"break" a "continue" s návěštím | |
---|---|
Umožní ještě jemnější řízení průchodu vnořenými cykly pomocí návěští můžeme naznačit, který cyklus má být příkazem break přerušen nebo tělo kterého cyklu má být přeskočeno příkazem continue. Návěští | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 139 | ![]() |
Zadání úlohy 4. (zadává se v týdnu od 20. října) | |
---|---|
Jednoduché vlastní implementace vyhledávacích a řadicích algoritmů (Lineární a binární vyhledávání) Úvod Tato úloha bude používat pole, které se dosud na přednáškách zmiňovalo jen v souvislosti s argumenty metody main, konkrétně v její hlavičce jsme viděli: main(String[] args). Ani tato úloha ale nebude vyžadovat více znalostí o práci s polem, než jen to, že:
Část I. Cílem je napsat dvě třídy, jejichž objekty budou umět:
Dále pak napsat dvě třídy rozšiřující dvě výše uvedené tak, aby navíc:
Část II. Řazení probubláváním a quicksort Cílem je napsat dvě třídy objektů, jejichž objekty budou umět:
Pozn: Pokud cvičící zadání modifikuje, je to OK. Tohle je vzorové zadání. Za obě části úlohy dohromady získáte opět max. 5 bodů. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 141 | ![]() |
Datové typy v Javě | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 142 | ![]() |
Primitivní vs. objektové datové typy - opakování | |
---|---|
Java striktně rozlišuje mezi hodnotami
Základní rozdíl je v práci s proměnnými:
Důsledek -> dvě objektové proměnné mohou nést odkaz na tentýž objekt | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 143 | ![]() |
Přiřazení proměnné primitivního typu - opakování | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 144 | ![]() |
Primitivní datové typy | |
---|---|
Proměnné těchto typů nesou elementární, z hlediska Javy atomické, dále nestrukturované hodnoty. Deklarace takové proměnné (kdekoli) způsobí:
V Javě existují tyto skupiny primitivních typů:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 146 | ![]() |
Integrální typy - celočíselné | |
---|---|
V Javě jsou celá čísla vždy interpretována jako znaménková "Základním" celočíselným typem je 32bitový int s rozsahem -2 147 483 648 až 2147483647 větší rozsah (64 bitů) má long, cca +/- 9*10^18
Pro celočíselné typy existují (stejně jako pro floating-point typy) konstanty - minimální a maximální hodnoty příslušného typu. Tyto konstanty mají název vždy Typ.MIN_VALUE , analogicky MAX... Viz např. Minmální a maximální hodnoty | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 147 | ![]() |
Integrální typy - "char" | |
---|---|
char představuje jeden 16bitový znak v kódování UNICODE Konstanty typu char zapisujeme
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 148 | ![]() |
Typ char - kódování | |
---|---|
Java vnitřně kóduje znaky a řetězce v UNICODE, pro vstup a výstup je třeba použít některou za serializací (převodu) UNICODE na sekvence bajtů:
Problém může nastat při interpretaci kódování znaků národních abeced přímo ve zdrojovém textu programu. Ve zdroj. textu správně napsaného javového vícejazyčného programu by žádné národní znaky VŮBEC neměly vyskytovat. Je vhodné umístit je do speciálních souborů tzv. zdrojů (v Javě objekty třídy java.util.ResourceBundle). | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 149 | ![]() |
Čísla s pohyblivou řádovou čárkou | |
---|---|
Kódována podle ANSI/IEEE 754-1985
Možné zápisy literálů typu float (klasický i semilogaritmický tvar) - povšimněte si "f" za číslem - je u float nutné!: float f = -.777f, g = 0.123f, h = -4e6f, 1.2E-15f; double: tentýž zápis, ovšem bez "f" za konstantou!, s větší povolenou přesností a rozsahem | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 150 | ![]() |
Vestavěné konstanty s pohyblivou řádovou čárkou | |
---|---|
Kladné a záporné nekonečno:
Konstanta NaN - Not A Number Viz také Minimální a maximální hodnoty | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 151 | ![]() |
Typ logických hodnot - boolean | |
---|---|
Přípustné hodnoty jsou false a true. Na rozdíl od Pascalu na nich není definováno uspořádání. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 152 | ![]() |
Typ void | |
---|---|
Význam podobný jako v C/C++. Není v pravém slova smyslu datovým typem, nemá žádné hodnoty. Označuje "prázdný" typ pro sdělení, že určitá metoda nevrací žádný výsledek. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 153 | ![]() |
Pole v Javě | |
---|---|
Pole v Javě je speciálním objektem Můžeme mít pole jak primitivních, tak objektových hodnot
Kromě pole v Javě existují i jiné objekty na ukládání více hodnot - tzn. kontejnery, viz dále Syntaxe deklarace typhodnoty [] jménopole na rozdíl od C/C++ nikdy neuvádíme při deklaraci počet prvků pole - ten je podstatný až při vytvoření objektu pole Syntaxe přístupu k prvkům jménopole[indexprvku] Používáme
Syntaxe vytvoření objektu pole: jako u jiného objektu - voláním konstruktoru: jménopole = new typhodnoty[ početprvků ]; nebo vzniklé pole rovnou naplníme hodnotami/odkazy
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 154 | ![]() |
Pole (2) | |
---|---|
Pole je objekt, je třeba ho před použitím nejen deklarovat, ale i vytvořit:
Clovek Nyní můžeme pole naplnit:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 155 | ![]() |
Pole - co když deklarujeme, ale nevytvoříme? | |
---|---|
Co kdybychom pole pouze deklarovali a nevytvořili:
Toto by skončilo s běhovou chybou "NullPointerException", pole neexistuje, nelze do něj tudíž vkládat prvky! Pokud tuto chybu uděláme v rámci metody:
překladač nás varuje:
Pokud ovšem pole bude proměnnou objektu/třídy: Překladač chybu neodhalí a po spuštění se objeví:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 156 | ![]() |
Pole - co když deklarujeme, vytvoříme, ale nenaplníme? | |
---|---|
Co kdybychom pole deklarovali, vytvořili, ale nenaplnili příslušnými prvky: Toto by skončilo také s běhovou chybou
NullPointerException:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 157 | ![]() |
Kopírování polí | |
---|---|
V Javě obecně přiřazení proměnné objektového typu vede pouze k duplikaci odkazu, nikoli celého odkazovaného objektu. V proměnné lidi2 je nyní
odkaz na stejné pole jako je v lidi1.
Zatímco, provedeme-li vytvoření nového pole + arraycopy, pak lidi2 obsahuje duplikát/klon/kopii původního pole. viz též
Dokumentace
API třídy "System"
Samozřejmě bychom mohli kopírovat prvky ručně, např. pomocí for cyklu, ale volání System.arraycopy je zaručeně nejrychlejší a přitom stále platformově nezávislou metodou, jak kopírovat pole. Také arraycopy však do cílového pole zduplikuje jen odkazy na objekty, nevytvoří kopie objektů! | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 158 | ![]() |
Objektové modelování v Javě - pokračování | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 159 | ![]() |
Rozhraní | |
---|---|
V Javě, na rozdíl od C++ neexistuje vícenásobná dědičnost -
Pokud po třídě chceme, aby disponovala vlastnostmi z několika různých množin (skupin), můžeme ji deklarovat tak, že
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 160 | ![]() |
Co je rozhraní | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 161 | ![]() |
Deklarace rozhraní | |
---|---|
Příklad deklarace rozhraní
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 162 | ![]() |
Implementace rozhraní | |
---|---|
Příklad Čteme: Třída Clovek implementuje
rozhraní Informujici.
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 163 | ![]() |
Využití rozhraní | |
---|---|
Příklad
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 164 | ![]() |
Implementace více rozhraní současně | |
---|---|
Třída sice smí dědit maximálně z jedné nadtřídy (předka), ale
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 165 | ![]() |
Implementace více rozhraní současně - příklad | |
---|---|
Příklad - kromě výše uvedeného intf. Informujici mějme ještě:
Třída Clovek implementuje dvě rozhraní:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 166 | ![]() |
Rozšiřování rozhraní - příklad | |
---|---|
Příklad - Informujici informuje „jen trochu“, DobreInformujici je schopen ke standardním informacím (vypisInfo) přidat dodatečné informace (vypisDodatecneInfo).
Třída, která chce implementovat intf. DobreInformujici,
musí implementovat obě metody předepsané tímto
rozhraním. Např.:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 168 | ![]() |
Rozhraní - poznámky | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 169 | ![]() |
Abstraktní třídy | |
---|---|
I když Java disponuje rozhraními, někdy je vhodné určitou specifikaci implementovat pouze částečně:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 170 | ![]() |
Abstraktní třídy (2) | |
---|---|
Abstraktní třída je tak označena v hlavičce, např.: public abstract class AbstraktniChovatel ... Obvykle má alespoň jednu abstraktní metodu, deklarovanou např.: public abstract void vypisInfo() ... Od a.t. nelze vytvořit instanci, nelze napsat např.: Chovatel ch = new AbstraktniChovatel(...); | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 171 | ![]() |
Příklad rozhraní - abstraktní třída - neabstraktní třída | |
---|---|
Viz Svět chovatelství z učebnice:
Pozn.: Obecný chovatel se ihned úplně implementovat nedá (ještě to neumíme), proto je definován jako abstraktní třída AbstraktniChovatel a teprve až ChovatelPsu je neabstraktní třída. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 172 | ![]() |
Ladění a testování programů | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 173 | ![]() |
Ladění programů v Javě | |
---|---|
Je mnoho způsobů...
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 174 | ![]() |
Ještě lepší... | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 175 | ![]() |
Postup při práci s assert | |
---|---|
Postup:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 176 | ![]() |
Ukázka použití assert (1) | |
---|---|
Třída Zlomek používá assert k ověření, že zlomek není (chybou uživatele) vytvářen s nulovým jmenovatelem. Za assert uvedeme, co musí v daném místě za běhu programu platit. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 177 | ![]() |
Ukázka použití assert (2) | |
---|---|
Program přeložíme (s volbou -source 1.4): | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 178 | ![]() |
Ukázka použití assert (3) | |
---|---|
Program spustíme (s volbou -ea nebo selektivním -ea:NázevTřídy): | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 179 | ![]() |
Ukázka použití assert (4) | |
---|---|
Spustíme-li bez povolení assert (bez volby -ea nebo naopak s explicitním zákazem: -da), pak program podmínky za assert neověřuje: | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 180 | ![]() |
Postup při práci s JUnit | |
---|---|
Uvědomit si, že žádný nástroj za nás nevymyslí, JAK máme své třídy testovat. Pouze nám napomůže ke snadnějšímu sestavení a spuštění testu. Postup:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 181 | ![]() |
Ukázka použití JUnit (1) | |
---|---|
Třída Zlomek zůstává zhruba jako v předchozím příkladu, přibývají však metody equals (porovnává dva zlomky, zda je jejich číselná hodnota stejná) a soucet (sečítá dva zlomky, součet vrací jako výsledek). | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 182 | ![]() |
Ukázka použití JUnit (2) | |
---|---|
Testovací třída JUnitDemo má „přípravnou“ metodu setUp, tearDown a testovací metody. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 183 | ![]() |
Ukázka použití JUnit (3) | |
---|---|
Spuštění testovače v prostředí GUI Swing nad testovací třídou JUnitDemo. Pokud testovací třída prověří, že testovaná třída/y je/jsou OK, vypadá to přibližně takto: | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 184 | ![]() |
Ukázka použití JUnit (4) | |
---|---|
Má-li testovaná třída/y chyby a zjistí-li to testovač, vypadá to třeba takto: | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 185 | ![]() |
Postup při práci s jass | |
---|---|
jass je preprocesor javového zdrojového textu. Umožňuje ve zdrojovém textu programu vyznačit podmínky, jejichž splnění je za běhu kontrolováno. Podmínkami se rozumí:
Postup práce s jass:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 186 | ![]() |
Odkazy | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 187 | ![]() |
Zadání úlohy 5. (zadává se v týdnu od 3. listopadu) | |
---|---|
Úloha je obdobou té předchozí. Část Ia. Jde o to zmodifikovat třídy z předchozí úlohy, aby:
Jako společného předka těchto tříd v hierarchii dědičnosti použijte třídy AbstractSearcher, která bude (asi neúplně, protože je abstraktní) implementovat rozhraní Searcher. Část Ib. Dále zmodifikujte třídy XXXMinMax z předchozí úlohy, aby:
Část II. Na závěr reimplementujte (čili použijte a předělejte z úlohy 4.) do balíku cz.muni.fi.{vaslogin}.sorting2 také třídy BubbleSorter a QuickSorter tak, aby obě implementovaly rozhraní Sorter.
Při reimplementaci využijte společného abstraktního předka - třídu AbstractSorter, kterou si vytvoříte a umístíte do balíku cz.muni.fi.{vaslogin}.sorting2. Tato abstraktní třída bude částečně implementovat rozhraní Sorter - tj. bude implementovat ty metody, jež ve třídách BubbleSorter, QuickSorter vycházejí naprosto stejné. Z praktických důvodů je vhodné nadeklarovat v této třídě například pomocnou metodu void swap(int i, int j), která prohodí v poli hodnoty na indexech i, j. Kontrolní otázka: Jaký přístupový modifikátor by tato metoda měla/mohla mít? K reimplementovaným třídám sami vytvořte vhodné demo, které ukáže, že jsou funkční. Obecné informace Pozn: Pokud cvičící zadání modifikuje, je to OK. Tohle je vzorové zadání. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 188 | ![]() |
Operátory a výrazy, porovnávání objektů | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 189 | ![]() |
Aritmetické | |
---|---|
+, -, *, / a % (zbytek po celočíselném dělení) | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 190 | ![]() |
Logické | |
---|---|
logické součiny (AND):
logické součty (OR):
negace (NOT):
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 191 | ![]() |
Relační (porovnávací) | |
---|---|
Tyto lze použít na porovnávání primitivních hodnot:
Test na rovnost/nerovnost lze použít na porovnávání primitivních hodnot i objektů:
Upozornění:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 192 | ![]() |
Porovnávání objektů | |
---|---|
Použití ==
Chceme-li (intuitivně) chápat rovnost objektů podle obsahu, tj.
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 193 | ![]() |
Metoda hashCode | |
---|---|
Jakmile u třídy překryjeme metodu equals, měli bychom současně překrýt objektů i metodu hashCode:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 195 | ![]() |
Bitové | |
---|---|
Bitové:
Posuny:
Dále viz např. Bitové operátory | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 197 | ![]() |
Operátor podmíněného výrazu ? : | |
---|---|
Jediný ternární operátor Platí-li první operand (má hodnotu true) ->
Typ prvního operandu musí být boolean, typy druhého a třetího musí být přiřaditelné do výsledku. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 198 | ![]() |
Operátory typové konverze (přetypování) | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 199 | ![]() |
Priority operátorů a vytváření výrazů | |
---|---|
nejvyšší prioritu má násobení, dělení, nejnižší přiřazení | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 201 | ![]() |
Kontejnery | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 202 | ![]() |
Kontejnery | |
---|---|
Kontejnery (containers) v Javě
Většinou se používají kontejnery hotové, vestavěné, tj. ty, jež jsou součastí Java Core API:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 203 | ![]() |
Základní kategorie kontejnerů | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 204 | ![]() |
Kontejnery - rozhraní, nepovinné metody | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 205 | ![]() |
Kontejnery - souběžný přístup, výjimky | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 206 | ![]() |
Iterátory | |
---|---|
Iterátory jsou prostředkem, jak "chodit" po prvcích kolekce buďto
Každý iterátor musí implementovat velmi jednoduché rozhraní Iterator se třemi metodami:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 207 | ![]() |
Kolekce | |
---|---|
Kolekce
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 208 | ![]() |
Seznamy | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 209 | ![]() |
Seznamy a obyčejné iterátory - příklad | |
---|---|
Vytvoříme seznam, naplníme jej a chodíme po položkách iterátorem. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 210 | ![]() |
Iterátor po seznamu - příklad | |
---|---|
Vytvoříme seznam, naplníme jej a chodíme po položkách seznamovým iterátorem, vytvořeným na určité pozici (indexu) v seznamu. K procházení seznamovým iterátorem lze použít metody next, previous. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 211 | ![]() |
Množiny | |
---|---|
Množiny
Cílem množin je mít možnost rychle (se složitostí O(log(n))) provádět atomické operace:
Standardní implementace množiny:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 212 | ![]() |
Množina - příklad | |
---|---|
Vložíme prvky do množiny a ptáme se, zda tam jsou: | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 213 | ![]() |
Uspořádané množiny | |
---|---|
Uspořádané množiny:
Uspořádání je dáno buďto:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 214 | ![]() |
Uspořádaná množina - příklad s chybou | |
---|---|
Vložíme prvky do uspořádané množiny. Prvky musejí implementovat rozhraní Comparable, nebo musíme poskytnout komparátor. Když neuděláme ani jedno: Nefunguje, prvky třídy Clovek nebyly porovnatelné. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 215 | ![]() |
Uspořádaná množina - příklad OK | |
---|---|
Prvky implementují rozhraní Comparable: Funguje, prvky třídy Clovek jsou porovnatelné, množina je uspořádána podle příjmení lidí. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 216 | ![]() |
Mapy | |
---|---|
Mapy (asociativní pole, nepřesně také hašovací tabulky nebo haše) fungují v podstatě na stejných principech a požadavcích jako Set:
Mapy mají:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 217 | ![]() |
Mapa - příklad | |
---|---|
Lidi se do mapy vkládají s klíčem = příjmení člověka, pak se přes příjmení mohou vyhledat: | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 218 | ![]() |
Uspořádané mapy | |
---|---|
Uspořádané mapy:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 219 | ![]() |
Uspořádaná mapa - příklad | |
---|---|
Jsou-li klíče uspořádané (pomocí implementace Comparable nebo komparátorem), mohou se prvky procházet podle uspořádání klíčů: | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 220 | ![]() |
Historie | |
---|---|
Existují tyto starší typy kontejnerů (-> náhrada):
Roli iterátoru plnil dříve výčet (enumeration) se dvěma metodami:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 223 | ![]() |
Odkazy | |
---|---|
Demo efektivity práce kontejnerů - Demo kolekcí Velmi podrobné a kvalitní seznámení s kontejnery najdete na Trail: Collections | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 224 | ![]() |
Dokumentace a distribuce aplikací | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 225 | ![]() |
Dokumentace javových programů | |
---|---|
Základním a standardním prostředkem je tzv. dokumentace API
Zde se budeme věnovat především dokumentaci programátorské, určené těm, kdo budou náš kód využívat ve svých programech, rozšiřovat jej, udržovat jej. Programátorské dokumentaci se říká dokumentace API (apidoc, apidocs). Při jejím psaní dodržujeme tato pravidla:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 226 | ![]() |
Typy komentářů | |
---|---|
Podobně jako např. v C/C++:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 227 | ![]() |
Kde uvádíme dokumentační komentáře | |
---|---|
Dokumentační komentáře uvádíme:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 228 | ![]() |
Značky javadoc | |
---|---|
javadoc můžeme podrobněji instruovat pomocí značek vkládaných do dokumentačních komentářů, např.:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 230 | ![]() |
Příklad zdrojového textu se značkami javadoc | |
---|---|
Zdrojový text třídy Window: /** * Klasse, die ein Fenster auf dem Bildschirm repräsentiert * Konstruktor zum Beispiel: * <pre> * Window win = new Window(parent); * win.show(); * </pre> * * @see awt.BaseWindow * @see awt.Button * @version 1.2 31 Jan 1995 * @author Bozo the Clown **/ class Window extends BaseWindow { ... } Příklad dokumentačního komentáře k proměnné: /** * enthält die aktuelle Anzahl der Elemente. * muss positiv und kleiner oder gleich der Kapazität sein **/ protected int count; Tyto a další příklady a odkazy lze vidět v původním materiálu JavaStyleGuide des IGE, odkud byly ukázky převzaty. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 231 | ![]() |
Spouštění javadoc | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 232 | ![]() |
Příklady | |
---|---|
Zdroják s dokumentačními komentáři - Komentáře Ukázkové spuštení javadoc javadoc -classpath . -d apidocs svet | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 233 | ![]() |
Distribuce aplikací | |
---|---|
Distribucí nemyslíme použití nástroje typu "InstallShield"..., ale spíše něčeho podobného tar/ZIPu
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 234 | ![]() |
Volby jar | |
---|---|
Volby JAR lze vypsat i spuštěním jar bez parametrů: | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 236 | ![]() |
jar - příklad | |
---|---|
Vezměme následující zdrojový text třídy JarDemo v balíku tomp.ucebnice.jar, tj. v adresáři c:\tomp\pb162\java\tomp\ucebnice\jar: Vytvoříme archív se všemi soubory z podadresáře tomp/ucebnice/jar (s volbou c - create, v - verbose, f - do souboru): Vzniklý .jar soubor lze prohlédnout/rozbalit také běžným nástrojem typu unzip, gunzip, WinZip, PowerArchiver nebo souborovým managerem typu Servant Salamander... Tento archív rozbalíme v adresáři /temp následujícím způsobem: | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 237 | ![]() |
Tvorba spustitelných archívů | |
---|---|
Vytvoříme jar s manifestem obsahujícím tento řádek: Main-Class: NázevSpouštěnéTřídy java -jar NázevBalíku.jar | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 239 | ![]() |
Vytvoření spustitelného archívu - příklad | |
---|---|
Nejprve vytvoříme soubor manifestu. Příklad jeho obsahu: | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 240 | ![]() |
Spuštění archívu - příklad | |
---|---|
Spuštění aplikace zabalené ve spustitelném archívu je snadné: java -jar jardemo.jar
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 241 | ![]() |
Další příklad spuštění jar | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 242 | ![]() |
Výjimky | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 243 | ![]() |
Co a k čemu jsou výjimky | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 244 | ![]() |
Syntaxe kódu s ošetřením výjimek | |
---|---|
Základní syntaxe:
Příklad - Otevření souboru může vyvolat výjimku Bloku try se říká hlídaný blok, protože výjimky (příslušného hlídaného typu) zde vzniklé jsou zachyceny. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 246 | ![]() |
Syntaxe metody propouštějící výjimku | |
---|---|
Pokud výjimka nikde v těle numůže vzniknout, překladač to zdetekuje a vypíše: ... Exception XXX is never thrown in YYY ... Příklad s propouštěnou výjimkou - Otevření souboru s propouštěnou výjimkou
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 247 | ![]() |
Reakce na výjimku | |
---|---|
Jak můžeme reagovat?
Výjimková pravidla:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 248 | ![]() |
Kaskády výjimek | |
---|---|
V některých blocích try mohou vzniknout výjimky více typů:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 249 | ![]() |
Kategorizace výjimek a dalších chybových objektů | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 250 | ![]() |
Vlastní hierarchie výjimek | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 251 | ![]() |
Klauzule finally | |
---|---|
Klauzule (blok) finally:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 252 | ![]() |
Odkazy | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 253 | ![]() |
Vstupy a výstupy v Javě | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 254 | ![]() |
Třída File | |
---|---|
Vytvoření konstruktorem - máme několik možností:
Testy existence a povahy souboru:
Test práv ke čtení/zápisu:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 257 | ![]() |
Třída File (2) | |
---|---|
Vytvoření souboru nebo adresáře:
Vytvoření dočasného (temporary) souboru:
Zrušení:
Přejmenování (ne přesun mezi adresáři!):
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 258 | ![]() |
Třída File (3) | |
---|---|
Další vlastnosti:
Blíže viz dokumentace API třídy File. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 259 | ![]() |
Práce s adresáři | |
---|---|
Klíčem je opět třída File - použitelná i pro adresáře Jak např. získat (filtrovaný) seznam souborů v adresáři? pomocí metody File[] listFiles(FileFilter ff) nebo podobné File[] listFiles(FilenameFilter fnf): FileFilter je rozhraní s jedinou metodou boolean accept(File pathname), obdobně FilenameFilter, viz Popis API java.io.FilenameFilter | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 260 | ![]() |
Práce s binárními proudy | |
---|---|
Vstupní jsou odvozeny od abstraktní třídy InputStream Výstupní jsou odvozeny od abstraktní třídy OutputStream | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 261 | ![]() |
Vstupní binární proudy | |
---|---|
Uvedené metody, kromě abstract byte read(), nemusejí být nutně v neabstraktní podtřídě překryty.
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 262 | ![]() |
Důležité neabstraktní třídy odvozené od InputStream | |
---|---|
java.io.FilterInputStream - je bázová třída k odvozování všech vstupních proudů přidávajících vlastnost/schopnost filtrovat poskytnutý vstupní proud. Příklady filtrů (ne všechny jsou v java.io!):
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 263 | ![]() |
Další vstupní proudy | |
---|---|
Příklad rekonstrukce objektů ze souborů
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 264 | ![]() |
Práce se znakovými proudy | |
---|---|
základem je abstraktní třída Reader, konkrétními implementacemi jsou:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 265 | ![]() |
Výstupní proudy | |
---|---|
nebudeme důkladně probírat všechny typy principy:
Příklady:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 266 | ![]() |
Konverze: znakové <-> binární proudy | |
---|---|
Ze vstupního binárního proudu InputStream (čili každého) je možné vytvořit znakový Reader pomocí
Podporované názvy znakových sad naleznete na webu IANA Charsets. Obdobně pro výstupní proudy - lze vytvořit Writer z OutputStream. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 267 | ![]() |
Odkazy | |
---|---|
Tutoriály k Java I/O: kapitola z Sun Java Tutorial Demo programy na serializaci (z učebnice): Serializace objektů | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 269 | ![]() |
Událostmi řízené programování v Javě | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 270 | ![]() |
Komponenty GUI v Javě | |
---|---|
V Javě lze psát přenositelné aplikace s "okenním" rozhraním - s GUI
V tomto kurzu budeme pracovat s moderním Swing GUI, což je součást JFC (Java Foundation Classes). Starší variantou - dosud živou v Javě verzí 1.1.x, je grafické rozhraní nad komponentami AWT (Abstract Windowing Toolkit). | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 271 | ![]() |
Událostmi řízené programování | |
---|---|
Základním principem tvorby aplikací s GUI je řízení programu událostmi. Netýká se však pouze GUI, je to obecnější pojem označující typ asynchronního programování, kdy je:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 272 | ![]() |
Řízení událostmi | |
---|---|
Postup (životní cyklus události):
Viz též příklad - První GUI aplikace. | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 273 | ![]() |
Kde to všechno je? | |
---|---|
Technicky jsou dotyčné třídy a rozhraní komponent definovány obvykle v balících:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 274 | ![]() |
Typy událostí vznikajících v GUI | |
---|---|
Události mohou souviset s uživatelskou akcí nad/s:
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 275 | ![]() |
Příklad - událost zavření okna | |
---|---|
Proč vůbec pomocí vnitřní třídy?
V následujícím úryvku kodu se: ...vytvoří jedna instance anonymní vnitřní třídy a ta se
předá/použije jako posluchač událostí.
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 277 | ![]() |
Totéž bez anonymity... | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 278 | ![]() |
Příklad | |
---|---|
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 279 | ![]() |
Další odkazy | |
---|---|
Tvorba Swing-GUI aplikací - Trail: Creating a GUI with JFC/Swing Tvorba appletů - Trail: Writing Applets Vytváření aplikací přístupných i uživatelům s omezeními:
Vynikající článek o GUI v Javě: Ray Toal: Developing Complex User Interface Applications in Java | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 280 | ![]() |
Písemky | |
---|---|
<subtitle>Obecné komentáře ke všem písemkám</subtitle>
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 281 | ![]() |
První písemka | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 282 | ![]() |
Druhá písemka | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 283 | ![]() |
Třetí (zkoušková) písemka | |
---|---|
| |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 284 | ![]() |
Pokusný slide | |
---|---|
textík <xi:include></xi:include>a ještě | |
HPI, Seminar Systemmodellierung SS2003 Programování v jazyce Java / 285 | ![]() |