Objektov orientované programování
|
|
- Miloslav Švec
- před 5 lety
- Počet zobrazení:
Transkript
1 Objektov orientované programování Ji í Vok ínek Katedra po íta Fakulta elektrotechnická ƒeské vysoké u ení technické v Praze P edná²ka 2 B6B36PJV Programování v JAVA Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 1 / 83
2 Objektov orientované programování v Jav Objektov orientované programování Vztahy mezi objekty d di nost a polymorsmus Poloºky t ídy a instance Konstruktor Význam metody main Nem nitelné objekty (Immutable objects) Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 2 / 83
3 D di nost a polymorsmus D di nost Kompozice Polymorsmus P íklad návrhu a vyuºití polymorsmu Dispatch Double Dispatch Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 3 / 83
4 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable ƒást I Objektov orientované programování v Jav Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 4 / 83
5 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Objektov orientované programování (OOP) OOP je p ístup jak správn navrhnout strukturu programu tak, aby výsledný program spl oval funk ní poºadavky a byl dob e udrºovatelný. Abstrakce koncepty (²ablony) organizujeme do t íd, objekty jsou pak instance t íd Zapouzd ení (encapsulation) Objekty mají sv j stav skrytý, poskytují svému okolí rozhraní, komunikace s ostatními objekty zasíláním zpráv (volání metod) D di nost (inheritance) Hierarchie t íd (koncept ) se spole nými (obecnými) vlastnostmi, které se dále specializují Polymorsmus (mnohotvárnost) Objekt se stejným rozhraním m ºe zastoupit jiný objekt téhoº rozhraní. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 5 / 83
6 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Objektov orientované programování (OOP) OOP je p ístup jak správn navrhnout strukturu programu tak, aby výsledný program spl oval funk ní poºadavky a byl dob e udrºovatelný. Abstrakce koncepty (²ablony) organizujeme do t íd, objekty jsou pak instance t íd Zapouzd ení (encapsulation) Objekty mají sv j stav skrytý, poskytují svému okolí rozhraní, komunikace s ostatními objekty zasíláním zpráv (volání metod) D di nost (inheritance) Hierarchie t íd (koncept ) se spole nými (obecnými) vlastnostmi, které se dále specializují Polymorsmus (mnohotvárnost) Objekt se stejným rozhraním m ºe zastoupit jiný objekt téhoº rozhraní. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 5 / 83
7 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable T ídy a objekty Objekty - reprezentují základní entity OO systému za jeho b hu. Mají konkrétní vlastnosti a vykazují chování V kaºdém okamºiku lze popsat jejich stav Objekty se v pr b hu b hu programu li²í svým vnit ním stavem, který se b hem vykonávání programu m ní T ídy - popisují moºnou mnoºinou objekt. P edloha pro tvorbu objekt t ídy. Mají: Rozhraní - denuje ásti objekt dané t ídy p ístupné zven í T lo - implementuje operace rozhraní Instan ní prom nné - obsahují stav objektu dané t ídy Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 6 / 83
8 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable T ídy a objekty - vlastnosti Zapouzd ení (encapsulation) je mnoºina sluºeb, které objekt nabízí navenek. Odd luje rozhraní (interface) a jeho implementaci. Stav je ur en daty objektu. Chování je ur eno stavem objektu a jeho sluºbami (metodami). Identita je odli²ení od ostatních objekt (v prog. jazycích pojmenování prom nných reprezentující objekty ur ité t ídy). Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 7 / 83
9 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable T ída Popisuje mnoºinu objekt je jejich vzorem (p edlohou) a denuje: Rozhraní ásti, které jsou p ístupné zven í public, protected, private, package T lo implementace operací rozhraní (metod), které ur ují schopnosti objekt dané t ídy instan ní vs statické (t ídní) metody Datové poloºky atributy základních i sloºit j²ích datových typ a struktur kompozice objekt Instan ní prom nné ur ují stav objektu dané t ídy T ídní (statické) prom nné spole né v²em instancím dané t ídy Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 8 / 83
10 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Struktura objektu Objekt je kombinací dat a funkcí, které pracují nad t mito daty Objekt je tvo en Datovými strukturami atributy Ovliv ují vlastnosti objektu Jsou to prom nné r zných datových typ Data jsou zpravidla p ístupná pouze v rámci daného objektu a zvn j²ku jsou skryta p ed jinými objekty Zapouzd ení (encapsulation) / gettery a settery Metodami funkce / procedury Ur ují chování objektu Denují operace nad daty objektu Metody p edstavují sluºby objektu, proto jsou asto ve ejné Mohou být deklarovány jako privátní Objekt je instance t ídy V Jav lze vytvá et pouze dynamicky operátorem new Referen ní prom nná Hodnota prom nné odkazuje na místo v pam ti, kde je objekt uloºen Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 9 / 83
11 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Princip zapouzd ení (Encapsulation) Utajení vnit ního stavu objektu Jiné objekty nemohou m nit stav objektu p ímo a zp sobit tak chybu Metody objektu umoº ují objektu komunikovat se svým okolím, tvo í jeho rozhraní Prom nné (data) objektu nejsou z vn j²ku objektu p ístupné, pro p ístup k nim lze vyuºít pouze metody Zapouzd ení umoº uje udrºovat a spravovat kaºdý objekt nezávisle na jiném objektu. Umoº uje modularitu zdrojových kód. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 10 / 83
12 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Datové poloºky objekt Dle principu zapouzd ení jsou datové poloºky zpravidla private P ístup k poloºkám je p es metody, tzv. accessory, které vrací/nastavují hodnotu p íslu²né prom nné (getter a setter) public class DemoGetterSetter { private int x; Accessory lze vytvo it mechanicky a vývojová prost edí zpravidla nabízí automatické vygenerování jejich zdrojového kódu public class DemoGetterSetter { private int x; public int getx() { return x; public void setx(int x) { this.x = x; Viz Alt+Insert v Netbeans Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 11 / 83
13 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Datové poloºky objekt Dle principu zapouzd ení jsou datové poloºky zpravidla private P ístup k poloºkám je p es metody, tzv. accessory, které vrací/nastavují hodnotu p íslu²né prom nné (getter a setter) public class DemoGetterSetter { private int x; Accessory lze vytvo it mechanicky a vývojová prost edí zpravidla nabízí automatické vygenerování jejich zdrojového kódu public class DemoGetterSetter { private int x; public int getx() { return x; public void setx(int x) { this.x = x; Viz Alt+Insert v Netbeans Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 11 / 83
14 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Vztahy mezi objekty V OO systému interagují objekty mezi sebou prost ednictvím zasílání zpráv (messages) poºadavk na provedení sluºeb poskytovaných objektem 1. Po obdrºení zprávy objekt vyvolá poºadovanou metodu 2. P ípadn za²le výsledek Objekt poskytující sluºbu se asto nazývá server Objekt ºádající o sluºbu se nazývá klient Mezi objekty je relaceasociace, volá-li objekt sluºby jiného objektu S relacemi mezi objekty souvisí viditelnost a vazby mezi objekty Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 12 / 83
15 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Datové poloºky t ídy a instance Datové poloºky t ídy Jsou spole né v²em instancím vytvo eným z jedné t ídy Nejsou vázaný na konkrétní instanci Jsou spole né v²em instancím t ídy V Jav jsou uvozeny klí ovým slovem static Datové poloºky instance Tvo í vlastní sadu datových poloºek objektu Jsou to tzv. prom nné instance Jsou iniciovány p i vytvo ení instance V konstruktoru p i vytvo ení instance voláním new Existují po celou dobu ºivota instance Prom nné jedné instance jsou nezávislé na prom nných instance jiné Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 13 / 83
16 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Datové poloºky t ídy a instance Datové poloºky t ídy Jsou spole né v²em instancím vytvo eným z jedné t ídy Nejsou vázaný na konkrétní instanci Jsou spole né v²em instancím t ídy V Jav jsou uvozeny klí ovým slovem static Datové poloºky instance Tvo í vlastní sadu datových poloºek objektu Jsou to tzv. prom nné instance Jsou iniciovány p i vytvo ení instance V konstruktoru p i vytvo ení instance voláním new Existují po celou dobu ºivota instance Prom nné jedné instance jsou nezávislé na prom nných instance jiné Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 13 / 83
17 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Metody t ídy a instance Metody t ídy Nejsou volány pro konkrétní instance P edstavují zprávu zaslanou t íd jako celku Mohou pracovat pouze s prom nnými t ídy Nikoliv s prom nnými instance V Jav jsou uvozeny klí ovým slovem static Jsou to tzv. statické metody Metody instance Jsou volány vºdy pro konkrétní instanci t ídy P edstavují zprávu zaslanou konkrétní instanci Pracují s prom nnými instance i s prom nnými t ídy Lze volat pouze aº po vytvo ení konkrétní instance Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 14 / 83
18 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Metody t ídy a instance Metody t ídy Nejsou volány pro konkrétní instance P edstavují zprávu zaslanou t íd jako celku Mohou pracovat pouze s prom nnými t ídy Nikoliv s prom nnými instance V Jav jsou uvozeny klí ovým slovem static Jsou to tzv. statické metody Metody instance Jsou volány vºdy pro konkrétní instanci t ídy P edstavují zprávu zaslanou konkrétní instanci Pracují s prom nnými instance i s prom nnými t ídy Lze volat pouze aº po vytvo ení konkrétní instance Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 14 / 83
19 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable P ístup ke len m t ídy Podle principu zapouzd ení jsou n které leny t ídy ozna ována jako soukromé (privátní) a jiné jako ve ejné. Programátor p edepisuje k jakým poloºkám lze p istupovat a modikovat je P ístup ke len m t ídy je ur en modikátorem p ístupu public: p ístup z libovolné t ídy private: p ístup pouze ze t ídy, ve které byly deklarovány protected: p ístup ze t ídy a z odvozených t íd Bez uvedení modikátoru je p ístup povolen v rámci stejného balí ku package Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 15 / 83
20 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable ízení p ístup ke len m t ídy Modikátor P ístup T ída Balí ek Odvozená t ída Sv t public!!!! protected!!! bez modikátoru!! private! Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 16 / 83
21 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Vytvo ení objektu Konstruktor t ídy Instance t ídy (objekt) vzniká voláním operátoru new s argumentem jména t ídy, který volá konstruktor t ídy Konstruktor nemá návratový typ, jmenuje se stejn jako t ída a m ºeme jej p etíºit pro r zné typy a po ty parametr Jiný konstruktor t ídy lze volat operátorem this Operátorem super lze volat konstruktor nad azené t ídy Není-li konstruktor p edepsán, je vygenerován konstruktor s prázdným seznamem parametr Je-li konstruktor deklarován, implicitní zaniká P etíºení konstruktoru pro r zné typy a po ty parametr Konstruktor je zpravidla vºdy public overloading Privátní (private) konstruktor pouºijeme nap íklad pro: T ídy obsahující pouze statické metody nebo pouze konstanty Takzvané singletony (singletons) Zakáºeme tak vytvá ení instancí. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 17 / 83
22 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Statická metoda main Deklarace hlavní funkce public static void main(string[] args) {... p edstavuje spou²t programu Musí být statická, je volána d íve neº se vytvo í objekt T ída nemusí obsahovat funkci main Taková t ída zavádí prost edky, které lze vyuºít v jiných t ídách Jedná se tak o knihovnu funkcí a procedur nebo datových poloºek (konstant) Krom spu²t ní programu m ºe funkce main obsahovat nap íklad testování funk nosti objektu nebo ukázku pouºití metod objektu Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 18 / 83
23 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Nem nitelné objekty (Immutable objects) Denice nem nitelného objektu V²echny datové poloºky jsou nal a private Neimplementujeme settery pro modikaci poloºek Zákaz p episu metod v potomcích (nal modikátor u metod) Objekty, které v pr b hu ºivota nem ní sv j stav Modikace objektu není moºná a je nutné vytvo it objekt nový Mají výhodu v p ípad paralelního b hu více výpo etních tok Typickým p íkladem je t ída String Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 19 / 83
24 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Nem nitelné objekty (Immutable objects) Denice nem nitelného objektu V²echny datové poloºky jsou nal a private Neimplementujeme settery pro modikaci poloºek Zákaz p episu metod v potomcích (nal modikátor u metod) Objekty, které v pr b hu ºivota nem ní sv j stav Modikace objektu není moºná a je nutné vytvo it objekt nový Mají výhodu v p ípad paralelního b hu více výpo etních tok Typickým p íkladem je t ída String Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 19 / 83
25 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Objekty pro základní typy T ídy pro základní t ídy jsou immutable Kaºdý primitivní typ má v Jav také svoji t ídu: Char, Boolean Byte, Short, Integer, Long Float, Double T ídy obsahují metody pro p evod ísel a metody pro parsování ísla z textového et zce nap. Integer.parseInt(String s) Dále také rozsah íselného typu minimální a maximální hodnoty nap. Integer.MAX_VALUE, Integer.MIN_VALUE Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 20 / 83
26 Objektov orientované programování Vztahy mezi objekty Poloºky t ídy a instance Konstruktor main Immutable Referen ní prom nné objekt t íd primitivních typ Referen ní prom nné objekt pro primitivní typy m ºeme pouºívat podobn jako základní typy Integer a = 10; Integer b = 20; int r1 = a + b; Integer r2 = a + b; System.out.println("r1: " + r1 + " r2: " + r2); Stále to jsou v²ak referen ní prom nné (odkazující na adresu v pam ti) Obsah objektu nem ºeme m nit, jedná se o immutable objekty DemoObjectsOfBasicTypes.java Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 21 / 83
27 ƒást II D di nost a polymorsmus Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 22 / 83
28 Polymorsmus Polymorsmus mnohozna nost / mnohotvárnost Vlasnost, která nám umoº uje pojmenovat n jakou konkrétní schopnost (metodu) identickým jménem, p i emº její implementace se m ºe v jednotlivých t ídách hierarchie t íd li²it. Základním zp sobem realizace polymorsmu jsou D di nost (inheritance) Virtuální metody dynamické vázání jména metody ke konkrétnímu objektu Rozhraní (interface) a abstraktní t ídy (abstract) P ekrývání metod (override) Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 23 / 83
29 Základní vlastnosti d di nosti D di nost je mechanismus umoº ující Roz²i ovat datové poloºky t íd nebo je také modikovat Roz²i ovat nebo modikovat metody t íd Vytvá et hierarchie t íd P edávat datové poloºky a metody k roz²í ení a úprav Specializovat (up es ovat) t ídy protected Mezi hlavní výhody d d ní pat í: Zásadním zp sobem p ispívá k znovupouºitelnosti programového kódu Spolu s principem zapouzd ení D di nost je základem polymorsmu Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 24 / 83
30 P íklad Kvádr je roz²í ený obdélník? class Rectangle { protected double width; protected double height; Rectangle(int width, int height) { this.width = width; this.height = height; public double getwidth() { return width; public double getheight() { return height; public double getdiagonal() { return Math.sqrt(width*width + height*height); Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 25 / 83
31 P íklad Kvádr je roz²í ený obdélník? class Cuboid extends Rectangle { protected double depth; Cuboid(int width, int height, int depth) { super(with, height); //konstruktor predka this.depth = depth; public double getdepth() { return public double getdiagonal() { double tmp = super.getdiagonal(); //volani predka return Math.sqrt(tmp*tmp + depth*depth); Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 26 / 83
32 P íklad d di nosti 1/2 T ída Cuboid je roz²í ením t ídy Rectangle o hloubku (depth) Potomka deklarujeme roz²í ením extends Cuboid p ebírá datové poloºky width a height Cuboid také p ebírá gettery getwidth a getheight Konstruktor se ned dí, lze ale volat v podt íd operátorem super Není-li konstruktor deklarován, je volán konstruktor bez parametr Konstruktor existuje vºdy, bu implicitní nebo uºivatelský Potomek dopl uje datové poloºky o depth a m ní metodu getdiagonal Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 27 / 83
33 P íklad d di nosti 2/2 Objekty t ídy Cuboid mohou vyuºívat prom nné width, height a depth Metoda getdiagonal p ekrývá p vodní metodu denovanou v nad azené t íd Rectangle zastín ní overriding P ístup k p vodní metod p edka je moºný p es operátor super Má-li metoda stejného jména jiné parametry (po et/typ) jedná se o p etíºení overloading Jedná se o jinou (novou) metodu! Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 28 / 83
34 D di nost Kvádr je roz²í ený obdélník V p íkladu jsme roz²i ovali obdélník a vytvo ili specializaci kvádr Je to skute n vhodné roz²í ení? Jaká je plocha kvádru? Jaký je obvod kvádru? Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 29 / 83
35 D di nost Kvádr je roz²í ený obdélník V p íkladu jsme roz²i ovali obdélník a vytvo ili specializaci kvádr Je to skute n vhodné roz²í ení? Jaká je plocha kvádru? Jaký je obvod kvádru? Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 29 / 83
36 D di nost Kvádr je roz²í ený obdélník V p íkladu jsme roz²i ovali obdélník a vytvo ili specializaci kvádr Je to skute n vhodné roz²í ení? Jaká je plocha kvádru? Jaký je obvod kvádru? Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 29 / 83
37 D di nost Obdélník je speciální kvádr? Obdélník je kvádr s nulovou hloubkou class Cuboid { protected double width; protected double height; protected double depth; Cuboid(int w, int h, int d) { this.width = w; this.height = h; this.depth = d; public double getwidth() { return width; public double getheight() { return height; public double getdepth() { return depth; public double getdiagonal() { double tmp = width*width + height*height + depth*depth; return Math.sqrt(tmp); Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 30 / 83
38 D di nost Obdélník je speciální kvádr? class Rectangle extends Cuboid { Rectangle(int width, int height) { super(width, height, 0); Obdélník je kvádrem s nulovou hloubkou Potomek se deklaruje klí ovým slovem extends Rectangle p ebírá v²echny datové poloºky width, height a depth a také p ebírá v²echny metody p edka (p ístupné mohou být, ale pouze n které) Konstruktor je p ístupný p es volání super a hodnota prom nné depth se nastavujeme na nulu Objekty t ídy Rectangle mohou vyuºívat v²ech prom nných a metod t ídy Cuboid Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 31 / 83
39 D di nost Obdélník je speciální kvádr? class Rectangle extends Cuboid { Rectangle(int width, int height) { super(width, height, 0); Obdélník je kvádrem s nulovou hloubkou Potomek se deklaruje klí ovým slovem extends Rectangle p ebírá v²echny datové poloºky width, height a depth a také p ebírá v²echny metody p edka (p ístupné mohou být, ale pouze n které) Konstruktor je p ístupný p es volání super a hodnota prom nné depth se nastavujeme na nulu Objekty t ídy Rectangle mohou vyuºívat v²ech prom nných a metod t ídy Cuboid Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 31 / 83
40 Je obdélník potomek kvádru nebo kvádr potomek obdélníka? 1. Kvádr je potomek obdélníka Logické p idání rozm ru, ale metody platné pro obdélník nefungují pro kvádr obsah obdélníka 2. Obdélník je potomek kvádru Logicky správná úvaha o specializaci: v²e co funguje pro kvádr funguje i pro kvádr s nulovou hloubkou Neefektivní implementace kaºdý obdélník je reprezentován 3 rozm ry Specializace je správná V²e co platí pro p edka, musí platit pro potomka V tomto konkrétním p ípad je v²ak pouºití d di nosti diskutabilní. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 32 / 83
41 Je obdélník potomek kvádru nebo kvádr potomek obdélníka? 1. Kvádr je potomek obdélníka Logické p idání rozm ru, ale metody platné pro obdélník nefungují pro kvádr obsah obdélníka 2. Obdélník je potomek kvádru Logicky správná úvaha o specializaci: v²e co funguje pro kvádr funguje i pro kvádr s nulovou hloubkou Neefektivní implementace kaºdý obdélník je reprezentován 3 rozm ry Specializace je správná V²e co platí pro p edka, musí platit pro potomka V tomto konkrétním p ípad je v²ak pouºití d di nosti diskutabilní. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 32 / 83
42 Je obdélník potomek kvádru nebo kvádr potomek obdélníka? 1. Kvádr je potomek obdélníka Logické p idání rozm ru, ale metody platné pro obdélník nefungují pro kvádr obsah obdélníka 2. Obdélník je potomek kvádru Logicky správná úvaha o specializaci: v²e co funguje pro kvádr funguje i pro kvádr s nulovou hloubkou Neefektivní implementace kaºdý obdélník je reprezentován 3 rozm ry Specializace je správná V²e co platí pro p edka, musí platit pro potomka V tomto konkrétním p ípad je v²ak pouºití d di nosti diskutabilní. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 32 / 83
43 Vztah p edka a potomka je typu is-a Je úse ka potomek bodu? Úse ka nevyuºije ani jednu metodu bodu is-a?: úse ka je bod? NE úse ka není potomek bodu Je obdélník potomek úse ky? is-a?: NE Je obdélník potomek tverce nebo naopak? Obdélník roz²i uje tverec o dal²í rozm r, ale není tvercem ƒtverec je obdélník, který má ²í ku a vý²ku stejnou Nastavení délek stran v konstruktoru! Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 33 / 83
44 Substitu ní princip Vzájemný vztah mezi dv ma odvozenými t ídami Zásady: Odvozená t ída je specializaci nad azené t ídy Existuje vztah is-a V²ude, kde lze pouºít t ídu musí být pouºitelný i její potomek a to tak, aby uºivatel nepoznal rozdíl Vztah is-a musí být trvalý Polymorsmus Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 34 / 83
45 Kompozice objekt Obsahuje-li deklarace t ídy lenské prom nné objektového typu, pak se jedná o kompozici objekt Kompozice vytvá í hierarchii objekt nikoliv v²ak d di nost D di nost vytvá í také hierarchii vztah, ale ve smyslu potomek/p edek. Kompozice je vztah objekt agregace je tvo eno / je sou ástí Jedná se o strukturu typu has-a Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 35 / 83
46 P íklad kompozice 1/3 Kaºdá osoba je charakterizována atributy t ídy Person Jméno name Adresa address Datum narození birthdate Datum úsp ²ného ukon ení studia graduationdate Datum je charakterizováno t emi atributy (t ída Date) Den day (int) M síc month (int) Rok year (int) Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 36 / 83
47 P íklad kompozice 2/3 class Person { String name; String address; Date birthdate; Date graduationdate; class Date { int day; int month; int year; Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 37 / 83
48 P íklad kompozice 3/3 Person name:string address:string birthdate:date graduationdate:date birthdate:date graduationdate:date year:int month:int day:int year:int month:int day:int Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 38 / 83
49 D di nost vs kompozice Vlastnosti d d ní objekt : Vytvá ení odvozené t ídy (potomek, podt ída) Podt ída se vytvá í extends Odvozená t ída je specializací nad azené t ídy P idává prom nné Nebo také p ekrývá prom nné P idává nebo modikuje metody Na rozdíl od kompozice m ní vlastnosti objekt Nové nebo modikované metody P ístup k prom nným a metodám p edka (bázové t íd, supert íd ) Pokud je p ístup povolen (public/protected/package) Kompozice objekt je tvo ena atributy objektového typu Rozli²ení mezi kompozicí nebo d d ním (pom cka) Je test p íznak d d ní (is-a) Má test p íznak kompozice (has-a) Skládá objekty Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 39 / 83
50 D di nost a kompozice úskalí P íli²né pouºívání kompozice i d di nosti v p ípadech, kdy to není pot eba vede na p íli² sloºitý návrh Pozor na doslovné výklady vztahu is-a a has-a, n kdy se nejedná ani o d di nost, ani kompozici Dáváme p ednost kompozici p ed d di ností Nap. Point2D a Point3D nebo Circle a Ellipse Jedna z výhod d di nosti je polymorsmus P i pouºívání d di nosti dochází k poru²ení zapouzd ení Zejména s nastavením p ístupových práv protected Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 40 / 83
51 Odvozené t ídy, polymorsmus a praktické d sledky Odvozená t ída d dí metody a poloºky nadt ídy, ale také m ºe p idávat poloºky nové M ºeme roz²i ovat a specializovat schopnosti t ídy M ºeme modikovat implementaci metod Objekt odvozené t ídy m ºe vystupovat místo objektu nadt ídy M ºeme nap íklad vyuºít efektivn j²í implementace aniº bychom modikovali celý program. P íklad r zné implementace maticového násobení viz Matrix.java, DemoMatrix.java Projd te si samostatnou prezentaci a p íklady. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 41 / 83
52 Hierarchie t íd v knihovn JDK V dokumentaci jazyka Java m ºeme najít následující obrázek Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 42 / 83
53 T ída String T ída String je odvozena od t ídy Object T ída implementuje rozhraní Serializable, CharSequence a Comparable<String> T ída je nal tj. nem ºe být od ní odvozena jiná t ída public nal class String extends Object { T ída je Immutable její datové poloºky nelze m nit Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 43 / 83
54 T ída Object T ída Object tvo í po átek hierarchie t íd v Jav Tvo í nadt ídu pro v²echny t ídy Kaºdá t ída je podt ídou (je odvozena od) Object class A { je ekvivalentní s class A extends Object { T ída Object implementuje n kolik základních metod: protected Object clone(); public boolean equals(object o); Class<?> getclass(); int hashcode(); public String tostring(o); Vytvá í kopii objektu Vrací textovou reprezentaci objektu Také implementuje metody pro synchronizací vícevláknových program : wait, notify, notifyall Kaºdý objekt je také tzv. monitorem. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 44 / 83
55 Metoda tostring() Metodou je zavedena implicitní typová konverze z typu objektu na et zec reprezentující konkrétní objekt, nap. pro tisk objektu metodou print Lze vyuºít automatické vytvo ení v Netbeans Nap íklad metoda tostring ve t ídách Complex a Matrix public class Complex public String tostring() { if (im == 0) { return re + ""; else if (re == 0) { return im + "i"; else if (im < 0) { return re + " - " + (-im) + "i"; return re + " + " + im + "i"; Complex.java, Matrix.java Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 45 / 83
56 Metoda equals() Standardní chování neporovnává obsah datových poloºek objektu, ale reference (adresy) public boolean equals(object obj) { return this == obj; P i zastín ní m ºeme porovnávat obsah datových poloºek, nap. public class Complex public boolean equals(object o) { if (! (o instanceof Complex)) { return false; Complex c = (Complex)o; return re == c.re && im == c.im; Pro zji²t ní, zdali je referen ní prom nná instancí konkrétní t ídy m ºeme pouºít operátor instanceof Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 46 / 83
57 Metody equals() a hashcode() Pokud t ída modikuje metodu equals() je vhodné také modikovat metodu hashcode() Metoda hashcode() vrací celé íslo reprezentující objekt, které je nap íklad pouºito v implementaci datové struktury HashMap Pokud metoda equals() vrací pro dva objekty hodnotu true tak i metoda hashcode() by m la vracet stejnou hodnotu pro oba objekty Není nutné, aby dva objekty, které nejsou totoºné z hlediska volání equals, m ly nutn také rozdílnou návratovou hodnotu metody hashcode() Zlep²í to v²ak efektivitu p i pouºití tabulek HashMap. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 47 / 83
58 P íklad geometrických objekt a jejich vizualizace Projd te si samostatnou prezentaci a p íklady. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 48 / 83
59 Polymorsmus Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 49 / 83
60 Polymorsmus Polymorsmus (mnohotvárnost) se v OOD projevuje tak, ºe se m ºeme stejným zp sobem odvolávat na r zné objekty Pracujeme s objektem, jehoº skute ný obsah je dán okolnostmi aº za b hu programu Polymorsmus objekt - Nech t ída B je podt ídou t ídy A, pak objekt t ídy B m ºeme pouºít v²ude tam, kde je o ekáván objekt t ídy A Polymorsmus metod - Vyºaduje dynamické vázání, statický a dynamický typ t ídy Nech t ída B je podt ídou t ídy A a redenuje metodu m() Prom nná x statického typu B, dynamický typ m ºe být A nebo B Jaká metoda se skute n volá pro x.m() závisí na dynamickém typu Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 50 / 83
61 D di nost, polymorsmus a virtuální metody Vytvo ení dynamické vazby je zpravidla v OO programovacím jazyce realizováno virtuální metodou Redenované metody, které jsou ozna ené jako virtuální, mají dynamickou vazbu na konkrétní dynamický typ V Jav jsou v²echny metody deklarovány jako virtuální; výjimku tvo í statické metody volány se jménem t ídy skryté metody pragmaticky na n není p ístup metody deklarované s klí ovým slovem nal nedovoluje p ekrývat metody v potomcích metody deklarované ve t íd nal nedovoluje od t ídy odvozovat dal²í t ídy V konstruktoru bychom m li volat pouze nal metody, tak bude objekt inicializován podle zamý²leného zp sobu Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 51 / 83
62 Vytvo ení dynamické vazby d di nost D d ním vytvá íme vazbu mezi nad azenou a odvozenou t ídou Za b hu programu se m ºeme na odvozenou t ídu dívat jako na nad azenou t ídu Voláme metody identického jména za b hu je v²ak ur ena konkrétní instance t ídy a je vykonána p íslu²ná implementace Vytvo ení vazby m ºeme provést: Odvozením t ídy od nad azené t ídy Odvozením t ídy od abstraktní t ídy Implementací rozhraní (interface) P íklad volání metody dostep objektu reprezentujícího hrá e hrající n jakou konkrétní strategií: Player player = new RandomPlayer(); player.dostep(); player = new BestPlayer(); player.dostep(); Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 52 / 83
63 P íklad odvození t ídy Nad azená t ída public class Player { public void dostep() { // do some default strategy Odvozená t ída public class RandomPlayer extends Player { public void dostep() { // do a random strategy Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 53 / 83
64 Abstraktní t ída Deklarace t ídy se uvozuje klí ovým slovem abstract Abstraktní t ída umoº uje deklarovat abstraktní metody (op t klí ovým slovem abstract) Abstraktní metody se mohou vyskytovat pouze v abstraktních t ídách, jsou protikladem nálních metod, které nelze p edenovat. Abstraktní metody nemají implementaci a je nutné ji denovat v odvozených t ídách Kontrola a podpora objektového návrhu na úrovni jazyka Lze je vyuºít nap íklad pro vytvo ení spole ného p edka hierarchie t íd, které mají mít spole né vlastnosti (bez konkrétní implementace), p ípadn dopln né o datové poloºky Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 54 / 83
65 P íklad odvození od abstrakní t ídy Nad azená abstrakní t ída public abstract class Player { public abstract void dostep(); Odvozená t ída public class RandomPlayer extends Player public void dostep() { // specific strategy Explicitn uvádíme, ºe metodu p episujeme Lze vytvo it refere ní prom nnou abstraktní t ídy, ale vytvo it instanci abstraktní t ídy nelze Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 55 / 83
66 Rozhraní t ídy interface V p ípad pot eby d d ní vlastností více p edk lze vyuºít rozhraní interface e²í vícenásobnou d di nost Rozhraní denuje mnoºinu metod, které t ída musí implementovat, pokud implementuje (implemets) dané rozhraní Garantuje, ºe daná metoda je implementována, ne e²í v²ak jak Rozhraní poskytuje specický pohled na objekty dané t ídy T ída m ºe implementovat více rozhraní M ºeme p etypovat na objekt p íslu²ného rozhraní Na rozdíl od d d ní, u kterého m ºe d dit pouze od jediného p ímého p edka P ípadnou kolizi shodných jmen metod více rozhraní e²í programátor Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 56 / 83
67 P íklad implementace rozhraní Rozhraní public interface Player { public void dostep(); T ída implementující dané rozhraní public class RandomPlayer implements Player public void dostep() { // specific strategy Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 57 / 83
68 Abstraktní t ída nebo rozhraní Abstraktní t ída je vhodná pro p ípady: Odvozené t ídy sdílejí implementaci Odvozené t ídy vyºadují p ístup na poloºky, které nejsou public Rozhraní je výhodné pokud: O ekáváme, ºe rozhraní bude implementováno v jiných, nesouvisejících t ídách Chceme specikovat chování konkrétního datového typu (dané jménen rozhraní), bez ohledu na konkrétní implementaci chování Chceme vyuºít vícenásobnou d di nost Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 58 / 83
69 Zadání úlohy Rámec pro simulaci strategického rozhodování Vytvo te simulátor strategické hry (nap. sázeníruleta) K simulátoru se m ºe p ipojit aº 5 ú astník hry Jeden simula ní krok hry lze vyvolat metodou nextround Vytvo te t i ukázkové hrá e demonstrující pouºití rámce a Jeden hrá vºdy sazí na ervenou (PlayerRed) b Druhý hrá sází náhodn na ísla od 1 do 36 (PlayerRandom) c T etí hrá sází vºdy na polí ko s nejniº²í hodnotou (PlayerMin) Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 59 / 83
70 Návrh základní struktury Rámec se skládá z Herního sv taworld denující polí ka, na která lze vsadit Sázky Bet dle pravidel sv ta Ú astníka (Participant) hry, který sází na polí ka v herním sv t Vlastního simulátorsimulator, který obsahuje sv t, hrající hrá e a zárove umoº uje p ipojení hrá do hry Hrá (Player) hrající strategií a, b nebo c Kompozice / Agregace Pro demonstraci pouºití rámce Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 60 / 83
71 Sázka Sázka Bet na co hrá sází a kolik Jednou vy ená sázka platí a je nem nná immutable object public class Bet { private final String bet; private final int amount; public Bet(String bet, int amount) { this.bet = bet; this.amount = amount; public String getbet() { return bet; public int getamount() { return public String tostring() { return "(" + bet + "," + amount + ")"; Pro jednoduchost uvaºujeme sázku na polí ko jako String Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 61 / 83
72 Herní sv t Herní sv t World denuje polí ka a umoº uje ú astník m (Participant) poloºit sázku (Bet) Pro jednoduchost uvaºujeme pouze polí ka s ísly. public class World { private final int MIN_NUMBER = 1; private final int MAX_NUMBER = 36; public int getminnumber() { return MIN_NUMBER; public int getmaxnumber() { return MAX_NUMBER; Zapouzd ujeme rozsah íselných polí ek Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 62 / 83
73 Ú astník hry Participant Ú astník m ºe být implementován v jiných t ídách (n kým jiným), proto volíme pro ú astníka rozhraní interface S referen ní prom nnou typu Participant m ºeme pracovat v simulátoru aniº bychom znali konkrétní implementaci Ú astník má v této chvíli pouze jediné denované chování a to vsadit si (sázku Bet) metoda dostep pro konkrétní sv t public interface Participant { public Bet dostep(world world); P edáváme referen ní prom nnou World Hrá se tak m ºe informovat o aktuálním stavu sv ta Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 63 / 83
74 Simula ní rámec Simulator Simulátor obsahuje sv t World (agregace) Simulátor obsahuje hrá e, ale ty jsou vytvá ení nezávisle mimo simulátor a p ipojují se ke h e metodou join (agregace) Konkrétní implementace hrá e je nezávislá, proto agregujeme ú astníka hry Participant public class Simulator { World world; ArrayList participants; final int MAX_PLAYERS = 5; int round; Simulator(World world) { this.world = world; participants = new ArrayList(); round = 0; public void join(participant player) {... public void nextround() {... Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 64 / 83
75 P ipojení ú astníka hry Simulator join Ú astníky hry uloºíme v kontejneru ArrayList Kontrolujeme maximální po et ú astník hry a p idáváme pouze nenulového hrá e a to pouze jednou (indexof) public void join(participant player) { if (participants.size() >= MAX_PLAYERS) { throw new RuntimeException("Too many players in the game"); if (player!= null && participants.indexof(player) == -1) { participants.add(player); Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 65 / 83
76 P ipojení ú astníka hry Simulator nextround Rámec odehrátí jednoho kola m ºeme implementovat i bez známé implementace konkrétního hrá e Polymorsmus zajistí dynamickou vazbu na konkrétní objekt a volání p íslu²né metody objektu, který je uloºen v seznamu participants public void nextround() { for(int i = 0; i < participants.size(); ++i) { Participant player = (Participant)participants.get(i); Bet bet = player.dostep(world); System.out.println("Round " + round + " player #" + i + "(" + player + ") bet: " + bet); round++; ArrayList obsahuje referen ní prom nné typu Object, proto musím explicitn p etypovat. Tomu se m ºeme vyhnout vyuºitím generických typ, viz 2. p edná²ka. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 66 / 83
77 Hrá Abstraktní t ída Player Demo hrá i mohou sdílet spole ný kód, nap. pro vypsání svého jména, proto volíme abstraktní t ídu public abstract class Player implements Participant { private final String name; public Player(String name) { this.name = public String tostring() { return name; Jedná se o abstraktní t ídu, proto nemusíme explicitn uvád t metodu implementující rozhraní Participant, která je automaticky abstraktní. Implementace metody dostep je vynucena v odvozených t ídách pro díl í strategie RandomPlayer, RedPlayer a MinPlayer Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 67 / 83
78 Ukázka hrá RedPlayer RedPlayer public class RedPlayer extends Player { public RedPlayer() { public Bet dostep(world world) { return new Bet("red", 1); //always bet 1 Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 68 / 83
79 Ukázka hrá RedPlayer a RandomPlayer RandomPlayer public class RandomPlayer extends Player { Random rand; public RandomPlayer() { super("random"); rand = new public Bet dostep(world world) { Integer bet = rand.nextint(36)+1; return new Bet(bet.toString(), 1); //bet 1 Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 69 / 83
80 Ukázka hrá e MinPlayer MinPlayer public class MinPlayer extends Player { public MinPlayer() { public Bet dostep(world world) { Integer bet = world.getminnumber(); return new Bet(bet.toString(), 1); //always bet 1 V tomto p ípad hrá interaguje se sv tem Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 70 / 83
81 Ukázka pouºití public class Demo { public static void main(string[] args) { Simulator sim = new Simulator(new World()); sim.join(new RandomPlayer()); sim.join(new RedPlayer()); sim.join(new MinPlayer()); for(int i = 0; i < 3; ++i) { System.out.println("Round number: " + i); sim.nextround(); Simulator Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 71 / 83
82 Polymorsmus a dynamická vazba Za b hu programu je vyhodnocen konkrétní objekt a podle toho je volána jeho p íslu²ná metoda V p íkladu je to metoda dostep rozhraní Participant Zvolený návrh nám umoº uje dopl ovat dal²í hrá e s r znými strategiemi aniº bychom museli modikovat sv t nebo simulátor Vyuºitím polymorsmu získáváme modulární a relativn dob e roz²i itelný (pouºitelný) rámec Uvedené technice se také íká single dispatch P edáváme volání funkce dynamicky (za b hu programu) identikovanému objektu Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 72 / 83
83 Single Dispatch Základním principem tohoto návrhového vzoru je dynamická vazba a vyhodnocení typu za b hu programu Voláním identické metody player.dostep() získáme pokaºdé jinou sázku aniº bychom museli identikovat p íslu²ného hrá e Výhoda dynamické vazby virtuální funkce Relativn komplexního chování jsme dosáhli interakcí více jednoduchých objekt P i vykonání kódu je pouºita dynamická vazba pouze u jednoho objektu Je-li volání funkce závislé na více za b hu detekovaných objektech, hovo íme o multi dispatch V p ípad dvou objekt se jedná o double dispatch Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 73 / 83
84 P íklad roz²í ení P idání polí ka s hodnotou nula P idání polí ka s hodnotou 0 realizujeme vytvo ením nové t ídy WorldZero, která roz²i uje p vodní sv t World public class WorldZero extends World { private final int MIN_NUMBER = 0; public int getminnumber() { return MIN_NUMBER; Nový sv t sta í p edat simulátoru v konstruktoru Simulator sim = new Simulator(new WorldZero()); Zbytek programu z stává identický P íklad: Simulator Jak denovat nový sv t s novými vlastnostmi aniº bychom museli modikovat kompletn celý program? e²ení je pouºit návrhový vzor double dispatch Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 74 / 83
85 P íklad roz²í ení P idání polí ka s hodnotou nula P idání polí ka s hodnotou 0 realizujeme vytvo ením nové t ídy WorldZero, která roz²i uje p vodní sv t World public class WorldZero extends World { private final int MIN_NUMBER = 0; public int getminnumber() { return MIN_NUMBER; Nový sv t sta í p edat simulátoru v konstruktoru Simulator sim = new Simulator(new WorldZero()); Zbytek programu z stává identický P íklad: Simulator Jak denovat nový sv t s novými vlastnostmi aniº bychom museli modikovat kompletn celý program? e²ení je pouºit návrhový vzor double dispatch Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 74 / 83
86 P íklad roz²í ení P idání polí ka s hodnotou nula P idání polí ka s hodnotou 0 realizujeme vytvo ením nové t ídy WorldZero, která roz²i uje p vodní sv t World public class WorldZero extends World { private final int MIN_NUMBER = 0; public int getminnumber() { return MIN_NUMBER; Nový sv t sta í p edat simulátoru v konstruktoru Simulator sim = new Simulator(new WorldZero()); Zbytek programu z stává identický P íklad: Simulator Jak denovat nový sv t s novými vlastnostmi aniº bychom museli modikovat kompletn celý program? e²ení je pouºit návrhový vzor double dispatch Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 74 / 83
87 Double Dispatch Principem double dispatch je vyhodnocení dvou objekt za b hu programu a automatická volba volání odpovídající funkce Podobného efektu lze dosáhnout pouºitím instanceof pro detekci p íslu²ného typu objektu a explicitním voláním p íslu²né t ídy Vzor double dispatch je v²ak elegatn j²í a jednodu²²í Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 75 / 83
88 P íklad nového sv ta s novými vlastnostmi Nejd íve musíme zajistit identikaci objektu sv ta za b hu Do sv ta proto p idáme metodu, ze které budeme volat dostep konkrétního hrá e public class World {... Bet dostep(participant player) { return player.dostep(this); Tak zajistíme identikaci konkrétní implementace sv ta Metodu pojmenujeme nap íklad dostep Ve t íd Simulator upravíme volání player.dostep(world) na world.dostep(player) Tím zajistíme, ºe se nejd íve dynamicky identikuje typ objektu referen ní prom nné world a následn pak typ objektu v referen ní prom nné player Program nyní funguje jako p edtím, navíc nám v²ak umoº uje roz²ít simulátor o novou implementaci sv ta Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 76 / 83
89 Nový sv t WorldNew public class WorldNew extends World { private final String[] fields; public WorldNew() { super(); fields = new String[ ]; fields[0] = "even"; fields[1] = "odd"; fields[2] = "red"; fields[3] = "black"; for (int i = 0; i <= 36; ++i) { fields[i + 4] = Integer.toString(i); Bet dostep(participant player) { // we need to link return player.dostep(this); // dostep with this public String[] getfields() { //new method return fields; Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 77 / 83
90 Roz²í ení ú astníka a existujících hrá Ú astníka hry Participant musíme roz²í it o uvaºování nového sv ta public interface Participant { public Bet dostep(world world); public Bet dostep(worldnew world); Implementaci p vodních hrá provedeme v abstraktní t íd Player public class RandomPlayer extends Player { public void dostep() { // do a random strategy Chování p vodních hrá v novém sv t ne e²íme, proto s výhodou modikujeme pouze abstraktní t ídu Player. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 78 / 83
91 Nový hrá pro nový sv t PlayerNew import java.util.random; public class PlayerNew extends Player { Random rand; public PlayerNew() { super("new player"); rand = new public Bet dostep(world world) { // strategy for standard world return new Bet("black", 1); //always bet 1 public Bet dostep(worldnew world) { // strategy for the new world // random choice even or odd return new Bet(world.getFields()[rand.nextInt(2)], 1); Nový hrá má jiné chování v p vodním a novém sv t. Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 79 / 83
92 Pouºití nového hrá e v novém sv t Demo public class Demo { public static void main(string[] args) { Simulator sim = new Simulator(new WorldNew()); sim.join(new RandomPlayer()); sim.join(new RedPlayer()); sim.join(new MinPlayer()); sim.join(new PlayerNew()); for (int i = 0; i < 3; ++i) { System.out.println("Round number: " + i); sim.nextround(); SimulatorDD Pouze roz²í ení sv ta nesta í, je nutné realizovat dynamickou vazbu Sv t a hrá e m ºeme nyní roz²i ovat, aniº bychom museli zasahovat do simula ního rámec t ídy Simulator Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 80 / 83
93 P etíºení metod overloading a p epsání metod overiding P etíºení metody je volba konkrétní implementace na základ typu a po tu parametr. P etíºení je statická vazba a d je se p i kompilaci programu Volání p epsané metody je vazba dynamická a d je se za b hu programu. Identikovat objekt m ºeme také sami operátorem instanceof Double dispatch obsahuje volání funkce navíc, ale ta je velmi krátká a tak je zpravidla inlinov8na za b hu P i na tení programu i za b hu jsou provád ny optimalizace a krátké funkce tak mohou být p ímo vloºeny do kódu. Odpadá tak reºie související s voláním a uloºením program counter / instruction pointer Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 81 / 83
94 Diskutovaná témata Shrnutí p edná²ky Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 82 / 83
95 Diskutovaná témata Diskutovaná témata Objektov orientvaného programování v Jav Struktura objektu a zapouzd ení Immutable objekty Vztahy mezi objekty D di nost Kompozice Polymorsmus Vyuºití polymorsmu a návrhový vzor Double dispatch P í²t : Výjimky, vý tové typy a kolekce v Jav Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 83 / 83
96 Diskutovaná témata Diskutovaná témata Objektov orientvaného programování v Jav Struktura objektu a zapouzd ení Immutable objekty Vztahy mezi objekty D di nost Kompozice Polymorsmus Vyuºití polymorsmu a návrhový vzor Double dispatch P í²t : Výjimky, vý tové typy a kolekce v Jav Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 2: OOP 83 / 83
Objektově orientované programování
Vztahy mezi objekty Objektově orientované programování Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 2 B0B36PJV Programování v JAVA Jiří Vokřínek,
Objektově orientované programování
Vztahy mezi objekty Objektově orientované programování Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 2 B0B36PJV Programování v JAVA Jiří Vokřínek,
Objektově orientované programování
Objektově orientované programování Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 2 B0B36PJV Programování v JAVA Jan Faigl, Jiří Vokřínek, 2017 B0B36PJV
Část I Objektově orientované programování v Javě
Objektově orientované programování v Javě Objektově orientované programování Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 2 B0B36PJV Programování
Objektově orientované programování polymorfismus
Objektově orientované programování polymorfismus Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 1 A0B36PR2 Programování 2 Jan Faigl, 2016 A0B36PR2 Přednáška
Část 1 Organizace předmětu. Objektově orientované programování polymorfismus. Část 3 Polymorfismus. Část 2 Objektově orientované programování v Javě
Část 1 Organizace předmětu Objektově orientované programování polymorfismus Informace o předmětu Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 1 A0B36PR2
Část I Organizace předmětu
Objektově orientované programování polymorfismus Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 1 A0B36PR2 Programování 2 Část 1 Organizace předmětu
Objektově orientované programování polymorfismus
Objektově orientované programování polymorfismus Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 1 A0B36PR2 Programování 2 Jan Faigl, 2016 A0B36PR2 Přednáška
Objektově orientované programování
Objektově orientované programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 9 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 9: Objektově
P íklad t íd geometrických objekt a jejich vizualizace
P íklad t íd geometrických objekt a jejich vizualizace Ji í Vok ínek Katedra po íta Fakulta elektrotechnická ƒeské vysoké u ení technické v Praze P edná²ka 2 B6B36PJV Programování v JAVA Jan Faigl, Ji
Část I Objektově orientované programování - Dědičnost, kompozice a balíky
Objektově orientované programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 9 A0B36PR1 Programování 1 Část 1 Objektově orientované programování
Ú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
Úvod. Katedra po íta. Ji í Vok ínek. P edná²ka 1 B6B36PJV Programování v JAVA. Fakulta elektrotechnická ƒeské vysoké u ení technické v Praze
Úvod Ji í Vok ínek Katedra po íta Fakulta elektrotechnická ƒeské vysoké u ení technické v Praze P edná²ka 1 B6B36PJV Programování v JAVA Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka 1: Úvod 1 / 51
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
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á
Objektově orientované programování
Objektově orientované programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 7 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 7: Objektově
Konceptuální modelování
Konceptuální modelování Ing. Michal Valenta PhD. Katedra softwarového inºenýrství Fakulta informa ních technologií ƒeské vysoké u ení technické v Praze c Michal Valenta, 2010 Databázové systémy BI-DBS
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í
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ů
Základy objektové orientace I. Únor 2010
Seminář Java Základy objektové orientace I Radek Kočí Fakulta informačních technologií VUT Únor 2010 Radek Kočí Seminář Java Základy OO (1) 1/ 20 Téma přednášky Charakteristika objektově orientovaných
Část 1 Třídy a objekty. Objektově orientované programování. Část 2 Vztahy mezi objekty. Část 3 Objektově orientované programování (v Javě)
Část 1 Třídy a objekty Objektově orientované programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 7 A0B36PR1 Programování 1 Literatura Příklad
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
Skalární sou in. Úvod. Denice skalárního sou inu
Skalární sou in Jedním ze zp sob, jak m ºeme dva vektory kombinovat, je skalární sou in. Výsledkem skalárního sou inu dvou vektor, jak jiº název napovídá, je skalár. V tomto letáku se nau íte, jak vypo
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,
Integrování jako opak derivování
Integrování jako opak derivování V tomto dokumentu budete seznámeni s derivováním b ºných funkcí a budete mít moºnost vyzkou²et mnoho zp sob derivace. Jedním z nich je proces derivování v opa ném po adí.
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
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í
C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++
C++ Akademie SH 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory Za áte níci C++ 20. b ezna 2011 Obsah 1 Prom nné - primitivní typy Celá ísla ƒísla s pohyblivou desetinnou árkou, typ bool 2 Podmínka
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,
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ů
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
e²ení systém lineárních rovnic pomocí s ítací, dosazovací a srovnávací metody
e²ení systém lineárních rovnic pomocí s ítací, dosazovací a srovnávací metody V praxi se asto setkávame s p ípady, kdy je pot eba e²it více rovnic, takzvaný systém rovnic, obvykle s více jak jednou neznámou.
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 =
Objektově orientované programování
Objektově orientované programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 8 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 8: Objektově
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
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
Vektor náhodných veli in - práce s více prom nnými
Vektor náhodných veli in - práce s více prom nnými 12. kv tna 2015 N kdy k popisu n jaké situace pot ebujeme více neº jednu náhodnou veli inu. Nap. v k, hmotnost, vý²ku. Mezi t mito veli inami mohou být
účetních informací státu při přenosu účetního záznamu,
Strana 6230 Sbírka zákonů č. 383 / 2009 Částka 124 383 VYHLÁŠKA ze dne 27. října 2009 o účetních záznamech v technické formě vybraných účetních jednotek a jejich předávání do centrálního systému účetních
Obsah. Pouºité zna ení 1
Obsah Pouºité zna ení 1 1 Úvod 3 1.1 Opera ní výzkum a jeho disciplíny.......................... 3 1.2 Úlohy matematického programování......................... 3 1.3 Standardní maximaliza ní úloha lineárního
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ů
-1- N á v r h ČÁST PRVNÍ OBECNÁ USTANOVENÍ. 1 Předmět úpravy
-1- I I. N á v r h VYHLÁŠKY ze dne 2009 o účetních záznamech v technické formě vybraných účetních jednotek a jejich předávání do centrálního systému účetních informací státu a o požadavcích na technické
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
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ů
Seminá e. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, sem. 1-13
Seminá e Ing. Michal Valenta PhD. Katedra softwarového inºenýrství Fakulta informa ních technologií ƒeské vysoké u ení technické v Praze c Michal Valenta, 2010 Databázové systémy BI-DBS ZS 2010/11, sem.
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
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
HLAVA III PODROBNOSTI O VEDENÍ ÚST EDNÍHO SEZNAMU OCHRANY P ÍRODY
HLAVA III PODROBNOSTI O VEDENÍ ÚST EDNÍHO SEZNAMU OCHRANY P ÍRODY (K 42 odst. 2 zákona) 5 (1) Úst ední seznam ochrany p írody (dále jen "úst ední seznam") zahrnuje soupis, popis, geometrické a polohové
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í
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
Ú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
Úvod. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 1 B0B36PJV Programování v JAVA
Úvod Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 1 B0B36PJV Programování v JAVA Jiří Vokřínek, Jan Faigl, 2018 B0B36PJV Přednáška 1: Úvod 1 /
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
BOZP - akcepta ní testy
BOZP - akcepta ní testy Kristýna Streitová Zadavatel: Ing. Ji í Chludil 13. prosince 2011 Obsah 1 Úvod 2 1.1 Popis test....................................... 2 2 Testy 3 2.1 ID - 1 P ihlá²ení do systému.............................
GUI v Jav a událostmi ízené programování
GUI v Jav a událostmi ízené programování Ji í Vok ínek Katedra po íta Fakulta elektrotechnická ƒeské vysoké u ení technické v Praze P edná²ka 6 B6B36PJV Programování v JAVA Jan Faigl, Ji í Vok ínek, 2016
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
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
Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová
Struktura třídy, operátory, jednoduché algoritmy, junit 2. cvičení Alena Buchalcevová Cíle cvičení seznámit se s rozhraním (interface) v Javě seznámit se s testováním při vývoji (makety, JUnit) naučit
PARADIGMATA PROGRAMOVÁNÍ 2A MAKRA I
KATEDRA INFORMATIKY, P ÍRODOV DECKÁ FAKULTA UNIVERZITA PALACKÉHO, OLOMOUC PARADIGMATA PROGRAMOVÁNÍ 2A MAKRA I Slajdy vytvo ili Vilém Vychodil a Jan Kone ný (KI, UP Olomouc) PP 2A, Lekce 3 Makra I 1 / 35
Pravd podobnost a statistika - cvi ení. Simona Domesová místnost: RA310 (budova CPIT) web:
Pravd podobnost a statistika - cvi ení Simona Domesová simona.domesova@vsb.cz místnost: RA310 (budova CPIT) web: http://homel.vsb.cz/~dom0015 Cíle p edm tu vyhodnocování dat pomocí statistických metod
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ě
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ů
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
OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC
OMO 4 - Creational design patterns A Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC Ing. David Kadleček, PhD. kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1 Creational
PB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
Specifikace systému ESHOP
Nabídka: Specifikace systému ESHOP březen 2009 Obsah 1 Strana zákazníka 1 1.1 Nabídka produkt, strom kategorií..................... 1 1.2 Objednávka a ko²ík.............................. 1 1.3 Registrace
Úvod. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 1 B0B36PJV Programování v JAVA
Úvod Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 1 B0B36PJV Programování v JAVA Jiří Vokřínek, Jan Faigl, 2018 B0B36PJV Přednáška 1: Úvod 1 /
Informace o předmětu. Úvod. Cíle předmětu. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Informace o předmětu
Úvod Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 1 B0B36PJV Programování v JAVA Informace o předmětu Programovací jazyk Java OOP - Třídy a objekty
Část I Třídy a objekty
Část 1 Třídy a objekty Objektově orientované programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 8 A0B36PR1 Programování 1 Třídy a objekty shrnutí
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
PB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
Po etní geometrie. Výpo et délky p epony: c 2 = a 2 + b 2 Výpo et délky odv sny: a 2 = c 2 b 2, b 2 = c 2 a 2
Po etní geometrie Pythagorova v ta Obsah tverce nad p eponou je roven sou tu obsah tverc nad ob ma odv snami. Výpo et délky p epony: c = a + b Výpo et délky odv sny: a = c b, b = c a P íklad 1: Vypo t
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í
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
Základní stavební prvky algoritmu
Základní stavební prvky algoritmu Podmínka. Cyklus for, while, do-while. Funkce, metody. Přetěžování. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká
Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo
Datové typy v Javě Tomáš Pitner, upravil Marek Šabo Úvod k datovým typům v Javě Existují dvě základní kategorie datových typů: primitivní a objektové Primitivní v proměnné je uložena přímo hodnota např.
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
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í
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:
PREPROCESOR POKRAČOVÁNÍ
PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,
Dynamicky vázané metody. Pozdní vazba, virtuální metody
Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:
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ícevláknové aplikace
Vícevláknové aplikace Ji í Vok ínek Katedra po íta Fakulta elektrotechnická ƒeské vysoké u ení technické v Praze P edná²ka 7 B6B36PJV Programování v JAVA Jan Faigl, Ji í Vok ínek, 2016 B6B36PJV P edná²ka
Data v počítači EIS MIS TPS. Informační systémy 2. Spojení: e-mail: jan.skrbek@tul.cz tel.: 48 535 2442 Konzultace: úterý 14 20-15 50
Informační systémy 2 Data v počítači EIS MIS TPS strategické řízení taktické řízení operativní řízení a provozu Spojení: e-mail: jan.skrbek@tul.cz tel.: 48 535 2442 Konzultace: úterý 14 20-15 50 18.3.2014
P íklad 1 (Náhodná veli ina)
P íklad 1 (Náhodná veli ina) Uvaºujeme experiment: házení mincí. Výsledkem pokusu je rub nebo líc, ºe padne hrana neuvaºujeme. Pokud hovo íme o náhodné veli in, musíme p epsat výsledky pokusu do mnoºiny
Příloha č. 54. Specifikace hromadné aktualizace SMS-KLAS
Název projektu: Redesign Statistického informačního systému v návaznosti na zavádění egovernmentu v ČR Příjemce: Česká republika Český statistický úřad Registrační číslo projektu: CZ.1.06/1.1.00/07.06396
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;
IB111 Programování a algoritmizace. Objektově orientované programování (OOP)
IB111 Programování a algoritmizace Objektově orientované programování (OOP) OP a OOP Objekt Kombinuje data a funkce a poskytuje určité rozhraní. OP = objektové programování Vše musí být objekty Např. Smalltalk,
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
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
Sazba zdrojových kód. Jakub Kadl ík 20. 03. 2014
Sazba zdrojových kód Jakub Kadl ík 20. 03. 2014 1 Obsah 1 Základní prost edí verbatim 3 2 Balí ek listings 3 3 Sazba kódu z externího souboru 5 4 Téma Solarized 5 4.1 Solarized light.............................
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ě
3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java
3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java Studijní cíl V tomto bloku navážeme na konec předchozího bloku a seznámíme se s vývojovými prostředími, které se nejčastěji používají
Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo
Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)
Oborové číslo Hodnocení - část A Hodnocení - část B Hodnocení - část A+B
PŘIJÍMACÍ TEST Z INFORMATIKY A MATEMATIKY NAVAZUJÍCÍ MAGISTERSKÉ STUDIUM V OBORU APLIKOVANÁ INFORMATIKA FAKULTA INFORMATIKY A MANAGEMENTU UNIVERZITY HRADEC KRÁLOVÉ ČÁST A Oborové číslo Hodnocení - část
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é
Binární operace. Úvod. Pomocný text
Pomocný text Binární operace Úvod Milí e²itelé, binární operace je pom rn abstraktní téma, a tak bude ob as pot eba odprostit se od konkrétních p íklad a podívat se na v c s ur itým nadhledem. Nicmén e²ení
Objektov orientované programování. C++ Akademie SH. 7. Objektov orientované programování. Michal Kvasni ka. Za áte níci C++ 2.
C++ Akademie SH Za áte níci C++ 2. kv tna 2011 Obsah 1 Objektov orientované programování Obsah Objektov orientované programování 1 Objektov orientované programování P et ºování Jev, díky kterému m ºeme
Jazyk C# (seminář 3)
Jazyk C# (seminář 3) Pavel Procházka KMI October 8, 2014 Motivace Největší využití v programování okenních aplikací a GUI knihoven. Data reprezentujeme pomocí objektů (tříd), máme tedy ucelený pohled na
Limity funkcí v nevlastních bodech. Obsah
Limity funkcí v nevlastních bodech V tomto letáku si vysv tlíme, co znamená, kdyº funkce mí í do nekone na, mínus nekone na nebo se blíºí ke konkrétnímu reálnému íslu, zatímco x jde do nekone na nebo mínus