Programování v jazyku Java hierarchie tříd, přetypování, výjimky

Rozměr: px
Začít zobrazení ze stránky:

Download "Programování v jazyku Java hierarchie tříd, přetypování, výjimky"

Transkript

1 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Programování v jazyku Java hierarchie tříd, přetypování, výjimky BI-PJV Programování v jazyku Java Katedra teoretické informatiky Miroslav Balík Fakulta informačních technologií České vysoké učení technické

2 Třídy opakování pojmů I package truhlar.kostky; import java.awt.color; public class Hranol extends PraKostka { protected int sirka, vyska, hloubka; public Hranol (int sirka, int vyska, int hloubka, Color barva, TypKostky TYP_KOSTKY) { super (barva, TYP_KOSTKY); this.sirka = sirka; this.vyska = vyska; this.hloubka = hloubka; } public int getsirka() { return sirka; } public void setsirka(int sirka) { if (sirka > 0) { this.sirka = sirka; } else { } } 1. balíček 2. třída 3. atribut 4. metoda 5. předek 6. setter 7. getter 8. konstruktor 9. reference na předka 10.reference na mne throw new IllegalArgumentException("Spatna sirka"); Ing. Miroslav Balík, Ph.D. - BI-PJV- 03 2

3 Třídy opakování pojmů II /** * Vraci objem kostky v cm<sup>3</sup> objem public double getobjem() { 1. komentář 2. dokumentační komentář 3. zastínění metody 4. knihovna Math return sirka * vyska * hloubka * Math.pow(getTypKostky().getROZMER(), 3); public double getplocha() { return 2 * (sirka * hloubka + sirka * vyska + hloubka * vyska) * gettypkostky().getrozmer() * gettypkostky().getrozmer(); } } //konec třídy Ing. Miroslav Balík, Ph.D. - BI-PJV- 03 3

4 Hierarchie tříd, definice Třída Tpod, která je podtřídou třídy Tnad, dědí vlastnosti nadtřídy Tnad a rozšiřuje je o nové vlastnosti; některé zděděné vlastnosti mohou být v podtřídě modifikovány Pro instanční metody to znamená: každá metoda třídy Tnad je i metodou třídy Tpod, v podtřídě však může mít jinou implementaci (může být zastíněna - override) v podtřídě mohou být definovány nové metody Pro strukturu objektu to znamená: instance třídy Tpod mají všechny členy třídy Tnad a případně další Ing. Miroslav Balík, Ph.D. - BI-PJV- 03 4

5 Hierarchie tříd, vlastnosti Pro referenční proměnné to znamená: proměnné typu Tnad může být přiřazena reference na objekt typu Tpod na objekt referencovaný proměnnou typu Tnad lze vyvolat pouze metodu deklarovanou ve třídě Tnad; jde-li však o objekt typu Tpod, metoda se provede tak, jak je dáno třídou Tpod hodnotu referenční proměnné typu Tnad lze přiřadit referenční proměnné typu Tpod pouze s použitím přetypování, které zkontroluje, zda referencovaný objekt je typu Tpod Vztah nadtřída podtřída je tranzitivní jestliže je x nad třídou y a y je nad třídou z, pak je x nadtřídou z Ing. Miroslav Balík, Ph.D. - BI-PJV- 03 5

6 Hierarchie tříd v dokumentaci V on-line dokumentaci jazyka Java týkající se třídy ArrayList najdeme následující obrázek: java.lang.object +--java.util.abstractcollection +--java.util.abstractlist +--java.util.arraylist Tento obrázek vyjadřuje, že: třída ArrayList ( definovaná v balíku java.util ) je podtřídou třídy AbstractList třída AbstractList je podtřídou třídy AbstractCollection třída AbstractCollection je podtřídou nejvyšší třídy java.lang.object Ing. Miroslav Balík, Ph.D. - BI-PJV- 03 6

7 Třída Object Pokud v definici třídy není explicitně uvedena nadtřída, je jako nadtřída automaticky použita třída Object, metody z třídy Object jsou tedy zděděny ve všech třídách (definovaná v java.lang): 1. class X {} je ekvivalentní s class X extends Object {} některé metody třídy Object: 2. public boolean equals(object o); // porovnává objekt s parametrem 3. public String tostring(); // vrací textovou informaci o objektu 4. public int hashcode(); // vrací jednoznačný hešovací kód objektu 5. protected Object clone(); // vytváří kopii objektu Ing. Miroslav Balík, Ph.D. - BI-PJV- 03 7

8 Metody tostring, equals Každá třída (kromě jediné) v Javě je potomkem třídy Object, která implementuje několik základních metod. Základní jsou metody tostring a equals. public String tostring(){ return getclass().getname() + "@" + Integer.toHexString(hashCode()); } výsledkem volání x.tostring( ) je řetěz reprezentace objektu x, metodou je zavedena implicitní typová konverze z typu objektu x na řetězec, použitá např. při výpisu objektu public boolean equals(object obj) { return (this == obj); } Pozor: standardní chování neporovnává položky Ing. Miroslav Balík, Ph.D. - BI-PJV- 03 8

9 Vlastnosti metody equals bez přepsání Každá třída (kromě jediné) v Javě je potomkem třídy Object, která implementuje několik základních metod. Základní jsou metody tostring a equals. public class ObdelnikTest { první public static void main(string[] args) { Obdelnik prvni = new Obdelnik(5,7); Prvni: bi-pjv.obdelnik@11b86e7 Obdelnik druhy = new Obdelnik(5,7); System.out.println("Prvni: " + prvni); System.out.println("Stejne? "+(prvni==druhy)); false false } System.out.println("Stejne?"+prvni.equals(druhy)); } druhý Ing. Miroslav Balík, Ph.D. - BI-PJV- 03 9

10 Zastínění metod equals a tostring public String tostring(){ return "Obdelnik: "+sirka+" x "+vyska; } public boolean equals(object o){ if(o = = NULL)return false; if(!(o instanceof Obdelnik))return false; // porovnam jen s obdelniky Obdelnik obd = (Obdelnik) o; //pretypovani return (sirka == obd.sirka)&&(obd.vyska==vyska); } Ing. Miroslav Balík, Ph.D. - BI-PJV

11 Vlastnosti metody equals po přepsání Každá třída (kromě jediné) v Javě je potomkem třídy Object, která implementuje několik základních metod. Základní jsou metody tostring a equals. public class ObdelnikTest { první public static void main(string[] args) { Obdelnik prvni = new Obdelnik(5,7); Prvni: Obdelnik: 5 x 7 Obdelnik druhy = new Obdelnik(5,7); System.out.println("Prvni: " + prvni); System.out.println("Stejne? "+(prvni==druhy)); false true } System.out.println("Stejne?"+prvni.equals(druhy)); } druhý Ing. Miroslav Balík, Ph.D. - BI-PJV

12 Polymorfismus, zadání motivačního příkladu Vytvořme základ vektorového kreslícího programu Vektorový editor? Jaký jiný? Rastrový GUI bude později Vytvoříme hierarchii objektů, které bude možné kreslit a budeme se věnovat jejich vztahům GUI - Graphical user interface, grafické uživatelské rozhraní Ing. Miroslav Balík, Ph.D. - BI-PJV

13 Základní objekty Ing. Miroslav Balík, Ph.D. - BI-PJV

14 Objekty obdélník bod úsečka trojúhelník domeček komplexní, složený objekt mnohé další... Objekty v editoru budou odpovídat instancím tříd, které popíší vlastnosti a chování těchto objektů. Ing. Miroslav Balík, Ph.D. - BI-PJV

15 Vlastnosti = atributy objektů Společné vlastnosti umístění v obrázku pozice středu, těžiště pozice levého horního bodu pozice charakteristického bodu barva velikost? co je to velikost pro bod? pro obdélník? pro trojúhelník? specifické pro daný typ objektu typ výplně jakou má výplň bod? jakou úsečka? Jde o vlastnost společnou jen některým objektům Ing. Miroslav Balík, Ph.D. - BI-PJV

16 Popis chování = metody metody pro nastavení a získání atributů objektů settery: nastavení barvy, pozice,... gettery: zjištění šířky, výšky,... metody pro komplexní práci s objekty posun rotace zjištění vzdálenosti od vybraného bodu Ing. Miroslav Balík, Ph.D. - BI-PJV

17 Společná nadtřída všech grafických obj. název např. GrO společné vlastnosti všech potomků : barva pozice a jistě i další (úhel pootočení, měřítko zvětšení,...) společné chování všech potomků: umí nastavit a získat barvu umí se posunout umí se vykreslit Ing. Miroslav Balík, Ph.D. - BI-PJV

18 UML, Unified Modeling Language grafický jazyk pro vizualizaci, specifikaci, navrhování a dokumentaci programových systémů strukturní diagramy: diagram tříd diagram komponent composite structure diagram diagram nasazení diagram balíčků diagram objektů, též diagram instancí diagramy chování: diagram aktivit diagram užití stavový diagram diagramy interakce: sekvenční diagram,diagram komunikace,interaction overview diagram,diagram časování Ing. Miroslav Balík, Ph.D. - BI-PJV

19 GrO obecný grafický objekt diagram třídy: Název třídy, kurzíva = abstraktní třída Atributy Metody Název metody kurzívou = abstraktní metoda Ing. Miroslav Balík, Ph.D. - BI-PJV

20 Bod public class Bod extends GrO{ public Bod(Color c, Point p){ super(c,p); public void kreslise(graphics g) { Color c = g.getcolor(); //uloz si barvu pera g.setcolor(barva); //nastav svou barvu g.filloval(pozice.x-2, pozice.y-2, 4,4); //bod je takove malé kolecko g.setcolor(c); //obnov barvu } } Ing. Miroslav Balík, Ph.D. - BI-PJV

21 Je Usecka potomek Bodu? Předek či potomek + Usecka rozšiřuje Bod o jeden jeho konec - Usecka nevyužije ani jednu metodu Bodu - ISA vztah:?usecka je Bod? NE Usecka není potomkem Bodu Je Obdelnik potomkem Usecky? ISA vztah NE Je Obdelnik potomkem Ctverce nebo naopak? Obdelnik rozšiřuje Ctverec o další rozměr, ale není Ctverec Ctverec je Obdelnik, který má sířku i výšku stejnou Ing. Miroslav Balík, Ph.D. - BI-PJV

22 Doporučení pro návrh tříd Třída jasně definujte povinnosti/zodpovědnost měla by dělat jednu věc a dělat ji dobře Třída SeznamGrO představuje seznam grafických objektů, reprezentovaných třídou GrO a jejími potomky. pozor na božské třídy, které všechno ví a všechno umí uvažujte na úrovni abstraktních datových typů ADT ADT: zakrývá implementační detaily, související věci dává k sobě, samopopisné rozhraní umožňuje eliminovat a lépe odhalovat chyby Specifikujte kontrakt objektu invarianty (vlastnosti neměnné během vykonávání algoritmu) interakce s okolím kontrakty jednotlivých metod Ing. Miroslav Balík, Ph.D. - BI-PJV

23 Dědičnost - výhody Jednotné zacházení s více třídami všechny GrO mají barvu a metodu pro její změnu stejné chování kolekce GrO bude obsahovat různé objekty, ale všechny se umí vykreslit různé implementace, stejná funkce mechanizmus pro realizaci polymorfismu Omezení duplicit kódu společné rysy skupiny tříd sdílejí definici a popř. implementaci (např. barva a pozice u GrO základní třída definuje společné rysy na jednom místě odvozené třídy definují své specifické rysy Ing. Miroslav Balík, Ph.D. - BI-PJV

24 Použití dědičnosti Substituční princip (Barbara Liskov) použití dědičnosti pouze pokud je (ISA) podtřída skutečně specializací nadtřídy všude, kde lze použít nějaká třída, musí jít použít i její podtřída, aniž by uživatel poznal rozdíl netýká se jen syntaxe, ale i sémantiky (tu je nutné vhodně popsat) podtřída musí dodržovat kontrakt nadtřídy Vztah (ISA) musí být trvalý Ing. Miroslav Balík, Ph.D. - BI-PJV

25 Zásady návrhu dědičnosti Zvažte: Jaká má být viditelnost atributů, metod a dalších prvků? Které metody mají být virtuální (lze je přepsat v potomkovi, not final)? Které metody mají být abstraktní? Má metoda kreslise v GrO vypsat chybu nebo být abstraktní a kreslení delegovat na potomka? Nesnížíme příliš flexibilitu pokud zakážeme dědičnost (final class)? Hierarchie tříd společné věci přesunout co nejvýše každá abstraktní třída a rozhraní by měly mít alespoň dva potomky hluboká hierarchie zvyšuje paměťové a časové nároky, snižuje přehlednost doporučená hloubka asi 3 úrovně. Ing. Miroslav Balík, Ph.D. - BI-PJV

26 Diagram tříd Trojúhelník je potomkem O2D Chaloupka obsahuje atribut strecha typu Trojúhelník - kompozice Ing. Miroslav Balík, Ph.D. - BI-PJV

27 Diagram tříd Kam bychom zařadili textový řetězec? mnohoúhelník? městečko? Ing. Miroslav Balík, Ph.D. - BI-PJV

28 Implementace GrO public abstract class GrO { protected Color barva; protected Point pozice; public GrO(Color c, Point p){ barva = c; pozice = p; } public abstract void kreslise(graphics g); /** the barva */ public Color getbarva() {... Ing. Miroslav Balík, Ph.D. - BI-PJV

29 Implementace třídy Usecka public class Usecka extends GrO { private Point druhybod; public Usecka(Color c, Point pocatek, Point konec) { super(c, pocatek); druhybod = konec; public void kreslise(graphics g) { Color c = g.getcolor(); //uloz si barvu pera g.setcolor(barva); //nastav svou barvu g.drawline(pozice.x,pozice.y,druhybod.x,druhybod.y); g.setcolor(c); //obnov barvu } // + getter a setter na druhybod Ing. Miroslav Balík, Ph.D. - BI-PJV

30 Implementace třídy Obdelnik 1.část import java.awt.point; import static model.typysrafovani.*; public class Obdelnik extends O2D { private int sirka, vyska; public Obdelnik(TypySrafovani ts, Color c, Point p, int sirka, int vyska) { } super(ts, c, p); this.sirka = sirka; this.vyska = public double getobsah() { return (double) sirka * vyska; //proc se pretypovava? Kolik by byl vysledek pro sirka = vyska = bez a s pretypovanim? } Ing. Miroslav Balík, Ph.D. - BI-PJV

31 Implementace třídy Obdelnik public double getobvod() { return sirka + vyska; public void kreslise(graphics g) { Color c = g.getcolor(); //uloz si barvu pera g.setcolor(barva); //nastav svou barvu g.drawrect(pozice.x, pozice.y, sirka, vyska); switch (getsrafovani()) { } case VODOROVNEPRUHY: for (int y = pozice.y; y < pozice.y + vyska; y += 5) { } break;... g.drawline(pozice.x, y, pozice.x + sirka, y); case PLNE: g.fillrect(pozice.x, pozice.y, sirka, vyska); break; g.setcolor(c); //obnov barvu }... Ing. Miroslav Balík, Ph.D. - BI-PJV

32 Využití dědičnosti - polymorfismus Vytvořme si třídu pro zobrazování grafických objektů = potomků GrO (více v projektu k přednášce a navazujících přednáškách) public class KresliciPlocha extends JToggleButton { private GrO[] pole; public KresliciPlocha() { super(); pole = new GrO[8]; Pole je typováno na společného předka. pole[0] = new Trojuhelnik(TypySrafovani.NIC, Color.RED, new Point(20, 30), new Point(40, 200), new Point(100, 100)); pole[1] = new Ctverec(TypySrafovani.PLNE, Color.BLUE, new Point(50, 250), 60); Díky polymorfismu (důsledkem dědění) můžeme do pole GrO vkládat libovolného potomka. Ing. Miroslav Balík, Ph.D. - BI-PJV

33 Využití dědičnosti - polymorfismus pole[2] = new Bod(Color.MAGENTA, new Point(150, 100)); pole[3] = new Usecka(new Color(0x964B00), new Point(100, 50), new Point(300, 100)); } } pole[4] = new Chaloupka(... public void paintcomponent(graphics g) { super.paintcomponent(g); g.setcolor(color.gray); g.fillrect(0,0,500,500); for (GrO gro : pole) { } gro.kreslise(g); Díky virtuální vazbě se zavolají správné metody. Ing. Miroslav Balík, Ph.D. - BI-PJV

34 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( ); Usecka u = new Usecka(...) Předek x = y ; /* anebo přímo */ x = new Potomek( ) ; GrO g = u ; /* anebo přímo */ g = new Usecka( ) ; Ing. Miroslav Balík, Ph.D. - BI-PJV

35 Přetypování ( casting ) Přetypovat předka na potomka lze jen tehdy je-li referovaný objekt typu potomka ( či jeho potomka ) takto: Potomek y = (Potomek) x ; GrO g = new Usecka(...); g.getdruhybod(); // nelze, způsobí chybu při překladu, GrO nemá tuto metodu nutno přetypovat Point p = ((Usecka)g).getDruhyBod(); // přetypování má nejnižší prioritu nutno závorkovat při použití ve složitějším výrazu Chybným přetypováním dojde při běhu k výjimce ClassCastException. Ing. Miroslav Balík, Ph.D. - BI-PJV

36 Přístup k zastíněným atributům I když Potomek zastíní instanční resp. třídní atribut Predka, 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 Ing. Miroslav Balík, Ph.D. - BI-PJV

37 Přístup k přepsaným metodám I když Potomek přepíše instanční resp. třídní metodu Predka, může Potomek k onu zastíněnou ( neprivátní ) metodu zavolat. Ekvivalentní formy (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( ) Ing. Miroslav Balík, Ph.D. - BI-PJV

38 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, metodám, vnitřním třídám a interfejsům ), které jsou definovány v typu předka. To je velmi výhodné při zacházení s heterogenní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. Ing. Miroslav Balík, Ph.D. - BI-PJV

39 RTTI ( Run Time Type Identification ) Zjistit zda objekt patří právě k této třídě lze takto: ref.getclass().equals(someclass.class) Zjistit zda dva objekty jsou stejného typu lze takto: ref1.getclass() == ref2.getclass() případně: ref1.getclass().equals(ref2.getclass()) Primitivy mají také literály tříd, které jsou ekvivalenty obalových typů: boolean.class == Boolean.TYPE byte.class == Byte.TYPE int.class == Integer.TYPE... double.class == Double.TYPE void.class == Void.TYPE Ing. Miroslav Balík, Ph.D. - BI-PJV

40 RTTI ( Run Time Type Identification ) Každý typ objekt má referenci k jedinému objektu typu java.lang.class, který popisuje jeho třídu. Získat tuto referenci lze dvěma způsoby: 1. SomeType ref = new SomeClass( ); Class c = ref.getclass( ); // using general method 2. Class c = SomeType.class; // using class literal Pomocí c lze získat informace o typu a také o hodnotách atributů objektů daného typu. Takto lze získat informaci zda lze objekt referovat určitým typem, což pak umožňuje bezpečné přetypování: c.isinstance( ref ) ref instanceof SomeType - metoda vrací boolean - operátor vrací boolean Ing. Miroslav Balík, Ph.D. - BI-PJV

41 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. Kompilátor v čase kompilace ( compile-time )rozeznává výjimky: - kontrolované ( checked ) u nichž vyžaduje ošetření klauzulí try catch anebo 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 programátorovy chyby, které 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. Ing. Miroslav Balík, Ph.D. - BI-PJV

42 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 Ing. Miroslav Balík, Ph.D. - BI-PJV

43 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. Ing. Miroslav Balík, Ph.D. - BI-PJV

44 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. Ing. Miroslav Balík, Ph.D. - BI-PJV

45 Výjimky 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 je specifický řešitel nedostupným kódem, což kompilátor nepřipouští. Ing. Miroslav Balík, Ph.D. - BI-PJV

46 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. Ing. Miroslav Balík, Ph.D. - BI-PJV

47 Ř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 ( dynamicky ) obalová try klauzule. Též lze sestrojit novou výjimku a jako její příčinu vložit tu původní. Ing. Miroslav Balík, Ph.D. - BI-PJV

48 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 určitou 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. Ing. Miroslav Balík, Ph.D. - BI-PJV

49 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 runtime. Před vytvořením vlastní výjimky zvažte 1. zda je nutné vytvářet výjimku, či lze problém vyřešit na místě 2. zda není již vytvořená dostatečně vhodná výjimka (např. IllegalArgumentException) 3. zda nová výjimka bude potomek RuntimeException Ing. Miroslav Balík, Ph.D. - BI-PJV

50 Vlastní výjimky 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 ); this.row = row; this.col = col; } Výjimka se vytvoří a vyhodí např. takto: throw new TableException( 333, 7 ); // zprávu // i explicitní indikaci Ing. Miroslav Balík, Ph.D. - BI-PJV

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

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ) 29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ) Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka

Více

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd 7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

Třídy a dědičnost. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Třídy a dědičnost. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické Třídy a dědičnost A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické Dnešní témata Dědičnost Kompozice Typ String Třídy a dědičnost Dopravní prostředek Vzdušný Pozemní Vodní

Více

9. přednáška - třídy, objekty

9. přednáška - třídy, objekty třída String a její použití kolekce, typované kolekce 9. přednáška - třídy, objekty Algoritmizace (Y36ALG), Šumperk - 9. přednáška 1 Třída String Objekty knihovní třídy String jsou řetězy znaků Od ostatních

Více

Teoretické minimum z PJV

Teoretické minimum z PJV Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov

Více

typová konverze typová inference

typová konverze typová inference Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie

Více

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

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

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/04.0006

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/04.0006 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/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem

Více

KTE / ZPE Informační technologie

KTE / ZPE Informační technologie 4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší

Více

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

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 Seminář Java Výjimky Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Výjimky 1/ 25 Výjimky Co a k čemu jsou výjimky výjimka je mechanizmus umožňující psát robustní, spolehlivé

Více

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

11.5.2012. 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

11.5.2012. 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 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií

Více

1. Dědičnost a polymorfismus

1. Dědičnost a polymorfismus 1. Dědičnost a polymorfismus Cíl látky Cílem této kapitoly je představit klíčové pojmy dědičnosti a polymorfismu. Předtím však je nutné se seznámit se základními pojmy zobecnění neboli generalizace. Komentář

Více

Principy objektově orientovaného programování

Principy objektově orientovaného programování Principy objektově orientovaného programování Třídy a objekty doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz C E T

Více

PŘETĚŽOVÁNÍ OPERÁTORŮ

PŘETĚŽOVÁNÍ OPERÁTORŮ PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako

Více

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

11 Diagram tříd, asociace, dědičnost, abstraktní třídy 11 Diagram tříd, asociace, dědičnost, abstraktní třídy 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 diagramům tříd, asociaci,

Více

Seminář Java IV p.1/38

Seminář Java IV p.1/38 Seminář Java IV Seminář Java IV p.1/38 Rekapitulace Deklarace tříd Proměnné, metody, konstruktory, modifikátory přístupu Datové typy primitivní, objektové, pole Dědičnost Řídící konstrukce Podmínky, cykly

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

Generické programování

Generické programování Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =

Více

Třídy a dědičnost. BD6B36PJV Fakulta elektrotechnická České vysoké učení technické

Třídy a dědičnost. BD6B36PJV Fakulta elektrotechnická České vysoké učení technické Třídy a dědičnost BD6B36PJV Fakulta elektrotechnická České vysoké učení technické Třídy a dědičnost Dopravní prostředek Vzdušný Pozemní Vodní Plazivý Čtyřnohý Motorový AUTA BD6B36PJV-2 2 Dědičnost základní

Více

Abstraktní datové typy: zásobník

Abstraktní datové typy: zásobník Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní

Více

Z. Kotala, P. Toman: Java ( Obsah )

Z. Kotala, P. Toman: Java ( Obsah ) Z. Kotala, P. Toman: Java ( Obsah ) 13. Výjimky Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka je vyvolána například

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém

Více

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

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 Ú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 KAPITOLA 1 Na úvod o Javě 15 Počítačový program 15 Vysokoúrovňový programovací

Více

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.

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. 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

Více

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

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Třídy, polymorfismus A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Polymorfizmus ~ vícetvarost Polymorfizmus základní vlastnost objektového přístupu základní princip polymorfismu:

Více

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

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20 Obsah 5 Obsah Předmluva k aktuálnímu vydání 15 1 Úvod k prvnímu vydání z roku 2000 16 Typografické a syntaktické konvence................ 20 2 Základní pojmy 21 2.1 Trocha historie nikoho nezabije................

Více

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

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39 Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy

Více

Java Výjimky Java, zimní semestr

Java Výjimky Java, zimní semestr Java Výjimky 1 Výjimky (exceptions) hlášení a ošetření chyb výjimka signalizuje nějaký chybový stav výjimka = instance třídy java.lang.throwable dvě podtřídy java.lang.error a java.lang.exception konkrétní

Více

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

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

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod 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 třídám a objektům, instančním

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

Abstraktní třída a rozhraní

Abstraktní třída a rozhraní Abstraktní třída a rozhraní Někdy se může stát, zejména při psaní v hierarchické struktuře hodně nadřazených tříd, že tušíme, že bude ve zděděných třídách vhodné použít nějakou metodu. Tuto metodu ještě

Více

14.4.1. Typický prvek kolekce pro české řazení

14.4.1. Typický prvek kolekce pro české řazení 14.4. Co všechno by měl mít typický prvek kolekce 177 Poznámka: Třídy BigInteger, BigDecimal a Date budou vysvětleny v částech [15./183, [16./185 a [18.1./204. 14.4.1. Typický prvek kolekce pro české řazení

Více

Vytváření a použití knihoven tříd

Vytváření a použití knihoven tříd Vytváření a použití knihoven tříd doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Prostory jmen motivace spolupráce

Více

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

Programování v Javě I. Leden 2008

Programování v Javě I. Leden 2008 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory

Více

Třída jako zdroj funkcí

Třída jako zdroj funkcí Třída jako zdroj funkcí Třída v jazyku Java je programová jednotka tvořená množinou identifikátorů, které mají třídou definovaný význam Základem uživatelského programu v jazyku Java je třída, ve které

Více

Programování v Javě I. Únor 2009

Programování v Javě I. Únor 2009 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Únor 2009 Radek Kočí Seminář Java Programování v Javě (1) 1/ 44 Téma přednášky Datové typy Deklarace třídy Modifikátory

Více

Soubor jako posloupnost bytů

Soubor jako posloupnost bytů Soubory Soubor je množina údajů uložená ve vnější paměti počítače, obvykle na disku Pro soubor jsou typické tyto operace. otevření souboru čtení údaje zápis údaje uzavření souboru Přístup k údajům (čtení

Více

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.

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. 23. Třídy, generické třídy, instance, skládání, statické metody a proměnné. Zapouzdření, konstruktory, konzistence objektu, zpřístupnění vnitřní implementace, modifikátory public a private. Polymorfismus,

Více

Seminář Java II p.1/43

Seminář Java II p.1/43 Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii

Více

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

3. Třídy. Základní pojmy objektového programování. Třídy 3. Třídy Základní pojmy objektového programování Jak už víme, je Java objektovým programovacím jazykem. V úvodu této kapitoly si objasníme základní pojmy objektové teorie. Objekt představuje souhrn dat

Více

Projekty pro výuku programování v jazyce Java

Projekty pro výuku programování v jazyce Java JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil

Více

20. Projekt Domácí mediotéka

20. Projekt Domácí mediotéka Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý

Více

Programování v jazyku Java základy OOP

Programování v jazyku Java základy OOP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Programování v jazyku Java základy OOP BI-PJV Programování v jazyku Java Katedra teoretické informatiky Miroslav Balík Fakulta informačních

Více

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní Základy jazyka C# doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Architektura.NET Historie Vlastnosti

Více

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18 Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: - systematizují typovou kontrolu kompilátorem, - vyjadřují jasněji smysl, zlepšují čitelnost a robustnost programu, - ulehčují

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Reflexe Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší

Více

11. Dědičnost. Dědičnost strana 103

11. Dědičnost. Dědičnost strana 103 Dědičnost strana 103 11. Dědičnost V této kapitole si vysvětlíme jeden ze základních pojmů objektově orientovaného programování dědičnost (inheritance). S ní souvisejí i následující témata: předek a potomek

Více

JAVA. Krátke poznámky:

JAVA. Krátke poznámky: JAVA Krátke poznámky: Vše je definováno ve třídách; Žádné funkce mimo třídy Skoro všetko je objekt, výnimka sú premenné (napr. int) Neexistuje operátor delete Rušenie objektov výlučne cez Garbage Collector

Více

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

Výjimky. Tomáš Pitner, upravil Marek Šabo Výjimky Tomáš Pitner, upravil Marek Šabo K čemu jsou výjimky Výjimky jsou mechanizmem umožňujícím reagovat na nestandardní (tj. chybové) běhové chování programu, které může mít různé příčiny: chyba okolí:

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

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

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ 4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ OBJEKT Program v Javě je staticky strukturován na třídy, jejichž instance (objekty) za běhu dynamicky programu vznikají a zanikají. Objekt je nejprve

Více

7. Dynamické datové struktury

7. Dynamické datové struktury 7. Dynamické datové struktury Java poskytuje několik možností pro uložení většího množství dat (tj. objektů či primitivních datových typů) v paměti. S nejjednodušší z nich, s polem, jsme se již seznámili.

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

Více

Jazyk C# a platforma.net

Jazyk C# a platforma.net Jazyk C# a platforma.net Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe jazyka C# - 1. část BI-DNP Evropský sociální fond

Více

Úvod do programování - Java. Cvičení č.4

Úvod do programování - Java. Cvičení č.4 Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení

Více

Abstraktní třídy, polymorfní struktury

Abstraktní třídy, polymorfní struktury Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství

Více

Výjimky ( exceptions )

Výjimky ( exceptions ) Výjimky ( exceptions ) Výjimky jsou objekty sloužící k indikaci a nápravě závad v běhu programu. Typem patří do stromu třídy Throwable - odtud dědí téměř všechny metody. Výjimky pojednává: Kompilátor v

Více

Dědičnost (inheritance)

Dědičnost (inheritance) Dědičnost (inheritance) Úvod Umožňuje objektům převzít (zdědit) členy jiných objektů a pouze je rozšířit o Auto: lze odvodit Vztah je osobní auto, cisterna jsou auta Základní pojmy Bázová třída (rodič)

Více

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

Bridge. Známý jako. Účel. Použitelnost. Handle/Body Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době

Více

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová Programové konvence, dokumentace a ladění 2. přednáška Alena Buchalcevová Proč dodržovat programové konvence? velkou část životního cyklu softwaru tvoří údržba údržbu provádí většinou někdo jiný než autor

Více

Java Řetězce Java, zimní semestr

Java Řetězce Java, zimní semestr Java Řetězce 1 Řetězec instance třídy java.lang.string kompilátor s nimi zachází téměř jako s primit. typy řetězcové konstanty = instance třídy String nezměnitelné!!! pro změny třídy StringBuffer, StringBuilder

Více

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

Java - výjimky. private void vstup() throws IOException {... } Java - výjimky Tato kapitola ukazuje na několika příkladech práci s výjimkami v Javě. Klíčové pojmy: Výjimka, hierarchie výjimek, zachytávání výjimek, blok try-catch, tvorba vlastních výjimek, propagace

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

17. Projekt Trojúhelníky

17. Projekt Trojúhelníky Projekt Trojúhelníky strana 165 17. Projekt Trojúhelníky 17.1. Základní popis, zadání úkolu Pracujeme na projektu Trojúhelníky, který je ke stažení na java.vse.cz. Aplikace je napsána s textovým uživatelským

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu Seminář Java Zavádění tříd Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Zavádění tříd 1/ 16 JVM zavádí třídy dynamicky Class loader objekt schopný zavádět třídy abstraktní

Více

OOP - Objektově Orientované Programování

OOP - Objektově Orientované Programování OOP - Objektově Orientované Programování Programovat lze klasicky neobjektově - tedy s využitím jen primitivních typů a statického kontextu - tj. statických atributů, statických metod, statických inicializátorů

Více

Programovací jazyk Java

Programovací jazyk Java 1 z 8 Programovací jazyk Java Enumerace (výčty) Složitější definice výčtového typu Konstanty anonymních typů Výčtový typ a datové struktury Java packaging JAR archivy CLASSPATH Apache Ant 10. přednáška

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 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 formátovanému výstupu,

Více

Dědění, polymorfismus

Dědění, polymorfismus Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá

Více

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.

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. 3. ročník Dědičnost seskupování tříd do hierarchie nadtyp-podtyp potomek získá všechny vlastnosti a metody kromě označených jako private provádí se pomocí dvojtečky za názvem třídy Polymorfismus všude

Více

7.3 Diagramy tříd - základy

7.3 Diagramy tříd - základy 7.3 Diagramy tříd - základy - popisuje typy objektů a statické vztahy mezi nimi Objednávka -datumpřijetí -předplacena -číslo -cena +vyřiď() +uzavři() {if Objednávka.zákazník.charakteristika = 'nejistý'

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Objektově orientované programování

Objektově orientované programování 10. října 2011 Pragmatické informace Volitelný předmět, zápočet: zápočtový program(s dokumentací), aktivní účast na cvičení(body v CodExu), praktický test, zkouška: zkoušková písemka na objektový návrh

Více

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

Programování v C++ 1, 6. cvičení Programování v C++ 1, 6. cvičení dědičnost, polymorfismus 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené

Více

Java efektivně. Lukáš Zapletal liberix.cz. Pokročilejší techniky programování v Javě

Java efektivně. Lukáš Zapletal liberix.cz. Pokročilejší techniky programování v Javě Lukáš Zapletal liberix.cz Pokročilejší techniky programování v Javě Tato prezentace vychází kompletně z knihy J. Blocha: Effective Java (A-W 2001) u nás Java efektivně - 57 zásad softwarového experta (Grada

Více

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

Datové struktury. alg12 1

Datové struktury. alg12 1 Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou

Více

Java a XML. 10/26/09 1/7 Java a XML

Java a XML. 10/26/09 1/7 Java a XML Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis

Více

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků

Více

Objektové programování

Objektové programování Objektové programování - přináší nové možnosti a styl programování - vytváří nový datový typ, který umí vše co standardní datové typy + to co ho naučíme - překladač se k tomuto typu chová stejně jako k

Více

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

10 Balíčky, grafické znázornění tříd, základy zapozdření 10 Balíčky, grafické znázornění tříd, základy zapozdření 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 příkazům balíčkům, grafickému

Více

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

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth Evropský sociální fond. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace Ing. Ondřej Guth Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze

Více

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni! Java práce s řetězci Trochu povídání.. Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a String. Tyto třídy jsou součástí balíčku java.lang, tudíž je možno s nimi pracovat ihned bez nutného

Více

1. Téma 12 - Textové soubory a výjimky

1. Téma 12 - Textové soubory a výjimky 1. Téma 12 - Textové soubory a výjimky Cíl látky Procvičit práci se soubory s využitím výjimek. 1.1. Úvod Program, aby byl programem, my mít nějaké výstupy a vstupy. Velmi častým případem je to, že se

Více

Programování v jazyce JavaScript

Programování v jazyce JavaScript Programování v jazyce JavaScript Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Dědičnost objektů BI-JSC Evropský sociální fond

Více

Java - Kresba. 2/28/11 1/8 Java - kresba

Java - Kresba. 2/28/11 1/8 Java - kresba Java - Kresba Základní entity a jejich kresba ve třídě Graphics nemůžeme nastavit linii, šířku a typ, z grafických atributů jí můžeme nastavit pouze barvu Linie (čára)... drawline(int x1, int y1, int x2,

Více

Mnohotvarost (polymorfizmus)

Mnohotvarost (polymorfizmus) Mnohotvarost (polymorfizmus) TYPY MNOHOTVAROSTI... 2 PŘETĚŽOVÁNÍ METOD, PŘETĚŽOVÁNÍ OPERACÍ... 3 PŘETÍŽENÍ OPERÁTORŮ... 4 ČASTO PŘETĚŽOVANÉ OPERÁTORY... 4 PŘEPISOVÁNÍ... 7 VIRTUÁLNÍ METODY... 10 SEZNAM

Více

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object. Objekty v PHP 5.x This is an object-oriented system. If we change anything, the users object. Objektové PHP Objekty se poprvé objevili v PHP ve verzi 4. Nepříliš zdařilý pokus. Programátoři získali nedůvěru

Více