Strukturované programování: Porovnání verzí

Smazaný obsah Přidaný obsah
Formulace, styl
Řádek 1:
'''Strukturované programování''' nebo také(též '''strukturovaný programovací jazyk''') označuje v [[Informatika|informatice]] [[Programování|programovací]] techniku, kdy se implementovaný [[algoritmus]] rozděluje na dílčí úlohy (to jestt.j. procedury či [[Funkce (programování)|funkce]]), které se spojují v jeden celek). Na strukturované programování můžemelze nahlížet jako na podmnožinu [[Imperativní programování|imperativního programování]], avšak s jistými omezeními - k [[implementaceImplementace|implementaci]] v [[počítačový program|počítačovém programu]] se používá vybraných [[řídicí struktura|řídicích struktur]], ostatní struktury nejsou povoleny -a u strukturovaného programování se např. nepoužívá řídicí příkaz [[skok (informatika)|skoku]].
 
== Historie ==
Obvykle se za počátek strukturovaného programování považuje článek [[Edsger W. Dijkstra|Edsgera W. Dijkstry]] z roku 1967 nazvaný "Go„Goto Tostatement considered harmful“ (''příkaz Goto považován za škodlivý"''), který se objevil v měsíčníku [[:en:Communications of the ACM|Communications of the ACM]] vydávaného sdružením počítačových odborníků [[:en:Association for Computing Machinery|ACM]], ve kterém [[Dijkstra]] volá po odstranění příkazu skoku z [[Vyšší programovací jazyk|vyšších programovacích jazyků]] za účelem zkvalitnění kódu a několikrát popisuje nepřímou úměrnost mezi programátorovými dovednostmi a hustotou příkazů skoku v jeho programu. Vedle Dijkstry však nesmíme zapomenout ani na [[Nicklaus Wirth|Nicklause Wirtha]], jehož práce pro Algol W byla Dijkstrovi inspirací, stejně tak jako články z roku 1966 od pánů Böhma a Jacopiniho.
 
Metoda strukturovaného programování byla obecně přijata velmi pozitivně a většina počítačových odborníků byla přesvědčena o jeho výhodách. Nicméně například přední uznávaný informatik a profesor [[Donald Ervin Knuth|Donald Knuth]], ačkoli v zásadě souhlasí se základními koncepty strukturovaného programování, vždy odmítal a dosud stále odmítá snahu o naprosté vymýcení příkazu skoku z programu. Ve své práci z roku 1974 nazvané "Strukturované„Structured Programming with Goto Statements“ (''strukturované programování s Go Topříkazem příkazy"Goto'') uvádí několik příkladů, u nichž tvrdí, že použití příkazů skoku vede k efektivnějšímu kódu, a to bez újmy na jeho čitelnosti.
 
== Používané řídicí struktury ==
Strukturované programování definuje, že na nejnižší úrovni se program může skládat pouze z následujících tří struktur:
 
* Sekvencesekvence: (provádí posloupnost příkazů jeden po druhém)
* Výběrvýběr: (jeden nebo více příkazů je vykonán v závislosti na stavu programu. Toto je (obvykle vyjadřováno klíčovými slovy jako <code>if..then..else..endifif…then…else…endif</code>, <code>switch</code> nebo <code>case</code> )
* Opakováníopakování: (příkazy jsou prováděny do té doby, dokud program nedosáhne nějakého stavu - toto je (obvykle vyjadřováno klíčovými slovy jako <code>while</code>, <code>repeat</code>, <code>for</code> nebo <code>do..untildo…until</code>)
 
Nejznámějším důsledkem těchto zásad je snaha zabránit nebo - v závislosti na programovacím jazyce - alespoň omezit používání příkazu skoku. Programový kód nerespektující výše uvedené zásady se často hanlivě označuje jako "špagetový„špagetový kód"kód“.
 
== Programovací jazyky ==
Principy strukturovaného programování je možné aplikovat ve všech [[programovacíProgramovací jazyk|programovacích jazycích]] (dokonce i v [[jazyk symbolických adres|jazyce symbolických adres]]), avšak je určitě výhodné použít některý z procedurálních jazyků. V sedmdesátých letech, kdy strukturované programování začalo získávat svoji popularitu, se rovněž v nově vzniknuvších procedurálních jazycích objevily prvky a konstrukty, které nutily programátory psát kód strukturovaně. Mezi tyto jazyky bychom mohli zařadit [[ALGOL]], [[Pascal (programovací jazyk)|Pascal]], [[PL/1|PL/I]] nebo jazyk [[Ada]].
 
== Běžné odchylky ==
=== Obsluha výjimek ===
Téměř nikdy není důvod k tomu, aby měl podprogram více vstupních bodů. A mnoho teoretiků, Dijkstru nevyjímaje, v minulosti volalo také po tom, že podprogram by měl také pouze jeden výstupní bod, nicméně praxe ukázala stinnou stránku tohoto přístupu.
 
Řádek 34:
konec podprogramu;
 
TotoVýše je uvedena poměrně běžná situace, se kterou můžeme se můžeme vypořádat několika způsoby -: vyhozením výjimky, předčasným (druhým) návratem z procedury a nebo třeba i příkazem skoku. Ve všech těchto případech má procedura dva výstupní body a porušuje tak principy 'striktního'„striktního“ strukturovaného programování. Na obhajobu tohoto přístupu však musíme říci, že přepsání této procedury v souladu s pravidlem jednoho výstupního bodu by bylo poměrně těžkopádné, nemluvě o tom, jaký chaos by v kódu vznikl, pokud by do hry vstoupilo více chybových stavů a každý se navíc musel ošetřit jiným způsobem.
 
Většina programovacích jazyků přejala tyto principy. - zaZa všechny jmenujme jazyk [[C (programovací jazyk)|jazyk C]] a jeho [[Klíčové slovo|klíčová slova]] <code>continue</code>, <code>break</code> a <code>return</code>.
 
=== Stavový automat ===
Některé programy, jako například parser, mohou mít velké množství stavů a jejich rozložení do základních struktur nemusí být vůbec jednoduché. - byloBylo by možné napsat každou změnu stavu jako jeden podprogram a pomocí proměnné udržovat aktuální stav programu, nicméně někteří programátoři (například Donald Knuth) preferují implementovat změnu stavu pomocí skoku.
 
== OdkazyLiteratura ==
* Edsger Dijkstra, [http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD249.PDF ''Notes on Structured Programming'']
* Ole-Johan Dahl, Edsger Wybe Dijkstra, Tony Hoare: ''Structured Programming''. Academic Press, London 1972, ISBN 0-12-200550-3.
 
[[Kategorie:Paradigmata programování]]
 
[[rue:Штруктуроване проґрамованя]]
 
[[ar:برمجة مهيكلة]]
Řádek 71 ⟶ 69:
[[ro:Programare structurată]]
[[ru:Структурное программирование]]
[[rue:Штруктуроване проґрамованя]]
[[sr:Strukturirano programiranje]]
[[sv:Strukturerad programmering]]