Príklad štruktúrovaného programovania. Štrukturálne programovanie. Prehľadnosť a čitateľnosť programov

  • 31.10.2019

Začiatok informačnej fázy

Rozvoj ľudstva stále viac a viac podnecoval najväčšie mysle, aby premýšľali o automatizácii určitých procesov. Začiatok programovej etapy sa podľa rôznych zdrojov pripisuje viacerým obdobiam v intervale od začiatku 19. do polovice 20. storočia. V priebehu desaťročí sa objavilo mnoho techník písania zdrojového kódu. Každý z nich je radikálne odlišný vo svojich princípoch a myšlienkach. Zvážte štruktúrované programovanie, ktoré sa objavilo v 70. rokoch minulého storočia.

Trochu histórie

Pred objavením sa tejto techniky bol veľmi bežný assembler - jazyk, ktorý pracuje s najjednoduchšími príkazmi, ktoré sa potom preložili do strojového kódu, zrozumiteľného priamo pre počítač. Tento prístup bol použitý len na písanie relatívne malých programov. Okrem toho bolo mimoriadne ťažké, ak nie nemožné, pochopiť kód niekoho iného. Ale s príchodom novej metodiky išiel proces vývoja oveľa rýchlejšie.

Základné princípy štruktúrovaného programovania

Pozrime sa podrobne na hlavné body štrukturálneho prístupu.

1. Zdrojový kód má modulárnu štruktúru. To znamená, že program je vlastne rozčlenený na menšie celky – funkcie a procedúry. Tieto rutiny je možné volať odkiaľkoľvek vo vývoji. Procedúry sú vybrané časti kódu, ktoré majú názov a vykonávajú špecifické akcie špecifikované algoritmom. Funkcie okrem týchto funkcií implementujú výpočet niektorých premenných a majú aj návratovú hodnotu, ktorú je možné použiť v hlavnej časti programu. Niektoré jazyky navyše podporujú rekurziu – volanie „zo seba“. Pri riešení problémov to môže byť efektívne, ale často vedie k slučke.

2. Zhora nadol alebo zdola nahor. Štruktúrované programovanie podporuje niekoľko smerov. Dôsledné definovanie cieľov, zámerov a ich implementácia v priebehu zdrojového kódu – prístup „zhora nadol“. Táto technika je najzrozumiteľnejšia z hľadiska štúdia písaného programu a odhaľovania „úzkych miest“. Je tu však aj iná stránka – prístup zdola nahor. Zvyčajne sa používa, keď ešte nebol vyvinutý presný algoritmus programu, ale už je možné napísať samostatné podprogramy, ktoré implementujú špecifické akcie.

3. Ovládacie prvky. Štruktúrované programovanie sa zbavilo niektorých „assemblerských“ prístupov. V jazykoch nízkej úrovne sa často používa bezpodmienečný skok (goto), ktorý je dosť ťažké sledovať a ovládať. Štruktúrovaný prístup k programovaniu namiesto toho používa nasledujúce prvky: slučka, podmienka a sekvencia.

Programovacie jazyky

S rozvojom tejto metodiky sa začali objavovať a rozvíjať programovacie jazyky. Štrukturálny prístup implementujú také známe ako Pascal (Pascal), C (Ci), ako aj ten zastaranejší - Algol (Algol).

Epilóg

Svojho času bolo štruktúrované programovanie v prostredí informačných technológií dosť rozšírené a pomáhalo riešiť najťažšie úlohy daného obdobia. Život však nestojí a technologický pokrok si vyžaduje nové nápady.

štruktúrované programovanie - je to navrhovanie, písanie a testovanie programu v súlade s prísnym dodržiavaním určitých pravidiel.

Hlavným cieľom štruktúrovaného programovania je zvýšiť produktivitu programátorov. Ďalšie ciele sú:

- zbaviť sa zlej štruktúry programu;

- vytvárať k nim programy a dokumentáciu, ktoré by bolo možné pochopiť, udržiavať a upravovať bez účasti autorov (náklady na údržbu a úpravy sú spravidla 3-5 krát vyššie ako náklady na vývoj).

Štruktúrované programovanie (alebo metóda krok za krokom) zahŕňa:

1. Metóda návrhu zhora nadol. Nazýva sa tiež metóda „zhora nadol“ alebo „všeobecná až špecifická“. Zahŕňa rozdelenie úlohy na niekoľko jednoduchších častí alebo podúloh. Sú odlíšené tak, že návrh čiastkových úloh je nezávislý. Zároveň zostavujú plán riešenia celého problému, ktorého bodmi sú vybrané časti. Plán je napísaný graficky vo forme funkčného diagramu (hierarchický diagram, podriadenosť), kde sú určené hlavové a podriadené podúlohy a väzby medzi nimi, t.j. rozhranie. Stanovuje tiež, aké počiatočné údaje (alebo hodnoty) dostáva každá podúloha pre správne fungovanie a aké výsledky prináša. Potom je podrobne rozpísaná každá podúloha. Počet podrobných krokov môže byť ľubovoľný. Detailovanie pokračuje, kým nie je jasné, ako naprogramovať tento fragment algoritmu.

2. Štruktúrované programovanie. Implementácia myšlienky štruktúrovaného programovania je založená na skutočnosti, že správny program akejkoľvek zložitosti môže byť reprezentovaný logickou štruktúrou, ktorá je zložením troch základných (logických alebo riadiacich) štruktúr, ktoré definujú pravidlá spracovania údajov. : nasledovanie (lineárne), vetvenie (podmienený skok) a opakovanie (cyklus).

3. Komplexná kontrola štruktúry. Ide o pravidelnú kontrolu a schvaľovanie výsledkov práce interpretov – programátorov rôznych štruktúr. Jeho nevyhnutnosť je určená túžbou vývojárov znížiť náklady na vyvinuté programy. Predpokladom na to je včasné odhalenie a náprava vznikajúcich chýb a nezrovnalostí.

Metóda zostavovania algoritmu a programu nazývaného „zhora nadol“ alebo „od všeobecného po konkrétny“ teda spočíva v redukcii formulovaného problému na postupnosť jednoduchších čiastkových úloh, ktoré je jednoduchšie spracovať samostatne ako celý pôvodný program. Postupný výber ďalších a ďalších jednoduchých čiastkových úloh z pôvodného problému poskytuje reprezentáciu algoritmu na riešenie pôvodného problému ako zloženie algoritmov vybraných čiastkových úloh.



Spolu (vybrané) algoritmy čiastkových úloh tvoria systém, ktorého riadenie musí prevziať algoritmus-dispečer. Nazýva sa hlavný (alebo vedúci) a všetci ostatní sú podriadení. Diagram, ktorý zobrazuje úroveň a vzťah, interakciu algoritmov, hlavného aj podriadeného, ​​sa nazýva funkčný diagram - ide o diagram hierarchie algoritmov.

Podalgoritmus musí mať jeden vstup a jeden výstup. Na to je potrebné stanoviť cieľ a určiť množinu platných vstupných hodnôt (formálne parametre-hodnoty), možné vlastné (lokálne, interné) objekty a možné vedľajšie (vlnové) efekty (parametre presahujúce prípustný rozsah hodnoty, zmena hodnôt parametrov, najmä získanie výsledkov a/alebo výstup dát). Podriadený algoritmus je teda prvkom funkčného diagramu algoritmu, ktorý implementuje jednu nezávislú podúlohu.

Časť algoritmu organizovaná ako jednoduchá akcia, t.j. majúci jeden vstup a jeden výstup sa nazýva funkčný blok.


Jeden záznam znamená, že vykonávanie danej časti začína vždy rovnakou akciou. Jeden výstup znamená, že po dokončení tejto časti algoritmu sa vždy začne vykonávať rovnaká akcia.

Funkčný blok algoritmu patrí k jednoduchému typu blokov.

Keďže algoritmus určuje poradie spracovania údajov, musí obsahovať na jednej strane činnosti spracovania a na druhej strane poradie, v ktorom nasledujú, nazývané tok riadenia. Riadiaci tok môže mať nasledujúce vlastnosti:

1) vykoná sa každý blok;

2) každý blok sa vykoná maximálne raz.

So štruktúrnou organizáciou algoritmu možno rozlíšiť tri typy riadiacich tokov.

Tok riadenia, v ktorom sa vykonávajú obe tieto vlastnosti, sa nazýva lineárny.


Je zrejmé, že niekoľko blokov spojených lineárnym tokom je možné spojiť do jedného funkčného bloku.

2. Vetvenie toku riadenia. V tomto type je splnená vlastnosť (2) a nie je splnená vlastnosť (1).

Tento typ riadiaceho toku organizuje vykonávanie jedného z dvoch funkčných blokov v závislosti od kontrolovanej logickej podmienky.

3. Cyklický tok riadenia. Zabezpečuje, aby sa funkčný blok opakoval mnohokrát, pokiaľ logická podmienka jeho vykonania zostáva pravdivá.

V tomto type riadiaceho toku sa vykoná vlastnosť (1), ale nevykoná sa vlastnosť (2).


Ak je algoritmus kombináciou troch uvažovaných typov riadiacich tokov (základné algoritmické štruktúry), potom sa nazýva štrukturálny algoritmus.

Štrukturálne algoritmy majú niekoľko výhod oproti neštrukturálnym algoritmom:

1. jasnosť a jednoduchosť vnímania algoritmu;

2. kontrolovateľnosť (na kontrolu ktorejkoľvek z hlavných štruktúr sa stačí uistiť, že funkčné bloky v nej obsiahnuté sú správne);

3. modifikovateľnosť.

Štrukturálna veta: každý algoritmus možno zredukovať na štruktúrovaný algoritmus.

Význam štrukturálnej vety pre prax programovania spočíva v tom, že na jej základe bola vyvinutá a široko používaná štrukturálna metóda programovania. Základom metódy je využitie princípu modulárnosti pri výstavbe komplexných programov. Zároveň je každý softvérový modul organizovaný ako štandardný funkčný blok (zostavený z troch základných štruktúr) a vykonáva len jednu funkciu spracovania dát. Moduly majú určitú autonómiu, ktorá umožňuje ich ladenie (hľadanie a odstraňovanie chýb) vykonávať nezávisle od zvyšku programu a poskytuje relatívne jednoduchú modifikovateľnosť ako samostatného modulu, tak aj programu ako celku. Efektívnosť štruktúrovaného programovania je badateľná najmä pri vývoji komplexných programov – modulárny princíp umožňuje rozdeliť spoločnú úlohu na komponentné a relatívne autonómne časti, z ktorých každá môže byť vytvorená a ladená samostatne. Takáto partícia samozrejme vyžaduje zosúladenie vstupných a výstupných parametrov modulov.

Na základe štrukturálneho prístupu k vývoju algoritmu sú typické fázy tohto procesu:

1. Popis všeobecnej myšlienky algoritmu;

2. Formalizácia úlohy;

3. Vývoj zovšeobecnenej schémy algoritmu;

4. Vývoj jednotlivých blokov algoritmu;

5. Dokovanie blokov;

6. Určenie možnosti použitia stavebných blokov;

7. Vývoj logických riadiacich blokov;

8. Optimalizácia schémy algoritmu;

9. Spresnenie parametrov;

10. Odhad strojového zdroja.

Programovacie paradigmy

Štruktúrované programovanie- metodika vývoja softvéru, ktorá je založená na reprezentácii programu vo forme hierarchickej štruktúry blokov. V 70. rokoch navrhol E. Dijkstroy a kol.

V súlade s touto metodikou je akýkoľvek program zostavený bez použitia príkazu goto z troch základných riadiacich štruktúr: sekvencia, vetva, slučka; okrem toho sa používajú podprogramy. Zároveň sa vývoj programu vykonáva krok za krokom metódou „zhora nadol“.

Metodika štruktúrovaného programovania sa objavila v dôsledku zvyšujúcej sa zložitosti úloh riešených na počítačoch, a teda aj zložitosti softvéru. V 70. rokoch dosiahol objem a komplexnosť programov takú úroveň, že tradičný (neštruktúrovaný) vývoj programov už neuspokojoval potreby praxe. Programy sa stali príliš zložitými na to, aby sa dali správne udržiavať. Preto bola potrebná systematizácia procesu vývoja a štruktúry programov.

Metodológia štrukturálneho vývoja softvéru bola uznaná ako „najsilnejšia formalizácia 70. rokov“.

Podľa Bertranda Meyera „Revolúcia programovania, ktorú začal Dijkstra, viedla k hnutiu známemu ako štruktúrované programovanie, ktoré navrhovalo systematický, racionálny prístup k navrhovaniu programov. Štruktúrované programovanie sa stalo základom všetkého, čo sa robí v metodológii programovania, vrátane objektového programovania.

Encyklopedický YouTube

    1 / 5

    ✪ Štruktúrované programovanie. Základné princípy

    ✪ Pascal od nuly [h1]. Prvý program.

    ✪ Lekcia 7. Napíšte / zapíšte výstupné príkazy. Jednoduchý program. Programovanie v Pascal / Pascal

    ✪ Základy programovania - #5 - Aritmetické a logické výrazy

    ✪ 003. Logické klasifikačné algoritmy - K.V. Voroncov

    titulky

Príbeh

Spočiatku sa myšlienka štruktúrovaného programovania zrodila v súvislosti s operátorom goto a pochybnosťami o vhodnosti jeho použitia. Takéto pochybnosti prvýkrát vyjadril Heinz Zemanek na stretnutí o algolčine začiatkom roku 1959 v Kodani. Tento prejav však nevzbudil pozornosť a nemal žiadne následky. Edsger Dijkstra spomína: „Do určitej miery si vyčítam, že som v tom čase nedokázal oceniť význam tejto myšlienky.“

Situácia sa dramaticky zmenila o desať rokov neskôr, keď v marci 1968 Dijkstra publikoval svoj slávny list „Go To Statement Accounted“. Ide o skutočne historický dokument, ktorý výrazne ovplyvnil ďalší vývoj programovania.

Osud samotného dokumentu je veľmi zaujímavý. Faktom je, že Dijkstra dal článku úplne iný názov: „Argumenty proti vyhláseniu GO TO“ (Prípad proti vyhláseniu GO TO).

V čase uverejnenia sa však stalo niečo nepochopiteľné – článok sa z nejakého dôvodu záhadne zmenil na „List redaktorovi“ a niekdajší titul rovnako záhadne zmizol. Čo sa naozaj stalo? Dijkstra záhadnú premenu článku na list vysvetlil až o mnoho rokov neskôr, v roku 2001, rok pred svojou smrťou.

Cieľ

Účelom štruktúrovaného programovania je zvýšiť produktivitu programátorov, a to aj pri vývoji veľkých a zložitých softvérových systémov, znížiť počet chýb, zjednodušiť ladenie, úpravy a údržbu softvéru.

Tento cieľ bol stanovený v súvislosti so zvyšujúcou sa zložitosťou programov a neschopnosťou vývojárov a manažérov veľkých softvérových projektov vyrovnať sa s problémami, ktoré vznikli v 60. a 70. rokoch 20. storočia v súvislosti s vývojom softvérových nástrojov.

kód špagiet

Štrukturálne programovanie je určené najmä na odstránenie neporiadku a chýb v programoch spôsobených ťažkosťami pri čítaní kódu, nesystematizované, nepohodlné pre vnímanie a analýzu zdrojového textu programu. Takýto text je často charakterizovaný ako „kód špagiet“.

Kód špagiet je možné odladiť a spustiť správne a s vysokým výkonom, ale je mimoriadne náročné ho udržiavať a rozvíjať. Zdokonalenie kódu špagiet na pridanie novej funkcionality niekedy nesie so sebou značný potenciál na zavedenie nových chýb. Z tohto dôvodu sa stáva takmer nevyhnutným refaktoringom (code refactoring) – hlavným liekom na špagety.

goto vyhlásenie

Od 70. rokov minulého storočia bol operátor bezpodmienečného skoku goto v centre systematickej a rastúcej kritiky. Nesprávne a nepremyslené použitie príkazu goto v zdrojovom kóde programu vedie k mätúcemu, nečitateľnému „kódu špagiet“. Z textu takéhoto kódu je takmer nemožné pochopiť poradie vykonávania a vzájomnú závislosť fragmentov.

Tento názor sa prvýkrát odrazil v článku Edsger Dijkstra „Operátor Go To je považovaný za škodlivý“ . Dijkstra si všimol, že kvalita kódu je nepriamo úmerná počtu príkazov goto v ňom. Článok získal širokú publicitu, v dôsledku čoho boli výrazne prepracované názory na používanie operátora goto. V Notes on Structured Programming Dijkstra tvrdil, že je oveľa jednoduchšie skontrolovať formálnu správnosť kódu bez goto.

Kód s goto sa ťažko formátuje, pretože môže narušiť hierarchiu vykonávania (paradigma štruktúrovaného programovania), a preto odsadenie, navrhnuté tak, aby odrážalo štruktúru programu, nemusí byť vždy správne nastavené. Okrem toho príkaz goto zasahuje do optimalizácie kompilátora pre riadiace štruktúry.

Niektoré použitia goto môžu spôsobiť problémy s logikou vykonávania programu:

  • Ak je nejaká premenná inicializovaná (získa hodnotu) na jednom mieste a potom sa používa ďalej, potom skok na bod po inicializácii, ale pred použitím, bude mať za následok výber hodnoty, ktorá bola v pamäti pridelenej pre premennú pred pridelením. (a ktorá je zvyčajne ľubovoľná a náhodná).
  • Odovzdanie kontroly vnútri tela slučky má za následok preskočenie kódu inicializácie slučky alebo počiatočnej kontroly stavu.
  • Podobne odovzdanie riadenia vnútri procedúry alebo funkcie vedie k preskočeniu jej počiatočnej časti, v ktorej sa vykonáva inicializácia (pridelenie pamäte pre lokálne premenné).

Argumenty proti výroku goto sa ukázali byť natoľko závažné, že v štruktúrovanom programovaní sa začali považovať za vysoko nežiaduce. To sa odrazilo v dizajne nových programovacích jazykov. Napríklad goto je nezákonné v Jave a Ruby. V mnohých moderných jazykoch sa stále ponecháva z dôvodov efektívnosti v tých zriedkavých prípadoch, keď je použitie goto opodstatnené. Goto teda prežil v Ade, jednom z architektonicky najpremyslenejších jazykov v histórii.

V jazykoch na vysokej úrovni, kde sa tento operátor zachoval, však jeho použitie spravidla podlieha prísnym obmedzeniam, ktoré bránia používaniu najnebezpečnejších spôsobov jeho použitia: napríklad je zakázané prejsť kontrolou zvonku slučka, procedúra alebo funkcia vo vnútri. Jazykový štandard C++ zakazuje obísť inicializáciu premennej pomocou goto.

Veta o štruktúrovanom programovaní

Vetu sformulovali a dokázali talianski matematici Corrado Böhm a Giuseppe Jacopini. Vydali ju v roku 1965 v taliančine a v roku 1966 v angličtine. Spolu s teorémom článok Boehma a Jacopiniho opísal metódy na konverziu neštrukturálnych algoritmov na štrukturálne algoritmy pomocou programovacieho jazyka P′′ vytvoreného Bohmom ako príklad. Jazyk P'' je prvý Turingov úplný programovací jazyk bez operátora goto.

Böhm-Jacopiniho veta je napísaná zložitým jazykom a nezvyčajnou notáciou. Ak použijeme modernú terminológiu a notáciu, bude mať podobu:

Akýkoľvek program vo forme vývojového diagramu môže byť reprezentovaný pomocou troch riadiacich štruktúr:

  • podsekvencia - označené: f POTOM g,
  • vetvenia - označené: AK p THEN f ELSE g,
  • cyklu - označené: KEĎ p DO f,

kde f, g sú blokové schémy s jedným vstupom a jedným výstupom,

P - podmienka, THEN, IF, ELSE, WHILE, DO - kľúčové slová.

Vysvetlenie. Vzorec f THEN g znamená nasledovné: najprv sa vykoná program f, potom sa vykoná program g.

Boehm a Jacopini nepoužili výraz „štruktúrované programovanie“. Napriek tomu teorém, ktorý dokázali (a jeho následné variácie od rôznych autorov), sa následne začal nazývať „Veta o štruktúrnom programovaní“, „Štrukturálna veta“ (Structure teorem), „Veta o štruktúrovaní“.

Princípy štruktúrovaného programovania

Vznik a rozvoj štruktúrovaného programovania je spojený s menom Edsger Dijkstra.

Princíp 1. Malo by sa upustiť od používania operátora bezpodmienečného skoku goto.

princíp 2. Každý program je zostavený z troch základných riadiacich štruktúr: sekvencia, vetvenie, slučka.

Princíp 3. Základné riadiace štruktúry je možné v programe ľubovoľne vnoriť do seba. Nie sú k dispozícii žiadne iné prostriedky na riadenie postupnosti operácií.

Princíp 4. Opakujúce sa fragmenty programu môžu byť usporiadané vo forme podprogramy(postupy a funkcie). Rovnakým spôsobom (vo forme podprogramov) je možné usporiadať logicky celistvé fragmenty programu, aj keď sa neopakujú.

Princíp 5. Každá logicky úplná skupina pokynov by mala byť usporiadaná ako blok. Bloky sú základom štruktúrovaného programovania.

Blok je logicky zoskupená časť zdrojového kódu, ako napríklad súbor inštrukcií napísaných v riadku v zdrojovom kóde programu. koncepcie blokovať znamená, že blok inštrukcií by sa mal považovať za jednu inštrukciu. Bloky slúžia na obmedzenie rozsahu premenných a funkcií. Bloky môžu byť prázdne alebo vnorené jeden do druhého. Hranice bloku sú prísne definované. Napríklad v príkaze if je blok oddelený znakom BEGIN..END (v jazyku Pascal) alebo zloženými zátvorkami (...) (v jazyku C) alebo odsadením (v jazyku Python).

Princíp 6. Všetky uvedené štruktúry musia mať jeden vstup a jeden výstup.

Ľubovoľné riadiace štruktúry (napríklad v miske na špagety) môžu mať ľubovoľný počet vstupov a výstupov. Tým, že sa obmedzíme na riadiace štruktúry s jedným vstupom a jedným výstupom, dokážeme pomocou jednoduchých a spoľahlivých mechanizmov zostaviť ľubovoľné algoritmy akejkoľvek zložitosti.

Princíp 7. Vývoj programu sa vykonáva krok za krokom metódou „zhora nadol“. (metóda zhora nadol) .

Metóda zhora nadol

Najprv sa napíše text hlavného programu, do ktorého sa namiesto každého pripojeného logického fragmentu textu vloží volanie podprogramu, ktorý tento fragment vykoná. Namiesto skutočných, fungujúcich podprogramov sa do programu vkladajú fiktívne časti - zástrčky ktoré, zjednodušene povedané, nič nerobia.

Presnejšie povedané, stub spĺňa požiadavky rozhrania nahrádzaného fragmentu (modulu), ale neplní svoje funkcie alebo ich plní čiastočne. Pahýly sa potom nahradia alebo upgradujú na skutočne plnohodnotné fragmenty (moduly) podľa programovacieho plánu. V každej fáze implementačného procesu musí už vytvorený program správne fungovať vo vzťahu k nižšej úrovni. Výsledný program sa skontroluje a odladí.

Treba tiež poznamenať, že v Predhovore k štrukturálnemu programovaniu Tony Hoare poznamenáva, že princípy štruktúrovaného programovania možno rovnako aplikovať na programovanie zhora nadol aj zdola nahor.

podprogram

Podprogram je dôležitým prvkom štruktúrovaného programovania. Spočiatku sa podprogramy objavovali ako prostriedok na optimalizáciu programov z hľadiska množstva obsadenej pamäte – umožňovali neopakovať rovnaké bloky kódu v programe, ale raz ich opísať a podľa potreby vyvolať. K dnešnému dňu sa táto funkcia podprogramov stala pomocnou, ich hlavným účelom je štruktúrovať program tak, aby bol ľahšie pochopiteľný a udržiavaný.

Oddelenie množiny akcií do podprogramu a jeho volanie podľa potreby vám umožňuje logicky vybrať integrálnu podúlohu, ktorá má typické riešenie. Takáto akcia má ešte jednu (okrem šetrenia pamäte) výhodu oproti opakovaniu rovnakého typu akcií. Akákoľvek zmena (oprava chýb, optimalizácia, rozšírenie funkčnosti) vykonaná v podprograme sa automaticky premietne do všetkých jeho volaní, zatiaľ čo pri duplikácii musí byť každá zmena vykonaná pri každom výskyte upravovaného kódu.

Dokonca aj v prípadoch, keď je podprogramu pridelený jednorazový súbor akcií, je to opodstatnené, pretože to umožňuje zmenšiť veľkosť integrálnych blokov kódu, ktoré tvoria program, to znamená, aby bol program zrozumiteľnejší. a viditeľné.

Výhody štruktúrovaného programovania

Dodržiavaním princípov štruktúrovaného programovania boli texty programov, dokonca aj dosť veľké, bežne čitateľné. Pochopenie programov sa výrazne uľahčilo, umožnilo sa vyvíjať programy v bežnom priemyselnom režime, kedy program bez väčších problémov pochopí nielen jeho autor, ale aj ostatní programátori. To umožnilo vývojovým silám vývojových tímov vyvíjať na tú dobu pomerne veľké softvérové ​​systémy a udržiavať tieto komplexy dlhé roky, dokonca aj napriek nevyhnutným zmenám v zložení personálu.

  1. Štrukturálne programovanie umožňuje výrazne znížiť počet možností na zostavenie programu podľa rovnakej špecifikácie, čo výrazne znižuje zložitosť programu a čo je dôležitejšie, uľahčuje ostatným vývojárom jeho pochopenie.
  2. V štruktúrovaných programoch sú logicky súvisiace operátory vizuálne bližšie a voľne súvisiace operátory sú vzdialenejšie, čo umožňuje zaobísť sa bez vývojových diagramov a iných grafických foriem zobrazovacích algoritmov (v skutočnosti je samotný program vlastným vývojovým diagramom).
  3. Proces testovania a ladenia štruktúrovaných programov je výrazne zjednodušený.

Prehľadnosť a čitateľnosť programov

Štruktúrované programovanie výrazne zlepšuje prehľadnosť a čitateľnosť programov. Edward Yourdon vysvetľuje:

Správanie mnohých neštrukturálnych programov je často bližšie k Brownovmu pohybu ako k akémukoľvek organizovanému procesu. Akýkoľvek pokus o prečítanie zoznamu privádza človeka do zúfalstva, pretože takýto program zvyčajne vykoná niekoľko príkazov, po ktorých sa kontrola prenesie do bodu o niekoľko strán nižšie. Vykoná sa tam ešte niekoľko príkazov a riadenie sa opäť prenesie do nejakého náhodného bodu. Tu sa vykoná niekoľko ďalších operátorov atď. Po niekoľkých takýchto prenosoch čitateľ zabudne, ako to všetko začalo. A stráca svoj myšlienkový pochod.

Na druhej strane štrukturálne programy majú tendenciu byť organizované a vykonávané konzistentným spôsobom.

Zlepšenie čitateľnosti štruktúrovaných programov je spôsobené tým, že absencia príkazu goto umožňuje čítanie programu zhora nadol bez prestávok spôsobených riadiacimi prenosmi. Vďaka tomu môžete okamžite (na prvý pohľad) zistiť podmienky potrebné na úpravu konkrétneho fragmentu programu.

2D štruktúrované programovanie

P-technológia na výrobu programov, alebo „technológia dvojrozmerného programovania“ vznikla v r. Grafický systém programovania P-technológie je stanovený v normách GOST 19.005-85, GOST R ISO / IEC 8631-94 a medzinárodnej norme ISO 8631H.

Autor technológie R-programovania, doktor fyzikálnych a matematických vied, profesor Igor Velbitsky, navrhol prehodnotiť samotný koncept „programovej štruktúry“. Podľa jeho názoru „štruktúra je multidimenzionálny koncept. Preto zobrazenie tohto konceptu pomocou lineárnych textov (sekvencií operátorov) takmer na nič redukuje výhody štrukturálneho prístupu. Obrovské asociačné možnosti zrakového aparátu a aparátu ľudského myslenia sa využívajú prakticky márne – na rozpoznávanie štrukturálnych obrazov v podobe jednotného sledu symbolov.

Metodika dvojrozmerného štruktúrovaného programovania sa výrazne líši od klasického jednorozmerného (textového) štruktúrovaného programovania.

Myšlienky štruktúrovaného programovania boli vyvinuté, keď počítačová grafika ešte v skutočnosti neexistovala a hlavným nástrojom pre algoritmistov a programátorov bol jednorozmerný (lineárny alebo stupňovitý) text. Pred príchodom počítačovej grafiky bola metodika klasického štruktúrovaného programovania najlepší rozhodnutie .

S príchodom počítačovej grafiky sa situácia zmenila. Pomocou výrazových prostriedkov grafiky bolo možné modifikovať, rozvíjať a dopĺňať tri typy základných (textových) riadiacich štruktúrnych konštrukcií, ako aj úplne opustiť kľúčové slová , potom, else, prípad , prepnúť, zlomiť, kým , urobiť, opakovať , do, for, foreach, continue, loop, exit, when, last, atď a nahradiť ich riadiacou grafikou, teda použiť dvojrozmerné štruktúrované programovanie.

Dôležitým problémom je zložitosť moderného programovania a hľadanie spôsobov, ako ho prekonať. Podľa Evgeniy Pyshkin, Ph.D. štrukturálny prístup. V procese prekonávania značnej zložitosti softvéru je najdôležitejším nástrojom vizualizácia návrhu a programovania.

pozri tiež

Poznámky

  1. Meyer B. Cítiť triedu. Naučiť sa dobre programovať s objektmi a zmluvami. - Za. z angličtiny. - M.: Národná otvorená univerzita INTUIT: BINOM. Vedomostné laboratórium, 2011. - 775s. - S. 208. - ISBN 978-5-9963-0573-5
  2. E. Dijkstra. Operátor  goto  sa považuje za škodlivý
  3. Dijkstra E. Prejsť Na Vyhlásenie Považuje sa za škodlivé // Komunikácia  ACM, Zväzok 11, Č. 3, marec 1968, str. 147-148. - Asociácia pre Computing Machinery, Inc.
  4. Pozri tiež materiály z archívu Dijkstra. E. W. Dijkstra Archív.  Rukopisy Edsgera W. Dijkstra. - Katedra počítačovej vedy Texaská univerzita at Austin
  5. Rukopis EWD1308 z archívu Dijkstra.
  6. Prepis rukopisu EWD1308 z archívu Dijkstra. Čo viedlo k „Poznámkam o štruktúrovanému programovaniu“ – Nuenen, 10 jún 2001. – Katedra počítačových ved. The University Texas at Austin, USA
  7. Linger R., Mills H., Witt B. Teória a prax štruktúrovaného programovania. - Za. z angličtiny. - M.: Mir, 1982. - 406. roky. - S. 7.
  8. John Vlissides, Kyle Brown, Gerard Meszaros AntiPatterns: The Survival Guide. .
  • Štrukturálne
    • Rozdelenie zodpovednosti:
  • Šablóna: softvér, ktorý je založený na reprezentácii programu vo forme hierarchickej štruktúry blokov. Navrhnuté v 70. rokoch XX. storočia E. Dijkstroyom, vyvinuté a doplnené N. Wirthom.

    Podľa tejto metodiky

    1. Každý program je štruktúra postavená z troch typov základných štruktúr:
      • sekvenčné vykonávanie- jedno vykonanie operácií v poradí, v akom sú zapísané v texte programu;
      • vetvenia- jedno vykonanie jednej z dvoch alebo viacerých operácií v závislosti od splnenia danej podmienky;
      • cyklu- opakované vykonávanie tej istej operácie, kým nie je splnená niektorá daná podmienka (podmienka pokračovania cyklu).
      V programe môžu byť základné štruktúry do seba ľubovoľne vnorené, ale nie sú k dispozícii žiadne iné prostriedky na riadenie postupnosti operácií.
    2. Opakujúce sa fragmenty programu (alebo neopakujúce sa, ale reprezentujúce logicky integrálne výpočtové bloky) je možné urobiť vo forme tzv. podprogramy (postupy alebo funkcie). V tomto prípade sa do textu hlavného programu namiesto fragmentu umiestneného v podprograme vloží inštrukcia volanie podprogramu. Keď sa takáto inštrukcia vykoná, vykoná sa volaný podprogram, po ktorom vykonávanie programu pokračuje inštrukciou nasledujúcou za inštrukciou na zavolanie podprogramu.
    3. Vývoj programu sa vykonáva krok za krokom metódou „zhora nadol“.

    Najprv sa napíše text hlavného programu, do ktorého sa namiesto každého pripojeného logického fragmentu textu vloží volanie podprogramu, ktorý tento fragment vykoná. Namiesto skutočných, fungujúcich podprogramov sú do programu vložené „stuby“, ktoré nič nerobia. Výsledný program sa skontroluje a odladí. Potom, čo sa programátor presvedčí, že podprogramy sú volané v správnom poradí (to znamená, že všeobecná štruktúra programu je správna), sú stub rutiny postupne nahradené skutočnými a vývoj každého podprogramu sa vykonáva v rovnakom ako hlavný program. Vývoj končí, keď nezostane jediný „gag“, ktorý by nebol odstránený. Takáto postupnosť zaisťuje, že v každej fáze vývoja sa programátor súčasne zaoberá viditeľným a zrozumiteľným súborom fragmentov a môže si byť istý, že všeobecná štruktúra všetkých vyšších úrovní programu je správna. Pri údržbe a vykonávaní zmien v programe je jasné, ktoré postupy je potrebné zmeniť a sú vykonávané bez toho, aby boli ovplyvnené časti programu, ktoré s nimi priamo nesúvisia. To zaisťuje, že pri vykonávaní zmien a opravách chýb nezlyhá niektorá časť programu, ktorá je momentálne mimo oblasti pozornosti programátora.

    Veta o štruktúrovanom programovaní:

    Hlavný článok: Bohmova-Jacopiniho veta

    Akákoľvek schéma algoritmu môže byť reprezentovaná ako skladba vnorených začiatočných a koncových blokov, ak teda inak podmienené príkazy, cykly s predbežnou podmienkou (while) a môžu existovať ďalšie logické premenné (príznaky).
    Túto vetu sformulovali talianski matematici C. Bohm a G. Jacopini v roku 1966 a hovorí nám, ako sa vyhnúť používaniu operátora goto.

    Príbeh

    Metodika štruktúrovaného programovania sa objavila v dôsledku zvyšujúcej sa zložitosti úloh riešených na počítačoch a s tým súvisiacej komplikácie softvéru. V 70. rokoch objem a zložitosť programov dosiahli takú úroveň, že „intuitívny“ (neštruktúrovaný, resp. „reflexný“) vývoj programov, ktorý bol v skoršej dobe štandardom, prestal uspokojovať potreby praxe. Programy sa stávali príliš zložitými na to, aby sa dali riadne udržiavať, a preto bola potrebná určitá systematizácia procesu vývoja a programovej štruktúry.

    Najsilnejšou kritikou zo strany vývojárov štrukturálneho prístupu k programovaniu bol operátor GOTO (operátor nepodmieneného skoku), ktorý bol vtedy dostupný takmer vo všetkých programovacích jazykoch. Nesprávne a nepremyslené používanie ľubovoľných prechodov v texte programu vedie k neprehľadným, zle štruktúrovaným programom (tzv. špagetový kód), z textu ktorých je takmer nemožné pochopiť poradie vykonávania a vzájomnú závislosť fragmentov.

    Dodržiavaním princípov štruktúrovaného programovania boli texty programov, dokonca aj dosť veľké, bežne čitateľné. Pochopenie programov sa výrazne uľahčilo, umožnilo sa vyvíjať programy v bežnom priemyselnom režime, kedy program bez väčších problémov pochopí nielen jeho autor, ale aj ostatní programátori. To umožnilo vývojovým silám vývojových tímov vyvíjať na tú dobu pomerne veľké softvérové ​​systémy a udržiavať tieto komplexy dlhé roky, dokonca aj napriek nevyhnutným zmenám v zložení personálu.

    Metodológia štrukturálneho vývoja softvéru bola uznaná ako „najsilnejšia formalizácia 70. rokov“. Potom sa slovo „štrukturálny“ stalo v priemysle módou a začalo sa používať všade tam, kde to bolo potrebné a kde to nebolo potrebné. Pracovalo sa na „konštrukčnom návrhu“, „štrukturálnom testovaní“, „konštrukčnom návrhu“ atď. Vo všeobecnosti sa stalo približne to isté, čo sa stalo v 90. rokoch a v súčasnosti sa deje s pojmami „objektový“, „objektový“ a „elektronický“.

    Tu sú niektoré z výhod štruktúrovaného programovania:

    1. Štrukturálne programovanie umožňuje výrazne znížiť počet možností na zostavenie programu podľa rovnakej špecifikácie, čo výrazne znižuje zložitosť programu a čo je dôležitejšie, uľahčuje ostatným vývojárom jeho pochopenie.
    2. V štruktúrovaných programoch sú logicky súvisiace operátory vizuálne bližšie a voľne súvisiace operátory sú vzdialenejšie, čo umožňuje zaobísť sa bez vývojových diagramov a iných grafických foriem zobrazovacích algoritmov (v skutočnosti je samotný program vlastným vývojovým diagramom).
    3. Proces testovania a ladenia štruktúrovaných programov je výrazne zjednodušený.

    pozri tiež

    Odkazy


    Nadácia Wikimedia. 2010.

    • Mahajanapada
    • ťava

    Pozrite si, čo je „štruktúrované programovanie“ v iných slovníkoch:

      Štruktúrované programovanie- metodika a technológia vývoja softvérových systémov, založená na princípoch: programovania zhora nadol; modulárne programovanie. V tomto prípade musí logika algoritmu a programu používať tri hlavné štruktúry: sekvenčné ... ... Finančná slovná zásoba

      štruktúrované programovanie- struktūrinis programavimas statusas T sritis automatika atitikmenys: engl. štruktúrované kódovanie; štruktúrované programovanie vok. strukturelle Programmierung, fr rus. štruktúrované programovanie, n; štruktúrované programovanie, n pranc.… … Automatikos terminų žodynas

      Štruktúrované programovanie- 46. Štruktúrované programovanie Štruktúrované programovanie Zdroj: GOST 19781 90: Softvérové ​​zabezpečenie systémov spracovania informácií. Pojmy a definície … Slovník-príručka termínov normatívnej a technickej dokumentácie

      Programovanie- Tento článok je potrebné úplne prepísať. Na diskusnej stránke môžu byť vysvetlenia. Tento výraz má iné významy, pozri Programy ... Wikipedia

      PROGRAMOVANIE- 1) proces zostavovania programu, akčného plánu. 2) Časť informatiky, ktorá študuje metódy a techniky programovania. S istou mierou konvenčnosti sa P. ako disciplína delí na: teoretickú, študijnú matematiku. abstrakcie programov (ako objekty s ... ... Fyzická encyklopédia

      Prototypové programovanie- Prototypové programovanie je štýl objektovo orientovaného programovania, v ktorom neexistuje koncept triedy a opätovné použitie (dedičnosť) sa vykonáva klonovaním existujúcej inštancie prototypového objektu. ... ... Wikipedia

      Paradigma (programovanie)- Programovacia paradigma je súbor myšlienok a konceptov, ktorý definuje štýl písania programov. Paradigmu v prvom rade určuje základná programová jednotka a samotný princíp dosiahnutia modularity programu. Ako táto jednotka ... Wikipedia

      Počítačové programovanie- Vývoj softvéru Vývoj softvéru Procesný proces Analýza krokov procesu | Dizajn | Implementácia | Testovanie | Implementácia | Modely údržby / Metódy Agile | čistá miestnosť | Iteratívne | Scrum | RUP | Lekári bez hraníc | Špirála | ... Wikipedia

      Neštruktúrované programovanie- Metodika štrukturálneho programovania vývoja softvéru, ktorá je založená na reprezentácii programu vo forme hierarchickej štruktúry blokov. Navrhnuté v 70. rokoch XX. storočia E. Dijkstroyom, vyvinuté a doplnené N. Wirthom. Vo ... Wikipédii

      Komponentovo orientované programovanie- Programovacie paradigmy Agentovo orientované Komponentovo orientované Konkatenatívne Deklaratívne (kontrastné s imperatívom) Obmedzenia Funkčný Dátový tok Tabuľkovo orientovaný (tabuľkový procesor) Reaktívny ... Wikipedia

    knihy

    • Programming Discipline , Dijkstra E. , Knihu napísal jeden z najväčších zahraničných odborníkov v oblasti programovania, ktorého sovietsky čitateľ pozná prekladmi svojich kníh do ruštiny (napríklad „Štrukturálne ... Kategória: Matematika a veda Séria: Vydavateľ: YoYo Media, Kúpiť za 2177 rubľov
    • Programovanie. Základy algoritmizácie a programovania. Učebnica , A. N. Pylkin , B. G. Trusov , N. I. Parfilova , Učebnica bola vytvorená v súlade s federálnym štátnym vzdelávacím štandardom v smere vzdelávania 230100 "Informatika a počítačové inžinierstvo" (kvalifikácia "bakalár").… Kategória:

    ZHRNUTIE RECENZNEJ PREDNÁŠKY

    Pre študentov odboru
    T1002 "Softvér informačných technológií"

    (A.M.Kadan, Ph.D., docent)

    Otázka číslo 34.
    Charakteristika hlavných metodík vývoja softvéru

    1. Metodika a technológia programovania.

    2. imperatívne programovanie.

    2.1. Modulárne programovanie.

    2.2. Štrukturálne programovanie.

    3. Metóda objektovo orientovaného programovania.

    Metodika a technológia programovania

    Uvádzame hlavné definície.

    Program - hotový produkt vhodný na uvedenie jeho autorom na trhna systéme, na ktorom bol vyvinutý.

    softvér - program, ktorý môže spustiť každýkat, testovať, opravovať a rozvíjať. Takýto program by mal byťnapísané všeobecným štýlom, dôkladne testované a udržiavanépodrobnú dokumentáciu. (Vzhľadom na v súčasnosti módny koncept autorských práv je potrebné si tu ujasniť – každý, kto mať časy rozhodnutie pracovať so zdrojovým kódom programov)

    Softvérový balík - súbor interagujúcich programov dohodnutých na funkciách a formátoch, dobre definovaných rozhraniach a spoločnepredstavuje kompletný nástroj na riešenie veľkých problémov.

    Životný cyklus softvér je celé obdobie jeho vývoja a fungovania, počnúc momentom vzniku nápadu a končiac ukončením jeho používania.

    Metodológia programovanie - súbor metód použiteľných v životnom cykle softvéru a zjednotených spoločným filozofickým prístupom.

    Zo štyroch v súčasnosti všeobecne známych metodológií programovania - imperatívne, objektovo orientované, logické, funkčné - zvážte to, čo ste sa naučili - metodológie imperatívneho a objektovo orientovaného programovania.

    Technológia štúdium programovania technologických procesov a poradie, v akom sú etapy(pomocou vedomostí, metód a prostriedkov).

    Technológie sú vhodne charakterizované v dvoch dimenziách – vertikálnej (reprezentujú procesy) a horizontálne (reprezentujú fázy).

    Proces - súbor vzájomne súvisiacich akcií, ktoré transformujú niektoré vstupné údaje na výstup. Procesy sa skladajú zo súboru akcií a každá akcia sa skladá zo súboru úloh. Vertikálna dimenzia odráža statické aspekty procesov a operuje s pojmami, ako sú pracovné toky, činnosti, úlohy, výstupy a umelci.

    Etapa - časť aktivít vývoja softvéru, obmedzená určitým časovým rámcom a končiaca vydaním konkrétneho produktu, určená požiadavkami špecifikovanými pre túto etapu. Etapy sa skladajú z etáp, ktoré majú zvyčajne iteračný charakter. Niekedy sa fázy kombinujú do väčších časových rámcov nazývaných fázy. Horizontálna dimenzia teda predstavuje čas, odráža dynamické aspekty procesov a pracuje s pojmami, ako sú fázy, etapy, etapy, iterácie a kontrolné body.

    Technologický prístup je určený špecifikami kombinácie etáp a procesov, zameraných na rôzne triedy softvéru a na vlastnosti vývojového tímu.

    Ak sa znova obrátime na obrázok, potom sa v tomto prípade v každej fáze vykonáva jeden proces. Samozrejme, pri vývoji a vytváraní veľkých programov nie je takáto schéma dostatočne správna (a jednoducho nereálna). Môže sa však brať ako základ pre mnohé ďalšie technologické prístupy k riadeniu životného cyklu.

    Imperatívne programovanie

    Imperatívne programovanie je historicky prvá metodológia programovania, ktorú používa každý programátor, ktorý programuje v ktoromkoľvek z „masových“ programovacích jazykov - základné, pascal, C.

    Je orientovaný na klasický von Neumannov model, ktorý dlho zostával jedinou hardvérovou architektúrou. Metodika imperatívneho programovania sa vyznačuje princípom postupná zmena stavu kalkulačky krok za krokom. Manažment zmien je zároveň plne definovaný a plne kontrolovaný.

    Metódy a koncepty

    · Metóda zmeny stavu- spočíva v dôslednej zmene v cosstojaci. Metóda je podporená konceptom algoritmu.

    · Metóda riadenie toku- pozostáva z krokového ovládaniazvládanie. Metóda je podporená konceptom realizačný tok.

    Výpočtový model. Ak je kalkulačka chápaná ako moderný počítač, tak jej stavom budú hodnoty všetkých pamäťových buniek, stav procesora (vrátane aktuálneho príkazového ukazovateľa) a všetkých pridružených zariadení. Jedinou dátovou štruktúrou je sekvencia buniek (páry "adresa" - "hodnota") s lineárne usporiadanými adresami.

    Ako matematický model imperatívne programovanie využíva Turing-Postov stroj, abstraktné výpočtové zariadenie navrhnuté na úsvite počítačového veku na opis algoritmov.

    Syntax a sémantika. Jazyky, ktoré podporujú tento výpočtový model, sú akoby prostriedkom na opis funkcie prechodov medzi stavmi kalkulačky. Ich hlavný syntaktický koncept je operátor. Prvou skupinou sú jednoduché operátory, v ktorých žiadna z ich častí nie je nezávislým operátorom (napríklad operátor priradenia, operátor nepodmieneného skoku, volanie procedúry atď.). Druhou skupinou sú štrukturálne príkazy, ktoré spájajú iné príkazy do nového väčšieho príkazu (napríklad zložený príkaz, výberové príkazy, príkazy cyklu atď.).

    Tradičné štruktúrovač- podprogram (postup alebo funkcia). Podprogramy majú parametre a lokálne definície a možno ich volať rekurzívne. Funkcie vracajú hodnoty ako výsledok svojej práce.

    Ak sa v tejto metodológii vyžaduje vyriešiť určitý problém, aby sa jeho výsledky využili pri riešení nasledujúceho problému, potom bude typický prístup nasledovný. Najprv sa vykoná algoritmus, ktorý rieši prvý problém. Výsledky jeho práce sú uložené v špeciálnom pamäťovom mieste, ktoré je známe ďalšiemu algoritmu a používa ho.

    imperatívne programovacie jazyky. imperatív programovacie jazyky manipulovať s údajmi krok za krokom pomocou sekvenčných pokynov a aplikovať ich na rôzne údaje. Predpokladá sa, že prvým algoritmickým programovacím jazykom bol Plankalkuel (z plánu kalkulu), ktorý v rokoch 1945-1946 vyvinul Konrad Zuse.

    Najznámejšie a najrozšírenejšie imperatívne programovacie jazyky, z ktorých väčšina bola vytvorená koncom 50-tych - v polovici 70-tych rokov XX storočia, sú znázornené na obrázku. Pozor na prázdne miesto na obrázku zodpovedajúce 80. a 90. rokom minulého storočia. Toto je obdobie nadšenia pre nové paradigmy a imperatívne jazyky sa v tomto čase prakticky neobjavili.

    Trieda úloh.Imperatívne programovanie je najvhodnejšie na riešenie problémov, pri ktorých je prirodzené sekvenčné vykonávanie ľubovoľných príkazov. Príkladom je správa moderného hardvéru. Keďže takmer všetky moderné počítače sú nevyhnutné, táto metodika vám umožňuje generovať pomerne efektívny spustiteľný kód. Ako zložitosť úlohy rastie, imperatívne programy sú čoraz menej čitateľné.

    Programovanie a ladenie skutočne veľkých programov (napríklad kompilátorov) napísaných výlučne na základe metodológie imperatívneho programovania sa môže ťahať mnoho rokov.

    Literárne odporúčania. Vlastnosti imperatívneho programovania sú opísané v obrovskom množstve kníh. Najsystematickejšie sú prezentované v práci "Universal Programming Languages. Semantic Approach" [Kalinin, Matskevich 1991].

    Modulárne programovanie

    Modulárne programovanie - je spôsob programovania, pri ktorom je celý program rozdelený do skupiny komponentov tzvmodulov, pričom každý z nich má svoju riadenú veľkosť, dokoncanejaký účel a podrobné rozhranie s vonkajším prostredím. Jedinou alternatívou k modularite je monolitický program, ktorýjasné, nepríjemné. Najzaujímavejšia otázka v štúdiimodularita - definícia kritéria pre rozdelenie do modulov.

    Koncepty modulárneho programovania. V jadre Za modulárnym programovaním stoja tri hlavné koncepty:

    Princíp zadržiavania informácií Parnas. Každý komponent sa skrýva jediné konštrukčné riešenie, t.j. modul slúži na skrytie informácií formácie. Prístup k vývoju softvéru je prvý vytvorí sa zoznam návrhových rozhodnutí, ktoré je obzvlášť ťažké urobiť alebo sa pravdepodobne zmenia. Potom sa určilo odsamostatné moduly, z ktorých každý implementuje jeden zo špecifikovanýchšedivý.

    Axióma modularity Cowan. Modul - nezávislá softvérová jednotkajednotka, ktorá slúži na vykonávanie nejakej špecifickej funkcie a na prepojenie so zvyškom programu. softvér jednotka musí spĺňať tieto podmienky:

    blokovosť organizácie,tj schopnosť volať softvérovú jednotkuzu z blokov akéhokoľvek stupňa hniezdenia;

    syntaktická segregácia, t.j. zvýraznenie modulu v syn textedaňové prvky;

    sémantickú nezávislosť, t.j. nezávislosť od miesta, kdejednotka gram sa nazýva;

    všeobecnosť údajov t. j. mať uložené svoje vlastné údajepri každom hovore;

    úplnosť definície, t.j. nezávislosť programovej jednotky.

    programovanie zostavy Tseytin. Moduly sú softvérové časti, z ktorých je program zostavený. Existujú tri hlavnépredpoklady pre modulárne programovanie:

    snaha izolovať nezávislú jednotku programových znalostí.V ideálnom prípade by mal byť každý nápad (algoritmus) zarámovaný vo forme modulu;

    potreba organizačného rozdelenia veľkých projektov;

    možnosť paralelného vykonávania modulov (v kontexte paralelnéholenivé programovanie).

    Definície a príklady modulov. Tu sú niektoré ďalšie definície modulov.

    • modulje súbor príkazov, ku ktorým možno pristupovať pomocou názov.

    · modul -ide o súbor programových príkazov, ktorý má hraničné prvky a identifikátor (prípadne agregovaný).

    Funkčná špecifikácia modulu by mala zahŕňať:

    • syntaktickú špecifikáciu jeho vstupov, ktorá musí umožňovať konštruovať v programovacom jazyku používanom syntaktickysprávne zaobchádzanie s ním;

    · popis sémantiky funkcií vykonávaných modulom pre každú z jeho funkcií vstupy.

    Odrody modulov. Existujú tri hlavné typy modulov:

    1) "Malý" (funkčný) moduly, ktoré zvyčajne implementujú jedenakúkoľvek konkrétnu funkciu. Základným a najjednoduchším modulom takmer vo všetkých programovacích jazykoch je postup resp funkciu.

    2) "Priemerné" (informatívne) modulov, ktoré implementujú spravidla niekoľkooperácie alebo funkcie na rovnakej dátovej štruktúre (informačný objekt), ktorá sa mimo tohto modulu považuje za neznámu. Príklady "stredných" modulov v programovacích jazykoch:

    a)úlohy v programovacom jazykuAda;

    b)klastra v programovacom jazyku CLU ;

    c)triedy v programovacích jazykoch C++ a java.

    3) "Veľký" (booleovský) moduly, ktoré kombinujú sadu „stredných“ resp„malé“ moduly. Príklady "veľkých" modulov v programovacích jazykoch dávka:

    a)modul v programovacom jazyku Modula-2;

    b)balíky v programovacích jazykochAda a Java.

    Súprava vlastnosti modulu navrhol Myers [Myers 1980]. Pozostáva z nasledovnéhovšeobecné konštrukčné vlastnosti:

    1) veľkosť modulu;

    Modul by mal mať 7 (+/-2) konštruktov (napríklad príkazy prefunkcie alebo vlastnosti balíka).Toto číslo je brané na základe predstáv psychológov o priemernej prevádzkenom buffer ľudskej pamäte. Symbolické obrazy v ľudskom mozgu sú spojené do "kúskov" - súborov faktov a spojení medzi nimi, zapamätaných a extrahované ako celok. V každom okamihu môže človekútok nie viac ako 7 kusov.

    Modul (funkcia) nesmie presiahnuť 60 riadkov. V dôsledku toho môžeale umiestnené na jednej strane výtlačku alebo ľahko viditeľné na obrazovke monitora.

    2) sila (konektivita) modulu;

    Existuje hypotéza globálnych údajov, ktorá tvrdí, že globálneúdaje sú škodlivé a nebezpečné. Myšlienka globálnych údajov sa tak diskredituje rovnako ako myšlienka operátora bezpodmienečného skokuísť do. Dátová lokalitauľahčuje čítanie a pochopenie modulov, ako aj ich jednoduché odstránenie z programu.

    Konektivita (sila) modul (kohézia ) je mierou nezávislosti jeho častí.Čím vyššia je konektivita modulu - tým lepšie, tým viac spojení v pomere kpo zvyšok programu sa skrýva v sebe. Typy sa dajú rozlíšiťpripojenia nižšie.

    funkčnékonektivitu. Modul s funkčnou konektivitou reality zuet jeden akúkoľvek špecifickú funkciu a nemožno ho rozdeliť na 2 moduly s rovnakým typom pripojenia.

    konzistentné konektivitu. Modul s takouto konektivitou môže byť bit do po sebe nasledujúcich častí, ktoré vykonávajú nezávislé funkcie, alespoločne vykonávajú jednu funkciu. Napríklad ten istý modul možno použiť najskôr na hodnotenie a potom na preskúmanie. dátová práca.

    Informačné(komunikatívne) spojenie. Modul s informáciami multi-konektivita je modul, ktorý vykonáva niekoľko operácií alebo fungujú nad rovnakou dátovou štruktúrou (informácie objekt), ktorý sa mimo tohto modulu považuje za neznámy. Táto informáciaSpojka sa používa na implementáciu abstraktných typovúdajov.

    Venujme pozornosť tomu, že prostriedky na nastavenie sú informačne silnémoduly neboli prítomné v skorých programovacích jazykoch (napr. FORTRAN a dokonca aj v pôvodnej verzii jazyka Pascal ). A až neskôr, v programovacom jazyku udržiavanie mieru Ada, objavil sa balík - prostriedok na špecifikáciu informačne odolného modulu.

    3) prepojenie modulu s inými modulmi;

    Spojka(spojka ) - miera relatívnej nezávislosti modulu od ostatnýchmodulov. Nezávislé moduly je možné upravovať bez prepracovania iné moduly. Čím slabšia je väzba modulu, tým lepšie. Zvážte časyosobné typy spojok.

    Nezávislýmoduly sú ideálnym prípadom. Moduly nič nevediao sebe navzájom. Môžete organizovať interakciu takýchto modulov a poznať ichrozhranie a zodpovedajúcim spôsobom presmerovať výstup jeden modul na vstup druhého. Dosiahnite to spojenie je ťažké a nie je potrebné, pretože spojenie podľa údajov(parametrické prepojenie) je dosť dobré.

    Spojka podľa(parametrické) je zreťazenie, keď dátasú odovzdané modulu ako hodnoty jeho parametrov alebo ako výsledok jehovolania do iného modulu na vyhodnotenie nejakej funkcie. Tototyp zreťazenia je implementovaný v programovacích jazykoch pri prístupek funkciám (postupom). Sú definované dva druhy tohto spojeniasú dané prírodou.

    · Spojka pre jednoduché dátové položky.

    · Spojka podľa štruktúry údajov. V tomto prípade musia oba modulyuvedomte si vnútornú dátovú štruktúru.

    4) rutina (idempotencia, nezávislosť od predchádzajúceho ny) modul.

    rutina- ide o nezávislosť modulu od predchádzajúcich volaní naň(z praveku). Modul nazveme rutinným, ak je výsledkom jeho vývoja robotov závisí iba od počtu odovzdaných parametrov (a nie od počtu zásahov).

    Modul by mal byť vo väčšine prípadov rutinný, existujú však prípady, kedykedy má modul ukladať históriu. Pri výbere stupňa rutiny dula použiť tri odporúčania.

    · Vo väčšine prípadov robíme modul rutinným, t.j. nezávislým odpredchádzajúce hity.

    · Moduly závislé od histórie by sa mali používať iba v nichprípady, keď je to potrebné na zreťazenie údajov.

    · Špecifikácia modulu závislého od histórie by mala jasne uvádzaťtáto závislosť je formulovaná tak, aby používatelia mohlischopnosť predvídať správanie takéhoto modulu.

    Štrukturálne programovanie.

    Ako variant sa objavilo štruktúrované programovanie (SP). riešenia problému zníženia KOMPLEXNOSTI vývoja softvéru.

    Na začiatku éry programovania nebola práca programátora ničím regulovaná. Úlohy, ktoré sa mali vyriešiť, sa nelíšili rozsahom a rozsahom, používali sa hlavne strojovo orientované jazyky a jazyky im blízke, ako napríklad Assembly, vyvinuté programy zriedka dosahovali významné veľkosti a neexistovali žiadne prísne časové obmedzenia. ich vývoja.

    S vývojom programovania sa objavovali úlohy, pre ktoré boli určené obmedzené časové rámce pre čoraz zložitejšie úlohy so zapojením skupín programátorov. V dôsledku toho sa vývojári stretávajú so skutočnosťou, že metódy vhodné na vývoj malých úloh nemožno použiť pri vývoji veľkých projektov z dôvodu ich zložitosti.

    Cieľom štruktúrovaného programovania je teda zvýšiť spoľahlivosť programy, poskytovanie údržbu a úpravy, úľava a zrýchlenie rozvoj.

    Metodika štruktúrovaného imperatívneho programovania - prístup pre ktorá spočíva v nastavení dobrej topológie pre imperatívne programy, vrátane odmietnutia používania globálnych dát a bezpodmienečného operátora pobočky, vývoja modulov so silnou konektivitou a zabezpečenia toho, aby nebolizávislosti na iných moduloch.

    Prístup je založený na dvoch hlavných princípoch. slabiny:

    • Sekvenčný rozklad algoritmu na riešenie problému zhora nadol.
    • Použitie štrukturálneho kódovania.

    Pripomeňme, že táto metodológia je najdôležitejším vývojom imperacionálna metodológia.

    Pôvod, história a vývoj. Tvorcom štrukturálneho prístupu je Edsger Dijkstra. On tiežpatrí k pokusu (bohužiaľ úplne nepoužiteľné prehromadné programovanie) spojiť štruktúrované programovanie s metódami preukazovania správnosti vytvorených programov. Takí známi vedci ako H. Mills, D.E. Knuth, S. Hoor.

    Metódy a koncepty tvoriace základ štruktúrovaného programovania. Sú tam tri

    Metóda algoritmický rozklad zhora nadol - je krok za krokompodrobný popis problému, počnúc najvšeobecnejším problémom. Themetóda poskytuje dobrú štruktúru. Metóda podporovanákoncepcie algoritmu.

    Metóda modulárna organizácia častí programu- spočíva v štiepaníprogramy do špeciálnych komponentov nazývaných moduly. Metódapodporované konceptom modul.

    Metóda štrukturálne kódovanie - sa používa pri kódovanítri základné riadiace štruktúry. Štítky a operátor bezpodmienený skok sú ťažko sledovateľné spojenia, bez ktorých chceme prejsť. Metóda je podporená konceptom zvládanie

    Štrukturálne programovacie jazyky. Hlavný rozdiel od klasickej metodológie imperatívneho programovania spočíva v odmietnutí (presnejšie toho alebo toho stupňa odmietnutia) z operácie. operátor bezpodmienečného prechodu.

    [Pratt T., 1979] „Dôležitou vlastnosťou syntaxe pre programátora je schopnosť odrážať v štruktúre programu štruktúru základného algoritmu . Pri použití metódy známej ako štruktúrované programovanie , program je konštruovaný hierarchicky – zhora nadol (od hlavného programu po podprogramy najnižšej úrovne), pričom sa na každej úrovni používa iba obmedzený súbor riadiacich štruktúr: jednoduché sekvencie inštrukcií, cykly a niektoré typy podmienených vetiev. Vďaka dôslednej implementácii tejto metódy je štruktúra výsledných algoritmov ľahko pochopiteľná, laditeľná a modifikovateľná. V ideálnom prípade by sme mali byť schopní preložiť takto zostavenú programovú schému priamo do zodpovedajúcich inštrukcií programu, ktoré odrážajú štruktúru algoritmu.

    Štruktúrovacia veta (Böhm-Giacopini Boem - Jacopini )): Akýkoľvek správny program (t.j. program s jedným vstupom a jedným výstupom bez slučiek a nedosiahnuteľných vetiev) je možné napísať pomocou nasledujúcich logických štruktúr - postupnosť, výber a opakovanie cyklu

    Dôsledok 1: Akýkoľvek program je možné zredukovať na formu bez príkazu goto.

    Dôsledok 2: Akýkoľvek algoritmus môže byť implementovaný v jazyku založenom na troch riadiacich štruktúrach - sekvencia, cyklus, opakovanie.

    Dôsledok 3: Zložitosť štruktúrovaných programov je obmedzená, aj keď je ich veľkosť neobmedzená.

    Štruktúrované programovanie nie je samoúčelné. Jeho hlavným účelom je získať dobrý ("správny") program, avšak aj v tom najlepšom programe skokové príkazyísť doniekedy sú potrebné: napríklad výstup zo sady vnorených slučiek.

    Takmer vo všetkých jazykoch, ktoré podporujú imperatívnu metodológiu,programy môžu byť vyvinuté podľa tejto metodiky. Niekoľko jazykov zaviedlo špeciálne náhrady za príkaz goto, aby sa uľahčilo spravovanie slučiek (napríklad Break and Continue in C).

    Trieda úloh.Trieda problémov pre túto metodológiu zodpovedá triede problémov pre impériummetodiky. Všimnite si, že v tomto prípade je možné vyvinúť viackomplexné programy, pretože sa dajú ľahko pochopiť a analyzovať.

    Literárne odporúčania. Jedným z najznámejších diel v tejto oblasti je článok „Poznámkyo štruktúrovanom programovaní“ [Dijkstra 1975]. Metódy štrukturálnychprogramovanie sú podrobne rozobraté v knihe „Teória a praxštrukturálne programovanie"[Linger, Mills, Witt 1982]. Praxštruktúrované programovanie je možné študovať v knihe „Algorithms +dátové štruktúry = programy“ [Wirth 1985]. Filozofia vizuálne štrukturálneprogramovanie je podrobne popísané v [Parondzhanov 1999].

    Metóda objektovo orientovaného programovania.

    Metóda štruktúrovaného programovania sa ukázala ako účinná pri písaní programov „obmedzenej zložitosti“. S narastajúcou zložitosťou implementovaných softvérových projektov a tým aj s objemom kódu vytváraných programov sa však možnosti metódy štrukturálneho programovania ukázali ako nedostatočné.

    Za hlavný dôvod vzniknutých problémov možno považovať to, že program priamo nereflektoval štruktúru javov a konceptov reálneho sveta a súvislosti medzi nimi. Pri pokuse o analýzu a úpravu textu programu bol programátor nútený pracovať s umelými kategóriami.

    Na písanie stále zložitejších programov bol potrebný nový prístup k programovaniu. V dôsledku toho boli vyvinuté princípy objektovo orientovaného programovania. OOP preberá najlepšie nápady zo štruktúrovaného programovania a kombinuje ich s výkonnými novými konceptmi, ktoré vám umožňujú organizovať vaše programy novými spôsobmi.

    Musím povedať, že teoretické základy OOP boli položené už v 70-tych rokoch minulého storočia, ale ich praktická implementácia sa stala možná až v polovici 80-tych rokov s príchodom vhodných technických prostriedkov.

    Používa metodiku OOP metóda rozkladu objektov, podľa ktorého je štruktúra systému (statická zložka) popísaná z hľadiska objekty a odkazy medzi nimi, a správanie systému (dynamická zložka) – z hľadiska výmeny správy medzi objektmi. Správy môžu byť buď reakciou na udalosti spôsobené vonkajšími faktormi alebo generované samotnými objektmi.

    Objektovo orientované programy sa nazývajú „programy riadené udalosťami“ na rozdiel od tradičných programov nazývaných „programy riadené údajmi“.

    Hlavné metódy a koncepcie OOP

    · Metóda objektovo orientovaný rozklad- spočíva vo výbere predmetov a vzťahov medzi nimi. Metóda je podporovaná konceptmi zapuzdrenia, dedičnosti a polymorfizmu.

    · Metóda abstraktné dátové typy– spôsob zapuzdrenia. Podporované konceptom abstraktných dátových typov.

    · Metóda preposielanie správ- spočíva v popise správania sa systému z hľadiska výmeny správ medzi objektmi. Podporované konceptom správy.

    Výpočtový model čistý OOP podporuje iba jednu operáciu - odoslanie správy objektu. Správy môžu mať parametre, ktoré sú objektmi. Samotná správa je tiež objektom.

    Objekt má sadu obslužných programov správ (súbor metód). Objekt má polia - osobné premenné tohto objektu, ktorých hodnoty sú odkazy na iné objekty. V jednom z polí objektu je uložený odkaz na objekt predchodcu, ktorému sa posielajú všetky správy nespracované týmto objektom. Štruktúry, ktoré popisujú spracovanie a preposielanie správ sú zvyčajne oddelené do samostatného objektu, nazývaného trieda tohto objektu. Samotný objekt sa nazýva inštancia špecifikovanej triedy.

    Syntax a sémantika

    V syntaxi čistých objektovo orientovaných jazykov môže byť všetkonapísané vo forme odosielania správ objektom. Orientácia triedy na objektjazykoch popisuje štruktúru a fungovanie súboruobjekty s podobnými vlastnosťami, vlastnosťami a správaním. Objekt patrí do určitej triedy a má svoju vlastnúvlastný vnútorný stav. Metódy - funkčné vlastnostiva, ktoré je možné aktivovať.

    V objektovo orientovanom programovaní existujú tri hlavné vlastnosti:

    Zapuzdrenie. Ide o skrývanie informácií a kombinovanie údajov afunkcie (metódy) vo vnútri objektu.

    Dedičnosť. Budovanie hierarchie generovaných objektov s možnosťou pre každý takýto objekt nástupcu prístupuna kód a údaje všetkých rodičovských nadradených objektov.Postačí budovanie hierarchií náročná úloha, pretože si vyžaduje klasifikáciu.

    Väčšina predmetov okolo nás patrí do kategórií diskutovaných v knihe [Schleer, Mellor 1993]:

    · Skutočné objekty sú abstrakcie objektov, ktoré existujú vo fyzickom svete;

    · Roly sú abstrakcie účelu alebo účelu osoby, časti vybavenia alebo organizácie;

    · Incidenty sú abstrakcie niečoho, čo sa stalo alebo stalo;

    · Interakcie sú objekty, ktoré sú výsledkom vzťahov medzi inými objektmi.

    Polymorfizmus (inklúzny polymorfizmus) - priradenie k akcii jedn názov, ktorý je potom rozdelený nahor a nadol v hierarchii objektovcomov a každý objekt hierarchie vykonáva túto akciu spôsobom, ktorývhodné pre neho.

    Každý objekt má odkaz na triedu, do ktorej patrí. Opri prijatí správy objekt zavolá triedu, aby danú správu spracovala.komunikácia. Správu možno odovzdať v hierarchii dedičnostinii, ak samotná trieda nemá metódu na jej spracovanie. Ak Dynamicky sa vyberie robot udalosti pre správu a potom metódy volanie obsluhy udalostí sa zvyčajne nazýva virtuálne.

    Prirodzenými prostriedkami štruktúrovania v tejto metodológii sútriedy. Triedy definujú, z ktorých polí inštancií a metód sú prístupné mimo, ako spracovať jednotlivé správy a pod.orientované jazyky, zvonku sú dostupné iba metódy a dK údajom objektu je možné pristupovať iba prostredníctvom jeho metód.

    Interakcia úloh v tejto metodike sa vykonáva pomocou posielanie správ medzi objektmi, ktoré implementujú tieto úlohy.

    Príklad popisu v nejakom abstrakte Pascal -ako objektovo orientovaný jazyk triedy "point", ktorá je dedičom triedy "koordináty", môže vyzerať takto:

    typu Súradnice = trieda(TOobjekt)

    x, y: celé číslo;
    Konštruktor Init(_x, _y: celé číslo);
    Funkcia GetX : integer;
    Funkcia GetY : integer;
    SetProcedureX(_x:integer);
    Set ProcedureY(_y:integer);
    Move Procedure (dx , dy : integer);
    Deštruktor Hotovo; virtuálne;

    Konštruktor Init();
    x:= _x; y:=_y
    koniec;
    Funkcia GetX : integer;
    začať
    GetX := x
    koniec;
    . . . . . . . . . . . . .
    koniec;

    TPoint = trieda(TCradnice)
    farba: celé číslo;
    Konštruktor Init(_x, _y, _Color: integer);
    Funkcia SetColor(_Color: integer);
    Funkcia GetColor : integer;

    Konštruktor Init(_x, _y, _Color: integer);
    Zdedené Init(_x, _y);
    Farba:= _Color
    koniec;
    . . . . . . . . . . . . .

    Koniec ;

    Ak chceme neskôr použiť inštancie triedTPoint, bude potrebné ich vytvoriť volaním metódy konštruktora.

    Var P1: Bod;

    P 1.Init(0 ,0 , 14); P 1. Pohyb (+2, -2);

    Na podporu koncepcie OER, špeciálne objektovo orientovaný jazykoch programovanie. Všetky OOP jazyky možno rozdeliť do troch skupín.

    Čisté jazyky, v tej najklasickejšej forme podporujúcej objektovú metodológiu. Takéto jazyky obsahujú malú jazykovú časť a významnú knižnicu, ako aj sadu nástrojov na podporu runtime.

    Pidžinské jazyky, ktorý sa objavil v dôsledku zavedenia objektovo orientovaných konštrukcií v populárnych imperatívnych programovacích jazykoch.

    Odstránené jazyky, ktorý sa objavil v dôsledku odstránenia najnebezpečnejších a najzbytočnejších konštrukcií z hľadiska OOP z hybridných jazykov.

    Literatúra

    ISO/IEC 12207:1995 Informačné technológie – Procesy životného cyklu softvéru.

    [Wirt 1985] – Wirt N. Algoritmy + dátové štruktúry = programy. – M.: Mir, 1985

    [Dijkstra 1975] – Dijkstra E. Notes on Structured Programming // Dahl W., Dijkstra E., Hoare K. Structural Programming. – M.: Mir, 1975

    [Kalinin, Matskevich 1991] – Kalinin A.G., Matskevich I.V. Univerzálne programovacie jazyky. sémantický prístup. - M .: Rádio a komunikácia, 1991

    [Linger, Mills, Witt 1982] - Linger R., Mills H., Witt B. Teória a prax štruktúrovaného programovania. - M.: Nauka, 1990

    [Myers 1980] - Myers G. Spoľahlivosť softvéru. – M.: Mir, 1980

    [Parondžanov 1999] - Paranodžanov V.D. Ako zlepšiť prácu mysle. - M .: Rádio a komunikácia, 1999

    [Pratt T., 1979] - Pratt T. Programovacie jazyky: vývoj a implementácia. - M.:Mir, 1979

    [Schleer, Mellor 1993] - Schleer S., Mellor S. Objektovo orientovaná analýza: Modelovanie sveta v štátoch. - Kyjev: Dialektika, 1993.