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

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

Více o konstruktorech a destruktorech

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

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

Konstruktory a destruktory

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

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

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

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

Programování v C++ VI

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

Generické programování

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

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

8 Třídy, objekty, metody, předávání argumentů metod

Mělká a hluboká kopie

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

konstruktory a destruktory (o)

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

Jazyk C++ I. Šablony 2

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

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

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

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

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

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

Virtuální metody - polymorfizmus

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

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

Principy objektově orientovaného programování

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

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

Základy objektové orientace I. Únor 2010

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Funkční objekty v C++.

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Šablony, kontejnery a iterátory

Dědění, polymorfismus

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

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

Přetěžování operátorů

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

Jazyk C++ I. Polymorfismus

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

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Programování v jazyce C a C++

Objektové programování

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

Objektově orientované programování v jazyce Python

20. Projekt Domácí mediotéka

Dynamická identifikace typů 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

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

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

C++ objektově orientovaná nadstavba programovacího jazyka C

Programování v Javě I. Leden 2008

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

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

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

Seminář Java II p.1/43

Algoritmizace a programování. Terminálový vstup a výstup

Martin Flusser. December 15, 2016

Objektově orientované programování v jazyce Python

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

Objektov orientované programování. C++ Akademie SH. 7. Objektov orientované programování. Michal Kvasni ka. Za áte níci C++ 2.

Zpracoval:

Programování II. Polymorfismus

Programování v Javě I. Únor 2009

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

Teoretické minimum z PJV

Programování v jazyce C a C++

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

Šablony, kontejnery a iterátory

1. Programování proti rozhraní

, Brno Připravil: David Procházka Návrhové vzory

Připravil: David Procházka. Programovací jazyk C++

Dědičnost (inheritance)

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

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

přetížení operátorů (o)

Objekty a třídy. Procedurální a objektově orientované programování. V této kapitole se naučíte: Procedurální a objektově orientované programování

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

SYSTÉMOVÉ PROGRAMOVÁNÍ Cvičení č.1

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.

Programování v jazyce JavaScript

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Abstraktní třídy, polymorfní struktury

7. Datové typy v Javě

přetížení operátorů (o)

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

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

Projekt Obrázek strana 135

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

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0;

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

PROGRAMOVÁNÍ V C++ CVIČENÍ

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.

1. Dědičnost a polymorfismus

Objektově orientované programování. Úvod

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

Transkript:

16. února 2015, Brno Připravil: David Procházka Konstruktory a destruktory Základy objektového návrhu

Jak navrhovat použitelné třídy Strana 2 / 26 Obsah přednášky 1 Jak navrhovat použitelné třídy 2 Jak dosáhnout automatizace 3 Příklady na práci s konstruktorem 4 Destruktor 5 Shrnutí

Jak navrhovat použitelné třídy Strana 3 / 26 Skrytí a automatizace Černá skříňka Musíme se snažit, aby byly procesy uvnitř tříd co nejvíce automatizované a z pohledu uživatele skryté.

Jak navrhovat použitelné třídy Strana 4 / 26 Automatizace: žádné uživatel musí Pokud vytvoříte třídu, musí být její instance použitelná ihned po vytvoření. Není možné uvažovat, že uživatel ví, že musí nejdříve provést nastavit určité atributy nebo zavolat určité metody.

Jak dosáhnout automatizace Strana 5 / 26 Obsah přednášky 1 Jak navrhovat použitelné třídy 2 Jak dosáhnout automatizace 3 Příklady na práci s konstruktorem 4 Destruktor 5 Shrnutí

Jak dosáhnout automatizace Strana 6 / 26 Konstruktor Speciální metoda, která se zavolá vždy automaticky po vytvoření objektu. Konstruktor je bud implicitní (prázdný, dosazený překladačem) nebo ručně definovaný (programátorem). Pokud tedy žádný nenadefinujete, volá se automaticky prázdný konstruktor. Konstruktor může mít parametry, ale nikdy nevrací žádnou hodnotu. Konstruktor se vždy jmenuje stejně jako třída.

Jak dosáhnout automatizace Strana 7 / 26 Význam konstruktoru Inicializace atributů objektu, vynucení zadání růných nezbytných informací, vytvoření dynamických součástí objektu,...

Příklady na práci s konstruktorem Strana 8 / 26 Obsah přednášky 1 Jak navrhovat použitelné třídy 2 Jak dosáhnout automatizace 3 Příklady na práci s konstruktorem 4 Destruktor 5 Shrnutí

Příklady na práci s konstruktorem Strana 9 / 26 Příklad bez konstruktoru Příklad Postava Mějme hru, kde jsou postavy. Každá postava má vlastnosti zdraví, počet zlat áků a váhu nákladu. Každá nová postava má na začátku 100 % zdraví, 0 zlat áků a váha nákladu co nese je 0 kg. (Samozřejmě bude mít i různé metody, ale to ted pomiňme.) Postava + zdravi : float + pocetzlataku : int + vahanakladu : float + setzdravi(zdravi : float):void + getzdravi() : float +...

Příklady na práci s konstruktorem Strana 10 / 26 Příklad bez konstruktoru: kód 1 class Postava { 2 public : 3 float m_zdravi ; 4 float m_vahanakladu ; 5 int m_pocetzlataku ; 6 }; 7 8 int main (){ 9 Postava * karel = new Postava ; 10 // nezapomen na inicializaci!!! 11 karel - > m_ zdravi = 100. 0; 12 // karel -> setzdravi (100.0); // lepe 13...

Příklady na práci s konstruktorem Strana 11 / 26 Řešení s bezparametrickým konstruktorem: kód 1 class Postava { 2 public : 3 float m_zdravi ; 4 foat m_vahanakladu ; 5 int m_pocetzlataku ; 6 7 Postava (){ 8 m_ zdravi = 100. 0 f; // to.0 f neni potreba 9 m_vahanakladu = 0.0 f; 10 m_pocetzlataku = 0; 11 } 12 }; 13 int main (){ 14 Postava * karel = new Postava ;

Příklady na práci s konstruktorem Strana 12 / 26 Řešení s bezparametrickým konstruktorem: model Postava + zdravi : float + pocetzlataku : int + vahanakladu : float + Postava() + setzdravi(zdravi : float):void + getzdravi() : float +...

Příklady na práci s konstruktorem Strana 13 / 26 Parametrický konstruktor Co kdyby zadání znělo: Při vytvoření postavy musí být vždy zvolen počet zlat áků, které postava dostane? V takovém případě použijeme parametrický konstruktor. Parametrický konstruktor slouží k vynucení zadání povinných hodnot při vytváření objektu. Každá třída může mít více parametrických konstruktorů. Musí se ale lišit počtem nebo typem parametrů.

Příklady na práci s konstruktorem Strana 14 / 26 Řešení s parametrickým konst.: model Postava + zdravi : float + pocetzlataku : int + vahanakladu : float + Postava(pocetZlataku : int) + setzdravi(zdravi : float) : void + getzdravi() : float +...

Příklady na práci s konstruktorem Strana 15 / 26 Řešení s parametrickým konst.: kód 1 class Postava { 2 public : 3 float m_zdravi ; 4 float m_vahanakladu ; 5 int m_pocetzlataku ; 6 7 Postava ( int pocetzlataku ){ 8 m_ zdravi = 100. 0 f; 9 m_vahanakladu = 0.0 f; 10 m_pocetzlataku = pocetzlataku ; 11 } 12 }; 13 int main (){ 14 Postava * karel = new Postava ( 50); // ma 50 zl. 15...

Příklady na práci s konstruktorem Strana 16 / 26 Časté chyby 1 class Postava { 2 public : 3 float zdravipostavy ; 4 int vahanakladu ; 5 int pocetzlataku ; 6 7 Postava ( float zdravi, int zlataky ){ 8 zdravi = zdravipostavy ; 9 int pocetzlataku = zlataky ; 10 } 11... 12 }; Dodržujte konvence pojmenování! Tyto chyby uvidíte okamžitě...

Příklady na práci s konstruktorem Strana 17 / 26 Kombinace více konstruktorů: model Znovu upravíme zadání hry: Uživatel si může vybrat, zda použije implicitní počet zlat áků (0) a nebo definuje vlastní množství. Postava + zdravi : float + pocetzlataku : int + vahanakladu : float + Postava() + Postava(pocetZlataku : int) + setzdravi(zdravi : float) : void + getzdravi() : float +...

Příklady na práci s konstruktorem Strana 18 / 26 Kombinace více konstruktorů: volání v kódu 1 int main (){ 2 // nyni volame bezparametricky konstruktor 3 Postava * karel = new Postava ; 4 5 // nyni opet volame bezparametricky konst. 6 Postava * pepa = new Postava (); 7 8 // nyni volame parametricky konstruktor 9 Postava * jana = new Postava (1001); 10... 11 }

Příklady na práci s konstruktorem Strana 19 / 26 Kombinace více konstruktorů: další příklady Co lze kombinovat... + zdravi : float + pocetzlataku : int + vahanakladu : float Postava + Postava() + Postava(pocetZlataku:int) + Postava(zdravi:float) + Postava(pocetZlataku:int, zdravi:float) + Postava(vahaNakladu:float, pocetzlataku:int) + Postava(vahaNakladu:float, pocetzlataku:int, zdravi:float) + setzdravi(zdravi:float) : void + getzdravi():float +...

Příklady na práci s konstruktorem Strana 20 / 26 Kombinace více konstruktorů: další příklady Co nelze kombinovat... + zdravi : float + pocetzlataku : int + vahanakladu : float Postava + Postava() + Postava(vahaNakladu:float) + Postava(zdravi:float) + Postava(zdravi:float, pocetzlataku:int) + Postava(vahaNakladu:float, pocetzlataku:int) + Postava(vahaNakladu:float, pocetzlataku:int, zdravi:float) + Postava(zdravi:float, pocetzlataku:int, vahanakladu:float) +...

Destruktor Strana 21 / 26 Obsah přednášky 1 Jak navrhovat použitelné třídy 2 Jak dosáhnout automatizace 3 Příklady na práci s konstruktorem 4 Destruktor 5 Shrnutí

Destruktor Strana 22 / 26 Destruktor Je protikladem konstruktoru. Je volán při smazání objektu (v našem případě obvykle delete). Nesmí mít parametry ani návratovou hodnotu. Slouží obvykle pro uvolňování paměti a rušení závislých objektů. 1 Postava + zdravi : float + Postava() + Postava() +... 1 Prozatim pro nás nebude mít reálně význam. Musíme si počkat na vazby a složité objekty.

Destruktor Strana 23 / 26 Příklad triviálního destruktoru: implementace 1 class Postava { 2 public : 3 Postava (){ 4 cout << " Nazdar, prave jsem vznikl " << endl ; 5 } 6 ~ Postava (){ 7 cout << " Sbohem, skoncil jsem " << endl ; 8 } 9 }; 10 int main ( void ){ 11 Postava * karel = new Postava ;// vola se kon. 12... 13 delete karel ; // vola se des. 14...

Shrnutí Strana 24 / 26 Obsah přednášky 1 Jak navrhovat použitelné třídy 2 Jak dosáhnout automatizace 3 Příklady na práci s konstruktorem 4 Destruktor 5 Shrnutí

Shrnutí Strana 25 / 26 Shrnutí Konstruktor se volá automaticky při vzniku objektu. Slouží k jeho inicializaci. Prakticky každá běžná třída musí mít konstruktor. Při kombinování parametrických konstruktorů dávejte pozor na to, aby se lišily počtem nebo typem parametrů. Destruktor se volá při smazání objektu, ale zatím jej nepotřebujeme.

Shrnutí Strana 26 / 26 Příklady k procvičení Příklad UIS Vytvořte třídy pro informační systém školy. Systém eviduje studenty. Každý student musí mít zadáno jméno a rodné číslo. Nemůže existovat student bez těchto údajů. Dále student může mít zadánu od počátku adresu bydliště. Tu lze ale doplnit i později. Vytvořte metodu umožňující vypsání všech informací o studentovi na obrazovku a metodu umožňující nastavit/změnit bydliště. Příklad Autobazar Mějme evidenci aut v bazaru. U každého auta by měla být evidována SPZ, počet najetých km a předchozí majitel. Při vytváření auta můžeme znát (nebo neznat) kteroukoliv z těchto informací.