<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.multimediaexpo.cz/mmecz/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
		<id>http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Imperativn%C3%AD_programov%C3%A1n%C3%AD</id>
		<title>Imperativní programování - Historie editací</title>
		<link rel="self" type="application/atom+xml" href="http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Imperativn%C3%AD_programov%C3%A1n%C3%AD"/>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Imperativn%C3%AD_programov%C3%A1n%C3%AD&amp;action=history"/>
		<updated>2026-05-07T14:17:18Z</updated>
		<subtitle>Historie editací této stránky</subtitle>
		<generator>MediaWiki 1.16.5</generator>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=Imperativn%C3%AD_programov%C3%A1n%C3%AD&amp;diff=723760&amp;oldid=prev</id>
		<title>Sysop: 1 revizi</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Imperativn%C3%AD_programov%C3%A1n%C3%AD&amp;diff=723760&amp;oldid=prev"/>
				<updated>2014-06-19T20:19:42Z</updated>
		
		<summary type="html">&lt;p&gt;1 revizi&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 19. 6. 2014, 20:19&lt;/td&gt;
		&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=Imperativn%C3%AD_programov%C3%A1n%C3%AD&amp;diff=723759&amp;oldid=prev</id>
		<title>Sysop: Nahrazení textu</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Imperativn%C3%AD_programov%C3%A1n%C3%AD&amp;diff=723759&amp;oldid=prev"/>
				<updated>2011-10-29T14:05:18Z</updated>
		
		<summary type="html">&lt;p&gt;Nahrazení textu&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''Imperativní programování''' je jedno z [[Programovací paradigma|programovacích paradigmat]], neboli způsobů, jak jsou v programovacím jazyku formulována řešení problémů. Imperativní programování popisuje výpočet pomocí posloupnosti příkazů a určuje přesný postup ([[algoritmus]]), jak danou úlohu řešit. Program je sadou [[Proměnná|proměnných]], jež v závislosti na vyhodnocení podmínek mění pomocí příkazů svůj stav. Základní metodou imperativního programování je procedurální programování, tyto termíny bývají proto často zaměňovány.&lt;br /&gt;
&lt;br /&gt;
== Úvod ==&lt;br /&gt;
Imperativní přístup je blízký i obyčejnému člověku. Například kuchařské recepty či návody k montáži zakoupených výrobků jsou také příkazy krok za krokem a každý příkaz je v závislosti na podmínkách svázán s určitým stavem jídla či kompletnosti výrobku. Tento pro lidi přirozený způsob přesně odpovídá paradigmatu imperativního programování, a nikoho tudíž asi nepřekvapí, že většina programovacích jazyků i hardwarová implementace většiny počítačů jsou imperativní. [[Hardware]] pak stejně jako vařící/montující člověk vykonává příkaz za příkazem, přesně jak to odpovídá imperativnímu přístupu. Pouze jednotlivé příkazy jsou instrukce [[Strojový kód|strojového kódu]], k jehož vykonávání je [[hardware]] navržen, a aktuální stav vyjadřuje obsah paměti. Vyšší imperativní jazyky pak používají proměnné a komplexnější příkazy (tedy výrazy a [[Funkce (programování)|funkce]]), ovšem stále vyznávají to samé, imperativní paradigma.&lt;br /&gt;
&lt;br /&gt;
== Historie ==&lt;br /&gt;
První imperativní programovací jazyky byly [[Strojový jazyk|strojové jazyky]] jednotlivých počítačů. V těchto jazycích byly pouze velmi jednoduché instrukce, což sice umožňovalo velmi snadnou hardwarovou implementaci, ale komplikovalo to možnost vytvářet komplexní programy. První jazyk, který odstranil překážky strojového kódu pro vytváření komplexních programů, byl [[FORTRAN]], vytvořený [[John Backus|Johnem Backusem]] ve společnosti IBM v roce 1954. [[FORTRAN]] přinesl možnosti (například pojmenovávání proměnných, složené výrazy, podprogramy a mnohé další), jež jsou součástí imperativních jazyků dodnes. &lt;br /&gt;
&lt;br /&gt;
Následující dvě dekády přinesly další významné [[Vyšší programovací jazyk|vyšší programovací jazyky]]. Ke konci padesátých let a v letech šedesátých se objevil jazyk [[ALGOL]], pomocí kterého šlo snáze programovat matematické algoritmy. Jazyky [[COBOL]] (1960) a [[BASIC]] (1964) pak byly pokusem přizpůsobit syntaxi programování syntaxi přirozeného jazyka – angličtině. V sedmdesátých letech byl [[Niklaus Wirth|Niklausem Wirthem]] navržen jazyk [[Pascal (programovací jazyk)|Pascal]] a [[Dennis Ritchie|Dennisem Ritchiem]] (pracujícím v [[Belovy laboratoře|Bellových laboratořích]]) jazyk [[C (programovací jazyk)|C]]. Wirth se pak dále zabýval jazyky [[Modula-2]] a [[Oberon]]. Koncem 60. let vznikl první objektový jazyk, [[Simula]]. Pro potřeby amerického ministerstva obrany začali v roce 1978, po čtyřech letech sumarizování požadavků, [[Jean Ichbiah]] a tým z [[Honeywell]]u vyvíjet jazyk [[Ada]]. Specifikace byla poprvé publikována v roce 1983, oprav se pak dočkala v letech 1995 a 2005/6.&lt;br /&gt;
&lt;br /&gt;
V osmdesátých letech vzrostl zájem o [[objektově orientované programování]]. Vznikající jazyky pak vyznávaly imperativní styl, ale přidávaly podporu objektů. Během posledních dvou dekád dvacátého století jich vzniklo značné množství. V roce 1980 vydalo [[Xerox Palo Alto Research Center]] jazyk [[Smalltalk]]-80, původně koncipovaný [[Alan Key|Alanem Keyem]] v roce 1969. Převzetím konceptů z jiného objektově orientovaného jazyka – Simuly. [[Bjarne Stroustrup]] vyvinul jazyk [[C++]], objektově orientovanou verzi známého jazyka [[C (programovací jazyk)|C]]. [[C++]] byl poprvé implementován v roce 1985. Na konci osmdesátých let a v letech devadesátých pak vzniklo velké množství imperativních jazyků založených na konceptech [[objektově orientované programování|objektově orientovaného programování]]. Z významných jmenujme [[Perl]] ([[Larry Wall]], 1987), [[Python]] ([[Guido van Rossum]], 1990), [[PHP]] ([[Rasmus Lerdorf]], 1994) a [[Java (programovací jazyk)|Java]] (Sun Microsystems, 1994).&lt;br /&gt;
&lt;br /&gt;
== Dělení ==&lt;br /&gt;
Jemněji lze imperativní programování rozdělit na tři skupiny.&lt;br /&gt;
&lt;br /&gt;
'''Naivní paradigma''' bývá někdy chápáno jako samostatné paradigma a ještě častěji se mezi [[Programovací paradigma|paradigmaty programování]] ani neuvádí. Naivní jazyky se vyznačují jakousi všudypřítomnou chaotičností, mají obvykle nesystematickou syntaxi i sémantiku. V některých rysech mají podobné vlastnosti jako nestrukturované jazyky. Typickým zástupcem je například jazyk [[BASIC]].&lt;br /&gt;
&lt;br /&gt;
'''Nestrukturované paradigma''' je velmi blízké [[assembler]]ům. Programy jsou lineárními sekvencemi příkazů a skoky jsou v nich realizovány příkazem typu „go to“ – tedy „jdi na (řádek)“. V raných jazycích tohoto stylu byly navíc všechny řádky programu číslované a skoky šlo realizovat pouze uvedením konkrétního čísla řádku, což bylo velmi nepraktické. Později se objevily jazyky využívající tzv. [[návěští]], tedy textová označení míst, kam má program skočit. Typickými zástupci byly například rané verze jazyků [[FORTRAN]] a [[COBOL]].&lt;br /&gt;
&lt;br /&gt;
'''Strukturované paradigma'''. Kvůli nepraktičnosti příkazu skoku „go to“ (ta vězí zejména v tom, že struktura programu nedává prakticky žádnou informaci o jeho vykonávání, což velmi komplikuje jeho ladění) vzniklo strukturované paradigma. Jeho hlavním přínosem je fakt, že nahrazuje [[Příkaz skoku|příkazy skoku]] pomocí [[Podmíněný cyklus|podmíněných cyklů]] („opakuj, dokud platí podmínka“) a jiných strukturovaných instrukcí, které se do sebe vnořují. Typickými zástupci jsou jazyky [[C (programovací jazyk)|C]], [[Pascal (programovací jazyk)|Pascal]] a [[Ada]].&lt;br /&gt;
&lt;br /&gt;
== Základní typy příkazů ==&lt;br /&gt;
Imperativní programování využívá tři základní skupiny příkazů.&lt;br /&gt;
&lt;br /&gt;
'''Přiřazení''' obecně provádí operaci s informací uloženou v paměti a ukládá výsledek do paměti pro pozdější použití. [[Vyšší programovací jazyky]] navíc dovolují provádění komplexnějších výrazů, jež mohou sestávat z kombinace [[Aritmetická operace|aritmetických operací]], [[Funkce (programování)|programových funkcí]] a přiřazování výsledných hodnot do paměti.&lt;br /&gt;
&lt;br /&gt;
'''Cykly''' dovolují opakovat sekvenci příkazů několikrát za sebou. Počet opakování pak může být přesně určen nebo se sekvence může opakovat do té doby, dokud se nezmění určená podmínka.&lt;br /&gt;
&lt;br /&gt;
'''Příkazy pro větvení''' dovolují provést určitou část příkazů jen tehdy, byla-li splněna příslušná podmínka. V opačném případě je tato část přeskočena a pokračuje se v provádění příkazů bezprostředně následujících. Příkazy pro větvení také umožňují přejít do jiné části programu, zpravidla voláním podprogramu ([[Funkce (programování)|funkce]], procedury).&lt;br /&gt;
&lt;br /&gt;
== Odlišnosti opačného přístupu ==&lt;br /&gt;
V přímém kontrastu s imperativním programováním je [[deklarativní programování]], jenž je založeno na popisu cíle – přesný [[algoritmus]] provedení specifikuje až [[Interpret (software)|interpret]] příslušného jazyka a [[programátor]] se jím nezabývá. Díky tomu lze ušetřit mnoho chyb vznikajících zejména tím, že do jedné [[Globální proměnná|globální proměnné]] zapisuje najednou mnoho [[Funkce (programování)|funkcí]] a [[Metoda (programování)|metod]]. V deklarativním programování se totiž většinou místo proměnných používají k předání hodnot [[Návratová hodnota funkce|návratové hodnoty funkcí]]. &lt;br /&gt;
&lt;br /&gt;
Na druhou stranu [[Programátor|programátorovi]] při imperativním přístupu zůstává možnost program široce a přesně [[Optimalizace (programování)|optimalizovat]] takovým způsobem, jaký právě potřebuje. Při přístupu deklarativním musí spoléhat na [[překladač]], jež nemusí zvolit [[algoritmus]], který by byl v dané chvíli výhodnější. Navíc při deklarativním přístupu je velmi často využíváno [[rekurze]], což klade vyšší nároky na [[Programátor|programátora]]. Ten si totiž musí představit, jak celý program bude fungovat, místo toho, aby viděl, jako u přístupu imperativního, přesně zapsaný [[algoritmus]] před sebou.&lt;br /&gt;
&lt;br /&gt;
== Příklad ==&lt;br /&gt;
Porovnejme nyní známou matematickou funkci – [[faktoriál]] čísla n – zapsanou v jazyce imperativním a dvou jazycích deklarativních. &lt;br /&gt;
&lt;br /&gt;
Typickým jazykem imperativního programování je například [[C (programovací jazyk)|jazyk C]]:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
unsigned int n;&lt;br /&gt;
unsigned int i; &lt;br /&gt;
unsigned int faktorial = 1;&lt;br /&gt;
&lt;br /&gt;
for (i = 2; i &amp;lt;= n; i++) faktorial *= i;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protikladem může být deklarativní jazyk pro [[funkcionální programování]] [[Scheme]]:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(define (faktorial n)&lt;br /&gt;
(cond &lt;br /&gt;
  [(&amp;gt; 1 n) 1]&lt;br /&gt;
  [else (*n (faktorial (- n 1)))]&lt;br /&gt;
  )&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dalším přístupem [[Deklarativní programování|deklarativního programování]] může být například [[Logické programování|programování logické]], jehož typickým zástupcem je jazyk [[Prolog (programovací jazyk)|Prolog]]:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;prolog&amp;quot;&amp;gt;&lt;br /&gt;
faktorial(0,1).&lt;br /&gt;
faktorial(1,1).&lt;br /&gt;
faktorial(N,F):- M is N-1, faktorial(M,F2), F is N*F2.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Imperativní programovací jazyky ==&lt;br /&gt;
&lt;br /&gt;
;A&lt;br /&gt;
* [[ABC (programovací jazyk)|ABC]]&lt;br /&gt;
* [[ALGOL]]&lt;br /&gt;
* [[ALGOL 68]]&lt;br /&gt;
* [[ALGOL W]]&lt;br /&gt;
* [[Ada]]&lt;br /&gt;
* [[Alma-0]]&lt;br /&gt;
* [[Atlas Autocode]]&lt;br /&gt;
&lt;br /&gt;
;B&lt;br /&gt;
* [[Baltazar (programovací jazyk)|Baltazar]]&lt;br /&gt;
* [[Baltík]]&lt;br /&gt;
* [[Boo (programovací jazyk)|Boo]]&lt;br /&gt;
* [[Borland Delphi]]&lt;br /&gt;
&lt;br /&gt;
;C&lt;br /&gt;
* [[C (programovací jazyk)|C]]&lt;br /&gt;
* [[COMAL]]&lt;br /&gt;
* [[Common Lisp]]&lt;br /&gt;
&lt;br /&gt;
;D&lt;br /&gt;
* [[Dexterity programming language]]&lt;br /&gt;
* [[Dialog Manager]]&lt;br /&gt;
* [[DotOrg]]&lt;br /&gt;
&lt;br /&gt;
;F&lt;br /&gt;
* [[FLACC]]&lt;br /&gt;
* [[Fortran]]&lt;br /&gt;
&lt;br /&gt;
;G&lt;br /&gt;
* [[GNU Pascal]]&lt;br /&gt;
* [[Geometric Description Language]]&lt;br /&gt;
* [[Glagol]]&lt;br /&gt;
&lt;br /&gt;
;K&lt;br /&gt;
* [[Kaleidoscope]]&lt;br /&gt;
* [[Karel (programovací jazyk)|Karel]]&lt;br /&gt;
&lt;br /&gt;
;M&lt;br /&gt;
* [[ML]] &lt;br /&gt;
* [[MLton]]&lt;br /&gt;
* [[Met English]]&lt;br /&gt;
* [[Modula]]&lt;br /&gt;
&lt;br /&gt;
;N&lt;br /&gt;
* [[Nemerle]]&lt;br /&gt;
&lt;br /&gt;
;O&lt;br /&gt;
* [[Oberon-1]]&lt;br /&gt;
* [[Occam]]&lt;br /&gt;
&lt;br /&gt;
;P&lt;br /&gt;
* [[PHP]]&lt;br /&gt;
* [[PL/0]]&lt;br /&gt;
* [[PL/C]]&lt;br /&gt;
* [[PL/I]]&lt;br /&gt;
* [[PL/M]]&lt;br /&gt;
* [[Parser (programovací jazyk)|Parser]]&lt;br /&gt;
* [[Pascal (programovací jazyk)|Pascal]]&lt;br /&gt;
* [[Pascal/mt]]&lt;br /&gt;
* [[Prospero Pascal]]&lt;br /&gt;
&lt;br /&gt;
;Q&lt;br /&gt;
* [[QBasic]]&lt;br /&gt;
&lt;br /&gt;
;R&lt;br /&gt;
* [[Rapira]]&lt;br /&gt;
* [[Rc]]&lt;br /&gt;
* [[Roadsend PHP]]&lt;br /&gt;
&lt;br /&gt;
;S&lt;br /&gt;
* [[SCAR]]&lt;br /&gt;
* [[SPARK]]&lt;br /&gt;
* [[Speedcoding]]&lt;br /&gt;
* [[Standard ML]]&lt;br /&gt;
* [[Standard ML of New Jersey]]&lt;br /&gt;
&lt;br /&gt;
;V&lt;br /&gt;
* [[Visual Basic]]&lt;br /&gt;
&lt;br /&gt;
;X&lt;br /&gt;
* [[XHarbour]]&lt;br /&gt;
* [[XPL]]&lt;br /&gt;
&lt;br /&gt;
;Z&lt;br /&gt;
* [[Zeno]]&lt;br /&gt;
* [[Zonnon]]&lt;br /&gt;
&lt;br /&gt;
== Odkazy ==&lt;br /&gt;
=== Další zdroje ===&lt;br /&gt;
* Skoupil, D.; ''Úvod do paradigmat programování''. Katedra matematické informatiky, Olomouc, 1994. TR-CS-94-01.&lt;br /&gt;
* Abelson, H. – Sussman, G.J.; ''Structure and Interpretation of Computer Programs''. The MIT Press, Cambridge, Massachusetts, 1985. ISBN 0-262-01153-0.&lt;br /&gt;
* Dybvig, R. K.; ''The Scheme Programming Language''. Prentice Hall, A Simon and Schuster Company, Upper Saddle River, New Jersey, 1996. &lt;br /&gt;
* Felleisen, M. – Findler, R.B. – Flatt, M. – Krishnamurthi, S.; ''How to Design Programs: An Introduction to Computing and Programming.'' The MIT Press, Cambridge, Massachusetts, 2001.&lt;br /&gt;
* Manis, V.S. – Little, J.J.; ''The Schematics of Computation''. Prentice Hall, Englewood Cliffs, New Jersey, 1995. ISBN 0-13-834284-9. &lt;br /&gt;
* Springer, G. – Friedman, D.P.; ''Scheme and the Art of Programming''. The MIT Press, Cambridge, Massachusetts, 1994. ISBN 0-262-19288-8.&lt;br /&gt;
&lt;br /&gt;
=== Související články ===&lt;br /&gt;
* [[Proměnná]]&lt;br /&gt;
* [[Deklarativní programování]]&lt;br /&gt;
* [[Objektově orientované programování]]&lt;br /&gt;
* [[Logické programování]]&lt;br /&gt;
* [[Funkcionální programování]]&lt;br /&gt;
&lt;br /&gt;
{{Článek z Wikipedie}}&lt;br /&gt;
[[Kategorie:Paradigmata programování]]&lt;/div&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	</feed>