Objektově orientované programování (OOP) je po strukturovaném programování

Rozměr: px
Začít zobrazení ze stránky:

Download "Objektově orientované programování (OOP) je po strukturovaném programování"

Transkript

1 Tomáš Holan, oop.txt, Verse: 15. března Objektově orientované programování Objektově orientované programování (OOP) je po strukturovaném programování a modulárním programování další pokus, jak se vypořádat se složitostí programů tak, že dovolíme program rozdělit na části, u nichž nám stačí vědět, CO dělají, aniž bychom se museli starat o to, JAK to dělají. U strukturovaného programování je takovou částí příkaz nebo podprogram, u modulárního programování modul a u objektově orientovaného programování objekt. Objekt... Pokud píšeme nebo někdy potom spouštíme program, obvykle to není proto, že by nás zajímalo právě jen to, jaký výsledek dá program (alespoň většinu z nás a alespoň většina programů). Spíš to bývá tak, že řešíme nějaký problém ve skutečném světě a řešíme ho tak, že vytvoříme jeho model v počítači (pozor, tím modelem může být třeba jen několik čísel, například u modelování růstu ekonomiky nemusíme sledovat všechny nákupy), programem ho vyřešíme a výsledek modelu se pokusíme nějak přenést zase zpátky do skutečného světa. Takže objekt... - no, pokud modelujeme, řekněme, pohyb automobilu, tak takovým objektem může být automobil. Ale objekty mohou být jednodušší (třeba komplexní číslo) nebo také složitější (třeba komplexní továrna na výrobu automobilů). 1 Historie Mohlo by to vypadat, že objekty jsou vynález jazyků jako je C++ nebo Java, ale objekty se objevily už v jazyku Simula 67 v roce 1967, což byl programovací jazyk s knihovnou na vytváření simulačních modelů. Potom se nějakou dobu nedělo nic, když nepočítáme akademické jazyky jako byl Smalltalk, až zhruba do konce osmdesátých a začátku devadesátých let, kdy se objektově orientované programování stalo stejně módním heslem jako o pár let později multimédia, fuzzy logika nebo Internet. 2 V Pascalu V normě jazyka Pascal objekty nebyly. V Turbo Pascalu se objekty objevily poprvé ve versi Co to teda je a jak se to používá OOP je... No, je to několik syntaktických možností jazyka a potom způsob uvažování. Pokud jde o syntaxi, je to pár možností a změn, které jsou příjemné, ale bez kterých bychom se, kdyby to bylo potřeba, také obešli. Důležitější je způsob uvažování o částech programu jako o objektech a organizace programu. Ale pojd me už být konkrétní a ukažme si nějaký příklad.

2 TKomplexniCislo = record Re, Im: real Takhle by vypadal typ pro ukládání komplexních čísel a takhle: function AbsolutniHodnota( x: TKomplexniCislo ): real; with x do AbsolutniHodnota := sqrt( Re*Re + Im*Im )...a takhle funkce vypočítávající absolutní hodnotu. V programu bychom tento typ potom použili takto: var x: TKomplexniCislo; x.re := 1.00; x.im := 2.54; writeln( AbsolutniHodnota( x ) ) end. Zkusme ted upravit deklaraci typu a program tak, aby používal objekty. Předtím ovšem ještě zaved me pojmy: Objektovému typu budeme říkat třída. Proměnné tohoto typu, neboli instanci třídy budeme říkat objekt. Takže ted pojd me definovat třídu TKomplexni (a nenechte se zmýlit tím, že k definici třídy se v Turbo/Borland/Free Pascalu používá klíčové slovo object): TKomplexni = object Re, Im: real; function AbsolutniHodnota: real; function TKomplexni.AbsolutniHodnota: real; AbsolutniHodnota := sqrt( Re*Re + Im*Im ) var x: TKomplexni; x.re := 1.00;

3 x.im := 2.54; writeln( x.absolutnihodnota ) end. Funkce AbsolutniHodnota nemá žádné parametry, protože je součástí třídy a tedy má přístup ke všem datovým složkám objektu. Říkali jsme, že objekty slouží k tomu, abychom oddělili CO od JAK. Kdybychom to v našem příkladu chtěli udělat pořádně, vypadal by výsledek nějak takhle: TKomplexni = object procedure Dosad( are, aim: real ); function RealnaSlozka: real; function ImaginarniSlozka: real; function AbsolutniHodnota: real; private Re, Im: real; procedure TKomplexni.Dosad( are, aim: real ); Re := are; Im := aim function RealnaSlozka: real; RealnaSlozka := Re function ImaginarniSlozka: real; ImaginarniSlozka := Im function TKomplexni.AbsolutniHodnota: real; AbsolutniHodnota := sqrt( Re*Re + Im*Im ) var x: TKomplexni; x.dosad( 1.00, 2.54 ); writeln( x.absolutnihodnota )

4 end. Ted už žádný uživatel objektu x nemůže sahat na jeho vnitřní proměnné (o to se stará direktiva private) a smí používat jen to, co třída TKomplexní deklaruje jako vnější rozhraní - tedy proceduru Dosad a funkce RealnaSlozka, ImaginarniSlozka a AbsolutniHodnota. Všechny deklarace uvedené za příznakem (specifikátorem přístupu) private jsou viditelné pouze v rámci unity, kde je deklarovaná třída TKomplexni. V jiných jazycích nebo překladačích je možné přístup k částem deklarace specifikovat jemněji a přesněji, ale to zásadní zůstává poskytovat ostatním předem definované rozhraní a nepovolit přístup k tomu, jak je to uděláno uvnitř. To má svůj význam při psaní programu v týmu domluvené rozhraní je to jediné, co musíte dodržet a i kdybyste se rozhodli datové složky ukládat třeba do souboru, funkčnost zbytku programu (ne jeho rychlost!) to neovlivní. Této vlastnosti objektů, sdružovat data i metody (souhrnné označení pro procedury a funkce) a zároveň zveřejnit jenom to, co zveřejnit chceme, říkáme zapouzdření (encapsulation). Pojd me se podívat na další vlastnosti objektů. Mějme například třídu TPes (to, že jména tříd začínají písmenem T není předpis, jen zvyklost usnadňující čtení programů): TPes = object procedure Dosad( ajmeno: string; vyska: integer ); procedure Stekni; procedure Zastekej; private jmeno: string; vyska: integer procedure TPes.Dosad( ajmeno: string; vyska: integer ); jmeno := ajmeno; vyska := avyska procedure TPes.Stekni; writeln( haf! (,jmeno, ) ) procedure TPes.Zastekej; Stekni; Stekni

5 Když si vytvoříme objekt typu TPes... var pes: TPes; pes.dosad( Fousek, 20 ); pes.stekni end. objeví se na výstupu haf! (Fousek) Potud nic zvláštního. A ted si představme, že bychom potřebovali ještě jeden typ pro velké psy. Velký pes má stejné datové složky i stejné metody jako pes, ale liší se tím, jak štěká. Mohli bychom tedy popsat typ TVelkyPes stejně jako jsme popsali typ TPes a jenom změnit tělo metody Stekni. OOP nám však nabízí lepší způsob - můžeme velkého psa odvodit od třídy TPes: TVelkyPes = object( TPes ) procedure Stekni; procedure TVelkyPes.Stekni; writeln( HAF! (,jmeno, ) ) Tím, že jsme do závorky za klíčové slovo object napsali jméno jiného objektového typu, říkáme, že třída TVelkyPes je odvozená neboli že dědí od typu TPes. Odvozená třída - převezme všechny datové složky - převezme hlavičky všech metod (ale může změnit jejich tělo) - může přidat nové datové složky i nové metody. Takže třída TVelkyPes má všechny datové složky i všechny metody, jaké má třída TPes a tedy ji můžeme také stejně používat: var VelkyPes: TVelkyPes; VelkyPes.Dosad( Fous, 60 ); VelkyPes.Stekni end. V tomto případě se na výstupu objeví HAF! (Fous)

6 4 Zádrhel a virtuální metody Zkusme ted místo metody Stekni volat metodu Zastekej: var Pes: TPes; VelkyPes: TVelkyPes; Pes.Dosad( Fousek, 20 ); Pes.Zastekej; VelkyPes.Dosad( Fous, 60 ); VelkyPes.Zastekej end. Výsledek bude možná trochu překvapivý: haf! (Fousek) haf! (Fousek) haf! (Fous) haf! (Fous) Metoda Zastekej zavolá dvakrát po sobě metodu Stekni. A podivný výsledek našeho programu je dán tím, že metoda Zastekej patřící velkému psovi Fousovi zavolá dvakrát metodu Stekni ale protože třída TVelkyPes nemá vlastní metodu Zastekej, volá se metoda Zastekej zděděná od třídy TPes a ta volá dvakrát metodu Stekni - také třídy TPes, protože v době, kdy se překládalo tělo metody Zastekej, vůbec nebylo jasné, že někdy později vznikne nová třída TVelkyPes a že bude existovat nějaká jiná metoda Stekni. 4.1 Co s tím? Vidíme, že problém je v tom, že když se překládají příkazy tvořící tělo procedury Zastekej, konkrétně volání procedury Stekni, přeloží se toto volání tak, jak to jde ted, tedy tak, že volá ted známou metodu Stekni. Říkáme, že procedura Stekni je statická. Alternativní způsob je oznámit, že chceme, aby se volání procedury Stekni nepřekládalo takto, ale aby se před voláním program podíval, jaká je ted platná procedura Stekni a tu zavolal! Takové proceduře říkáme virtuální procedura a svůj požadavek ohlásíme tak, že v deklaraci třídy za hlavičku metody připíšeme klíčové slovo virtual: TPes = object procedure Dosad( ajmeno: string; vyska: integer ); procedure Stekni; virtual; procedure Zastekej; private jmeno: string; vyska: integer

7 Všimněme si, že to je vlastnost té procedury, která je volaná, ne toho, kdo ji volá. Také poznamenejme, že tatáž metoda může být statická nebo virtuální, ale u všech předchůdců a potomků stejná, není možné, aby u třídy TPes byla metoda statická a u třídy TVelkyPes virtuální nebo naopak, pokud je mezi těmito třídami vztah dědičnosti. Přesnější popis najdete kousek dál v kapitole nazvané,,slíbené upřesnění, které můžete přeskočit. 4.2 Jak se volají virtuální metody? Pokud chceme, aby metoda Zastekej, která se ve výsledném programu vyskytuje pouze v jednom exempláři, volala jednou proceduru Stekni patřící třídě TPes a jednou proceduru Stekni patřící třídě TVelkyPes, může se rozhodovat jedině podle dat aktuálního objektu. Mohlo by to být třeba tak, že by objekt, instance třídy TPes nebo TVelkyPes, obsahoval adresu procedury Stekni. Pokud nechceme mluvit o adresách, stačí proměnná typu procedura (bez parametrů). Volání takové metody Stekni by potom znamenalo zavolat proceduru uloženou v této proměnné, něco, co v Pascalu jde a šlo dávno před objekty. A tak se to skoro dělá, až na dvě drobnosti. První drobnost se týká toho, že je zbytečné, aby si, třeba v programu modelujícím psí útulek, každý objekt typu TPes pamatoval adresu své procedury Stekni a případně adresy všech svých virtuálních procedur. Stačí, když si tyto adresy budeme pamatovat jednou pro každou třídu, v jakési tabulce a každý objekt si potom bude pamatovat jenom adresu této tabulky. Tak to je a té tabulce se říká tabulka virtuálních metod (virtual method table, VMT). Ta druhá zmíněná drobnost se týká toho, jak se v objektu nastaví ukazatel na tabulku virtuálních metod. Když si deklarujeme globální proměnnou, možná bude na začátku vynulovaná, záleží na překladači. Vynulovaná znamená vyplněná nulovými bajty. Pokud si proměnnou deklarujeme uvnitř procedury (tj. na zásobníku) nebo ji vytvoříme dynamicky (tj. na haldě), nebude ani vynulovaná, bude mít jakýsi nahodilý obsah podle toho, k čemu její pamět ové buňky sloužily před chvílí. Tak či tak, případný ukazatel na tabulku virtuálních metod zřejmě nebude ukazovat tam, kam bychom potřebovali. Jak ho tedy nastavíme? 4.3 Konstruktor Konstruktor je procedura, která se od ostatních metod objektu liší tím, že místo klíčového slova procedure její hlavička začíná klíčovým slovem constructor. A potom tím, že dříve než provede svůj první příkaz, nastaví objektu ukazatel na tabulku virtuálních metod! Takže dříve než zavoláme virtuální metodu nějakého objektu, musíme zavolat jeho konstruktor. viz Nová syntaxe procedury New. 5 Slíbené upřesnění, které můžete přeskočit Vrat me se ještě k tvrzení, že tatáž metoda může být statická nebo virtuální, ale u všech předchůdců a potomků stejná.

8 Pokud v předchůdci deklarujeme metodu jako virtuální a u potomka jako statickou, (Turbo) Pascal hlásí chybu ERROR 149: VIRTUAL expected a program nepřeloží. Když naopak u předchůdce deklarujeme metodu jako statickou a u potomka jako virtuální, potom se chování programu liší podle toho, jak metodu zavoláme: Když ji voláme prostřednictvím ukazatele na předka, volá se statická metoda předka a to i případě, že odvodíme dalšího potomka (3.generace) od potomka, který již měl metodu deklarovánu jako virtuální. Když ji voláme prostřednictvím ukazatele na potomka, volá se metoda potomka, ale pokud do tohoto ukazatele dosadíme ukazatel na již zmíněného potomka třetí generace, volá se opět metoda daná m ukazatele. Metoda deklarovaná jednou jako statická se tedy překládá stále jako statická, i když ji v potomcích deklarujeme jako virtuální. Zdrojový kód na vysvětlenou a na pokusy: PStatic = ^TStatic; TStatic = object constructor C; procedure P; PVirtual = ^TVirtual; TVirtual = object constructor C; procedure P; virtual; constructor TStatic.C; writeln( constructor TStatic ) procedure TStatic.P; writeln( Static ) procedure TVirtual.P; writeln( Virtual )

9 constructor TVirtual.C; writeln( constructor TVirtual ) { potomci: } PStaticV = ^TStaticV; TStaticV = object( TStatic ) constructor C; procedure P; virtual; PVirtualS = ^TVirtualS; TVirtualS = object( TVirtual ) procedure P; virtual; { bez toho hlasi ERROR 149: VIRTUAL expected } constructor TStaticV.C; writeln( constructor TStaticV ) procedure TStaticV.P; writeln( StaticV ) procedure TVirtualS.P; writeln( VirtualS ) { generace: } PStaticVV = ^TStaticVV; TStaticVV = object( TStaticV ) constructor C; procedure P; virtual; constructor TStaticVV.C; writeln( constructor TStaticVV )

10 procedure TStaticVV.P; writeln( StaticVV ) var ps: PStatic; pv: PVirtual; psv: PStaticV; writeln( ); ps := new( PStatic ); ps^.c; {} ps^.p; end. ps := new( PStaticV ); ps^.c; {} ps^.p; ps := new( PStaticVV ); ps^.c; {} ps^.p; psv := new( PStaticV ); psv^.c; {} psv^.p; psv := new( PStaticVV ); psv^.c; {} psv^.p; 6 Kompatibilita objektových typů Velký pes je také pes. Proto: 1. ukazatelem na třídu TPes můžeme ukazovat i na objekty odvozených typů; k dispozici budeme mít pouze data a metody příslušející typu ukazatele, ale virtuální metody se budou volat podle tabulky virtuálních metod, takže podle skutečného typu objektu. 2. do proměnné typu TPes... Dosadit do proměnné typu TPes proměnou typu TVelkyPes by mohlo mít určitý smysl, s tím, že se dosadí hodnota jen do těch datových složek, které má objekt, do kterého dosazujeme a že se nedosazuje do ukazatele na VMT, ten zůstane beze změny.

11 Ve Free Pascalu to funguje, v Borland Pascalu dosazování objektů různého typu funguje, jen pokud jsou objekty alokovány dynamicky (na haldě), jinak se neprovede nic. A neplatí to jen o psech, ale obecně pro odvozené typy, at už bezprostředně nebo přes libovolný počet mezičlánků. 6.1 Nová syntaxe procedury New S tím souvisí nová syntaxe procedury new. Procedura new, jak ji známe, alokuje dynamické proměnné a do proměnné, která je parametrem volání, dosadí ukazatel na alokovanou proměnnou. Nová syntaxe procedury new dovoluje do volání procedury new jako druhý parametr zapsat volání konstruktoru, včetně parametrů (to je ještě jedna vlastnost, která odlišuje konstruktor od obyčejných procedur, obyčejnou proceduru zde zapsat nemůžeme). Navíc lze proceduru new volat jako funkci, která ukazatel na alokovanou proměnnou vrací jako výslednou hodnotu. V takovém případě není (prvním) parametrem volání proměnná, ale ukazatelový typ. Pokud při volání uvedeme i druhý parametr volání konstruktoru, musí se jednat o konstruktor objektového typu odpovídajícího uvedenému ukazateli. Kdyby v našem příkladu procedura Dosad byla deklarovaná jako konstruktor (jediná změna je v klíčovém slově constructor namísto procedure), mohli bychom psát: PPes = ^TPes; PVelkyPes = ^TVelkyPes; var Psi: array[1..10] of PPes; i: integer; Psi[1] := New( PPes, Dosad( Alik, 10 ) ); Psi[2] := New( PPes, Dosad( Brok, 10 ) ); Psi[3] := New( PVelkyPes, Dosad( Caesar,10 ) ); Psi[4] := New( PVelkyPes, Dosad( Don, 10 ) ); Psi[5] := New( PVelkyPes, Dosad( Edgar, 10 ) ); Psi[6] := New( PPes, Dosad( Fousek,10 ) ); Psi[7] := New( PVelkyPes, Dosad( Gregor,10 ) ); Psi[8] := New( PVelkyPes, Dosad( Hafan, 10 ) ); Psi[9] := New( PVelkyPes, Dosad( Igor, 10 ) ); Psi[10]:= New( PPes, Dosad( Jim, 10 ) ); for i:=1 to 10 do Psi[i]^.Stekni end....a výstup programu by byl:

12 haf! (Alik) haf! (Brok) HAF! (Caesar) HAF! (Don) HAF! (Edgar) haf! (Fousek) HAF! (Gregor) HAF! (Hafan) HAF! (Igor) haf! (Jim) Neboli - máme pole ukazatelů stejného obeceného typu, jehož hodnoty jsou ukazatelé na objekty různých typů a když voláme virtuální metody jednotlivých objektů, volá se vždy metoda odpovídající skutečnému typu objektu. Této schopnosti objektů se říká polymorfismus. 7 Abstraktní třídy Žádný pes neexistuje! Tedy neexistuje žádné zvíře, které by bylo právě jen pes. Existují jezevčíci a foxteriéři a dobrmani, ale neexistuje žádné zvíře, které by bylo jenom pes. Nakonec, vlastně... neexistuje ani žádný jezevčík a foxteriér a dobrman, existují jen konkrétní jedinci a jakékoliv označení rasy nebo živočišného druhu je jen jakási přihrádka, kategorie, která nám pomáhá sdružovat jedince se stejnými vlastnostmi. Se stejným interfacem. Když k nám přiběhne zvíře, které jsme nikdy nepotkali, nevíme, co od něj můžeme čekat. Když se nám ho podaří zařadit do přihrádky pes, potom víme, že mu můžeme dát kostku cukru, pohladit ho, nebo ho nakopnout - známe jeho interface, rozhraní. Nevíme, co je uvnitř, ale umíme s ním pracovat. Už jsme se setkali s algoritmy procházení do šířky a do hloubky. Víme, že procházení do hloubky se snadno naprogramuje pomocí rekurse, ale také víme, že oba algoritmy jsou zvláštní případy obecného algoritmu prohledávání a že se liší jen tím, zda pro ukládání rozpracovaných stavů použijeme frontu (do šířky), nebo zásobník (do hloubky). Protože už umíme používat objekty a víme, co je polymorfismus, mohli bychom naprogramovat proceduru prohledávání tak, že by parametrem byl ukazatel na objekt sloužící pro ukládání stavů, jednou zásobník, podruhé fronta. Víme ale, že polymorfismus dovoluje ukazatelem na objekty obecnější ukazovat na typy specifičtější, odvozené. Kdybychom tedy chtěli týmž m ukazatele ukazovat jednou na zásobník, podruhé na frontu, znamená to, že by musel a) zásobník být odvozen od fronty, nebo b) fronta odvozena od zásobníku nebo c) fronta i zásobník odvozeny od společného předka, což vypadá nejrozumněji, protože fronta není zvláštním druhem zásobníku ani zásobník není zvláštním druhem fronty.

13 Tento společný předek, seznam, musí mít všechny metody a vlastnosti, které budou mít fronta a zásobník, to proto, abychom pomocí ukazatele na tohoto předka mohli volat metody zásobníku a fronty: PSeznam = ^TSeznam; TSeznam = object procedute Pridej( x: TPrvek ); virtual; function JePrazdny: boolean; virtual; procedure Vyber( var x: TPrvek ); virtual; Všechny uvedené metody musí být virtuální, protože chceme pomocí ukazatele na obecný typ TSeznam volat metody odvozených tříd. Protože nikdy nebudeme vytvářet objekty tohoto typu, nemusíme uvádět žádné další údaje krom těch, na které se budeme odkazovat v odvozených třídách a ve volání metod. Třídě, jejíž instance nebudeme vytvářet, říkáme abstraktní třída. Jejím metodám, které nikdy nebudeme volat, říkáme abstraktní metody. V některých programovacích jazycích stačí v deklaraci objektu pouze u hlavičky metody poznamenat, že je abstraktní, v Pascalu musíme uvést i její tělo; obvykle do těla vkládáme výpis chybového hlášení, kdybychom omylem přece jen někdy zavolali abstraktní metodu, abychom se o své chybě dozvěděli: procedure Pridej( x: TPrvek ); RunError( 211 ) function JePrazdny: boolean; virtual; RunError( 211 ) procedure Vyber( var x: TPrvek ); virtual; RunError( 211 ) Procedura RunError vyvolá běhovou chybu. 211 je kód chyby Volání abstraktní metody. 8 Self Uvnitř metod je dostupný identifikátor Self. Tento identifikátor označuje tuto proměnnou, tu, s jejímiž daty budeme pracovat a například místo Vyska bychom mohli psát Self.Vyska. Ten slouží k tomu, když někde potřebujeme označit tuto proměnnou, tu, s jejímiž daty budeme pracovat, například když uvnitř metody nějaké třídy chceme tento objekt zadat jako parametr nějaké metody.

14 Pokud potřebujeme znát adresu tohoto objektu, například pro přidání objektu do spojového seznamu, použijeme (Turbo/Borland Pascal nebo Free Pacsal) operátor Addr nebo jeho kratší Například takto: var p: PPes; procedure TPes.UlozSvouAdresu; p

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

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

Více

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

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

Více

7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁ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

Více

Anotace. Objekt self, operátor @. Zapouzdření, polymorfismus,

Anotace. Objekt self, operátor @. Zapouzdření, polymorfismus, Anotace Objekt self, operátor @. Zapouzdření, polymorfismus, dědičnost, virtuální metody, čistě virtuální funkce, abstraktní třídy. Objekt self, operátor vzetí pointeru Říkali jsme si o konstruktorech

Více

1. D Y N A M I C K É DAT O V É STRUKTUR Y

1. D Y N A M I C K É DAT O V É STRUKTUR Y 1. D Y N A M I C K É DAT O V É STRUKTUR Y Autor: Petr Mik Abychom se mohli pustit do dynamických datových struktur, musíme se nejdřív podívat na datový typ ukazatel. 1. D AT O V Ý TYP U K A Z AT E L Datové

Více

Dědění, polymorfismus

Dědění, polymorfismus Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá

Více

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

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í.

Více

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik; Vícerozměrné pole type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik; M[2,3] := 3145; - počet indexů není omezen (v praxi obvykle nejvýše tři) - více indexů pomalejší přístup k prvku (počítá

Více

dovolují dělení velkých úloh na menší = dekompozice

dovolují dělení velkých úloh na menší = dekompozice Podprogramy dovolují dělení velkých úloh na menší = dekompozice Příklad: Vytiskněte tabulku malé násobilky ve tvaru XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X 1 2 3 4 5 6 7 8 9 10 X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Více

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

Unity a Objekty (NMIN102) RNDr. Michal Žemlička, Ph.D. Unity a Objekty Programování 2 (NMIN102) RNDr. Michal Žemlička, Ph.D. Větší programy Časté problémy: Ve více programech by se nám hodilo využít stejné řešení nějakého podproblému dalo by se vyřešit překopírováním

Více

Programování II. Polymorfismus

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í

Více

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

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:

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové

Více

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

Delphi - objektově orientované

Delphi - objektově orientované Kapitola 6 Delphi - objektově orientované programování Objektově orientované programování (zkracováno na OOP, z anglického Object oriented programming) je metodika vývoje softwaru, založená na těchto myšlenkách,

Více

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 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

Více

Objektové programování

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

Více

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

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

Více

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

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

Více

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

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

Více

Anotace. Pointery. Martin Pergel,

Anotace. Pointery. Martin Pergel, Anotace Pointery K čemu jsou dynamické proměnné? K mnoha algoritmům bychom potřebovali pole proměnlivé délky nebo aspoň jinou datovou strukturu proměnlivé délky. Jak implementovat frontu a zásobník? Použijeme

Více

Zpracování deklarací a přidělování paměti

Zpracování deklarací a přidělování paměti Zpracování deklarací a přidělování paměti Účel deklarací -pojmenování objektů -umístění objektů v paměti Tabulka symbolů -uchovává informace o objektech -umožňuje kontextové kontroly -umožňuje operace

Více

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

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í

Více

1. Dědičnost a polymorfismus

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ář

Více

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

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

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 06. Proměnné, deklarace proměnných Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284

Více

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín Kolekce ArrayList napsal Pajclín Tento článek jsem se rozhodl věnovat kolekci ArrayList, protože je to jedna z nejpoužívanějších. Tento článek není kompletním popisem třídy ArrayList, ale budu se snažit

Více

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

Využití OOP v praxi -- Knihovna PHP -- Interval.cz Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování

Více

Virtuální metody - polymorfizmus

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í

Více

NPRG030 Programování I, 2015/16 1 / :25:32

NPRG030 Programování I, 2015/16 1 / :25:32 NPRG030 Programování I, 2015/16 1 / 21 22. 10. 2015 13:25:32 Podprogramy Příklad: Vytiskněte tabulku malé násobilky ve tvaru XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X X 1 2 3 4 5 6 7 8 9 10 X

Více

Sdílení dat mezi podprogramy

Sdílení dat mezi podprogramy Sdílení dat mezi podprogramy Datové objekty mohou být mezi podprogramy sdíleny pomocí ne-lokálních referenčních prostředí, která jsou vytvářena na základě æ explicitních modifikací (formální parametry

Více

Programování v C++ VI

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ý

Více

Anotace. Jednotky (tvorba a využití), struktury (typ record),

Anotace. Jednotky (tvorba a využití), struktury (typ record), Anotace Jednotky (tvorba a využití), struktury (typ record), medián v lineárním čase. Jednotky oddělený překlad Občas máme obecně využitelné funkce, které chceme používat v různých programech současně.

Více

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

Vyřešené teoretické otázky do OOP ( ) Vyřešené teoretické otázky do OOP (16. 1. 2013) 1) Vyjmenujte v historickém pořadí hlavní programovací paradigmata a stručně charakterizujte každé paradigma. a) Naivní chaotičnost, špatná syntaxe a sémantika

Více

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 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á

Více

typová konverze typová inference

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

Více

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout.   tel: Skripta ke školení Základy VBA vypracoval: Tomáš Herout e-mail: herout@helpmark.cz tel: 739 719 548 2016 Obsah TROCHA TEORIE VBA...2 ZPŮSOB ZÁPISU VE VBA...2 CO JE TO FUNKCE...2 CO JE TO PROCEDURA...2

Více

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.

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,

Více

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

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

Více

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í. 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;

Více

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Maturitní otázky z předmětu PROGRAMOVÁNÍ Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti

Více

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

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é

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Abstraktní třída a rozhraní

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ě

Více

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.

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

Více

Více o konstruktorech a destruktorech

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í

Více

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi) Programovací jazyk - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi) Odlišnosti implementace od normy - odchylky např.: nepovinná hlavička programu odlišná

Více

DUM 06 téma: Tvorba makra pomocí VBA

DUM 06 téma: Tvorba makra pomocí VBA DUM 06 téma: Tvorba makra pomocí VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie

Více

Programování II. Modularita 2017/18

Programování II. Modularita 2017/18 Programování II Modularita 2017/18 Modul? Osnova přednášky Vývoj programování Modularita Příklad Vývoj programování Paradigmata programování Jak a proč se jazyky vyvíjejí? V čem se OOP liší od předchozích

Více

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.

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. 13 Rozhraní, výjimky 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 rozhraním a výjimkám. Doba nutná k nastudování 2 2,5 hodiny

Více

Anotace. Pointery, dynamické proměnné

Anotace. Pointery, dynamické proměnné Anotace Třídění, Pointery, dynamické proměnné Radix- alias bucketsort Třídíme-li celá (přirozená) čísla, jejichž velikost je omezena, můžeme využít toho, že v desítkovém zápisu je na každé pozici jen jedna

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python Objektově orientované programování v jazyce Python Základní pojmy objektově orientovaného programování Objekt vychází z reálného světa. Má dva charakteristické rysy. Všechny objekty mají stav Všechny objekty

Více

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 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

Více

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python Objektově orientované programování v jazyce Python Co to je objektově orientované programování Python není přímo objektově orientovaný jazyk, ale podporuje nejdůležitější části objektově orientovaného

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Seznamy a stromy Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Klíčové pojmy: Seznam, spojový seznam, lineární seznam, strom, list, uzel. Úvod

Více

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

Ú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

Více

Generické programování

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 =

Více

Základy objektové orientace I. Únor 2010

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

Více

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5 Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5

Více

Programujeme v softwaru Statistica

Programujeme v softwaru Statistica Programujeme v softwaru Statistica díl druhý Newsletter Statistica ACADEMY Téma: Programování, makra, skripty Typ článku: Návody V tomto článku si ukážeme další možnosti při psaní maker v softwaru Statistica.

Více

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ČŮ 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

Více

Úvod do programování

Úvod do programování Úvod do programování Základní literatura Töpfer, P.: Algoritmy a programovací techniky, Prometheus, Praha učebnice algoritmů, nikoli jazyka pokrývá velkou část probíraných algoritmů Satrapa, P.: Pascal

Více

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

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,

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

Assembler - 5.část. poslední změna této stránky: Zpět

Assembler - 5.část. poslední změna této stránky: Zpět 1 z 5 19.2.2007 7:52 Assembler - 5.část poslední změna této stránky: 9.2.2007 1. Pseudoinstrukce a direktivy Zpět Kromě instrukcí můžete v Assembleru psát také další konstrukce, které se obšem nepřekládají

Více

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

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í

Více

PODPROGRAMY PROCEDURY A FUNKCE

PODPROGRAMY PROCEDURY A FUNKCE PODPROGRAMY PROCEDURY A FUNKCE Programy bez podprogramů Příklady: a) Napište program, který na obrazovku nakreslí čáru složenou ze znaků pomlčka. program Cara; b) Napište program, který na obrazovku nakreslí

Více

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

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

Více

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: vzdělávací

Více

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu Ukazatel a dynamické datové struktury v prostředí DELPHI Důležitým termínem a konstrukčním programovým prvkem je typ UKAZATEL. Je to vlastně

Více

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7 Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí

Více

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání Čtvrtek 3. listopadu Makra v Excelu Obecná definice makra: Podle definice je makro strukturovanou definicí jedné nebo několika akcí, které chceme, aby MS Excel vykonal jako odezvu na nějakou námi definovanou

Více

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

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ý

Více

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

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)

Více

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

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

Více

Lineární spojový seznam (úvod do dynamických datových struktur)

Lineární spojový seznam (úvod do dynamických datových struktur) Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky

Více

Funkční objekty v C++.

Funkční objekty v C++. Funkční objekty v C++. Funkční objekt je instance třídy, která má jako svou veřejnou metodu operátor (), tedy operátor pro volání funkce. V dnešním článku si ukážeme jak zobecnit funkci, jak používat funkční

Více

Vzorce. StatSoft. Vzorce. Kde všude se dá zadat vzorec

Vzorce. StatSoft. Vzorce. Kde všude se dá zadat vzorec StatSoft Vzorce Jistě se Vám již stalo, že data, která máte přímo k dispozici, sama o sobě nestačí potřebujete je nějak upravit, vypočítat z nich nějaké další proměnné, provést nějaké transformace, Jinak

Více

Konstruktory a destruktory

Konstruktory a destruktory Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,

Více

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

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda 1. Lze vždy z tzv. instanční třídy vytvořit objekt? 2. Co je nejčastější příčinou vzniku chyb? A. Specifikace B. Testování C. Návrh D. Analýza E. Kódování 3. Je defenzivní programování technikou skrývání

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 13. Práce s řetězci - palindrom Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona:

Více

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Vývoj aplikací Téma: Pole Vyučující: Ing. Milan Káža Třída: EK3 Hodina: 14 Číslo: V/5 Programování v jazyce

Více

Jazyk C# (seminář 3)

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

Více

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ů. 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ů,

Více

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

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ů

Více

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D. Programování 2 (NMIN102) Soubory RNDr. Michal Žemlička, Ph.D. Soubor abstrakce vstupního, výstupního či vstupně výstupního zařízení textová, typovaná a netypovaná varianta základní operace: otevření, čtení/zápis,

Více

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

PB161 programování v C++ Výjimky Bezpečné programování PB161 programování v C++ Výjimky Bezpečné programování Chyby... Snaha psát programy bez chyb myslet : ) Snaha psát programy se schopností fault tolerance. snaha se z chybového stavu dostat lze řešit testováním

Více

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

Programování II. Třídy a objekty (objektová orientovanost) 2018/19 Programování II Třídy a objekty (objektová orientovanost) 2018/19 Osnova přednášky Objektový přístup (proč potřebujeme objekty). Třídy, objekty,... Příklad. Proč potřebujeme objekty? Udržovatelnost softwaru

Více

PREPROCESOR POKRAČOVÁNÍ

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,

Více

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

Je n O(n 2 )? Je n 2 O(n)? Je 3n 5 +2n Θ(n 5 )? Je n 1000 O(2 n )? Je 2 n O(n 2000 )? Cvičení s kartami aneb jak rychle roste exponenciála.

Je n O(n 2 )? Je n 2 O(n)? Je 3n 5 +2n Θ(n 5 )? Je n 1000 O(2 n )? Je 2 n O(n 2000 )? Cvičení s kartami aneb jak rychle roste exponenciála. Příklady: Je n O(n 2 )? Je n 2 O(n)? Je 3n 5 +2n 3 +1000 Θ(n 5 )? Je n 1000 O(2 n )? Je 2 n O(n 2000 )? Cvičení s kartami aneb jak rychle roste exponenciála. Další pojmy složitosti Složitost v nejlepším

Více

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; } Pole Kdybychom v jazyce C++chtěli načíst větší počet čísel nebo znaků a všechny bylo by nutné všechny tyto hodnoty nadále uchovávat v paměti počítače, tak by bylo potřeba v paměti počítače alokovat stejný

Více

Projekt Obrázek strana 135

Projekt Obrázek strana 135 Projekt Obrázek strana 135 14. Projekt Obrázek 14.1. Základní popis, zadání úkolu Pracujeme na projektu Obrázek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy

Více

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

3. Třídy. Základní pojmy objektového programování. Třídy 3. Třídy Základní pojmy objektového programování Jak už víme, je Java objektovým programovacím jazykem. V úvodu této kapitoly si objasníme základní pojmy objektové teorie. Objekt představuje souhrn dat

Více

Úvod do programovacích jazyků (Java)

Ú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

Více

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 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 formátovanému výstupu,

Více

Datové struktury. alg12 1

Datové struktury. alg12 1 Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou

Více