PJV031 Přetypování (casting) Objekty, atributy, lokální proměnné, parametry a návratové hodnoty metod mají definovaný, neměnný typ. Jsou dva druhy typů:

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

ÚVOD DO C++ 3 TŘÍDY a objekty - POKRAČOVÁNÍ
SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
Třída Array Je součásti balíčku java.util Účelem je usnadnit práci s poli Metody – nejpoužívanější equel(),fill(),sort() a binarySearch() equels() Slouží.
Pole, ukazatele a odkazy
ÚVOD DO CPP 7 Dědičnost - pokračování
Algoritmy I Cvičení č. 2. Cíl hodiny Datové typy a přetypování (int, float, double, bool, char, long, short) Konstanty – Celočíselné Desítkové – 15, 0,
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Polymorfismus Dědičnost
Programování v C++ Cvičení.
Druhé cvičení Vytváření identifikátorů Datové typy
C++0x stručný náhled na nadcházející revizi standardu programovacího jazyka C++ (ISO/IEC 14882) Jan Ringoš.
J a v a Začínáme programovat Lucie Žoltá pole řetězec debugr.
J a v a Začínáme programovat Lucie Žoltá Přetěžování metod, rekurze.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
Objekty v CLIPSu RNDr. Jiří Dvořák, CSc.
C# - struktury, výčtové typy, pole
Druhá přednáška Datové typy a operátory Zapouzdření Pojem rozhraní
C# - datové typy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Seminář C++ 9. cvičení Šablony Ing. Jan Mikulka. Šablony ► template – vzory, podle kterých může překladač tvořit skupiny podobných tříd nebo funkcí, které.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Třída jako zdroj funkcionality
C# - Exceptions (výjimky)
Algoritmické konstrukce
Algoritmické konstrukce
C# - pointery Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Objektové programování
C# - funkce a procedury Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Základy objektově orientovaného programování Jiří Strach.
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
Počítače a programování 1 8.přednáška. Obsah přednášky Řetězce - deklarace a vytvoření Základní metody pro práci s řetezci Znaky - třída Character Základní.
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
PB161 Právo friend, přetěžování operátorů, přetypování PB161 | Friend, operátory PB161 – Programování v jazyce C++ Objektově Orientované Programování.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
Příklady v jazyku C – část 3
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
Šesté cvičení Výjimky Balíky.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
PJV011 X36PJV ( Programování v JaVě ) Cílem předmětu je probrat: - základy jazyka a systému Java - nejdůležitější standardní balíčky (packages j2sdk) Organizace.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Pokročilé programování v C++ (část B)
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část I.
Úvod do programování2 Vyučující: Mgr. Vítězslav Jersák Web: xjv.webnode.cz.
POSLOUPNOST test. ZKUSTE ODPOVĚDĚT Co je to komentář? Poznámky, které nám pomohou pochopit, když se k programu vrátíme po delší době, co jsme chtěli tou,
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
Překladače 6. Sémantická analýza
PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
Typ struktura (1) Datový typ struktura (struct) je agrego-vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou mít různé datové.
Y36PJC Programování v jazyce C/C++
Úvod do Pythonu – IO operace se soubory.
OOP - Objektově Orientované Programování
Y36PJC Programování v jazyce C/C++
Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: systematizují typovou kontrolu kompilátorem, vyjadřují jasněji smysl,
Překladače Syntaktická analýza
Java 8: Mary Had a Little Lambda
Polymorfismus = Mnohotvarost
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Reflexe jako introspekce
C# přehled vlastností.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Transkript prezentace:

PJV031 Přetypování (casting) Objekty, atributy, lokální proměnné, parametry a návratové hodnoty metod mají definovaný, neměnný typ. Jsou dva druhy typů: - primitivní ( boolean, char, byte, short, int, long, float, double ), - referenční - třídy, interfejsy a pole ( primitivní i referenční ). Přetypování je změna pohledu na objekt prostřednictvím reference jiného typu. Typ objektu je neměnný daný třídou, dle níž byl zkonstruován. Přetypovat potomka na předka lze přiřazením: Potomek y = new Potomek(…); Předek x = y ; /* anebo přímo */ x = new Potomek(…) ; Přetypovat předka na potomka lze jen tehdy je-li referovaný objekt typu potomka (či jeho potomka) takto: Potomek y = (Potomek) x ; Chybným přetypováním dojde při běhu k výjimce ClassCastException.

PJV032 Přístup k zastíněným atributům I když Potomek zastíní instanční resp. třídní atribut Předka, může Potomek k onomu zastíněnému (neprivátnímu) atributu přistoupit. Ekvivalentní formy (kde inst resp. cls je instanční resp. třídní atribut): takto k vlastnímu atributu: inst this.inst cls this.cls Potomek.cls takto k zastíněnému atributu: super.inst ((Predek) this).inst super.cls Predek.cls ((Predek) this).cls

PJV033 Přístup k zastíněným metodám I když Potomek zastíní instanční resp. třídní metodu Předka, může Potomek k onu zastíněnou (neprivátní) metodu zavolat. Ekvivalentní formy (kde inst( ) resp. cls( ) je instanční resp. třídní metoda ): takto k vlastním metodě: inst( ) this.inst( ) cls( ) this.cls( ) Potomek.cls( ) takto k zastíněné metodě: super.inst( ) super.cls( ) Predek.cls( ) ((Predek) this).cls( ) Tato forma avšak nezavolá přepsanou metodu předka, ale přepisující instanční potomka – čili objekt použije vždy svou instanční metodu : ((Predek) this).inst( ) je ekvivalentní this.inst( )

PJV034 Polymorfismus Jsou-li dva typy referencí (i nepřímo) ve vztahu předek - potomek, pak lze potomka referovat jako předka. Jsou tři možnosti: Předek Potomek nadtřída  podtřída interfejs <---- třída nadinterfejs  podinterfejs Tím se však zúží přístup jen ke členům (atributům a metodám), které jsou definovány v typu předka. To je velmi výhodné při zacházení s nehomogenními poli či kolekcemi objektů mající společného předka a tedy společná jména atributů a společné signatury metod. Jednotlivé objekty však mohou mít různé hodnoty atributů a podle svého skutečného typu i různá chování přepsaných metod.

PJV035 Výjimky (exceptions) Výjimky slouží k indikaci závad programu. Tvoří podstrom třídy Throwable, od které dědí vesměs všechny své metody. Výjimky pojednává: Kompilátor v čase kompilace (compile-time), který rozeznává výjimky: - kontrolované ( checked ) u nichž vyžaduje ošetření klauzulí try – catch či alespoň vyznačení v hlavičkách metod. Za tyto závady programátor zpravidla nemůže, ale měl by zajistit jejich zvládnutí. - nekontrolované ( unchecked ), u nichž nevyžaduje vyznačení ani ošetření. Tyto závady se považují za chyby, které programátor posléze odstraní. - pokud výjimka patří do stromu java.lang.RuntimeException, je nekontrolovaná, jinak je kontrolovaná. JVM v čase běhu (run-time) případně vytvoří objekt příslušného typu popisující vzniklou závadu, ten se tzv. vyhodí (throw) v naději, že se ve vhodné klauzuli try najde řešení, které problém zmírní nebo alespoň dobře popíše.

PJV036 Hierarchie výjimek java.lang.Object | |  --- java.lang.Throwable |  --- java.lang.Error | |  --- java.lang.VirtualMachineError | |  --- java.lang.Exception |  --- java.lang.RuntimeException | |  --- java.lang.ArithmeticException | |  --- java.lang.NullPointerException | |  --- java.lang.IndexOutOfBoundsException | |  --- java.io.IOException | |  --- java.net.SocketException | | |  --- java.net.ConnectException

PJV037 Třída Throwable Třída Throwable obsahuje několik užitečných metod pro: String toString( ) - výpis výjimky v textovém tvaru, String getMessage( ) - získání doprovodné zprávy z výjimky, výpis zásobníku pro vysledování volaných metod, manipulace s předchozími výjimkami. Ve stromu Throwable existuje také podstrom Error, který obsahuje třídy indikující těžké a neopravitelné chyby a to i systému Java.

PJV038 Výjimky Java má mechanizmus vytváření, vyhazování a odchytávání výjimek Klauzule try se skládá nejméně ze dvou bloků. Bloky jsou tří typů: hlídač - try (právě jeden) řešitel - catch (libovolný počet) uklízeč - finally (nanejvýš jeden) Klauzule try může mít tři tvary: try - catch - finally try - catch try - finally Klauzule try - může být vnořena do kteréhokoli bloku a tedy i do bloku jiné klauzule try.

PJV039 Výjimky Konkrétně: try {.... // hlídač - hlídá tento blok } catch ( xxxException ex ) { … } // řešitel - blok řešící xxx catch ( yyyException ex ) { … } // řešitel - blok řešící yyy catch ( zzzException ex ) { … } // řešitel - blok řešící zzz finally { … } // uklízeč - úklidový blok // následné příkazy (anebo ukončovací závorka nadbloku) Je-li uklízeč přítomen, pak za všech okolností dostane řízení těsně před ukončením zpracování klauzule - aby se dalo leccos uklidit. Řešitelé jsou specializováni na řešení určitých výjimek, což je dáno typem jejich parametru. V seznamu musejí být uváděni od specifického k obecnému. Jinak se stane specifický řešitel nedostupným kódem, což kompilátor nepřipouští.

PJV0310 Hlídač Hlídač dozírá, byla-li v bloku vyhozena výjimka (nezáměrně či záměrně): - Ne: Před odchodem z hlídaného bloku předá řízení uklízeči. - Ano: Další příkazy v try bloku se již neprovedou. Hlídač zjistí typ výjimky a procházením řešitelů shora dolů se snaží najít prvního kompetentního řešitele, tj. takového, jehož parametr je typem nebo nadtypem výjimky: - Nalezne-li ho, předá mu řízení. - Nenalezne-li řešitele, předá řízení uklízeči a pak nevyřešenou výjimku vyhodí do nadbloku. Je-li tím blokem obalová try klauzule postupuje se obdobně. Je-li tím blokem metoda, pak tato metoda vyhodí výjimku do příkazu metody odkud byla zavolána a tam se postupuje obdobně. Nenalezne-li se žádný kompetentní řešitel, vyhodí se výjimka do obalové klauzule JVM - odtud byla zavolána metoda main(String[ ] args) - pak JVM vypíše hlášení a ukončí běh.

PJV0311 Řešení výjimek Řešitel má prostřednictvím parametru referenci k aktuální výjimce i dalším proměnným a může situaci trochu napravit anebo alespoň řádně ohlásit. Nelze však nijak zařídit pokračování v nedokončeném hlídaném bloku. I když řešitel vůbec nic neudělá, je odchycená výjimka vyřešena. Vede-li odchod z bloků přes: – zavírací závorku, pak se řízení předá (event. po úklidu) následujícímu příkazu za klauzulí try - catch. – příkaz ( return, break, continue, throw), pak se řízení předá (event. po úklidu) onomu příkazu. I řešitelé a uklízeč mohou vyhodit nějakou výjimku - tu však zpracuje obalová try klauzule. Dokonce je možno sestrojit novou výjimku a jako její příčinu vložit tu původní.

PJV0312 Výjimky Metody a konstruktory mohou ve svých hlavičkách uvádět seznam možných vyhazovaných výjimek takto: public void m(... ) throws Výjimka1, Výjimka2,... { … } Pro neošetřené, kontrolované výjimky to uvést musejí. Tak již při kompilaci každá metoda upozorňuje volající metody na svoji nekompetentnost a je na volající metodě, jak se s tím vyrovná. Pozn.: Při jednoduchých pokusech se lze vyhnout nepřehledným klauzulím try připsáním throws Exception do hlaviček metod či konstruktorů. Seznam předpokládaných vyhazovaných výjimek se také přebírá do standardní dokumentace. Mechanizmus výjimek je časově náročný, měl by se využívat jen při závadách a nikoli pro časté testy podmínek.

PJV0313 Vlastní výjimky Lze také vytvářet vlastní výjimky jako potomky existujících. Většina výjimek nepřidává žádné vlastní atributy ani metody, jen definuje dva konstruktory (jeden bez parametrů, druhý s parametrem String pro uložení doprovodné zprávy ). Vše ostatní se dědí z třídy Throwable. Hlavním indikátorem závady je (často velmi dlouhé) jméno výjimky - vlastně tak vzniká integrovaný "chybník" pro run-time. Příklad ukazuje definice výjimky pro případ chyby v tabulce. public class TableException extends Exception { int row, col; public TableException(int row, int col) { // konstruktor vytvoří super("Wrong item at: "+row+" "+col); // zprávu this.row = row; this.col = col; // i explicitní indikaci } Výjimka se vytvoří a vyhodí např. takto: throw new TableException(333, 7);