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

Podobné dokumenty
NPRG031 Programování II 1 / :25:46

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

Programování II. Polymorfismus

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

Jazyk C# (seminář 3)

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

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

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

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

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

PREPROCESOR POKRAČOVÁ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í

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É

7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ

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

1. Dědičnost a polymorfismus

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

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

Více o konstruktorech a destruktorech

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

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

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

Objektové programování

PB161 Základy OOP. Tomáš Brukner

1. Programování proti rozhraní

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í

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

KTE / ZPE Informační technologie

Zápis programu v jazyce C#

Abstraktní třída a rozhraní

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

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

Základy objektové orientace I. Únor 2010

Dědičnost (inheritance)

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

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

Mnohotvarost (polymorfizmus)

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

Seminář Java II p.1/43

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

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

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

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

Programování v Javě I. Leden 2008

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

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

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí 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

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

Jazyk C# (seminář 6)

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

Programování v C++ VI

Principy objektově orientovaného programování

Unity a Objekty (NMIN102) RNDr. Michal Žemlička, Ph.D.

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

Objektově orientované programování. Úvod

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

Ukazka knihy z internetoveho knihkupectvi

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

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

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

Programování v jazyce C a C++

Objektově orientované programování v jazyce Python

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

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

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

Zpracoval:

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

Transkript:

NMIN201 Objektově orientované programování 1 / 26 8.10.2013 15:36:09

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). NMIN201 Objektově orientované programování 2 / 26 8.10.2013 15:36:09

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 NMIN201 Objektově orientované programování 3 / 26 8.10.2013 15:36:09

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. NMIN201 Objektově orientované programování 4 / 26 8.10.2013 15:36:09

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(); NMIN201 Objektově orientované programování 5 / 26 8.10.2013 15:36:09

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! NMIN201 Objektově orientované programování 6 / 26 8.10.2013 15:36:09

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"; } NMIN201 Objektově orientované programování 7 / 26 8.10.2013 15:36:09

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. NMIN201 Objektově orientované programování 8 / 26 8.10.2013 15:36:09

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! NMIN201 Objektově orientované programování 9 / 26 8.10.2013 15:36:09

Předefinování metody - klíčové slovo new public new void Stekni() { Console.WriteLine( "HAF! HAF! {1} lidi!", jmeno, KolikLidiPokousal ); } NMIN201 Objektově orientované programování 10 / 26 8.10.2013 15:36:09

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!) NMIN201 Objektově orientované programování 11 / 26 8.10.2013 15:36:09

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! NMIN201 Objektově orientované programování 12 / 26 8.10.2013 15:36:09

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) NMIN201 Objektově orientované programování 13 / 26 8.10.2013 15:36:09

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 NMIN201 Objektově orientované programování 14 / 26 8.10.2013 15:36:09

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í) NMIN201 Objektově orientované programování 15 / 26 8.10.2013 15:36:09

Virtuální metody - jak to funguje Metoda předka dokáže zavolat metodu potomka, 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! NMIN201 Objektově orientované programování 16 / 26 8.10.2013 15:36:09

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, C++ etc. to jde a pak to končí!@#$%^&*() ) NMIN201 Objektově orientované programování 17 / 26 8.10.2013 15:36:09

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í. NMIN201 Objektově orientované programování 18 / 26 8.10.2013 15:36:09

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 57 lidi! NMIN201 Objektově orientované programování 19 / 26 8.10.2013 15:36:09

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: - 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í NMIN201 Objektově orientované programování 20 / 26 8.10.2013 15:36:09

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. NMIN201 Objektově orientované programování 21 / 26 8.10.2013 15:36:09

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. NMIN201 Objektově orientované programování 22 / 26 8.10.2013 15:36:09

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 NMIN201 Objektově orientované programování 23 / 26 8.10.2013 15:36:09

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 NMIN201 Objektově orientované programování 24 / 26 8.10.2013 15:36:09

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 NMIN201 Objektově orientované programování 25 / 26 8.10.2013 15:36:09

NMIN201 Objektově orientované programování 26 / 26 8.10.2013 15:36:09