Programování II. Návrh programu II



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

Programování II. Polymorfismus

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

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

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

Dědění, polymorfismus

Generické programování

1. Dědičnost a polymorfismus

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

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

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

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

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

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

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

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

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

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

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

Abstraktní třída a rozhraní

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

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.

7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ

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

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

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

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

Objektové programování

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.

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

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

Objekty, třídy, vazby 2006 UOMO 30

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

Základy objektové orientace I. Únor 2010

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.

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

Programování v C++ VI

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

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

PB161 Základy OOP. Tomáš Brukner

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

Virtuální metody - polymorfizmus

typová konverze typová inference

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

Návrhové vzory OMO, LS 2014/2015

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

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

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

Jazyk C# (seminář 3)

9. Polymorfismus a rozhraní

Programování a implementace Microsoft SQL Server 2014 databází

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

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

Abstract Factory úvod

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

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

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

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.

Dědičnost (inheritance)

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

DATABÁZOVÉ SYSTÉMY. Metodický list č. 1

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

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

Jazyk C++ I. Polymorfismus

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25

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

Programování II. Modularita 2017/18

Objektově orientované databáze. Miroslav Beneš

Sada 1 - Základy programování

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

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

7.3 Diagramy tříd - základy

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

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

Klíčová slova: OOP, konstruktor, destruktor, třída, objekt, atribut, metoda

Abstraktní třídy, polymorfní struktury

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

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

Seminář Java IV p.1/38

7.3 Diagramy tříd - základy

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Delphi - objektově orientované

Diagramy tříd - základy

Databázové patterny. RNDr. Ondřej Zýka

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2008 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 24

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

Úvod. Boj se zavlečeným impedančním nesouladem na úrovni databáze

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

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

Smysl metodiky IS/IT. Koncentrovaná zkušenost Checklist na nic nezapomeneme

Dědičnost, rozhraní (interface)

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

Diagram tříd (class diagram)

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

C# - OOP (object oriented programming)

Programovací techniky

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

Transkript:

Programování II Návrh programu II

Osnova přednášky Dědičnost shrnutí. Návrh programu s využitím dědičnosti

Dědičnost shrnutí

Klíčové otázky CO je dědičnost? PROČ použít dědičnost? KDY použít dědičnost? JAK správně použít dědičnost?

CO je dědičnost? Koncept, který poskytuje substituční princip. Popis skupiny entit se společným chováním na základě vztahu generalizace - specializace. Efektivní rozšíření a změna existujícího (otestovaného) kódu.

PROČ použít dědičnost? Bez dědičnosti by se některé úlohy řešily obtížně zejména v případě, kdy potřebujeme zastoupit předka potomkem, který má specifické chování. Objekt pak hraje v různých kontextech různě specializované role.

KDY použít dědičnost? Potřebujeme polymorfní přiřazení. Potřebujeme objekty organizovat v polymorfních datových strukturách. Potřebujeme pracovat s podobnými entitami (které mají společné chování). Prostě potřebujeme polymorfismus.

JAK použít dědičnost? Opatrně!!! Pokud možno, jen jednoduchou dědičnost. Vícenásobnou dědičnost jen jako interface (čistě abstraktní třídy). Preferovat rozšíření před změnou. Rozšíření by mělo využívat polymorfismus (pozdní vazba). Změnu používat s ohledem na zachování zapouzdření. Tedy minimalizovat využití detaily implementace předka (protected).

Návrh programu s využitím dědičnosti

Návrh programu s dědičností V konkrétním případě zvážit, kdy použít skládání a kdy dědičnost. Někdy lze použít obě alternativy. Navrhnout dědičnou hierarchii tříd. Navrhnout, kde je potřeba pracovat s polymorfními datovými strukturami (a jak). Zvážit použití vícenásobné dědičnosti.

Zadání Stavíme objektový základ elektronického obchodu specializovaného na počítače a mobilní zařízení (telefony, tablety, notebooky, ). Nakupovat mohou registrovaní uživatelé a firmy, ale také jednorázově osoby bez registrace. Produkty se vybírají z katalogu. Detaily produktu z katalogu je možno získat v textové podobě. Objednávka obsahuje produkty a počet kusů. Objednávku lze souhrnně získat v textové podobě ve formě informací o zákazníkovi a seznamu položek s cenou a počtem kusů.

Identifikace tříd Stavíme objektový základ elektronického obchodu specializovaného na počítače a mobilní zařízení (telefony, tablety, notebooky, ). Nakupovat mohou registrovaní uživatelé a firmy, ale také jednorázově osoby bez registrace. Produkty se vybírají z katalogu. Detaily produktu z katalogu je možno získat v textové podobě. Objednávka obsahuje produkty a počet kusů. Objednávku lze souhrnně získat v textové podobě ve formě informací o zákazníkovi a seznamu položek s cenou a počtem kusů.

Koncept objektového návrhu Hlavními entitami jsou Zákazník, Produkt, Katalog produktů, Objednávka, Položka objednávky. Některé entity mají své speciální případy. Některé entity vyžadují použití struktur (pro společné uchování entit podobného typu).

Speciální případy Produkt Notebook Mobilní telefon Tablet Zákazník Registrovaný x neregistrovaný Uživatel x firma

Struktury Katalog produktů Produkty v katalogu jsou různého typu Objednávka s jednotlivými položkami Položky objednávky jsou stejného typu

Jak skládat objekty? Katalog MÁ produkty. Objednávka MÁ zákazníka a položky objednávky. Nebo zákazník má objednávku? Položka objednávky MÁ produkt.

Objednávka Customer 1 * Order OrderItem 1 * * 1 Catalog Product 1 *

Jak na speciální případy? Mobilní telefon, počítač, tablet JE produkt. Registrovaný i neregistrovaný uživatel JE zákazník. Uživatel i firma JSOU zákazníci.

Produkty AbstractProduct MobilePhone Notebook Tablet

Zákazníci AbstractCustomer AbstractRegisteredCustomer UnregisteredUser CompanyUser RegisteredUser

Polymorfní přiřazení a struktury Katalog? Tři různé nepolymorfní katalogy pro různé produkty Proč? Můžeme přetypovat? Objednávka může mít různé zákazníky. Položka objednávky může mít různý produkt.

Výstup do textu Stavíme objektový základ elektronického obchodu specializovaného na počítače a mobilní zařízení (telefony, tablety, notebooky, ). Nakupovat mohou registrovaní uživatelé a firmy, ale také jednorázově osoby bez registrace. Produkty se vybírají z katalogu. Detaily produktu z katalogu je možno získat v textové podobě. Objednávka obsahuje produkty a počet kusů. Objednávku lze souhrnně získat v textové podobě ve formě informací o zákazníkovi a seznamu položek s cenou a počtem kusů.

Jak s textovým výstupem? Produkt se musí dát vypsat na objednávku. Zákazník se musí dát vypsat na objednávku. Jak to udělat? Objednávka neví jakého typu je zákazník. Položka objednávky neví, jakého typu je produkt.

Jaké máme možnosti? Každá třída může mít metodu ToString. Má umět objekt poskytovat data ve formě souhrnného textu? Můžeme připravit abstraktní třídu AbstractStringOutput s čistě virtuální metodou ToString. Každá třída, která potřebuje poskytovat data ve formě textu, z ní může dědit. Můžeme použít jak jednoduchou, tak vícenásobnou dědičnost.

Společný předek AbstractStringOutput AbstractCustomer AbstractProduct

Použití AbstractCustomer * c; AbstractStringOutput * o; CompanyUser * u = new CompanyUser( ); o = u; o->???; c = u; c->???;

Je to správně? Je AbstractCustomer a AbstractProduct speciálním případem AbstractStringOutput? Spíše ne. A kdo je tedy speciálním případem AbstractStringOutput? Konkrétní třídy

AbstractCustomer AbstractRegisteredCustomer UnregisteredUser CompanyUser RegisteredUser AbstractStringOutput MobilePhone Notebook Tablet AbstractProduct

V čem je rozdíl? AbstractCustomer * c; AbstractStringOutput * o; CompanyUser * u = new CompanyUser( ); o = u; o->???; c = u; c->???;

Abstraktní třída x Interface Interface je koncept, který v C++ chybí. Dědičnost dědí se chování Interface implementuje se chování Můžeme použít čistě abstraktní třídu (nemá implementaci). Použitím interface třída nic nedědí, pouze dostává předpis, co musí implementovat.

V čem je rozdíl? Abstraktní třída v C++ má vždy implementaci (alespoň konstruktor a destruktor). Interface nemá žádnou implementaci. V C++ se tedy vždy jedná o dědičnost, ale využitím čistě abstraktních tříd dosáhneme stejného efektu jako použitím interface. Doporučení interface by měla implementovat konkrétní třída (a každá po svém).