Úvod 1 2 3 4 Příklady Testy

Lekce 4

Obsah


Anotace kapitoly
V této kapitole se seznámíte s obecnými pojmy, které programátor potřebuje nutně znát. Po prostudování této kapitoly byste měli umět odpovědět na otázky například jaké jsou druhy programovacích jazyků, a jak je rozdělujeme, co je to strukturované, systémové a aplikační  programování, co znamená pojem GUI a API, co se rozumí pod pojmem vývojové prostředí a jaké jsou možnosti tvorby programu.

Úvod

V předcházejících kapitolách jste se seznámili se základními programovacími  technikami a využili jste je v jednoduchém výukovém  prostředí Ferda. Téměř se všemi těmito technikami a s mnoha dalšími se programátor setká při psaní programů ve vyšších programovacích jazycích.
Současně jste se seznámili s některými termíny, které se při programování běžně používají. Pro ověření znalostí těchto pojmů je na konci této kapitoly  umístěn teoretický test. Tato kapitola provede znovu shrnutí základních teoretických pojmů.


Mikroprocesor, program a procesor

Programovací jazyky pro programování počítačů vznikly teprve tehdy, kdy počítače dosáhli určité úrovně. Počátek můžeme spatřovat v pracích pana von Neumanna, který navrhl současnou strukturu běžných počítačů a použil postup, kterým zjednodušil celý proces zpracování informací v počítači. Tento nápad spočíval v tom, že není třeba ukládat na různá oddělená místa v paměťových médiích program a data, která tento program zpracovává, neboť program jsou vlastně také zvláštní druh dat. Tedy s daty určenými ke zpracování a s programy uloženými ve zdrojovém či strojovém kódu je možné zacházet shodně. Pokud ovládáte datové struktury PC (t.j. pojmy disk, složka či adresář, soubor), tak teoretický základ této struktury pochází od pana von Neumanna.

Jádrem počítače je mikroprocesor - elektronický integrovaný obvod o mnoha miliónech elementárních součástí, který řídí činnost počítače a provádí matematické a logické operace s daty. Toto srdce počítače tedy určuje základní kvalitu počítače a tak dnešní PC jsou charakterizovány zejména typem procesoru - 386, 486, Pentium, Pentium II, Pentium III, ... Tento mikroprocesor počítače nefunguje sám od sebe, ale pro svou činnost potřebuje program. Základní program, který mikroprocesor neustále vykonává je některý z programů operačního systému počítače. Programy operačního systému zajišťují komunikaci s uživatelem, práci se soubory a disky, ovládají periferie počítače, řídí grafické zobrazování, zajišťují vnitřní programové služby atd. Tyto programy jsou vytvářeny programátorskými tými, které provozují takzvané systémové programovaní - programování počítačových systémů. Nejznámější jsou firmy Microsoft, IBM, DR, Apple aj.
Program pro mikroprocesor počítače, který je určen přímo pro uživatele - uživatelský program, pak umožňuje běžnou práci s počítačem tak jak ji známe, psát texty, kreslit obrázky, přehrávat a nahrávat zvuky, hrát hry, spouštět videosekvence atd. Těmto programům, které jsou určeny přímo pro uživatel se říká aplikační programy a programátorům, kteří je vytvářejí pak progamátoři uživatelských aplikací.
Program pro mikroprocesor, ať už systémový nebo aplikační, je tvořen jednotlivými příkazy pro mikroprocesor - instrukcemi. Tedy program pro mikroprocesor je posloupnoust (řada) instrukcí, které je schopen mikroprocesor interpretovat (pochopit) a vykonat. Vlastní program, který mikroprocesor přímo vykonává je tvořen řadou dvojkových (binárních) čísel. Pro snažší zápis a čtení těchto kódů se tato čísla při výstupu na obrazovku a tiskárnu převádějí do šestnáctkové číselné soustavy (hexadecimální čísla). Přímá tvorba a čtení strojového kódu se již dnes běžně vůbec nepoužívá a tento strojový jazyk je výsledkem práce překladače a linkeru  některého z vyšších programovacích jazyků.
Procesor obecně nemusí být pouze mikroprocesor. Procesor - vykonavatel příkazů - může být jakékoliv zařízení, které vykonává určitou množinu jemu dostupných a známých příkazů. Příkladem procesoru může být kuchař (kuchařka) v kuchyni. Pak programem pro procesor - kuchaře  je kuchařská kniha, počítač je celá kuchyň, vstupními daty jsou suroviny vstupující do kuchyně a objednávka jídla, výstupními daty jsou hotová jídla. V minulých kapitolách byl takovýmto procesorem Ferda a programem pro něj textový soubor s řádky, na nichž byly uvedeny instrukce, kterým Ferda rozuměl a které provedl.


Programovací jazyky

Z dnešního hlediska lze programovací jazyky rozdělit podle několika hledisek.
První hledisko je rozdělení programovacích jazyků podle vývojového hlediska na programovací jazyky nižší a programovací jazyky vyšší. Nižší jazyky se nazývají též strojově orientované jazyky, to znamená že program napsaný v takovémto jazyku je přímo vázán na typ mikroprocesoru počítače a na přesné umístění v paměti počítače, na kterém bude spuštěn. Mezi nižší programovací jazyky je možné zařadadit programování ve strojovém kódu počítače (jazyk strojového kódu)  a program psaný v jazyce symbolických adres - assembleru. Vyšší programovací jazyky byly zavedeny pro zjednodušení práce programátora a pro jejich zápis se využívají běžná anglická slova. Prvním vyšším programovacím jazykem byl Fortran, následoval Algol a řada dalších. Podrobnosti jsou uvedeny zde.
Další hledisko pro rozdělení programovacích jazyků je systém přístupu k programování, ke stavbě programu z hlediska programátora.
První druh programování bylo lineární programování s podmíněnými a nepodmíněnými skoky uvnitř programu. Tímto způsobem se programuje v základním jazyku symbolických adres - assembleru.
Příklad krátkého programu v assembleru:

                   MOV CX, 45  (instrukce pro mikroprocesor - vlož do registru CX číslo 45)
                   MOV AX, 0    (instrukce pro mikroprocesor - vlož do registru AX číslo 0)
@preskok:  ADD AX, 5     (instrukce pro mikroprocesor - přičti k obsahu registru AX číslo 5)
                   DEC CX          (instrukce pro mikroprocesor - sniž hodnotu registru CX o 1)
                   JNZ @preskok  (toto je příkaz skoku na návěští @preskok - skok průběhu programu není-li v registru CX nula)
                   RET                 (instrukce pro mikroprocesor - návrat  do původního programu)
Program přičítá do registru procesoru AX číslo 5 a to tolikrát, jaká je počáteční hodnota v registru procesoru CX.
Úvod do programování v jazyku symbolických adres - assembleru je připravován zde.

Tento druh programování byl velice náročný na stavbu rozsáhlejších programů a tak bezprostředně se začali vyvíjet jazyky, které umožňovaly přímý přepis základních algoritmických struktur (cyklů, podmíněných příkazů atd.) do programu. Tyto jazyky zavedli pojem podprogram, procedura a funkce a řadu dalších vylepšení pro zpřehlednění zápisu programu. Základním ovšem neustále zústával klasický algoritmus, který zpracovával data pomocí příkazů pro práci s daty. Tento typ programování se dá nazvat procedurální programování a jeho základy jste probrali v jazyku Ferda. Postup spočívá ve stavbě složitého programu z jednodušších procedur a funkcí až nejjdnodušší procedury obsahují pouze elementární příkazy jazyka. Současně se propaguje takzvané strukturované programování, které má zajistit přehlednost ve zdrojových textech programů a umožnit týmovou spolupráci při jejich tvorbě. Jedním z prvních programovacích jazyků, který se dočkal masového rozšíření byl jazyk BASIC. Typickým jazykem pro procedurální programování je jazyk PASCAL, který byl vyvinut panem Wirthem pro účely výuky programování a postupně se z něj stal profesionální programovací jazyk. Ukázka krátkého procedurálního programování v jazyku Pascal 5.5 (překladač je uvolněn zdarma pro nekomerční použití - download ve formátu ARJ - 972KB zde)

program UKAZKA; 
 uses crt; 

 procedure SMAZaNAPIS; 
   begin 
     clrscr;
     writeln('Prave jsem smazal obrazovku.'); 
   end;
 procedure NastavBarvu(color:integer);
   begin
    setcolor(color); 
   end;
 begin 
   smazanapis;
   nastavbarvu(red);
 end.





Při tvorbě čím dál složitějších programů se zjistilo, že typické procedurální programování nestačí pro vyjádření velmi složitých datových struktur a proto byl vyvinut v rámci dosavadních jazyků postup, který zabudoval vytváření objektů přímo do struktury překladače. Vzniklo objektové programování, které začalo pracovat s pojmy CLASS a OBJEKT, zavedlo pojem dědičnosti objektů a zapouzdření dat, procedur a funkcí do objektu a mnoho dalších programovacích prvků. Filosofie vytváření programu pak směřovala ne k práci s procedurami ( i když ty zůstaly základním prvkem programu), ale k vytváření a odvozování datových tříd a objektů, které s těmito třídami pracují. Typickými zástupci programovacích jazyků tohoto objektového programování (nebo objektově zaměřeného programování) jsou programovací jazyky Turbo Pascal, Turbo C. Součástí programovacího prostředí se pak staly objektově zaměřené knihovny s objekty, které programátor již jako hotové mohl a vlastně v mnoha případech musel použít.
Ukázka krátkého zápisu zdrojového kódu v jazyku TurboPascal je zde.


S nástupem grafických uživatelských prostředí (anglická zkratka GUI - Grafics User Interface) se hlavním ovládacím prvkem programu stal kurzor myši.V důsledku to znamená, že při najetí kurzorem myši na určitý grafický objekt se cosi stane - vyvolá se určitá událost. Tedy z hlediska uživatele se změní kurzor myši na jiný typ kurzoru, při kliknutí myší se například otevře okno či se spustí program. Programátora tedy zajímají události, které se při nějaké akci uživatele nebo i akci vnitřní, vykonají. Filosofie tohoto způsobu programování lze označit jako programování řízené událostmi. Tedy v programu jsou určeny události, na které pomocí procedur program reaguje a vykonává určité akce s obrazovými či vnitřními daty. Typickým programovacím jazykem je jazyk používaný překladači  Borland Pascal či Borland C++ nebo překladač Java.
Poslední trend v tomto způsobu programování byl spojit visuální prvky uživatelského prostředí a události, které se tohoto prvku týkají. Vzniklo takzvané visuální programování. Při visuálním programování se na plochu umisťují jednotlivé ovládací prvky či dokonce celé předem připravené aplikace, nastaví se jejich vlastnosti a poté se též nastaví rekace na jednotlivé možné události - kliknutí myši, pohyb myši, stisk klávesy, tik vnitřních hodin apod. Typickými zástupci programovacího prostředí visuálního programování jsou Visual Basic, Delphi, Visual C++, Visual JAVA. Například IDE prostředí programu Borland Delphi Inprise je na následijícím obrázku. Při psaní zdrojových textů podprogramů se pak využívá nejnovější varianta jazyka Pascal - Object Pascal.

Ukázka programovacího okna budoucího programu s vloženými objekty - Button (tlačítko) a Image (obrázek).
Ukázka přeloženého programu.

Tedy rozlišujeme prostředí pro psaní programů  (anglická zkratka je  IDE)  - například Delphi a programovací jazyk, který v tomto prostředí používáme - Object Pascal.
Ukázka podprogramu v Object Pascalu.

implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
 close;
end;
end.

Strukturované programování

Pokud vytváříme krátký program, je možné ho celý napsat "z hlavy" a jestliže se ke zdrojovému kódu někdy vrátíme, není třeba mnoho času na to, abychom strukturu programu pochopili a případně dopsali či upravili jeho jednotlivé části. Pokud ovšem má program stovky a tisíce řádků zdrojového kódu, je potřeba si program rozepsat takovým způsobem, aby se v něm vyznal nejen autor, ale i ostaní spoluautoři. V týmové práci je navíc nutné zadat přesné specifikace, s jakými daty má příslušná část programu pracovat, jaká data má předávat a jaká požadovat, jak má spolupracovat s ostaními programy atd. Tyto požadavky na programátorské týmy se projevili ve vytvoření postupu, který se nazývá strukturované programování. U tohoto typu programování se postupně vytváří a určuje programová struktura včetně komentářů zdrojového kódu, jsou zadány přesné části programu, které zpracují jednotliví programátoři a stanoví se postup vytváření a odladění jednotlivých částí výsledného produktu. S náhledem jsme se setkali v programování pro Ferdu, kde jsem na ukázce uvedl postup vytváření zdrojového kódu shora dolů. Nejdříve je stanovena základní struktura programu a specifikace dat a teprve poté se rozepisují jednotlivé procedury a funkce, případně se vytvářejíé podpůrné knihovny a soubory dat.


Systémové a aplikační programování

Programátor může buď psát programy, které slouží přímo uživateli - aplikace typu textového či grafického editoru, nebo programy, které pracují  přímo s operačním systémem počítače či přímo píše operační systém pro počítač nebo některé jeho části. Vlastní vytváření kódu.se liší vpodstatě jen v použitých knihovnách podprogramů a v případě programování systému i kvantem vědomostí programátora. Systémové programování používá postupy, které přímo ovládají základní systémové funkce sytému, přímé přístupy na disk či do paměti počítače, tedy musí velmi dobře znát nejen "svůj" programovací jazyk, ale mít přehled o programování v assembleru a znát datové struktury souborů. Tedy vytváříte li program, který bude zobrazovat obrázek na obrazovku (nějaký grafický prohlížeč) můžete využít již hotových knihoven příslušného programového prostředí. Pak programátor programujete aplikačně. Nebo může tentýž program napsat za použití přímých přístupů do paměti s využitím jádra operačního systému a BIOSu - pak programuje systémově. Ve skutečnosti není mezi těmito přístupy velký rozdíl, neboť i aplikační programátor musí často přistupovat k tvorbě svého programu za požití systémových prostředků.


ZÁVĚREČNÉ TESTY