IB111 Programování a algoritmizace Programovací jazyky Programovací jazyky lProgramovací jazyk lProstředek pro zápis algoritmů, jež mohou být provedeny na počítači lProgram lZápis algoritmu v programovacím jazyce. Dělení programovacích jazyků lPodle míry abstrakce lVyšší programovací jazyky lSem patří většina jazyků lNapř. C/C++, Pascal, Basic, Java, PHP lNižší programovací jazyky lAssembler („jazyk symbolických adres“) lStrojový jazyk (strojový kód) Assembler – příklad Strojový kód - příklad hiew Dělení programovacích jazyků lPodle způsobu překladu a spuštění lKompilované jazyky lKompilátor přeloží program kompletně do kódu cílového systému (strojového kódu). lNapř. C/C++, Pascal lVyžaduje překlad ale přeložený program běží rychle. lInterpretované jazyky lPři spuštění programu je spuštěn interpret a ten interpretuje program v programovacím jazyce. lNení 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 lProtože plně interpretované jazyky běží relativně pomalu, byly navrženy úpravy pro zvýšení rychlosti běhu lKompilace do mezikódu lInterpretuje se pak mezikód ne originální program (např. Java, Python) lZa běhu se program zkompiluje do strojového kódu počítače lPo iniciálním překladu pak běží rychle (např. Java JIT) Interpretované jazyky lVýhodou interpretovaných jazyků je jejich platformní nezávislost lJe možné distribuovat jeden program, který „poběží“ na řadě platforem lNevýhodou interpretovaných jazyků je pomalost běhu lBuď plně interpretované, nebo alespoň zpoždění díky iniciálnímu překladu lNěkteré jazyky mohou být implementovány jako kompilované i interpretované lNapř. Java, BASIC lPython: py2exe (?), PyPy Vyšší programovací jazyky lImperativní (procedurální) lStrukturované (např. C, Pascal) lObjektově orientované (např. C++, Java) lDeklarativní (neprocedurální) lFunkcionální (např. Lisp, Haskell) lLogické (např. Prolog, Gödel) lNěkteré jazyky mohou kombinovat přístupy lNapř. C/C++ kombinuje str. a OOP přístup Historie l30. a 40. léta minulého století lLambda kalkul a Turingův stroj lVhodné jako matematické vyjádření algoritmu lStrojové kódy jednotlivých počítačů a jejich assemblery lV polovině 50. let vznikl první jazyk vyšší úrovně Historie jazyků vyšší úrovně lFORTRAN (1954) lPojmenování proměnných, složené výrazy, podprogramy, … lVědeckotechnické výpočty lALGOL (1960) lMatematické algoritmy lCOBOL (1960), BASIC (1964) lSyntaxe podobná angličtině lPascal (1971), C (1972), Ada (1983) lDodnes používány pro nové projekty Imperativní programování lPříklad Fortran: Imperativní programování lPříklad Basic Historie - OOP lSmalltalk-80 (1980) lPrincipy převzaty ze Simuly lC++ (1985) lObjektově orientovaná verze jazyka C (původně jen rozšíření) lPerl (1987) lPopulární pro tvorbu CGI skriptů lPython (1990) lSkriptovací jazyk, vhodný i pro větší aplikace lPHP (1994) lWebové programování lJava (1994) lPlatformní nezávislost OOP příklad lPříklad Java OOP příklad lPříklad Perl OOP příklad lPříklad PHP Deklarativní programování lDefinuji „co se má udělat“ (cíl) lNe jak se to má udělat lMohu se tak vyvarovat implementačních chyb lNepoužíváme for nebo while cyklus, proměnné se používají jen omezeně lVše je řešeno pomocí rekurse lVýsledkem je však snížená optimalita běhu programu Logické programování - Prolog lPříklad v Prologu l lrodic(ladislav, adriana). lrodic(ladislav, lubomir). lrodic(sarka, lubomir). l lsourozenec(Sourozenec, X) :- rodic(Y, X), rodic(Y, Sourozenec), \+(Sourozenec = X). l lDotaz: sourozenec(adriana, X). lVýstup: X = lubomir ; l No l lDotaz: rodic(X, lubomir). lVýstup: X = ladislav ; l X = sarka ; l No l Funkcionální programování lProgram jako vyhodnocení mat. funkcí lPříklad v Haskellu Přehled programovacích jazyků Přehled programovacích jazyků Který jazyk vybrat lIdeální programovací jazyk použitelný pro všechny systémové a aplikační programy neexistuje. lKaždý jazyk má své pro a proti lPrávě kvůli nevýhodám existujících jazyků vznikaly a vznikají jazyky nové lRychlost programování vs. rychlost běhu programu lMusíme zvolit rozumný kompromis Který jazyk vybrat lNemá smysl programovat rok program v assembleru abych ho spustil jedinkrát pro provedení určitého krátkého výpočtu lProgram v Basicu bude sice běžet výrazně pomaleji, ale budu schopen ho naprogramovat podstatně rychleji lRychlost hraje roli u kódu, který je spouštěn velice často lOperační systém, zatížené webové servery, souborové servery apod. Který jazyk vybrat lObvykle tedy vybíráme jazyk, ve kterém bude vyřešení našeho problému nejsnazší lAž pokud se výsledné řešení ukáže jako pomalé, má smysl jej optimalizovat lNapř. přepsáním kritických částí do jiného jazyka Dostupnost knihoven lV většině případů nemusíme řešení problému programovat úplně sami lExistuje řada existujících knihoven, které můžeme využít lMnoho knihoven je specifických pro určité jazyky lVolbu jazyka proto může ovlivnit i dostupnost knihoven pro oblasti, které nás při řešení problému zajímají lNapř. pro Javu existuje obrovské množství existujících knihoven Kombinace jazyků lV praxi může být výhodné kombinovat několik jazyků/přístupů lPř. Programování pro WWW lOddě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). WWW programování lPříklad PHP l + MySQL Jaký jazyk vybrat lJak to vypadá v praxi? lSystémové programování (OS, utility) lDříve assembler a C, dnes C++. lAplikační programy lJava, C++, Dephi, .NET lWWW - aplikační logika lPerl, Python, Java, PHP, ASP lVědeckotechnické výpočty lMatlab, Fortran lKancelářské balíky lVisual Basic for Applications (VBA) Programování pro MS Office lPř. Visual Basic (Excel) Jazyky pro výuku programování lPř. Karel Jazyky pro výuku programování lPř. Logo