Dědění, polymorfismus
|
|
- Richard Novák
- před 9 lety
- Počet zobrazení:
Transkript
1 Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad
2 Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby.
3 Minulá přednáška Přetěžování operátorů funkcemi. Přetěžování operátorů metodami. Operátor =. Friend funkce.
4 Dědění - příklad Modelujeme zaměstnance a vedoucí: mají jméno, hodinovou mzdu, o vedoucích navíc ještě známe počet podřízených. Chceme rozhraní, které umožní výpočet měsíční mzdy, známe-li počet odpracovaných hodin v měsíci: pro zaměstnance je to prostý součin s hodinovou mzdou, vedoucímu navíc přísluší měsíční příplatek za vedení ve výši 500,- Kč za řízeného zaměstnace.
5 Dědění - příklad Zavedeme třídy CEmployee a CBoss. Třída CBoss má mnoho společných vlastností se třídou CEmployee bude jejím potomkem. Ve třídě CEmployee budou členské proměnné name a salary. Ve třídě CBoss bude navíc ještě členská proměnná subordnr udávající počet podřízených. Metody pro výpočet platu budou pro každou třídu jiné, ale budou mít stejnou signaturu. Metoda třídy CBoss může využít metodu předka CEmployee jako krok ve výpočtu.
6 Dědění - příklad class CEmployee { string name; int salary; public: CEmployee ( string _name, int _salary ) : name (_name), salary (_salary) {} int MonthSalary ( int Hours ) const { return salary * Hours; } };
7 Dědění - příklad class CBoss : public CEmployee { int subordnr; public: CBoss ( string _name, int _salary, int _subord ): CEmployee ( _name, _salary ), subordnr ( _subord ) { } int MonthSalary ( int Hours ) const { return CEmployee::MonthSalary ( Hours ) + subordnr * 500; } }; CEmployee x ( "Novotny", 100 ); CBoss y ( "Novak", 200, 2 ); cout << x. MonthSalary ( 170 ); cout << y. MonthSalary ( 170 );
8 Vztah mezi třídami: Dědění členské proměnné a metody definované v předku mohou být použity i potomkem, potomek může přidat nové členské proměnné a metody, potomek může změnit definice metod předka. Má význam tehdy, pokud se struktura předka a potomka liší jen málo. V C++ lze dědit vícenásobně (z více předků). V C++ neexistují rozhraní (interfaces) z Javy.
9 Dědění Vždy musí platit vztah is-a. Jedná se o specializaci nadtypu. V našem příkladu je Cboss specializací typu CEmployee. Liší se například výpočtem mzdy. Dědění je třeba vždy promyslet do všech důsledků (pozor na porušení Liskov's Substitution Principle). Výsledek by měl vždy co nejlépe odrážet modelovanou skutečnost.
10 Dědění vs. Skládání Rozdíl mezi vztahem is-a a has-a. Skládání je: členské proměnné, které objekt využívá, členské proměnné proměnných (pozor na Demeterovo pravidlo)... CEmployee má (has-a) name. CBoss je typem Cemployee. Podrobněji viz OMO
11 Polymorfismus Situace, kde různé objekty: rozumí stejné zprávě (mají metodu se stejnou signaturou), ale na zprávu reagují různě (vyvoláním jiného kódu). Aby měl polymorfismus praktický význam, musí mít provedený kód stejný význam (v kontextu daného objektu). V C++, Javě omezen - polymorfismus existuje jen mezi objekty, jejichž třídy jsou ve vztahu předek/potomek. Znáte jazyk kde to funguje jinak?
12 Dědění Syntaxe zápisu předek je oddělen dvojtečkou. Dědění public viditelnost zděděných metod se nemění. Dědení private zděděné metody a členské proměnné budou všechny private (zachová dědění, potlačí polymorfismus). class CEmployee { }; class CBoss : public CEmployee { };
13 Zapouzdření: Dědění private viditelné pouze pro danou třídu. protected viditelné pro danou třídu a všechny její potomky, public viditelné pro všechny. Viditelnost protected rozumný kompromis, pokud navrhujeme předka a nevíme, kdo z něj bude dědit. Vyhněte se bezmyšlenkovité záplavě metod typu getter/setter pro každou členskou proměnnou: samotné gettry/settry nic nedělají, jen stojí režii, existují-li pro každou členskou proměnnou, jsou vlastně popřením zapouzdření.
14 Dědění Při vytváření instance se volají postupně všechny konstruktory směrem od předků k potomkům. Není-li určeno, který konstruktor předka se volá, bude zvolen implicitní konstruktor. Neexistuje-li v takové situaci implicitní konstruktor předka, dojde k chybě při překladu. Pravidla volby konstruktoru jsou stejná jako v případě staticky alokovaných členských proměnných.
15 Dědění class CBoss : public CEmployee { CBoss ( string _name, int _salary, int _subord ) { name = _name; } //!! chyba CBoss ( const CBoss & x ) { } //!! chyba }; class CBoss : public CEmployee { CBoss ( string _name, int _salary, int _subord ): CEmployee ( _name, _salary ), subordnr ( _subord ) { } CBoss ( const CBoss & x ) : CEmployee ( x ) { } };
16 Dědění Při uvolňování instance se volají postupně všechny destruktory od potomků směrem k předkům. Protože destruktor je pouze jeden, nemůže dojít k nejednoznačnostem. class A { A ( int x ) { cout << "A::A"; } A ( const A & ) { cout << "A::cA"; } ~A ( void ) { cout << "A::~A"; } }; class B : public A { B ( int x ) : A ( x ) { cout << "B::B"; } B ( const B & x ) : A ( x ) { cout << "B::cB"; } ~B ( void ) { cout << "B::~B"; } };
17 Dědění void foo1 ( A param ) {... } void foo2 ( A & param ) {... } void foo3 ( A * param ) {... } void foo ( void ) { A a(10); // A::A B b(20); // A::A, B::B foo1 ( a ); // A::cA, A::~A foo2 ( a ); // nic foo3 ( &a ); // nic foo1 ( b ); // A::cA, A::~A foo2 ( b ); // nic foo3 ( &b ); // nic } // B::~B, A::~A, A::~A
18 Dědění Překrytí metody v potomkovi je definovaná metoda se stejnou signaturou, ale jiným tělem. Metodu předka lze volat s použitím čtyřtečkové notace. class CEmployee { int MonthSalary ( int Hours ) const { } }; class CBoss : public CEmployee { int MonthSalary ( int Hours ) const { return CEmployee::MonthSalary ( Hours ) + subordnr * 500; } };
19 Dědění Kompatibilita vzhledem k přiřazení: instanci potomka lze použít na místě typově odpovídajícím předku, instanci předka nelze použít na místě typově odpovídajícím potomku. class CEmployee { }; class CBoss : public CEmployee { }; CEmployee a, * aptr; CBoss b, * bptr; a = b; // ok aptr = bptr; // ok CEmployee & aref = b; // ok b = a; //!!! bptr = aptr; //!!! CBoss & bref = a; //!!!
20 Dědění a polymorfismus Objekty CBoss i CEmployee rozumí zprávě MonthSalary: výpočet platu probíhá v obou třídách jinak, na vyšší úrovni umožní pracovat s výpočtem platu, bez nutnosti starat se o implementační detaily. Snazší údržba výpočet platu je na jednom místě programu. Snazší rozšiřitelnost nová třída (např. CManager s ještě jinými pravidly výpočtu platu) nenutí přepisovat zbytek programu.
21 CEmployee * dept [3]; int i; Dědění a polymorfismus dept[0] = new CBoss ( "Novak", 200, 2 ); dept[1] = new CEmployee ( "Novotny", 100 ); dept[2] = new CEmployee ( "Novotna", 100 ); for ( i = 0; i < 3; i ++ ) cout << i << ". " << dept[i] -> MonthSalary ( 170 ); for ( i = 0; i < 3; i ++ ) delete dept[i]; //!! ma byt
22 Statická vazba: Dědění a polymorfismus volaná metoda je určená v době kompilace, rozhoduje datový typ proměnné, kterou je instance zpřístupněna, volání metody je trochu rychlejší. Dynamická vazba: volaná metoda se určí v době běhu, rozhoduje datový typ instance, se kterou se pracuje, volání je trochu pomalejší. C++ umí obě vazby, výchozí je statická. Dynamická vazba se vynutí klíčovým slovem virtual před deklarací metody. Jakou vazbu umí Java?
23 Dědění a polymorfismus class CEmployee { virtual int MonthSalary ( int Hours ) const { } }; class CBoss : public CEmployee { virtual int MonthSalary ( int Hours ) const { } // zde jiz virtual byt nemusi, bude zdedeno // je ale vhodne (lepsi citelnost) };
24 CEmployee * dept [3]; int i; Dědění a polymorfismus dept[0] = new CBoss ( "Novak", 200, 2 ); dept[1] = new CEmployee ( "Novotny", 100 ); dept[2] = new CEmployee ( "Novotna", 100 ); for ( i = 0; i < 3; i ++ ) cout << i << ". " << dept[i] -> MonthSalary ( 170 ); for ( i = 0; i < 3; i ++ ) delete dept[i]; // OK
25 Dědění a polymorfismus Dynamická vazba se uplatní: metoda je označena virtual, pracujeme s ní pomocí ukazatele nebo reference. CBoss a ( "Novak", 200, 2 ); cout << a. MonthSalary ( 170 ); // CEmployee b = a; cout << b. MonthSalary ( 170 ); // CEmployee * c = &a; cout << c -> MonthSalary ( 170 ); // CEmployee & d = a; cout << d. MonthSalary ( 170 ); // 35000
26 Dědění a polymorfismus class X { void foo () { } }; class Y : public X { void foo () { } }; X a, *aptr = &a, & aref = a; Y b, *bptr = &b, & bref = b; a. foo (); // X :: foo b. foo (); // Y :: foo a = b; a. foo (); // X :: foo aptr -> foo (); // X :: foo bptr -> foo (); // Y :: foo aptr = bptr; aptr -> foo (); // X :: foo aref. foo (); // X :: foo bref. foo (); // Y :: foo X & cref = b; cref. foo (); // X :: foo
27 Dědění a polymorfismus class X { virtual void foo () { } }; class Y : public X { virtual void foo () { } }; X a, *aptr = &a, & aref = a; Y b, *bptr = &b, & bref = b; a. foo (); // X :: foo b. foo (); // Y :: foo a = b; a. foo (); //!! X :: foo i přes virtual aptr -> foo (); // X :: foo bptr -> foo (); // Y :: foo aptr = bptr; aptr -> foo (); // Y :: foo aref. foo (); // X :: foo bref. foo (); // Y :: foo X & cref = b; cref. foo (); // Y :: foo
28 Dědění a polymorfismus Vnitřní realizace dynamické vazby: objekt obsahuje (typicky na prvním místě) odkaz na tabulku VMT (Virtual Method Table), Odkaz na VMT vyplněn v konstruktoru, pak se již nemění, do VMT jsou umístěny odkazy (ukazatele) na adresy metod, které jsou virtual, pozice metody ve VMT se zachovává při dědění. Volání virtual metody: podle názvu metody se určí pozice ve VMT, z VMT se vybere adresa, kam se předá řízení.
29 Dědění a polymorfismus CBoss a( ) VMT name salary subord CBoss - VMT MonthSalary Instrukce kódu metody CEmployee b( ), c ( ) VMT name salary VMT name salary CEmployee - VMT MonthSalary Instrukce kódu metody
30 Dědění a polymorfismus CBoss a( ) VMT name salary subord CBoss - VMT MonthSalary Instrukce kódu metody CEmployee b = a VMT name salary CEmployee - VMT MonthSalary Instrukce kódu metody
31 Dědění a polymorfismus CBoss a( ) VMT name salary subord CBoss - VMT MonthSalary Instrukce kódu metody CEmployee * b = & a
32 Dědění a polymorfismus CBoss a( ) VMT name salary subord!!! CBoss - VMT MonthSalary Instrukce kódu metody VMT name salary??? CEmployee b = a
33 Dědění a operátor << class CEmployee { friend ostream & operator << ( ostream & os, const CEmployee & x ); }; ostream & operator << ( ostream & os, const CEmployee & x ) { os << "Employee " << x. name; return os; } class CBoss : public CEmployee { friend ostream & operator << ( ostream & os, const CBoss & x ); }; ostream & operator << ( ostream & os, const CBoss & x ) { os << "Boss " << x. name; return os; }
34 CEmployee dept[3]; int i; Dědění a operátor << dept[0] = new CBoss ( "Novak", 200, 2 ); dept[1] = new CEmployee ( "Novotny", 100 ); dept[2] = new CEmployee ( "Novotna", 100 ); for ( i = 0; i < 3; i ++ ) cout << *dept[i]; for ( i = 0; i < 3; i ++ ) delete dept[i]; Employee Novak //!! Employee Novotny Employee Novotna
35 Dědění a operátor << Operátor výstupu se chová jako staticky vázaný: je přetížen funkcí, funkce nejsou dynamicky vázané. Řešení: přetížit jej metodou nelze (první operand musí být typu ostream), udělat virtuální funkci nelze (virtual friend je nesmysl), přidat pomocnou metodu print, přetížení operátoru pro potomky (zde pro třídu CBoss) je pak zbytečné.
36 Dědění a operátor << class CEmployee { friend ostream & operator << ( ostream & os, const CEmployee & x ); virtual void print (ostream & os ) const { os << "Employee " << name; } }; class CBoss : public CEmployee { friend ostream & operator << ( ostream & os, const CBoss & x ); virtual void print (ostream & os ) const { os << "Boss " << name; } }; ostream & operator << ( ostream & os, const CEmployee & x ) { x. print ( os ) return os; }
37 CEmployee dept[3]; int i; Dědění a operátor << dept[0] = new CBoss ( "Novak", 200, 2 ); dept[1] = new CEmployee ( "Novotny", 100 ); dept[2] = new CEmployee ( "Novotna", 100 ); for ( i = 0; i < 3; i ++ ) cout << *dept[i]; for ( i = 0; i < 3; i ++ ) delete dept[i]; Boss Novak Employee Novotny Employee Novotna // OK
38 Dotazy... Děkuji za pozornost.
Virtuální metody - polymorfizmus
- polymorfizmus - potomka lze použít v místě, kde je možné použít předka - v dosud probraných situacích byly vždy volány funkce, které jsou známy již v době překladu. V situaci, kdy v době překladu není
PB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
PB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
Programování II. Polymorfismus
Programování II Polymorfismus Osnova přednášky Vztah přetížení, překrytí a protected přístupu. Co je polymorfismus? Příklad. Přetížení, překrytí, protected Přetížení x překrytí Přetížením řešíme doplnění
Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března
Polymorfismus Cíle lekce Cílem lekce je vysvětlit význam pojmu polymorfismus jako základní vlastnosti objektově orientovaného programování. Lekce objasňuje vztah časné a pozdní vazby a jejich využití.
Generické programování
Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =
Programování v C++ 1, 6. cvičení
Programování v C++ 1, 6. cvičení dědičnost, polymorfismus 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
přetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního
IB111 Programování a algoritmizace. Objektově orientované programování (OOP)
IB111 Programování a algoritmizace Objektově orientované programování (OOP) OP a OOP Objekt Kombinuje data a funkce a poskytuje určité rozhraní. OP = objektové programování Vše musí být objekty Např. Smalltalk,
NMIN201 Objektově orientované programování 1 / :36:09
NMIN201 Objektově orientované programování 1 / 26 8.10.2013 15:36:09 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat
NPRG031 Programování II 1 / :25:46
NPRG031 Programování II 1 / 26 28. 2. 2018 11:25:46 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat jiné objekty
Základy objektové orientace I. Únor 2010
Seminář Java Základy objektové orientace I Radek Kočí Fakulta informačních technologií VUT Únor 2010 Radek Kočí Seminář Java Základy OO (1) 1/ 20 Téma přednášky Charakteristika objektově orientovaných
Programování v C++ 3, 3. cvičení
Programování v C++ 3, 3. cvičení úvod do objektově orientovaného programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Dokončení spojového
Dynamicky vázané metody. Pozdní vazba, virtuální metody
Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro
Programování v C++ 1, 5. cvičení
Programování v C++ 1, 5. cvičení konstruktory, nevirtuální dědění 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
Chování konstruktorů a destruktorů při dědění
Dědičnost V objektově orientovaném programování je dědičnost způsob, jak vytvořit novou třídu použitím již existujících definic jiných tříd. Takto vytvořené třídy přebírají vlastnosti a metody svého předka
přetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - operátor je speciální
Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března
Dědičnost Cíle lekce Cílem lekce je naučit se pracovat a využívat dědičnosti při návrhu a tvorbě programů. Lekce je zaměřena hlavně na jednoduchou dědičnost. Bude rovněž vysvětlen rozdíl mezi dědičností
PB161 Programování v jazyce C++ Přednáška 9
PB161 Programování v jazyce C++ Přednáška 9 Právo friend Přetěžování operátorů Nikola Beneš 16. listopadu 2015 PB161 přednáška 9: friend, přetěžování operátorů 16. listopadu 2015 1 / 30 Reklama PB173 Tematicky
11.5.2012. 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
Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií
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.
23. Třídy, generické třídy, instance, skládání, statické metody a proměnné. Zapouzdření, konstruktory, konzistence objektu, zpřístupnění vnitřní implementace, modifikátory public a private. Polymorfismus,
Návrhové vzory OMO, LS 2014/2015
Návrhové vzory OMO, LS 2014/2015 Motivace Cílem objektového návrhu je strukturu aplikace navrhnout tak, aby splňovala následující kritéria: snadná rozšiřitelnost účelnost testovatelnost dokumentovatelnost
PB161 Programování v jazyce C++ Přednáška 4
PB161 Programování v jazyce C++ Přednáška 4 Přetěžování funkcí Konstruktory a destruktory Nikola Beneš 9. října 2017 PB161 přednáška 4: přetěžování funkcí, konstruktory, destruktory 9. října 2017 1 / 20
24. listopadu 2013, Brno Připravil: David Procházka
24. listopadu 2013, Brno Připravil: David Procházka Dědičnost Základy objektového návrhu Časná a pozdní vazba Strana 2 / 22 Obsah přednášky 1 Časná a pozdní vazba 2 Rozhraní pro dědičnost 3 Konstruktory
PB161 Základy OOP. Tomáš Brukner
PB161 Základy OOP Tomáš Brukner Sylabus - Co je to OOP? Jaké jsou základní principy OOP? Jak se projevují v C++? https://cs.wikipedia.org/wiki/strahovská_knihovna SELECT * FROM books WHERE pages < 250
Více o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);
TŘÍDY POKRAČOVÁNÍ Události pokračování public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); class Bod private int x; private int y; public event ZmenaSouradnicEventHandler ZmenaSouradnic;
Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39
Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy
Jazyk C++ I. Polymorfismus
Jazyk C++ I Polymorfismus AR 2013/2014 Jazyk C++ I Operátory Co to vůbec jsou operátory? Na co je používáme? AR 2013/2014 Jazyk C++ I 2 Operátory Můžeme si upravit operátory pro vlastní objektové typy?
Programování v C++ 2, 4. cvičení
Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva
Programování v C++ VI
Programování v C++ VI Konstruktory, destruktory a dědičnost Konstruktory a dědičnost I když jsme se bavili o dědičnosti, trochu jsme zapomněli na konstruktory to se ale nevyplácí, vzpomeňte si, jak důležitý
Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.
Objekty v PHP 5.x This is an object-oriented system. If we change anything, the users object. Objektové PHP Objekty se poprvé objevili v PHP ve verzi 4. Nepříliš zdařilý pokus. Programátoři získali nedůvěru
Abstraktní třídy, polymorfní struktury
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství
Zpracoval: houzvjir@fel.cvut.cz
Zpracoval: houzvjir@fel.cvut.cz 10. Objektově orientované programování v C++. Přetěţování operátorů, generické funkce a třídy, výjimky, knihovny. (A7B36PJC) Obsah OOP v C++... 2 Pro připomenutí - Základní
Programování II. Dědičnost změna chování 2018/19
Programování II Dědičnost změna chování 2018/19 Osnova přednášky Rozšíření chování. Změna chování. Příklad. Rozšíření chování Když rozšiřujeme chování Můžeme bezpečně použít to, co už máme. Nehrozí žádný
typová konverze typová inference
Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie
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.
Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus
Jazyk C++ I. Polymorfismus
Jazyk C++ I Polymorfismus AR 2013/2014 Jazyk C++ I Úvod Metody s časnou vazbou jsou překládány jako obyčejné céčkovské funkce. Této metodě je předán jako první implicitní parametr this. Rozdíl mezi obyčejnou
Mělká a hluboká kopie
Karel Müller, Josef Vogel (ČVUT FIT) Mělká a hluboká kopie BI-PA2, 2011, Přednáška 5 1/28 Mělká a hluboká kopie Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem
Jazyk C++ 1 Blok 3 Objektové typy jazyka C++ Studijní cíl Ve třetím bloku bude představen a rozebrán nejdůležitější objektový typ jazyka C++ a to sice třída. Po absolvování bloku bude student schopen navrhovat
Programování II. Návrh programu I 2018/19
Programování II Návrh programu I 2018/19 Osnova přednášky Co víme? Objektový návrh programu. Příklad. Co víme? Třída Třída je popisem objektů se společnými vlastnostmi. class private:
Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15
Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové
PB161 Programování v jazyce C++ Přednáška 4
PB161 Programování v jazyce C++ Přednáška 4 Dynamická alokace Kopírovací konstruktor Přetypování v C++ Nikola Beneš 12. října 2015 PB161 přednáška 4: dynamická alokace, kopírovací konstruktor, casting
konstruktory a destruktory (o)
konstruktory a destruktory (o) - slouží k ovlivnění vzniku (inicializace) a zániku (úklid) objektu - základní myšlenkou je, že proměnná by měla být inicializována (nastavena do počátečního stavu) a zároveň
PREPROCESOR POKRAČOVÁNÍ
PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,
Objektové programování
Objektové programování - přináší nové možnosti a styl programování - vytváří nový datový typ, který umí vše co standardní datové typy + to co ho naučíme - překladač se k tomuto typu chová stejně jako k
20. Projekt Domácí mediotéka
Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý
Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz
Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Upozornění pro čtenáře a uživatele této knihy Všechna práva vyhrazena. Žádná část této tištěné či elektronické knihy nesmí být reprodukována a šířena
Dědičnost (inheritance)
Dědičnost (inheritance) Úvod Umožňuje objektům převzít (zdědit) členy jiných objektů a pouze je rozšířit o Auto: lze odvodit Vztah je osobní auto, cisterna jsou auta Základní pojmy Bázová třída (rodič)
14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.
Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání
PB161 Programování v jazyce C++ Přednáška 1
.. PB161 Programování v jazyce C++ Přednáška 1 Organizace Úvod do OOP v C++ Nikola Beneš 21. září 2015 PB161 přednáška 1: organizace, úvod do OOP v C++ 21. září 2015 1 / 39 Cíle předmětu 1. vysvětlit základy
C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19
C++ přetěžování funkcí a operátorů 1 Přetěžování funkcí jazyk C++ umožňuje napsat více funkcí se stejným názvem, těmto funkcím říkáme přetížené přetížené funkce se musí odlišovat typem nebo počtem parametrů,
1. Dědičnost a polymorfismus
1. Dědičnost a polymorfismus Cíl látky Cílem této kapitoly je představit klíčové pojmy dědičnosti a polymorfismu. Předtím však je nutné se seznámit se základními pojmy zobecnění neboli generalizace. Komentář
Jazyk C++ I. Šablony 2
Jazyk C++ I Šablony 2 AR 2013/2014 Jazyk C++ I Třídy template class TVektor { T *a; int n; static int PocInstanci; public: TVektor(int _n = 0) : n(_n) { a = new T[n]; PocInstanci++; } ~TVektor()
PŘETĚŽOVÁNÍ OPERÁTORŮ
PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako
Zpracoval: houzvjir@fel.cvut.cz
Zpracoval: houzvjir@fel.cvut.cz 9. Datový typ ukazatel, přetěžování funkcí, typ reference, vstup a výstup, třídy, staticky vázané metody, dědění, dynamicky vázané metody, abstraktní třídy, polymorfní datové
Objektově orientované programování. Úvod
Objektově orientované programování Úvod Imperativní programovací styl klasický programovací styl používaný v době vzniku prvních vyšších programovacích jazyků těžiště programování je v tvorbě algoritmů
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
Programování II. Abstraktní třída Vícenásobná dědičnost 2018/19
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
Bridge. Známý jako. Účel. Použitelnost. Handle/Body
Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době
8 Třídy, objekty, metody, předávání argumentů metod
8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním
Programování II. Návrh programu II
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?
1. Programování proti rozhraní
1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní
Programování v C++ 2, 7. cvičení
Programování v C++ 2, 7. cvičení spojový seznam 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené látky Dědění
7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ
Page 1 of 7 7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ 1. Úvod 2. Obalení 3. Dědičnost 4. Polymorfismus 5. Statické a virtuální metody 6. Dynamické objekty 7.1 ÚVOD Objektově orientované programování (dále
Přetěžování operátorů
Karel Müller, Josef Vogel (ČVUT FIT) Přetěžování operátorů BI-PA2, 2011, Přednáška 4 1/31 Přetěžování operátorů Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta
PB161 Programování v jazyce C++ Přednáška 3
PB161 Programování v jazyce C++ Přednáška 3 Reference, const Přetěžování funkcí Statické atributy a metody Dědičnost a kompozice Nikola Beneš 5. října 2015 PB161 přednáška 3: reference, const, přetěžování,
Seminář Java II p.1/43
Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE
Objektov orientované programování. C++ Akademie SH. 7. Objektov orientované programování. Michal Kvasni ka. Za áte níci C++ 2.
C++ Akademie SH Za áte níci C++ 2. kv tna 2011 Obsah 1 Objektov orientované programování Obsah Objektov orientované programování 1 Objektov orientované programování P et ºování Jev, díky kterému m ºeme
4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ
4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ OBJEKT Program v Javě je staticky strukturován na třídy, jejichž instance (objekty) za běhu dynamicky programu vznikají a zanikají. Objekt je nejprve
Principy objektově orientovaného programování
Principy objektově orientovaného programování Třídy a objekty doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz C E T
10 Balíčky, grafické znázornění tříd, základy zapozdření
10 Balíčky, grafické znázornění tříd, základy zapozdření Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům balíčkům, grafickému
11 Diagram tříd, asociace, dědičnost, abstraktní třídy
11 Diagram tříd, asociace, dědičnost, abstraktní třídy Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost diagramům tříd, asociaci,
IRAE 07/08 Přednáška č. 1
Úvod do předmětu OOP Objekt Proč OOP? Literatura, osnova předmětu viz. cvičení Základní prvek OOP sw inženýrství = model reálných objektů (věcí) člověk, auto, okno (ve windows), slovník, = model abstraktní
Jazyk C# (seminář 3)
Jazyk C# (seminář 3) Pavel Procházka KMI October 8, 2014 Motivace Největší využití v programování okenních aplikací a GUI knihoven. Data reprezentujeme pomocí objektů (tříd), máme tedy ucelený pohled na
Programování v C++ 2, 8. cvičení
Programování v C++ 2, 8. cvičení návrhový vzor iterátor 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené látky
Jazyk C++ II. Šablony a implementace
Jazyk C++ II Šablony a implementace AR 2013/2014 Jazyk C++ II Úvod Dědičnost a kompozice nejsou vždy tou správnou odpovědí na požadavky znovupoužitelnosti kódu. Proto máme možnost definování určité třídy
Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo
Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo Viditelnost Přístup ke třídám i jejim prvkům lze (podobně jako např. v C++) regulovat. Přístupem se rozumí jakékoli použití dané třídy, prvku
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
PB161 Programování v jazyce C++ Přednáška 10
PB161 Programování v jazyce C++ Přednáška 10 Šablony Nikola Beneš 27. listopadu 2017 PB161 přednáška 10: šablony 27. listopadu 2017 1 / 33 Šablony PB161 přednáška 10: šablony 27. listopadu 2017 2 / 33
Programování v Javě I. Leden 2008
Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory
Jazyk C# (seminář 6)
Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí
OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů... 8-1 8.2 Standardně zavedené proudy... 8-1 8.
David MATOUŠEK OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PØÍKLADECH Praha 2011 David Matoušek Objektové programování v C++ v pøíkladech Lektoroval Ing. Bohumil Brtník, Ph.D. Bez pøedchozího písemného svolení nakladatelství
UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/
UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok
Přetěžování operátorů
Přetěžování operátorů Cíle lekce Cílem lekce je seznámit se s mechanizmem přetížení operátorů a s použitím tohoto mechanizmu při návrhu a implementaci programů. Po absolvování lekce budete: umět využívat
SYSTÉMOVÉ PROGRAMOVÁNÍ Cvičení č.1
SYSTÉMOVÉ PROGRAMOVÁNÍ Cvičení č.1 Autor: Ing. Michal Bližňák Témata cvičení: Bleskový úvod do C++ Rozdíly mezi C a C++ Základním rozdílem mezi C a C++ samozřejmě je, že C++ je na rozdíl od tradičního
Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++
Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Prostory jmen U programů mohou někdy nastat kolize mezi jmény (tříd, funkcí, globálních proměnných atd.) pokud v různých
PB161 Programování v jazyce C++ Přednáška 10
.. PB161 Programování v jazyce C++ Přednáška 10 Šablony Nikola Beneš 23. listopadu 2015 PB161 přednáška 10: šablony 23. listopadu 2015 1 / 29 K zamyšlení Jaký je rozdíl mezi new int[10] a new int[10]()?
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce
<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************
zdroje/zdroje.xml
Dynamika objektů. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze
Dynamika objektů Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Přednášky byly připraveny s pomocí materiálů, které vyrobili Ladislav Vágner, Pavel Strnad Karel Richta, Martin Hořeňovský, Aleš Hrabalík,
Abstraktní třída a rozhraní
Abstraktní třída a rozhraní Někdy se může stát, zejména při psaní v hierarchické struktuře hodně nadřazených tříd, že tušíme, že bude ve zděděných třídách vhodné použít nějakou metodu. Tuto metodu ještě
PB161 Programování v jazyce C++ Přednáška 2
PB161 Programování v jazyce C++ Přednáška 2 Základy objektů Reference, const Nikola Beneš 25. září 2018 PB161 přednáška 2: objekty, reference, const 25. září 2018 1 / 30 Jak funguje std::vector? (pro zvídavé)
C++ objektově orientovaná nadstavba programovacího jazyka C
C++ objektově orientovaná nadstavba programovacího jazyka C (2. část) Josef Dobeš Katedra radioelektroniky (13137), blok B2, místnost 722 dobes@fel.cvut.cz 18. května 2015 České vysoké učení technické