25. ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ (ALGORITIMIZACE ÚLOHY, VLASTNOSTI ALGORITMU, PŘEHLED SOUČASNÝCH ZPŮSOBŮ TVORBY PROGRAMŮ – OBJEKTOVÉ A VIZUÁLNÍ PROGRAMOVÁNÍ)
Postup vzniku počítačového programu Počítačový program – určitá funkční volba algoritmů, posloupnost instrukcí a dat a jejich zobrazení 1) Zadání úkolu – pokud chceme vyřešit nějaký problém, musíme určit jeho podstatu a stanovit jaký má být výsledek 2) Návrh postupu řešení a jeho algoritmizace - důležité jsou slovní formulace úkolu a algoritmus řešení, úkol se zapisuje v drobných krůčcích, aby je procesor mohl realizovat, výběr vhodného programovacího jazyka
3) Zápis programu, ladění programu, chyby - jestliže máme algoritmus, řešící danou úlohu a program ve zvoleném programovacím jazyku, můžeme začít vytvářet vlastní program, poté ho můžeme spustit - jestliže program funguje špatně, začneme ho ladit, abychom odstranili chyby Dva druhy chyb 1) Syntaktické – špatně zapsaný příkaz, který programovací jazyk nezná, překlad programu se zastaví a objeví se hlášení o chybě 2) Logické – program funguje, avšak ne tak jak má, mohli jsme se dopustit chyby v algoritmu 4) Podpora a údržba programu – pokud je vše v pořádku, máme program verze 1.0, dále bychom měli napsat návod k obsluze a program udržovat (radit uživatelům, odstraňovat chyby...)
Algoritmus a jeho vlastnosti Algoritmus – posloupnost operací, která řeší daný úkol 1) Hromadnost – algoritmus slouží k řešení celé skupiny navzájem si podobných úloh, úlohy jsou podobné, ale liší se vstupními daty 2) Konečnost – pro každá příslušná data, algoritmus po konečném počtu kroků skončí 3) Podmíněnost- operace i jejich návaznosti jsou jednoznačně určeny 4) Opakovatelnost– při stejných vstupních hodnotách dostaneme vždy stejný výsledek
Programování zakódování algoritmu do zvoleného programovacího jazyka cílem programování je vytvořit program, který vykazuje určité žádoucí chování proces psaní zdrojových kódů často vyžaduje odborné znalosti v mnoha různých oborech, včetně znalosti oblasti použití s algoritmy se setkáváme běžně ve svém životě procesorem těchto algoritmů jsme my, lidé jakýkoliv návod je postup algoritmu, např. kuchařské předpisy
Příklad – Algoritmus zatloukání hřebíků Zatluč hřebík do desky Analýza úlohy: Vstupní údaje: kladivo, hřebík, deska Výstupní údaje: hřebík zatlučen do desky Analýza: tlouct tak dlouho, dokud není hřebík zatlučen až po hlavičku Sestavení algoritmu Slovní popis: Vezmi kladivo a hřebík Přilož hřebík k desce Uhoď kladivem na hlavičku Je hřebík zatlučen? ANO - pokračuj bodem 5 NE - vrať se na bod 3 Ukonči činnost a odlož kladivo
Základní příkazy strukturovaného programování Strukturované programování – algoritmus se rozděluje na dílčí úlohy (funkce, procedury), které se spojují v jeden celek Příkaz – může být libovolná povolená řídící struktura, předpisují provedení jistých algoritmických činností Složený příkaz - předepisuje postupné (sekvenční) provádění dílčích příkazů, uzavřených mezi rezervovanými slovy begin a end, může být umístěno více příkazů
Podmíněný příkaz – základní řídící struktura v jakémkoliv programovacím jazyku, která umožňuje dynamicky reagovat na různá data (časté použití je v testování platnosti dat) Cyklus s podmínkou na začátku (příkaz while) -tento cyklus testuje podmínku před samotným provedením těla. z toho vyplývá, že cyklus nemusí proběhnout ani jednou - pokud není před prvním průchodem splněna podmínka, cyklus se jakoby přeskočí a pokračuje se následujícím příkazem - cyklus se používá v případě, pokud nevíme, kolikrát v programu proběhne. Ukončovací podmínka tedy závisí na nějaké akci (příkazu) uvnitř těla cyklu
Cyklus s podmínkou na konci (příkaz repeat) - používá se v případech, kdy víme, že cyklus musí být proveden alespoň jednou, přičemž nemusíme znát kolik opakování přesně bude - jestliže program dospěje k cyklu, provede bez okolků všechny příkazy v jeho těle a potom narazí na podmínku - pokud je tato podmínka splněna, program se vrací na začátek těla cyklu a ten se opakuje. V opačném případě je cyklus ukončen
Cyklus s pevným počtem opakování - používáme ho všude tam kde předem známe počet opakování příkazu u těchto cyklů používáme proměnnou pro řízení počtu opakování, jejíž hodnotu lze výhodně využít i uvnitř těla cyklu Procedury a funkce - tvoří posloupnost instrukcí, které potřebujeme v programu na různých místech zopakovat - jsou to ve své podstatě podprogramy, logické uzavřené programové celky
Objektově orientované programování objektově orientované programování má své počátky na konci 70. let minulého století do té doby byl používán strukturovaný přístup a jednotlivé problémy se dekomponovaly na menší celky až po nejnižší úroveň (metoda shora dolů) naproti tomu objektový přístup funguje na principu zdola nahoru, kdy jsou definovány základní stavební prvky a z nich je teprve celý program skládán díky tomu je možné tyto prvky opětovně použít, stačí jen zajistit jejich společnou existenci a komunikaci s ostatními
Koncepce: Objekty – jednotlivé prvky modelované reality (jak data, tak související funkčnost) jsou v programu seskupeny do entit, nazývaných objekty. Objekty si pamatují svůj stav a navenek poskytují operace (přístupné jako metody pro volání) Abstrakce – programátor, potažmo program, který vytváří, může abstrahovat od některých detailů práce jednotlivých objektů. Každý objekt pracuje jako černá skříňka, která dokáže provádět určené činnosti a komunikovat s okolím, aniž by vyžadovala znalost způsobu, kterým vnitřně pracuje
Zapouzdření – zaručuje, že objekt nemůže přímo přistupovat k „vnitřnostem“ jiných objektů, což by mohlo vést k nekonzistenci. Každý objekt navenek zpřístupňuje rozhraní, pomocí kterého (a nijak jinak) se s objektem pracuje Skládání – Objekt může obsahovat jiné objekty Delegování – Objekt může využívat služeb jiných objektů tak, že je požádá o provedení operace.
Dědičnost objekty jsou organizovány stromovým způsobem, kdy objekty nějakého druhu mohou dědit z jiného druhu objektů, čímž přebírají jejich schopnosti, ke kterým pouze přidávají svoje vlastní rozšíření tato myšlenka se obvykle implementuje pomocí rozdělení objektů do tříd, přičemž každý objekt je instancí nějaké třídy každá třída pak může dědit od jiné třídy (v některých programovacích jazycích i z několika jiných tříd)
Polymorfismus – odkazovaný objekt se chová podle toho, jaké třídy je instancí pokud několik objektů poskytuje stejné rozhraní, pracuje se s nimi stejným způsobem, ale jejich konkrétní chování se liší podle implementace u polymorfismu podmíněného dědičností to znamená, že na místo, kde je očekávána instance nějaké třídy, můžeme dosadit i instanci libovolné její podtřídy, neboť rozhraní třídy je podmnožinou rozhraní podtřídy u polymorfismu nepodmíněného dědičností je dostačující, jestliže se rozhraní (nebo jejich požadované části) u různých tříd shodují, pak jsou vzájemně polymorfní
Vizuální programování Vizuální IDE (vývojové prostředí) umožňují uživateli vytvářet nové aplikace přemístěním programovacích stavebních bloků nebo uzlů a vytvořením vývojových diagramů nebo blokových schémat, které jsou dále přeloženy IDE na počátku vytvoří prázdné okno (formulář) budoucí aplikace. V režimu vizuálního návrhu vkládáme pomocí myši do okna požadované komponenty – IDE okamžitě vytvoří odpovídající zdrojový kód v příslušném jazyce.
Vlastnosti komponent (název, umístění, nápis na ní, barvu, viditelnost atd.) můžeme měnit pomocí inspektoru objektů, přičemž změny se opět ihned promítají do vizuálního návrhu a generovaného zdrojového kódu Prostřednictvím inspektoru objektů můžeme také pracovat s událostmi jednotlivých objektů a definovat ohlasové metody na různé akce (stisknutí tlačítek, pohyb myši, uzavření okna apod.) Přejdeme-li do režimu zdrojového kódu, můžeme pracovat se zdrojovým kódem jednotlivých tříd. Případné úpravy se při návratu do režimu vizuálního návrhu ihned zobrazí – z toho důvodu hovoříme o tzv. dvoucestném nástroji
Vytvořily: ŽANETA ŠPUNDOVÁ, SÁRA POVALILOVÁ