Návrhové vzory design patterns význam a použití

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

Download "Návrhové vzory design patterns význam a použití"

Transkript

1 OOPR_06 1

2 Obsah přednášky Refaktorování Návrhové vzory význam, použití Návrhový vzor přepravka (Messenger) Testování programů testovací třída JUnit Návrhový vzor singleton jedináček Návrhový vzor výčtový typ Další možnosti třídy JUnit na testování programů 2

3 Refaktorování Refaktorování kódu programu je proces, změny zdrojového kódu, bez modifikace externího funkčního chování za účelem zlepšení některých nefunkčních parametrů software. Výhody dále zahrnují zlepšení čitelnosti kódu, snížení složitosti, zlepšení udržovatelnosti (maintainability) kódu, zlepšení rozšiřitelnosti. 3

4 Návrhové vzory design patterns význam a použití nejdůležitější zásada produktivního programátora nevynalézat již vynalezené, OOP podporuje znovupoužitelnost na úrovni kódu znovupoužití vytvořených tříd, návrhové vzory návody na řešení, některých typických, často se opakujících úloh na úrovni mentálních bloků, 1995 první kniha Design Patterns přeložená do češtiny obsahující prvních 23 návrhových vzorů, 4

5 Návrhové vzory design patterns význam a použití stále rostoucí důraz na návrhové vzory, které zlepšují a zpřehledňují programové řešení. zakladatel vzorů architekt Christopher Alexander jeho kniha: A Pattern Language: Towns, Buildings, Constructions pokoj se dvěma okny místo s jedním ovlivnil také programátorskou komunitu. Jeho práce ukázaly, že vzory jsou výbornou cestou k pochopení a transportu moudrosti daného řemesla. 5

6 Návrhové vzory design patterns Další literatura: Bruce Eckel: Thinking in Patterns web adresa: Základní popis návrhových vzorů: kontext ve kterém problém vzniká problém, který je třeba vyřešit řešení daného problému 6

7 Vzor Messenger Přepravka (Posel, kurýr) Problém: pracovat s několika hodnotami jako hodnotou jednou a umožnit tak snadné přenášení této skupiny hodnot mezi jednotlivými instancemi a jejich metodami (návrat objektu z metody). Kontext: práce v objektově orientovaném prostředí Řešení: všechny hodnoty jakoby naskládáme do přepravky (objektu) s danou strukturou a předáme žadateli hodnot. Přepravky jsou určeny pro předem definovanou sadu hodnot každý druh nářadí má připraven vlastní úchyt. 7

8 Přepravka & skládání agregace Řešení návrhového vzoru přepravka se podobá do jisté míry skládání objektů typu agregace. Přepravka je celek, části jsou jednotlivé objekty atributy. u částí je však použit modifikátor public (místo private) pro všechny části jsou vždy uvedeny všechny C a s t _ 1 přístupové a modifikační metody 1 C e le k + g e tm e to d a ( ) + s e tm e to d a ( ) C a s t _ 2 C a s t _ 3 1 8

9 Vzor Messenger Přepravka (Posel, kurýr) Třída, jejíž instance mají sloužit jako přepravky předem známé sady hodnot, by měla mít následující vlastnosti: pro každou přenášenou hodnotu bude definován vlastní atribut, do kterého se hodnota (objekt) uloží, účelem třídy je přenos a snadná dostupnost k přenášeným atributům, jsou tyto deklarované jako public, veřejné (dodržovat přístupové metody), datové atributy jsou jednoduché nebo objektové typy. 9

10 Vzor Messenger Přepravka (Posel, kurýr) Kromě metod nastavujících jednotlivé atributy, mají třídy přepravky metody pro kopírování hodnot atributů instance, předávané jako parametr např. setpozice(pozice) podobně jako tzv. kopírovací konstruktor 10

11 // prepravka public class Bod public int x, y, z; public Bod(int x, int y, int z) this.x = x; this.y = y; this.z = z; // kopirovaci konstruktor public Bod(Bod p) this.x = p.x; this.y = p.y; this.z = p.z; public String tostring() return "x: " + x + " y: " + y + " z: " + z; 11

12 public class Vektor private int velikost, smer; public Vektor(int velikost, int smer) this.velikost = velikost; this.smer = smer; public int getvelikost() return velikost; public int getsmer() return smer; 12

13 public class Plocha public static Bod translate(bod p, Vektor v) p = new Bod(p); // nemodifikuje objekt v parametru // vykonani smyslenych operaci: p.x = p.x + v.getvelikost(); p.y = p.y + v.getsmer(); p.z = p.z + v.getvelikost() * v.getsmer(); return p;

14 public class Prepravka public static void main(string[] args) Bod p1 = new Bod(1, 2, 3); Bod p2 = Plocha.translate(p1, new Vektor(11, 47)); String vysledek = "p1: " + p1 + "\np2: " + p2; System.out.println(vysledek); 14

15 Testování programů knihovna JUnit Tvorba aplikace vytvoření knihovních tříd; vytvoření testovací třídy s hlavní metodou, testovací třída (přípona Test) by měla otestovat vytvořené knihovní třídy. Moderní programování preferovaná myšlenka definovat nejprve sadu testů a teprve pak psát testovaný program, jakmile program projde, programátor přemýšlí, jak by jej měl zlepšit. 15

16 Testování programů knihovna JUnit Napíše testy a snaží se upravit program, aby vyhověl testům. Cyklus se může několikrát opakovat. Agilní metody vývoje. 16

17 Testování programů knihovna JUnit Zkušenosti ukazují, že připravená sada testů vede k vyšší efektivnosti při tvorbě programů. Automatizace testování knihovna JUnit polovina 90. let. V současné době je jednou z povinných součástí profesionálních vývojových prostředí je součástí prostředí BlueJ i Eclipse. 17

18 Zprovoznění JUnit v BlueJ 1. V hlavní nabídce vyberete Tools (Nástroje)- > Preferences (Nastavení) 2. Následně v Preferences vyberete záložku Miscellaneous (Různé) 3. Zaškrtnete políčko Show unit testing tools (Zobrazit nástroje pro testování) 4. Stiskem OK své zadání potvrďte 18

19 Run Tests spustit testy recording záznam End Ukončit Cancel Storno 19

20 Testovací třída V nabídce new class (nová třída) můžeme zadat, že chceme vytvořit Unit Test třídu (jedná se o test jednotky) <<unit test>> je tzv. stereotyp, který se používá v jazyce UML, v případě specifikace nějaké speciální vlastnosti (na první pohled odlišíme testovací třídu od ostatních tříd) 20

21 Vytvoření testovacích tříd 21

22 Knihovna JUnit a metody assertequals a asserttrue tzv. potvrzovací metody (série potvrzovacích metod), pomocí potvrzovacích metod ověříme, zda je vše během testování v pořádku, assertequals(t, o, s) resp. assertequals(t, o, s, r) parametr t je text, který se vytiskne v případě, že náš předpoklad nebude potvrzen. Tento parametr není povinný (existují přetížené metody, které ho nemají). 22

23 Knihovna JUnit a metody assertequals a asserttrue parametr o je očekávaná hodnota parametr s je spočtená hodnota, o které předpokládáme, že bude rovna očekávané hodnotě parametr r se použije pouze při porovnávání reálných čísel. Je v něm uložen rozdíl, o který se dvě reálná čísla mohou lišit, abychom jej pokládali za shodná. 23

24 Knihovna JUnit a metody assertequals a asserttrue Pokud se očekávaná hodnota a spočtená hodnota liší, metoda vypíše v testovacím okně zadaný text, očekávanou a obdrženou hodnotu a daný test ukončí. Metoda asserttrue(boolean) zestručnělá verze asserttrue(boolean, boolean), které předáváme jako první parametr očekávanou hodnotu a druhá je obdržená hodnota. 24

25 Napsání testu pomocí knihovny JUnit Učinit danou třídu podtřídou třídy JUnit.framework.TestCase - klíčové slovo extends Testovací třída obsahuje připravený konstruktor a dvě prázdné metody: setup() a teardown(). 25

26 Napsání testu pomocí knihovny JUnit Kód potřebný pro definici přípravku se vloží do metody setup() tělo metody setup() je většinou naplněno vytváření potřebných objektů a přiřazení odkazů na tyto objekty při dalším použití je lépe restartovat JVM Metoda teardown() slouží pro úklid po testování (odstranění nepotřebných objektů). 26

27 public class TestTestu extends junit.framework.testcase private int i1; private String s1; private Bod b1; //Priprava a uklid pripravku /*********************************************************************** * Vytvoreni pripravku (fixture), tj. sady objektu, s nimiz budou vsechny * testy pracovat a ktera se proto vytvori pred spustenim kazdeho testu. */ protected void setup() System.out.println( "\n=== Priprava testu " + getname() ); i1 = 1; s1 = "Jedna"; b1 = new Bod(); /******************************************************************* * Uklid po testu - tato metoda se spusti po vykonani kazdeho testu. */ protected void teardown() b1 = null; //pouziti metod napr. pro mazani System.out.println( "XXX Uklizeno po testu " + getname() ); 27

28 //== VLASTNI TESTY ============================================================= public void testcisel() System.out.println( "Cisla souhlasi" ); assertequals( "Neshoda celeho cisla", 1, i1 ); System.out.println( "Cisla nesouhlasi" ); assertequals( "Neshoda celeho cisla", 0, i1 ); //chyba System.out.println( "Konec testu cisel" ); public void testsouradnic() System.out.println( "Souradnice souhlasi" ); assertequals( "Neshoda souradnic", 0, b1.getx() ); System.out.println( "Souradnice nesouhlasi" ); assertequals( "Objekty se lisi", null, b1 ); //chyba assertequals( "Neshoda souradnic", 1, b1.gety() ); //chyba System.out.println( "Konec testu souradnic" ); public void testretezcu() System.out.println( "Retezce souhlasi" ); assertequals( "Neshoda textu", "Jedna", s1 ); System.out.println( "Retezce souhlasi" ); assertequals( "Neshoda textu", "Dva", s1 ); //chyba System.out.println( "Konec testu retezcu" ); 28

29 TestRunners testovací spouštěče V JUnit jsou zabudované tři TestRunnery JUnit.awtui.TestRunner zobrazení výsledků (views) používá grafické řízení, které má úzkou vazbu na daný operační systém (nativní) JUnit.swingui.TestRunner - na zobrazení výsledků se používá grafické řízení implementované Java Swing JUnit.textui.TestRunner zobrazení výsledků probíhá v textové formě 29

30 import junit.framework.*; class Point //prepravka public int x, y, z; //prepravni atributy public Point(int x, int y, int z) this.x = x; this.y = y; this.z = z; public Point(Point p)// kopirovaci konstruktor this.x = p.x; this.y = p.y; this.z = p.z; public String tostring() return "x: "+x+" y: "+ y+" z: "+z; public void print() System.out.println(this.toString()); 30

31 class Vector public int magnitude; int direction; public Vector(int magnitude, int direction) this.magnitude = magnitude; this.direction = direction; public String tostring() return "Vector magnitude: "+magnitude+" direction: "+direction; public void print() System.out.println(this.toString()); class Space public static Point translate(point p, Vector v) p = new Point(p);//nova instance pres kopirovaci konstruktor // nemodifikuje original p.x = p.x + 1; p.y = p.y + v.magnitude; p.z = p.z + v.direction; return p; 31

32 public class PrepravkaJUnit extends TestCase public void test() Point p1 = new Point(1, 2, 3); Point p2 = Space.translate(p1, new Vector(11, 32)); String result = "p1: "+ p1 +" p2: "+ p2; p1.print(); p2.print(); System.out.println(result); assertequals(result, "p1: x: 1 y: 2 z: 3 p2: x: 2 y: 13 z: 35"); public static void main(string[] args) junit.textui.testrunner.run(prepravkajunit.class); 32

33 Problém: Jedináček - Singleton definovat třídy tak, aby uživatel nemohl svobodně ovlivňovat počet jejich instancí chceme např. aby se vytvořila pouze jedna instance dané třídy Kontext: v mnoha aplikacích potřebujeme, aby vznikla pouze jedna instance (objekt) sdílený celou aplikací 33

34 Řešení: Jedináček - Singleton definovat konstruktor jako soukromý private tím je zabezpečeno, že se ke konstruktoru dostaneme pouze prostřednictvím jiné metody, která bude veřejná, použít při deklaraci takové třídy modifikátor final, který zabezpečí, že třída již nemůže mít potomky (nedovolí deklaraci dalších podtříd), 34

35 Jedináček - Singleton Přímo v deklaraci třídy se vytvoří nová instance (objekt) s daným označením, které je přístupné např. prostřednictvím metody getreference(). Metoda pro získání odkazu na jediný objekt, jedináček se deklaruje jako statická, což umožňuje vytvářet instance s využitím názvu třídy. 35

36 final class Singleton private int i; private static Singleton s = new Singleton(47); private Singleton(int x) i = x; //konstruktor s jednim argumentem public static Singleton getreference() return s; //ziskani reference public int getvalue() return i; public void setvalue(int x) i = x; public String tostring() return "Singleton i: "+this.getvalue(); public void tisk() System.out.println(this.toString()); 36

37 public class SingletonTest public void test() Singleton s = Singleton.getReference(); //vytvoreni nove instance String result = "" + s.getvalue(); System.out.println(result); Singleton s2 = Singleton.getReference(); s2.setvalue(9); result = "" + s.getvalue(); System.out.println(result); s.tisk(); s2.tisk(); if(s == s2)system.out.println("rovnaji se"); else System.out.println("Nerovnaji se"); public static void main(string[] args) new SingletonTest().test(); 37

38 import junit.framework.*; // Since this isn't inherited from a Cloneable // base class and cloneability isn't added, // making it final prevents cloneability from // being added through inheritance: Vzor Singleton a knihovna JUnit final class Singleton private static Singleton s = new Singleton(47); private int i; private Singleton(int x) i = x; public static Singleton getreference() return s; public int getvalue() return i; public void setvalue(int x) i = x; 38

39 public class SingletonPattern extends TestCase public void test() Singleton s = Singleton.getReference(); String result = "" + s.getvalue(); System.out.println(result); assertequals(result, "47"); Singleton s2 = Singleton.getReference(); s2.setvalue(9); result = "" + s.getvalue(); System.out.println(result); assertequals(result, "9"); Vzor Singleton a knihovna JUnit try // Can't do this: compile-time error. // Singleton s3 = (Singleton)s2.clone(); catch(exception e) throw new RuntimeException(e); public static void main(string[] args) junit.textui.testrunner.run(singletonpattern.class); 39

40 public class Ucet private int cislo; private double stav; private static Ucet ucetsingleton; // konstruktory private Ucet(int cislo, double stav) this.cislo = cislo; this.stav = stav; private Ucet() this(100, 0.0); private Ucet(int cislo) this(cislo, 0.0); private Ucet(double castka) this(0, castka); // tovarni metoda pro ziskani instance uctu public static Ucet getinstance() if(ucetsingleton == null) ucetsingleton = new Ucet(1, new Koruny(0.0)); return ucetsingleton; Třída Účet jako singleton 40

41 public class Osoba private String jmeno; private int roknarozeni; private static Ucet ucet = Ucet.getInstance(); public void vlozeni(double castka) ucet.vlozeni(castka); public double vyber(double castka) return ucet.vyber(castka); Třída Účet jako singleton Použití globálního odkazu 41

42 public class OsobaX private String jmeno; private int roknarozeni; //private static Ucet ucet = Ucet.getInstance(); public String tostring() Ucet ucet = Ucet. getinstance(); return String.format("%s %s %s %d\n%s", "Jmeno: ", getjmeno(), "vek: ", getvek(), ucet.tostring()); public void tisk() System.out.println(toString()); public void vlozeni(koruny koruny) Ucet ucet = Ucet.getInstance(); ucet.vlozeni(koruny); public void vyber(koruny koruny) Ucet ucet = Ucet.getInstance(); ucet.vyber(koruny); Třída Účet jako singleton Použití lokálních odlazů 42

43 Výčtové typy Problém: Definovat předem daný (známý) počet instancí, jež se zveřejní jako statické (třídní) atributy třídy. Tyto třídy představují většinou neměnné hodnotové typy. Kontext: implementace konkrétních problémů. Předem stanovený počet objektů (instancí), které se chovají jako konstanty 43

44 Výčtové typy Řešení: Výčtové typy mají předdeklarované některé atributy a metody viz přednáška OOP_4 Pravidla: 1.V těle třídy musíme nejprve deklarovat seznam jeho hodnot, všechny ostatní atributy a metody musíme deklarovat až za vím. 2.V nejjednodušším případě se jedná pouze o seznam názvů oddělených čárkami 44

45 Složitější definice výčtových typů výčtový typ může mít své podtypy, to znamená, že může obsahovat ještě další data, např. výčtový typ Barva může obsahovat celočíselný identifikátor id, textový výraz a cenu jako double, kromě tohoto popisu, musí mít výčtový typ soukromý konstruktor, soukromé neměnné datové atributy (final) přístupové metody k podtypům. 45

46 public enum Barva ZELENA(23, "green", ), CERVENA(19, "red", 38.60), ZLUTA(68, "yellow", ), SVETLE_CERVENA(41,"light-red", 87.30); private final int id; private final String jmeno; private final double cena; Barva(int c, String s, double d) // nesmi byt public id = c; jmeno = s; cena = d; public int getid() return id; public String getjmeno() return jmeno; public double getcena() return cena; 46

47 public class BarvaTest public static void main(string[] args) System.out.println("Tisk vsech hodnot"); for (Barva bv : Barva.values()) System.out.printf("\nid: %d text: %s cena: %.2f", bv.getid(), bv.getjmeno(), bv.getcena()); Barva b = Barva.ZLUTA; System.out.println("cena zluta: "+b.getcena()); 47

48 import javax.swing.joptionpane; public class JablkoTest public static void main(string[] args) Jablko j = new Jablko(); j.tisk(); Jablko j1 = new Jablko(Barva.valueOf("ZELENA"), 12, Chut.valueOf("VYBORNA")); Chut c; j1.tisk(); Jablko j2 = new Jablko(Barva.SVETLE_CERVENA, 15, Chut.ODPORNA); j2.tisk(); int k = j2.getchut().ordinal(); System.out.println("Poradi chuti: "+k); String t = j2.getchut().name(); System.out.println("Chut objektu j2 textove: "+t); c = j.getchut(); System.out.printf("Objekt j chut poradi: %d textove: %s", c.ordinal(), c.name()); String nazev = JOptionPane.showInputDialog("Zadejte barvu jablka:"); nazev = nazev.touppercase(); Barva b = Barva.valueOf(nazev); System.out.printf("\nZadana barva: %s poradi: %d", b.name(),b.ordinal()); double d = j1.getbarva().getcena(); String s = j2.getbarva().getjmeno(); 48

49 public enum Book // declare constants of enum type JHTP6( "Java How to Program 6e", "2005" ), CHTP4( "C How to Program 4e", "2004" ), IW3HTP3( "Internet & World Wide Web How to Program 3e", "2004" ), CPPHTP4( "C++ How to Program 4e", "2003" ), VBHTP2( "Visual Basic.NET How to Program 2e", "2002" ), CSHARPHTP( "C# How to Program", "2002" ); Další příklad s výčtovým typem kniha // instance fields private final String title; // book title private final String copyrightyear; // copyright year // enum constructor Book( String booktitle, String year ) title = booktitle; copyrightyear = year; // end enum Book constructor 49

50 // accessor for field title public String gettitle() return title; // end method gettitle // accessor for field copyrightyear public String getcopyrightyear() return copyrightyear; // end method getcopyrightyear // end enum Book 50

51 public class EnumTest public static void main( String args[] ) System.out.println( "All books:\n" ); // print all books in enum Book for ( Book book : Book.values() ) System.out.printf( "%-10s%-45s%s\n", book, book.gettitle(), book.getcopyrightyear() ); System.out.println( "\ndisplay a range of enum constants:\n" ); // print first four books for ( Book book : EnumSet.range( Book.JHTP6, Book.CPPHTP4 ) ) System.out.printf( "%-10s%-45s%s\n", book, book.gettitle(), book.getcopyrightyear() ); // end main // end class EnumTest 51

52 All books: JHTP6 Java How to Program 6e 2005 CHTP4 C How to Program 4e 2004 IW3HTP3 Internet & World Wide Web How to Program 3e 2004 CPPHTP4 C++ How to Program 4e 2003 VBHTP2 Visual Basic.NET How to Program 2e 2002 CSHARPHTP C# How to Program 2002 Display a range of enum constants: JHTP6 Java How to Program 6e 2005 CHTP4 C How to Program 4e 2004 IW3HTP3 Internet & World Wide Web How to Program 3e 2004 CPPHTP4 C++ How to Program 4e

53 Metody knihovny JUnit aplikované na třídě Zlomek statická třída Funkce obsahuje další třídní metody dostupné bez vytvoření instance od třídy Funkce základní třída Zlomek metoda ZlomekTest 53

54 /************************************************************************* * Trida Funkce obsahuje pomocne staticke metody pro tridu Zlomek. Resi * vypocet nejmensiho spolecneho nasobku a nejvetsiho spolecneho delitele. Rudolf Pecinovsky , 30. brezen 2004, 23:17 */ public final class Funkce Funkce 1/2 /*********************************************************************** * Vrati nejvetsiho spolecneho delitele dvou zadanych cisel. * Vracene cislo je vzdy kladne nezavisle na znamenku parametru. * i1 Prvni cislo i2 Druhe cislo * Nejvetsi spolecny delitel zadanych cisel */ public static int nsd(int i1, int i2) i1 = Math.abs( i1 ); i2 = Math.abs( i2 ); while( i2 > 0 ) int pom = i1 % i2; i1 = i2; i2 = pom; return i1; 54

55 /*********************************************************************** * Vrati nejmensi spolecny nasobek zadanych cisel. * Vracene cislo je vzdy kladne nezavisle na znamenku parametru. * i1 Prvni cislo i2 Druhe cislo * Nejmensi spolecny nasobek zadanych cisel */ public static int nsn(int i1, int i2) if( (i1 == 0) (i2 == 0) ) return 0; return i2 * Math.abs(i1) / nsd(i1,i2); Funkce 2/2 //######################################################################## //== KONSTRUKTORY A TOVARNI METODY ============================================= private Funkce() 55

56 public class Zlomek_4 private final int citatel; private final int jmenovatel; Třída Zlomek public Zlomek_4(int c, int j) //při vytvoreni noveho objektu se provede uprava int delitel = Funkce.nsd( c, j ); if( j < 0 ) c = -c; j = -j; citatel = c / delitel; jmenovatel = j / delitel; public Zlomek_4(Zlomek_4 z) //kopirovaci konstruktor citatel = z.citatel; jmenovatel = z.jmenovatel; public Zlomek_4(int cislo) citatel = cislo; jmenovatel = 1; 56

57 //== PRISTUPOVE METODY VLASTNOSTI INSTANCI ===================================== public int getcitatel() return citatel; public int getjmenovatel() return jmenovatel; public String tostring() return "[" + citatel + "/" + jmenovatel + "]"; public int intvalue() return citatel / jmenovatel; public double doublevalue() return (double)citatel / jmenovatel; 57

58 public Zlomek_4 plus(zlomek_4 z) //int nasobek = Funkce.nsn( this.jmenovatel, z.jmenovatel ); return new Zlomek_4( citatel*z.jmenovatel + z.citatel*jmenovatel, jmenovatel*z.jmenovatel ); public Zlomek_4 plus(int cislo) return new Zlomek_4( citatel + cislo*jmenovatel, jmenovatel ); public Zlomek_4 minus(zlomek_4 z) //int nasobek = Funkce.nsn( this.jmenovatel, z.jmenovatel ); return new Zlomek_4( citatel*z.jmenovatel - z.citatel*jmenovatel, jmenovatel*z.jmenovatel ); public Zlomek_4 minus(int cislo) return new Zlomek_4( citatel - cislo*jmenovatel, jmenovatel ); public Zlomek_4 odectiod(int cislo) return new Zlomek_4( cislo*jmenovatel - citatel, jmenovatel ); 58

59 public Zlomek_4 krat(zlomek_4 z) return new Zlomek_4( citatel * z.citatel, jmenovatel * z.jmenovatel ); public Zlomek_4 krat(int cislo) return new Zlomek_4( citatel * cislo, jmenovatel ); public Zlomek_4 deleno(zlomek_4 z) return new Zlomek_4( citatel * z.jmenovatel, jmenovatel * z.citatel ); public Zlomek_4 deleno(int cislo) return new Zlomek_4( citatel, jmenovatel * cislo ); public Zlomek_4 delcislo(int cislo) return new Zlomek_4( jmenovatel * cislo, citatel ); 59

60 public class Zlomek_4Test extends junit.framework.testcase Zlomek_4 z0, z1, z2, z12, z34, z56; Zlomek_4 v1, v2, v3; ZlomekTest //== PRIPRAVA A UKLID PRIPRAVKU ================================================ /********************************************************************** * Vytvoreni pripravku (fixture), tj. sady objektu, s nimiz budou vsechny * testy pracovat a ktera se proto vytvori pred spustenim kazdeho testu. */ protected void setup() System.out.println( "\n" + getname() ); z0 = new Zlomek_4( 0 ); z1 = new Zlomek_4( 1 ); z2 = new Zlomek_4( 2 ); z12 = new Zlomek_4( 1, 2 ); z34 = new Zlomek_4( 3, 4 ); z56 = new Zlomek_4( 5, 6 ); /********************************************************************* * Uklid po testu - tato metoda se spusti po vykonani kazdeho testu. */ protected void teardown() 60

61 public static void tiskni( Zlomek_4 v, Zlomek_4 z1, char op, Zlomek_4 z2 ) System.out.println( v + " = " + z1 + ' ' + op + ' ' + z2 ); /************************************************************************* * Pomocna metoda tisknouci zadanou operaci na standardni vystup. * cislo Vysledek prevedeny na retezec z Prevadeny zlomek */ public static void tiskni( String cislo, Zlomek_4 z ) System.out.println( cislo + " = " + z ); 61

62 /*************************************************************************** * Testuje konstruktory a prevod zlomku na retezec. */ public void testtostring() z1 = new Zlomek_4( 2 ); System.out.println("Zlomek_4(2) = " + z1); assertequals( "[2/1]", z1.tostring() ); z1 = new Zlomek_4( 1, 2 ); System.out.println("Zlomek_4(1, 2) = " + z1); assertequals( "[1/2]", z1.tostring() ); z1 = new Zlomek_4( 2, 4 ); System.out.println("Zlomek_4(2, 4) = " + z1); assertequals( "[1/2]", z1.tostring() ); z2 = new Zlomek_4( z1 ); System.out.println("Zlomek_4(" + z1 + ") = " + z2); assertequals(z1.getcitatel(), z2.getcitatel()); assertequals(z1.getjmenovatel(), z2.getjmenovatel()); 62

63 /*************************************************************************** * Testuje scitani zlomku a zlomku a cisla. */ public void testplus() v1 = z1.plus( z2 ); tiskni( v1, z1, '+', z2 ); assertequals( "[3/1]", v1.tostring() ); v2 = z12.plus( z34 ); tiskni( v2, z12, '+', z34 ); assertequals( "[5/4]", v2.tostring() ); v2 = z34.plus( z12 ); tiskni( v2, z34, '+', z12 ); assertequals( "[5/4]", v2.tostring() ); v3 = v1.plus(v2); tiskni( v3, v1, '+', v2 ); assertequals( "[17/4]", v3.tostring() ); v3 = v2.plus(v2); tiskni( v3, v2, '+', v2 ); assertequals( "[5/2]", v3.tostring() ); v3 = v2.plus(2); tiskni( v3, v2, '+', new Zlomek_4(2) ); assertequals( "[13/4]", v3.tostring() ); 63

64 // Testuje odcitani zlomku a zlomku a cisla. public void testminus() v1 = z1.minus( z2 ); tiskni( v1, z1, '-', z2 ); assertequals( "[-1/1]", v1.tostring() ); v2 = z12.minus( z34 ); tiskni( v2, z12, '-', z34 ); assertequals( "[-1/4]", v2.tostring() ); v2 = z34.minus( z12 ); tiskni( v2, z34, '-', z12 ); assertequals( "[1/4]", v2.tostring() ); v3 = v1.minus(v2); tiskni( v3, v1, '-', v2 ); assertequals( "[-5/4]", v3.tostring() ); v3 = v2.minus(v2); tiskni( v3, v2, '-', v2 ); assertequals( "[0/1]", v3.tostring() ); v3 = v2.minus(2); tiskni( v3, v2, '-', new Zlomek_4(2) ); assertequals( "[-7/4]", v3.tostring() ); v3 = v2.odectiod(2); tiskni( v3, new Zlomek_4(2), '-', v2 ); assertequals( "[7/4]", v3.tostring() ); 64

65 /*************************************************************************** * Testuje nasobeni zlomku a zlomku a cisla. */ public void testkrat() v1 = z1.krat( z2 ); tiskni( v1, z1, '*', z2 ); assertequals( "[2/1]", v1.tostring() ); v2 = z12.krat( z34 ); tiskni( v2, z12, '*', z34 ); assertequals( "[3/8]", v2.tostring() ); v2 = z34.krat( z12 ); tiskni( v2, z34, '*', z12 ); assertequals( "[3/8]", v2.tostring() ); v3 = v1.krat(v2); tiskni( v3, v1, '*', v2 ); assertequals( "[3/4]", v3.tostring() ); v3 = v2.krat(v2); tiskni( v3, v2, '*', v2 ); assertequals( "[9/64]", v3.tostring() ); v3 = v2.krat(2); tiskni( v3, v2, '*', new Zlomek_4(2) ); assertequals( "[3/4]", v3.tostring() ); 65

66 // Testuje deleni zlomku a zlomku a cisla. public void testdeleno() v1 = z1.deleno( z2 ); tiskni( v1, z1, ':', z2 ); assertequals( "[1/2]", v1.tostring() ); v2 = z12.deleno( z34 ); tiskni( v2, z12, ':', z34 ); assertequals( "[2/3]", v2.tostring() ); v2 = z34.deleno( z12 ); tiskni( v2, z34, ':', z12 ); assertequals( "[3/2]", v2.tostring() ); v3 = v1.deleno(v2); tiskni( v3, v1, ':', v2 ); assertequals( "[1/3]", v3.tostring() ); v3 = v2.deleno(v2); tiskni( v3, v2, ':', v2 ); assertequals( "[1/1]", v3.tostring() ); v3 = v2.deleno(2); tiskni( v3, v2, ':', new Zlomek_4(2) ); assertequals( "[3/4]", v3.tostring() ); v3 = v2.delcislo(2); tiskni( v3, new Zlomek_4(2), ':', v2 ); assertequals( "[4/3]", v3.tostring() ); 66

67 // Test prevodu zlomku na cislo public void testprevody() int i; double d; Zlomek_4 z125 = new Zlomek_4( 12, 5 ); i = z1.intvalue(); tiskni( ""+i, z1 ); assertequals( 1, i ); i = z34.intvalue(); tiskni( ""+i, z34 ); assertequals( 0, i ); i = z125.intvalue(); tiskni( ""+i, z125 ); assertequals( 2, i, 0 ); d = z1.doublevalue(); tiskni( ""+d, z1 ); assertequals( 1.0, d, 0 ); d = z12.doublevalue(); tiskni( ""+d, z34 ); assertequals( 0.5, d, 0 ); d = z125.doublevalue(); tiskni( ""+d, z125 ); assertequals( 2.4, d, 0 ); 67

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

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

Přehled probírané látky

Přehled probírané látky OOPR_04 1 Přehled probírané látky asociace (relace) mezi třídami popis množiny spojení mezi objekty skládání objektů - upřesněný typ asociace, vazba mezi objekty kompozice objektů (velmi pevná vazba mezi

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

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

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

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

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

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

Ú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

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

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

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

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

Ú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

Datové struktury. alg12 1

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

Více

Java testovací třída

Java testovací třída Java testovací třída Kapitola má seznámit s možnostmi testovací třídy. Zdroje: http://voho.cz/wiki/informatika/vyvoj/testovani/, Ing. Vojtěch HORDĚJČUK: Testování, 15.3.2013 Rudolf Pecinovský: Java 7,

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

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

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

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

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah: Obsah: Testování... 1 Zadání příkladu... 1 Vytvoření kostry třídy... 1 Napsání testů... 2 Testy správnosti... 3 Testy výjimek... 3 Testy vztahů/závislostí... 4 Zdrojový text testu... 4 Spuštění testů...

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

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

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

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

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

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

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

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

Více

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

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

Více

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

Programování v C++ 1, 5. cvičení Programování v C++ 1, 5. cvičení konstruktory, nevirtuální dědění 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

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

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

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

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

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

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

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

15. Projekt Kalkulačka

15. Projekt Kalkulačka Projekt Kalkulačka strana 143 15. Projekt Kalkulačka 15.1. Základní popis, zadání úkolu Pracujeme na projektu Kalkulačka, který je ke stažení na java.vse.cz. Po otevření v BlueJ vytvoříme instanci třídy

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

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

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

Ú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

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Prostory jmen U programů mohou někdy nastat kolize mezi jmény (tříd, funkcí, globálních proměnných atd.) pokud v různých

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

3 KTE / ZPE Informační technologie

3 KTE / ZPE Informační technologie 3 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ň Komentáře

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

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

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

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

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

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

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

Více

Abstraktní datové typy: zásobník

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

Více

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

Objektově orientované programování 1 XOBO1. Autor: Doc. Ing. František Huňka, CSc.

Objektově orientované programování 1 XOBO1. Autor: Doc. Ing. František Huňka, CSc. Objektově orientované programování 1 XOBO1 Autor: Doc. Ing. František Huňka, CSc. 1 Seznam kapitol 1 Základní pojmy...3 1.1 Úvod do tříd a objektů...3 1.2 Vývojové prostředí...7 1.3 Jednotný modelovací

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

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

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

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

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

7. Datové typy v Javě

7. Datové typy v Javě 7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů

Více

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem Jazyk C++ 1 Blok 3 Objektové typy jazyka C++ Studijní cíl Ve třetím bloku bude představen a rozebrán nejdůležitější objektový typ jazyka C++ a to sice třída. Po absolvování bloku bude student schopen navrhovat

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

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

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

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

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

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

Objektově orientované programování

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

Více

, 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

JUnit příklad na použití

JUnit příklad na použití JUnit příklad na použití 1 Zadání příkladu Převod mezi římskými a arabskými číslicemi. Platí následující pravidla: hodnoty písmen se až na výjimky sčítají (I, II, VIII) Písmena vyjadřující mocniny se mohou

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

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

C# konzole Podíl dvou čísel, podmínka IF

C# konzole Podíl dvou čísel, podmínka IF C# konzole Podíl dvou čísel, podmínka IF Tematická oblast Datum vytvoření 2013 Ročník 3 Stručný obsah Způsob využití Autor Kód Internetové technologie, programování Výpočet podílu v konzolové aplikaci

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

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

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

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

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

Programování v C++ 2, 4. cvičení Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva

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

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

návrhový vzor Singleton.

návrhový vzor Singleton. KAPITOLA 2 Návrhový vzor Singleton Jazyk PHP 5 vám pomocí klíčových slov public, protected a private umožňuje kontrolovat, kdo získá přístup k určitým atributům a metodám třídy. Dále vám jazyk PHP 5 umožňuje

Více

Zápis programu v jazyce C#

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

Více

Paměť počítače. alg2 1

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

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

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve

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

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

1 Nejkratší cesta grafem

1 Nejkratší cesta grafem Bakalářské zkoušky (příklady otázek) podzim 2014 1 Nejkratší cesta grafem 1. Uvažujte graf s kladným ohodnocením hran (délka). Definujte formálně problém hledání nejkratší cesty mezi dvěma uzly tohoto

Více

Metodika. Architecture First. Rudolf Pecinovský rudolf@pecinovsky.cz

Metodika. Architecture First. Rudolf Pecinovský rudolf@pecinovsky.cz Copyright Rudolf Pecinovský, Soubor: 2014_Comm_PrW_Architecture First Methodology.doc, verze 1.00.2413, uloženo po 9.6.2014 14:43 1 z 39 Metodika Architecture First Rudolf Pecinovský rudolf@pecinovsky.cz

Více

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

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

Více

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

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

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

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

Více

Jazyk C++ I. Šablony

Jazyk C++ I. Šablony Jazyk C++ I Šablony AR 2013/2014 Jazyk C++ I Úvod Zatím známe programovací styly: Strukturované programování, Objektově orientované programovaní. AR 2013/2014 Jazyk C++ I 2 Příklady void Print(const int&

Více

knihovna programátora

knihovna programátora knihovna programátora Učebnice pro ty, kteří nechtějí zůstat obyčejnými kodéry, ale chtějí se stát špičkovými architekty Postupuje podle metodiky Architecture First Soustředí se na návrh programů a osvojení

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Globální konstantní proměnné Konstantní proměnné specifikujeme s klíčovým slovem const, tyto konstantní proměné

Více

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

PB161 Programování v jazyce C++ Přednáška 4 PB161 Programování v jazyce C++ Přednáška 4 Přetěžování funkcí Konstruktory a destruktory Nikola Beneš 9. října 2017 PB161 přednáška 4: přetěžování funkcí, konstruktory, destruktory 9. října 2017 1 / 20

Více