SW_10. Dekorátor - Decorator Stav - State

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

Download "SW_10. Dekorátor - Decorator Stav - State"

Transkript

1 SW_10 Dekorátor - Decorator Stav - State 1

2 Úvod Dekorátor Naučíte se jak zkrášlovat (decorate) vaše třídy za běhu programu s využitím skládání objektů. Tímto způsobem budete schopni dát vašim objektům novou funkčnost bez přidávání jakéhokoli kódu do základních tříd. 2

3 Kontext: Úvod Dekorátor Malé změny chování objektu za běhu programu. Problém: Jak využít skládání pro dynamické změny chování objektu. 3

4 Řešení: Úvod Dekorátor Návrhový vzor Dekorátor, který dovoluje skládat nové varianty operace za běhu programu. 4

5 Příklad Kavárna rychle se rozvíjející obchod. Rychle rostoucí nabídka nápojů různě kombinovaných. Prvotní struktura tříd: 5

6 Příklad K vaší kávě si můžete objednat řadu přísad: vařené mléko, soju, mochu a ještě to završit se smetanou. Kavárna si účtuje zvlášť za každou položku, co si zákazník zvolí. To také potřebují zabudovat do svého systému výpočtu ceny. Jedna z možností je mít jednu třídu Nápoj a vše ostatní jako podtřídy této jedné nadtřídy. 6

7 Příklad Uvedené řešení bude působit problémy v údržbě systému. Co se stane, když se zvýší cena mléka? Co se stane, když se přidá nová karamelová příchuť? 7

8 Příklad Potřebujeme všechny ty třídy? Nestačily by pouze instanční proměnné? Boolovská hodnota pro každou přísadu. Cena se spočítá podle počtu přísad. description milk soy mocha whip Beverage getdescription() cost() hasmilk() setmilk() hassoy() setsoy() hasmocha() setmocha() haswhip() setwhip() // other methods 8

9 Příklad Cena v nadtřídě bude počítat ceny v podtřídách. Každá z podtříd spočítá hodnotu přísad a zavolá metodu pro výpočet ceny z nadtřídy. HouseBlend description milk soy mocha whip getdescription() cost() hasmilk() setmilk() hassoy() setsoy() hasmocha() setmocha() haswhip() setwhip() Beverage // other methods DarkRoast Decaf Espresso cost() cost() cost() cost() 9

10 Příklad Neřeší úplně problémy rozšiřování do budoucna. Měnící se ceny přísad nás nutí měnit kód. Nové přísady nás nutí přidat nové metody a změnit metodu cost() v nadtřídě. Pro nový nápoj nemusí být všechny z existujících přísad vhodné. Co když chce zákazník double mocha? 10

11 Princip otevření-zavření Open Closed principle Třídy by měly být otevřené pro rozšíření, ale uzavřené pro modifikaci. Našim cílem je dovolit třídám, aby byly snadno rozšiřitelné pro začlenění nového chování bez modifikace existujícího kódu. Čeho tím dosáhneme? Návrhy, které jsou odolné změnám a dostatečně flexibilní pro přijetí nové funkcionality, aby vyhověly měnícím se požadavkům. 11

12 Otevření pro změny, uzavření pro modifikace? Zní to protichůdně. Existují OOP techniky, umožňující rozšíření beze změny existujícího kódu. přidání dalších pozorovatelů Observer Ač se to může zdát protichůdné, existují techniky, kterém dovolují rozšíření kódu bez přímé modifikace. Opatrnost při výběru částí kódu, které potřebují rozšíření. Aplikace principu je všude zbytečná. 12

13 Konstrukce nápojové objednávky s Dekorátorem 1. DarkRoast dědí ze třídy Beverage metodu cost(), která počítá cenu nápoje. 2. Mocha dekorátor, ale také nápoj (podtřída Beverage) 3. Whip - dekorátor 13

14 Konstrukce nápojové objednávky s Dekorátorem 1. Volání metody cost() dekorátoru Whip. 2. Whip volá cost() na Mocha. 3. Mocha volá cost() na DarkRoast. 4. DarkRoast vrací 99 centů. 5. Mocha přidává 20 centů ($1.19). 6. Whip přidává 10 centů - ($1.29). 14

15 Dekorátor Dekorátory mají stejnou nadtřídu jako objekty, které dekorují. Je možné použít jeden nebo více dekorátorů, které obalí (wrap) daný objekt. To, že dekorátor a objekt mají stejnou nadtřídu umožňuje nechat kolovat dekorátor místo dekorovaného objektu. Dekorátor přidává své vlastní chování buď před, nebo po delegování objektu, který dekoruje, aby udělal zbytek práce. 15

16 Dekorátor Objekty mohou být dekorovány kdykoli, můžeme dekorovat objekty dynamicky za běhu, tolika dekorátory, kolik se nám zlíbí. 16

17 Vzor Dekorátor Vzor Dekorátor přidává dodatečnou funkčnost (chování) objektu dynamicky. Dekorátory poskytují flexibilní alternativu k dědičnosti pro rozšíření funkcionality. 17

18 Vzor Dekorátor ConcreteComponent je objekt, jehož funkcionalitu rozšiřujeme. Component methoda() methodb() // other methods Každá component může být použita samostatně, nebo obalena dekorátorem. ConcreteComponent methoda() methodb() // other methods Decorator methoda() methodb() // other methods Dekorátory implementují stejné rozhraní abstraktní třídy, jako komponenty, které dekorují. ConcreteDecoratorA má datový atribut pro odkaz na objekt, který dekoruje. ConcreteDecoratorA Component wrappedobj methoda() methodb() newbehavior() ConcreteDecoratorB Component wrappedobj() Object newstate methoda() methodb() Dekorátor může rozšířit stav komponenty. // other method // other methods 18

19 Konkrétní příklad 19

20 public abstract class Beverage { String description = "Unknown Beverage"; Poznámky public String getdescription() { return description; public abstract double cost();

21 public abstract class CondimentDecorator extends Beverage { public abstract String getdescription(); Poznámky 21

22 public class Espresso extends Beverage { Poznámky public Espresso() { description = "Espresso"; public double cost() { return 1.99; 22

23 public class HouseBlend extends Beverage { public HouseBlend() { description = "House Blend Coffee"; Poznámky public double cost() { return.89; 23

24 public class Mocha extends CondimentDecorator { Beverage beverage; public Mocha(Beverage beverage) { this.beverage = beverage; Poznámky Implementace konkrétního dekorátoru public String getdescription() { return beverage.getdescription() + ", Mocha"; public double cost() { return.20 + beverage.cost(); 24

25 public class StarbuzzCoffee { Poznámky public static void main(string args[]) { Beverage beverage = new Espresso(); System.out.println(beverage.getDescription() + " $" + beverage.cost()); Beverage beverage2 = new DarkRoast(); beverage2 = new Mocha(beverage2); beverage2 = new Mocha(beverage2); beverage2 = new Whip(beverage2); System.out.println(beverage2.getDescription() + " $" + beverage2.cost()); Beverage beverage3 = new HouseBlend(); beverage3 = new Soy(beverage3); beverage3 = new Mocha(beverage3); beverage3 = new Whip(beverage3); System.out.println(beverage3.getDescription() + " $" + beverage3.cost()); Espresso $1.99 Dark Roast Coffee, Mocha, Mocha, Whip $1.49 House Blend Coffee, Soy, Mocha, Whip $

26 Reálné dekorátory Java I/O Java I/O třídy využívají dekorátory. Dva dekorátory a jeden objekt. 26

27 import java.io.*; public class LowerCaseInputStream extends FilterInputStream { public LowerCaseInputStream(InputStream in) { super(in); Poznámky FileInputStream je abstraktní dekorátor pro pšechny InputStreamy. public int read() throws IOException { int c = super.read(); return (c == -1? c : Character.toLowerCase((char)c)); public int read(byte[] b, int offset, int len) throws IOException { int result = super.read(b, offset, len); for (int i = offset; i < offset+result; i++) { b[i] = (byte)character.tolowercase((char)b[i]); return result; Potřebujeme dvě metody read(). Jednu pro byty a druhou pro pole bytů. 27

28 import java.io.*; Poznámky public class InputTest { public static void main(string[] args) throws IOException { int c; try { InputStream in = new LowerCaseInputStream( new BufferedInputStream( new FileInputStream("test.txt"))); while((c = in.read()) >= 0) { System.out.print((char)c); in.close(); catch (IOException e) { e.printstacktrace(); 28

29 Shrnutí - Dekorátor Vzor Dekorátor můžeme použít všude tam, kde by řešení rozšíření funkcionality děděním přinášelo problémy se vznikem kombinací výsledných řešení, to je problémy se statickou neměnnou vazbou. Příklady využití uvedeného vzoru můžeme nalézt v javovské knihovně pro práci se streamy. Tam můžeme využívat vkládání instancí do sebe. 29

30 Shrnutí - Dekorátor Vzor Dekorátor poskytuje flexibilní návrh v případech, kdy potřebujeme kombinovat různé implementace operací za běhu programu. 30

31 Kontext: Vzor Stav - State Stav objektu je dán kombinací aktuálních hodnot jeho datových atributů. Hodnoty těchto atributů měníme pomocí metod set(). Při zaslání zprávy set() objektu, se přiřadí nějaká hodnota příslušnému atributu objektu. Tím se změnil jeho stav. Objekty obyčejně mění své vlastní stavy, při vykonání jejich metod. 31

32 Problém: Stav V některých případech však jednoduchá implementace tohoto principu pomocí if nebo switch příkazů může vést k velmi nepřehledným konstrukcím a jejich obtížné údržbě. 32

33 Schematické zobrazení Stavový diagram činnost prodejního automatu se žvýkačkami. 33

34 public class GumballMachine { Poznámky final static int SOLD_OUT = 0; final static int NO_QUARTER = 1; final static int HAS_QUARTER = 2; final static int SOLD = 3; int state = SOLD_OUT; int count = 0; public GumballMachine(int count) { this.count = count; if (count > 0) { state = NO_QUARTER; 34

35 public void insertquarter() { if (state == HAS_QUARTER) { System.out.println("You can't insert another quarter"); else if (state == NO_QUARTER) { state = HAS_QUARTER; System.out.println("You inserted a quarter"); else if (state == SOLD_OUT) { System.out.println("You can't insert a quarter, the machine is sold out"); else if (state == SOLD) { System.out.println("Please wait, we're already giving you a gumball"); Poznámky public void ejectquarter() { if (state == HAS_QUARTER) { System.out.println("Quarter returned"); state = NO_QUARTER; else if (state == NO_QUARTER) { System.out.println("You haven't inserted a quarter"); else if (state == SOLD) { System.out.println("Sorry, you already turned the crank"); else if (state == SOLD_OUT) { System.out.println("You can't eject, you haven't inserted a quarter yet"); 35

36 public void turncrank() { if (state == SOLD) { System.out.println("Turning twice doesn't get you another gumball!"); else if (state == NO_QUARTER) { System.out.println("You turned but there's no quarter"); else if (state == SOLD_OUT) { System.out.println("You turned, but there are no gumballs"); else if (state == HAS_QUARTER) { System.out.println("You turned..."); state = SOLD; dispense(); Poznámky 36

37 public void dispense() { if (state == SOLD) { System.out.println("A gumball comes rolling out the slot"); count = count - 1; if (count == 0) { System.out.println("Oops, out of gumballs!"); state = SOLD_OUT; else { state = NO_QUARTER; else if (state == NO_QUARTER) { System.out.println("You need to pay first"); else if (state == SOLD_OUT) { System.out.println("No gumball dispensed"); else if (state == HAS_QUARTER) { System.out.println("No gumball dispensed"); Poznámky 37

38 public void refill(int numgumballs) { this.count = numgumballs; state = NO_QUARTER; Poznámky public String tostring() { StringBuffer result = new StringBuffer(); result.append("\nmighty Gumball, Inc."); result.append("\njava-enabled Standing Gumball Model #2004\n"); result.append("inventory: " + count + " gumball"); if (count!= 1) { result.append("s"); result.append("\nmachine is "); if (state == SOLD_OUT) { result.append("sold out"); else if (state == NO_QUARTER) { result.append("waiting for quarter"); else if (state == HAS_QUARTER) { result.append("waiting for turn of crank"); else if (state == SOLD) { result.append("delivering a gumball"); result.append("\n"); return result.tostring(); 38

39 public class GumballMachineTestDrive { public static void main(string[] args) { GumballMachine gumballmachine = new GumballMachine(5); Poznámky Zkouška System.out.println(gumballMachine); gumballmachine.insertquarter(); gumballmachine.turncrank(); System.out.println(gumballMachine); gumballmachine.insertquarter(); gumballmachine.ejectquarter(); gumballmachine.turncrank(); System.out.println(gumballMachine); gumballmachine.insertquarter(); gumballmachine.turncrank(); gumballmachine.insertquarter(); gumballmachine.turncrank(); gumballmachine.ejectquarter(); System.out.println(gumballMachine); 39

40 Zhodnocení postupu Tento kód neodpovídá principu Open Closed (Otevřený pro rozšíření, uzavřený pro modifikace). Přechody stavů nejsou explicitní; jsou uloženy někde uvnitř podmínkových příkazů. Další rozšiřování bude způsobovat chyby v kódu. 40

41 Nový návrh Přepracovat zapouzdřené stavové objekty do vlastních tříd a delegovat aktuální stav, když akce nastane. Postup: 1. Definovat rozhraní State, které obsahuje metodu pro každou akci Gumball Machine. 2. Implementovat rozhraní State pro každý definovaný stav. Tyto třídy budou zodpovědné za chování prodejního automatu, když je v odpovídajícím stavu. 41

42 Nový návrh 3. Zbavit se všeho podmínkového kódu a místo něho delegovat činnosti na třídy stavů. 42

43 Definování rozhraní a tříd Každý stav mapujeme přímo do třídy. 4 stavy = 4 třídy 43

44 Popis stavů NoQuarterState jde na stav HasQuarterState. Říká zákazníkovi, že nevložil minci. HasQuarterState jde na stav SoldState. SoldState říká zákazníkovi ať počká, že dostane žvýkačku. Vydá žvýkačku, zkontroluje jejich stav if > 0, jde na stav NoQuarterState, jinak jde na stav SoldOutState. SoldOutState říká zákazníkovi, že nemá žvýkačky. 44

45 public class NoQuarterState implements State { GumballMachine gumballmachine; Poznámky public NoQuarterState(GumballMachine gumballmachine) { this.gumballmachine = gumballmachine; Datový atribut pro odkaz na gumballmachine. public void insertquarter() { System.out.println("You inserted a quarter"); gumballmachine.setstate(gumballmachine.gethasquarterstate()); public void ejectquarter() { System.out.println("You haven't inserted a quarter"); public void turncrank() { System.out.println("You turned, but there's no quarter"); public void dispense() { System.out.println("You need to pay first"); public String tostring() { return "waiting for quarter";

46 public class GumballMachine { Poznámky State soldoutstate; State noquarterstate; State hasquarterstate; State soldstate; State state = soldoutstate; int count = 0; public GumballMachine(int numbergumballs) { soldoutstate = new SoldOutState(this); noquarterstate = new NoQuarterState(this); hasquarterstate = new HasQuarterState(this); soldstate = new SoldState(this); this.count = numbergumballs; if (numbergumballs > 0) { state = noquarterstate;

47 public void insertquarter() { state.insertquarter(); Poznámky public void ejectquarter() { state.ejectquarter(); public void turncrank() { state.turncrank(); state.dispense(); void setstate(state state) { this.state = state; void releaseball() { System.out.println("A gumball comes rolling out the slot..."); if (count!= 0) { count = count - 1; int getcount() { return count;

48 void refill(int count) { this.count = count; state = noquarterstate; Poznámky public State getstate() { return state; public State getsoldoutstate() { return soldoutstate; public State getnoquarterstate() { return noquarterstate; public State gethasquarterstate() { return hasquarterstate; public State getsoldstate() { return soldstate;

49 public String tostring() { StringBuffer result = new StringBuffer(); result.append("\nmighty Gumball, Inc."); result.append("\njava-enabled Standing Gumball Model #2004"); result.append("\ninventory: " + count + " gumball"); if (count!= 1) { result.append("s"); result.append("\n"); result.append("machine is " + state + "\n"); return result.tostring(); Poznámky

50 public class HasQuarterState implements State { GumballMachine gumballmachine; Poznámky public HasQuarterState(GumballMachine gumballmachine) { this.gumballmachine = gumballmachine; public void insertquarter() { System.out.println("You can't insert another quarter"); public void ejectquarter() { System.out.println("Quarter returned"); gumballmachine.setstate(gumballmachine.getnoquarterstate()); public void turncrank() { System.out.println("You turned..."); gumballmachine.setstate(gumballmachine.getsoldstate()); public void dispense() { System.out.println("No gumball dispensed"); public String tostring() { return "waiting for turn of crank";

51 ublic class SoldState implements State { Poznámky GumballMachine gumballmachine; public SoldState(GumballMachine gumballmachine) { this.gumballmachine = gumballmachine; public void insertquarter() { System.out.println("Please wait, we're already giving you a gumball"); public void ejectquarter() { System.out.println("Sorry, you already turned the crank"); public void turncrank() { System.out.println("Turning twice doesn't get you another gumball!"); public void dispense() { gumballmachine.releaseball(); if (gumballmachine.getcount() > 0) { gumballmachine.setstate(gumballmachine.getnoquarterstate()); else { System.out.println("Oops, out of gumballs!"); gumballmachine.setstate(gumballmachine.getsoldoutstate());

52 public String tostring() { return "dispensing a gumball"; Poznámky

53 Definice vzoru Stav - State Vzor Stav dovoluje objektu měnit své chování, když se změní interní stavy. Zdá se, že objekt změnil svoji třídu. Context request() handle() State ConcreteStateA ConcreteStateB state.handle() handle() handle() 53

54 public class WinnerState implements State { GumballMachine gumballmachine; public WinnerState(GumballMachine gumballmachine) { this.gumballmachine = gumballmachine; Poznámky Rozšíření vzoru public void insertquarter() { System.out.println("Please wait, we're already giving you a Gumball"); public void ejectquarter() { System.out.println("Please wait, we're already giving you a Gumball"); public void turncrank() { System.out.println("Turning again doesn't get you another gumball!");

55 public void dispense() { System.out.println("YOU'RE A WINNER! You get two gumballs for your quarter"); gumballmachine.releaseball(); if (gumballmachine.getcount() == 0) { gumballmachine.setstate(gumballmachine.getsoldoutstate()); else { gumballmachine.releaseball(); if (gumballmachine.getcount() > 0) { gumballmachine.setstate(gumballmachine.getnoquarterstate()); else { System.out.println("Oops, out of gumballs!"); gumballmachine.setstate(gumballmachine.getsoldoutstate()); Poznámky public String tostring() { return "despensing two gumballs for your quarter, because YOU'RE A WINNER!";

56 public class HasQuarterState implements State { Random randomwinner = new Random(System.currentTimeMillis()); GumballMachine gumballmachine; Poznámky public HasQuarterState(GumballMachine gumballmachine) { this.gumballmachine = gumballmachine; public void insertquarter() { System.out.println("You can't insert another quarter"); public void ejectquarter() { System.out.println("Quarter returned"); gumballmachine.setstate(gumballmachine.getnoquarterstate()); public void turncrank() { System.out.println("You turned..."); int winner = randomwinner.nextint(10); if ((winner == 0) && (gumballmachine.getcount() > 1)) { gumballmachine.setstate(gumballmachine.getwinnerstate()); else { gumballmachine.setstate(gumballmachine.getsoldstate());

57 public void dispense() { System.out.println("No gumball dispensed"); Poznámky public String tostring() { return "waiting for turn of crank";

58 public class GumballMachineTestDrive { Poznámky public static void main(string[] args) { GumballMachine gumballmachine = new GumballMachine(10); System.out.println(gumballMachine); gumballmachine.insertquarter(); gumballmachine.turncrank(); gumballmachine.insertquarter(); gumballmachine.turncrank(); System.out.println(gumballMachine); gumballmachine.insertquarter(); gumballmachine.turncrank(); gumballmachine.insertquarter(); gumballmachine.turncrank(); System.out.println(gumballMachine);

59 Shrnutí Stav zapouzdřuje chování, které se mění a používá delegování k rozhodnutí, které chování použít. Návrhový vzor State využívá ker své činnosti polymorfismu. Mezi vlastní třídou a jednotlivými stavy, reprezentovanými také třídami zavedeme buď rozhraní, nebo abstraktní třídu. Vlastní třídy dílčích stavů jsou pak buď podtřídami abstraktní třídy, nebo implementují metody rozhraní. 59

60 Shrnutí Výhodou tohoto vzoru je snadná manipulace se stavy ve smyslu jejich modifikace, tedy přidávání dalších stavů nebo jejich rušení (odebírání). Úpravy jsou přehledné a snadno proveditelné. 60

APNVZ_10. Dekorátor - Decorator Stav - State

APNVZ_10. Dekorátor - Decorator Stav - State APNVZ_10 Dekorátor - Decorator Stav - State 1 Úvod Dekorátor Naučíte se jak zkrášlovat (decorate) vaše třídy za běhu programu s využitím skládání objektů. Tímto způsobem budete schopni dát vašim objektům

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

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

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

Ú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

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

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo Výchozí a statické metody rozhraní Tomáš Pitner, upravil Marek Šabo Výchozí a statické metody rozhraní Java 8 přidává ohledně metod v rozhraní nové možnosti. Neuvidíme je tedy ve starém kódu a mnozí vývojáři

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

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

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

RMI Remote Method Invocation

RMI Remote Method Invocation 2. cvičení RMI Remote Method Invocation 2007/09 ver.2.0 1 RMI co to je? vyvolání metody z jiné JVM lokalizace vzdáleného objektu komunikace se vzdálenými objekty přenos objektu v bytecode typicky klient

Více

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

IRAE 07/08 Přednáška č. 1 Úvod do předmětu OOP Objekt Proč OOP? Literatura, osnova předmětu viz. cvičení Základní prvek OOP sw inženýrství = model reálných objektů (věcí) člověk, auto, okno (ve windows), slovník, = model abstraktní

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

Java - řazení objektů

Java - řazení objektů Java - řazení objektů Kapitola seznamuje se základními principy řazení objektů Klíčové pojmy: Přirozené řazení, absolutní řazení, ideální porovnávatelná třída ŘAZENÍ OBJEKTŮ U objektů není příliš jasné,

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

Ú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

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

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

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

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

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu State State Známý jako Stav, Object for States Účel umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu Použitelnost chování objektu závisí na jeho stavu, který se mění za

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

Ú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

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

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

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

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

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

8. přednáška: Soubory a proudy

8. přednáška: Soubory a proudy 8. přednáška: Soubory a proudy Soubor jako posloupnost bytů Ukládání/čtení primitivních typů Ukládání/čtení primitivních typů a objektů (řetězců) Ukládání/čtení objektů do souboru - serializace Obsah Algoritmizace

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

Ú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

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

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

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

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

Návrhové vzory OMO, LS 2014/2015

Návrhové vzory OMO, LS 2014/2015 Návrhové vzory OMO, LS 2014/2015 Motivace Cílem objektového návrhu je strukturu aplikace navrhnout tak, aby splňovala následující kritéria: snadná rozšiřitelnost účelnost testovatelnost dokumentovatelnost

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

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

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

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

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)

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

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

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

Jazyk C# (seminář 3)

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

Více

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25 Seminář Java Návrhové vzory Radek Kočí Fakulta informačních technologií VUT Duben 2009 Radek Kočí Seminář Java Návrhové vzory 1/ 25 Znovupoužitelnost Dědičnost implementace třídy pomocí jiné (již existující)

Více

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33 Objekt jako proměnná Objekty a metody Objekt = proměnná referenčního typu vznik pomocí new, chování viz pole jako referenční proměnná minulý semestr Stack Heap objekt ref this 10 20 atr1 atr2 jinyobjekt

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

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

boolean hasnext() Object next() void remove() Kolekce

boolean hasnext() Object next() void remove() Kolekce 11. Kontejnery Kontejnery Kontejnery jako základní dynamické struktury v Javě Kolekce, iterátory (Collection, Iterator) Seznamy (rozhraní List, třídy ArrayList, LinkedList) Množiny (rozhraní Set, třída

Více

Výjimky. v C# a Javě

Výjimky. v C# a Javě Výjimky v C# a Javě Výjimky v C# Výjimky poskytují v C# způsob, jak reagovat na nečekané události. Uživatel např. zadá místo čísla text nebo soubor, který chceme otevřít, je využíván jiným procesem. To

Více

PREPROCESOR POKRAČOVÁNÍ

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,

Více

Návrhové vzory Design Patterns

Návrhové vzory Design Patterns Návrhové vzory Design Patterns doc. Ing. František Huňka, CSc. Ostravská univerzita PřF 1 Definice vzoru Každý vzor popisuje problém, který nastává opakovaně v našem prostředí, a potom popisuje podstatu

Více

SW_12. Vzor Příkaz - Command Vzor Návštěvník - Visitor

SW_12. Vzor Příkaz - Command Vzor Návštěvník - Visitor SW_12 Vzor Příkaz - Command Vzor Návštěvník - Visitor 1 Problém: Vzor Příkaz - Command Standardní cesta pro vykonání metody je její vyvolání. V některých situacích nejsme schopni řídit načasování (timing)

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

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

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

Programování II. Třídy a objekty (objektová orientovanost) 2018/19

Programování II. Třídy a objekty (objektová orientovanost) 2018/19 Programování II Třídy a objekty (objektová orientovanost) 2018/19 Osnova přednášky Objektový přístup (proč potřebujeme objekty). Třídy, objekty,... Příklad. Proč potřebujeme objekty? Udržovatelnost softwaru

Více

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2008 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 24

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2008 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 24 Seminář Java Návrhové vzory Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Návrhové vzory 1/ 24 Znovupoužitelnost Dědičnost implementace třídy pomocí jiné (již existující)

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

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

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

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

RMI - Distribuované objekty v Javě

RMI - Distribuované objekty v Javě Vysoká škola báňská - Technická univerzita Ostrava 30. března 2009 Osnova Co je to RMI? 1 Co je to RMI? 2 Vnější pohled Vrstvy RMI Stub & Skeletons Layer Remote Reference Layer Transport Layer Pojemnování

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

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12. Obsah přednášky: Definice pojmů o datový typ, o abstraktní datový typ Datové struktury Abstraktní datové typy a jejich implementace o Fronta (Queue) o Zásobník (Stack) o Množina (Set) Algoritmizace (Y36ALG),

Více

6. PRÁCE S DATOVÝMI PROUDY

6. PRÁCE S DATOVÝMI PROUDY 6. PRÁCE S DATOVÝMI PROUDY Balík java.io obsahuje třídy, které slouží pro zpracování datových výstupů a vstupů. Pro obvyklou práci se soubory zde můžeme najít třídy File a RandomAccessFile. Většina tříd

Více

Textové soubory. alg9 1

Textové soubory. alg9 1 Textové soubory Textový soubor je posloupnost znaků členěná na řádky každý znak je reprezentován jedním bytem, jehož obsah je dán nějakým kódováním znaků členění na řádky je závislé na platformě a obvykle

Více

Práce se soubory v Javě

Práce se soubory v Javě Práce se soubory v Javě Cílem kapitoly je naučit pracovat se soubory a adresáři v Javě. Na jednoduchých příkladech ukázat procházení adresáře, čtení z textového souboru a zápis do textového souboru. Klíčové

Více

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

Objektově orientované programování v PHP 5. Martin Klíma Objektově orientované programování v PHP 5 Martin Klíma OOP & PHP 5 V PHP 5 konečně značné rozšíření OOP Blíží se to moderním programovacím jazykům jako Java nebo C# Výhody OOP Zapouzdření (nové modifikátory

Více

Distribuované systémy a výpočty

Distribuované systémy a výpočty Distribuované systémy a výpočty X36DSV Jan Janeček Peter Macejko CORBA Common Object Request Broker Architecture - konsorcium OMG (Object Management Group) - standard pro podporu komunikace v DS - pouze

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

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění

Více

OOPR_05. Případové studie

OOPR_05. Případové studie OOPR_05 Případové studie 1 Přehled probírané látky příklad skládání objektů - čára příklad skládání objektů kompozice a agregace přetížené konstruktory pole jako datový atribut 2 Grafický objekt - čára

Více

ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33

ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33 Stručný obsah Část 1: Zahřívací kolo Kapitola 1 Co je a k čemu je návrhový vzor 33 Kapitola 2 Zásady objektově orientovaného programování 39 Kapitola 3 Co konstruktor neumí (Jednoduchá tovární metoda Simple

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

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

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

Základy objektové orientace I. Únor 2010

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

Více

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

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:

Více

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML Obsah přednášky Webové služby a XML Miroslav Beneš Co jsou to webové služby Architektura webových služeb SOAP SOAP a Java SOAP a PHP SOAP a C# Webové služby a XML 2 Co jsou to webové služby rozhraní k

Více

Návrh softwarových systém. Návrh softwarových systémů

Návrh softwarových systém. Návrh softwarových systémů Návrh softwarových systém ů - Java 8 Jiří Šebek Návrh softwarových systémů (B6B36NSS) Co je nového? Default interface methods Lambda expressions Method references and repeatable annotations Streams Functional

Více

Objektově orientované programování

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ě

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

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

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha NIO Aplikační programování v Javě (BI-APJ) - 12 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ší budoucnosti

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky popište stav paměti

Více

Programování II. Návrh programu II

Programování II. Návrh programu II Programování II Návrh programu II Osnova přednášky Dědičnost shrnutí. Návrh programu s využitím dědičnosti Dědičnost shrnutí Klíčové otázky CO je dědičnost? PROČ použít dědičnost? KDY použít dědičnost?

Více

Základní datové struktury

Základní datové struktury Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013

Více

IRAE 07/08 Přednáška č. 7. Začátek (head)

IRAE 07/08 Přednáška č. 7. Začátek (head) Fronta (Queue) FIFO First In First Out (první dovnitř první ven) Vložení položky (Enqueue) Vyjmutí položky (Dequeue) Přidávání prvků Konec (Tail) Začátek (head) na jedné straně (konec) Odebírání 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

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

NPRG031 Programování II 1 / :25:46 NPRG031 Programování II 1 / 26 28. 2. 2018 11:25:46 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat jiné objekty

Více

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

NMIN201 Objektově orientované programování 1 / :36:09 NMIN201 Objektově orientované programování 1 / 26 8.10.2013 15:36:09 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat

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

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

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/ UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok

Více

Regulární výrazy. Vzory

Regulární výrazy. Vzory Regulární výrazy Regulární výrazy jsou určeny pro práci s textovými řetězci, jsou součástí J2SDK až od verze 1.4, v předchozích verzích je potřeba použít některou z externích knihoven, např. knihovnu ORO

Více

5 Rekurze a zásobník. Rekurzivní volání metody

5 Rekurze a zásobník. Rekurzivní volání metody 5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení

Více

Abstract Factory úvod

Abstract Factory úvod Abstract Factory Abstract Factory úvod Problém potřebujeme vytvářet objekty ze skupiny souvisejících tříd skupin je více, chceme je snadno vyměňovat můžeme používat (v jednom kontextu) pouze jednu skupinu

Více