Objektově orientované programování (OOP) je po strukturovaném programování
|
|
- Eliška Němcová
- před 6 lety
- Počet zobrazení:
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 / 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íceNPRG031 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íce7. 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íceAnotace. 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íce1. 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íceDě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ícePolymorfismus. Č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ícetype 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ícedovolují 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íceUnity 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íceProgramová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íceDynamicky 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íceVýč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íceVyuč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: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury
VíceDelphi - 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ícePokroč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íceObjektové 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ícePB161 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ícePB161 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íce24. 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íceAnotace. 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íceZpracová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íce14.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íce1. 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íceChová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íceSada 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íceKolekce 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íceVyuž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íceVirtuá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íceNPRG030 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íceSdí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íceProgramová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íceAnotace. 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íceVyř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íce7. 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ícetypová 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íceSkripta 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íceTří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íceProgramová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íceTŘÍ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íceMaturitní 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íceProgramová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íceVÝ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íceAbstraktní 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íce2) 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íceVí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íceProgramovací 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íceDUM 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íceProgramová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íceTento 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íceAnotace. 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íceALGORITMIZACE 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íceObjektově 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íceProgramová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íceObjektově 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íceImplementace 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íceCí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
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íceGenerické 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íceZá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íce1.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íceProgramujeme 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íceMATURITNÍ 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í 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íceIB111 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íceProgramovací 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íceAssembler - 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íceIRAE 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ícePODPROGRAMY 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íce8 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íceDUM 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íceImplementace 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ícePascal. 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: 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íceProgramová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íceStatické 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íceProgramová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íceLineá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íceFunkč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íceVzorce. 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íceKonstruktory 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íce3. 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íceSada 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íceStř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íceJazyk 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íceC++ 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íceMichal 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íceProgramová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ícePB161 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íceProgramová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ícePREPROCESOR 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íceIII/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íceJe 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ícefor (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íceProjekt 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íce3. 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) 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íce7 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íceDatové 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