Paradigma programování (nepřesné je označení jako programovací metoda) je zjednodušeně řečeno způsob, jakým se uvažuje o algoritmech, jejich analýze a implementaci. Paradigma je samo o sobě nezávislé na programovacím jazyku. Některé jazyky sice byly vyvinuty s ohledem na konkrétní paradigma, to ale neznamená, že paradigma lze provozovat pouze v jazycích, které dané paradigma realizují. Například systém Linux je naprogramován v ne-objektovém programovacím jazyku C (jazyk C objektové paradigma vůbec nezná a nepodporuje), avšak při vývoji se objektové paradigma plně využívá. I s neobjektovým jazykem tedy lze tedy myslet objektově. Objektový jazyk pak pouze zjednodušuje vyjadřování objektových myšlenek.
Imperativní programování se vyznačuje přesným vyjádřením akcí, které se mají vykonat. Je svým způsobem nejstarší. V obecnosti se neřeší, jak vyjádřit opakování sekvencí. K opakování se používá nějaká forma příkazu GOTO, tedy skoku v programu. Nesystematické využívání příkazu GOTO ovšem vede ke značné programové nepřehlednosti.
Typickým příkladem jazyka, který lze považovat za představitele imperativního paradigmatu je Assembler. Imperativní paradigma ale představuje i původně k výuce určený BASIC (byť ten byl později doplněn i o prvky strukturního paradigmatu - např. v dialektu QBasic - nebo dokonce objektového paradigmatu - např. v dialektu Visual Basic).
Vývojové diagramy ovšem také ve své podstatě vyjadřují postupy v imperativním paradigmatu, což je de facto odsuzuje do propadliště dějin. Možná v několika málo velmi specifických případech může mít smysl i dnes použít vývojové diagramy.
Imperativní programování není samo o sobě překonané. Je nutné poznamenat, že všechny byť nejmodernější procesory rozumí pouze imperativnímu paradigmatu. To znamená, že jakýkoliv program v jakémkoliv "vyšším" paradigmatu musí být nejprve převeden nějakým způsobem na imperativní paradigma a až potom může být teprve spuštěn. Imperativní paradigma je proto stále důležité k tomu, aby bylo možné porozumět principu procesorů. Je ale zcela překonané na vývoj nových programů.
Poznámka: V literatuře se lze setkat i s vymezením, že imperativní programování v sobě zahrnuje jak strukturované programování, tak objektově orientované programování. Z kontextu lze většinou poznat, chápe-li se pojem imperativní programování úžeji (někdy se pak také hovoří o čistě imperativním programování) nebo šířeji.
Hlavní myšlenkou strukturovaného programování je odmítnutí příkazu GOTO popřípadě jeho ekvivalentů známého z čistě imperativního přístupu. Typický programovací jazyk sturkturovaného paradigmatu tedy buď vůbec neobsahuje možnost volání GOTO, nebo je jeho volání považováno přinejmenším za problematické. Prostě:
GOTO je potřeba zcela eliminovat.GOTO sice může mít smysl v některých velmi specifických případech, rozhodně se ale tento nesmí nadužívat. GOTO musí zůstat pouze pro výjimečné situace.Místo příkazu GOTO tak nalézají ve strukturovaných jazycích konstrukty pro cykly (např. cyklus for, nebo cyklus while) a podmínky (if, switch/case). Pro strukturované paradigma je také typické používání procedur (neboli také funkcí, podprogramů), které je sice možné používat i v imperativním paradigmatu, pro strukturované paradigma jsou ovšem typické.
Je také důležité poznamenat, že strukturované programování je dnes standardním paradigmatem, které je zcela všeobecně přijímané. Těžko by se hledal jazyk, který by dnes strukturované paradigma neimplementoval (tedy mimo Assembler, který k tomu ovšem má specifické důvody). Mluvíme-li tedy o paradigmatu objektovém, popřípadě funkcionálním, nejsou tato ve sporu se strukturovaným paradigmatem, naopak strukturované paradigma doplňují a rozšiřují.
I vlastní strukturované programování lze chápat spíše jako nadstavbu programování imperativního (chápaného v širším smyslu), než jako něco, co imperativní programování zcela odmítá.
Objektově orientované programování, neboli objektové paradigma vzniká uvědomněním si několika myšlenek:
Příklad: Televize Samsung se vypne posláním kódu 12345, Televize Philips se vypne pomocí kódu 54321. Naším úkolem je napsat program, který na vstupu dostane televizi a jeho úkolem je jí vypnout. Ve strukturovaném paradigmatu by kód mohl vypadat takto:
PROCEDURA vypni(televize):
JESTLIŽE televize JE TYPU 'Samsung' PAK:
POŠLI KÓD '12345'
JESTLIŽE televize JE TYPU 'Philips' PAK:
POŠLI KÓD '54321'
JINAK:
NAPIS 'Chyba: Televize je neznameho typu'
V objektově orientovaném programování bychom stejnou věc napsali nějak takto:
PROCEDURA vypni(televize):
televize.vypni()
PROCEDURA Samsung.vypni():
POŠLI KÓD '12345'
PROCEDURA Philips.vypni():
POŠLI KÓD '54321'
Existuje několik principů důležitých pro objektové programování:
TelevizeSamsung je Televize a Televize je Spotřebič. Zatímco Spotřebič lze například vypínat a zapínat, ovládání hlasitosti je už vlastnost typická pouze pro objekty typu Televize. Speciální případ dědí vlastnosti od obecného. Každá TelevizeSamsung je tedy i Spotřebič. Ale zatímco Trouba je Spotřebič, rozhodně to není Televize. Obecné a specifické typy tedy tvoří takzvanou dědičnou hierarchii. V našem případě by dědičná hierarchie mohla vypadat takto:* Spotřebič
* Televize
* TelevizeSamsung
* TelevizePhilips
* Trouba
Ve funkcionálním paradigmatu je povoleno zacházet s kusy kódu (tj. s podprogramem, procedurou, neboli funkcí) jako s objektem. To znamená, že funkce lze předávat jako argumenty jiným podprogramům a vyhodnocovat je až na základě potřeby. Podstatné u funkcionálního programování je, že odkazy na jednotlivé funkce lze ukládat do proměnných a takový uložený odkaz lze později spustit, neboli vyhodnotit.
V obecnosti je funkcionální paradigma nezávislé na objektovém paradigmatu (dokonce i na imperativním či strukturovaném paradigmatu), ale v praxi se obě paradigmata navzájem doplňují. Dnes většina "vyšších" programovacích jazyků nějakým způsobem implementuje prvky jak objektového tak funkcionálního paradigmatu.
GOTO, čistě imperativní přístup v nich tedy většinou možný není)