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 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 níž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) 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 B311 v 14:00 Toto byla poslední přednáška Zkoušky jsou v ISu, první termín 5.1.2010 Pro přístup ke ZK třeba 75 % bodů ze cvičení