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

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

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

Programování II. Polymorfismus

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

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

Programování II. Modularita 2017/18

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

Programování II. Návrh programu II

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

1. Dědičnost a polymorfismus

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

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

PB161 programování v C++ Výjimky Bezpečné programování

Dědičnost (inheritance)

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

Základy objektové orientace I. Únor 2010

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.

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

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

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

Generické programování

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

Delphi - objektově orientované

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

20. Projekt Domácí mediotéka

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

Dědění, polymorfismus

Virtuální metody - polymorfizmus

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

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

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

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

Objektové programování

Objekty, třídy, vazby 2006 UOMO 30

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

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

7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ

Úvod do principů objektově orientovaného programování

Návrhové vzory OMO, LS 2014/2015

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

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

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

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

Druhá skupina zadání projektů do předmětu Algoritmy II, letní semestr 2014/2015

Programování v jazyce C a C++

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

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

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

Abstraktní třída a rozhraní

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

typová konverze typová inference

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

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.

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

OOT Objektově orientované technologie

Nepravidlové a hybridní znalostní systémy

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

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

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

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

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

UML - opakování I N G. M A R T I N M O L H A N E C, C S C. Y 1 3 A N W

Principy objektově orientovaného programování

10 Generické implementace

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

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

1. Programování proti rozhraní

Programování v jazyce JavaScript

Programování v C++ VI

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

Programujeme v softwaru Statistica

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

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

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

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

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

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

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.

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

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

KMI / TMA Tvorba mobilních aplikací. 9. seminář ZS 2016/2017 Středa 13:15-15:45

Diagramy stavů. Michale Blaha, James Rumbaugh: Object-Oriented Modeling and Design with UML, Second Edition, Pearson Prentice Hall, 2005

Úvod do programovacích jazyků (Java)

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

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

16. února 2015, Brno Připravil: David Procházka. Konstruktory a destruktory

Cvičení z programování v C++ ZS 2016/2017 Přemysl Čech

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

Výčtový typ strana 67

PB161 Základy OOP. Tomáš Brukner

UČEBNÍ OSNOVA OBČANSKÁ VÝCHOVA

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

Jazyk C# (seminář 6)

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

EXTRAKT z české technické normy

3 Rozvahové změny ovlivňující výsledek hospodaření

UML. Unified Modeling Language. Součásti UML

7.5 Diagram tříd pokročilé techniky

Teoretické minimum z PJV

Transkript:

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

Osnova přednášky Co řeší dědičnost? Příklad. Dědičnost základní princip.

Co řeší dědičnost?

Co se řeší? Znovu-použitelnost Nechceme znovu opisovat (kopírovat) kód, který jsme už jednou napsali a odladili. Rozšiřitelnost Chceme rozšířit (pozměnit) kód, který jsme už

Role třídy? Znovu-použitelnost a rozšiřitelnost v kontextu použití tříd můžeme chápat jako: Kombinování s jinými třídami, skládání Rozšíření o nové chování Pozměnění existujícího chování

Skládání x dědičnost Skládáním docílíme toho, že objekt jedné třídy je složen z objektů jiné třídy. Jedná se o vztah MÁ. Dědičností docílíme toho, že nová třída je rozšířením nebo speciálním případem existující třídy (nebo více tříd). Jedná se o vztah JE.

Příklad

Co je na třídě Account špatně? Účet s partnerem je rozšířením účtu bez partnera. Účet s partnerem JE účet Můžeme využít dědičnost. Jak?

Deklarace předka

Deklarace potomka

Implementace konstruktorů Potomek PartnerAccount použije pro inicializaci členských položek konstruktor rodiče Account, kterému předá potřebné inicializační hodnoty.

Použití (zastupitelnost)

Banka s účty dvou typů

Mělo by fungovat? A proč?

Dědičnost základní princip

Terminologie Předek potomek, přímý předek potomek Rodič dcera (syn) Nadřazená (super, bázová) třída pod (sub) třída

Vztahy v dědičnosti A A je bázová třída třídy B, A je rodič B, A je předek C B C B je bázová třída třídy C, třída B dědí z třídy A, B je rodič C C dědí z B a A, C je dceřiná třída třídy B, C je potomek A a přímý potomek B.

Příklady Auto osobní auto Strom listnatý strom Kolekce seznam, množina

Špatně? Auto - Škoda Škoda je ZNAČKA osobního auta. Strom smrk Smrk je DRUH jehličnatého stromu.

Generalizace - specializace Nezaměňovat vztah je instancí a dědí z. je instancí je vztah mezi třídou a objektem dědí z je vztah mezi třídami. Vztah dědičnosti definuje vztah OBECNÝ SPECIÁLNÍ Potomek by tedy měl reprezentovat speciální případ předka a předek by měl reprezentovat zobecnění svých potomků.

Jinak řečeno Předek definuje společné chování všech svých potomků. Potomci mohou toto chování rozšířit či pozměnit. Potomci se nemohou tohoto chování zbavit. A tedy: Dědí se vše bez výjimky!!! Dědí se i míra skrývaní informace

Vztah skládání a dědičnosti Skládání MÁ x dědičnost JE Nicméně: Dědičnost můžeme chápat jako důsledek skládání Instance třídy potomka obsahuje vše, co má instance třídy předka.

Hierarchie Při použití dědičnosti vznikají hierarchie tříd. V našem případě pracujeme s jednoduchou dědičností. Každý potomek má právě jednoho předka. Předek může mít více potomků. V případě jednoduché dědičnosti je touto hierarchií strom.

Liskové substituční princip Barbara Liskov 1987. Data abstraction and hierarchy. Bertrand Meyer invarianty chování. Potomek může vždy zastoupit předka a to proto, že mají společné chování Opačně to neplatí

Vznik potomka 1. Volání konstruktoru objektu. 2. Volání konstruktoru předka. 3. Vykonání konstruktoru předka. 4. Vykonání konstruktoru objektu.

Úkoly na cvičení Implementuje příklad z přednášky a vytvořte banku s mnoha klienty a účty. Zaměřte se na pochopení principu zastupitelnosti a na to, jak fungují konstruktory v dědičnosti. Navrhněte a implementujte další jednoduché příklady dědičnosti s rozšířením společného stavu a chování, jako například Auto, Osobní auto, Nákladní auto.

Kontrolní otázky Které dva klíčové požadavky řešíme pomocí dědičnosti? Jaké návrhové požadavky máme na použití tříd (co s nimi můžeme dělat)? Jaký je rozdíl mezi dědičností a skládáním? Co mají společného? V jakých rolích vystupují třídy v dědičnosti? Použijte správnou terminologii. Vysvětlete v jakém obecném vztahu je třída, ze které se dědí, se třídou, která dědí. Co všechno se dědí a co ne? Co rozumíme jednoduchou dědičností a jak s tím souvisí hierarchie tříd v dědičnosti? Co je Liskové substituční princip a jak se projevuje v dědičnosti? V jakém pořadí se volají a vykonávají konstruktory při použití dědičnosti?

Ke studiu Bertrand Meyer. Object-Oriented Software Construction. Prentice Hall 1997. [459-467]