10101010 00000001 11001010Formální jazyk určený pro zápis algoritmů
Umožňuje komunikaci mezi člověkem a počítačem
Má:
syntaxi (jak se zapisuje)
sémantiku (co znamená)
pravidla typování
Počítač nerozumí:
Pythonu
C
Javě
Procesor rozumí pouze:
strojovým instrukcím
binárním hodnotám (0 a 1)
Strojový kód je:
binární reprezentace instrukcí
přímo vykonávaný CPU
závislý na architektuře (x86, ARM, RISC-V)
Příklad (zjednodušeně):
10101010 00000001 11001010Každá kombinace bitů odpovídá konkrétní instrukci procesoru.
nízkoúrovňový jazyk
textová reprezentace strojových instrukcí
téměř 1:1 převod na strojový kód
Příklad:
mov eax, 5
add eax, 3Assembler je čitelnější forma toho, co procesor skutečně vykonává.
Programovací jazyky lze dělit podle:
Způsobu překladu (interpretace × kompilace)
Programovacího paradigmatu
Typového systému
Úrovně abstrakce
Správy paměti
Oblasti použití

Překlad probíhá před spuštěním
Vzniká binární soubor
Obvykle vyšší výkon
Chyby odhaleny při kompilaci
Příklady:
C
C++
Rust
Go
Výhody:
Vysoký výkon
Optimalizace při kompilaci
Nevýhody:
Nutnost kompilace před každou změnou
Platformní závislost binárky

Kód je vykonáván po částech
Není nutný samostatný binární soubor
Obvykle vyšší flexibilita
Příklady:
Python
JavaScript
PHP
Výhody:
Rychlý vývoj
Přenositelnost
Nevýhody:
Obvykle nižší výkon
Některé chyby až za běhu

Příklady:
Java (JVM)
C# (.NET CLR)
Kotlin
Vlastnosti:
Přenositelnost
Možnost JIT optimalizace
Co je paradigma?
Styl nebo způsob programování
Určuje, jak přemýšlíme o problému
Jeden jazyk může podporovat více paradigmat
Program je posloupnost příkazů
Mění stav programu
Používá proměnné a přiřazení
Příklad:
x = 5
x = x + 1Typičtí zástupci:
C
Pascal
Python
Rozšíření imperativního:
Program je rozdělen do funkcí/procedur
Důraz na strukturu programu
Příklady:
C
Pascal
Základní principy:
Zapouzdření (encapsulation)
Dědičnost (inheritance)
Polymorfismus
Abstrakce
Program je tvořen objekty.
Příklady jazyků:
Java
C++
C#
Python
Výhody:
Modularita
Znovupoužitelnost
Nevýhody:
Složitost návrhu
Riziko přehnané abstrakce
Základní myšlenky:
Funkce jako občané první třídy
Neměnnost (immutability)
Bez vedlejších efektů
Rekurze místo cyklů
Příklad:
def square(x):
return x * xTypičtí zástupci:
Haskell
Lisp
V moderních jazycích:
Lambda výrazy
map / filter / reduce
Popisuje CO chceme, ne JAK to udělat
Řešení je na systému
Příklady:
SQL
Prolog
HTML
Program = množina faktů a pravidel
Výpočet = hledání důkazu
Příklad jazyka:
Prolog
Většina moderních jazyků:
Python
JavaScript
C++
Podporují:
OOP
Funkcionální prvky
Imperativní styl
Typy kontrolovány při kompilaci
Chyby dříve odhaleny
Příklady:
C
Java
Rust
Přísná kontrola typů
Bez automatických konverzí
Příklad:
"5" + 5 # chybaTyp určen až za běhu
Vyšší flexibilita
Příklady:
Python
JavaScript
PHP
Automatické konverze
Příklad (JavaScript):
"5" + 5 // "55"Blízko hardwaru
Manuální správa paměti
Příklady:
Assembler
C
Vyšší abstrakce
Automatická správa paměti
Bohaté knihovny
Příklady:
Python
Java
C#
Programátor řídí alokaci i uvolnění
Riziko memory leak
Příklady:
C
C++
Automatické uvolňování paměti
Jednodušší vývoj
Příklady:
Java
C#
Python
Programovací jazyky lze dělit podle:
Způsobu překladu
Paradigmatu
Typového systému
Úrovně abstrakce
Správy paměti
Důležité:
Neexistuje „nejlepší“ jazyk
Moderní jazyky jsou multiparadigmatické
Volba jazyka závisí na kontextu projektu