新疆:“微信转发消息日赚30元”骗了100多人
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 vypo?et pomocí posloupnosti p?íkaz? a ur?uje p?esny postup (algoritmus), jak danou úlohu ?e?it. Program je sadou proměnnych, 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 byvají proto ?asto zaměňovány.
úvod
[editovat | editovat zdroj]Imperativní p?ístup je blízky i oby?ejnému ?lověku. Nap?íklad kucha?ské recepty ?i návody k montá?i zakoupenych vyrobk? jsou také p?íkazy krok za krokem a ka?dy p?íkaz je v závislosti na podmínkách svázán s ur?itym stavem jídla ?i kompletnosti vyrobku. Tento pro lidi p?irozeny 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 vyrazy a funkce), ov?em stále vyznávají to samé, imperativní paradigma.
Historie
[editovat | editovat zdroj]První imperativní programovací jazyky byly strojové jazyky jednotlivych 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, ktery odstranil p?eká?ky strojového kódu pro vytvá?ení komplexních program?, byl FORTRAN, vytvo?eny Johnem Backusem ve spole?nosti IBM v roce 1954. FORTRAN p?inesl mo?nosti (nap?íklad pojmenovávání proměnnych, slo?ené vyrazy, podprogramy a mnohé dal?í), je? jsou sou?ástí imperativních jazyk? dodnes.
Následující dvě dekády p?inesly dal?í vyznamné vy??í programovací jazyky. Ke konci padesátych let a v letech ?edesátych 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átych letech byl Niklausem Wirthem navr?en jazyk Pascal a Dennisem Ritchiem (pracujícím v Bellovych laborato?ích) jazyk C. Wirth se pak dále zabyval jazyky Modula-2 a Oberon. Koncem 60. let vznikl první objektovy 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 tym 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átych 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ě koncipovany 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átych let a v letech devadesátych pak vzniklo velké mno?ství imperativních jazyk? zalo?enych na konceptech objektově orientovaného programování. Z vyznamnych jmenujme Perl (Larry Wall, 1987), Python (Guido van Rossum, 1990), Java (Sun Microsystems, 1994) a C# (Microsoft, 2000).
Dělení
[editovat | editovat zdroj]Jemněji lze imperativní programování rozdělit na t?i skupiny.
Naivní paradigma byvá 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. V některych rysech mají podobné vlastnosti jako nestrukturované jazyky. Typickym 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)“. V ranych 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. Typickymi 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. Jeho hlavním p?ínosem je fakt, ?e nahrazuje p?íkazy skoku pomocí podmíněnych cykl? (?opakuj, dokud platí podmínka“) a jinych strukturovanych instrukcí, které se do sebe vno?ují. Typickymi zástupci jsou jazyky C, Pascal a Ada.
Základní typy p?íkaz?
[editovat | editovat zdroj]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á vysledek do paměti pro pozděj?í pou?ití. Vy??í programovací jazyky navíc dovolují provádění komplexněj?ích vyraz?, je? mohou sestávat z kombinace aritmetickych operací, programovych funkcí a p?i?azování vyslednych hodnot do paměti.
Cykly dovolují opakovat sekvenci p?íkaz? několikrát za sebou. Po?et opakování pak m??e byt 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. 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
[editovat | editovat zdroj]V p?ímém kontrastu s imperativním programováním je deklarativní programování, je? je zalo?eno na popisu cíle – p?esny algoritmus provedení specifikuje a? interpret p?íslu?ného jazyka a programátor se jím nezabyvá. 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. V deklarativním programování se toti? vět?inou místo proměnnych 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 takovym zp?sobem, jaky právě pot?ebuje. P?i p?ístupu deklarativním musí spoléhat na p?eklada?, je? nemusí zvolit algoritmus, ktery by byl v dané chvíli vyhodněj?í. 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 cely program bude fungovat, místo toho, aby viděl, jako u p?ístupu imperativního, p?esně zapsany algoritmus p?ed sebou.
P?íklad
[editovat | editovat zdroj]Porovnejme nyní známou matematickou funkci – faktoriál ?ísla n – zapsanou v jazyce imperativním a dvou jazycích deklarativních.
Typickym jazykem imperativního programování je nap?íklad jazyk C:
unsigned int n;
unsigned int i;
unsigned int faktorial = 1;
for (i = 2; i <= n; i++) faktorial *= i;
Protikladem m??e byt 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 byt nap?íklad programování logické, jeho? typickym 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
[editovat | editovat zdroj]Imperativní programovací jazyky k vypo?tu vyu?ívají posloupnosti p?íkaz? a ur?ují p?esny postup (algoritmus), jak danou úlohu ?e?it, mohou v?ak pou?ívat i dal?í programovací paradigmata a byt tak za?azeny do více klasifika?ních skupin.
Odkazy
[editovat | editovat zdroj]Literatura
[editovat | editovat zdroj]- Skoupil, D.; úvod do paradigmat programování. 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. ISBN 0-262-01153-0.
- 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. ISBN 0-13-834284-9.
- Springer, G. – Friedman, D.P.; Scheme and the Art of Programming. The MIT Press, Cambridge, Massachusetts, 1994. ISBN 0-262-19288-8.