Sitä kutsutaan strukturoiduksi ohjelmoimiseksi. Strukturoitu ohjelmointitekniikka. Strukturoidun ohjelmoinnin perusperiaatteet

Liittovaltion talousarvion korkea-asteen koulutuslaitos "Mordovian osavaltio

Pedagoginen instituutti, joka on nimetty M.E. Evsevieva"

Fysiikan ja matematiikan tiedekunta

Informatiikan ja tietojenkäsittelytieteen laitos

ABSTRAKTI

"Strukturoidun ohjelmoinnin periaatteet. Algoritmiset perusrakenteet ja niiden superpositiot"

Täydentäjä: opiskelija gr. MDM-212

Bagdanova Yana

Saransk 2016

Johdanto

1900-luvun 70-luvun alkuun mennessä, kun ohjelmointikielten kehitys oli saavuttanut melko korkean tason ja luodut ohjelmistojärjestelmät olivat saavuttaneet varsin vaikuttavan koon (satoja tuhansia - miljoonia komentoja), kävi selväksi, että ohjelmistoprojektit oli tullut liian monimutkaiseksi onnistuneeseen suunnitteluun, koodaukseen ja virheenkorjaukseen hyväksyttävässä ajassa. Monimutkaisia ​​ongelmia ratkaisevat ohjelmoijat kohtasivat ohjelmien määrän ja koon kasvattamisen niin paljon, että jatkokehitysprosessista tuli lähes hallitsematon, eikä kukaan kehittäjistä voinut varmuudella sanoa, että luotu ohjelmistotuote tekee aina sen, mitä vaaditaan, ja että se ei tee mitään mitä ei vaadita. Näin ollen ongelma syntyi radikaalisti muuttuvista lähestymistapoista suurten ohjelmistojärjestelmien luomiseen.

Näiden ongelmien perusteella 70-luvun johtavat ohjelmoijat (Dijkstra , Wirth , Antoi , Xoap , Jordania , Konstantin , Myers jne.) Hankkeiden toteuttamiselle kehitettiin tiukat säännöt, joita kutsuttiinrakenteellinen metodologia .

Tärkeä vaihe tämän lähestymistavan kehittämisessä oli vuosina 1968-69 pidetyt kansainväliset ohjelmakonferenssit. Toisella niistäEdsger Dijkstra käytti ensin termiä "strukturoitu ohjelmointi ” ja ehdotti täysin uutta tapaa luoda ohjelmia. Hän piti ohjelmaa joukona hierarkkisia abstrakteja tasoja, jotka mahdollistivat:

    rakenna ohjelma selkeästi, mikä paransi ohjelmoijien ymmärtämistä;

    suorittaa todisteita sen oikeellisuudesta ja siten lisää ohjelman luotettavuutta;

    vähentää ohjelman kehitysaikaa.

Toinen sysäys ohjelmoijien ajattelutavan muuttamiseen oli julkaistu kirjeDijkstra yhden tieteellisen kustantajan toimittaja, jonka otsikkona oli "GOTO-lausetta tulee pitää haitallisena " Tämä kirje aiheutti kiivasta kiistaa tuon ajan ohjelmoijien keskuudessa, mutta lopulta voitti rakenteellinen ajattelu, joka lisäksiDijkstra , jota Zürichin teknisen yliopiston professori tukee aktiivisestiWirth ja professori Oxfordin yliopistossaXoap . Yksi kiistan tuloksista oli todiste siitä, että mikä tahansa ohjelma voidaan kirjoittaa käyttämällä vain yksinkertaista lausesarjaa, iteratiivista rakennetta, kutensillä aikaa ( Hei hei ) ja valintarakennetapaus ( valinta ) ja operaattorimene ( mene ) ei ole välttämätön ohjausrakenne strukturoidussa ohjelmoinnissa. Valitettavasti riitoja operaattoristamene oli yksi negatiivinen "sivuvaikutus" - melko usein ohjelmointi ilmanmene tunnistettiin kaikkeen strukturoituun ohjelmointiin. Strukturoidun ohjelmoinnin tavoitteet ovat kuitenkin paljon globaalimpia ja vakavampia.

1. RAKENNETUN OHJELMOINTITEKNIIKAN PERUSTEET

Strukturoitu ohjelmointi - kehitysmetodologia ohjelmisto, joka perustuu ohjelman esittämiseen lohkojen hierarkkisen rakenteen muodossa. Ehdotettu XX vuosisadan 70-luvulla. E. Dijkstra, kehittäjä ja täydentänyt N. Wirth (kuva 1).

Edsger Wiebe Dijkstra (1930 – 2002) - hollantilainen tiedemies, jonka ideat vaikuttivat tietokoneteollisuuden kehitykseen. Tunnetaan kaavion lyhimmän polun löytämiseen tarkoitetun algoritmin luojana, yhtenä strukturoidun ohjelmoinnin perustajista. Vuonna 1972 hän voitti Turing-palkinnon.

Niklaus Wirth (1934) - Sveitsiläinen tiedemies, tietojenkäsittelytieteen asiantuntija, yksi tunnetuimmista ohjelmointikielen kehittämisen teoreetikoista, tietojenkäsittelytieteen professori, Turing-palkinnon voittaja vuonna 1984. Ohjelmointikielten johtava kehittäjä Pascal, Modula-2, Oberon.

Riisi. 1. Strukturoidun ohjelmoinnin pioneerit - E. Dijkstra ja N. Wirth.

Strukturoidun ohjelmoinnin metodologia ilmestyi tietokoneilla ratkaistavien ongelmien monimutkaisuuden ja ohjelmistojen vastaavan monimutkaistumisen seurauksena: 1900-luvun 70-luvulla. Ohjelmien määrä ja monimutkaisuus ovat saavuttaneet sen tason, että "intuitiivinen" (strukturoimaton) ohjelmakehitys, joka oli normi aikaisin aika, ei enää täytä käytännön tarpeita. Ohjelmista oli tulossa liian monimutkaisia ​​kunnolla ylläpidettäviksi, joten kehitysprosessin ja ohjelmarakenteen jonkinlainen systematisointi vaadittiin.

Kovin kritiikki ohjelmoinnin jäsennellyn lähestymistavan kehittäjiltä oli operaattoriMENE ( ehdoton hyppyoperaattori ). Virheellinen ja harkitsematon mielivaltaisten siirtymien käyttö ohjelmatekstissä johti sekavaan, huonosti jäsenneltyyn ohjelmiin (ns.spagettikoodi ), jonka tekstistä oli lähes mahdotonta ymmärtää suoritusjärjestystä ja fragmenttien keskinäistä riippuvuutta.

Strukturoitu ohjelmointi perustuu periaatteisiinperäkkäinen hajoaminen tehtäviä jatarkoituksenmukainen hänenjäsentäminen yksittäisiin komponentteihin. Strukturoidut ohjelmointimenetelmät ovat joukko ohjelmistotuotteiden järjestelmäsuunnittelun teknisiä ja organisatorisia periaatteita.

Tyypillisiä strukturoituja ohjelmointitekniikoita ovat:

    ylhäältä alas -muotoilu (suunnittelu ylhäältä alas);

    modulaarinen (menettelyllinen)ohjelmointi ;

    rakenteellinen koodaus .

Strukturoidun ohjelmoinnin metodologian mukaan:

1. Mikä tahansa ohjelma on rakenne, josta on rakennettu kolme tyyppiä perusmallit:

    peräkkäinen suoritus - toimintojen kertaluonteinen suorittaminen siinä järjestyksessä, jossa ne on kirjoitettu ohjelmatekstiin;

    haarautuminen - yhden tai useamman toiminnon kertaluonteinen suoritus, riippuen tietyn ehdon täyttymisestä;

    sykli - saman toiminnon toistuva suoritus niin kauan kuin jokin määrätty ehto täyttyy (silmukan jatkamisen ehto).

Ohjelmassa perusrakenteet voidaan upottaa toisiinsa millä tahansa tavalla, mutta muita keinoja toimintojen järjestyksen ohjaamiseen ei tarjota.

2. Ohjelman osien toistaminen (tai ei toista, mutta edustaa loogisesti integraalia laskentayksiköitä) voidaan esittää muodossaaliohjelmat (menettelyt tai toiminnot). Tässä tapauksessa pääohjelman tekstiin lisätään aliohjelmaan asetetun fragmentin sijaan käsky kutsua aliohjelma. Kun tällainen käsky suoritetaan, suoritetaan kutsuttu aliohjelma, jonka jälkeen ohjelman suoritus jatkuu aliohjelman kutsun käskyä seuraavalla käskyllä.

3. Ohjelma kehitetään askel askeleelta ylhäältä alas -menetelmällä.

Ensin kirjoitetaan pääohjelman teksti, johon tekstin jokaisen koherentin loogisen fragmentin sijaan lisätään kutsu aliohjelmalle, joka suorittaa tämän fragmentin. Oikeiden, toimivien aliohjelmien sijaan "tyngät ”, jotka eivät tee mitään. Tuloksena oleva ohjelma tarkistetaan ja virheenkorjaus tehdään. Kun ohjelmoija on vakuuttunut siitä, että aliohjelmat kutsutaan oikeassa järjestyksessä (eli ohjelman yleinen rakenne on oikea), tynkä-alirutiinit korvataan peräkkäin todella toimivilla ja jokaisen aliohjelman kehitys suoritetaan samalla tavalla. menetelmää pääohjelmana. Kehitys päättyy, kun jäljellä ei ole ainuttakaan "kantaa", jota ei olisi poistettu. Tämä järjestys varmistaa, että ohjelmoija on jokaisessa kehitysvaiheessa samanaikaisesti tekemisissä näkyvän ja ymmärrettävän fragmenttijoukon kanssa ja voi olla varma, että ohjelman kaikkien korkeampien tasojen yleinen rakenne on oikea. Ohjelmaa ylläpidettäessä ja muutoksia tehtäessä tulee selväksi, mitä menettelytapoja on muutettava, ja ne tehdään vaikuttamatta niihin ohjelman osiin, jotka eivät suoraan liity niihin. Näin voidaan taata, että kun muutoksia tehdään ja virheitä korjataan, jokin ohjelmoijan huomion ulkopuolella oleva ohjelma ei epäonnistu.

Strukturoidun ohjelmoinnin periaatteita noudattaen tehtiin ohjelmatekstit, jopa melko suuretkin, normaalisti luettavia. Ohjelmien ymmärtäminen on helpottunut huomattavasti, on tullut mahdolliseksi kehittää ohjelmia normaalissa teollisessa tilassa, jolloin ohjelman ymmärtäminen on vaivatonta paitsi sen tekijälle, myös muille ohjelmoijille. Tämä mahdollisti varsin suurien ohjelmistojärjestelmien kehittämisen tuolloin kehitystiimien avulla ja näiden järjestelmien ylläpidon useiden vuosien ajan myös väistämättömien henkilöstömuutosten edessä.

Strukturoitu ohjelmistokehitysmetodologia on tunnustettu "70-luvun tehokkaimmaksi formalisaatioksi". Sen jälkeen sana "rakenteellinen" tuli muotiin teollisuudessa, ja sitä alettiin käyttää kaikkialla, missä se oli tarpeen ja missä ei. Teoksia "rakennesuunnittelusta", "rakenteellisesta testauksesta", "rakennesuunnittelusta" jne. ilmestyi.

Strukturoidun ohjelmoinnin etuja ovat seuraavat:

1. Strukturoidun ohjelmoinnin avulla voit merkittävästi vähentää vaihtoehtojen määrää ohjelman rakentamiseen saman spesifikaation mukaan, mikä vähentää merkittävästi ohjelman monimutkaisuutta ja helpottaa muiden kehittäjien ymmärtämistä.

2. Strukturoiduissa ohjelmissa loogisesti yhdistetyt operaattorit ovat visuaalisesti lähempänä ja löyhästi kytketyt operaattorit kauempana, mikä mahdollistaa vuokaavioiden ja muiden algoritmien graafisen kuvaamisen (itse asiassa itse ohjelma on oma vuokaavionsa) ilman vuokaavioita ja muita graafisia muotoja.

3. Strukturoitujen ohjelmien testaus- ja virheenkorjausprosessi yksinkertaistuu huomattavasti.

Katsotaanpa tarkemmin strukturoidun ohjelmoinnin perusmenetelmiä.

1.1. Strukturoidun ohjelmoinnin tavoitteet ja periaatteet

Strukturoidun ohjelmoinnin tavoitteet ovat:

    Ohjelmointikurin varmistaminen ohjelmistojärjestelmien luomisprosessissa .

    Ohjelman luettavuuden parantaminen . Luettavuus paranee, jos noudatat seuraavia sääntöjä:

    • Vältä käyttämästä kielikonstruktioita, joissa on ei-ilmeinen semantiikka;

      pyrkiä lokalisoimaan ohjausrakenteiden toimintaa ja tietorakenteiden käyttöä;

      kehittää ohjelma niin, että se voidaan lukea alusta loppuun ilman ohjaussiirtymiä toiselle sivulle.

    Ohjelman tehokkuuden parantaminen . Tämä voidaan saavuttaa jäsentämällä ohjelma, jakamalla se moduuleiksi niin, että virheet ovat helposti löydettävissä ja korjattavissa, ja niin, että minkä tahansa moduulin teksti voidaan kirjoittaa uudelleen muista riippumatta tehokkuuden lisäämiseksi.

    Ohjelman luotettavuuden parantaminen . Tämä voidaan saavuttaa, jos ohjelmaa on helppo testata päästä päähän, eikä se aiheuta ongelmia virheenkorjausprosessin organisoinnissa. Tämä varmistetaan ohjelman hyvällä strukturoinnilla jakamalla se moduuleiksi ja noudattamalla luettavien ohjelmien kirjoittamista koskevia sääntöjä.

    Vähentynyt aika ja kustannukset ohjelmistokehitys . Tämä tapahtuu, kun jokainen kehitystiimin ohjelmoija pystyy kirjoittamaan ja virheenkorjaamaan enemmän koodia kuin ennen.

Perusstrukturoidun ohjelmoinnin periaatteet on koottu taulukkoon. 1.

Pöytä 1. Strukturoidun ohjelmoinnin periaatteet

Periaate

Selitys

Abstraktio

Abstraktion avulla ohjelmoija voi kuvitella tarvittavan ratkaisun ongelmaan ottamatta välittömästi huomioon monia yksityiskohtia. Ohjelmoija voi tarkastella ohjelmaa kerroksittain: ylimmällä tasolla näkyy suurempi abstraktio, mikä helpottaa suunnittelun tarkastelua, kun taas alimmalla tasolla näkyy toteutuksen tarkempia yksityiskohtia.

Muodollisuus

Tiukan metodologisen lähestymistavan käyttäminen ohjelmaa kehitettäessä, mikä on perusta ohjelmoinnin muuttamiselle improvisaatiosta tekniikan tieteenalaksi. Tämä periaate antaa perusteita ohjelmien oikeellisuuden todistamiselle, koska sen avulla voidaan tutkia ohjelmia (algoritmeja) matemaattisina objekteina.

"Hajoita ja hallitse"

Ohjelman jakaminen erillisiksi fragmenteiksi (moduuleiksi), joita on helppo hallita ja jotka mahdollistavat itsenäisen virheenkorjauksen ja testauksen.

Hierarkkinen järjestys

Osiin jaon rakenne on yhtä tärkeä kuin tällaisen jaon tosiasia. Tämä periaate asettaa vaatimuksen moduulien välisten suhteiden hierarkkisesta rakenteesta ohjelmistopaketti, mikä helpottaa strukturoitujen ohjelmointitavoitteiden saavuttamista.

1.2. Ylhäältä alas -muotoilu

Ongelmamäärittely toimii lähtökohtana ohjelman luomiselle. Sinun on ymmärrettävä, mitä toimia ongelman ratkaisemiseksi on suoritettava, kuvattava ne luonnollisella kielellä ja riittävän korkealla abstraktiolla.

Tehtävän määrittely on sen ensisijainen suunnittelu. Sieltä siirrymme ohjelmaan selventäen asteittain kuvausta.

Projektin asteittaista hiomista kutsutaanylhäältä alas -suunnittelumenetelmä ( vaiheittaiset yksityiskohdat taiylhäältä alas -muotoilu ).

Esimerkki 1. Harkitse esimerkiksi lapsen pukemisprojektia.

Ratkaisu:

1. Ensisijainen tavoite :

Pukeutua.

2. Tavoitteen määrittäminen ensimmäisessä vaiheessa :

Laita alaosa päälle.

Laita päälle puolikas.

2.1. Alapuoli voidaan pukea kahdessa vaiheessa:

Laita housut päälle.

Pue jalkaan sukat ja saappaat.

2.2. Yläosa voidaan pukea myös kahdessa vaiheessa:

Laita paita päälle.

Pue takki päälle.

3. Lopullinen projekti näyttää tältä:

Laita housut päälle.

Laita sukat jalkaan.

Pue saappaasi jalkaan.

Laita paita päälle.

Pue takki päälle.

Ylhäältä alas -suunnittelumenetelmä sisältää yleisen tietojenkäsittelytoiminnon peräkkäisen jakamisen yksinkertaisiksi toiminnallisiksi elementeiksi ("ylhäältä alas"). Tämän seurauksena rakennetaan hierarkkinen kaavio -algoritmin toiminnallinen rakenne ( FSA ), joka kuvastaa yksittäisten toimintojen koostumusta ja keskinäistä alisteisuutta (kuva 2).

Liite 1

Sovellus n

Toiminto 1

Toiminto 2

Toiminto m

Alatoiminto 11

Alatoiminto 1 k

Alatoiminto m 1

Alatoiminto m 2

Alatoiminto sp

Tavoite 1

Alatavoite 11

Alatavoite 1s

Kohde2

Osatavoite2 1

Osatavoite2 q

Riisi. 2. Sovelluksen toiminnallinen rakenne

FSA-sovelluksen kehittämisen toimintosarja on seuraava:

    ovat päättäneetautomaatiotavoitteet aihealue ja niiden hierarkia (tavoite-alatavoite);

    on asennettusovellusten koostumus (käsittelytehtävät) asetettujen tavoitteiden toteutumisen varmistaminen;

    TBCsuhteen luonne sovellukset ja niiden pääominaisuudet (tiedot ongelmien ratkaisemiseksi, ratkaisun aika ja tiheys, suoritusehdot jne.);

    ongelmien ratkaisemiseen tarvittavat määritetääntietojenkäsittelytoiminnot ;

    suoritettukäsittelyfunktioiden hajottaminen ehdotetuilla työkaluilla saavutettuun rakenteelliseen monimutkaisuuteen.

Tämä sovellusrakenne heijastaa tärkeintä -yhdiste Jatoimintojen yhteenliittäminen tietojen käsittely sovelluksen toteuttamiseksi, vaikka se ei paljasta kunkin yksittäisen toiminnon suorituslogiikkaa, niiden kutsujen ehtoja tai tiheyttä.

1.3. Modulaarinen ohjelmointi

Modulaarinen ohjelmointi on luonnollinen seuraus ylhäältä alas -suunnittelusta ja koostuu ohjelman jakamisesta osiin -moduulit , kehitetty erikseen.

Moduuli on itsenäinen osa ohjelmaa, jolla on tietty tarkoitus ja joka tarjoaa määritettyjä toimintoja käsittely muista riippumatta ohjelmistomoduulit. Moduuli koostuu loogisesti yhdistetyistä funktionaalisten elementtien joukosta.

Ohjelmoinnissa moduuli tarkoittaa erillistäaliohjelma , ja aliohjelmia kutsutaan useinmenettelyt taimenettely-toiminnot . Siksi modulaarista ohjelmointia kutsutaan myösmenettelyllinen .

Kun luomme ohjelmistotuotteita, korostammeuudelleenkäytettävät moduulit , ne ovat tyypillisiä ja yhtenäisiä, mikä vähentää aikaa ja työvoimakustannuksia ohjelmistotuotteen kehittämiseen kokonaisuutena.

Jotkut ohjelmistotuotteet käyttävät moduuleja valmiista kirjastoista, jotka sisältävät vakiorutiineja, proseduureja, toimintoja, objekteja ja tietojenkäsittelymenetelmiä.

Monien moduulien joukossa on:

    päämoduuli – ohjaa ohjelmistotuotteen julkaisua (olemassa yksikössä);

    ohjausmoduuli – tarjoaa puheluita muille moduuleille käsittelyä varten;

    toimivat moduulit – suorittaa käsittelytoimintoja;

    palvelumoduulit ja kirjastot , apuohjelmia – toteuttaa palvelutoimintoja.

Ohjelmistotuotteen käytön aikana tarvittavat ohjelmistomoduulit aktivoituvat. Ohjausmoduulit asettavat kutsusekvenssin seuraavan moduulin suorittamista varten. Moduulien välinen tiedonsiirto varmistetaan yhteisen tietokannan avulla tai moduulien välisellä tiedonsiirrolla vaihtomuuttujien kautta.

Jokainen moduuli voidaan suunnitella itsenäisesti tallennettavaksi tiedostoksi; Ohjelmistotuotteen toimiminen edellyttää täydellisiä ohjelmistomoduuleja.

Moduulissa on oltava seuraavat tiedotominaisuuksia :

    yksi sisäänkäynti ja yksi uloskäynti – sisääntulossa ohjelmistomoduuli vastaanottaa tietyn joukon lähtötietoja, suorittaa mielekästä käsittelyä ja palauttaa yhden joukon tulostietoa, ts. vakioperiaatetta toteutetaanIPO ( Input-Process-Output input-process-output );

    toiminnallinen täydellisyys – moduuli suorittaa luettelon säännellyistä toiminnoista toteuttaakseen jokaisen yksittäisen toiminnon kokonaisuudessaan, mikä riittää aloitetun käsittelyn loppuun saattamiseksi;

    looginen riippumattomuus – ohjelmistomoduulin toiminnan tulos riippuu vain lähtötiedoista, mutta ei riipu muiden moduulien toiminnasta;

    heikot tietoyhteydet muihin ohjelmistomoduuleihin – moduulien välinen tiedonvaihto olisi mahdollisimman vähäistä;

    hallittavan kokoinen ja monimutkainen ohjelmakoodi .

Moduulit sisältävät:

    käsittelyssä käytettävissä olevien tietojen määrittäminen;

    tietojenkäsittelytoiminnot;

    kaavioita yhteenliittämisestä muihin moduuleihin.

Jokainen moduuli koostuutekniset tiedot Jakehon . Tekniset tiedot määritellä moduulin käytön säännöt jakehon – käsittelyprosessin toteuttamistapa.

Samantyyppiset toiminnot toteutetaan samoilla moduuleilla. Päämoduuli tarjoaa huipputason toiminnon; se ohjaa alemman tason toimintojen suorittamista, joita alimoduulit vastaavat.

Kun määritetään joukko moduuleja, jotka toteuttavat tietyn algoritmin toiminnot, on otettava huomioon seuraavat asiat:

    ylemmän tason moduuli kutsuu jokaisen moduulin suoritettavaksi ja työnsä suoritettuaan palauttaa ohjauksen sen kutsuneelle moduulille;

    suurten päätösten tekeminen algoritmissa viedään hierarkian korkeimmalle mahdolliselle tasolle;

    Saman funktion käyttämiseksi algoritmin eri paikoissa luodaan yksi moduuli, joka kutsutaan suoritettavaksi tarpeen mukaan.

Algoritmin lisäjalostuksen seurauksena atoiminnallinen-modulaarinen kaavio ( FMS ) sovellusalgoritmi, joka on ohjelmoinnin perusta (kuva 2).

Ohjelmistomoduulien kokoonpano ja tyyppi, tarkoitus ja käyttö ohjelmassa määräytyvät pitkälti työkalujen mukaan.

Hierarkian toinen taso ohjelmia

Hierarkian ensimmäinen taso ohjelmia

Päämoduuli

(palvelinohjelma)

Ohjausmoduuli 1

(Ohjausohjelma 1)

Ohjausmoduuli n

(Ohjausohjelma n)

Moduuli 1A

(aliohjelma 1A)

Moduuli 1B

(aliohjelma 1B)

Moduuli 1W

(alirutiini 1 W )

Moduuli 0A

(aliohjelma 0A)

Moduuli 0B

(aliohjelma 0B)

nA moduuli

(aliohjelma nA)

nB-moduuli

(aliohjelma nB)

nW-moduuli

(aliohjelma nW)

Hierarkian kolmas taso ohjelmia

Riisi. 3. Sovellusalgoritmin toiminnallinen-modulaarinen rakenne

Useimmat nykyaikaiset loppukäyttäjälähtöiset sovellusohjelmat toimivat interaktiivisessa vuorovaikutuksessa käyttäjän kanssa siten, että tiedonkäsittelyyn vaikuttavia viestejä vaihdetaan. Vuorovaikutteisessa tilassa käyttäjän vaikutuksesta käynnistetään prosessointitoimintoja, muutetaan objektin ominaisuuksia, konfiguroidaan tiedonantoparametreja jne. Dialogiprosessia ohjataan luodun skenaarion mukaan, jolle on määritelty seuraavat:

    kohdat (hetki, tila) dialogin alussa;

    keskustelun aloittaja on henkilö tai ohjelmistotuote;

    dialogin parametrit ja sisältö - viestit, valikon koostumus ja rakenne, näyttömuodot jne.;

    ohjelmistotuotteen reaktio dialogin loppuun.

Soveltuu parhaiten dialogiprosessien ja loppukäyttöliittymien luomiseenoliosuuntautunut työkaluja ohjelman kehittäminen .

1.4. Rakenteellinen koodaus

Ohjelmointikäytäntö on osoittanut, että algoritmien ja ohjelmien kehittämiseen ja dokumentointiin tarvitaan tieteellisesti perusteltua metodologiaa. Tämän metodologian tulee koskea alkuperäisen ongelman analysointia, jakamalla se riittävän itsenäisiin osiin ja ohjelmoimalla nämä osat mahdollisimman itsenäisesti toisistaan. Tämä menetelmä onrakenteellinen koodaus ( ohjelmointi ).

Rakenteellinen koodaus on tapa kirjoittaa ohjelmia, joilla on tietty rakenne ja joita on siksi helppo ymmärtää, testata, muokata ja käyttää.

Tämä menetelmä perustuu pienen joukon yksinkertaisia ​​ohjausrakenteita (rakenneoperaattorit ), jonka oikea toiminta on helppo analysoida ja todeta. Lisäksi jotkin operaattorit koostuvat toisista niiden sisäkkäisistä.

Operaattoreiden strukturoitu ominaisuus on sejokaisella operaattorilla on yksi tulo ja yksi lähtö . Rakenneoperaattoreista rakennettua ohjelmaa kutsutaanjäsennelty .

Strukturoidun ohjelmoinnin perusta onstrukturointilause italialaiset matemaatikot K. Bohm ja G. Jacopini laativat vuonna 1966.

Lause vahvistaa, että riippumatta siitä, kuinka monimutkainen ongelma on, sen ratkaisualgoritmi (ja vastaavasti ohjelma) voidaan aina esittää kolmen tyyppisten sisäkkäisten lohkojen koostumuksena:

    seurata (alku-loppu alku-loppu ),

    haarautuminen (jos - sitten - muu jos-niin-muuta ),

    silmukat ennakkoehdoin (sillä aikaa Hei hei ).

Toisin sanoen näillä perusrakenteilla ontoiminnallinen täydellisyys , eli mikä tahansa algoritmi voidaan toteuttaa näiden kolmen rakenteen yhdistelmänä.

Käytännössä tämä lause sallii meidän välttää siirtymäoperaattoreiden käyttöämene , joka tekee algoritmeista ja ohjelmista visuaalisia ja helposti ymmärrettäviä.

Algoritmin pääohjausrakenteiden tyypit on esitetty kuvassa. 4.

1. Rakenne kuten "seurata » (Kuva 4, A) – muodostuu toimintosarjasta, S 1, S 2, …, Sn peräkkäin:

suorittaaS 1;

suorittaaS 2;

suorittaaSn .

Lineaarisessa laskentaprosessissa kaikki toiminnot suoritetaan peräkkäin siinä järjestyksessä, jossa ne kirjoitettiin. Tyypillinen esimerkki tällaisesta prosessista on vakiolaskentakaavio, joka koostuu kolmesta vaiheesta:

    alkutietojen syöttäminen;

    laskeminen kaavoilla;

    tuloksen ulostulo.

KielessäPascal tämä rakenne on suljettu käyttösuluissaAlkaa ... Loppu :

Alkaa

S 1;

S 2;

...

Sn ;

Loppu

Riisi. 4. Algoritmisen perusrakenteet:

A) seurata (Alkaa Loppu ); b) haarautuminen (Jos Sitten Muu ); V) silmukka ennakkoehdoin (Sillä aikaa Tehdä )

2. Rakenne kuten " haarautuminen » (JOS – NIIN – MUUTA ) (Kuva 4,b ) – tarjoaa tarkastuksen tuloksesta riippuen ehdotR , joka ottaa toisen kahdesta loogisesta arvostaJoo (Totta ) taiEi (Väärä ), valitsemalla yksi algoritmin vaihtoehtoisista tavoista:

Jos R

sitten suorittaa S 1

muuten toteuttaa S 2 .

Jokainen polku johtaa yhteiseen ulostuloon, joten algoritmi jatkaa toimintaansa riippumatta siitä, mikä polku valitaan.

KielessäPascal

Jos P

Sitten S 1

Muu S 2;

3. Rakenne kuten "silmukka ennakkoehdoin » (Kuva 4, V) – varmistaa toiminnon toistuvan suorittamisen S riippuen siitä, minkä arvon looginen ehto saa R:

siihen asti kunR

täyttääS .

Silmukan suoritus pysähtyy, kun ehto R ei toteuteta.

Kielessä Pascal tällä rakenteella on seuraava muoto:

Sillä aikaa P Tehdä

S ;

Laajennettu joukko alkeisalgoritmisia rakenteita sisältää lisäksi seuraavat ohjausrakenteet (kuva 5).

4. Rakenne kuten " lyhennetty haarautuminen » (JOS SITTEN ) (Kuva 5,A ) – jos kunnon tarkistuksen tulosR ottaa arvonJoo (Totta ), toiminto suoritetaanS ; muuten tämä toiminto ohitetaan ja ohjaus siirretään seuraavaan rakenteeseen:

Jos R

sitten suorittaa S 1 .

KielessäPascal tällä rakenteella on seuraava muoto:

Jos P

Sitten S ;

5 . Rakenne kuten " valinta - muuten » (Kuva 5,b ) ovat laajennettu versio tyyppirakenteestaJOS – NIIN – MUUTA . Tässä on ehto tarkistettavaksiR ei voi ottaa kahta loogista arvoa, vaan useita järjestysarvoja, esimerkiksi 1, 2, ...,n . JosR = i , toiminto suoritetaanSi . Jos arvoR on hyväksyttävien arvojen alueen ulkopuolella, toiminto suoritetaanS (lyhennetty versio"valinta » mitään toimintoa ei suoriteta ja ohjaus siirtyy seuraavaan rakenteeseen. KielessäPascal tällä rakenteella on seuraava muoto:

Asia P of

1: S1;

2: S2;

n: Sn

Muu S

loppu;

Riisi. 5. Muita perusalgoritmisia rakenteita:

A) lyhennetty haarautuminen (Jos Sitten ); b) valinta - muuten (Asia of Muu );
V) silmukka jälkiehdoin (Toistaa Siihen asti kun ); G) silmukka parametrin kanssa (varten Vastaanottaja ( alaspäin ) – Tehdä )

6. Rakenne kuten " silmukka jälkiehdoin » (Kuva 5,V ) – varmistaa toiminnon toistuvan suorittamisenS kunnes ehto täyttyyR .

KielessäPascal tällä rakenteella on seuraava muoto:

Toistaa

S

Siihen asti kun P ;

7. Rakenne kuten " silmukka parametrin kanssa » (Kuva 5,G ) – tarjoaa ennalta määrätyn toistuvan toiminnon suorittamisenS . Tässä tapauksessa seuraavat tyypilliset toiminnot suoritetaan peräkkäin:

    asettamalla käytettävän silmukkaparametrin alkuarvon (esimerkiksi jos silmukkamuuttuja on i, sille määritetään arvo i 1, eli i:=i 1);

    toimien suorittamista S tarjotaan silmukan rungossa;

    silmukkaparametrin muuttaminen, joka varmistaa, että tulos lasketaan uusilla aloitustiedoilla (esimerkiksi jos silmukkaparametri i muutoksia askelein i 3, i:=ii 3);

    silmukkaparametrin nykyisen arvon tarkistaminen annetulla lopullisella arvolla ( i<=i 2);

    siirtyminen silmukan rungon toistamiseen, jos silmukkaparametri ei ylittänyt lopullista arvoa, muuten - suorittamalla seuraavat toimet tai tulostamalla tulos.

KielessäPascal tällä rakenteella on seuraava muoto:

varten Muuttuva := i 1 Kohteeseen (alas) i 3 Tehdä

S ;

Ohjelmakaavion perusteella voit tunnistaa siitä osat (fragmentit), jotka ovat rakenteeltaan melko yksinkertaisia ​​ja ymmärrettäviä. Näiden fragmenttien esittäminen suurennettuina lohkoina helpottaa suuresti algoritmin (ja myöhemmin ohjelman) käsitystä kokonaisuutena.

Rakenneoperaattoreita käytetään yleensä ohjelman ylhäältä alas -suunnittelun alussa.

Täten,strukturoitu ohjelmointi perustuenmodulaarinen rakenne ohjelmistotuote jatyypillinen (perus ) hallintorakenteet Algoritmit tietojen käsittelemiseksi eri ohjelmistomoduuleista.

PÄÄTELMÄT

    Strukturoitu ohjelmointi on ohjelmistokehitysmetodologia, joka perustuu ohjelman esittämiseen lohkojen hierarkkisen rakenteen muodossa. Ehdotettu XX vuosisadan 70-luvulla. E. Dijkstroy, kehittäjä ja täydentänyt N. Wirth. Tyypillisiä rakenteellisia ohjelmointimenetelmiä ovat: ylhäältä alas -suunnittelu (ylhäältä alas -suunnittelu); modulaarinen (proseduurillinen) ohjelmointi; rakenteellinen koodaus.

    Strukturoidun ohjelmoinnin tavoitteet ovat: ohjelmointikurin varmistaminen, ohjelmien tehokkuuden ja luotettavuuden lisääminen, ohjelmistokehityksen ajan ja kustannusten vähentäminen. Strukturoidun ohjelmoinnin perusperiaatteet: abstraktio, muodollisuus, hajota ja hallitse, hierarkkinen järjestys.

    Ylhäältä alas -suunnittelumenetelmään kuuluu koko tietojenkäsittelytoiminnon peräkkäinen hajottaminen yksinkertaisiksi toiminnallisiksi elementeiksi ("ylhäältä alas"). Keinot saavuttaa tavoitteet edellisellä tasolla muuttuvat alemman tason tavoitteiksi.

    Rakennekoodaus on tapa kirjoittaa ohjelmia, joilla on tietty rakenne. Se perustuu pienen joukon rakenteellisia operaattoreita, joiden oikeellisuus on helposti analysoitavissa ja todettavissa. Lisäksi jotkin operaattorit koostuvat toisista niiden sisäkkäisistä.

    Strukturoidun ohjelmoinnin perusta on italialaisten matemaatikoiden C. Bohmin ja G. Iacopinin vuonna 1966 laatima strukturointilause. Lause vahvistaa, että riippumatta siitä, kuinka monimutkainen ongelma on, sen ratkaisualgoritmi (ja vastaavasti ohjelma) voidaan aina löytää. edustaa kokoonpanona kolmen tyyppisiä sisäkkäisiä lohkoja: seuraavat (alku-loppu), haarautuminen (jos-then-else), silmukat, joissa on ennakkoehto (while).

* E. Dijkstra antoi seuraavan määritelmän: " Strukturoitu ohjelmointi on kurinalaisuutta, jonka ohjelmoija asettaa itselleen».

Strukturoitu ohjelmointi - yksi suurimmista edistysaskeleista ohjelmointitekniikassa. Vaikka lähes kaikilla on yleinen ja melko epämääräinen käsitys strukturoidusta ohjelmoinnista, sille ei ole yleisesti hyväksyttyä selkeää määritelmää. Strukturoidulla ohjelmoinnilla pyritään kirjoittamaan mahdollisimman vähän monimutkaisia ​​ohjelmia, pakottamaan ohjelmoija ajattelemaan selkeästi ja helpottamaan ohjelman ymmärtämistä.

Ohjelman tekstin tulee olla sellainen, että se on luettavissa ylhäältä alas. Ehdottomien hyppyoperaattoreiden (GO TO) rajoittamaton käyttö rikkoo tätä ehtoa, minkä vuoksi strukturoitua ohjelmointia kutsutaan usein ohjelmoimiseksi ilman GO TO:ta.

Voit antaa esimerkkejä ohjelmista, jotka eivät sisällä GO TO:ta ja jotka on järjestetty siististi tikkaita lauseiden sisäkkäistason mukaisesti, mutta ovat täysin käsittämättömiä, ja on muitakin ohjelmia, jotka sisältävät GO TO:n ja ovat edelleen ymmärrettäviä. Joten GO TO:n olemassaolo tai puuttuminen on huono indikaattori ohjelman laadusta (kuvitukset kirjassa D. Knuth). Ja vielä: vaikein hallita ja mahdollisesti epävakaa on ehdoton hyppyoperaattori - GO TO.

Moduulien rungon rakenteen ja käytettävien perusohjelmointirakenteiden tulee olla potentiaalisesti kestäviä laitteistovikoja, lähdetietojen korruptoitumista ja ohjelmien virheitä vastaan.

Mikä tahansa ohjelma voidaan syntetisoida kolmen tyypin perusperusrakenteiden perusteella:

1. Yksinkertainen sekvenssi. 2. Ehdot (vaihtoehdot).

3. Toisto (syklit, iteraatiot). Toinen tai molemmat tyypit ovat mahdollisia:

Tee "vielä" Älä "vielä"

4. Voit lisätä neljännen mallin - valinnan (kytkin).

Lohkot määritellään rekursiivisesti: suorakulmiot edustavat sisäkkäisiä rakennuspalikoita, joita käytetään suorakulmion sijasta.

Luetellut perusrakenteet esimerkiksi Pascal-kielellä toteutetaan seuraavasti:

Ehdollinen operaattori JOS Hirsi. vyr. SITTEN operaattori 1 MUU operaattori 2;

JOS Hirsi. ilmaisu SITTEN operaattori;

Toisto (syklit, iteraatiot)

a) Tee "toistaiseksi" WHILE jatkon ehto TEHDÄ operaattori;

b) "älä vielä" TOISTA operaattori SIIHEN ASTI KUN lopetusehto;

c) Silmukka haulla FOR K:=B1 TO B2 DO operaattori;

K:=B2 ALAS B1 TEE operaattori;

Valitse (kytkin) CASE kunto OF

N1,...Nk: operaattori 1;

Ni,...Nm: operaattori n;

LOPPU ;

FoxBASE-kielessä nämä konstruktit toteutetaan seuraavasti:

Ehdollinen operaattori JOS Hirsi. ilmaisu

operaattorit1

[MUU

operaattorit2]

LOPPU JOS

Kierrä TEHDÄ, KUN ilmaisu

operaattorit

ENDDO

Valitse (kytkin) DO CASE

CASE Hirsi. ilmaisu 1

operaattorit

CASE Hirsi. ilmaisu2

Operaattorit

CASE Hirsi. Lauseke n

Operaattorit

LOPPU

Jokaiselle rakenteelle on tunnusomaista yksi piste, jossa hallinta siirtyy rakenteeseen (yksittäinen sisääntulo) ja yksi poistumispiste rakenteesta.

Näillä rakenteilla on systematisoiva ja kurinalainen merkitys. Alkuperäisten strukturoitujen ohjelmointirakenteiden yksinkertaisuus estää monimutkaiset tietoyhteydet ja pelottavat ohjauksen siirrot.

Moduulien rakennetta lisäämällä ohjelmien monimutkaisuus vähenee ja niiden näkyvyys lisääntyy, mikä auttaa vähentämään virheiden määrää. Ohjelmien laadun parantamiseksi sinun on kuitenkin maksettava lisämuistia ja aikaa niiden toteuttamisesta tietokoneella.

Ohjelman rakenne riippuu käytetystä ohjelmointikielestä. Nykyaikaiset ohjelmistokehitystyökalut ovat "paras" jäsennelty ohjelmointikieli. Yleisimmistä ohjelmointikielistä sopivimpia pidetään Pascal, Basic, FoxBASE. Strukturoitu ohjelmointi esimerkiksi Assembly-kielellä on lähes mahdotonta. Assembly-kieltä käyttäminen osoittaa, että ohjelma on kirjoitettu ensisijaisesti konekielisillä termeillä.

Strukturoitu ohjelmointi keskittyy kommunikointiin ihmisten, ei koneiden kanssa, ja edistää ohjelmien kirjoittamista, jotka tarjoavat yksinkertaisen ja selkeän ratkaisun ongelmaan.

On tärkeää, että ohjelmoija, jopa aloittaessaan ohjelmoinnin logiikan, ajattelee tärkeimmät perusrakennerakenteet.

GO TO -lauseeseen tulee kantaa: Vältä GO TO:n käyttöä aina kun mahdollista, mutta ei ohjelman selkeyden kustannuksella. Usein on suositeltavaa käyttää GO TO:ta poistuaksesi silmukasta tai moduulista, siirtyäksesi ON-rakenteisiin (esimerkiksi peruskielellä) tai välttääksesi liian syvää haarukoiden sisäkkäisyyttä, varsinkin kun siirtyminen suoritetaan myöhempään (sijaitsee alla). ) ohjelmakäskyt, ja ohjelman rakenne on edelleen helppolukuinen ylhäältä alas. GO TO -käskyn pahimpana käyttönä pidetään ohjauksen siirtoa ohjelmatekstissä korkeammalla (aiemmin) sijaitsevalle käskylle.

Lisäksi ohjelman lukemisen helpottamiseksi sen teksti on jaettava fyysisesti osiin lisäämällä osioiden ja jakojen väliin tyhjiä rivejä. Ohjelmateksti tulee kirjoittaa oikeilla siirroilla, jotta suoritusjärjestyksen katkokset ovat helposti jäljitettävissä. Kunkin moduulin yksittäisten suoritettavien lauseiden tulee mahtua yhdelle tulostuslaitteen sivulle.

Ensimmäiset ohjelmat koostuivat useista kymmenistä - sadoista konekäskyistä. Ohjelmistojärjestelmät ja tietojärjestelmät sisälsivät useista kymmenistä tuhansista miljooniin operaattoreihin korkean tason kielillä. Ohjelmistotyökalujen määrän kasvaessa prosessi nousi ensimmäiselle sijalle niiden kehitysnopeuteen vaikuttamisessa. virheenkorjaus, nuo. virheiden havaitseminen ja korjaaminen. Käytäntö on osoittanut, että on lähes mahdotonta kirjoittaa enemmän tai vähemmän suurta ohjelmaa ilman virheitä. Lisäksi jopa valmiiden ohjelmien toiminnan aikana havaitaan virheenkorjauksen aikana jääneet virheet. Virheet jakautuvat useisiin luokkiin.

Yksinkertaisin niistä on syntaksivirheet. Ne liittyvät kielikonstruktioiden virheelliseen kirjoitukseen ja havaitaan välittömästi, kun kääntäjä yrittää kääntää ohjelman konekielelle

Jos kaikki syntaksi- ja asetteluvirheet korjataan, ohjelma aloittaa suorituksen (vaihe Juosta). Tämän vaiheen voi kuitenkin keskeyttää virheellinen toiminto (kuten nollalla jako), jolloin sanotaan tapahtuvan ajonaikaisia ​​virheitä. (Ajonaikaiset virheet). Tai ohjelma on laskenut loppuun, mutta saadut tulokset ovat virheellisiä. Tämä voi johtua algoritmivirheistä tai virheistä moduulien välisten yhteyksien organisoinnissa, virheistä tietotyyppien muuntamisessa tai yksinkertaisista virheistä (esim. nolla puuttui kirjoitettaessa numeroa 100 ja ohjelma käytti 10:tä laskelmissa).

Ajonaikaiset virheet havaitaan ratkaisemalla sarja testitapauksia (ohjelman suorittaminen), jonka tulos tiedetään etukäteen. Yleensä tällaisten virheiden etsimiseen käytetty aika ylittää huomattavasti itse ohjelman kirjoittamiseen ja syntaksivirheiden korjaamiseen kuluvan ajan. Ohjelmointikonseptin kehitys liittyy läheisesti ongelmaan vähentää vikoja ohjelmaa kirjoitettaessa.

Strukturoidun ohjelmoinnin teoreettisia perusteita, ohjelman oikeellisuuden todistamisen teoriaa ja näyttöön perustuvaa ohjelmointia kehitetään.

Strukturoidun ohjelmoinnin käsite edellyttää sellaista tieteellisesti perusteltua lähestymistapaa ohjelman rakentamiseen ja ohjelmointikielen ominaisuuksiin, jossa mahdollisten virheiden määrä vähenee merkittävästi. Strukturoidussa ohjelmointikielessä konseptia on kehitetty merkittävästi Pascal. Strukturoidun ohjelmoinnin ydin on, että data on ensisijaisesti todellisten objektien abstraktioita ja muotoillaan mieluiten abstrakteiksi rakenteiksi, joilla ei välttämättä ole konkreettista toteutusta ohjelmointikielessä. Ohjelman rakentamisprosessissa dataesitystä jalostetaan vähitellen algoritmin tarkentamisen jälkeen.

Jäsennellyn ohjelmointikielen tulisi tarjota mahdollisuus rakentaa omia tietotyyppejä. Alimmalla tasolla ovat kielellä ennalta määritellyt perusrakenteet (esimerkiksi: skalaarityypit, tietue, array ja set). Monimutkaiset rakenteet rakennetaan perusrakenteista, kuten molekyyleistä. Perusrakennemuuttujat voivat muuttaa vain arvoa säilyttäen kelvollisten arvojen tyypin tai joukon ja niiden käyttämän koon. Monimutkaisille rakenteille on ominaista muutos paitsi merkityksessä myös itse esitysmuodossa ja niihin sisältyvien perusrakenteiden koostumuksessa. Dynaaminen muistinhallinta toteutetaan osoitintasolla ja dynaaminen data yhdistetään puurakenteeksi (puiksi).

Lisäksi tietojen kirjoituksella on tiettyjä vaatimuksia, joiden ansiosta minkä tahansa lausekkeen tai muuttujan tyyppi voidaan määrittää ilman laskutoimituksia, ts. lähetysvaiheessa. Tässä tapauksessa voit välttää suuren määrän vaikeasti löydettäviä ajonaikaisia ​​virheitä tunnistamalla ne ohjelman käännösvaiheessa.

Strukturoidun ohjelmoinnin käsite ei sisällä vain erikoiskielten käyttöä ja tietyn ohjelmointityylin soveltamista. Ensinnäkin tämä on ohjelmointifilosofia, joka vaikuttaa myös sellaiseen näkökohtaan kuin ohjelmoijien koulutusmenetelmiin.

Ohjelmoinnin todetaan olevan laaja ja monipuolinen toiminta, joka vaatii usein monimutkaista henkistä työtä. On väärin uskoa, että ohjelmointi voidaan rajoittua yksinkertaisimpien lohkojen systemaattiseen kuvaukseen perustuvien valmiiden reseptien käyttöön. Oppilaiden tulee kehittää kykyä ajatella luovasti, ja opettajan rooli asioiden näyttämisessä on erittäin tärkeä. Luovuus ei ole kaanonien, menetelmien ja tekniikoiden alaista. Edustavien esimerkkien huolellinen valinta ja tarkastelu otetaan opetusmenetelmäksi. On harkittava monimutkaisia ​​ja pitkiä ohjelmia, joita kohdataan usein käytännössä ja jotka sopivat parhaiten tunnistamaan vaikeasti havaittavissa oleva, mutta tärkeä ominaisuus ns. tyyli ohjelmointi. Pitkien ohjelmien jäsentäminen toimii harjoituksena niiden lukemisessa, mikä on yhtä tärkeää kuin kyky kirjoittaa ohjelmia.

Testikysymykset ja tehtävät

5.1. Nimeä ja kuvaile lyhyesti ohjelmatiimin osia.

5.2. ODSI-käyttöohjelman perusta on ____; antaa määritelmänsä.

5.3. Mitä koodien ohjelmointi tarkoittaa?

5.4 Mitä tiedät assembly-kielestä?

5.5. Mitä ohjelmointikieliä kutsutaan koneista riippumattomiksi?

5.6. Miten algoritmisella kielellä kirjoitettu ohjelma "käännetään" tietokoneen ymmärtämäksi objektikoodiksi?

5.7. Mitä modulaarisella ohjelmoinnilla ja yksittäisellä moduulilla tarkoitetaan?

5.8. Mitä tiedät strukturoidusta ohjelmoinnista?

Strukturoitu ohjelmointi– ohjelmointimetodologia, jonka tavoitteena on luoda loogisesti yksinkertaisia ​​ja ymmärrettäviä ohjelmia. Strukturoitu ohjelmointi perustuu oletukseen, että ohjelman logiikka ja ymmärrettävyys helpottaa ohjelman kehittämistä, oikeellisuuden todistamista ja myöhempää ylläpitoa sekä varmistaa sen luotettavuuden.

Strukturoidun ohjelmoinnin tunnusomaiset periaatteet ovat:

· ohjelmointi ylhäältä alas - menetelmä ohjelmien kehittämiseksi, jossa ohjelmointi suoritetaan ylhäältä alas -menetelmällä, yleisestä yksityiskohtiin;

· modulaarinen ohjelmointi, jossa suhteellisen itsenäiset osatehtävät ohjelmoidaan erillisiksi ohjelmistomoduuleiksi;

· kolmen ohjausrakenteen käyttö ohjelmoinnissa (seuraa, valitse, toista). Seuraava rakenne olettaa lauseiden luonnollisen suoritusjärjestyksen. Valintarakenne määritellään "jos-niin-else" -mallilla (ehdollinen if-lauseke). Toistorakenteeseen liittyy silmukkaoperaattori;

· hallinnan ehdottomien siirtojen kieltäminen ja globaalien muuttujien rajoitettu käyttö.

Strukturoitu ohjelmointi perustuu lauseeseen, joka on ohjelmointiteoriassa tiukasti todistettu. Sen ydin on, että algoritmi minkä tahansa loogisen ongelman ratkaisemiseksi voi koostua vain "seuraavista" rakenteista , haarautuminen, kierto." Näitä kutsutaan perusalgoritmisiksi rakenteiksi. Itse asiassa olemme aiemmin noudattaneet strukturoidun ohjelmoinnin periaatteita kaikissa käsitellyissä ohjelmaesimerkeissä.

Seuraava on lineaarinen toimintosarja (kuva 2.6):

Riisi. 2.6. Seurata

Jokainen lohko voi sisältää joko yksinkertaisen komennon tai monimutkaisen rakenteen, mutta siinä on oltava yksi tulo ja yksi lähtö.

Haaroittuminen algoritminen vaihtoehto. Ohjaus siirretään jompaankumpaan kahdesta lohkosta riippuen ehdon totuudesta tai vääryydestä. Sitten tapahtuu yleinen jatko (kuva 2.7):

Riisi. 2.7. Haaroittuminen

Kierrä tietyn toimintoryhmän toistaminen ehdon mukaan. Pyöriä on kahdenlaisia. Ensimmäinen silmukka, jossa on ennakkoehto (kuva 2.8):

Riisi. 2.8. Silmukka ennakkoehdoin

Vaikka ehto on tosi, silmukan rungon muodostava sarja suoritetaan.

Toinen syklisen rakenteen tyyppi sykli jälkiehdoin (kuva 2.9):

Riisi. 2.9. Silmukka jälkiehdoin

Tässä silmukan runko tulee ennen silmukkaehtoa. Silmukan runko toistaa suorituksensa, jos ehto on epätosi. Toisto loppuu, kun ehto toteutuu.

Teoriassa vain ensimmäinen sykli on välttämätön ja riittävä silmukka ennakkoehdoin. Sen avulla voidaan rakentaa mikä tahansa syklinen algoritmi. Tämä on yleisempi versio silmukasta kuin ennen silmukkaa. Itse asiassa silmukan runko suoritetaan ehdottomasti vähintään kerran, koska ehto tarkistetaan sen suorittamisen jälkeen. Mutta silmukan osalta on mahdollista, että silmukan runkoa ei suoriteta edes kerran. Siksi millä tahansa ohjelmointikielellä olisi mahdollista rajoittua vain while-silmukkaan. Joissakin tapauksissa loop-do:n käyttö on kuitenkin kätevämpää, ja siksi sitä käytetään.

Joskus kirjallisuudessa strukturoitua ohjelmointia kutsutaan ohjelmoimiseksi ilman gotoa. Itse asiassa tällä lähestymistavalla ei ole sijaa ehdottomille siirtymille. Goto-operaattorin perusteeton käyttö ohjelmassa riistää sen rakenteen ja siten kaikki siihen liittyvät positiiviset ominaisuudet: algoritmin läpinäkyvyyden ja luotettavuuden. Vaikka tämä operaattori on läsnä kaikissa proseduuriohjelmointikielissä, sen käyttöä tulisi kuitenkin rakenteellista lähestymistapaa noudattaen välttää.

Monimutkainen algoritmi koostuu toisiinsa yhdistetyistä perusrakenteista. Nämä rakenteet voidaan yhdistää kahdella tavalla: johdonmukainen Ja sisäkkäisiä. Tämä tilanne on samanlainen kuin se, mitä havaitsemme sähkötekniikassa, jossa mikä tahansa sähköpiiri, riippumatta siitä kuinka monimutkainen, voidaan hajottaa sarjaan ja rinnan kytkettyihin osiin.

Sisäkkäiset algoritmirakenteet eivät ole analogisia rinnakkain kytkettyjen johtimien kanssa. Analogia toistensa sisälle asetettujen pesivien nukkejen kanssa sopii tähän paremmin. Jos lohko, joka muodostaa silmukan rungon, on itse syklinen rakenne, sisäkkäisiä silmukoita on olemassa. Sisäsilmukassa voi puolestaan ​​olla toinen silmukka sisällä jne. Tässä yhteydessä esitellään käsitys silmukoiden sisäkkäisyyden syvyydestä. Samalla tavalla oksat voidaan upottaa toistensa sisään.

Rakenteellinen lähestymistapa edellyttää standardien noudattamista algoritmien vuokaavioiden kuvauksessa. Ne on piirrettävä kuten kaikissa annetuissa esimerkeissä tehtiin. Jokaisessa perusrakenteessa tulee olla yksi tulo ja yksi lähtö. Epästandardista vuokaaviota on vaikea lukea, ja algoritmin selkeys menetetään.

Ohjelmointikieliä Pascal ja C kutsutaan strukturoiduiksi ohjelmointikieliksi. Ne sisältävät kaikki tarvittavat ohjausrakenteet ohjelman rakenteellista rakentamista varten. Tätä rakennetta selventää strukturoimalla ohjelmatekstin ulkoasu. Pääasiallinen tähän käytetty tekniikka rivisiirrot, joiden on noudatettava seuraavia sääntöjä:

Saman sisäkkäisen tason rakenteet kirjoitetaan samalle pystytasolle (alkaen samasta kohdasta rivillä);

Sisäkkäinen rakenne kirjoitetaan siirrettynä viivaa pitkin useita paikkoja oikealle suhteessa sen ulkopuoliseen rakenteeseen.

Rakenteellisen algoritmisoinnin tekniikka tämä ei ole vain tapa kuvata algoritmia, vaan se on myös ohjelmoijan tapa ajatella . Algoritmia luotaessa on pyrittävä muodostamaan se vakiorakenteista. Rakennusanalogiaa käyttäen voidaan sanoa, että algoritmin rakentamisen rakenteellinen metodologia on samanlainen kuin rakennuksen kokoaminen standardiosista, toisin kuin tiili tiileltä laskeminen.

Toinen tärkeä rakenteellisen ohjelmoinnin teknologinen tekniikka on ratkaistavan ongelman hajottaminen osatehtäviksi alkuperäisen ongelman yksinkertaisempia osia ohjelmoinnin näkökulmasta. Algoritmeja tällaisten osaongelmien ratkaisemiseksi kutsutaan apualgoritmeiksi. Tässä suhteessa on kaksi mahdollista tapaa rakentaa algoritmi:

"ylhäältä alas": ensin rakennetaan pääalgoritmi, sitten apualgoritmit;

"alhaalta ylös": ensin käännetään apualgoritmit, sitten pääalgoritmit.

Ensimmäistä lähestymistapaa kutsutaan myös peräkkäiseksi yksityiskohtaiseksi menetelmäksi, toista kokoonpanomenetelmä.

Kokoonpanomenetelmä sisältää ohjelmointikielillä toteutettujen apualgoritmien kirjastojen keräämisen ja käytön alirutiinien, menettelyjen ja funktioiden muodossa. Jaksottaisella tarkennuksella rakennetaan ensin pääalgoritmi, jonka jälkeen siihen lisätään kutsut ensimmäisen tason apualgoritmeille. Tämän jälkeen kootaan ensimmäisen tason apualgoritmit, jotka voivat sisältää kutsuja toisen tason apualgoritmeille jne. Alimman tason apualgoritmit koostuvat vain yksinkertaisista komennoista.

Jaksottaisen yksityiskohdan menetelmää käytetään missä tahansa monimutkaisten objektien suunnittelussa. Tämä on suunnittelijalle luonnollinen looginen ajattelujärjestys: asteittainen syventyminen yksityiskohtiin. Meidän tapauksessamme puhumme myös suunnittelusta, mutta ei teknisistä laitteista, vaan algoritmeista. Riittävän monimutkaista algoritmia on lähes mahdotonta rakentaa millään muulla tavalla.

Jaksottaisessa yksityiskohtaisessa menetelmässä analysoidaan ensin alkuperäinen ongelma. Se tunnistaa osatehtävät. Tällaisten alitehtävien hierarkia rakennetaan. Sitten käännetään algoritmeja (tai ohjelmia) alkaen pääalgoritmista (pääohjelmasta), sitten apualgoritmeista (alirutiineista) tason peräkkäisellä syventämisellä, kunnes saadaan yksinkertaisista komennoista koostuvia algoritmeja.

Ensimmäinen vaihe yksityiskohtaisesti. Ensin hahmotellaan kaikki tarvittavat aliohjelmat ilmoittamalla vain niiden otsikot (spesifikaatiot). Aliohjelman rungon tilalle kirjoitamme selittäviä kommentteja (tämän tyyppistä aliohjelmaa kutsutaan "tynkäksi"). Kirjoitetaan ohjelman pääosa. Ja sitten palaamme menettelyjen ja toimintojen yksityiskohtaiseen ohjelmointiin. Ohjelmoinnin ensimmäisessä vaiheessa kuvataan aliohjelman rungon sijaan sen tarkoitus kommentin muodossa.

Strukturoidun ohjelmoinnin avulla voit nopeuttaa ohjelmien kirjoittamista ja helpottaa kirjoitetun ohjelman virheenkorjausta. Strukturoitu ohjelmointi on mahdollista myös assembler-ohjelmointikielissä, jotka eivät tarjoa samanlaisia ​​strukturoituja operaattoreita kuin C-, PASCAL-, PL/M-ohjelmointikielten strukturoidut operaattorit.

Universaalien tietokoneiden ohjelmointi aloitettiin ohjelmoimalla konekoodeilla, sitten korkean tason kielet ilmestyivät ja alkoivat kehittyä, sitten Dijkstroy kehitti strukturoidun ohjelmoinnin periaatteet, strukturoitu ohjelmointi korvattiin objektiohjelmoinnilla, ja visuaalinen ohjelmointi kehittyy tällä hetkellä aktiivisesti.

Mikro-ohjainten ohjelmointi noudattaa pitkälti samaa polkua. Vaiheesta toiseen siirtyminen riippuu mikro-ohjainten käytettävissä olevista sisäisistä resursseista. Vielä muutama vuosi sitten korkean tason kielten käyttö oli mahdotonta sisäisen ohjelmamuistin pienen määrän vuoksi. (Halvissa mikro-ohjainmalleissa tämä tilanne jatkuu edelleen.) Tällä hetkellä mikro-ohjainten ilmaantuessa ja useiden kymmenien kilotavujen sisäisellä muistikapasiteetilla ilmaantuu mahdollisuus objektisuunnitteluun.

Tällä hetkellä on kaksi tapaa kirjoittaa ohjelmia: alhaalta ylös ja ylhäältä alas. Kun kirjoitat ohjelmaa alhaalta ylöspäin, on mahdotonta aloittaa ohjelman virheenkorjausta kirjoittamatta koko ohjelmaa. Kun kirjoitetaan ohjelmaa ylhäältä alas, mikä on pakollista strukturoidussa ohjelmoinnissa, se voidaan kääntää ja suorittaa missä tahansa ohjelman kirjoittamisvaiheessa ja kaikki siihen mennessä kirjoitetun ohjelman algoritmiset toiminnot voidaan seurata. Ohjelman kirjoitusprosessi ei eroa algoritmin luomisprosessista. Lisäksi nämä ohjelman luomisen vaiheet voidaan yhdistää. Suoritettava algoritmitoiminto ilmoitetaan aliohjelman nimessä. Esimerkiksi:

Strukturoidun ohjelmoinnin perusideana on, että rakenneoperaattoreita on vain neljä. Näitä rakenneoperaattoreita käyttämällä voit rakentaa mielivaltaisen monimutkaisen ohjelman.

Ensimmäistä rakenneoperaattoria kutsutaan lineaarinen operaattoriketju. Mikä tahansa tehtävä voidaan jakaa useisiin osatehtäviin. Alitehtävien suorittaminen voidaan uskoa alirutiinille, jonka nimi voi (ja sen pitäisi) kuvastaa alitehtävää, joka tämän aliohjelman on ratkaistava. Kun kirjoitamme huipputason algoritmia (ja ohjelmaa), emme ole kiinnostuneita siitä, kuinka tämä ongelma ratkaistaan, joten laitamme tämän aliohjelman sijaan