Obsah Znovupou ˇzitelnost N avrhov e vzory Z asady programov an ı Radek Koˇc ı Semin aˇr Java N avrhov e vzory, Z asady... 2/ 46
|
|
- Pavlína Horáková
- před 6 lety
- Počet zobrazení:
Transkript
1 Seminář Java Návrhové vzory, Zásady programování Radek Kočí Fakulta informačních technologií VUT Duben 2010 Radek Kočí Seminář Java Návrhové vzory, Zásady... 1/ 46
2 Obsah Znovupoužitelnost Návrhové vzory Zásady programování Radek Kočí Seminář Java Návrhové vzory, Zásady... 2/ 46
3 Znovupoužitelnost Dědičnost implementace třídy pomocí jiné (již existující) znovupoužitelnost bílé skříňky výhody a nevýhody přímočaré použití, jednodušší úprava metod statické těsná vazba s nadřazenou třídou (problémy s modifikací) Radek Kočí Seminář Java Návrhové vzory, Zásady... 3/ 46
4 Znovupoužitelnost Skládání nová funkce = poskládání již existujících objektů znovupoužitelnost černé skříňky výhody a nevýhody dynamické objekty se používají přes rozhraní objekty lze za běhu zaměňovat (stejné typy) menší, jednodušší a přehlednější návrh Radek Kočí Seminář Java Návrhové vzory, Zásady... 4/ 46
5 Znovupoužitelnost Skládání problém SELF class A { foo() { self.m(); } m() { print("object A doing the job"); } } class B { A a; foo() { a.foo(); } m() { print("object B doing the job"); } } B b; b.foo() => Object A doing the job. Radek Kočí Seminář Java Návrhové vzory, Zásady... 5/ 46
6 Znovupoužitelnost Skládání problém SELF class A { foo() { self.m(); } m() { print("object A doing the job"); } } class B { A a; foo() { a.foo(); } m() { print("object B doing the job"); } } B b; b.foo() => Object B doing the job. Radek Kočí Seminář Java Návrhové vzory, Zásady... 6/ 46
7 Znovupoužitelnost Parametrizované typy (generické programování) templates v C++ (viz Standard Template Library STL) generics v Java 5 definují parametrizované typy má význam u staticky typovaných jazyků Radek Kočí Seminář Java Návrhové vzory, Zásady... 7/ 46
8 Znovupoužitelnost interface Sink<T> { flush(t t); } <T> T writeall(collection<t> coll, Sink<? super T> s { T last; for(t t : coll) { last = t; snk.flush(last); } return last; } Sink<Object> s; Collection<String> cs; String str = writeall(cs, s); // T je String Radek Kočí Seminář Java Návrhové vzory, Zásady... 8/ 46
9 Návrhové vzory (design patterns) Objektově orientovaný návrh a programování znovupoužitelnost? zajištění znovupoužitelnosti obecný návrh zajištění aplikovatelnosti na řešený problém specifický návrh spor... přesto proč nevyužít řešení, které již fungovalo taková řešení jsou výsledkem mnoha pokusů a používání vzory pro řešení stejných typů problémů Radek Kočí Seminář Java Návrhové vzory, Zásady... 9/ 46
10 Návrhové vzory (design patterns) Návrhové vzory základní sada řešení důležitých a stále se opakujících návrhů usnadňují znovupoužitelnost umožňují efektivní návrh (výběr vhodných alternativ, dokumentace,... ) Radek Kočí Seminář Java Návrhové vzory, Zásady... 10/ 46
11 Návrhový vzor Návrhový vzor nazývá, zabstraktňuje a identifikuje klíčové aspekty běžné návrhové struktury popisuje komunikující objekty a třídy upravené k řešení obecného návrhového problému vzor je šablona pro řešení, nikoli implemeptace problému! Každý vzor popisuje problém, který se neustále vyskytuje, a jádro řešení daného problému. Umožňuje toto řešení používat mnohokrát, aniž bychom to dělali dvakrát úplně stejným způsobem. Některé vzory si konkurují, některé vzory mohou používat pro svou implementaci jiné vzory Radek Kočí Seminář Java Návrhové vzory, Zásady... 11/ 46
12 Návrhový vzor Prvky návrhového vzoru název krátký popis (identifikace) návrhového problému problém popis, kdy se má vzor používat (vysvětlení problému, podmínky pro smysluplé použití vzoru,... ) řešení popis prvků návrhu, vztahů, povinností a spolupráce nepopisuje konkrétní návrh, obsahuje abstraktní popis problému a obecné uspořádání prvků pro jeho řešení důsledky výsledky a kompromisy (vliv na rozšiřitelnost, přenositelnost,... ) důležité pro hodnocení návrhových alternativ náklady a výhody použití vzoru Radek Kočí Seminář Java Návrhové vzory, Zásady... 12/ 46
13 Typy vzorů Vzory se mohou týkat tříd zabývají se vztahy mezi třídami a podtřídami (vztah je fixován) objektů zabývaní se vztahy mezi objekty, jsou dynamičtější Základní rozdělení vzorů tvořivý zabývá se procesem tvorby objektů strukturální zabývá se skladbou tříd či objektů chování zabývá se způsoby vzájemné interakce mezi objekty či třídy zabývá se způsoby rozdělení povinností mezi objekty či třídy Radek Kočí Seminář Java Návrhové vzory, Zásady... 13/ 46
14 Základní návrhové vzory Tvořivý Factory method Abstract Factory Singleton Prototype Builder Strukturální Adapter (třída) Adapter (objekt) Decorator Facade Bridge Flyweight Composite Proxy Radek Kočí Seminář Java Návrhové vzory, Zásady... 14/ 46
15 Základní návrhové vzory Chování Interpreter Iterator Visitor Memento Observer Mediator Command Chain of Responsibility State Strategy Radek Kočí Seminář Java Návrhové vzory, Zásady... 15/ 46
16 Jedináček (Singleton) Účel třída může mít pouze jednu instanci tvořivý vzor objekty Pzn.: možné řešení statické metody nevýhody Motivace nutnost mít pouze jednu instanci (např. tiskové fronty) při pokusu o vytvoření nové instance se vrátí již existující Důsledky řízený přístup k jediné instanci zdokonalování operací (dědičnost) usnadňuje změnu v návrhu (variabilní počet instancí)... Radek Kočí Seminář Java Návrhové vzory, Zásady... 16/ 46
17 Jedináček (Singleton) Singleton 3 uniqueinstance : Singleton + instance() : Singleton public class Singleton { protected Singleton inst; private Singleton() {} } // Tovarni metoda (Factory method) public static Singleton instance() { if (inst == null) inst = new Singleton(); return inst; } Radek Kočí Seminář Java Návrhové vzory, Zásady... 17/ 46
18 Abstraktní továrna (Abstract Factory) Účel vytváření příbuzných nebo závislých objektů bez specifikace konkrétní třídy Motivace tvořivý vzor objekty např. změna vzhledu sady grafických nástrojů Důsledky izoluje konkrétní třídy klient pracuje pouze s rozhraním usnadňuje výměnu produktových řad (např. změna vzhledu,... ) podpora zcela nových produktových řad je obtížnější... Radek Kočí Seminář Java Návrhové vzory, Zásady... 18/ 46
19 Abstraktní továrna (Abstract Factory) Struktura AbstractFactory + createproducta() : AbstractProductA + createproductb() : AbstractProductB AbstractProductA Client ProductA2 ProductA1 Factory1 + createproducta() + createproductb() Factory2 + createproducta() + createproductb() AbstractProductB ProductB2 ProductB1 Radek Kočí Seminář Java Návrhové vzory, Zásady... 19/ 46
20 Abstraktní továrna (Abstract Factory) // abstract product public interface Wall {... } // abstract factory public abstract class MazeFactory { public abstract Wall makewall(); } public class MazeGame { public Maze createmaze(mazefactory factory) { Wall wall = factory.makewall();... } } Radek Kočí Seminář Java Návrhové vzory, Zásady... 20/ 46
21 Abstraktní továrna (Abstract Factory) // product public class StdWall implements Wall {... } // factory public class StdMazeFactory extends MazeFactory { public Wall makewall() { return new StdWall(); } } MazeGame game = new MazeGame(); MazeFactory factory = new StdMazeFactory(); game.createmaze(factory); Radek Kočí Seminář Java Návrhové vzory, Zásady... 21/ 46
22 Abstraktní továrna (Abstract Factory) // product public class SpecialWall implements Wall {... } // factory public class SpecMazeFactory extends MazeFactory { public Wall makewall() { return new SpecialWall(); } } MazeFactory specfactory = new SpecMazeFactory(); game.createmaze(specfactory); Radek Kočí Seminář Java Návrhové vzory, Zásady... 22/ 46
23 Command Účel Motivace zapouzdření požadavků nebo operací vzor chování zaslání požadavku na obecné úrovni, aniž známe konkrétní protokol podpora undo operací Důsledky reprezentuje jeden provedený příkaz umožňuje uchovávat předchozí stav klienta... Radek Kočí Seminář Java Návrhové vzory, Zásady... 23/ 46
24 Command Struktura Command Invoker receiver execute() : void Receiver ConcreteCommandB state execute() : void ConcreteCommandA state execute() : void actiona() : void Client Radek Kočí Seminář Java Návrhové vzory, Zásady... 24/ 46
25 Command Radek Kočí Seminář Java Návrhové vzory, Zásady... 25/ 46
26 Návrhové vzory Zdroje Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Návrh programů pomocí vzorů popis 23 základních vzorů Radek Kočí Seminář Java Návrhové vzory, Zásady... 26/ 46
27 Zásady programování Zásady programování Radek Kočí Seminář Java Návrhové vzory, Zásady... 27/ 46
28 Co už známe Překrývání metod třídy Object nefinální metody equals, hashcode, tostring vždy když překryjete metodu equals, překryjte i metodu hashcode vždy překryjte metodu tostring Kompozice a dědičnost (znovupoužitelnost kódu) Dědičnost narušuje zapouzdření (závislé na implementačních detailech) Kompozice objekt je složen z jiných objektů metody jsou delegovány (nezávislé na implementačních detailech) problém SELF Radek Kočí Seminář Java Návrhové vzory, Zásady... 28/ 46
29 Duplicitní objekty Duplicitní objekty objekty mající stejný stav většinou neměnné vytváření objektů je zbytečné Opakované použití shodného objektu může být rychlejší (optimální využití paměti) a přehlednější většinou použitelné pro neměnné objekty Radek Kočí Seminář Java Návrhové vzory, Zásady... 29/ 46
30 Duplicitní objekty String s = new String("retez"); String s = "retez"; Map m = new HashMap(); Set s1 = m.keyset(); Set s2 = m.keyset(); // opakovane vytvareni objektu se stejnym stavem Calendar c = Calendar.getInstance(); c.set(...); Dupl.java Radek Kočí Seminář Java Návrhové vzory, Zásady... 30/ 46
31 Duplicitní objekty Vytváření malých objektů malá funkcionalita kontruktorů rychlé (moderní implementace JVM) Vytváření nových objektů může zlepšovat jednoduchost nebo sílu programu Kdy lze opakovaně použit objekty objekty jsou neměnné klesá výkon Radek Kočí Seminář Java Návrhové vzory, Zásady... 31/ 46
32 Defenzivní kopie objektů Defenzivní programování předpoklad, že klienti vaší třídy se pokusí zničit její invarianty neodkrývat interní prvky objektů před uložením provést defenzivní kopii před vrácením provést defenzivní kopii DefCopy.java Radek Kočí Seminář Java Návrhové vzory, Zásady... 32/ 46
33 Tovární metody místo konstruktorů Získání instance třídy konstruktory statické tovární metody Výhody továrních metod mají názvy nemusí vytvářet nový objekt při volání nemusí vracet instanci pouze volané třídy např. synchronizované kolekce,... Nevýhody těžko odlišitelné od jiných statických metod nutnost dodržování konvencí pojmenování Radek Kočí Seminář Java Návrhové vzory, Zásady... 33/ 46
34 Tovární metody místo konstruktorů public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); public static Boolean valueof(boolean b) { return (b? TRUE : FALSE); } public static <T> Set<T> synchronizedset(set<t> s) { return new SynchronizedSet<T>(s); } Radek Kočí Seminář Java Návrhové vzory, Zásady... 34/ 46
35 Rozhraní a abstraktní třídy Definice typu, který umožňuje více implementací rozhraní abstraktní třída Porovnání třídy lze snadno přizpůsobit tak, aby implementovaly rozhraní rozhraní může definovat smíšený typ nezávislý na dědičnosti tříd rozhraní umožňují flexibilní a (typově) bezpečná vylepšení funkčnosti rozvíjet abstraktní třídu je jednodušší než rozvíjet rozhraní Radek Kočí Seminář Java Návrhové vzory, Zásady... 35/ 46
36 Rozhraní a abstraktní třídy Doporučení pro definici typů používejte (pokud to jde) vždy rozhraní změna implementace rozhraní pak znamená pouze změnu názvu konstruktoru (nebo tovární metody) bez nutnosti přepisovat další kód Radek Kočí Seminář Java Návrhové vzory, Zásady... 36/ 46
37 Neveřejné atributy Objekt by měl mít pod kontrolou změnu svých atributů třída by měla jen výjimečně definovat veřejné atributy přístup přes veřejné metody zajistit, aby přímá modifikace atributu nebyla možná public static final Type[] VALUES = {... }; // => prvky pole se mohou měnit! private static final Type[] privatevalues = {... }; public static final List VALUES = Collections. unmodifiablelist(arrays.aslist(privatevalues)); Radek Kočí Seminář Java Návrhové vzory, Zásady... 37/ 46
38 Kontrola platnosti parametrů vždy kontrolujte platnost parametrů metod podmínky vždy dokumentujte /** * Vraci BigInteger, jehoz hodnota je (this mod m). m modulo, ktere musi byt kladne. this mod m. ArithmeticException pokud m <= 0. */ public BigInteger mod(biginteger m) { if (m.signum() <= 0) throw new ArithmeticException("m <= 0.");... } Radek Kočí Seminář Java Návrhové vzory, Zásady... 38/ 46
39 Přetěžování s rozvahou volba překryté metody (dědičnost) závisí na běhovém typu objektu (vybere se vždy ta nejspecifičtější varianta) volba přetížené metody se provádí při kompilaci Radek Kočí Seminář Java Návrhové vzory, Zásady... 39/ 46
40 Přetěžování s rozvahou public String classify(set s) { return "Mnozina"; } public String classify(list l) { return "Seznam"; } public String classify(collection c) { return "Neznama kolekce"; } Collection[] test = new Collection[] { new HashSet(), new ArrayList(), new HashMap().values() }; for (int i = 0; i < test.length; i++) { System.out.println(classify(test[i])); } Radek Kočí Seminář Java Návrhové vzory, Zásady... 40/ 46
41 Zastaralé odkazy na objekty Paměťové úniky neúmyslné zachování již nepoužívaných objektů vyšší aktivita GC, vyšší spotřeba paměti nejsou zřejmé (špatně se odhalují) Zdroj správa vlastní paměti cache Stack.java Radek Kočí Seminář Java Návrhové vzory, Zásady... 41/ 46
42 Zastaralé odkazy na objekty Řešení nastavit null opakované použití proměnné definovat proměnnou v nejmenším možném oboru platnosti Radek Kočí Seminář Java Návrhové vzory, Zásady... 42/ 46
43 Zvýšení výkonu (správa paměti) Eliminace správy paměti zmenšit počet dočasných proměnných (v cyklech apod.) používat metody, které nevytvářejí dočasné objekty nebo nevracejí kopii objektu String s = "55"; int i = new Integer(s).intValue(); int i = Integer.parseInt(s); místo řetězení + používat StringBuffer Str.java Radek Kočí Seminář Java Návrhové vzory, Zásady... 43/ 46
44 Optimalizace Optimalizace se řídí dvěma zásadami: 1. Nedělejte ji. 2. Zatím ji nedělejte (pro experty); dokud nemáte dokonale jasné řešení. M. A. Jackson Pár poznámek k optimalizaci snažte se psát dobré, nikoliv rychlé programy dobré programy lze dobře optimalizovat, chyby ve špatně napsaných optimalizovaných programech se hledají těžko měřte výkonnost před a po optimalizaci! mnohdy má optimalizace velmi malý nebo i negativní dopad na výkonnost identifikace problémového místa nespoléhat se na intuitivní pohled (tady musí být problém) profilovací nástroje Radek Kočí Seminář Java Návrhové vzory, Zásady... 44/ 46
45 Dokumentační komentáře Radek Kočí Seminář Java Návrhové vzory, Zásady... 45/ 46
46 Zásady programování Zdroje Joshua Bloch: Effective Java (2nd Edition) Martin Fowler: Refactoring: Improving the Design of Existing Code Radek Kočí Seminář Java Návrhové vzory, Zásady... 46/ 46
Semin aˇr Java X Radek Koˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2011 Radek Koˇc ı Semin aˇr Java N avrhov e vzory, Z asady...
Seminář Java X Radek Kočí Fakulta informačních technologií VUT Duben 2011 Radek Kočí Seminář Java Návrhové vzory, Zásady... 1/ 37 Obsah Znovupoužitelnost Návrhové vzory Zásady programování Radek Kočí Seminář
VíceSemin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25
Seminář Java Návrhové vzory Radek Kočí Fakulta informačních technologií VUT Duben 2009 Radek Kočí Seminář Java Návrhové vzory 1/ 25 Znovupoužitelnost Dědičnost implementace třídy pomocí jiné (již existující)
VíceSemin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2008 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 24
Seminář Java Návrhové vzory Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Návrhové vzory 1/ 24 Znovupoužitelnost Dědičnost implementace třídy pomocí jiné (již existující)
VíceNá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íceNávrhové vzory OMO, LS 2014/2015
Návrhové vzory OMO, LS 2014/2015 Motivace Cílem objektového návrhu je strukturu aplikace navrhnout tak, aby splňovala následující kritéria: snadná rozšiřitelnost účelnost testovatelnost dokumentovatelnost
Vícetypová 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ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33
Stručný obsah Část 1: Zahřívací kolo Kapitola 1 Co je a k čemu je návrhový vzor 33 Kapitola 2 Zásady objektově orientovaného programování 39 Kapitola 3 Co konstruktor neumí (Jednoduchá tovární metoda Simple
VíceNávrhové vzory. n OO jazyky - široká paleta technických prostředků. n Návrhový vzor. n rozhraní!! n volnější vazby, parametrizace
Návrhové vzory Návrhové vzory n OO jazyky - široká paleta technických prostředků q dědičnost, polymorfismus, šablony, reference, přetěžování,... q problém - jak toto všechno efektivně používat q cíl -
Více11.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íceVývoj informačních systémů. Architektura, návrh Vzory: Doménová logika
Vývoj informačních systémů Architektura, návrh Vzory: Doménová logika Zachman Framework Zdroje Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented
VíceZá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íceJava 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íceOMO. 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íceLiteratura. E. Gamma, R. Helm, R. Johnson, J. Vlissides The Gang of Four (GoF) Design Patterns Elements of Reusable Object-Oriented Software 1995
Návrhové vzory Literatura E. Gamma, R. Helm, R. Johnson, J. Vlissides The Gang of Four (GoF) Design Patterns Elements of Reusable Object-Oriented Software 1995 Grada 2003: Návrh programů podle vzorů J.
VíceGenerické 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íce14.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íceSeznamy 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íceBridge. 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íceKó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ícespecifikuje vytvářené objekty pomocí prototypické instance nový objekt vytváří kopírováním prototypu
Prototyp Prototyp Účel ( creational kategorie: vytvářecí pro objekty (class specifikuje vytvářené objekty pomocí prototypické instance nový objekt vytváří kopírováním prototypu Příklad obecný systém pro
VíceSeminář 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, 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íceIB111 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íceDefinice 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íceVýč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íce20. 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íceIterator & for cyklus
Iterator & for cyklus for (Object o : foo) funguje pokud je foo pole nebo je foo iterovatelné jako to zařídit? implementovat interface java.lang.iterable Iterable má jednu metodu java.util.iterator iterator()
VíceÚ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íceUJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/
UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok
VíceNá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íceAbstraktní 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íceTří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íce7. 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íce14.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ícePŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY BAKALÁŘSKÁ PRÁCE. Návrhové vzory. 2013 Dan Doležel
PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY BAKALÁŘSKÁ PRÁCE Návrhové vzory 2013 Dan Doležel Anotace Návrhové vzory jsou doporučené postupy pro řešení často se vyskytujících úloh. V
Více11 Diagram tříd, asociace, dědičnost, abstraktní třídy
11 Diagram tříd, asociace, dědičnost, abstraktní třídy Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost diagramům tříd, asociaci,
VíceÚ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íceDesign Patterns. Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz
Design Patterns Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz Základní návrhové vzory Kategorie Creational Patterns starají se o vytváření instancí Structural Patterns struktura komponent v
VíceDědění, polymorfismus
Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá
VíceKTE / 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íceTeoretické 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íceVzor 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íceAbstract Factory úvod
Abstract Factory Abstract Factory úvod Problém potřebujeme vytvářet objekty ze skupiny souvisejících tříd skupin je více, chceme je snadno vyměňovat můžeme používat (v jednom kontextu) pouze jednu skupinu
VíceÚvod - problém. Při přidání nového modelu je nutné upravit. Kód, který se nebu de často měnit. n Mějme obchod s auty:
Factory Method Úvod - problém n 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 =
VíceJazyk 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ícePrincipy 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íceState. 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íceAlgoritmizace 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íceParametrizované 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íceDefinice 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íceZpracoval: houzvjir@fel.cvut.cz
Zpracoval: houzvjir@fel.cvut.cz 15. Návrhové vzory. Komponentový návrh, volná vazba versus těsná vazba. Oddělení politiky od mechanismu. Doménově specifické jazyky (DSL). (A7B36OMO) Obsah Návrhové vzory...
VíceMichal 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íceProgramová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íceGeorge J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu
A Tutorial Advances in query languages for similarity-based databases George J. Klir Petr Krajča State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu Palacky University,
Více1. 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íceObjekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.
Objekty v PHP 5.x This is an object-oriented system. If we change anything, the users object. Objektové PHP Objekty se poprvé objevili v PHP ve verzi 4. Nepříliš zdařilý pokus. Programátoři získali nedůvěru
VíceProgramová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íceAbstraktní 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íceClass 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íceMichal 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íceObsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth
Evropský sociální fond. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace Ing. Ondřej Guth Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze
Více1. 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íceProgramová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íceMichal 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ícePočí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íce8 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íceSeminář 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íceboolean 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íceJava 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íceIRAE 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íceVyuž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ícePokud 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íce4. 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íceGenerické 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íceJazyk 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íceObsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13
Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13 KAPITOLA 1 Na úvod o Javě 15 Počítačový program 15 Vysokoúrovňový programovací
VíceStatické 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íceVýchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo
Výchozí a statické metody rozhraní Tomáš Pitner, upravil Marek Šabo Výchozí a statické metody rozhraní Java 8 přidává ohledně metod v rozhraní nové možnosti. Neuvidíme je tedy ve starém kódu a mnozí vývojáři
VíceStromy. Příklady. Rekurzivní datové struktury. Základní pojmy
Základní pojmy Stromy doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Graf uzly hrany orientované / neorientované Souvislý
VíceDefinice 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ícePB161 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ícePB161 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íceNeměnné objekty. Tomáš Pitner, upravil Marek Šabo
Neměnné objekty Tomáš Pitner, upravil Marek Šabo Neměnné objekty Neměnný (immutable) objekt nemůže být po jeho vytvoření modifikován Bezpečně víme, co v něm až do konce života bude Tudíž může být souběžně
VíceRMI 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íce10 Balíčky, grafické znázornění tříd, základy zapozdření
10 Balíčky, grafické znázornění tříd, základy zapozdření 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 příkazům balíčkům, grafickému
VícePŘ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íceObjektově 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ícená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íceProgramová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íceDatové 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íce9. 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íceVazba (volná, těsná) - míra znalosti jedné třídy*komponenty o druhé.
Návrhové vzory. Komponentový návrh, volná vazba versus těsná vazba. Oddělení politiky od mechanismu. Návrh distribuovaných systémů s použitím webových služeb a servisně orientované architektury (SOA).
VíceMichal 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íceVytvář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ícePB161 Základy OOP. Tomáš Brukner
PB161 Základy OOP Tomáš Brukner Sylabus - Co je to OOP? Jaké jsou základní principy OOP? Jak se projevují v C++? https://cs.wikipedia.org/wiki/strahovská_knihovna SELECT * FROM books WHERE pages < 250
Více7.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íceReflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha
Reflexe Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší
VíceZáklady jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní
Základy jazyka C# 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 Obsah přednášky Architektura.NET Historie Vlastnosti
VíceProjekty 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