Close

Paradigmata programovacích jazyků, historie

Programovací jazyky - Wordcloud - Zdroj Wikipedia Commons

Tento článek je první ze série návodů, ve které Vás postupně provedu různými zákoutími programování (nejen) Arduina. Zároveň touto sérií doplním či rozšířím okruhy, které jsem v předchozích článcích (ať už úmyslně či neúmyslně) zanedbával. Postupně budeme stavět od základů až po složitější koncepty a konstrukce.


Úvod

V tomto článku bych se chtěl zabývat různými paradigmaty programovacích jazyků. Co paradigma, to jiný pohled na způsob vývoje programu, jeho zápisu, práci s daty a podobně. Před tím, než se pustíme do přehledu paradigmat, zkusme se podívat na úplný počátek programování.

Strojový kód

  • Strojový kód tvoří nuly a jedničky, jejichž různé kombinace odpovídají různým instrukcím procesoru.
  • Instrukce mohou být například načtení hodnoty z paměti do registru, sečtení hodnoty v registru s hodnotou v jiném registru a mnohé další.
  • Jelikož procesor rozumí pouze nulám a jedničkám, všechny kompilované programy nakonec skončí v podobě strojového kódu.

Assembler

  • Assembler, neboli jazyk symbolických adres, je funkčně úzce svázaný se strojovým kódem. Každá instrukce (kombinace 0 a 1) ze strojového kódu má svoji odpovídající instrukci v assembleru. Podívejte se například na instrukce, které používají čipy řady x86 (velká část dnešních PC).
  • jednoduchý program, který sečte dvě hodnoty vypadá například takto:
  • MOV EAX, 10 ;do registru EAX uloží hodnotu 10 ADD EAX, 20 ;k hodnotě v EAX přičte 20 a uloží ji zpět do EAX ;v EAX je 30
  • Může se zdát, že Assembler zas taková spása není. Například v C++ se dá psát daleko produktivněji a přehledněji. Důležité je si ale uvědomit, jak velký přechod znamenal nástup assembleru v době, kdy hlavním nástrojem vývojářů byl strojový kód. Druhou výhodou je, že s Assemblerem má vývojář plnou kontrolu nad procesorem.
  • Předchozí instrukce se do strojového kódu přeloží následovně:
    • 1011100000001010000000000000000000000000100000111100000000010100
    • Toto dříve musel programátor napsat sám! 🙂

Od této chvíle už se začaly objevovat první jazyky, které bychom mohli opravdu označit za programovací jazyky. Všechny tyto jazyky sice skončí v podobě nul a jedniček, každý ale může být vhodný na určitou činnost, jejíž programování nám velice usnadní.

Seřadit jazyky podle doby jejich vzniku by bylo na samostatný článek, proto si představíme pouze nejrozšířenější paradigmata. Pokud by vás historie programovacích jazyků zajímala, odkáži vás na Wikipedii. Výborně zpracovaný je také tento rodokmen programovacích jazyků.

Imperativní jazyky

  • Tento způsob programování je lidem asi nejbližší.
  • Přesně definované kroky, které se provedou, když na ně přijde řada (podobné například receptu na vaření).
  • Jako zástupce si můžeme uvést například jazyky C, BASIC
  • Program v BASIC (zdroj Wikibooks)
    • 10 CLS * 20 PRINT "Hello, world!" 30 PRINT "I'm learning about commands in BASIC." 40 PRINT "This text is being printed via the PRINT command." 50 PRINT "On the next line, I'll use CLS." 60 CLS "Now the next word would be PRINT." 70 PRINT "Finally, on line 80, I'll use END." 80 END "And return to PRINT"ns 90 PRINT "Now my program is over."
    • Program postupně vypisuje na obrazovku řetězce
  • Program v C
    • #include "stdio.h" int main(){ printf("Hello World"); }

Funkcionální jazyky

  • Běh programu představuje z velké části provádění (často matematických) funkcí.
  • Zřetězené funkce postupně upravující data.
  • Je velice blízký modelu zvanému Lambda kalkul (formální matematický popis algoritmů)
  • Jako příklady si můžeme uvést LISP, Haskell, Clojure, či F#
  • Program v Haskell (zdroj Wikipedia)
    • fibonacci_aux = n first second-> if n == 0 then "" else show first ++ "n" ++ fibonacci_aux (n - 1) second (first + second) fibonacci = n-> fibonacci_aux n 0 1 main = putStr (fibonacci 10)
  • Program v Clojure
    • (println (str (+ 10 20 30 (* 10 20))))

Logické jazyky

  • Využívá matematické logiky
  • Programu zadáme axiomy (pravidla), vztahy a vstupní data, které dále využívá k řešení problému.
  • Asi nejznámějším reprezentantem je jazyk PROLOG

Objektově orientované jazyky

  • Základním předpokladem objektově orientovaných jazyků je, že základní struktury jsou objekty, které
    • mají určité vlastnosti – parametry
      • vnitřní proměnné jednotlivých objektů
    • umí určité věci – metody
      • funkce jednotlivých objektů
  • Uvažujme jako náš objekt například psa
    • Takový pes může mít různé parametry – například rasa, výška, jméno a další
    • Jeho metody mohou být: běhej, štěkej, kousej
  • Takovéto objekty spolu vzájemně komunikují
  • Čistě objektovými jazyky jsou například Smalltalk či Ruby
  • Tímto paradigmatem se budeme zabývat v příštím článku, protože hlavním nástrojem pro programování Arduina je C++, které je objektově orientované.

Důležité je si také uvědomit, že kromě jazyků, které striktně dodržují určité paradigma, je velká část jazyků, které se snaží z jednotlivých paradigmat vybrat to nejlepší. Často se tak setkáme s jazyky, které jsou kombinací různých paradigmat (včetně C++) a my si můžeme částečně vybrat, jaký postup zvolíme.

Zbyšek Voda

Zbyšek Voda

Už nějaký čas se zajímám o věci kolem Internetu věcí a otevřeného hardware a software. Tak jsem se také v roce 2010 dostal k Arduinu, pro které dodnes programuji a taky píšu články o práci s ním. Baví mě vymýšlet, jak staré věci používat novým způsobem.
Zbyšek Voda

Napsat komentář