SW_11. Strategie - Strategy Šablona metoda template

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

Download "SW_11. Strategie - Strategy Šablona metoda template"

Transkript

1 SW_11 Strategie - Strategy Šablona metoda template 1

2 Strategie Vzor strategie definuje množinu algoritmů, která každý zapouzdřuje a umožňuje je zaměňovat. Strategie dovoluje, aby se algoritmus měnit (pozměnil) nezávisle na klientovi, který ho používá. Záměrem vzoru strategie je zapouzdřit alternativní přístupy nebo strategie v samostatných třídách, kde každá implementuje danou operaci. 2

3 Strategy Kontext: Simulační hra s kachnami na rybníce. Simulace plavání (swim) a kvákání (quack). Společné metody v nadtřídě. Metoda display() je abstraktní. MallardDuck display() { // looks like a mallard Duck quack() swim() display() fly() // other duck-like methods RedheadDuck display() { // looks like a readhead Another types of ducks inherit from the Duck class 3

4 Strategy Inovace: plavající kachny. Zařazením metody fly() do nadtřídy všechny kachny v podtřídách mají metody fly(). Ale ne všechny kachny v podtřídách umí létat. display() { // looks like a mallard MallardDuck Duck quack() swim() display() fly() // other duck-like methods RedheadDuck display() { // looks like a readhead RubberDuck quack() { // overridden to Squeak display() { // looks like a rubberduck 4

5 Strategy Ve třídě RubberDuck nutno zastínit (override) metodu fly() stejně jako ostatní nerelevantní metody. Třída DecoyDuck kachna vábnička je také třeba zastínit metodu fly(). RubberDuck quack() { //squeak display() { // rubber duck fly() { // override to do nothing DecoyDuck quack() { // override to do nothing display() { // decoy duck fly() { // override to do nothing 5

6 Strategy Co použít rozhraní? Rozhraní Flyable mají pouze kachny které létají, Quackable pouze kvákající kachny. 6

7 Strategy Ne všechny podtřídy by měly mít chování flyable nebo quackable. Implementací uvedených rozhraní se řeší jen část problému. RubberDuck fly()?? Místo pro zavedení vzoru. Jedna základní pravda při tvorbě programového vybavení : ZMĚNA 7

8 Strategy - zaměření se na problém Využití dědičnosti nesplňovalo všechny požadavky chování kachny se mění v podtřídách není vhodné, aby to ostatní podtřídy z nadtřídy dědily. Rozhraní Flyable a Quackable nadějné, ale pouze kachny, které skutečné létají by měly implementovat Flyable. Navíc rozhraní nemá žádný kód => nutnost přepisování kódu v podtřídách, potenciální zdroj chyb. 8

9 Návrhový princip (zásada) Identifikujte aspekty aplikace, které se mění a oddělte je od těch, které zůstávají stejné. Aspekty aplikace, které se mění s každým dalším požadavkem (při přidání dalšího typu kachny). Vezměte části, které se mění a zapouzdřete je, takže je později můžete měnit nebo rozšiřovat bez ovlivňování neměnných částí. Nechte danou část systému měnit nezávisle na dalších částech systému. 9

10 Separace toho co se mění od toho co zůstává stejné Výsledek: méně nechtěných závislostí při změnách kódu a více pružnosti celého systému. Metody fly() a quack() jsou části, které se s dalšími požadavky na nadtřídu Duck mění. Oddělme toto chování od třídy Duck a vytvořme množinu tříd, reprezentující každé chování. Implementace fly() a quack() jsou v řadě tříd. 10

11 Návrhový princip (zásada) Chceme zavést novou podtřídu MallardDuck a inicializovat se specifickým typem létání. Programujte k rozhraní ne k implementaci. Rozhraní Flyable bude implementovat různé druhy létání. Třídy implementují konkrétní typ např. létání a jsou nezávislé liší se od předchozího. FlyWithWings fly() fly() { // implements duck flying «interface» FlyBehavior FlyNoWay fly() { // do nothing - can t fly 11

12 Návrhový princip (zásada) Programováním proti rozhraní umožňuje si pak vybrat konkrétní typ létání ne ho implementovat. Programování proti implementaci: Dog d = new Dog(); d.bark(); Programování proti rozhraní: Animal animal = new Dog(); animal.makesound(); Dog makesound() { bark(); bark() { // bark sound Animal makesound() Cat makesound() { meow(); meow() { // meow sound 12

13 Implementace chování kachny 13

14 Integrace chování kachny Klíčové v chování kachny delegování jejího chování létání, kvákání místo deklarování létání a kvákání uvnitř nadtřídy Duck. flybehavior, quackbehavior datové atributy odkazující se na uvedená rozhraní; mohou se dále polymorficky měnit na podtypy konkrétních rozhraní. 14

15 Integrace chování kachny 1. Jsou přidány dva datové atributy flybehavior, quackbehavior, jako typy rozhraní. 2. Konkrétní implementace kvákání: public class Duck { QuackBehavior quackbehavior; // dalsi kod public void performquack() { quackbehavior.quack(); 15

16 Integrace chování kachny 3. Jak jsou nastaveny datové atributy flybehavior, quackbehavior public class MallardDuck extends Duck { public MallardDuck() { quackbehavior = new Quack(); flybehavior = new FlyWithWings(); public void display() { System.out.println( I am a real Mallard duck ); 16

17 Integrace chování kachny Zásada neprogramovat proti implementaci. V konstruktoru jsme vytvořili novou instanci konkrétní třídy Quack. Zatímco v konstruktoru nastavujeme chování na konkrétní třídu (FlyWithWings, Quack), za běhu programu jsme schopni toto snadno změnit. Změnu umožňuje polymorfismus. 17

18 public abstract class Duck { FlyBehavior flybehavior; QuackBehavior quackbehavior; public Duck() { Testování kódu abstract void display(); public void performfly() { flybehavior.fly(); public void performquack() { quackbehavior.quack(); public void swim() { System.out.println("All ducks float, even decoys!"); 18

19 public interface FlyBehavior { public void fly(); public class FlyWithWings implements FlyBehavior { public void fly() { System.out.println("I'm flying!!"); public class FlyNoWay implements FlyBehavior { public void fly() { System.out.println("I can't fly");

20 public interface QuackBehavior { public void quack(); public class Quack implements QuackBehavior { public void quack() { System.out.println("Quack"); public class MuteQuack implements QuackBehavior { public void quack() { System.out.println("<< Silence >>"); public class Squeak implements QuackBehavior { public void quack() { System.out.println("Squeak");

21 public class MiniDuckSimulator { public static void main(string[] args) { MallardDuck mallard = new MallardDuck(); RubberDuck rubberduckie = new RubberDuck(); DecoyDuck decoy = new DecoyDuck(); ModelDuck model = new ModelDuck(); mallard.performquack(); rubberduckie.performquack(); decoy.performquack(); model.performfly(); model.setflybehavior(new FlyRocketPowered()); model.performfly(); java MiniDuckSimulator Quack I m flying!!

22 Přidáme dvě nové metody do třídy Duck: public void setflybehavior (FlyBehavior fb) { flybehavior = fb; Nastavení chování dynamicky public void setquackbehavior(quackbehavior qb) { quackbehavior = qb; Třída Duck Vytvoříme novou třídu DuckType public class ModelDuck extends Duck { public ModelDuck() { flybehavior = new FlyNoWay(); quackbehavior = new Quack(); public void display() { System.out.println("I'm a model duck"); Vytvoříme novou třídu pro chování: FlyRocketPowered public class FlyRocketPowered implements FlyBehavior { public void fly() { System.out.println("I'm flying with a rocket");

23 public class MiniDuckSimulator1 { public static void main(string[] args) { Duck mallard = new MallardDuck(); mallard.performquack(); mallard.performfly(); Změníme testovací třídu Duck model = new ModelDuck(); model.performfly(); model.setflybehavior(new FlyRocketPowered()); model.performfly(); java MiniDuckSimulator1 Quack I m flying!! I can t fly I m flying with a rocket

24 Velký obrázek zapouzdřeného chování 24

25 Kompozice HAS-A může být lepší než hierarchie IS-A Relace HAS-A zajímavá v tom, že každá kachna má FlyBehavior a QuackBehavior na něž deleguje flying a quacking (létání a kvákání). Místo dědění, d kachny získávaní své chování tím, že jsou složeny s pravým objektem jejich chování. Upřednostňujte skládání před dědičností. 25

26 Kompozice & dědičnost Vytvoření systému používající skládání (kompozice) dává více flexibility. Nejen že dovoluje zapouzdřit rodinu algoritmů do jejich vlastní množiny tříd, ale také dovoluje měnit chování za běhu (run time). 26

27 Další příklad: Vzor Strategie Vzor Strategie (Strategy) definuje množinu (rodinu) algoritmů, zapouzdřuje každý z nich a umožňuje jejich zaměnitelnost. Strategie dovoluje algoritmu měnit se nezávisle na klientech, kteří je používají. 27

28 interface FindMinima { // Line is a sequence of points: double[] algorithm(double[] line); // ruzne strategie: class LeastSquares implements FindMinima { public double[] algorithm(double[] line) { return new double[] { 1.1, 2.2 ; // Dummy class NewtonsMethod implements FindMinima { public double[] algorithm(double[] line) { return new double[] { 3.3, 4.4 ; // Dummy class Bisection implements FindMinima { public double[] algorithm(double[] line) { return new double[] { 5.5, 6.6 ; // Dummy class ConjugateGradient implements FindMinima { public double[] algorithm(double[] line) { return new double[] { 3.3, 4.4 ; // Dummy

29 // The "Context" controls the strategy: class MinimaSolver { private FindMinima strategy; public MinimaSolver(FindMinima strat) { strategy = strat; double[] minima(double[] line) { return strategy.algorithm(line); void changealgorithm(findminima newalgorithm) { strategy = newalgorithm; programováni proti rozhraní

30 class ArrayX { private ArrayX() { public static String tostring(double[] a) { StringBuffer result = new StringBuffer("["); for(int i = 0; i < a.length; i++) { result.append(a[i]); if(i < a.length - 1) result.append(", "); result.append("]"); return result.tostring(); Převádí pole na textovou reprezentaci

31 public class StrategyPattern { public static void main(string args[]) { MinimaSolver solver = new MinimaSolver(new LeastSquares()); double[] line = { 1.0, 2.0, 1.0, 2.0, -1.0, 3.0, 4.0, 5.0, 4.0 ; System.out.println( ArrayX.toString(solver.minima(line))); solver.changealgorithm(new Bisection()); System.out.println( ArrayX.toString(solver.minima(line))); [1.1, 2.2] [5.5, 6.6]

32 Šablona - Template Kontext: Definice metod, které mají společný obecný základ, ale liší se v implementaci konkrétních kroků. Problém: Při definování metody bychom rádi definovali pouze základní obrysy (návrh) algoritmu a ponechali možnost rozdílné implementace jistých kroků. 32

33 Řešení: Šablona Zavedení vzoru Šablona (Template method), jejímž cílem je implementovat daný algoritmus v metodě, přičemž odkládá definování některých kroků algoritmu tak, že je jiné třídy mohou redefinovat (dodefinovat). Nejdříve uvedeme příklad objasňující vzor šablona na příkladu přípravy kávy a čaje. Dále je uveden klasický příklad třídění. 33

34 public class Coffee { final void preparerecipe() { boilwater(); // vaření vody brew(); // spaření pourincup(); //nalévání do šálku addsugarandmilk(); //přidání cukru a mléka public void boilwater() { System.out.println("Vaření vody"); Metoda preparerecipe() obsahuje celý postup přípravy kávy. Dílčí metody jsou uvedeny dále. public void void brewcoffeegrinds() { System.out.println("Překapání kávy přes filtr"); public void pourincup() { System.out.println("Nalití kávy do šálku"); public void addsugarandmilk() { System.out.println("Přidání cukru a mléka"); Metoda preparerecipe() je pro třídu Tea podobná, má však dvě různé metody. 34

35 public class Tea { final void preparerecipe() { boilwater(); steepteabag(); // vyluhování čajového sáčku pourincup(); addlemon(); // přidání citronu... 35

36 Šablona Z kódu vidíme, že dvě metody jsou stejné jako ve třídě Coffee a dvě jsou různé. 36

37 Šablona Abstraktní třída CoffeineBeverage (kofejnový nápoj) má dvě podtřídy, z nichž každá předeklarovává metodu preparerecipe(). Toto řešení dále upravíme tak, že zavedeme nové metody brew() a addcondiments() do metody preparerecipe(). To pak znamená, že tato metoda nemusí být předeklarovaná v podtřídách. 37

38 public abstract class CaffeineBeverage { final void preparerecipe() { boilwater(); brew(); // metoda předeklarovaná v podtřídách pourincup(); addcondiments(); // metoda předeklarovaná v // podtřídách abstract void brew(); // příprava nápoje abstract void addcondiments(); // přidání dochucovadel void boilwater() { System.out.println("Boiling water"); void pourincup() { System.out.println("Pouring into cup"); 38

39 public class Coffee extends CaffeineBeverage { public void brew() { System.out.println("Dripping Coffee through filter"); public void addcondiments() { System.out.println("Adding Sugar and Milk"); 39

40 Definice vzoru šablona Jak vidíme z předchozího postupu, návrhový vzor šablona definuje kroky algoritmu a dovoluje podtřídám implementovat některé z jeho kroků. Vzor šablona definuje kostru algoritmu v metodě, která odsouvá některé ze svých kroků do podtříd. Metoda šablona dovoluje podtřídám předefinovat jisté kroky algoritmu, beze změn struktury algoritmu. 40

41 public abstract class AbstractClass { final void templatemethod() { // metoda předeklarovaná v podtřídě primitiveoperation1(); // metoda předeklarovaná v podtřídě primitiveoperation2(); concreteoperation(); abstract void primitiveoperation1(); abstract void primitiveoperation2(); void concreteoperation() { // implementace metody void hook() { 41

42 Šablona Metoda templatemethod() je finální, což znamená, že nemůže být předeklarovaná v podtřídách. Ta vlastně tvoří kostru algoritmu. Metody primitivnioperace1,2() jsou abstraktní a musí být předeklarované v podtřídách. Metoda hook() (háček, skoba) je konkrétní metoda a nemusí dělat nic. Pomáhá při nastavování defaultních hodnot. 42

43 public abstract class CaffeineBeverageWithHook { void preparerecipe() { boilwater(); brew(); pourincup(); // zákazník chce přísady (cukr..) if (customerwantscondiments()) { addcondiments(); abstract void brew(); abstract void addcondiments(); void boilwater() { System.out.println("Boiling water"); void pourincup() { System.out.println("Pouring into cup"); // metoda hook(), podtřída ho může ale // nemusí předeklarovat boolean customerwantscondiments() { return true; 43

44 public class CoffeeWithHook extends CaffeineBeverageWithHook { public void brew() { System.out.println("Dripping Coffee through filter"); public void addcondiments() { System.out.println("Adding Sugar and Milk"); // podtřída předeklaruje metodu nadtřídy public boolean customerwantscondiments() { String answer = getuserinput(); if (answer.tolowercase().startswith("y")) { return true; else { return false; 44

45 private String getuserinput() { String answer = null; System.out.print("Would you like milk and sugar with your coffee (y/n)? "); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); try { answer = in.readline(); catch (IOException ioe) { System.err.println("IO error trying to read your answer"); if (answer == null) { return "no"; return answer; Jak je vidět z podtřídy, ta má možnosti metodu hook() předeklarovat a ptá se zákazníka, zda chce nebo nechce přísady do zvoleného nápoje. 45

46 public class BeverageTestDrive { public static void main(string[] args) { Coffee coffee = new Coffee(); System.out.println("\nMaking coffee..."); coffee.preparerecipe(); CoffeeWithHook coffeehook = new CoffeeWithHook(); System.out.println("\nMaking coffee..."); coffeehook.preparerecipe(); Třída CaffeineBeverage je naše vysoko úrovňová komponenta. Ta má kontrolu nad algoritmem, který je uveden v metodě preparerecipe() a volá podtřídy, pouze když jsou potřebné pro implementaci metody. 46

47 Klasický případ třídění Třídící algoritmy se liší v přístupu a v rychlosti, ale každý třídící algoritmus spočívá na základních krocích porovnání dvou položek nebo atributů. Třídění je dávný příklad vzoru šablona. Je to postup, který nám dovoluje měnit jeden kritický krok a tím je porovnání dvou objektů, tak, aby se algoritmus dal použít vícekrát pro různé kolekce objektů. 47

48 Šablona třídění Třídy Array a Collection v Javě poskytují metodu sort(), která je deklarovaná jako třídní (statická) a pole (array), které se má setřídit, se jí zadává jako argument. Dále metoda někdy požaduje volitelný Comparator (rozhraní). Collection c = Collection.sort(array) 48

49 Šablona třídění Naproti tomu třída ArrayList poskytuje instanční metodu sort(), která třídí příjemce této zprávy. ArrayList al = arraylist.sort() 49

50 Šablona třídění Oba přístupy jsou ale závislé na rozhraních Comparable a Comparator. Rozdíl mezi nimi je pouze v tom, že rozhraní Comparable očekává oba porovnávané objekty jako argumenty, zatímco Comparator očekává pouze jeden argument (porovnávaný objekt), druhý objekt představuje Comparator sám. 50

51 Šablona třídění Metoda sort() ve třídách Array a Collection dovoluje využívat ke třídění instance rozhraní Comparator. Pokud ji neuvedeme, metoda sort() bude využívat metodu compareto() rozhraní Comparable. Většina primitivních typů včetně třídy String implementuje rozhraní Comparable. 51

52 Šablona třídění Třídění (řazení) primitivních typů probíhá podle implicitně implementovaného rozhraní Comparable v těchto typech (třídách). Objektový typ - obsahující více typů (objektových, primitivních) - nejdříve nutno implementovat rozhraní Comparable, aby bylo jasné, podle kterých datových atributů objektového typu se bude třídit (porovnávat). 52

53 Šablona třídění Rozhraní Comparable obsahuje následující metodu: public interface Comparable { public int compareto(t o); Metoda compareto() porovnává přijímající objekt (příjemce zprávy) se specifikovaným objektem jako argumentem metody a vrací: 0 obě hodnoty jsou stejné 1 příjemce je větší, než objekt specifikovaný jako argument (kladné číslo) -1 příjemce je menší, než objekt specifikovaný jako argument (záporné číslo) 53

54 public class OsobaJmeno implements Comparable<OsobaJmeno> { private String jmeno, prijmeni; public OsobaJmeno(String jmeno, String prijmeni){ this.jmeno = jmeno; this.prijmeni = prijmeni; public String getjmeno(){ return jmeno; public String getprijmeni(){ return prijmeni; public boolean equals(object o){ if(!(o instanceof OsobaJmeno)) return false; OsobaJmeno oj = (OsobaJmeno) o; return oj.getjmeno().equals(jmeno) && oj.getprijmeni().equals(prijmeni); public String tostring(){ return "Jmeno: "+jmeno+" prijmeni: "+prijmeni; public int compareto(osobajmeno oj){ int porovnani = prijmeni.compareto(oj.prijmeni); return (porovnani!= 0? porovnani : jmeno.compareto(oj.jmeno)); 54

55 public class OsobaJmenoTest { public static void main(string[] args) { OsobaJmeno o1, o2, o3, o4; o1 = new OsobaJmeno("Jan", "Zelenka"); o2 = new OsobaJmeno("Jan","Zehnal"); o3 = new OsobaJmeno("Jan","Zehnal"); o4 = new OsobaJmeno("Adam","Sedlacek"); System.out.println("o1 + o2 "+o1.compareto(o2)); System.out.println("o2 + o3 "+o2.compareto(o3)); System.out.println("o1 + o4 "+o1.compareto(o4)); System.out.println("o4 + o3 "+o4.compareto(o3)); 55

56 import java.util.*; public class OsobaJmenoSort { public static void main(string args[]){ OsobaJmeno polejmen[] = { new OsobaJmeno("Jiri","Maly"), new OsobaJmeno("Odlrich","Maly"), new OsobaJmeno("Adam","Maly"), new OsobaJmeno("Alena","Mala"), new OsobaJmeno("Anna","Maliskova") ; List<OsobaJmeno> jmena = Arrays.asList(poleJmen); Collections.sort(jmena); System.out.println(jmena); Využití třídění 56

57 public interface Comparator<t> { int compare(t o1, T o2); boolean equals(object o); Další porovnávání objektů je možné dělat s využitím rozhraní Comparator, které deklaruje dvě metody: 57

58 import java.util.comparator; public class TimeComparator implements Comparator< Time2 > { public int compare( Time2 time1, Time2 time2 ) { // porovná hodiny int hourcompare = time1.gethour() - time2.gethour(); // nejdříve test hodin - hour if ( hourcompare!= 0 ) return hourcompare; // porovná minuty int minutecompare = time1.getminute() - time2.getminute(); Třída TimeComparator implementuje rozhraní Comparator k porovnání dvou objektů třídy Time // potom test minut if ( minutecompare!= 0 ) return minutecompare; // porovná vteřiny int secondcompare = time1.getsecond() - time2.getsecond(); return secondcompare; // vrací výsledek porovnání 58

59 // Třídění seznamu s použitím tříd Comparator a // TimeComparator. import java.util.list; import java.util.arraylist; import java.util.collections; public class Sort3 { public void printelements() { // vytvoření seznamu List< Time2 > list = new ArrayList< Time2 >(); list.add( new Time2( 6, 24, 34 ) ); list.add( new Time2( 18, 14, 58 ) ); list.add( new Time2( 6, 05, 34 ) ); list.add( new Time2( 12, 14, 58 ) ); list.add( new Time2( 6, 24, 22 ) ); // výstup prvků seznamu System.out.printf( "Unsorted array elements:\n%s\n", list ); // třídění s využitím comparator Collections.sort( list, new TimeComparator() ); 59

60 // výstup prvků seznamu System.out.printf( "Sorted list elements:\n%s\n", list ); // konec metody printelements() public static void main( String args[] ) { Sort3 sort3 = new Sort3(); sort3.printelements(); 60

61 Shrnutí Záměrem vzoru šablona je definovat algoritmus v metodě a nechat při tom některé kroky abstraktní, nebo definovat rozhraní, které může být implementováno rozdílně v různých třídách. Další třídy pak mohou doplňovat chybějící kroky, nebo implementovat rozhraní různě podle svých potřeb. 61

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

Ú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

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

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

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

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

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

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

Abstraktní třída a rozhraní

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

Více

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

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

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

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

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

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

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

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

KTE / ZPE Informační technologie

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

Více

Seminář Java IV p.1/38

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

Více

7. Dynamické datové struktury

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

Více

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

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

SW_10. Dekorátor - Decorator Stav - State

SW_10. Dekorátor - Decorator Stav - State SW_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

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

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

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

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

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

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

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

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

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

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

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

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

9. Polymorfismus a rozhraní

9. Polymorfismus a rozhraní Polymorfismus a rozhraní strana 73 9. Polymorfismus a rozhraní Tato kapitola navazuje na základní informace o objektech v kapitole 2, zde se budeme zabývat přetěžováním metod, polymorfismem a rozhraními.

Více

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

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

Více

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

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

Ú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

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 sledujte stav paměti

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

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

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

Více

PB161 Programování v jazyce C++ Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7 PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z

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

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

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 sledujte stav paměti

Více

PB161 Programování v jazyce C++ Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7 PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z

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

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

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

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

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

Motivační příklad reálný svět. výroba (assembly line)

Motivační příklad reálný svět. výroba (assembly line) Template method Motivační příklad reálný svět n Pásová výroba (assembly line) Motivační příklad SW inženýrství n Otevírání souborů n Třídy Application a Document (+potomci) Motivační příklad SW inženýrství

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

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

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

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

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

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

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

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

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

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

Více

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

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

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

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

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

Více

Datové abstrakce v programovacích jazycích

Datové abstrakce v programovacích jazycích Datové abstrakce v programovacích jazycích Motivace Strukturovat rozsáhlé programy Dovolit separátní překlad Možné formy strukturování: Podprogramy původní forma abstrakce -abstrakce výpočtů Moduly kontejnery

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

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

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

Více

10 Generické implementace

10 Generické implementace 10 Generické implementace Main Entry: 1 ge ner ic Pronunciation: j&-'ner-ik Function: adjective Etymology: French générique, from Latin gener-, genus birth, kind, class 1 a : relating to or characteristic

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

Kód, který se nebude často měnit

Kód, který se nebude často měnit Factory Method Úvod - problém Mějme obchod s auty: public class OrderCars { public Car ordercar(string model) { Car car; Při přidání nového modelu je nutné upravit if(model.equals("mark IV")) car = new

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

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

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

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

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

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

Ú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

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

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka Java 8 Ondřej Hrstka Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 13 A0B36PR2 Programování 2 Ondřej Hrstka, 2015 A0B36PR2 Přednáška 13: Java 8 1 / 26 Obsah Lambda

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

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

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

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

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

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

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

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

7.5 Diagram tříd pokročilé techniky

7.5 Diagram tříd pokročilé techniky 7.5 Diagram tříd pokročilé techniky Stereotypy - jeden ze základních prostředků rozšiřitelnosti UML - pro modelovací konstrukce neexistující v UML, ale podobné předdefinované v UML definované uživatelem

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

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

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

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