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

Podobné dokumenty
Programování II. Polymorfismus

Programování II. Dědičnost změna chování 2018/19

Programování II. Úvod do dědičnosti 2018/19

Programování II. Návrh programu II

Programování II. Objektová dekompozice Třída jako objekt 2018/19

Programování II. Třídy a objekty (objektová orientovanost) 2018/19

Programování II. Modularita 2017/18

Virtuální metody - polymorfizmus

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

1. Dědičnost a polymorfismus

7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ

Abstraktní třída a rozhraní

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

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

20. Projekt Domácí mediotéka

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

Základy objektové orientace I. Únor 2010

Dědění, polymorfismus

typová konverze typová inference

Programování v C++ VI

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

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

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

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.

Generické programování

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

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

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.

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

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

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

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

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

Objektové programování

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

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

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.

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

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

Delphi - objektově orientované

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

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

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

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

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

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

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

Jazyk C++ I. Polymorfismus

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy

Seminář Java IV p.1/38

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

PB přednáška (21. září 2015)

Návrhové vzory OMO, LS 2014/2015

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

Jazyk C# (seminář 3)

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

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

OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ

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

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

Objekty, třídy, vazby 2006 UOMO 30

9. Polymorfismus a rozhraní

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

PB161 Základy OOP. Tomáš Brukner

Výčtový typ strana 67

C# - OOP (object oriented programming)

Kód, který se nebude často měnit

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

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

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

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

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

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

3. Třídy. Základní pojmy objektového programování. Třídy

Mělká a hluboká kopie

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

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

Stručný obsah První týden Druhý týden 211 Třetí týden 451 Rejstřík 787

ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33

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

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/

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

Třída. Atributy. Operace

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Nepravidlové a hybridní znalostní systémy

Programovací techniky

TRANSFORMACE RELAČNÍHO DATOVÉHO MODELU NA OBJEKTOVÝ TRANSFORMATION OF RELATIONAL TO OBJECT DATA MODEL

Objektově orientované programování

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

Návrhové vzory Design Patterns

PREPROCESOR POKRAČOVÁNÍ

Dědičnost, rozhraní (interface)

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Ukazka knihy z internetoveho knihkupectvi

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

10 Generické implementace

Quo vadis programování? Automatizace vyhodnocování studentských úloh

Analýza a modelování dat. Přednáška 4

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

Úvod - problém. Při přidání nového modelu je nutné upravit. Kód, který se nebu de často měnit. n Mějme obchod s auty:

Transkript:

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

Osnova přednášky Polymorfismus - důsledky. Abstraktní třída. Vícenásobná dědičnost.

Polymorfismus - důsledky

Polymorfismus Polymorfismus je schopnost objektu vystupovat v různých rolích (formách) Časná a pozdní vazba. Kdy kterou použít? Souvisí to se substitučním principem, tedy se zastupitelností předka potomkem. V C++ je polymorfismus spojen s dědičností!!! Nejde tedy jen o obyčejné překrytí.

Virtuální metody Jednou označená metoda jako virtuální zůstává virtuální ve všech potomcích. Uvnitř konstruktorů sice můžeme volat virtuální metody, ale ty se budou chovat nevirtuálně. Virtuální destruktor je potřeba, pokud použijeme polymorfní přiřazení

Nevirtuální destruktor

Výsledek

Virtuální destruktor

Výsledek

Abstraktní třída

Čistě virtuální metoda Metoda, která má pouze deklaraci. Nemá implementaci (definici). K čemu to je dobré? Pro správný návrh

Čistě virtuální metody

Dědičnost z nové třídy

Výsledek

Proč??? Ale

Abstraktní třída Třída, která má alespoň jednu čistě virtuální metodu se nazývá abstraktní. Abstraktní proto, že nemůžeme vytvořit její instanci. Může, ale nemusí, mít členské proměnné a implementované metody. Má konstruktor a destruktor. Pro potomka.

Čistě abstraktní třída Třída, jejíž všechny metody jsou čistě virtuální. K čemu může být taková třída? Jako prázdný vzor pro dědičnost. Deklaruje, ale nedefinuje, budoucí společné chování potomků. Je jako interface v Java nebo C#.

Dědičnost účtů AbstractAccount abstraktní třída Account PartnerAccount CreditAccount Kdo tedy má implementovat čistě virtuální metodu? Potomek!!!

Vícenásobná dědičnost

Vícenásobná dědičnost Může potomek dědit z více tříd? Proč ne? Proč ano? Je to pěkný koncept, ale poněkud nebezpečný a často obtížně pochopitelný

Tak tudy opravdu ne

Ale proč ne?

Není to pro začátečníky a pokročilí se bez toho obejdou. Problém je v tom, že Teacher a Student nejsou oddělené abstrakce. Sdílejí společné rysy University_Person. Je tam i problém technický?

Má to tedy smysl? Předci musí to být různé abstrakce. Různé abstrakce můžeme chápat tak, že NEMAJÍ společný stav ani chování. Pak má smysl o vícenásobné dědičnosti uvažovat.

Správný příklad Letadlo společnosti je: Letadlem s technickými parametry a funkcemi s nimi spojenými. Majetkem s evidenčními údaji a odpovídající funkčností.

A další

Obejdeme se bez ní? Ano, ale Někdy potřebujeme, aby třída měla vlastnosti nad rámec základní abstrakce, kterou jinak popisuje. Je to opět o zastupitelnosti předka potomkem. Tentokrát ale může potomek vystupovat v rolích, které se chováním podstatně liší.

Problémy, které mohou nastat Konflikty jmen Třídy, ze kterých se dědí, mohou mít stejně pojmenované členské položky (proměnné i metody). Dá se vyřešit různými způsoby. Opakovaná dědičnost Dá se uhlídat, že se vícekrát nedědí z jedné a téže třídy? Tady je to trošku horší

Opakovaná dědičnost Nepřímá Přímá

A hlavně nenápadně Redundantní dědičnost

Proč se o tom tedy bavíme? Je to užitečný koncept, zejména proto, že objekt může zastupovat dvě odlišné abstrakce Musí se ale používat s rozmyslem. A kdy tedy?

Použití vícenásobné dědičnosti Potřebujeme-li, aby objekty reprezentovaly v různých situacích různé abstrakce. Nejlépe natolik různé, že nehrozí konflikty jmen. Souvisí to se zastupitelností předka potomkem. Ideální je, pokud jsou předci čistě abstraktní třídy (bez dat). Pak je to totéž, co v moderních objektových jazycích interface. Interface je koncept, který se prosadil jako náhrada vícenásobné dědičnosti.

Implementuje příklady z přednášky, zaměřte se na využití abstraktní a čistě abstraktní třídy a na to, jak fungují konstruktory a destruktory. Reimplementuje jednoduchou dědičnou hierarchii geometrických objektů tak, aby jste využili abstraktní a čistě abstraktní třídy.

Kontrolní otázky Co je čistě virtuální metoda? Kdy je vhodné použít čistě virtuální metodu? Uveďte příklad. Co je abstraktní třída? Kdy je vhodné použít abstraktní třídu? Uveďte příklad. Má abstraktní třída konstruktor a destruktor? A proč? Může mít abstraktní třída členská data a funkce (metody)? Co je čistě abstraktní třída? Co je vícenásobná dědičnost? Kdy není vhodné použít vícenásobnou dědičnost? Uveďte příklad. Kdy je možné použít vícenásobnou dědičnost? Uveďte příklad. Jaké problémy mohou nastat při použití vícenásobné dědičnosti? Uveďte příklad Co je opakovaná dědičnost? Uveďte příklady. Proč můžeme potřebovat vícenásobnou dědičnost? S čím to souvisí?

Ke studiu Bertrand Meyer. Object-Oriented Software Construction. Prentice Hall 1997. [486-490, 519-529]