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

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

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

Transkript

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

2 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) kontextu, ve kterém by se měly metody volat. Dalším problémem je flexibilní zpracování návratové hodnoty metody. 2

3 Kontext: Vzor Příkaz - Command Jak ovládat řadu zařízení přes dálkový ovladač. Požadujeme, aby ovladač měl jednoduché funkce a abychom byli schopni modifikovat jím ovládaná zařízení (přidat nové, odebrat původní). 3

4 Řešení: Vzor Příkaz Zapouzdření operace do formy objektu typu command. Oddělení požadavku na danou akci od objektu, který skutečně akci provede. Návrhový vzor Command právě oddělí uvedené části od sebe. 4

5 Vzor Příkaz Vzor si vysvětleme na příkladu dálkového ovladače (remote controller), který bude skutečným žadatelem (requester) provedení konkrétních akcí, které zvolíme stiskem daných tlačítek ovladače. Požadavek pak provede konkrétní třída daného zařízení. 5

6 Vzor Příkaz Jednoduchými požadovanými operacemi mohou být požadavky na rozsvícení, zhasnutí světla, zapnutí, vypnutí televizoru. Objekt command pak bude provádět tuto konkrétní operaci. Bude třeba tedy vytvořit řadu objektů command pro každé tlačítko vzdáleného ovladače, které pak zabezpečí vykonání konkrétní operace. 6

7 Postup 1. Klient vytvoří objekt command. 2. Klient vykoná metodu setcommand() k uložení objektu command do invokátoru (vyvolávače). 3. Později klient požádá invokátor o provedení objektu command. Projevuje se snaha ukládat tyto objekty command do nějaké kolekce a pak je vyvolat. Využití při událostmi řízeném programování. 7

8 Postup Za zmínku stojí, že poté, co je objekt command nahrán do invokátoru (metodou setcommand()), může být objekt command využit jednou nebo vícekrát, nebo také zrušen či nahrazen jiným objektem command. 8

9 public interface Command { public void execute(); Poznámky Vytvoření prvního objektu command Předtím, než vytvoříme první objekt command, který bude rozsvěcet světlo, deklarujeme nejdříve rozhraní, které bude využívat vzdálený ovladač.

10 public class LightOnCommand implements Command { private Light light; Poznámky public LightOnCommand(Light light) { // konstruktor this.light = light; public void execute() { light.on(); Jediná metoda rozhraní se jmenuje execute(). Následuje třída konkrétní Command (LightOnCommand), která implementuje rozhraní Command.

11 public class Light { // konstruktor public Light() { public void on() { System.out.println("Light is on"); public void off() { System.out.println("Light is off"); Poznámky Vidíme, že třída Light deklaruje datový atribut light (světlo), který je nastaven v konstruktoru. Implementace metody exekute() pak vyvolá metodu on() třídy Light, čímž se rozsvítí světlo. Třída Light (světlo) má jistě i metodu off(), kterou se světlo zhasne.

12 public class SimpleRemoteControl { Command slot; // místo pro zařízení public SimpleRemoteControl() { // konstruktor Poznámky Použití objektu command public void setcommand(command command) { slot = command; public void buttonwaspressed() { slot.execute(); Předpokládejme, že máme dálkový ovladač s jedním tlačítkem a odpovídajícím místem (pozicí, slotem) pro zařízení, které budeme dálkovým ovladačem řídít. Metoda setcommand() Metoda setcommand() nastavuje konkrétné objekt command do proměnné slot. Při změně objektu command, musíme tuto metodu vyvolat znova. Metoda buttonwaspressed() je vyvolána vždy při stisku tlačítka.

13 public class RemoteControlTest { public static void main(string[] args) { SimpleRemoteControl remote = new SimpleRemoteControl(); // objekt light je příjemcem požadavku Light light = new Light(); LightOnCommand lighton = new LightOnCommand(light); Jednoduchý test funkčnosti je pak následující: Poznámky remote.setcommand(lighton); remote.buttonwaspressed(); Třída RemoteControlTest představuje klienta ve vzoru Command. Objekt remote je náš invoker (ten, kdo se něčeho dovolává) a je mu předán konkrétní objekt commanderu v metodě setcommand().

14 Vzor Příkaz - definování Vzor Command zapouzdřuje pořadavek (request) jako objekt a tím nám dovoluje parametrizovat další objekty s odlišnými požadavky, frontovat nebo zaznamenávat požadavky a podporovat operaci undo (zrušení provedené operace). 14

15 Vzor Příkaz - definování Víme, že objekt command svazuje dohromady množinu akcí na konkrétním příjemci. Příjemcem bylo světlo, ale mohou to být např. garážová vrata, u kterých můžeme požadovat akce: zavření, otevření, zastavení, zhasnutí světla v garáži, rozsvícení světla v garáži. Abychom toho dosáhli, vzor pakuje akce a příjemce do jednoho objektu, který vystavuje jednu metodu execute(). 15

16 Vzor Příkaz - definování Když je objekt vyvolán, metoda execute() způsobí vyvolání akcí příjemce. Z vnějšího pohledu žádné jiné objekty skutečně neví, jaké akce jsou na příjemci vykonány; tyto objekty pouze ví, že když vyvolají metodu execute(), jejich požadavek bude obsloužen. 16

17 Vzor Příkaz - definování Podíváme se blíže na garáž. Vidíme, že se jedná celkem o pět akcí. Musíme proto doplnit odpovídající objekty command pro každou akci. 17

18 public class GarageDoor { Poznámky public GarageDoor() { public void up() { System.out.println("Garage Door is Open"); public void down() { System.out.println("Garage Door is Closed"); public void stop() { System.out.println("Garage Door is Stopped"); public void lighton() { System.out.println("Garage light is on"); public void lightoff() { System.out.println("Garage light is off");

19 public class GarageDoorOpenCommand implements Command { GarageDoor garagedoor; Poznámky public GarageDoorOpenCommand(GarageDoor garagedoor) { this.garagedoor = garagedoor; public void execute() { garagedoor.up();

20 public class RemoteControlTest { public static void main(string[] args) { SimpleRemoteControl remote = new SimpleRemoteControl(); GarageDoor garagedoor = new GarageDoor(); GarageDoorOpenCommand garageopen = new GarageDoorOpenCommand(garageDoor); Poznámky remote.setcommand(garageopen); remote.buttonwaspressed();

21 Diagram tříd 21

22 Aplikace Rozhraní Command je rozhraní v našem případě zatím pouze s metodou execute(). Třída ConcreteCommand je v našich příkladech reprezentovaná třídami LightOnCommand a GarageDoorOpenCommand. Třídu Receiver (příjemce) reprezentují konkrétní třídy Light (světlo) a GarageDoor. Třída Invoker s metodou setcommand() je reprezentovaná třídou SimpleRemoteControl. 22

23 Aplikace Třída Client je reprezentovaná třídou s hlavní metodou, tedy třídou RemoteControlTest. Třída Client je zodpovědná za vytváření objektů tříd ConcreteCommand a nastavení jejich příjemce (receiver). Třída Invoker uchovává objekt command a v daném místě žádá objekt command o provedení požadavku, vyvoláním jeho metody execute(). 23

24 Aplikace Třída ConcreteCommand definuje vazbu mezi akcí a příjemcem. Invoker vyvolá požadavek vyvoláním metody execute() a objekt concretecommand to vykoná vyvoláním jedné nebo více akcí na příjemci. Příjemce (receiver) zná, jak provést konkrétní požadavek. Jako příjemce může sloužit libovolná třída. 24

25 Aplikace Nyní se podíváme, jak bychom řešili vzdálený ovladač pro sedm zařízení. Pokud budeme ovládat např. světlo v kuchyni a světlo v obývacím pokoji, nutně potřebujeme dva konkrétní objekty command, jeden pro světlo v kuchyni a druhý pro světlo v obývacím pokoji. Vzor Command to neumí rozlišit. 25

26 Aplikace Další věc, kterou musíme zavést, jsou pole pro nastavení jednotlivých zařízení. Tato pole povedeme dvoje a to pro zapnutí a vypnutí, což jsou nejzákladnější operace. 26

27 public class RemoteControl { Command[] oncommands; // pole pro zapnutí Command[] offcommands; // pole pro vypnutí Poznámky public RemoteControl() { oncommands = new Command[7]; offcommands = new Command[7]; Command nocommand = new NoCommand(); for (int i = 0; i < 7; i++) { oncommands[i] = nocommand; offcommands[i] = nocommand; public void setcommand(int slot, Command oncommand, Command offcommand) { oncommands[slot] = oncommand; offcommands[slot] = offcommand; public void onbuttonwaspushed(int slot) { oncommands[slot].execute();

28 public void offbuttonwaspushed(int slot) { offcommands[slot].execute(); Poznámky public String tostring() { StringBuffer stringbuff = new StringBuffer(); stringbuff.append("\n---- Remote Control -----\n"); for (int i = 0; i < oncommands.length; i++) { stringbuff.append("[slot " + i + "] " + oncommands[i].getclass().getname() + " " + offcommands[i].getclass().getname() + "\n"); return stringbuff.tostring();

29 public class NoCommand implements Command { public void execute() { Poznámky Vzdálený ovladač ovládá sedm jednoduchých zařízení (zapnutí / vypnutí). Na začátku třídy nastavíme všechny přepínače na objekt nocommand, jehož třídu uvádíme. To znamená, že pokud nějaký přepínač nebude definovaný, implicitně bude jako nocommand, tedy prázdná metoda execute().

30 Aplikace Metoda setcommand() má tři parametry pro uchování všech informací. Prvním parametrem je slot, který tvoří index pro uložení informací v polích. Další dva parametry jsou pro konkrétní objekty command pro zapnutí a pro vypnutí. Metoda tostring() vypisuje všechna nastavení této třídy. 30

31 public class StereoOnWithCDCommand implements Command { Stereo stereo; Poznámky public StereoOnWithCDCommand(Stereo stereo) { this.stereo = stereo; public void execute() { stereo.on(); stereo.setcd(); stereo.setvolume(11); Třída StereoOnWithCDCommand může mít pak následný kód:

32 public class Stereo { String location; public Stereo(String location) { this.location = location; public void on() { System.out.println(location + " stereo is on"); public void off() { System.out.println(location + " stereo is off"); Poznámky Tato třída konkrétního commandu spouští stereo, spouští CD přehravač s hlasitistí 11. Třída příjemce (receiver) má následující kód. public void setcd() { System.out.println(location + " stereo is set for CD input"); public void setdvd() { System.out.println(location + " stereo is set for DVD input");

33 public void setradio() { System.out.println(location + " stereo is set for Radio"); Poznámky public void setvolume(int volume) { // code to set the volume // valid range: 1-11 (after all 11 is better than // 10, right?) System.out.println(location + " Stereo volume set to " + volume);

34 public class RemoteLoader { public static void main(string[] args) { RemoteControl remotecontrol = new RemoteControl(); Light livingroomlight = new Light("Living Room"); Light kitchenlight = new Light("Kitchen"); CeilingFan ceilingfan= new CeilingFan("Living Room"); GarageDoor garagedoor = new GarageDoor(""); Stereo stereo = new Stereo("Living Room"); Poznámky K otestování našeho postupu pak bude sloužit třída RemoteLoader. LightOnCommand livingroomlighton = new LightOnCommand(livingRoomLight); LightOffCommand livingroomlightoff = new LightOffCommand(livingRoomLight); LightOnCommand kitchenlighton = new LightOnCommand(kitchenLight); LightOffCommand kitchenlightoff = new LightOffCommand(kitchenLight); CeilingFanOnCommand ceilingfanon = new CeilingFanOnCommand(ceilingFan); CeilingFanOffCommand ceilingfanoff = new CeilingFanOffCommand(ceilingFan); GarageDoorUpCommand garagedoorup = new GarageDoorUpCommand(garageDoor); GarageDoorDownCommand garagedoordown = new GarageDoorDownCommand(garageDoor);

35 StereoOnWithCDCommand stereoonwithcd = new StereoOnWithCDCommand(stereo); StereoOffCommand stereooff = new StereoOffCommand(stereo); Poznámky remotecontrol.setcommand(0, livingroomlighton, livingroomlightoff); remotecontrol.setcommand(1, kitchenlighton, kitchenlightoff); remotecontrol.setcommand(2, ceilingfanon, ceilingfanoff); remotecontrol.setcommand(3, stereoonwithcd, stereooff); System.out.println(remoteControl); remotecontrol.onbuttonwaspushed(0); remotecontrol.offbuttonwaspushed(0); remotecontrol.onbuttonwaspushed(1); remotecontrol.offbuttonwaspushed(1); remotecontrol.onbuttonwaspushed(2); remotecontrol.offbuttonwaspushed(2); remotecontrol.onbuttonwaspushed(3); remotecontrol.offbuttonwaspushed(3);

36 Aplikace Jak jste si všimli, objekt třídy NoCommand je příkladem null objektu. Ten také slouží k návratu objektu z metody, když nemáme co poslat zpět. 36

37 Poznámky public interface Command { public void execute(); public void undo(); Přidání metody undo do rozhraní Command Když rozhraní Command podporuje metodu undo, musíme ji doplnit nejdříve do rozhraní.

38 public class LightOnCommand implements Command { Light light; public LightOnCommand(Light light) { this.light = light; public void execute() { light.on(); Poznámky Teď se podíváme, jak budeme metodu undo() implementovat do tříd konkrétních commandů. public void undo() { light.off(); Ukážeme si to na příkladu rozsvícení a zhasnutí světla.

39 public class LivingroomLightOffCommand implements Command { Light light; Poznámky public LivingroomLightOffCommand(Light light) { this.light = light; public void execute() { light.off(); public void undo() { light.on(); Vidíme, že operace on() a off() jsou opačné. Ještě musíme opravit třídu RemoteControl.

40 public class RemoteControl { Command[] oncommands; Command[] offcommands; Command undocommand; Poznámky public RemoteControl() { oncommands = new Command[7]; offcommands = new Command[7]; Command nocommand = new NoCommand(); for(int i=0;i<7;i++) { oncommands[i] = nocommand; offcommands[i] = nocommand; undocommand = nocommand; public void setcommand(int slot, Command oncommand, Command offcommand) { oncommands[slot] = oncommand; offcommands[slot] = offcommand;

41 public void onbuttonwaspushed(int slot) { oncommands[slot].execute(); undocommand = oncommands[slot]; Poznámky public void offbuttonwaspushed(int slot) { offcommands[slot].execute(); undocommand = offcommands[slot]; public void undobuttonwaspushed() { undocommand.undo(); public String tostring() { StringBuffer stringbuff = new StringBuffer(); stringbuff.append("\n---- Remote Control -----\n"); for (int i = 0; i < oncommands.length; i++) { stringbuff.append("[slot " + i + "] " + oncommands[i].getclass().getname() + " " + offcommands[i].getclass().getname() + "\n"); stringbuff.append("[undo] " + undocommand.getclass().getname() + "\n"); return stringbuff.tostring();

42 public class RemoteLoaderTest { Poznámky public static void main(string[] args) { RemoteControl remotecontrol = new RemoteControl(); Light livingroomlight = new Light("Living Room"); LightOnCommand livingroomlighton = new LightOnCommand(livingRoomLight); Objekty command pak ještě mohou být ukládány do kolekcí a pak spouštěny najednou. LightOffCommand livingroomlightoff = new LightOffCommand(livingRoomLight); remotecontrol.setcommand(0, livingroomlighton, livingroomlightoff); remotecontrol.onbuttonwaspushed(0); remotecontrol.offbuttonwaspushed(0); System.out.println(remoteControl); remotecontrol.undobuttonwaspushed(); remotecontrol.offbuttonwaspushed(0); remotecontrol.onbuttonwaspushed(0); System.out.println(remoteControl); remotecontrol.undobuttonwaspushed();

43 Shrnutí vzoru Příkaz Tento vzor má řadu uplatnění, např. ošetřování chybových stavů, práce s událostmi řízených programech. Operace, která se má provést je zabalena do objektu a pak se s ní dá pružně manipulovat. Klient je odstíněn od konkrétní implementace metody execute(). Konkrétní metoda je vybrána podle typu objektu, který metodu execute() aktuálně vyvolává. 43

44 Shrnutí vzoru Příkaz Navíc možnost připojení objektu třídy nocommand a metoda undo(). Konkrétní metoda je vybrána podle typu objektu, který metodu execute() aktuálně vyvolává. Navíc jsme viděli, jak se dá připojit objekt třídy nocommand a metoda undo(). 44

45 Vzor Command - příkaz Příkazy vzoru Command se dají uložit do objektu třídy kolekce (např. Register) kvalifikovaného na objekt rozhraní Command. To pak vede k tomu, že se dá vytvořit dynamický seznam požadavků, které se postupně provádějí. 45

46 Kontext: Návštěvník - Visitor Je daná základní hierarchie tříd daného problému, do které není možné dělat změny. Může to být hierarchie tříd dodaná jiným dodavatelem. Jako změny myslíme dodání dalších polymorfických metod, které by rozšířily funkčnost stávající hierarchie tříd. 46

47 Návštěvník - Visitor Problém: Je třeba dodat další metody do hierarchie tříd bez fyzického přidání daných metod do každé třídy uvedené hierarchie. Řešení: Řešení přináší návrhový vzor Visitor (návštěvník), který dovoluje vytvoření oddělené hierarchie tříd typu Visitor k virtualizaci operací prováděných na původní hierarchii tříd. 47

48 Konkrétní příklad - diagram tříd 48

49 Návštěvník - Visitor Neměnnou strukturu tříd představují třídy na levé straně obrázku, tedy třídy Tvar, Kruh a Ctverec. Na pravé straně obrázku je pak hierarchie tříd, které se využívají na rozšíření funkčnosti stávající hierarchie. Jedná se nám o to, že chceme doplnit metody pro výpočet obsahu a obvodu daných obrazců. 49

50 Návštěvník - Visitor Postup při použití vzoru je následující: Ve stávající (neměnné) hierarchii tříd doplníme metodu accept() s argumentem instancí rozhraní Visitor do každé třídy. Abstraktní třída Tvar deklaruje metodu accept() jako abstraktní a její podtřídy ji pak implementují podle svých skutečných potřeb. Formální tvar je stejný, jen pseudoproměnná this je různá. 50

51 public double accept(visitor v) { return v.visit(this); Poznámky Podle počtu rozšiřujících metod, o které chceme rozšířit stávající hierarchii tříd, doplníme třídy implementující rozhraní Visitor. V našem případě se jedná o třídy VisitObsah a VisitObvod, protože chceme doplnit operace počítající obsah a obvod obrazců.

52 public class VisitObvod implements Visitor{ public double visit(kruh c) { return 2 * Math.PI * c.getpolomer(); public double visit(ctverec s){ return 4 * s.getstrana(); Poznámky Dále musíme vytvořit ve třídách VisitObsah a VisitObvod tolik metod visit(), kolik máme různých obrazců. Protože máme dva Protože máme dva obrazce (Square a Circle), stačí nám dvě metody visit().

53 Návštěvník - Visitor Jedna metoda visit() počítá obvod kruhu a druhá metoda visit počítá obsah kruhu. Pro větší názornost uvedeme celý kód jednoduchého příkladu: 53

54 public abstract class Tvar { public abstract void vykresli(); public abstract void smaz(); public abstract double accept(visitor v); Poznámky public class Kruh extends Tvar{ private int polomer; public Kruh() { polomer = 16; public double accept(visitor v) { return v.visit(this); public int getpolomer() { return polomer; public void vykresli() { System.out.println("Kruh.vykresli"); public void smaz() { System.out.println("Kruh.smaz");

55 public class Ctverec extends Tvar{ private int strana; public Ctverec() { strana = 12; public double accept(visitor v) { return v.visit(this); public int getstrana() { return strana; public void vykresli() { System.out.println("Ctverec.vykresli"); public void smaz() { System.out.println("Ctverec.smaz"); Poznámky public interface Visitor { public double visit(kruh c); public double visit(ctverec s);

56 public class VisitObsah implements Visitor{ public double visit(kruh c){ return Math.PI * c.getpolomer() * c.getpolomer(); public double visit(ctverec s){ return s.getstrana() * s.getstrana(); Poznámky public class VisitObvod implements Visitor{ public double visit(kruh c) { return 2 * Math.PI * c.getpolomer(); public double visit(ctverec s){ return 4 * s.getstrana(); return 4 * s.getstrana();

57 public class TvarTest { public static void main(string args[]) { VisitObsah visitobsah = new VisitObsah(); VisitObvod visitobvod = new VisitObvod(); List <Tvar>tvary = new ArrayList<Tvar>(); tvary.add(new Ctverec()); tvary.add(new Kruh()); tvary.add(new Kruh()); tvary.add(new Ctverec()); tvary.add(new Kruh()); Iterator<Tvar>itr = tvary.iterator(); while(itr.hasnext()) { Tvar s = itr.next(); s.vykresli(); s.smaz(); System.out.printf("Obsah obrazce: %s je: %.2f\n", s.getclass().getname(), s.accept(visitobsah)); System.out.printf("Obvod obrazce: %s je: %.2f\n", s.getclass().getname(), s.accept(visitobvod)); Poznámky

58 Ctverec.vykresli Ctverec.smaz Obsah obrazce: Ctverec je: 144,00 Obvod obrazce: Ctverec je: 48,00 Kruh.vykresli Kruh.smaz Obsah obrazce: Kruh je: 804,25 Obvod obrazce: Kruh je: 100,53 Kruh.vykresli Kruh.smaz Obsah obrazce: Kruh je: 804,25 Obvod obrazce: Kruh je: 100,53 Ctverec.vykresli Ctverec.smaz Obsah obrazce: Ctverec je: 144,00 Obsah obrazce: Ctverec je: 144,00 Obvod obrazce: Ctverec je: 48,00 Kruh.vykresli Kruh.smaz Obsah obrazce: Kruh je: 804,25 Obvod obrazce: Kruh je: 100,53 Poznámky

59 Shrnutí vzoru Návštěvník Je zřejmé, že můžeme zavést novou operaci (metodu) nad libovolnou strukturou, a to pouze dodáním nové třídy implementující rozhraní Visitor. Problém ale nastane, pokud rozšíříme stávající neměnnou strukturu tříd o další třídu. To však odporuje úvodnímu předpokladu, že struktura tříd je neměnná. 59

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

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

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

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

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

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

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

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

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

Ú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

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

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

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

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

Konstruktory a destruktory

Konstruktory a destruktory Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,

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

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

Úvod do programovacích jazyků (Java)

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

Více

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

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

Více

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

Remote Method Invocation RMI

Remote Method Invocation RMI Remote Method Invocation RMI Java TM Remote Method Invocation (RMI) umožňuje objektu na jedné Java Virtual Mashine(JVM) jednoduše spustit metodu jiného objektu na vzdálené JVM. Při volání vzdálené metody

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

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

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

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

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

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

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

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

Programování II. Návrh programu I 2018/19

Programování II. Návrh programu I 2018/19 Programování II Návrh programu I 2018/19 Osnova přednášky Co víme? Objektový návrh programu. Příklad. Co víme? Třída Třída je popisem objektů se společnými vlastnostmi. class private:

Více

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

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd. 1. Zapouzdření Cíl látky Tento blok nejdříve přiblíží zásadu zapouzdření a odpoutání kódu a po té na relacích, jako jsou asociace, agregace a kompozice, vysvětlí jak lze objektový zdrojový kód zapouzdřovat

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

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

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

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Zapouzdření. Tomáš Pitner, upravil Marek Šabo Zapouzdření Tomáš Pitner, upravil Marek Šabo Co je zapouzdření Naprosto zásadní vlastnost objektového přístupu, možná nejzásadnější Jde o spojení dat a práce s nimi do jednoho celku - objektu Data jsou

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

Programovací jazyk Java

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

Více

Soketové připojení Klient InetAddress getbyname() UnknowHostException SecurityException Socket getinputstream() getoutputstream() IOException Server

Soketové připojení Klient InetAddress getbyname() UnknowHostException SecurityException Socket getinputstream() getoutputstream() IOException Server Soketové připojení Při socketovém připojení spolu komunikují dvě nezávislé JVM pomocí streamů odpovídajících typů. Po síti můžete posílat textové i binární informace, je možno posílat i objekty, které

Více

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

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

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce

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

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

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

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

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

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

Seminář Java II p.1/43

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

Více

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

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování. Jakub Klemsa Jan Legerský Objektově orientované programování klemsjak@fjfi.cvut.cz jan.legersky@gmail.com 30. října 2012 návrhový vzor (design pattern) obecné řešení problému, které se využívá při návrhu

Více

Mnohotvarost (polymorfizmus)

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

Více

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

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

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

Více

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

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans. 1 Grafické rozhraní Studijní cíl Tento blok je věnován vytváření programů s využitím grafického rozhraní (GUI). Vysvětlen bude základní filozofie pro vytváření aplikací s GUI ve srovnání s konzolovými

Více

Semin aˇr Java X Radek Koˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2011 Radek Koˇc ı Semin aˇr Java N avrhov e vzory, Z asady...

Semin aˇr Java X Radek Koˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2011 Radek Koˇc ı Semin aˇr Java N avrhov e vzory, Z asady... Seminář Java X Radek Kočí Fakulta informačních technologií VUT Duben 2011 Radek Kočí Seminář Java Návrhové vzory, Zásady... 1/ 37 Obsah Znovupoužitelnost Návrhové vzory Zásady programování Radek Kočí Seminář

Více

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

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

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

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

APLIKACE NÁVRHOVÝCH VZORŮ

APLIKACE NÁVRHOVÝCH VZORŮ APLIKACE NÁVRHOVÝCH VZORŮ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH FRANTIŠEK HUŇKA ČÍSLO OPERAČNÍHO PROGRAMU: CZ.1.07 NÁZEV OPERAČNÍHO PROGRAMU: VZDĚLÁVÁNÍ PRO KONKURENCESCHOPNOST OPATŘENÍ:

Více

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce Vektor a Matice Základní pojmy Matice(řádky, sloupce) Matice(4,6) sloupce řádky (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (4,1) (4,2) (4,3)

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

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

Využití OOP v praxi -- Knihovna PHP -- Interval.cz Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování

Více

specifikuje vytvářené objekty pomocí prototypické instance nový objekt vytváří kopírováním prototypu

specifikuje vytvářené objekty pomocí prototypické instance nový objekt vytváří kopírováním prototypu Prototyp Prototyp Účel ( creational kategorie: vytvářecí pro objekty (class specifikuje vytvářené objekty pomocí prototypické instance nový objekt vytváří kopírováním prototypu Příklad obecný systém pro

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

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

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

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue. 23. Třídy, generické třídy, instance, skládání, statické metody a proměnné. Zapouzdření, konstruktory, konzistence objektu, zpřístupnění vnitřní implementace, modifikátory public a private. Polymorfismus,

Více

Projekt Obrázek strana 135

Projekt Obrázek strana 135 Projekt Obrázek strana 135 14. Projekt Obrázek 14.1. Základní popis, zadání úkolu Pracujeme na projektu Obrázek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy

Více

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

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

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

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

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

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

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

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

Programování v C++ 3, 3. cvičení Programování v C++ 3, 3. cvičení úvod do objektově orientovaného programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Dokončení spojového

Více

Vzor Továrna - Factory

Vzor Továrna - Factory 1 SW_07 Návrhový vzor: Továrna - Factory 1. Jednoduchá továrna - Simple Factory 2. Tovární metoda - Factory Method 3. Abstraktní továrna - Abstract Factory Vzor Továrna - Factory 2 Kontext: při vytváření

Více

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí třídy

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí třídy 3. ročník Objekt základní prvek v OOP má vlastnosti charakterizují objekt (barva, počet osob) má metody definují to, co objekt umí (vypni motor, připoj se) vznikne vytvoření nové instance definován pomocí

Více

, Brno Připravil: David Procházka Návrhové vzory

, Brno Připravil: David Procházka Návrhové vzory 7. 10. 2010, Brno Připravil: David Procházka Návrhové vzory Základy objektově orientovaného návrhu Design Patterns NV (Design patterns) můžeme s nadsázkou označit za ntu, jak řešit určitý problém nejen

Více

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ Vstupy a výstupy pokračování Kódování textů Texty (řetězce nebo znaky) v jazyce C# jsou v paměti uloženy v kódování označovaném běžně Unicode (kódová stránka 1200).

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

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

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

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,

Více

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

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

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

Více

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

11 Diagram tříd, asociace, dědičnost, abstraktní třídy 11 Diagram tříd, asociace, dědičnost, abstraktní třídy Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost diagramům tříd, asociaci,

Více

Deklarace a vytváření

Deklarace a vytváření OOPR_10 1 Obsah přednášky Deklarace a tvorba polí, jejich použití Rozšířený příkaz cyklu for Třída Registr a datovým atributem typu pole Třídy Zásobník a Fronta Třída Registr pro uložení objektových a

Více

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

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

Více

Úvod 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

24. listopadu 2013, Brno Připravil: David Procházka

24. listopadu 2013, Brno Připravil: David Procházka 24. listopadu 2013, Brno Připravil: David Procházka Dědičnost Základy objektového návrhu Časná a pozdní vazba Strana 2 / 22 Obsah přednášky 1 Časná a pozdní vazba 2 Rozhraní pro dědičnost 3 Konstruktory

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

Tvorba informačních systémů

Tvorba informačních systémů Tvorba informačních systémů Michal Krátký 1, Miroslav Beneš 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2005/2006 c 2006 Michal Krátký, Miroslav Beneš Tvorba informačních

Více

Společnost pro elektronické aplikace. SEA s.r.o. Dolnoměcholupská 21 CZ-10200 Praha 10

Společnost pro elektronické aplikace. SEA s.r.o. Dolnoměcholupská 21 CZ-10200 Praha 10 Společnost pro elektronické aplikace SEA s.r.o. Dolnoměcholupská 21 CZ-10200 Praha 10 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. Výstup 1. Výstup

Více

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

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

Více

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

Více o konstruktorech a destruktorech

Více o konstruktorech a destruktorech Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení

Více

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

public class Karel { private int position; public boolean issmiling; public int getposition() { return position; Objekty, třídy a hierarchie tříd Interface a abstraktní třídy Dědičnost Message passing Class diagramy a příklady systémů modelovaných pomocí OOP Volba správného přístupu Rozdíl mezi asociací, agregací

Více

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

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

Více

Jazyk C# (seminář 6)

Jazyk C# (seminář 6) Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí

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

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

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy Základní pojmy Stromy 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 Graf uzly hrany orientované / neorientované Souvislý

Více

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics 1 Parametrizované třídy Generics generické třídy JDK zavádí mimo jiné tzv. parametrizované třídy - generics Úvod 2 podobnost se šablonami (templates) z C++ nejčastěji použité v oblasti knihoven kontejnerového

Více