Je C++ vhodné pro embedded systémy?

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

Download "Je C++ vhodné pro embedded systémy?"

Transkript

1 Je C++ vhodné pro embedded systémy? Ing. Miloš Čábel, , Ústav Automatizace a Měřicí Techniky Fakulta Elektrotechniky a Komunikačních Technologií Vysoké Učení Technické v Brně Úvod Celá řada embedded aplikací se v dnešní době programuje v jazyce C. Ale i zde platí, že složitost programů exponenciálně roste. Proto se objevuje celá řada trendů jak tuto rostoucí složitost zvládat. Jednou z možných řešení je přesunout vývoj z C na C++. Panuje ale obecně celá řada pochybností o náročnosti programů napsaných v C++ vůči aplikacím napsaným v jazyce C. Lze najít celou řadu článků porovnávajících C s C++, ale ty většinou nezohledňují specifika embedded aplikací. A pokud ano, tak si výsledky často odporují. Lze najít například článek, dokazující že přepsáním algoritmu z C++ urychlili autoři celý výpočet několikanásobně. A naopak je možno si přečíst si i řadu článků, jak je program napsaný v C++ rychlejší než v C. Co si z toho tedy vybrat? Na to se v tomto článku zaměříme. 1. Embedded systém Pokud si nejste jisti, co znamená termín "embedded systém", pak lze jako názorný příklad uvést mobilní telefon, mikrovlnná trouba, televize s teletextem, tiskárna, pokojový termostat, DVD nebo MP3 přehrávač, automatická pračka, systém řízení ABS, GPS navigace, router a mnoho dalších většinou inteligentních zařízení. Existuje několik různých, více či méně výstižných definicí. Jedna z těch výstižnějších popisuje embedded systém jako výpočetní systém s velkou vazbou mezi software a hardware, který je specializován k vykonávání nějaké konkrétní funkce. Slovo embedded (česky "vložený") vystihuje fakt, že takovéto systémy jsou obvykle součástí nějakého většího systému. Vícero vložených systémů může spolupůsobit v jednom nadřazeném systému Odlišnosti embedded systémů od běžných počítačů Největší rozdíly vyplývají z definice. Je to vazba na konkrétní hardware a předem daná množina funkcí daného systému. Při vývoji těchto systémů se obvykle hodnotí parametry jako je spotřeba (doba provozu při napájení bateriemi), cena, objem, váha, spolehlivost, robustnost, přesnost a podobně. Potřebný mikroprocesor (či mikrokontrolér, v tomto článku je nemusíme rozlišovat) se obvykle vybírá ten nejjednodušší, který dokáže splnit požadavky systému. Stejně tomu je i s pamětí, pokud není integrována na jednom čipu spolu s mikrokontrolérem. Z toho poměrně jasně plyne, že efektivita programu má přímý vliv na cenu a parametry systému. Efektivitou se rozumí jak velikost kódu, tak jeho rychlost. Velikost kódu a nároky na datovou paměť mají vliv na cenu a spotřebu systému. Pokud reakce programu na vnější událost vyžaduje například kolem 100 strojových cyklů, můžeme několikanásobně zpomalit taktovací kmitočet oproti programu, který na stejnou událost potřebuje až několik tisíc strojových cyklů. Nižší kmitočet znamená nižší spotřebu a ta může znamenat delší výdrž baterií nebo jednodušší napájecí obvod. 21-1

2 2. Norma jazyka C a C++ Jazyk C++ vychází z jazyka C a proto podporuje všechny konstrukce jazyka C. Přesto lze narazit na několik odlišností. Pro jazyk C byla vydána norma ANSI již v roce 1989, novější ISO/IEC potom v roce 1990 a v roce 1999 V případě potřeby budeme tyto normy v článku označovat jako C90 a C99. Norma ANSI/ISO pro jazyk C++ byla vydána v roce Je zde zřejmé, že vývoj obou jazyků probíhá paralelně, a drobné odchylky se tudíž mohou vyskytnout i v budoucnu. Norma C99 obsahuje skutečně několik detailů, které nejsou ani v C90 a ani v C++. Větším problémem, než drobné odchylky v normách, je častěji podpora normy v kompilátorech, i když u dobrých kompilátorů je podpora normy na vysoké úrovni a s novějšími verzemi se stále zlepšuje Nové prvky jazyka C++ Největším rozdílem C++ oproti C je podpora objektově orientovaného programování. Základními stavebními kameny objektově orientovaného programování jsou abstrakce, dědičnost a polymorfismus. Jazyk C++ umožňuje vytvářet třídy, které tvoří abstraktní datové typy. Třídy zapouzdřují implementaci od vnějšího rozhraní. Dále mohou využívat jednoduchou a vícenásobnou dědičnost (tzn., že třída může být potomkem několika různých tříd). Polymorfismus je realizován především virtuálními funkcemi. Mezi další vlastnosti patří přetížené funkce a operátory, jmenné prostory, šablony, virtuální dědičnost, mechanismus výjimek, konstantní proměnné, spřátelené funkce či třídy a v neposlední řadě standardní šablonová knihovna obsahující řadu běžně používaných algoritmů. 3. Náročnost nových vlastností jazyka C++ Celá řada nových vlastností nemá výraznou režii při vykonávání programu. Jsou to případy, kdy kompilátor dokáže v čase překladu rozhodnout, která konkrétní funkce se zavolá (časná vazba). Týká se to dědičnosti, kdy lze v době překladu rozlišit, zda se bude volat metoda předka nebo potomka. Stejná situace se týká i přetížených funkcí (více funkcí má stejné jméno, ale liší se parametry - kompilátor rozezná, která funkce se má zavolat) a operátorů Přetížené operátory Přetížené operátory výrazně zjednodušují a zjednodušují zápis programu. Jedinou drobnou nevýhodou z hlediska programátora embedded aplikace může být, že jednoduchý vzorec může trvat i poměrně dlouhou dobu. To ale není novinka C++, i v C jsou operátory přetížené a například sčítání dvou krátkých celočíselných typů znamená ve výsledném kódu několik instrukcí, zatímco sečtení dvou čísel v plovoucí řádové čárce volá knihovní funkci, která může součet zpracovávat i několik milisekund Jmenné prostory Také jmenné prostory (namespace) neznamenají zátěž za běhu programu, pouze znamenají rozšíření identifikátorů a tudíž umí řešit kolizi názvů v rozsáhlejších projektech. Jmenné prostory umožňují zjednodušit názvy v jednotlivých prostorech. Takže odpadá v C poměrně časté přidávání zkratek nebo jmen modulů do jmen funkcí exportovaných z modulu. 21-2

3 3.3. Dědičnost Dědičnost nemá nároky při běhu programu, až na výjimku konstruktorů a destruktorů, které musí volat postupně konstruktory (případně destruktory) všech svých předchůdců. Naopak můžeme při vhodném návrhu ušetřit část kódu, který obsluhuje společné části příbuzných tříd a nemusí se tedy několikrát opakovat Virtuální metody Mezi náročné vlastnosti patří virtuální metody (funkce), kdy každý objekt má pointer na tabulku ukazatelů na virtuální metody a přístup k těmto metodám je díky několikanásobnému pointerovému přístupu pomalejší. Velmi podobná situace nastává v případě virtuální dědičnosti, kde potomek má referenci na předka a pro volání metod předka musí použít složitější přístup přes referenci. Náročnost tedy spočívá v potřebné paměti pro tabulku virtuálních metod a pointerů na tuto tabulku. Dále přístup k metodám přes tyto tabulky je pomalejší. Třetím aspektem je, že tyto metody nemohou být vloženy do místa volání (inline) Výjimky Systém výjimek je velmi elegantní a dokáže dobře zpřehlednit zdrojový kód, kde odděluje detekci chyby, zpracování výsledků funkce a reakci na chybu. Bohužel je tento mechanismus poměrně náročný. Poměrně často ani není podporován kompilátory pro embedded aplikace. V případě real-time systémů, kde obvykle musí systém reagovat v pevně daném čase, má tento systém další výraznou nevýhodu, a tou je neznámá doba reakce na detekovanou chybu Šablony Šablony jsou zvláštní kapitolou. Ze svého principu se šablony instancují v době překladu (instancí šablony je třída nebo funkce). Takže za běhu programu neznamenají časovou zátěž, tak jako virtuální funkce. Pokud ale použijete tento mocný nástroj neopatrně, může vám velmi snadno narůst velikost kódu nad možnosti daného embedded systému. S tím spojená druhá nevýhoda je, že se hůře odhaduje velikost výsledného kódu při použití šablon. Na druhou stranu můžete s pomocí šablon vytvořit nejrůznější pomůcky pro kontrolu správnosti kódu při překladu, šablonovou knihovnu funkcí založených na zásadách a podobně. Knihovna založená na zásadách implementuje nějaký algoritmus a zásady specifikují některé postupy, které knihovna použije. Zásady mohou například určovat, jakým způsobem se alokuje paměť nebo zda a jak má algoritmus knihovny pracovat s mutexy. Výhodou je, že zásady si vybírá uživatel knihovny, nikoli její autor. Toto téma je ale poněkud pokročilé a případný zájemce si je může nastudovat v literatuře, například [03]. 4. Slabiny jazyka C v porovnání s C Makra a konstanty Makra v C jsou užitečným a často užívaným nástrojem. Bohužel mají v sobě několik problémů, která činí makra snadno zranitelnými. Sice lze celou řadu těchto problémů potlačit, ale nikoli zcela odstranit. Při použití maker místo symbolických konstant je problémem, že tyto konstanty nemají typ. To zabraňuje kompilátoru kontrolovat použití 21-3

4 těchto konstant správně. Asi nejlepší řešení při použití maker vypadá takto: #define KONSTANTA ((uint8)42) #define VELKA_KONSTANTA ((uint32) L) C++ kompilátory mají konstantní proměnné, které tyto problémy nemají. const uint8 KONSTANTA = 42; V C jsou konstantní proměnné implementovány jako jakékoliv jiné proměnné. Jediným rozdílem je, že je kompilátor nedovolí jednoduše změnit. Tento přístup je v drtivé většině pomalejší a s delším kódem, než použití makra. Makro se totiž nahradí výslednou hodnotou již preprocesorem a kompilátor pracuje již jen výslednou hodnotou. V C nejsou konstantní proměnné dostatečně konstantní, v době překladu je kompilátor nepovažuje za konstanty a tak je nelze použít jako konstantní výraz při kompilaci. Následující příklad nelze zkompilovat v C, protože velikost pole musí být známa v době překladu ale v C++ je možno zkompilovat tento příklad zcela bez problémů. int const velikost_pole = 10; int pole[velikost_pole]; V C lze poměrně jednoduše získat adresu konstantní proměnné a tuto proměnnou změnit pomocí přístupu přes pointer. Potom se tato konstantní proměnná skutečně změní a to v celém programu. Naštěstí leží často taková proměnná v nepřepisovatelné paměti. V C++ jsou konstantní proměnné, stejně jako makra, přeloženy obvykle jako konstanty v instrukcích při plnění registrů. Pokud leží taková instrukce v nepřepisovatelné paměti (např. FLASH), tak nemůže být změněna jen tak nějakou chybkou v software Makra a funkce U některých jednoduchých a rychlých funkcí je režie spojená s voláním funkce a návratem větší nebo srovnatelná s provedením samotného těla funkce. Prostě by bylo jednodušší nahradit volání funkce jejím tělem. V C se to dělá pomocí maker s parametry (anglicky "function like macro"). To má ale své problémy, které se musí řešit důsledným závorkováním všech parametrů a celého výrazu. I tak se ale mohou objevit problémy, pokud se některý z parametrů použije v makru vícekrát. Z toho důvodu definuje C++ a nejnovější norma C99 klíčové slovo inline, které znamená, že tělo funkce se vloží přímo do místa volání. Např. #define max(a,b) (((a)>(b))?(a):(b)) se při použití maximum = max(leva++, prava++); rozbalí na výraz: maximum = (((leva++)>(prava++))?(leva++):(prava++)); což rozhodně nebude tak, jak si programátor představoval. V případě inline funkce inline int max(int a, int b) { return ((a>b)?a:b); } se výraz maximum = max(leva++, prava++); provede podle očekávání. Dalším problémem maker je, že v případě syntaktické chyby hlásí kompilátor chybu v místě použité (volání) makra. Najít chybu v makru, které používá několik dalších 21-4

5 maker a ty jsou opět postaveny na použití dalších maker, je velmi nepříjemná záležitost. Pokud makro není vůbec v programu použito, tak se neprovádí žádná kontrola makra. To může být výhodou, ale častěji se jedná o nevýhodu, kdy při psaní makra není kontrola kompilátoru k dispozici. Pokud naopak používáme v kódu makro, které je prozatím prázdné, ale jeho použití má syntaktickou vadu, tak se nám tato vada projeví až v okamžiku, kdy dané makro doplníme Zapouzdření V C lze řešit pomocí rozdělení jednotlivých modulů do souborů. Proměnné a funkce, které nemají být viditelné mimo modul, lze označit jako static. Pokud potřebujeme v nějakém modulu zpřístupnit funkci nebo proměnnou pro jeden jiný modul, pak ji musíme zpřístupnit pro všechny. Je sice možné nezveřejňovat deklaraci funkce či proměnné a kopii deklarace umístit též do spřáteleného modulu. Ovšem toto řešení není moc vhodné, protože musíme udržovat obě deklarace (v modulu samotném a ve spřáteleném modulu) konzistentní, což může být v případě údržby programu problém. C++ umožňuje privátní metody a atributy. Kromě toho umožňuje mechanismus spřátelených funkcí nebo tříd, které mají přístup i k privátním proměnným dané třídy. Výhodou přátel je, že deklarace třídy je stále jen jedna a přímo v deklaraci třídy vidíme kdo další má přístup k privátním metodám a atributům. Při využití mechanismu dědičnosti je možno použít chráněných atributů a metod, ke kterým mají přístup potomci Problémy s přechodem na C++ Až na pár výjimek by měl být program napsaný v C přeložitelný i C++ kompilátorem. Obecně platí, že C++ kompilátor má mnohem přísnější typovou kontrolu a některé konstrukce, které jsou v C korektní, budou problémem v C++. V tabulce najdete stručný seznam toho, co by vám C kompilátor měl umožnit, ale C++ vám odmítne přeložit. Nutno poznamenat, že následující seznam rozhodně nepatří do dobrého programátorského stylu. Ani u novějších C kompilátorů se následující věci neobejdou alespoň bez varování. 21-5

6 C++ Funkce nemá implicitní návratový typ pokud funkce vrací nějakou hodnotu, musí příkaz return vždy hodnotu vracet. Striktní kontrola prototypů funkce. void foo(); nemá žádné parametry C Implicitní návratový typ funkce je int lze použít return bez parametrů i ve funkci s návratovou hodnotou. Lze použít prototyp funkce bez udání parametrů. void foo(); může mít parametry. Pro funkce v C knihovně volané z C++ kódu je potřeba přidat klíčové slovo extern "C". Naštěstí to lze poměrně elegantně vyřešit v hlavičkových souborech pro všechny funkce jednou ranou. Výhodou této konstrukce je, že bez problémů funguje jak v C, tak v C++. Proto může být bez obav používána ve všech hlavičkových souborech, a to i v projektech, které nikdy nebudou kompilovány C++ kompilátorem. #ifdef cpluplus extern "C" { #endif... void PrototypCFunkce(void);... #ifdef cpluplus } #endif 5. Jazyk EC++ Tato zkratka znamená Embedded C++. U zrodu tohoto dialektu C++ stáli hlavní japonští výrobci mikroprocesorů NEC, Hitachi, Fujitsu a Toshiba. Účelem tohoto počinu bylo vybrat takovou podmnožinu jazyka C++, která přinese hlavní výhody jazyka C++ ale neobsahuje mechanismy nevhodné a potenciálně nebezpečné pro embedded systémy Seznam konstrukcí C++ které byly vynechány v EC++ 1. Vícenásobná dědičnost a virtuální dědičnost 2. Nové způsoby přetypování 3. Specifikátor mutable 4. Jmenné prostory 5. Identifikace typu za běhu programu (runtime type information) 6. Výjimky 7. Šablony Vícenásobná dědičnost bohužel přináší řadu problémů a to pro nejen programátora ale i pro kompilátor. Z toho důvodu celá řada objektově orientovaných jazyků nepodporuje vícenásobnou dědičnost. Jeden z příkladů je dědičnost typu diamant, kde třídy B a C jsou potomci nějaké třídy A. Potom má třída D, potomek třídy B a C, atributy z prapředka A dvakrát. To lze sice řešit pomocí virtuální dědičnosti, ale výsledek není většinou tak 21-6

7 efektivní. Násobná dědičnost je poměrně náročná na pochopení i údržbu. Mutable znamená, že objekt deklarovaný jako const se může změnit. V embedded systémech se ale konstantní objekt ukládá do paměti typu ROM. Potom takový modifikátor přináší jen zmatek a komplikace. 6. Efektivní používání jazyka C++ V článku [09] autor uvádí, že přepsáním C++ kódu z tříd na struktury a globální funkce se doba výpočtu zrychlila dvojnásobně. A současně se výrazně zmenšila velikost programu a použití zásobníku se také zmenšilo. Ale současně s přechodem z C++ do C byla objevena celá řada proměnných a metod, které sloužily pro výzkum v době vývoje algoritmu a pro ladění (debug) algoritmu. Dále se struktura tříd při změně na struktury zjednodušila, protože některé třídy byly pro finální algoritmus zbytečné. Pro podporu vektorů byl použit jiný algoritmus. V tomto případě lze předpokládat, že hlavní vliv mělo vyčistění programu od nepotřebných pozůstatků z doby vývoje algoritmu, nikoli přechod z C++ k C Základní tipy na zvýšení efektivity Členské metody mají implicitní pointer this. Pokud jej ale metoda nepotřebuje, tak ji označte klíčovým slovem static. Ušetří se tím předávání jednoho parametru. Statické atributy třídy jsou společné pro všechny instance dané třídy (objekty). Statické proměnné v modulu je lepší nepoužívat, norma to zavrhuje. Tzn. podporuje, ale v příštích verzích normy to již nemusí platit. Nešetřete klíčovým slovem const. V C++ má const mnohem více použití než v C. Její důsledné použití umožňuje lepší kontrolu a optimalizaci kompilátoru při překladu. Například: const &navratobjekt Funkce ( const int * const parametr) const Funkce vrací referenci na konstantní objekt. Parametrem je konstantní pointer na konstantní int. A konečně, funkce nemění objekt třídy. Jednoduché metody je vhodné označit jako inline, aby se vynechala režie spojená s voláním funkce. To se výrazně projeví v programech, kde je mnoho vrstev a inline expanze vede ve výsledku k velmi rychlému a efektivnímu kódu. Nepoužívejte virtuální metody zbytečně. Někdy je ale jejich použití vhodné Šablony Sice nejsou součástí EC++, ale umožňují velmi efektivní programové konstrukce, které se vykonávají v době překladu, a tudíž umožňují ve výsledku velmi pružně konfigurovatelný a přesto poměrně efektivní kód. Některé EC++ kompilátory podporují šablony jako rozšíření. 21-7

8 6.3. Další efektivní metody Zde je stručný seznam dalších technik, jak zvýšit efektivitu programu. I když se jedná o metody, které nemají souvislost s programovacím jazykem, je třeba na ně nezapomínat. Nastavení kompilátoru: Vypněte podporu pro systém výjimek, pokud je nepoužíváte. Vypněte podporu pro typové informace za běhu programu (Runtime Type Information = RTTI) Zapněte optimalizace. Dobře napsaný kód nemá většinou s velkými optimalizacemi problémy. Pokud nějaká funkce nebo modul nefunguje s velkou úrovní optimalizace, tak snižte úroveň optimalizace jen pro danou funkci či modul, nikoli pro celý projekt. Optimalizujte paměťové přístupy: Často používané proměnné dejte do nejrychlejší paměti. Některé procesory mají zrychlený přístup k jednotlivým bitům v některých oblastech paměti. Pro přenos většího bloku dat použijte DMA, pokud je k dispozici. Pro 16 a 32 bitové procesory může špatně zarovnaná proměnná degradovat rychlost přístupu. Při zpracování velkého bloku dat, který se nevejde do rychlé paměti (například obrázku) je často lepší si kousek (např. několik řádků) přenést do rychlé paměti, zpracovat a potom si zkopírovat další kousek. Je škoda přenášet na 16 a 32 bitových procesorech bloky dat bajt po bajtu. Pokud několikrát potřebujeme ve funkci nějakou proměnnou, ke které je zdlouhavý přístup (např. (ppole[i])->nejakapolozka[j]), tak bývá kratší a rychlejší si tuto hodnotu na začátku načíst do lokální proměnné a používat tuto proměnnou. Optimalizace výpočtů Na procesorech bez HW podpory plovoucí řádové čárky je aritmetika s pevnou řádovou čárkou mnohem rychlejší. Některé složité vzorce lze zjednodušit. Pro funkce lze najít v určitém rozsahu náhradu (Taylorův rozvoj, linearizace po částech, ) Někdy existuje prostě rychlejší algoritmus. A mnoho dalších metod. 7. Objektově orientované programování v C Základní mechanismy objektového programování, jako je abstrakce, dědičnost a polymorfismus, lze sice vytvořit a používat sice i v jazyce C, ale přeci jen to vyžaduje více úsilí. Fakt, že nejstarší kompilátory pro C++ kód převáděly na C, tuto skutečnost jen potvrzuje. Třídy lze nahradit strukturami, členské funkce dostanou navíc parametr na tuto strukturu jako náhradu za implicitní this. Obecně je vhodnější používat zavedené označení "me" místo this. Je to proto, aby bylo možno tento kód znovu použít i v C++ projektu. Dědičnost se může vypadat například takto: struct Predek {... } 21-8

9 struct Potomek { struct Predek super;... } Potomek potom může k atributu předka přistupovat pomocí me->super.nejakyatribut; a nebo ((Predek *) me)->nejakyatribut; Některé C kompilátory sice umožní použít strukturu předka jako nepojmenovanou položku ve struktuře potomka s jednodušším přístupem k položkám předka, ale toto řešení může způsobit dost komplikací při přechodu na jiný kompilátor Polymorfismus Virtuální metody je možno v C vytvořit, podobně jako to dělá C++ kompilátor, pomocí tabulky pointerů na virtuální metody, kdy každý objekt bude obsahovat pointer na tabulku své třídy Zapouzdření Přístupová práva lze rozlišovat například specifickým jménem, například privátní proměnné dvěma podtržítky na konci, chráněné jedním a veřejné bez podtržítka. Kompilátor sice nikomu nezabrání porušit přístupová práva, protože v C žádná nejsou, ale tento prohřešek lze snadno odhalit při kontrole kódu (code review) Porovnání Problémem je, že jazyk C za programátora neudělá spoustu věcí, o které se v C++ postará kompilátor. Jedná se například o zavolání destruktoru při skončení platnosti proměnné. Případné zájemce o objektové programování v C odkážeme na literaturu [04], příloha věnovaná C+. 8. MISRA Tato zkratka znamená Motor Industry Standard Association - asociace která připravila pravidla pro bezpečné psaní programů v C pro automobilový průmysl. Tyto pravidla se ale postupně šíří i do organizací, které se nezabývají aplikacemi pro automobilový průmysl. V tomto směru je pro C++ nevýhodou, že MISRA pravidla pro C++ dosud neexistují, když se podle dostupných informací tato pravidla připravují. Pro programátory, kteří se zajímají o bezpečné psaní programů (tzn. tak aby programy pokud možno fungovaly, i když se v nějaké nepříliš související části kódu něco změní), mohou být tato pravidla užitečná. 21-9

10 9. Závěr V dnešní době stále rostoucích požadavků na složitost embedded systémů je přechod k C++ poměrně snadný. Největší výhodou je, že vás ani po přechodu k C++ nikdo nenutí do objektů a proto můžete i nadále používat programové moduly, které jsou napsány v C. Největším problémem může být investice do nového kompilátoru, pokud váš stávající kompilátor nepodporuje C++. Většina dnešních kompilátorů podporuje C i C++. Pasti v C++ lze omezit vhodným návrhem programu a využitím výhod C++ lze získat kód minimálně stejně efektivní jako při použití C. A navíc může být daný kód čitelnější, snadněji udržovatelný a snáze znovupoužitelný. Rozhodně dobrým startem je použití EC++ kompilátoru, který může být na konkrétní platformu dostupnější než kompletní C++ kompilátor. 10. Seznam literatury [01] Stephen Prata Mistrovství v C++, 2. vydání. Computer press. [02] Quing Li, Caroline Yao Real-Time concepts for embedded systems. CMP Books [03] Andrei Alexandrescu Moderní programování v C++. Computer press. [04] Miro Samek Practical statecharts in C/C++; CMP Books 2002 [05] EC++ Technical Committee. [06] Mario Friedrich Highly efficient C++ code and automotive - a mutual exclusion?, Embedded world [07] Dan Saks Bail, return, jump, or... throw?; [08] Miroslav Virius Jazyky C a C++. Grada Publishing. [09] Ketul Patel. Porting PC Based algorithms to DSPs. Embedded Edge, Fall 2003 [10] Jakob Ostergaard C versus C++. [11] IAR compiler user guide

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

Teoretické minimum z PJV

Teoretické minimum z PJV Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov

Více

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem Jazyk C++ 1 Blok 3 Objektové typy jazyka C++ Studijní cíl Ve třetím bloku bude představen a rozebrán nejdůležitější objektový typ jazyka C++ a to sice třída. Po absolvování bloku bude student schopen navrhovat

Více

Jazyk C++ II. Výjimky

Jazyk C++ II. Výjimky Jazyk C++ II Výjimky AR 2013/2014 Jazyk C++ II Funkce abort Dříve byl obvyklý způsob zavolat metodu abort(). Metoda provádí okamžitě: Vyprázdnění vyrovnávací paměti, Ukončení celého programu, Vrátí číslo

Více

20. Projekt Domácí mediotéka

20. Projekt Domácí mediotéka Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý

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

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

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li: 13.4.2010 Typová konverze - změna jednoho datového typu na jiný - známe dva základní implicitní ("sama od sebe") a explicitní (výslovně vyžádána programátorem) - C je málo přísné na typové kontroly = dokáže

Více

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace 1) Charakterizujte křížový překladač Překlad programu probíhá na jiném procesoru, než exekuce. Hlavním důvodem je náročnost překladače na cílovém stroji by ho nemuselo být možné rozběhnout. 2. Objasněte

Více

Jazyk C++ I. Šablony 2

Jazyk C++ I. Šablony 2 Jazyk C++ I Šablony 2 AR 2013/2014 Jazyk C++ I Třídy template class TVektor { T *a; int n; static int PocInstanci; public: TVektor(int _n = 0) : n(_n) { a = new T[n]; PocInstanci++; } ~TVektor()

Více

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10 UNIVERZITA TOMÁŠE BATI VE ZLÍNĚ FAKULTA APLIKOVANÉ INFORMATIKY PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10 Využití zásobníku pro předání parametrů podprogramům a lokální proměnné Jan Dolinay Petr Dostálek Zlín

Více

Jazyk C++ I. Polymorfismus

Jazyk C++ I. Polymorfismus Jazyk C++ I Polymorfismus AR 2013/2014 Jazyk C++ I Úvod Metody s časnou vazbou jsou překládány jako obyčejné céčkovské funkce. Této metodě je předán jako první implicitní parametr this. Rozdíl mezi obyčejnou

Více

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Upozornění pro čtenáře a uživatele této knihy Všechna práva vyhrazena. Žádná část této tištěné či elektronické knihy nesmí být reprodukována a šířena

Více

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí Velké projekty v C velký = 100ky a více řádek udržovatelnost, bezpečnost, přehlednost kódu rozdělení programu do více souborů další prvky globální proměnné, řízení viditelnosti proměnných, funkcí Globální

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

Jazyk C++ II. Dynamické identifikace typů

Jazyk C++ II. Dynamické identifikace typů Jazyk C++ II Dynamické identifikace typů AR 2013/2014 Jazyk C++ II Úvod Jak můžeme zjistit druh objektu, na který ukazuje ukazatel? V případě nemusíme typ objektu znát, pokud se jedná o funkci virtuální,

Více

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

přetížení operátorů (o) přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - operátor je speciální

Více

Architektury CISC a RISC, uplatnění v personálních počítačích

Architektury CISC a RISC, uplatnění v personálních počítačích Architektury CISC a RISC, uplatnění v personálních počítačích 1 Cíl přednášky Vysvětlit, jak pracují architektury CISC a RISC, upozornit na rozdíly. Zdůraznit, jak se typické rysy obou typů architektur

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

INTELIGENTNÍ SNÍMAČE

INTELIGENTNÍ SNÍMAČE INTELIGENTNÍ SNÍMAČE Petr Beneš Vysoké učení technické v Brně, FEKT, Ústav automatizace a měřicí techniky Kolejní 4, 612 00 Brno, benesp@feec.vutbr.cz Abstrakt: Příspěvek se věnuje problematice inteligentních

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

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

GRAFICKÉ ROZHRANÍ V MATLABU PRO ŘÍZENÍ DIGITÁLNÍHO DETEKTORU PROSTŘEDNICTVÍM RS232 LINKY

GRAFICKÉ ROZHRANÍ V MATLABU PRO ŘÍZENÍ DIGITÁLNÍHO DETEKTORU PROSTŘEDNICTVÍM RS232 LINKY GRAFICKÉ ROZHRANÍ V MATLABU PRO ŘÍZENÍ DIGITÁLNÍHO DETEKTORU PROSTŘEDNICTVÍM RS232 LINKY Jiří Šebesta Ústav radioelektroniky, Fakulta elektroniky a komunikačních technologií Vysoké učení technické v Brně

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

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a Aplikace Embedded systémů v Mechatronice Michal Bastl A2/713a Aplikace Embedded systémů v Mechatronice Obsah přednášky: Opakování Pointery v C pole a řetězce předání funkci referencí Vlastní datové typy

Více

PROGRAMOVÁNÍ ŘÍDÍCÍCH SYSTÉMŮ

PROGRAMOVÁNÍ ŘÍDÍCÍCH SYSTÉMŮ VYSOKÁ ŠKOLA BÁŇSKÁ TECHNICKÁ UNIVERZITA OSTRAVA FAKULTA STROJNÍ PROGRAMOVÁNÍ ŘÍDÍCÍCH SYSTÉMŮ Procesy, paralelní procesy, souběžné zpracování Ing. Ivo Špička, Ph.D. Ostrava 2013 Ing. Ivo Špička, Ph.D.

Více

Úvod do architektur personálních počítačů

Úvod do architektur personálních počítačů Úvod do architektur personálních počítačů 1 Cíl přednášky Popsat principy proudového zpracování informace. Popsat principy zřetězeného zpracování instrukcí. Zabývat se způsoby uplatnění tohoto principu

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

Projekty pro výuku programování v jazyce Java

Projekty pro výuku programování v jazyce Java JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

Charakteristika dalších verzí procesorů v PC

Charakteristika dalších verzí procesorů v PC Charakteristika dalších verzí procesorů v PC 1 Cíl přednášky Poukázat na principy tvorby architektur nových verzí personálních počítačů. Prezentovat aktuální pojmy. 2 Úvod Zvyšování výkonu cestou paralelizace

Více

Jazyk C++ II. Šablony a implementace

Jazyk C++ II. Šablony a implementace Jazyk C++ II Šablony a implementace AR 2013/2014 Jazyk C++ II Úvod Dědičnost a kompozice nejsou vždy tou správnou odpovědí na požadavky znovupoužitelnosti kódu. Proto máme možnost definování určité třídy

Více

V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).

V dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011). Jazyk C++ 1 Blok 1 Úvod do programovacího jazyka C++ Studijní cíl První blok kurzu je věnován úvodu do problematiky programovacího jazyka C++. V bloku budou rozebrány historické souvislosti programovacích

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: Datové typy Vyučující: Ing. Milan Káža Třída: EK3 Hodina: 5 Číslo: V/5 Programování v jazyce

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

PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK

PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK PROGRAMOVÁNÍ V C++ URČENO PRO VZDĚLÁVÁNÍ V AKREDITOVANÝCH STUDIJNÍCH PROGRAMECH ROSTISLAV FOJTÍK ČÍSLO OPERAČNÍHO PROGRAMU: CZ.1.07 NÁZEV OPERAČNÍHO PROGRAMU: VZDĚLÁVÁNÍ PRO KONKURENCESCHOPNOST OPATŘENÍ:

Více

Abstraktní třídy, polymorfní struktury

Abstraktní třídy, polymorfní struktury Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství

Více

ZPRACOVÁNÍ NEURČITÝCH ÚDAJŮ V DATABÁZÍCH

ZPRACOVÁNÍ NEURČITÝCH ÚDAJŮ V DATABÁZÍCH 0. Obsah Strana 1 z 12 VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA STROJNÍHO INŽENÝRSTVÍ ÚSTAV AUTOMATIZACE A INFORMATIKY FACULTY OF MECHANICAL ENGINEERING INSTITUTE OF AUTOMATION

Více

Paměti a jejich organizace

Paměti a jejich organizace Kapitola 5 Paměti a jejich organizace 5.1 Vnitřní a vnější paměti, vlastnosti jednotlivých typů Vnější paměti Jsou umístěny mimo základní jednotku. Lze je zařadit mezi periferní zařízení. Zápis a čtení

Více

Operační systémy. Přednáška 8: Správa paměti II

Operační systémy. Přednáška 8: Správa paměti II Operační systémy Přednáška 8: Správa paměti II 1 Jednoduché stránkování Hlavní paměť rozdělená na malé úseky stejné velikosti (např. 4kB) nazývané rámce (frames). Program rozdělen na malé úseky stejné

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

Uživatelem řízená navigace v univerzitním informačním systému

Uživatelem řízená navigace v univerzitním informačním systému Hana Netrefová 1 Uživatelem řízená navigace v univerzitním informačním systému Hana Netrefová Abstrakt S vývojem počítačově orientovaných informačních systémů je stále větší důraz kladen na jejich uživatelskou

Více

Jazyk C++ I. Šablony

Jazyk C++ I. Šablony Jazyk C++ I Šablony AR 2013/2014 Jazyk C++ I Úvod Zatím známe programovací styly: Strukturované programování, Objektově orientované programovaní. AR 2013/2014 Jazyk C++ I 2 Příklady void Print(const int&

Více

SPECIFICKÝCH MIKROPROGRAMOVÝCH ARCHITEKTUR

SPECIFICKÝCH MIKROPROGRAMOVÝCH ARCHITEKTUR EVOLUČNÍ NÁVRH A OPTIMALIZACE APLIKAČNĚ SPECIFICKÝCH MIKROPROGRAMOVÝCH ARCHITEKTUR Miloš Minařík DVI4, 2. ročník, prezenční studium Školitel: Lukáš Sekanina Fakulta informačních technologií, Vysoké učení

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

Více

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC Informatika 2 Technické prostředky počítačové techniky - 2 Přednáší: doc. Ing. Jan Skrbek, Dr. - KIN Přednášky: středa 14 20 15 55 Spojení: e-mail: jan.skrbek@tul.cz 16 10 17 45 tel.: 48 535 2442 Obsah:

Více

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění

Více

Technické prostředky počítačové techniky

Technické prostředky počítačové techniky Počítač - stroj, který podle předem připravených instrukcí zpracovává data Základní části: centrální procesorová jednotka (schopná řídit se posloupností instrukcí a ovládat další části počítače) zařízení

Více

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a Aplikace Embedded systémů v Mechatronice Aplikace Embedded systémů v Mechatronice Obsah přednášky: Opakovaní Funkce v C Tvorba knihoven Konfigurační bity #pragma Makra v C #define Debugging v MPLAB Hardware

Více

ÚAMT FEKT VUT. mikroprocesor Rabbit. Diplomová prá ce. Tomá škreuzwieser. Brno 2004. Email: kreuzwieser@kn.vutbr.cz

ÚAMT FEKT VUT. mikroprocesor Rabbit. Diplomová prá ce. Tomá škreuzwieser. Brno 2004. Email: kreuzwieser@kn.vutbr.cz ÚAMT FEKT VUT Zá znamová karta pro mikroprocesor Rabbit Diplomová prá ce Tomá škreuzwieser Email: kreuzwieser@kn.vutbr.cz Brno 2004 Osnova prezentace Cíl mé prá ce (zadá ní) Proč jsou pamě ťové karty důležité

Více

Zvyšování kvality výuky technických oborů

Zvyšování kvality výuky technických oborů Zvyšování kvality výuky technických oborů Klíčová aktivita V.2 Inovace a zkvalitnění výuky směřující k rozvoji odborných kompetencí žáků středních škol Téma V.2.1 Logické obvody Kapitola 24 Vnitřní paměti

Více

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru Cíl přednášky: Vysvětlit principy práce s registry v architekturách RISC a CISC, upozornit na rozdíly. Vysvětlit možnosti využívání sad registrů. Zabývat se principy využívanými v procesorech Intel. Zabývat

Více

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

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

Práce s velkými sestavami

Práce s velkými sestavami Práce s velkými sestavami Číslo publikace spse01650 Práce s velkými sestavami Číslo publikace spse01650 Poznámky a omezení vlastnických práv Tento software a související dokumentace je majetkem společnosti

Více

Kapitola 1: Co je Microsoft Access? 27 Kapitola 2: Mnoho tváří aplikace Microsoft Access 41 Kapitola 3: Návrh databázové aplikace 75

Kapitola 1: Co je Microsoft Access? 27 Kapitola 2: Mnoho tváří aplikace Microsoft Access 41 Kapitola 3: Návrh databázové aplikace 75 Stručný obsah Část 1 Základy aplikace Microsoft Access Kapitola 1: Co je Microsoft Access? 27 Kapitola 2: Mnoho tváří aplikace Microsoft Access 41 Kapitola 3: Návrh databázové aplikace 75 Část 2 Vytváření

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

Systémová volání Mgr. Josef Horálek

Systémová volání Mgr. Josef Horálek Systémová volání Mgr. Josef Horálek Systémová volání = Systémová volání = volání jádra = základní komunikace aplikačních programů s jádrem = Tvůrce programu obvykle oddělen vrstvou standardní knihovny

Více

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D.

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D. Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D. Obsah kapitoly 1 Dynamické datové struktury 1.1 Příklad:

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

10. blok Logický návrh databáze

10. blok Logický návrh databáze 10. blok Logický návrh databáze Studijní cíl Tento blok je věnován převodu konceptuálního návrhu databáze na návrh logický. Blok se věnuje tvorbě tabulek na základě entit z konceptuálního modelu a dále

Více

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

Programování v C++ 1, 1. cvičení Programování v C++ 1, 1. cvičení opakování látky ze základů 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 1 2 Shrnutí procvičených

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

Jakub Čermák <jakub@jcermak.cz> http://www.jcermak.cz. Microsoft Student Partner

Jakub Čermák <jakub@jcermak.cz> http://www.jcermak.cz. Microsoft Student Partner Jakub Čermák http://www.jcermak.cz Microsoft Student Partner Úvod, příklady použití, trocha teorie Struktura aplikace Typy obecně, primitivní typy, speciální typy Podmínky, cykly, namespaces

Více

Mělká a hluboká kopie

Mělká a hluboká kopie Karel Müller, Josef Vogel (ČVUT FIT) Mělká a hluboká kopie BI-PA2, 2011, Přednáška 5 1/28 Mělká a hluboká kopie Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta

Více

Programování v jazyce C a C++

Programování v jazyce C a C++ Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu

Více

Principy objektově orientovaného programování

Principy objektově orientovaného programování Principy objektově orientovaného programování Třídy a objekty doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz C E T

Více

Procesor. Procesor FPU ALU. Řadič mikrokód

Procesor. Procesor FPU ALU. Řadič mikrokód Procesor Procesor Integrovaný obvod zajišťující funkce CPU Tvoří srdce a mozek celého počítače a do značné míry ovlivňuje výkon celého počítače (čím rychlejší procesor, tím rychlejší počítač) Provádí jednotlivé

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

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: 4.10.2011 8:01:48

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: 4.10.2011 8:01:48 LED_007.c Strana: 1/5 Nyní již umíme používat příkazy k větvení programu (podmínky) "if" a "switch". Umíme také rozložit program na jednoduché funkce a používat cyklus "for". Co se týče cyklů, zbývá nám

Více

Telekomunikační sítě Protokolové modely

Telekomunikační sítě Protokolové modely Fakulta elektrotechniky a informatiky, VŠB-TU Ostrava Telekomunikační sítě Protokolové modely Datum: 14.2.2012 Autor: Ing. Petr Machník, Ph.D. Kontakt: petr.machnik@vsb.cz Předmět: Telekomunikační sítě

Více

Šablonové metaprogramování v C++ Miroslav Virius KSI FJFI ČVUT

Šablonové metaprogramování v C++ Miroslav Virius KSI FJFI ČVUT Šablonové metaprogramování v C++ Miroslav Virius KSI FJFI ČVUT Šablonové (generické) metaprogramování Šablona v C++, genericita v jiných jazycích Výpočetní úplnost Problémy Příklad Porovnání s klasickým

Více

PB161 Základy OOP. Tomáš Brukner

PB161 Základy OOP. Tomáš Brukner PB161 Základy OOP Tomáš Brukner Sylabus - Co je to OOP? Jaké jsou základní principy OOP? Jak se projevují v C++? https://cs.wikipedia.org/wiki/strahovská_knihovna SELECT * FROM books WHERE pages < 250

Více

) informace o stavu řízené veličiny (předávaná řídícímu systému) - nahrazování člověka při řízení Příklad řízení CNC obráběcího stroje

) informace o stavu řízené veličiny (předávaná řídícímu systému) - nahrazování člověka při řízení Příklad řízení CNC obráběcího stroje zapis_rizeni_uvod - Strana 1 z 9 20. Úvod do řízení Řízení Zpětná vazba (angl. #1 je proces, kdy #2 část působí na základě vstupních informací a zpětné vazby na #3 část zařízení tak, aby se dosáhlo požadovaného

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

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

INFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE. Ing. Jaroslav Adamus. Gymnázium, SOŠ a VOŠ Ledeč nad Sázavou

INFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE. Ing. Jaroslav Adamus. Gymnázium, SOŠ a VOŠ Ledeč nad Sázavou INFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE Ing. Jaroslav Adamus Gymnázium, SOŠ a VOŠ Ledeč nad Sázavou REFERENČNÍ MODEL ISO/OSI VY_32_INOVACE_09_3_05_IT Gymnázium, SOŠ a VOŠ Ledeč nad Sázavou PROTOKOLY: jsou

Více

11. Přehled prog. jazyků

11. Přehled prog. jazyků Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 11 1 Základy algoritmizace 11. Přehled prog. jazyků doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

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

Kolaborativní aplikace

Kolaborativní aplikace Kolaborativní aplikace Michal Máčel Vema, a. s. Okružní 3a, 638 00 Brno - Lesná, macel@vema.cz Tomáš Hruška Fakulta informačních technologií Vysokého učení technického v Brně, Ústav informačních systémů,

Více

Aritmetika s velkými čísly na čipové kartě

Aritmetika s velkými čísly na čipové kartě Aritmetika s velkými čísly na čipové kartě Ivo Rosol ředitel divize vývoje OKsystem s.r.o. Praha, 23.5.2013 Spojujeme software, technologie a služby Čísla v kryptografii V kryptografii se zásadně pracuje

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

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Strukturované proměnné Struktura, union Jazyk C České vysoké učení technické Fakulta elektrotechnická A8B14ADP Jazyk C - Strukturované proměnné Ver.1.10 J. Zděnek 20151 Struktura

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

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

PB161 Programování v jazyce C++ Přednáška 10 .. PB161 Programování v jazyce C++ Přednáška 10 Šablony Nikola Beneš 23. listopadu 2015 PB161 přednáška 10: šablony 23. listopadu 2015 1 / 29 K zamyšlení Jaký je rozdíl mezi new int[10] a new int[10]()?

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

Principy operačních systémů. Lekce 6: Synchronizace procesů

Principy operačních systémů. Lekce 6: Synchronizace procesů Principy operačních systémů Lekce 6: Synchronizace procesů Kritická sekce Při multitaskingu (multithreadingu) různé procesy často pracují nad společnou datovou strukturou (např. zápis a čtení do/z fronty)

Více

SYSTÉM PRO AUTOMATICKÉ OVĚŘOVÁNÍ ZNALOSTÍ

SYSTÉM PRO AUTOMATICKÉ OVĚŘOVÁNÍ ZNALOSTÍ SYSTÉM PRO AUTOMATICKÉ OVĚŘOVÁNÍ ZNALOSTÍ PŘIBYL VLADIMÍR Fakulta managementu, Vysoká škola ekonomická v Praze, Jarošovská 1117/II, 377 01 Jindřichův Hradec priby-vl@fm.vse.cz Abstrakt: Příspěvek se zabývá

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

Architektura počítače

Architektura počítače Architektura počítače Výpočetní systém HIERARCHICKÁ STRUKTURA Úroveň aplikačních programů Úroveň obecných funkčních programů Úroveň vyšších programovacích jazyků a prostředí Úroveň základních programovacích

Více

Opakování programování

Opakování programování Opakování programování HW návaznost - procesor sběrnice, instrukční sada, optimalizace rychlosti, datové typy, operace (matematické, logické, podmínky, skoky, podprogram ) - paměti a periferie - adresování

Více

Konfigurace řídicího systému technikou Hardware In The Loop

Konfigurace řídicího systému technikou Hardware In The Loop 1 Portál pre odborné publikovanie ISSN 1338-0087 Konfigurace řídicího systému technikou Hardware In The Loop Szymeczek Michal Elektrotechnika, Študentské práce 20.10.2010 Bakalářská práce se zabývá konfigurací

Více

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky - Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky - Preprocesor je možné ovládat pomocí příkazů - řádky začínající

Více

PROCESOR. Typy procesorů

PROCESOR. Typy procesorů PROCESOR Procesor je ústřední výkonnou jednotkou počítače, která čte z paměti instrukce a na jejich základě vykonává program. Primárním úkolem procesoru je řídit činnost ostatních částí počítače včetně

Více

N e j č a s t ě j š í d o t a z y k e k u k i t V

N e j č a s t ě j š í d o t a z y k e k u k i t V Nejčastější dotazy ke Kuki TV Nejčastější otázky a odpovědi ke Kuki TV Tvoje otázka? 1. Jak dlouho trvá vyexpedování STB Kuki? Set-top boxy ke službě Kuki expedujeme zpravidla do 3 (pracovních) dnů od

Více

UŽIVATELSKÁ DOKUMENTACE PRO DODAVATELE. Stav ke dni 1. 8. 2013 v. 2.0

UŽIVATELSKÁ DOKUMENTACE PRO DODAVATELE. Stav ke dni 1. 8. 2013 v. 2.0 UŽIVATELSKÁ DOKUMENTACE PRO DODAVATELE Stav ke dni 1. 8. 2013 v. 2.0 Obsah: 1 Úvod... 3 1.1 Definice a zkratky... 4 1.2 Podmínky provozu... 4 1.3 Pokyny k užívání dokumentu... 4 1.4 Obecné informace o

Více