NPRG031 Programování II 1 / :25:46

Podobné dokumenty
NMIN201 Objektově orientované programování 1 / :36:09

Programování II. Polymorfismus

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

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

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Dědění, polymorfismus

Virtuální metody - polymorfizmus

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

20. Projekt Domácí mediotéka

Jazyk C# (seminář 3)

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

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

PREPROCESOR POKRAČOVÁNÍ

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

Chování konstruktorů a destruktorů při dědění

Generické programování

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

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

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

NPRG031 Programování II 1 / :47:55

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.

24. listopadu 2013, Brno Připravil: David Procházka

Jazyk C++ I. Polymorfismus

URČITÝM ZPŮSOBEM PODOBNÉ

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

7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ

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

1. Dědičnost a polymorfismus

Více o konstruktorech a destruktorech

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Objektové programování

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

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

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

Objektově orientované programování (OOP) je po strukturovaném programování

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

PB161 Základy OOP. Tomáš Brukner

1. Programování proti rozhraní

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

Java - řazení objektů

Úvod do programovacích jazyků (Java)

typová konverze typová inference

Zápis programu v jazyce C#

NMIN201 Objektově orientované programování 2016/17 1 / :03:29

Abstraktní třída a rozhraní

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/

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

KTE / ZPE Informační technologie

Dědičnost (inheritance)

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

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

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

Programování II. Abstraktní třída Vícenásobná dědičnost 2018/19

Seminář Java II p.1/43

Základy objektové orientace I. Únor 2010

Programování v Javě I. Únor 2009

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.

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

Mnohotvarost (polymorfizmus)

Programování v Javě I. Leden 2008

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí třídy

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

Obsah. October 2, Polymorfizmus. Typologie testování. Problém polymorfizmu. Vady/Anomálie. Vazební sekvence ČVUT FEL, K13132

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

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

Zpracování deklarací a přidělování paměti

Jazyk C# (seminář 6)

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

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

C# - OOP (object oriented programming)

Komponenty v.net. Obsah přednášky

Principy objektově orientovaného programování

Programování v C++ VI

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

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

Anotace. Objekt self, Zapouzdření, polymorfismus,

Ukazka knihy z internetoveho knihkupectvi

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

11. Dědičnost. Dědičnost strana 103

Programování II. Návrh programu II

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

Objektově orientované programování

Programování v jazyce C a C++

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

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

Objektově orientované programování. Úvod

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

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

Konstruktory a destruktory

Výčtový typ strana 67

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

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

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

Zpracoval:

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Transkript:

NPRG031 Programování II 1 / 26 28. 2. 2018 11:25:46

Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat jiné objekty (tělo obsahuje buňky, letadlo součásti). Objekty URČITÝM ZPŮSOBEM PODOBNÉ můžeme považovat za instance jedné TŘÍDY (pes). NPRG031 Programování II 2 / 26 28. 2. 2018 11:25:46

Objekty Další pokus oddělit CO x JAK VENKU x UVNITŘ INTERFACE x IMPLEMENTACE Strukturované programování blok, funkce Modulární programování modul, unit Objektové programování objekt NPRG031 Programování II 3 / 26 28. 2. 2018 11:25:46

Objekty v programu Způsob jak izolovat část kódu (příkaz-blok-procedura-modul-objekt). Způsob jak uvažovat o problému Objekt sdružuje DATA (datové složky, vlastnosti) i KÓD (funkce+procedury=metody) = ČLENY (members) OBJEKT = exemplář, instance třídy. NPRG031 Programování II 4 / 26 28. 2. 2018 11:25:46

class Komplex { public double Re, Im; public double AbsolutniHodnota() { return Math.Sqrt(Re * Re + Im * Im); } }... Komplex k = new Komplex(); k.re = 1.00; k.im = 1.00; double y = k.absolutnihodnota(); NPRG031 Programování II 5 / 26 28. 2. 2018 11:25:46

Konstruktor - metoda volaná při vytváření instance - slouží k inicializaci objektu - má důležitý vedlejší efekt (později!). Pes pes = new Pes("alik", 5, 20, 2); pes.stekni(); # haf! jmenuju se alik a uz jsem pokousal 2 lidi! NPRG031 Programování II 6 / 26 28. 2. 2018 11:25:46

Více konstruktorů Třída může mít více konstruktorů*), musí se lišit parametry (počet, typ). public Pes(string jmeno, int vaha, int vyska, long KolikLidiPokousal) { this.jmeno = jmeno; this.vaha = vaha; this.vyska = vyska; this.koliklidipokousal = KolikLidiPokousal; } public Pes() { this.jmeno = "noname"; } *) to platí i pro jiné funkce NPRG031 Programování II 7 / 26 28. 2. 2018 11:25:46

Dědičnost ODVOZENÝ datový typ (POTOMEK)...DĚDÍ od svého RODIČE (PŘEDKA) - všechny datové složky - všechny metody Může PŘIDÁVAT datové složky a metody. Může PŘEPISOVAT metody. NPRG031 Programování II 8 / 26 28. 2. 2018 11:25:46

class VelkyPes: Pes { public VelkyPes(string jmeno, int vaha, int vyska, long KolikLidiPokousal) { this.jmeno = jmeno; this.vaha = vaha; this.vyska = vyska; this.koliklidipokousal = KolikLidiPokousal; } public new void Stekni() { Console.WriteLine( "HAF! HAF! {1} lidi!", jmeno, KolikLidiPokousal ); } } VelkyPes pes2 = new VelkyPes("Rokko", 105, 50, 27); pes2.stekni(); HAF! HAF! 27 lidi! NPRG031 Programování II 9 / 26 28. 2. 2018 11:25:46

Předefinování metody - klíčové slovo new public new void Stekni() { Console.WriteLine( "HAF! HAF! {1} lidi!", jmeno, KolikLidiPokousal ); } NPRG031 Programování II 10 / 26 28. 2. 2018 11:25:46

Volání metody předka Pomocí klíčového slova base class VelkyPes: Pes {... public new void Stekni() { base.stekni(); Console.WriteLine("(HAF! HAF!)"); } } haf! jmenuju se Hugo a uz jsem pokousal 57 lidi! (HAF! HAF!) NPRG031 Programování II 11 / 26 28. 2. 2018 11:25:46

Problém s předefinovanou metodou VelkyPes pes2 = new VelkyPes("Rokko", 105, 50, 27); pes2.stekni2x(); haf! jmenuju se Rokko a uz jsem pokousal 27 lidi! haf! jmenuju se Rokko a uz jsem pokousal 27 lidi! NPRG031 Programování II 12 / 26 28. 2. 2018 11:25:46

Vysvětlení Metoda Stekni2x() volá (dvakrát) metodu Stekni()......z třídy Pes (jiná třída v té době ani neexistovala). Třída VelkyPes předefinuje metodu Stekni(), ale metodu Stekni2x() dědí od (malého) Psa. Je tedy vše ztraceno? (odpověď na příštím slajdu) NPRG031 Programování II 13 / 26 28. 2. 2018 11:25:46

Obyčejné a virtuální metody Metody: - obyč (o jejich volání je rozhodnuto při překladu, early-binding ) - virtuální (o jejich volání se rozhoduje až v okamžiku volání, late-binding ) Syntaxe: - neřekneme-li nic, je metoda ne-virtuální (obyčejná, BP: statická ) - deklarace virtuální metody: virtual, override NPRG031 Programování II 14 / 26 28. 2. 2018 11:25:46

Obyčejné a virtuální metody 2. POZOR: public virtual void Stekni() zakládá nový kořen, NEPŘEPISUJE starou metodu (tj. pokud se ta metoda volá nepřímo, tak se volá ta původní) NPRG031 Programování II 15 / 26 28. 2. 2018 11:25:46

Virtuální metody - jak to funguje Metoda starší třídy dokáže zavolat metodu novější třídy, jak je to možné? VMT: Tabulka virtuálních metod - 1 pro každou třídu (tj. typ), vytváří překladač - obsahuje adresy virtuálních metod - při volání se volá metoda uložená ve VMT - objekt obsahuje odkaz na VMT - kdo ho tam dosadí? = KONSTRUKTOR! NPRG031 Programování II 16 / 26 28. 2. 2018 11:25:46

Virtuální metody - jak to funguje 2 Co když nezavolám konstruktor? = V C# nemám možnost jak vytvořit objekt, aniž bych zavolal konstruktor (v Pascalu... to jde a pak to končí!@#$%^&*() ) NPRG031 Programování II 17 / 26 28. 2. 2018 11:25:46

Polymorfismus - objekty se vytvářejí dynamicky - proměnné objektových typů jsou jen ukazatelé - kompatibilita typů (ukazatelů), VelkyPes je také Pes -...ale vidíme jen to, co má Pes - opačným směrem nelze (bez použití nějakých konverzních metod) => volá se metoda příslušná aktuálnímu TYPU (třídě) objektu. Ta metoda MUSÍ BÝT virtuální. NPRG031 Programování II 18 / 26 28. 2. 2018 11:25:46

Polymorfismus Příklad 1. Pes pes; for (int i = 1; i <= 2; i++) { if (i==1) pes = new Pes("alik", 5, 20, 0); else pes = new VelkyPes("Hugo", 5, 20, 57); pes.stekni(); }... haf! jmenuju se alik a uz jsem pokousal 0 lidi! HAF! HAF! Uz jsem pokousal 1057 lidi! NPRG031 Programování II 19 / 26 28. 2. 2018 11:25:46

Abstraktní metoda, abstraktní třída Abstraktní třída: - společný předchůdce jiných tříd - nebudeme od ní vytvářet instance Abstraktní metoda: - je virtuální - slouží jen k tomu, aby mohla být předefinována v potomcích - může být předefinována zase abstraktní metodou - potomci nemohou volat TUTO metodu předka => ta třída je potom také abstraktní NPRG031 Programování II 20 / 26 28. 2. 2018 11:25:46

Statické členy a třídy Statické členy (members) (metody, data...) - jsou alokovány ve třídě a ne instanci. - jsou přístupné pomocí jména třídy (nejsou přístupné pomocí jména instance) Statická třída - obsahuje pouze statické členy - nelze z ní vytvářet instance pomocí new - nelze z ní dědit I třída, která není statická, může mít statické členy. NPRG031 Programování II 21 / 26 28. 2. 2018 11:25:46

Atributy přístupnosti/viditelnosti - public: přístupné všem - protected: přístupné jen z této třídy/struktury a z potomků - internal: přístupné jen z aktuálního assembly - protected internal: přístupné jen z aktuálního assembly nebo z potomků - private: přístupné jen z této třídy/struktury Když není uvedeno, platí výchozí hodnota, pro class je to private. NPRG031 Programování II 22 / 26 28. 2. 2018 11:25:46

Zapouzdření - nenechte nikoho sahat na svá data (veřejné obvykle jenom metody a VLASTNOSTI (za chvilku) ) - interface = smlouva, to, co používají ostatní části programu Výhoda zapouzdření: objekty jsou vždy v konsistentním stavu NPRG031 Programování II 23 / 26 28. 2. 2018 11:25:46

Properties vlastnosti - pro uživatele vypadají jako datová složka - sestávají z 1 nebo 2 bloků kódu get-set - když chybí set, je property read-only - když chybí get, je property write-only NPRG031 Programování II 24 / 26 28. 2. 2018 11:25:46

Sealed třídy - už od nich nelze dědit metody a ostatní members public sealed override void DoWork() - už dál nebude virtuální - lze ji přepisovat via new NPRG031 Programování II 25 / 26 28. 2. 2018 11:25:46

NPRG031 Programování II 26 / 26 28. 2. 2018 11:25:46