Objekty, třídy, instance

Podobné dokumenty
Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

KTE / ZPE Informační technologie

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

Základy objektové orientace I. Únor 2010

Úvod do programování - Java. Cvičení č.4

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

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

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

TÉMATICKÝ OKRUH Softwarové inženýrství

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

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

Algoritmizace a programování

1. Dědičnost a polymorfismus

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

Úvod do programovacích jazyků (Java)

Datové struktury. alg12 1

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

Konstruktory a destruktory

1. Téma 12 - Textové soubory a výjimky

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

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

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

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

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

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

1. Programování proti rozhraní

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

Principy objektově orientovaného programování

Úvod. Programovací paradigmata

Soubor jako posloupnost bytů

Více o konstruktorech a destruktorech

Abstraktní datové typy: zásobník

9. přednáška - třídy, objekty

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

7.3 Diagramy tříd - základy

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

20. Projekt Domácí mediotéka

Projekty pro výuku programování v jazyce Java

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

1 Nejkratší cesta grafem

Generické programování

Programovací jazyk Pascal

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.

Mělká a hluboká kopie

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

OOPR_05. Případové studie

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

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

7.5 Diagram tříd pokročilé techniky

7.3 Diagramy tříd - základy

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

Úvod do programovacích jazyků (Java)

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Diagramy tříd - základy

Objektově orientovaný přístup

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

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

Java - řazení objektů

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

6 Objektově-orientovaný vývoj programového vybavení

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

Návrhové vzory OMO, LS 2014/2015

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

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

10 Balíčky, grafické znázornění tříd, základy zapozdření

typová konverze typová inference

Výčtový typ strana 67

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

7.5 Diagram tříd pokročilé techniky

Princip funkce počítače

Vyřešené teoretické otázky do OOP ( )

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

Projekt Obrázek strana 135

Algoritmizace diskrétních. Ing. Michal Dorda, Ph.D.

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

Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský

PŘETĚŽOVÁNÍ OPERÁTORŮ

Micro:bit lekce 3. - Konstrukci If Then a If Then Else najdete v kategorii Logic - Podmínky od If (např. porovnání < >= atd.) najdete taktéž v Logic

Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů

1/1 ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE PROVOZNĚ EKONOMICKÁ FAKULTA PŘIJÍMACÍ ŘÍZENÍ 2017/2018

Algoritmizace a programování. Terminálový vstup a výstup

IRAE 07/08 Přednáška č. 1

Vytváření a použití knihoven tříd

Dědičnost (inheritance)

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

Algoritmizace řazení Bubble Sort

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

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

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

PROJEKT MINY - DOKUMENTACE

Teoretické minimum z PJV

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

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

Sada 1 - Základy programování

Transkript:

Objekty, třídy, instance Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, xx36omo 09/2016, Lekce 1 https://cw.fel.cvut.cz/wiki/courses/xxb36omo/start xx36omo, 2016, Lekce 1, 1/34

Cíl předmětu Proč OOP: Objektově-orientovaný přístup dnes drtivě převažuje ve všech aspektech vývoje softwaru: analýze, návrhu i implementaci. Cílem tohoto kurzu je dovést studenty k solidnímu porozumění základním pojmům objektové teorie a k jejímu použití v praxi při návrhu software. Cílem OOP je především: Zjednodušit pochopení modelovaného problému. Usnadnit údržbu. Usnadnit další rozšiřování programu. xx36omo, 2016, Lekce 1, 2/34

Sémantická mezera Sémantická mezera: Rozdíl výkonného hardware na jedné straně a nevýkonného software a jeho tvorby. V současnosti totiž máme výkonný hardware, velmi složitý a hardwarově náročný software, který je schopen plnit naše požadavky avšak za cenu velkých finančních nákladů do hardware, do vývoje software jeho udržování a změn. Jinými slovy: Při analýze potřeb uživatelů mluvíme jazykem blízkým uživatelům. Implementaci ale musím realizovat pomocí hardwaru typu von Neumannova stroje. Tuto sémantickou mezeru se zpravidla pokoušíme řešit pomocí různých modelů, které postupně transformujeme od úrovně uživatelské až po implementační. xx36omo, 2016, Lekce 1, 3/34

Sémantická mezera Problémy: Jsme nuceni i ve vyšších programovacích jazycích používat primitivní takzvané vn operace. Jedná se o přiřazovací příkazy umožňující přesuny dat a skoky pro změnu toku řízení. Tento fakt se promítá i do různých vnějších podob operačních systémů a různých aplikačních programů. Algoritmy se složitě vyjadřují, rozsáhlé programy jsou neodladitelné, údržba a modifikace hotových programů je problematická a za chodu věnuje procesor více než 50% času systémovým programům. xx36omo, 2016, Lekce 1, 4/34

V čem je problém von Neumannova stroje? zastaralá architektura stroje (1946) primitivní paměť obsahující data i program sekvenční imperativní řízení výpočtu John von Neumann http://www.ivt.mzf.cz/seminar/ 1-principy-a-vyvoj-pocitacu/ xx36omo, 2016, Lekce 1, 5/34

Sémanticky strukturovaná paměť xx36omo, 2016, Lekce 1, 6/34

Virtuální stroj xx36omo, 2016, Lekce 1, 7/34

Objektově Orientované Programování (OOP): Vychází z intuitivního chápání světa. Základním konceptem jsou objekty. Objekty mají určité vlastnosti (properties) a schopnosti (capabilities). Objekty jsou stavební bloky programu: Program je tedy soubor interagujících objektů. Objekty mohou modelovat reálné věci: auto, hrnek, židle, zeměkoule. Objekty mohou modelovat koncepty: schůzka, shromáždění, telefonát. Svět Objektů Objekty mohou modelovat procesy: hledání cesty bludištěm, seřazení balíčku karet. xx36omo, 2016, Lekce 1, 8/34

Příklad - Tetris Jaké jsou herní objekty? Co musí tyto objekty umět vykonat? Jaké vlastnosti tyto objekty mají? xx36omo, 2016, Lekce 1, 9/34

Příklad - Tetris Jaké jsou herní objekty? např. dílky a hrací plán Co musí tyto objekty umět vykonat? Jaké vlastnosti tyto objekty mají? xx36omo, 2016, Lekce 1, 10/34

Příklad - Tetris Jaké jsou herní objekty? např. dílky a hrací deska. Co musí tyto objekty umět vykonat? dílek: být vytvořen, spadnout, zastavit se, otočit se, hrací deska: být vytvořena, odstranit řádek, zkontrolovat konec hry. Jaké vlastnosti tyto objekty mají? xx36omo, 2016, Lekce 1, 11/34

Příklad - Tetris Jaké jsou herní objekty? Co musí tyto objekty umět vykonat? Jaké vlastnosti tyto objekty mají? dílek orientace, pozice, tvar, barva, hrací deska velikost, počet řádek. xx36omo, 2016, Lekce 1, 12/34

Jak to zaznamenáme? class Tetris Obj ect... class Tetris Obj ect Model Dílek Dílek - barva: Color - tvar: Shape - poloha: Point - natoceni: int «datatype» Color «datatype» Shape HraciPlocha HraciPlocha - šířka: int - hloubka: int Point - x: int - y: int Hráč Hráč - jméno: String «datatype» String xx36omo, 2016, Lekce 1, 13/34

Jak to zaznamenáme? pokr. class Tetris Obj ect Model Dílek - barva: Color - tvar: Shape - poloha: Point - natoceni: int + Dílek() + spadni(): void + vlavo(): void + vpravo(): void «datatype» Color Point - x: int - y: int «datatype» Shape «datatype» String Hráč - jméno: String + Hráč(String) + setjmeno(string) + getjmeno(): String HraciPlocha - šířka: int - hloubka: int Hra + Hra(int, int) + HraciPlocha(int, int) + vyhodradek() xx36omo, 2016, Lekce 1, 14/34

Jak to zaznamenáme? pokr. class Tetris Obj ect Model Dílek - barva: Color - tvar: Shape - poloha: Point - natoceni: int + Dílek() + spadni(): void + vlavo(): void + vpravo(): void «datatype» Color Point - x: int - y: int «datatype» Shape «datatype» String Hráč - jméno: String + Hráč(String) + setjmeno(string) + getjmeno(): String +hrac 0..1 * 1 HraciPlocha - šířka: int - hloubka: int + HraciPlocha(int, int) + vyhodradek() +patri 0..1 1 Hra 1 + Hra(int, int) xx36omo, 2016, Lekce 1, 15/34

Schopnosti Objektů Schopnosti (metody) objektů umožňují provádět specifické akce. Metoda objektu musí být vyvolána nějakým objektem (včetně objektu na kterém je metoda volána). Metody objektů dělíme na: konstruktory - inicializují počáteční stav objektu příkazy - mění vlastnosti, tudíž stav objektu dotazy - poskytují odpověď na základě vlastností, stavu objektu xx36omo, 2016, Lekce 1, 16/34

Příklad Metody popelnice konstruktor: vytvoř popelnici příkazy: přidej odpad, vyprázdni se dotazy: kolik je odpadu v popelnici?, je otevřeno víko? xx36omo, 2016, Lekce 1, 17/34

Vlastnosti Objektů Vlastnosti (properties) zajišťují unikátnost objektů: Ovlivňují jakým způsobem se metody na objektu chovají. Některé vlastnosti mohou být konstantní, jiné se mohou měnit. Vlastnosti mohou být také objekty. xx36omo, 2016, Lekce 1, 18/34

Vlastnosti Objektů Vlastnosti objektu dělíme na: atributy - objekty, které pomáhají objekt popsat, komponenty - objekty, které jsou součástí daného objektu (objekt se z nich skládá, např. auto má kola), asociace - objekty o kterých daný objekt ví, ale nejsou jeho součástí (např. auto je v garáži, auto může vědět o garáži). xx36omo, 2016, Lekce 1, 19/34

Stav Objektu Stavem objektu nazýváme kolekci všech jeho vlastností společně s jejich hodnotami. Stav objektu se změní pokud se změní aktuální hodnota(y) některé jeho vlastnosti(í). xx36omo, 2016, Lekce 1, 20/34

Stav Objektu - Příklad Mějme objekt Auto s následujícími vlastnostmi: rok výroby, barva. Co popisuje stav tohoto objektu? Může se změnit barva? Může se změnit rok výroby? xx36omo, 2016, Lekce 1, 21/34

Stav Objektu - Příklad Mějme objekt Auto s následujícími vlastnostmi: rok výroby, barva. Co popisuje stav tohoto objektu? Hodnotami atributů rok výroby, barva. Může se změnit barva? Ano, auto můžeme nechat přebarvit. Může se změnit rok výroby? Ne, jedná se o konstantní vlastnost. xx36omo, 2016, Lekce 1, 22/34

Třídy a Instance Koncept, který jsme zavedli, modeluje každý objekt reálného světa samostatným objektem. Jinými slovy, každé auto bychom museli definovat od začátku se všemi vlastnostmi atd. Nevýhoda? xx36omo, 2016, Lekce 1, 23/34

Třídy a Instance Nevýhoda? Příliš mnoho práce pro programátora objekty specifikovat. Velmi nepraktické, objekty mohou mít mnoho společného: Např. auto má víceméně vždy kola, volant, sedadla, barvu, atd xx36omo, 2016, Lekce 1, 24/34

Třídy a Instance Zavedení tříd nám přinese seskupení společných rysů objektů z nich instancovaných : společné vlastnosti stačí popsat jednou, poté můžeme vytvářet instance dle libosti, které budou mít tyto vlastnosti společné. xx36omo, 2016, Lekce 1, 25/34

Třídy a Instance Razítko (Třída) Otisk Razítka (Instance) xx36omo, 2016, Lekce 1, 26/34

Třída Třída je kategorie objektu. Definuje vlastnosti a schopnosti společné pro určitou množinu objektů. Např. Všechny popelnice mohou otevírat víko, zavírat víko, vysypávat odpad. Třída je šablonou pro vytváření instancí objektů. Třídy implementují schopnosti objektů jako metody: Metoda je v jazyce Java posloupnost příkazů. V jazyce Java odesílatel (sender) zasílá zprávu příjemci (receiver) pomocí volání jedné z příjemcových metod. Třídy implementují vlastnosti objektů jako instanční proměnné. Místo v paměti alokované pro daný objekt k ukládání hodnot. xx36omo, 2016, Lekce 1, 27/34

Instance Instance třídy jsou samotnými objekty: Jsou vytvářeny z tříd. Mohou být složeny z dalších instancí tříd. Všechny instance dané třídy mají stejné atributy, ale u každé z nich mohou mít rozdílné hodnoty. Např. Mějme dvě instance třídy Auto. Každá z nich má atribut barva. První z nich má hodnotu atributu barva červená, druhá modrá. xx36omo, 2016, Lekce 1, 28/34

Příklad: Hra v kostky Uvažme příklad velmi jednoduché hry s kostkami máme dvě kostky a házíme. Pokud nám v daném hodu vyjde součet 7, vyhráli jsme, jinak jsme naopak prohráli. Objektové řešení vychází z podstaty úlohy pracujeme s objekty typu kostka. To jsou instance obecné třídy Kostka. Kostka umí metodu hod, která nastaví interní hodnotu kostky hodnotakterapadla na náhodné číslo a vrátí toto číslo jako výsledek. Hru hrají hráči, kteří mají jméno to je možno jim pomocí metod nastavit a číst (setjmeno/getjmeno). Hra spočívá v tom, že hráč hodí kostkami to nám může zajistit metoda hrajhru. xx36omo, 2016, Lekce 1, 29/34

Třída Kostka import java.util.random; class Kostka { private int hodnotakterapadla; private Random random; public Kostka() { this.random = new Random(); this.hod(); } public int hod() { hodnotakterapadla = this.random.nextint(6)+1; class Domain return Obj ects hodnotakterapadla; } } he Domain class model captures essential information about objects in the domain. Kostka - hodnotakterapadla: int + hod(): int xx36omo, 2016, Lekce 1, 30/34 Hra

Třída Hráč class Domain Obj ects class Hrac { private String jmeno; Kostka public Hrac() { jmeno = ""; } public void - hodnotakterapadla: nastavjmeno(string intjm) { jmeno + = hod(): jm; int } public String dejjmeno() 2 { return jmeno; } } «datatype» String 1 HraVKostky + hrajhru() 1 1 Hráč - jmeno: String + getjmeno(): String + setjmeno(string): void xx36omo, 2016, Lekce 1, 31/34

class HraVKostky { private Kostka kostka1 = new Kostka(); private Kostka kostka2 = new Kostka(); private Hrac hrac1 = new Hrac(); private String x; private int vysledek; private boolean konec; public Hra() {} public void hrajhru() { } } hrac1.nastavjmeno("pavel"); do { Třída HraVKostky class Domain Obj ects System.out.println("Nazdar "+hrac1.dejjmeno()+", chces hrat?: "); Scanner sc = new Scanner( System.in ); x he = Domain sc.next(); class model captures konec essential = information x.equals("n"); about objects in the domain. if (!(konec)) { vysledek = kostka1.hod() + kostka2.hod(); } } while (!(konec)); System.out.print("Padlo: "+vysledek); if (vysledek == 7) System.out.println(", vyhral jsi!"); else System.out.println(", prohral jsi -:(!"); xx36omo, 2016, Lekce 1, 32/34 Kostka - hodnotakterapadla: int + hod(): int 2 1 HraVKostky + hrajhru() 1 1 «datatype» String Hráč - jmeno: String + getjmeno(): String + setjmeno(string): void

The End xx36omo, 2016, Lekce 1, 34/34