Programovací jazyky

Co je programovací jazyk?

  • Formá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í

Co počítač skutečně vykonává?

Počítač nerozumí:

  • Pythonu

  • C

  • Javě

Procesor rozumí pouze:

  • strojovým instrukcím

  • binárním hodnotám (0 a 1)

Strojový kód

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 11001010

Každá kombinace bitů odpovídá konkrétní instrukci procesoru.

Assembler je:

  • 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, 3

Assembler je čitelnější forma toho, co procesor skutečně vykonává.


Základní osy členění

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í


Kompilované jazyky

compile link

Kompilované jazyky charakteristika:

  • 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

Kompilované jazyky

Výhody:

  • Vysoký výkon

  • Optimalizace při kompilaci

Nevýhody:

  • Nutnost kompilace před každou změnou

  • Platformní závislost binárky


Interpretované jazyky

Python Interpreter

Charakteristika:

  • Kód je vykonáván po částech

  • Není nutný samostatný binární soubor

  • Obvykle vyšší flexibilita

Interpretované jazyky

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

Hybridní přístup (Bytecode + VM)

How java code Executes

Hybridní přístup (Bytecode + VM)

Příklady:

  • Java (JVM)

  • C# (.NET CLR)

  • Kotlin

Vlastnosti:

  • Přenositelnost

  • Možnost JIT optimalizace


Programovací paradigmata

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

Imperativní paradigma

  • Program je posloupnost příkazů

  • Mění stav programu

  • Používá proměnné a přiřazení

Příklad:

x = 5
x = x + 1

Typičtí zástupci:

  • C

  • Pascal

  • Python


Procedurální paradigma

Rozšíření imperativního:

  • Program je rozdělen do funkcí/procedur

  • Důraz na strukturu programu

Příklady:

  • C

  • Pascal


Objektově orientované programování (OOP)

Základní principy:

  • Zapouzdření (encapsulation)

  • Dědičnost (inheritance)

  • Polymorfismus

  • Abstrakce

Program je tvořen objekty.

Příklady jazyků:

  • Java

  • C++

  • C#

  • Python

Objektově orientované programování (OOP)

Výhody:

  • Modularita

  • Znovupoužitelnost

Nevýhody:

  • Složitost návrhu

  • Riziko přehnané abstrakce


Funkcionální paradigma

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 * x

Funkcionální paradigma

Typičtí zástupci:

  • Haskell

  • Lisp

V moderních jazycích:

  • Lambda výrazy

  • map / filter / reduce


Deklarativní paradigma

  • Popisuje CO chceme, ne JAK to udělat

  • Řešení je na systému

Příklady:

  • SQL

  • Prolog

  • HTML


Logické programování

  • Program = množina faktů a pravidel

  • Výpočet = hledání důkazu

Příklad jazyka:

  • Prolog


Multiparadigmatické jazyky

Většina moderních jazyků:

  • Python

  • JavaScript

  • C++

Podporují:

  • OOP

  • Funkcionální prvky

  • Imperativní styl


Typový systém

Statické typování

  • Typy kontrolovány při kompilaci

  • Chyby dříve odhaleny

Příklady:

  • C

  • Java

  • Rust

Silné typování

  • Přísná kontrola typů

  • Bez automatických konverzí

Příklad:

"5" + 5   # chyba

Dynamické typování

  • Typ určen až za běhu

  • Vyšší flexibilita

Příklady:

  • Python

  • JavaScript

  • PHP


Slabé typování

  • Automatické konverze

Příklad (JavaScript):

"5" + 5  // "55"

Úroveň abstrakce

Nízkourovňové jazyky

  • Blízko hardwaru

  • Manuální správa paměti

Příklady:

  • Assembler

  • C


Vysokoúrovňové jazyky

  • Vyšší abstrakce

  • Automatická správa paměti

  • Bohaté knihovny

Příklady:

  • Python

  • Java

  • C#


Správa paměti

Manuální správa

  • Programátor řídí alokaci i uvolnění

  • Riziko memory leak

Příklady:

  • C

  • C++


Garbage Collector

  • Automatické uvolňování paměti

  • Jednodušší vývoj

Příklady:

  • Java

  • C#

  • Python


Shrnutí

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