Přeskočit na obsah

Úvod do programování

Co je programování a k čemu slouží

Abychom odpověděli na tuto otázku, tak si připomeňme co je počítač. Počítač je zařízení které, jak název napovídá, počítá. Počítač je tak důmyslný, že neumí řešit pouze jednu úlohu, ale podle příkazů které mu dáme může řešit úlohy různého druhu. Posloupnost takévých příkazů nazýváme program a programy se programují. Můžeme tedy říct, že programování je navržení takové posloupnosti příkazů, které vedou k vyřešení nějakoho úkolu či realizaci nějakého výpočtu.

Historická vsuvka

První o kom bych se rád zmínil je Basile Bouchon. Basile Bouchon byl tkalec a vynálezce. Jeho jméno zde připomínám proto, že jako první použil děrný štítek a to na ovládání tkalcovského stavu (1725). Jeho vynález vylepšili Jean-Baptiste Falcon (1728) a Jacques Vaucanson (1740), i přestože jejich vylepšení řídilo tkaný vzor, jejich stav vyžadoval stále asistenci při ovládání mechanismu. Jejich vynález dále vylepšil Joseph Marie Jacquard, jehož stav pracoval automaticky (1804).

Dalším důležitým člověkem ve vývoji počítačů je Charles Babbage, který je někdy označován jako “otec počítačů”. V době kdy Babbage žil se již hojně používaly matematické tabulky. Ať ve vědě, navigaci, inženýrství nebo v matematice musely být tyto tabulky někým spočítány. (Ano tenkrát matematické tabulky počítali lidé na papíře.!) Při tomto procesu vznikaly chyby. Okolo roku 1822 Babbage vynalez Diferenční stroj, který dokázal automaticky řešit matematické rovnice. Později postavil mnohem komplexnější stroj nazývaný Analitický stroj. Analytický stroj byl mnohem univerzálnější a dal se programovat. Neprogramoval se ničím jiným než děrnými štítky.

Poslední o kom je nutné se zmínět je první programátor. Vlastně programátorka abych byl přesný. První byla Lada Lovelace, dcera básníka lorda Byrona, která ve svých poznámkách k Babbagově analytickému stroji napsala algoritmus pro výpočet Bernoulliho čísla, který se tak stal prvním algoritmem zpracovatelný počítačem.

Basile_Bouchon_1725_loom

Tkalcovský stav Basila Bouchona.

jacques_loom

Tkalcovský stav Josepha Jacquarda.

jacques_loom

Portrét Jesepha Jacquarda utkaný stavem, který vynalezl. Tkalcovský stav byl ovládám pomocí cca 24000 děrných štítků.

CharlesBabbage

Portrét Charlese Babbage.

Babbage_Difference_Engine

Diferenciální stroj Charlese Babbage.

Ada_Lovelace_portrait

Portrét Ady Lovelance.

Hardware

Než začneme počítač programovat bylo by dobré si něco říct o tom jak počítače fungují. V roce 1945 John von Neumann navrhl model samočinného počítače, viz obrázek. Jeho model je složen z 5 částí: Operační paměť-je v ní uložen program, zpracovávaná data a výsledky výpočtu, ALU (aritmetickologická jednotka)-provádí aritmetické a logické výpočty, řadič-řídí činnost všech částí a vstupní a výstupní jednotky-slouží jako vstup a výstup.

Princip činnosti toho modelu je následující: přes vstupní jednotku a ALU se umístí program do operační paměti. Stejným způsobem do operační paměti umístíme zpracovávaná data. Příkazy se následně posílají do řadiče, který řídí veškerou činnost. Pokud je cílem výpočtu ALU je výsledek uložen do paměti a zároveň do řadiče, který rozhodne co dál. Nakonec jsou výsledky poslány přes ALU na výstupní jednotku.

vonNeumanovoSchema

von Neumannovo schéma.

Vývoj progarmování

Programování dnes není stejné jako kdysi. První počítače byli pomalé a měli malou paměť. Nebylo tedy možné psát dlouhé programy protože by si je počítač “nezapamatoval”. S vývojem výpočetní techniky se vyvijely také způsoby jakými lidé programovaly.

1. strojový kód

Strojový kód je programovací jazyk 1. generace. Programátor zapisoval instrukce v jazyce kterému příslušný hardware rozuměl a komunikoval tak přímo s procesorem. Po programátorovy vyžadoval velkou píli a pozornost.

    2104
    1105
    3106
    7001
    0053
    FFFE
    0000
    					

2. jazyk symbolických instrukcí

Jazyk symbolických instrukcí někdy také nazývaný assembler byl 2. generací programovacích jazyků. Od strojového kódu se principielně neliší. Stále po programátorovi vyžaduje znalost architekruky, registrů a instrukčních sad mikroprocesoru. Ale na rozdíl od strojového kódu si nemusí programátor pamatovat číslo instrukce, ale pouze jení symbolický název. Kód se následně překládá do strojového kódu a může být vykonán.

    ORG 100
    LDA A
    ADD B
    STA C
    HLT
    DEC 83
    DEC –2
    DEC 0
    END
    					

3. generace

Skutečná revoluce přišla s 3. generací programovacích jazyků, které již vynikají mírou abstrakce zdrojového kódu. Mírou abstrakce se myslí to jakým způsobem je zdrojový kód zapsán. Je kladen větší důraz na to aby kód byl pro lidi dobře čitelný. Tento způsob zápisu vyžaduje, aby byl zdrojový kód nejdříve zkompilován než bude možné ho spustit. Kompilace je v podstatě přeložení našeho zdrojového kódu do strojového kódu. Tím se také odstiňuje nutnost znalosti architektury, neboť o správný překlad našeho kódu do strojového kódu pro daný hardware zařizuje kompilátor.

Tato generace jazyků podporovala metody strukturovaného programování, o kterém pojednává následující část, objektově orientované progarmování a další, pro nás již ne tak důležité, přístupy.

Strukturované programování

Strukturované programování vzniklo za účelem větší přehlednosti, strozumitelnosti, kvality, … kódu. Když programujeme, tak většinou ne bez chyb. Strukturované programování usnadňuje orientace v kódu a zmenšuje pravděpodobnost chyby popř. čas jejího hledání. Tím se urychluje vývoj softwaru.

Koncept strukturovaného programování nám říká, že každý program se na nejnižší úrovní může skládat z následujících řídících struktur:

  1. Sekvence - Sekvence je posloupnost instrukcí, které se provádějí v přesně určeném pořadí jedna po druhé.
  2. Větvení - Přikazy jsou vykonávány v závislosti na stavu programu.
  3. Cykly - Příkazy se provádějí opakovaně dokud není dosaženo nějakého stavu.

Tyto řídící struktůry se dájí sdružovat do podprogramů, funkcí či procedur na které se lze odkazovat jako na příkaz.

Úvod do programování

Algorytmy

Při programování se snažíme řešit nějakou úlohu. Přesnému postupu jakým lze daný problém vyřešit se říká algoritmus.

V praxi jsou důložité v některém ohledu “kvalitní” algoritmy. Například nejrychleji řeší danou úlohy nebo nejpřesněji apod.

Diagramy

Algoritmy lze zapisovat pomocí diagramů. V mnoha textech a knihách o algoritmech můžete nalézt algoritmy zakraslené pomocí Vývojových diagramů. Vývojové diagramy jsou dlouho zastaralé. Budeme se zde tedy držet moderní varianty a tou je UML - diagram aktivit. UML (Unified Modeling Language) je grafický jazyk pro návrh a dokumentaci systémů (ne jen počítačových). Diagram aktivit je pak jeden z několika druhý diagramů které UML zahrnuje a skvěle se hodí pro popis algoritmů.

Activiti diagram

Každý proces v diagramu je zakreslen jako sekvence jednotlivých kroků, které jsou zakresleny jako: akce (- dále nedělitelné kroky) nebo vnořené akce (-vpodstatě jde o další proces který se zkládá z aktivit). Posloupnosti akcí se říká tok aktivity.

Základní symboly v digramu jsou:

Inicializační bod
UML start symbol

Vyznačuje záčátek toku.

Koncový bod
UML end symbol

Označuje konec toku.

Aktivita
UML statement symbol

Vyznačuje aktivitu. Do symbolu napíšeme co daná aktivita dělá.

Řídící tok
UML flow symbol

Je vyznačen šípkou. A ukazuje směr toku.

Podmínka
UML condition symbol

Používáme když se nám tok rozděluje na větve v závislosti na podmínce.

UML double dependence

Pokud se ovšem má akce spustit pokud je libovolná z předchozích akcí hotova, tak musíme použít spojovník: (Je to stejný symbol jako podmínka.)

UML connection symbol

Zásady programování

Kromě toho, že je progarmátor omezen pravidli daného programovacího jazyka, se ustálily mezi programátory časem prověřené poučky a techniky. V angličtině se těmto poučkám říká Best practices. Jde o doporučenou sadu technik pro bezpečný, robustní, snadno čitelný a pochopitelný kód.

  • Komentáře

    Kdaždý kód a jeho části je dobré opatřit komentáři. Tyto komentáře nám později mohou pomoci v rychlé orientaci (když se například po měsíci k němu vrátíme). Popřípadě pomoct v orientaci někomu jinému.

  • Modularita

    Program je vhodné rozdělovat do samostatných částí. V každém jazyku se tyto části mohou nazývat jinak. My jim budeme říkat procedury a funkce. S modularitou souvisí poučka DRY (Don’t Repeat Yourself) = neopakuj se!. Pokud v programu potřebejeme například spočítat průměr sady čísel, není třeba abychom v programu měli několikrát stejný kód pro spočítání průměru. Stačí pouze zavolat funkci které předáme čísla a ona nám spočítá průměr. Tento přístup zvyšuje přehlednost a usnadnuje vývoj. Když máte dobře napsanou funkci můžete ji s čistým svědomím používat kdekoliv v kódu a neriskovat, že při kopírování kódu stále dokola uděláte chybu. Navíc když se rozhodnete změnit kód funkce, změníte ho jen na jednom místě a neriskujete že při přepisování na mnoha místech v kódu něco vynecháte nebo že někde uděláte překlep.

  • Odsazení, mezery

    Pro přehlednost kódu se používá tabulárot nebo několik mezer pro vyznačení bloku kódu. Také je vhodné odělovat prázdnými řádky logické skupiny kódu.

  • Názvy proměných

    V programech používáme proměné, tak jako v matematice např. x. V programech by měli být proměnné pojmenovány, tak aby bylo jasné co představují. A obvykle by mělo jít o podstatná či přídavná jmené. Nepoužívá se diakritika ani mezery. Pokud se název skládá z více slov je dobré každé slovo začít velkým písmenem (tzv. velbloudí notace). Pro pojmenová používáme české nebo anglické názvy, ale neni příliš vhodné je kombinovat. Není vhodné používat zkratky pokud nejsou pro daný účel obvyklé nebo přinejmenším zdokumentované komentářem. Příklad: aritmetickyPrumer, prumer, docasny, xPosition, velocity, …

  • Názvy procedur a funkcí

    Názvy procedur a funkcí se řídí stejnými konvencemi jako názvy proměnných. Jen je obviklé používat podstatná jména nebo slovesa např. spoctiPrumer, aritmetickyPrumer atd.

  • Procedury a funkce

    Proceduty a funkce by neměli být dlouhé a složité. Běžně se uvádí maximální délka od 25-50 řádků kódu. Toto tvrzení vyjadřuje poučka KISS (Keep it short and simple) = Zachovej to krátké a jednoduché. Další poučkou je tzv. Single responsibility principle = Princip jedné odpovědnosti. Která nám říká že každá funkce či procedura by se měla starat pouze o jednu věc.

Začít hrou

Začít hrou