6. cvičení Polymorfismus

Slides:



Advertisements
Podobné prezentace
(instance konkrétní třídy)
Advertisements

Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Úvod do objektově orientovaného programování
Pole, ukazatele a odkazy
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Singleton 1 1.
Polymorfismus Dědičnost
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
Programování v C++ Cvičení.
Čtvrté cvičení Objektové programování Objektový model v Javě
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
C# - struktury, výčtové typy, pole
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Seminář C++ 9. cvičení Šablony Ing. Jan Mikulka. Šablony ► template – vzory, podle kterých může překladač tvořit skupiny podobných tříd nebo funkcí, které.
Kapitoly z metodologie pedagogického výzkumu Prostředí pro výuku algoritmů Vojtěch Ouška.
PB161 Jmenné prostory, I/O proudy PB161 | Jmenné prostory, IO proudy PB161 – Programování v jazyce C++ Objektově Orientované Programování.
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Objektové orientované programování Objektově orientované problémy v PHP Lukáš Masopust 2008.
Objektové programování
C# - funkce a procedury Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
Název sloupce Datový typ Počet znaků Znaková sada Možnost prázdného pole Typ klíče Automatický přírůstek.
PB161 Právo friend, přetěžování operátorů, přetypování PB161 | Friend, operátory PB161 – Programování v jazyce C++ Objektově Orientované Programování.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
PB161 Principy OOP - rozhraní, dědičnost PB161 | Principy OOP - Dědičnost, rozhraní
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
ZADÁNÍ Sestavte program, který vypočítá obvod a obsah čtverce o straně a. Zajistěte, aby výpočet byl realizován pouze v případě, kdy strana a bude mít.
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
C# - Generic Collections Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
POSLOUPNOST úkol 1_41. ZADÁNÍ Sestavte program, který doplní tabulku nepřímé úměrnosti pro hodnoty proměnné x = 1, …, n. Nepřímá úměrnost je zadána uživatelem.
PŘÍKAZ while úkol 1_42.
NEÚPLNÁ PODMÍNKA V JAVĚ úkol 1_26. ZADÁNÍ Napište zdrojový kód k zadanému vývojovému diagramu.
ZADÁNÍ Sestavte program, který vytiskne n hvězdiček.
PŘÍKAZ for úkol 1_47.
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
Název školy: Základní škola a Mateřská škola Kladno, Vodárenská 2115 Autor: Ing. Ilona Sadílková Materiál: VY_32_INOVACE_ICT36.05 Téma: PowerPoint Číslo.
Template Method. Motivační příklad – reálný svět Čaj 1) Uvař vodu 2) Dej do hrnku sáček čaje 3) Zalij hrnek 4) Přisyp cukr a vymačkej citrón Káva 1) Uvař.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně
Počítače a programování 2
Y36PJC Programování v jazyce C/C++
Úvod do C# - OOP Jaroslav BURDYS 4IT.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Y36PJC Programování v jazyce C/C++
ZAL – 6. cvičení 2016.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Typový příklad 3 – zadání 1
Počítače a programování 2 pro obor EST BPC2E PŘEDNÁŠKA 3
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Bridge.
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Transkript prezentace:

6. cvičení Polymorfismus Seminář C++ 6. cvičení Polymorfismus Ing. Jan Mikulka

Polymorfismus princip přetěžování metod v dědičnosti jedna metoda je v různých třídách svázaných dědičností implementována rozdílně V odvozených třídách jsou metody předefinovány a pozmění se tak účel metody Metody, které se mají v odvozených třídách změnit se deklarují s klíčovým slovem virtual

Příklad použití máme danou třídu Sachy, třída obsahuje metodu algoritmus(), která zajišťuje hru počítače, dále metody pro složité grafické rozhraní chceme vytvořit třídu MojeSachy s naprosto stejným grafickým rozhraním, ale jiným algoritmem myšlení řešení – vytvoření potomka třídy Sachy, MojeSachy a následné přetížení metody algoritmus() výhoda – není nutné zasahovat do původního kódu – jde pouze o přidání v našem kódu

Příklad použití class Sachy { protected: // příklad na oprávnění protected - metoda, kterou může potomek přepsat void algoritmus() { puts("Hloupý algoritmus"); } public: void run() algoritmus(); }; class MojeSachy : public Sachy { // Odvozený šachový program se změnou algoritmu za chytrý protected: // náš chytrý algoritmus puts("Chytrý algoritmus"); void main(void) { MojeSachy sachy; sachy.run(); // nastane problém, metoda run() volá metodu algoritmus() z bázové třídy!!!

Virtuální metody Chceme, aby metoda run() bázové třídy Sachy volala metodu algoritmus() podle toho, z jakého objektu ji voláme V případě volání Sachy.run() by měla metoda run() volat Sachy::algoritmus() V případě volání MojeSachy.run() by měla metoda run() volat přetíženou metodu MojeSachy::algoritmus() Minulý příklad toto neřeší! Řešení – virtuální metody

Virtuální metody class Sachy { // ... … … virtual void algoritmus() { puts("Hloupý algoritmus"); } }; class MojeSachy : public Sachy { virtual void algoritmus() { puts("Chytrý algoritmus");

Virtuální metody Pokud přidáme k metodě algoritmus() klíčové slovo virtual, překladač při překladu SachyKnihovni::run() ví, že odtud má zavolat virtuální metodu algoritmus(), a nemůže tedy vložit jen jednoduché volání funkce. Místo toho přidá na místo volání jednoduchý kód, který se podívá do tabulky virtuálních metod daného objektu a zavolá příslušnou metodu. O tom, která metoda se zavolá se tedy rozhoduje až za běhu programu.

Zadání cvičení Napište třídu Pole, která bude obsahovat jednorozměrné dynamicky alokované pole int, konstruktory a destruktor pro inicializaci pole, metody Print pro výpis pole na konzoli, SortedPrint pro výpis pole seřazeného vzestupně. Tato funkce bude volat protected metodu Sort, která vrátí seřazené pole funkci SortedPrint. Napište třídu PoleEx jako potomka třídy Pole, ve které bude pouze přetížená metoda Sort, která vrátí pole seřazené sestupně. V hlavním programu vytvořte instanci třídy Pole, volejte metodu SortedPrint, která vypíše pole seřazené vzestupně Dále vytvořte instanci třídy PoleEx, volejte metodu SortedPrint, která vypíše pole seřazené sestupně (v případě virtuální metody Sort), resp. vzestupně (bez virtuálních metod) program umístěte do samostatného hlavičkového souboru, nakreslete vývojový diagram použití nového „cout <<“ místo „printf()“ použití new a delete bodování: funkce (1 bod), rychlost (1 bod), stabilita a délka prog. (1 bod), implementace v hl. souboru (1 bod)