IB111 Programování a algoritmizace Programovací jazyky Programovací jazyky  Programovací jazyk  Prostředek pro zápis algoritmů, jež mohou být provedeny na počítači  Program  Zápis algoritmu v programovacím jazyce. Dělení programovacích jazyků  Podle míry abstrakce  Vyšší programovací jazyky  Sem patří většina jazyků  Např. C/C++, Pascal, Basic, Java, PHP  Nižší programovací jazyky  Assembler („jazyk symbolických adres“)  Strojový jazyk (strojový kód) Dělení programovacích jazyků  Podle způsobu překladu a spuštění  Kompilované jazyky  Kompilátor přeloží program kompletně do kódu cílového systému (strojového kódu).  Např. C/C++, Pascal  Vyžaduje překlad ale přeložený program běží rychle.  Interpretované jazyky  Při spuštění programu je spuštěn interpret a ten interpretuje program v programovacím jazyce.  Není nutný překlad, ale pro běh programu je nutný interpreter, který musí načíst program a ten postupně interpretovat. Výsledný běh je pomalejší. Interpretované jazyky  Protože plně interpretované jazyky běží relativně pomalu, byly navrženy úpravy pro zvýšení rychlosti běhu  Kompilace do mezikódu  Interpretuje se pak mezikód ne originální program (např. Java, Python)  Za běhu se program zkompiluje do strojového kódu počítače  Po iniciálním překladu pak běží rychle (např. Java JIT) Interpretované jazyky  Výhodou interpretovaných jazyků je jejich platformní nezávislost  Je možné distribuovat jeden program, který „poběží“ na řadě platforem  Nevýhodou interpretovaných jazyků je pomalost běhu  Buď plně interpretované, nebo alespoň zpoždění díky iniciálnímu překladu  Některé jazyky mohou být implementovány jako kompilované i interpretované  Např. Java, BASIC Vyšší programovací jazyky  Imperativní (procedurální)  Strukturované (např. C, Pascal)  Objektově orientované (např. C++, Java)  Deklarativní (neprocedurální)  Funkcionální (např. Lisp, Haskell)  Logické (např. Prolog, Gödel)  Některé jazyky mohou kombinovat přístupy  Např. C/C++ kombinuje str. a obj. or. přístup Historie  30. a 40. léta minulého století  Lambda kalkul a Turingův stroj  Vhodné jako matematické vyjádření algoritmu  Strojové kódy jednotlivých počítačů a jejich assemblery  V polovině 50. let vznikl první jazyk vyšší úrovně Historie jazyků vyšší úrovně  FORTRAN (1954)  Pojmenování proměnných, složené výrazy, podprogramy, …  Vědeckotechnické výpočty  ALGOL (1960)  Matematické algoritmy  COBOL (1960), BASIC (1964)  Syntaxe podobná angličtině  Pascal (1971), C (1972), Ada (1983)  Dodnes používány pro nové projekty Imparativní programování  Příklad Fortran: Imparativní programování  Příklad Basic Historie - OOP  Smalltalk-80 (1980)  Principy převzaty ze Simuly  C++ (1985)  Objektově orientovaná verze jazyka C (původně jen rozšíření)  Perl (1987)  Populární pro tvorbu CGI skriptů  Python (1990)  Skriptovací jazyk, vhodný i pro větší aplikace  PHP (1994)  Webové programování  Java (1994)  Platformní nezávislost OOP příklad  Příklad Java OOP příklad  Příklad Perl OOP příklad  Příklad PHP Deklarativní programování  Definuji „co se má udělat“ (cíl)  Ne jak se to má udělat  Mohu se tak vyvarovat implementačních chyb  Nepoužíváme for nebo while cyklus, proměnné se používají jen omezeně  Vše je řešeno pomocí rekurse  Výsledkem je však snížená optimalita běhu programu Logické programování - Prolog  Příklad v Prologu rodic(ladislav, adriana). rodic(ladislav, lubomir). rodic(sarka, lubomir). sourozenec(Sourozenec, X) :- rodic(Y, X), rodic(Y, Sourozenec), \+(Sourozenec = X). Dotaz: sourozenec(adriana, X). Výstup: X = lubomir ; No Dotaz: rodic(X, lubomir). Výstup: X = ladislav ; X = sarka ; No Funkcionální programování  Příklad v Haskellu Přehled programovacích jazyků Přehled programovacích jazyků Který jazyk vybrat  Ideální programovací jazyk použitelný pro všechny systémové a aplikační programy neexistuje.  Každý jazyk má své pro a proti  Právě kvůli nevýhodám existujících jazyků vznikaly a vznikají jazyky nové  Rychlost programování vs. rychlost běhu programu  Musíme zvolit rozumný kompromis Který jazyk vybrat  Nemá smysl programovat rok program v assembleru abych ho spustil jedinkrát pro provedení určitého krátkého výpočtu  Program v Basicu bude sice běžet výrazně pomaleji, ale budu schopen ho naprogramovat podstatně rychleji  Rychlost hraje roli u kódu, který je spouštěn velice často  Operační systém, zatížené webové servery, souborové servery apod. Který jazyk vybrat  Obvykle tedy vybíráme jazyk, ve kterém bude vyřešení našeho problému nejsnazší  Až pokud se výsledné řešení ukáže jako pomalé, má smysl jej optimalizovat  Např. přepsáním kritických částí do jiného jazyka Dostupnost knihoven  V většině případů nemusíme řešení problému programovat úplně sami  Existuje řada existujících knihoven, které můžeme využít  Mnoho knihoven je specifických pro určité jazyky  Volbu jazyka proto může ovlivnit i dostupnost knihoven pro oblasti, které nás při řešení problému zajímají  Např. pro Javu existuje obrovské množství existujících knihoven Kombinace jazyků  V praxi může být výhodné kombinovat několik jazyků/přístupů  Př. Programování pro WWW  Oddělujeme funkci (aplikační logiku - kód na serveru, např. PHP), data (databázový server, např. SQL), vzhled a uživatelské rozhraní (HTML, CSS, Javascript).  Příklad na Javascript ve cvičení WWW programování  Příklad PHP + MySQL Jaký jazyk vybrat  Jak to vypadá v praxi?  Systémové programování (OS, utility)  Dříve assembler a C, dnes C++.  Aplikační programy  Java, C++, Dephi  WWW - aplikační logika  Perl, Python, Java, PHP, ASP  Vědeckotechnické výpočty  Matlab, Fortran  Kancelářské balíky  Visual Basic for Applications (VBA) Programování pro MS Office  Př. Visual Basic (Excel) Jazyky pro výuku programování  Př. Karel Jazyky pro výuku programování  Př. Logo Příští přednáška  Následuje cvičení v A104 v 14:00  Příští (poslední) přednáška 13.12. v B410 v 8:00