Modularita. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016
|
|
- Kristýna Bláhová
- před 7 lety
- Počet zobrazení:
Transkript
1 Modularita Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, xxb36omo 10/2016, Modularita xxb36omo, 2016, Modularita, 1/41
2 Modularita Větší program nelze zpravidla realizovat jako monolitický kus kódu. Bylo by to příliš nákladné a často by se opakovalo řešení stejných podproblémů. Šikovnější je složit řešení z komponent modulů. Moduly mohou být připraveny předem, nebo být součástí řešení. Moduly spolu komunikují (jinak by nemělo smysl je do řešení zahrnovat). Na druhé straně by jednotlivé moduly měly být na sobě co nejméně závislé - závislost pouze pomocí rozhraní low coupling (nízká provázanost). Samotný modul by měl naopak zahrnovat vše potřebné pro realizaci služeb high cohesion (vysoká soudržnost). xxb36omo, 2016, Modularita, 2/41
3 Umožňuje znovupoužívání kódu. Modularita Lze ji vnímat v různých rovinách abstrakce (metody, třídy, balíčky). Pokud je navržený program modulární, pak je obvykle dobře spravovatelný. Umožňuje zaměnitelnost jednotlivých modulů. Výhodou je, že můžeme mít jednu architekturu, která pouhou výměnou jednotlivých modulů může plnit jinou funkci. Zpřehledňuje a snižuje množství kódu. Závislost mezi moduly je dána počtem použitých rozhraní, jejich složitostí a složitostí informace přenášené přes rozhraní. cmp Components cmp Prov ázané komponenty Modul1 Modul2 Modul1 Modul2 požadované rozhraní poskytované rozhraní xxb36omo, 2016, Modularita, 3/41
4 Deméteřin zákon (Law of Demeter) Pravidlo, které nám říká následující: Každá jednotka by měla mít jen omezené znalosti o dalších jednotkách: pouze jednotky úzce spjaté s touto jednotkou. Každá jednotka by měla mluvit pouze se svými přáteli a nemluvit s cizími jednotkami. Mluvit jen s bezprostředními přáteli. Minimalizuje provázanost jednotlivých modulů. bohyně plodnosti (Demeter = matka) cmp Bankov ní systém Bankov ní systém Internetov é bankov nictv í Obsluha přepážky xxb36omo, 2016, Modularita, 4/41
5 Aplikace Deméteřina zákona na OOP Z hlediska OOP můžeme toto pravidlo aplikovat pomocí následujících 5-ti pravidel s jakými objekty může pracovat metoda M zaslaná objektu O: s touto instancí (this), s argumenty metody M, s objekty, které metoda vytvoří, s komponentami, které jsou součástí O, s globálními objekty, které jsou metodě v rámci O přístupné. xxb36omo, 2016, Modularita, 5/41
6 Příklad: Práce s peněženkou class Penezenka { private double obsah; public double getobsah() { return obsah; }; public void zmenobsah(double kolik) { obsah += kolik; }; public Penezenka(double pocatek) { obsah = pocatek; } }; cmp Penezenka Penezenka - obsah: double + Penezenka(double) + getobsah(): double + zmenobsah(double): boolean xxb36omo, 2016, Modularita, 6/41
7 Příklad: Práce s objektem samotným (this) class Finance { double penize; private Penezenka mojepenezenka; boolean platpenezenkou(double platba) { if (this.mojepenezenka.getobsah() < platba) return false; this.mojepenezenka.zmenobsah(-platba); return true; }; public void platbahotovost(double kolik) { if (platpenezenkou(kolik)) System.out.println("OK"); else System.out.println("Chyba, platbu nelze provest"); }; }; xxb36omo, 2016, Modularita, 7/41
8 Příklad: Práce s argumenty metody class Finance { private Penezenka mojepenezenka; boolean zmenpenezenku(penezenka pen, double platba) { if (pen.getobsah() < platba) return false; pen.zmenobsah(-platba); return true; }; public void platbahotovost(double kolik) { if (zmenpenezenku(mojepenezenka,kolik)) System.out.println("OK"); else System.out.println("Chyba, platbu nelze provest"); }; }; xxb36omo, 2016, Modularita, 8/41
9 Příklad: Práce s komponentami objektu public class Penezenka { private double obsah; private List<Transakce> historie; public double getobsah() { return obsah; }; public List<Transakce> gethistorie() { return historie; }; public void zmenobsah(double kolik) { obsah += kolik; }; public Penezenka(double pocatek) { obsah = pocatek; } }; class Transakce { private Date kdy; private double castka; public Transakce(Date k, double p) { kdy = k; castka = p; }; }; xxb36omo, 2016, Modularita, 9/41
10 Příklad: Práce s komponentami objektu (pokr.) class Finance { }; double penize; private Penezenka mojepenezenka; boolean platpenezenkou(double platba) { }; if (this.mojepenezenka.getobsah() < platba) return false; this.mojepenezenka.zmenobsah(-platba); Transakce e = new Transakce(new Date(),-platba); this.mojepenezenka.gethistorie().add(e); return true; public void platbahotovost(double kolik) { }; if (zmenpenezenku(mojepenezenka,kolik)) System.out.println("OK"); else System.out.println("Chyba, platbu nelze provest"); xxb36omo, 2016, Modularita, 10/41
11 Příklad: Práce s globálními objekty class Finance { public static double hotovost = 1000; // pod matraci private Penezenka mojepenezenka; boolean zmenpenezenku(penezenka pen, double platba) { if (pen.getobsah() < platba) return false; pen.zmenobsah(-platba); return true; }; public void platbahotovost(double kolik) { if (zmenpenezenku(mojepenezenka,kolik)) System.out.println("OK"); else if (hotovost >= kolik) { hotovost -= kolik; System.out.println("OK, ale placeno z hotovosti"); } else System.out.println("Chyba, platbu nelze provest"); }; }; xxb36omo, 2016, Modularita, 11/41
12 Nástroj pro správnou definici modulů - ADT ADT = Abstract Data Type ADT má specifikaci: vyjadřuje abstraktní vlastnosti modulu, nezabývá se reprezentací a implementací. ADT není jen struktura dat: datová struktura + sada konvencí Sada konvencí invarianty reprezentace. Invarianty indikují, zda je datová struktura dobře vytvořena definují množinu validních stavů datové struktury. Abstrahující funkce: převod konkrétní reprezentace do abstraktních hodnot. Říká, jaký je význam datové struktury (abstraktní hodnota), jak má být datová struktura interpretována, jak počítat inverzi, zobrazení z abstraktních hodnot do objektů. xxb36omo, 2016, Modularita, 12/41
13 Specifikace ADT je kolekce procedurálních abstrakcí (nikoliv jen kolekce procedur). Procedurální abstrakce poskytují: definici množiny hodnot, ADT je určen specifikací všechny způsoby, jak lze množinu hodnot používat. Abstrakce pro vytváření (creators) vytvářejí nové hodnoty. Abstrakce pro manipulaci (manipulators) mění hodnoty. Abstrakce pro prohlížení (observers) umožňují prohlížení hodnot. xxb36omo, 2016, Modularita, 13/41
14 Implementace ADT Implementaci ADT (např v Javě) zajišťujeme pomocí tříd (classes). Při implementaci ADT: volíme reprezentaci instancí, implementujeme operace nad touto reprezentací. Při volbě reprezentace respektujeme: aby bylo možné implementovat operace, aby nejčastěji používané operace byly nejvíce efektivní. Které to budou? To sice nevíme, ale abstrakce nám umožňuje tyto skutečnosti změnit. xxb36omo, 2016, Modularita, 14/41
15 Zapouzdření Umožňuje nám řídit přístupová práva k metodám, třídám a objektům. Je založeno na předpokladu, že správné fungování tříd je založeno na řadě invariantů (vlastnostech, které platí po celou dobu existence objektu). Programátor, který třídu používá nemůže tyto invarianty všechny znát. Z tohoto důvodu je dobré programátorovi zamezit v přístupu k členským proměnným a metodám, které by mohly nesprávným použitím tyto invarianty porušit. Zapouzdřením se snažíme zabránit problému zpřístupnění implementace (Representation Exposure). xxb36omo, 2016, Modularita, 15/41
16 Příklad : CharSet - Specifikace class CharSet Character CharSet - elts: List<Character> + delete(character) : void + insert(character) : void + member(character) : boolean + size() : int «realize» «interface» CharSet xxb36omo, 2016, Modularita, 16/41
17 Implementace (jedna možná) class CharSet { private List<Character> elts = new ArrayList<Character>(); public void CharSet(){}; public void insert(character c) { elts.add(c); } public void delete(character c) { elts.remove(c); } public boolean member(character c) { return elts.contains(c); } public int size() { return elts.size(); } }; CharSet s = new CharSet(); Character a = new Character('a'); s.insert(a); s.insert(a); s.delete(a); if (s.member(a)) System.out.println("Chyba"); else System.out.println("OK"); xxb36omo, 2016, Modularita, 17/41
18 Kde je chyba? Může být špatně metoda delete. Měla by odstranit všechny výskyty znaku. Může být špatně metoda insert! Neměla by vložit znak pokud již v Listu je (množina může jeden prvek obsahovat nejvýše jednou, jinak to není množina, ale tzv. multi-množina, angl. bag). Měli bychom se to dozvědět z invariantu reprezentace datového typu, který by měl být součástí specifikace ADT. xxb36omo, 2016, Modularita, 18/41
19 Invarianty reprezentace (Representation Invariants) Specifikují vlastnosti stavu ve kterém platí, že je datová struktura dobře utvořená. Zachycují informaci, která musí platit napříč všemi metodami. Můžeme ho specifikovat např. takto: class CharSet with constrai... Nebo formálněji: CharSet - elts: List<Character> + delete(character) : void + insert(character) : void + member(character) : boolean + size() : int «Invariant» {context S:CharSet inv: forall(c:character S.includes(c) implies c <> NULL and S.isUnique(c))} xxb36omo, 2016, Modularita, 19/41
20 Nyní můžeme nalézt chybu xxb36omo, 2016, Modularita, 20/41
21 Další ukázka invariantu xxb36omo, 2016, Modularita, 21/41
22 CharSet pokračování Uvažujme přidání následující metody do třídy CharSet! S následující implementací! Dodržuje implementace getelts() invariant reprezentace? xxb36omo, 2016, Modularita, 22/41
23 Representation Exposure Uvažujme následující kód: Zpřístupnění implementace je tedy externí přístup k členské proměnné. Zpřístupnění implementace je téměř vždy problém (může dojít k porušení invariantů)! Snažíme se mu vyhnout. xxb36omo, 2016, Modularita, 23/41
24 1. Využít immutabilitu Způsoby jak zabránit Representation Exposure 2. Vytvořit kopii 3. Vytvořit immutable kopii xxb36omo, 2016, Modularita, 24/41
25 Je třeba invarianty reprezentace testovat? Určitě, pokud to není nákladné. Ale i když to nákladné je, při ladění je to nutné. Může být těžké testování za běhu vypnout. Některé privátní metody není nutno testovat (proč?). xxb36omo, 2016, Modularita, 25/41
26 Testování invariantů reprezentace Standardní pravidlo testuj při vstupu a při výstupu (proč?). /* testuje jedinecnost reprezentace invariant */ private void CheckRep() { for (int i = 0; i < elts.size(); i++) { assert elts.indexof(elts.elementat(i) == i); } } /* delete s testy */ public void delete(character c) { CheckRep(); elts.remove(c); CheckRep(); } xxb36omo, 2016, Modularita, 26/41
27 Předpokládejte, že budete dělat chyby. Vytvořte a používejte kód pro jejich zachycení. Na vstupu: Testujte invarianty reprezentace. Testujte preconditions (klazule requires ). Při výstupu: Praktické programování s ochranou Testujte invarianty reprezentace. Testujte postconditions (klazule provides ). Testování invariantů reprezentace pomůže při hledání chyb. Porozumění invariantům reprezentace pomůže vyhnout se chybám. Nebo dokažte, že chyby nemohou nastat. xxb36omo, 2016, Modularita, 27/41
28 Invarianty reprezentace omezují strukturu, nikoliv význam Nová implementace metody insert, která zajišťuje invariant: /* nova implementace insert */ public void insert(character c) { Character cc = new Character (encrypt(c)); if (!elts.contains(cc)) elts.addelement(c); } Program je ale stále špatně: xxb36omo, 2016, Modularita, 28/41
29 Abstrahující funkce: reprezentace význam Abstrahující funkce mapuje konkrétní reprezentaci na abstraktní hodnotu, kterou reprezentuje. AF: Object abstract value AF(CharSet this) = { c c je obsažen v this.elts } množina znaků, obsažená v this.elts Abstrahující funkce typicky není vykonatelná. Abstrahující funkce nám umožňuje pochopit význam z hlediska uživatele. xxb36omo, 2016, Modularita, 29/41
30 Abstrahující funkce: reprezentace význam Náš cíl je splnit specifikaci metody insert: // modifies: this // effects: this post = this pre U {c} public void insert (Character c); Musíme zkoumat, kde by mohla vzniknut chyba. Aplikace abstrahující funkce na výsledek volání metody insert dává: AF(elts) U {encrypt( a )} Co když použijeme následující abstrahující funkci? AF(this) = { c encrypt(c) je obsaženo v this.elts } AF(this) = { decrypt(c) c je obsaženo v this.elts } xxb36omo, 2016, Modularita, 30/41
31 Řešení abstrahující funkce Náš základní cíl je splnit specifikaci metody insert: // modifies: this // effects: this post = this pre U {c} public void insert (Character c); AF nám vysvětluje význam: AF(CharSet this) = { c c je obsaženo v this.elts } Uvažme volání metody insert: Na vstupu je význam AF(this pre ) elts pre Na výstupu je význam AF(this post ) = AF(this pre ) U {encrypt( a )} Pak můžeme použít abstrahující funkci: AF(this) = { c encrypt(c) je obsaženo v this.elts } AF(this) = { decrypt(c) c je obsaženo v this.elts } xxb36omo, 2016, Modularita, 31/41
32 Povolené vedlejší efekty Jiná implementace metody member: boolean member(character c1) { int i = elts.indexof(c1); if (i == -1) return false; // optimalizace Character c2 = elts.elementat(0); elts.set(0, c1); elts.set(i, c2); return true; } Optimalizace (move-to-front) urychluje test na členství. Modifikuje reprezentaci, ale nemění abstraktní hodnotu. xxb36omo, 2016, Modularita, 32/41
33 Abstrahující funkce je funkce Otázka: Proč AF mapuje konkrétní objekty na abstraktní a ne obráceně? Obrácené zobrazení nemusí být funkce. A nedá se zpravidla použít vždy. xxb36omo, 2016, Modularita, 33/41
34 Jak psát abstrahující funkce Doménou jsou všechny reprezentace, které splňují invarianty. Obor hodnot: může být někdy obtížné stanovit. Pro matematické entity (jako množiny) je to jednoduché. Pro složitější abstrakce: rozdělte specifikaci na části (fields). AF definuje hodnotu pro každou takovou část. Přehledová část specifikace by měla poskytovat návod na definici abstraktních hodnot. Tištěný výstup se hodí pro ladění. xxb36omo, 2016, Modularita, 34/41
35 Příklad: ADT pro racionální čísla public class RatNum { private final int numer; private final int denom; // Rep invariant: denom > 0 // numer/denom is in reduced form // Abstraction Function: // represents the rational number numer / denom /** Make a new Ratnum == n. */ public RatNum(int n) { numer = n; denom = 1; checkrep(); } xxb36omo, 2016, Modularita, 35/41
36 Příklad: ADT pro racionální čísla (pokr.) /** Make a new RatNum == (n / d). ArithmeticException if d == 0 */ public RatNum(int n, int d) throws ArithmeticException { // reduce ratio to lowest terms int g = gcd(n, d); n = n / g; d = d / g; // make denominator positive if (d < 0) { numer = -n; denom = -d; } else { numer = n; denom = d; } checkrep(); } } xxb36omo, 2016, Modularita, 36/41
37 Reprezentace versus abstrakce xxb36omo, 2016, Modularita, 37/41
38 Příklad: test pro racionální čísla (pokr.) // Check that the rep invariant is true // Warning: this does nothing unless you turn on assertion // checking by passing -enableassertions to Java private void checkrep() { assert denom > 0; assert gcd(numer, denom) == 1; } // Return a string representation of this rational number // This effectively implements the abstraction function public String tostring() { return (denom > 1)? (numer + "/" + denom) : (numer + ""); } xxb36omo, 2016, Modularita, 38/41
39 Invarianty reprezentace: Které konkrétní hodnoty reprezentují jaké abstraktní hodnoty. Abstrahující funkce: Pro každou konkrétní hodnotu určí jakou konkrétní hodnotu reprezentuje. Dohromady to zajišťuje modularizaci implementace: Můžete zkoušet jednotlivé operátory. Žádný není součástí abstrakce (ADT) V praxi: Shrnutí Vždy definujte invarianty reprezentace. Pokud je to zapotřebí, definujte abstrahující funkci. Pro triviální případy ji udělejte jen informativní, formální definice je mnohem težší. xxb36omo, 2016, Modularita, 39/41
40 Literatura (zdroj) ct05-af-ri.pdf xxb36omo, 2016, Modularita, 40/41
41 The End xxb36omo, 2016, Modularita, 41/41
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
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
OMO. 3 - Klíčové koncepty modelování systémů II
OMO 3 - Klíčové koncepty modelování systémů II Abstraktní datový typ Mutabilita, immutabilita Zpřístupnění reprezentace Neávislost reprezentace Reprezentační invarianty Ing. David Kadleček, PhD kadlecd@fel.cvut.cz,
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í
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í
Ú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
IB111 Programování a algoritmizace. Objektově orientované programování (OOP)
IB111 Programování a algoritmizace Objektově orientované programování (OOP) OP a OOP Objekt Kombinuje data a funkce a poskytuje určité rozhraní. OP = objektové programování Vše musí být objekty Např. Smalltalk,
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ů
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 =
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
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
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í
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
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í
Bridge. Známý jako. Účel. Použitelnost. Handle/Body
Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době
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ší
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ů
public class Karel { private int position; public boolean issmiling; public int getposition() { return position;
Objekty, třídy a hierarchie tříd Interface a abstraktní třídy Dědičnost Message passing Class diagramy a příklady systémů modelovaných pomocí OOP Volba správného přístupu Rozdíl mezi asociací, agregací
5 Rekurze a zásobník. Rekurzivní volání metody
5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení
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
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í
Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy
Základní pojmy Stromy doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Graf uzly hrany orientované / neorientované Souvislý
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á
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
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ů
PB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
PB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
Čipové karty Lekařská informatika
Čipové karty Lekařská informatika Následující kód je jednoduchou aplikací pro čipové karty, která po překladu vytváří prostor na kartě, nad kterým jsou prováděny jednotlivé operace a do kterého jsou ukládány
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í
Objektově orientované programování
Objektově orientované programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 7 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 7: Objektově
Jazyk C# (seminář 3)
Jazyk C# (seminář 3) Pavel Procházka KMI October 8, 2014 Motivace Největší využití v programování okenních aplikací a GUI knihoven. Data reprezentujeme pomocí objektů (tříd), máme tedy ucelený pohled na
Dědění, polymorfismus
Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá
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
Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016
Správa paměti Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, B36OMO 10/2016, Lekce 2 https://cw.fel.cvut.cz/wiki/courses/xxb36omo/start
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ů
Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo
Datové typy v Javě Tomáš Pitner, upravil Marek Šabo Úvod k datovým typům v Javě Existují dvě základní kategorie datových typů: primitivní a objektové Primitivní v proměnné je uložena přímo hodnota např.
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ů
Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů
Infrastruktura UML v UML Karel Richta listopad 2011 Richta: B101TMM - v UML 2 Superstruktura UML Směr pohledu na systém dle UML Diagramy popisující strukturu diagramy tříd, objektů, kompozitní struktury,
Vytváření a použití knihoven tříd
Vytváření a použití knihoven tříd doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Prostory jmen motivace spolupráce
Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.
Obsah přednášky: Definice pojmů o datový typ, o abstraktní datový typ Datové struktury Abstraktní datové typy a jejich implementace o Fronta (Queue) o Zásobník (Stack) o Množina (Set) Algoritmizace (Y36ALG),
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í
Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)
Příklad aplikace Klient/Server s Boss/Worker modelem (informativní) Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze A0B36PR2 Programování 2 Jan Faigl, 2015 A0B36PR2
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
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ů
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)
Návrhové vzory OMO, LS 2014/2015
Návrhové vzory OMO, LS 2014/2015 Motivace Cílem objektového návrhu je strukturu aplikace navrhnout tak, aby splňovala následující kritéria: snadná rozšiřitelnost účelnost testovatelnost dokumentovatelnost
Abstraktní datové typy
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní datové typy BI-PA2, 2011, Přednáška 10 1/27 Abstraktní datové typy Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky,
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky sledujte stav paměti
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
Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.
23. Třídy, generické třídy, instance, skládání, statické metody a proměnné. Zapouzdření, konstruktory, konzistence objektu, zpřístupnění vnitřní implementace, modifikátory public a private. Polymorfismus,
Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.
13 Rozhraní, výjimky 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 rozhraním a výjimkám. Doba nutná k nastudování 2 2,5 hodiny
Abstraktní třída a rozhraní
Abstraktní třída a rozhraní Někdy se může stát, zejména při psaní v hierarchické struktuře hodně nadřazených tříd, že tušíme, že bude ve zděděných třídách vhodné použít nějakou metodu. Tuto metodu ještě
Softwarové komponenty a Internet
Softwarové komponenty a Internet Doc. Dr. Ing. Miroslav Beneš Katedra informatiky FEI VŠB-TU Ostrava Miroslav.Benes@vsb.cz Obsah přednášky Motivace Vývoj přístupů k tvorbě programů Definice komponenty
Iterator & 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()
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é,
Nemě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ě
Code Contracts. Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz
Code Contracts Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz Contracts volaná strana deklaruje, jak se chová vzniká dohoda mezi volající a volanou stranou
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,
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
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ýč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
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
Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!
Java práce s řetězci Trochu povídání.. Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a String. Tyto třídy jsou součástí balíčku java.lang, tudíž je možno s nimi pracovat ihned bez nutného
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
George 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,
UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/
UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok
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;
Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4
Fronta (Queue) Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Fronta uplatňuje mechanismus přístupu FIFO first
Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické
Třídy, polymorfismus A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Polymorfizmus ~ vícetvarost Polymorfizmus základní vlastnost objektového přístupu základní princip polymorfismu:
Dynamicky vázané metody. Pozdní vazba, virtuální metody
Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:
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
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í
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
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
Ú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í
Tvorba informačních systémů
Tvorba informačních systémů Michal Krátký 1, Miroslav Beneš 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2005/2006 c 2006 Michal Krátký, Miroslav Beneš Tvorba informačních
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
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
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
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
Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth
Evropský sociální fond. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace Ing. Ondřej Guth Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze
Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.
Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky
Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka
Java 8 Ondřej Hrstka Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 13 A0B36PR2 Programování 2 Ondřej Hrstka, 2015 A0B36PR2 Přednáška 13: Java 8 1 / 26 Obsah Lambda
Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci
Základy programovaní 4 (Java) Stream API Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 1 / 10 Stream API Java 8 nový přístup k práci s kolekcemi
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky sledujte stav paměti
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
Konstruktory a destruktory
Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,
Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39
Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy
Více 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í
PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2
PI JE JEDNODUCHÝ IMPERATIVNÍ PROGRAMOVACÍ JAZYK OBSAHUJE PODPORU ANOTACÍ NEOBSAHUJE NĚKTERÉ TYPICKÉ KONSTRUKTY PROGRAMOVACÍCH JAZYKŮ JAKO JSOU REFERENCE, UKAZATELE, GLOBÁLNÍ PROMĚNNÉ PODOBÁ SE JAZYKU C
DTP Základy programování Úvod do předmětu
DTP Základy programování 01 - Úvod do předmětu Úvod Co již umíte? Plán předmětu Studijní materiály Způsob ukončení předmětu Základní pojmy I. Řešený problém: Řešeným nebo zpracovávaným problémem je konkrétní
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
Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd.
1. Zapouzdření Cíl látky Tento blok nejdříve přiblíží zásadu zapouzdření a odpoutání kódu a po té na relacích, jako jsou asociace, agregace a kompozice, vysvětlí jak lze objektový zdrojový kód zapouzdřovat
Část I Spojové struktury
Část 1 Spojové struktury (seznamy) Spojové struktury Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 10 A0B36PR1 Programování 1 Spojové struktury Spojový
Základní datové struktury
Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013
Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce
Interpreter Interpreter Motivace Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce Příklad: zda daný textový řetězec odpovídá nějakému vzoru (match)
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
3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda
1. Lze vždy z tzv. instanční třídy vytvořit objekt? 2. Co je nejčastější příčinou vzniku chyb? A. Specifikace B. Testování C. Návrh D. Analýza E. Kódování 3. Je defenzivní programování technikou skrývání
Programování II. Modularita 2017/18
Programování II Modularita 2017/18 Modul? Osnova přednášky Vývoj programování Modularita Příklad Vývoj programování Paradigmata programování Jak a proč se jazyky vyvíjejí? V čem se OOP liší od předchozích
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