Imperativní programování

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Imperativní programování je programovací paradigma, které má za cíl popisovat výpočty jako sekvenci příkazů, které mění stav programu. Tím se odlišuje od deklarativního programování, které se zaměřuje na definování vztahů mezi jednotlivými částmi programu. Základem imperativního programování je koncept proměnných a příkazů. Proměnné slouží k ukládání hodnot a mohou být změněny pomocí příkazů. Příkazy jsou jednotlivé kroky, které program provádí a mění stav proměnných. Jedním z nejznámějších imperativních programovacích jazyků je jazyk C, který je silně ovlivněn imperativním paradigmatem. Dalším příkladem je jazyk Java, který je objektově orientovaný, ale stále obsahuje prvky imperativního programování. Imperativní programování je často používáno při vývoji systémových programů a nízkoúrovňových aplikací, kde je nutné efektivně manipulovat se stavem hardwaru. Může být také použito pro psaní algoritmů, které vyžadují přesnou kontrolu nad jednotlivými kroky výpočtu. Hlavní výhodou imperativního programování je jeho přímý přístup k hardwaru a schopnost efektivně pracovat s proměnnými a příkazy. Na druhou stranu může být obtížné udržovat a měnit programy, které jsou napsány v imperativním stylu, kvůli složitosti jejich struktury. Imperativní programování je jedním z nejstarších programovacích paradigmat a stále se běžně používá ve vývoji software. Společně s deklarativním programováním poskytuje programátorům různé nástroje a přístupy, které jim pomáhají řešit různé problémy a vyvíjet efektivní a spolehlivý software.

Imperativní programování (též procedurální programování) je jedno z 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ý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.

Úvod

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. +more 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é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), ovšem stále vyznávají to samé, imperativní paradigma.

Historie

První imperativní programovací jazyky byly 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. +more První jazyk, který odstranil překážky strojového kódu pro vytváření komplexních programů, byl FORTRAN, vytvořený 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.

Následující dvě dekády přinesly další významné 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. +more 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 Niklausem Wirthem navržen jazyk Pascal a Dennisem Ritchiem (pracujícím v Bellových laboratořích) 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 Honeywellu vyvíjet jazyk Ada. Specifikace byla poprvé publikována v roce 1983, oprav se pak dočkala v letech 1995 a 2005/6.

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ů. +more 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ý Alanem Kayem 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. 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ého programování. Z významných jmenujme Perl (Larry Wall, 1987), Python (Guido van Rossum, 1990), Java (Sun Microsystems, 1994) a C# (Microsoft, 2000).

Dělení

Jemněji lze imperativní programování rozdělit na tři skupiny.

Naivní paradigma bývá někdy chápáno jako samostatné paradigma a ještě častěji se mezi paradigmaty programování ani neuvádí. Naivní jazyky se vyznačují jakousi všudypřítomnou chaotičností, mají obvykle nesystematickou syntaxi i sémantiku. +more V některých rysech mají podobné vlastnosti jako nestrukturované jazyky. Typickým zástupcem je například jazyk BASIC.

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)“. +more 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.

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. +more Jeho hlavním přínosem je fakt, že nahrazuje příkazy skoku pomocí 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, Pascal a Ada.

Základní typy příkazů

Imperativní programování využívá tři základní skupiny příkazů.

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ých operací, programových funkcí a přiřazování výsledných hodnot do paměti.

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.

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. +more Příkazy pro větvení také umožňují přejít do jiné části programu, zpravidla voláním podprogramu (funkce, procedury).

Odlišnosti opačného přístupu

V přímém kontrastu s imperativním programováním je deklarativní programování, jež je založeno na popisu cíle - přesný algoritmus provedení specifikuje až 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é zapisuje najednou mnoho funkcí a metod. +more V deklarativním programování se totiž většinou místo proměnných používají k předání hodnot návratové hodnoty funkcí.

Na druhou stranu programátorovi při imperativním přístupu zůstává možnost program široce a přesně 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ší. +more Navíc při deklarativním přístupu je velmi často využíváno rekurze, což klade vyšší nároky na 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.

Příklad

Porovnejme nyní známou matematickou funkci - faktoriál čísla n - zapsanou v jazyce imperativním a dvou jazycích deklarativních.

Typickým jazykem imperativního programování je například jazyk C:

unsigned int n; unsigned int i; unsigned int faktorial = 1;

for (i = 2; i

Protikladem může být deklarativní jazyk pro funkcionální programování Scheme:

(define (faktorial n) (cond [(> 1 n) 1] [else (*n (faktorial (- n 1)))] ) )

Dalším přístupem deklarativního programování může být například programování logické, jehož typickým zástupcem je jazyk Prolog:

faktorial(0,1). faktorial(1,1). faktorial(N,F):- M is N-1, faktorial(M,F2), F is N*F2.

Imperativní programovací jazyky

Imperativní programovací jazyky k výpočtu využívají posloupnosti příkazů a určují přesný postup (algoritmus), jak danou úlohu řešit, mohou však používat i další programovací paradigmata a být tak zařazeny do více klasifikačních skupin.

Odkazy

Literatura

Skoupil, D. ; Úvod do paradigmat programování. +more Katedra matematické informatiky, Olomouc, 1994. TR-CS-94-01. * Abelson, H. - Sussman, G. J. ; Structure and Interpretation of Computer Programs. The MIT Press, Cambridge, Massachusetts, 1985. . * Dybvig, R. K. ; The Scheme Programming Language. Prentice Hall, A Simon and Schuster Company, Upper Saddle River, New Jersey, 1996. * 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. * Manis, V. S. - Little, J. J. ; The Schematics of Computation. Prentice Hall, Englewood Cliffs, New Jersey, 1995. . * Springer, G. - Friedman, D. P. ; Scheme and the Art of Programming. The MIT Press, Cambridge, Massachusetts, 1994. .

Související články

Proměnná * Deklarativní programování * Objektově orientované programování * Logické programování * Funkcionální programování

Kategorie:Paradigmata programování

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top