Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Podobné dokumenty
Z. Kotala, P. Toman: Java ( Obsah )

10 Balíčky, grafické znázornění tříd, základy zapozdření

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

8 Třídy, objekty, metody, předávání argumentů metod

6 Příkazy řízení toku

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

1. Dědičnost a polymorfismus

1. Programování proti rozhraní

typová konverze typová inference

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Úvod do programovacích jazyků (Java)

5 Přehled operátorů, příkazy, přetypování

PB161 programování v C++ Výjimky Bezpečné programování

Objektově orientované programování v jazyce Python

Výčtový typ strana 67

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Java - výjimky. private void vstup() throws IOException {... }

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

Základy objektové orientace I. Únor 2010

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

Objektově orientované programování v jazyce Python

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Generické programování

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

9. Polymorfismus a rozhraní

Programování II. Abstraktní třída Vícenásobná dědičnost 2018/19

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd.

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Připravil: David Procházka. Programovací jazyk C++

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Výjimky. v C# a Javě

Algoritmizace a programování

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

3. Třídy. Základní pojmy objektového programování. Třídy

Dědičnost (inheritance)

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Sdílení dat mezi podprogramy

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Projekt do předmětu PAS. Textový editor

TÉMATICKÝ OKRUH Softwarové inženýrství

7. Datové typy v Javě

Objektové programování

Objektově orientované programování v PHP 5. Martin Klíma

Java Výjimky Java, zimní semestr

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

1 Strukturované programování

Seminář Java IV p.1/38

Obsah. Kapitola 1. Kapitola 2

IRAE 07/08 Přednáška č. 1

Abstraktní třída a rozhraní

Překladač a jeho struktura

RMI - Distribuované objekty v Javě

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Výjimky a ošetřování chyb v PHP. Who is General Failure and why is he reading my disk?!

PB161 Programování v jazyce C++ Přednáška 8

20. Projekt Domácí mediotéka

Programování II. Dědičnost změna chování 2018/19

Funkce - opakování. Funkce může přijímat parametry na vstupu a může vracet parametry na výstupu.

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Sada 1 - Základy programování

Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

PHP tutoriál (základy PHP snadno a rychle)

17. Projekt Trojúhelníky

Výjimky. Tomáš Pitner, upravil Marek Šabo

Dynamicky vázané metody. Pozdní vazba, virtuální metody

NMIN201 Objektově orientované programování 1 / :36:09

NPRG031 Programování II 1 / :25:46

TÉMATICKÝ OKRUH Softwarové inženýrství

Úvod do programovacích jazyků (Java)

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Programování v C++ 2, 4. cvičení

Programování II. Návrh programu II

dovolují dělení velkých úloh na menší = dekompozice

Datové typy strana 29

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Programování v C++ 1, 17. cvičení

PB161 Programování v jazyce C++ Přednáška 7

Programátorská příručka

PB161 Programování v jazyce C++ Přednáška 7

Výjimky. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Sada 1 - Základy programování

Software pro grafické terminály TERM10 a TERM03

5. STRUKTURA PLC PROGRAMU

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

Vyřešené teoretické otázky do OOP ( )

PODPROGRAMY PROCEDURY A FUNKCE

Vývojové nástroje jazyka Java

TÉMATICKÝ OKRUH Softwarové inženýrství

Transkript:

13 Rozhraní, výjimky Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám. Doba nutná k nastudování 2 2,5 hodiny 13.1 Rozhraní U dědičnosti jsme si uvedli, že je v jazyce Java povolena pouze jednoduchá dědičnost třída může mít vždy pouze jednoho předka. Rozhraní nabízí alternativu vícenásobné dědičnosti, neboť třída kromě jednoho předka může implementovat libovolný počet rozhraní. Pokud deklarujeme proměnnou typu rozhraní, tak daná proměnná může odkazovat na libovolný objekt, který implementuje dané rozhraní. Při deklaraci rozhraní používáme klíčové slovo interface a obsah rozhraní je omezen pouze na konstanty a abstraktní metody (neobsahují žádnou implementaci a mají modifikátor abstract) viz Obrázek 1. Rozhraní je podobné abstraktním třídám, ale účelem je specifikace chování objektů (např. faktura je splatná, zaměstnancům je nutné platit apod.). Obrázek 1: Příklad rozhraní Pokud během deklarace vynecháme modifikátory vedoucí k deklaraci konstant a abstraktních metod, budou tyto modifikátory doplněny automaticky viz Obrázek 2. Obrázek 2: Deklarace rozhraní KST/IZAPR - Základy programování blok 13, strana 1 (5) Michael Bažant

V třídě, která implementuje dané rozhraní, použijeme klíčové slovo implements a v diagramu tříd používáme pro znázornění implementace rozhraní přerušovanou spojnici mezi třídou a rozhraním. U rozhraní potom používáme zápis kurzívou a označení interface viz Obrázek 3. Obrázek 3: Diagram tříd s rozhraním 13.2 Výjimky zachycení a zpracování Programovací jazyk Java obsluhuje chyby a jiné mimořádné události pomocí výjimek. Výjimka je událost, ke které dochází při běhu programu a která narušuje normální průběh instrukcí programu. Výhodou řešení chyb v programech je zejména to, že pomocí výjimek máme možnost oddělit kód obsluhy chyb od běžného kódu a seskupovat a rozlišovat jednotlivé typy chyb. Když dojde k chybě uvnitř metody, vytvoří metoda objekt a předá jej systému runtime. Tento objekt, označovaný jako objekt výjimky, obsahuje informace o chybě včetně jejího typu a stavu programu při výskytu chyby. Vytvoření objektu výjimky a jeho předání systému runtime se označuje jako způsobení výjimky (throw an exception). Poté co metoda způsobí výjimku, pokusí se systém runtime najít nějaký způsob, jak ji zpracovat. Sada možností pro zpracování výjimky má podobu uspořádaného seznamu metod, jejichž volání vedlo k metodě, kde k chybě došlo. Hledání způsobu jak výjimku vyřešit začíná v metodě, kde se chyba vyskytla a pokračuje zásobníkem volání v opačném pořadí k pořadí volání metod. Při nalezení příslušné obsluhy předá systém runtime výjimku této obsluze. Vhodnost obsluhy výjimky se určuje podle toho, zda typ objektu způsobené výjimky odpovídá typu, který obsluha dokáže zpracovat. O zvolené obsluze výjimky se říká, že zachycuje výjimku (catch the exception). Pokud systém runtime prohledá zásobník volání a nenalezne přitom vhodnou obsluhu výjimky, dojde k ukončení systému runtime a programu jako takového. V jazyce Java rozlišujeme tři základní druhy výjimek: Chyby (error) tyto výjimečné stavy mají příčinu mimo aplikaci a aplikace je obvykle nemůže předpokládat a vyřešit (např. porucha hardware, selhání operačního systému apod.). KST/IZAPR - Základy programování blok 13, strana 2 (5) Michael Bažant

Kontrolované výjimky (checked exception) jedná se o výjimečné stavy, které by správně napsaná aplikace měla předpokládat a vyrovnat se s nimi (např. pokus o čtení ze souboru, který neexistuje apod.) Nekontrolované výjimky (unchecked exception), někdy také označované jako výjimky při běhu - tyto výjimky mají příčinu uvnitř aplikace a aplikace je obvykle nemůže předpokládat a vyřešit. Obvykle znamenají programátorskou chybu, například logické chyby nebo nesprávně použité rozhraní API. U těchto výjimek je vhodné odstranit chyby ve zdrojovém kódu, které vedou na výskyt výjimek tohoto typu (např. při pokusu volání metody objektu, přičemž referenční proměnná na žádný objekt neodkazuje výjimka NullPointerException apod.). Hierarchie tříd, do nichž patří jednotlivé výše uvedené typy výjimek je znázorněna na obrázku viz Obrázek 4. Obrázek 4: Hierarchie tříd výjimek Při konstrukci obsluhy výjimky uzavíráme kód, který by mohl způsobit výjimku, do bloku try-catch. V rámci tohoto bloku může být uveden jeden nebo i více příkazů, které mohou způsobit výjimku. Pokud dojde k výskytu výjimky uvnitř bloku try, zpracuje tuto výjimku obsluha, která je k ní přidružena v bloku catch. Bloků catch může být uvedeno i více pro každý typ výjimky zvlášť nebo může být k dispozici i jen jeden blok catch s předkem uvažovaných výjimek viz Obrázek 5. V bloku catch je možné vypsat do konzole bližší informace týkající se výjimky, pro tuto operaci se často používá následující příkaz: System.err.println(); KST/IZAPR - Základy programování blok 13, strana 3 (5) Michael Bažant

Obrázek 5: Blok try a několik bloků catch 13.2.1 Blok finally Blok finally je proveden vždy, když je ukončen blok try a to i v případě, kdy dojde k výskytu výjimky viz Obrázek 6. Obrázek 6: Blok finally 13.3 Výjimky způsobení výjimek Aby bylo možné výjimku zachytit, musí být nejprve výjimka nějakým kódem způsobena. Výjimku může způsobit libovolný kód ať již používaný z API nebo vlastní kód programátora. Výjimky se způsobují pomocí příkazu throw, za kterým následuje instance libovolného potomka třídy Throwable viz Obrázek 7. V tomto obrázku je také použito klíčové slovo throws v deklaraci metody. Toto klíčové slovo není nutné uvádět vždy, je vyžadováno pouze u kontrolovaných výjimek. KST/IZAPR - Základy programování blok 13, strana 4 (5) Michael Bažant

Obrázek 7: Způsobení výjimky Otázky na procvičení 1. Co platí pro kontrolované výjimky? 2. Kdy se používají nekontrolované výjimky? 3. Jak lze vytvořit vlastní třídu, která bude sloužit pro vytváření objektů nekontrolovaných výjimek? 4. Jak dochází k vyvolání výjimky? 5. Pokud je deklarováno, že metoda může vracet více výjimek, jak taková deklarace vypadá? Odkazy a další studijní prameny 1. Java Tutorial - http://docs.oracle.com/javase/tutorial/ KST/IZAPR - Základy programování blok 13, strana 5 (5) Michael Bažant