Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Windows 8
  • Tehnologije razvoja softvera. Postoje samo strukturirane i objektne paradigme programiranja. Opišite strukturirani pristup programiranju

Tehnologije razvoja softvera. Postoje samo strukturirane i objektne paradigme programiranja. Opišite strukturirani pristup programiranju

Programiranje je relativno mlada grana znanosti i tehnologije koja se brzo razvija. Iskustvo provođenja stvarnih razvoja i poboljšanja postojećeg softvera i hardvera neprestano se promišlja, što rezultira novim metodama, metodologijama i tehnologijama, koje zauzvrat služe kao osnova za modernije alate za razvoj softvera. Preporučljivo je proučavati procese stvaranja novih tehnologija i odrediti njihove glavne trendove, uspoređujući te tehnologije s razinom razvoja programiranja i značajkama softvera i hardvera koji su dostupni programerima.

Tehnologija programiranja nazivaju skup metoda i alata koji se koriste u procesu razvoja softvera. Kao i svaka druga tehnologija, tehnologija programiranja je skup tehnoloških uputa, uključujući:

  • naznaku redoslijeda izvođenja tehnoloških operacija;
  • nabrajanje uvjeta pod kojima se izvodi ova ili ona operacija;
  • opisi samih operacija, gdje se za svaku operaciju određuju početni podaci, rezultati, kao i upute, normativi, standardi, kriteriji i metode ocjenjivanja i sl.

Osim skupa operacija i njihovog slijeda, tehnologija određuje i način opisa projektiranog sustava, točnije modela koji se koristi u pojedinoj fazi razvoja.

Objektno orijentirano programiranje (OOP) definira se kao tehnologija za kreiranje složenog softvera na temelju predstavljanja programa kao skupa objekata, od kojih je svaki instanca određenog tipa (klase), a klase čine hijerarhiju s nasljeđivanjem svojstava. Interakcija softverskih objekata u takvom sustavu provodi se prosljeđivanjem poruka.

Glavna prednost objektno orijentiranog programiranja u usporedbi s modularnim programiranjem je "prirodnija" dekompozicija softvera, što uvelike olakšava njegov razvoj. To dovodi do potpunije lokalizacije podataka i njihove integracije s rutinama obrade, što omogućuje praktički neovisan razvoj pojedinih dijelova (objekata) programa. Osim toga, objektni pristup nudi nove načine organiziranja programa na temelju mehanizama nasljeđivanja, polimorfizma, sastava, popunjavanja. Ovi mehanizmi omogućuju konstruiranje složenih objekata od relativno jednostavnih. Rezultat je značajno povećanje ponovne upotrebe koda i mogućnost stvaranja knjižnica klasa za različite namjene.



Brzi razvoj programskih tehnologija temeljenih na objektnom pristupu omogućio je rješavanje mnogih problema. Tako su stvorena okruženja koja podržavaju vizualno programiranje, na primjer, Delphi, C ++ Builder, Visual C ++, itd. Kada koristi vizualno okruženje, programer ima priliku dizajnirati neki dio, na primjer, sučelja budući proizvod, koristeći vizualne alate za dodavanje i konfiguriranje posebnih komponenti knjižnice. Rezultat vizualnog dizajna je priprema budućeg programa u koji su već uneseni odgovarajući kodovi.

Možete dati opću definiciju: OOP objekt je zbirka varijabli stanja i pridruženih metoda (operacija). Ove metode određuju način interakcije objekta s vanjskim svijetom.

Pod, ispod objektne metode razumjeti procedure i funkcije čija je deklaracija uključena u opis objekta i koje izvode radnje. Sposobnost upravljanja stanjima objekta pozivanjem metoda na kraju određuje ponašanje objekta. Ova zbirka metoda često se naziva sučelje objekta.

Strukturno programiranje (SP) pojavilo se kao rješenje problema smanjenja TEŠKOĆE razvoja softvera.

Na početku ere programiranja rad programera nije bio ničim reguliran. Zadaci koje je trebalo rješavati nisu se razlikovali po opsegu i skali, uglavnom su se koristili strojno orijentirani jezici i slični jezici kao što je Assembler, razvijeni programi rijetko su dostizali značajne veličine, a nisu bila nametnuta stroga ograničenja na vrijeme njihovog nastanka. razvoj.

Razvojem programiranja pojavili su se problemi za čije se rješavanje određivali ograničeni vremenski okviri sve složenijih problema uz angažman grupa programera. Kao rezultat toga, programeri su se suočili s činjenicom da se metode prikladne za razvoj malih problema ne mogu koristiti u razvoju velikih projekata zbog složenosti potonjeg.

Dakle, svrha strukturiranog programiranja je poboljšati pouzdanost programa, pružiti održavanje i preinake, olakšavanje i ubrzanje razvoja.

Metodologija strukturiranog imperativnog programiranja - pristup koji se sastoji u postavljanju dobre topologije imperativnih programa, uključujući odbijanje korištenja globalnih podataka i operatora bezuvjetnog skoka, razvijanje modula sa jakom povezanosti i osiguravanje njihove neovisnosti od drugih modula.

Pristup se temelji na dva glavna principa:

· Sekvencijalna dekompozicija algoritma za rješavanje problema od vrha do dna.

· Korištenje strukturiranog kodiranja.

Podsjetimo, ova metodologija je najvažniji razvoj imperativne metodologije.

Podrijetlo, povijest i evolucija. Edsger Dijkstra smatra se tvorcem strukturiranog pristupa. Također je pokušao (nažalost, potpuno neprimjenjiv za masovno programiranje) kombinirati strukturirano programiranje s metodama dokazivanja ispravnosti kreiranih programa. Takvi poznati znanstvenici kao što su H. Mills, D.E. Knuth, S. Hoor.

Metode i koncepti strukturiranog programiranja. Postoje tri

Metoda algoritamska dekompozicija odozgo prema dolje- sastoji se od detaljnog opisivanja problema korak po korak, počevši od najopćenitijeg problema. Ova metoda daje dobru strukturiranost. Metoda je podržana konceptom algoritma.

Metoda modularna organizacija programskih dijelova- sastoji se u razbijanju programa na posebne komponente koje se nazivaju moduli. Metoda je podržana konceptom modula.

Metoda strukturno kodiranje- sastoji se u korištenju tri glavne kontrolne konstrukcije prilikom kodiranja. Oznake i operator bezuvjetnog skoka su odnosi koje je teško pratiti bez kojih želimo. Metoda je podržana konceptom upravljanja

Strukturni programski jezici. Glavna razlika od klasične metodologije imperativnog programiranja je neuspjeh (točnije, jedan ili drugi stupanj neuspjeha) od operatora bezuvjetnog skoka .

„Važno svojstvo sintakse za programera je sposobnost odražavaju u strukturi programa strukturu temeljnog algoritma. Kada se koristi metoda poznata kao strukturirano programiranje, program je konstruiran hijerarhijski - od vrha prema dolje (od glavnog programa do potprograma najniže razine), uz korištenje samo ograničenog skupa upravljačkih struktura na svakoj razini: jednostavni nizovi instrukcija, petlje i neke vrste uvjetno grananje. Uz dosljednu implementaciju ove metode, strukturu rezultirajućih algoritama lako je razumjeti, otkloniti pogreške i modificirati. U idealnom slučaju, trebali bismo biti u mogućnosti prevesti programsku shemu konstruiranu na ovaj način izravno u odgovarajuće programske upute koje odražavaju strukturu algoritma."

Teorem o strukturiranju (Boem-Jacopini): Svaki ispravan program (tj. program s jednim ulazom i jednim izlazom bez petlji i nedostižnih grana) može se napisati korištenjem sljedećih logičkih struktura - slijed, odabir i ponavljanje petlje

Korol 1: Svaki se program može svesti na oblik bez naredbe goto.

Koralar 2: Bilo koji algoritam može se implementirati u jeziku koji se temelji na tri kontrolna konstrukta - sekvenca, petlja, ponavljanje.

Koralar 3: Složenost strukturiranih programa je ograničena, čak i ako su neograničene veličine.

Strukturirano programiranje nije samo sebi svrha. Njegova glavna svrha je dobiti dobar ("ispravan") program, međutim, čak iu najboljem programu ponekad su potrebni naredbe goto: na primjer, za izlazak iz skupa ugniježđenih petlji.

Na gotovo svim jezicima koji podržavaju imperativnu metodologiju moguće je razvijati programe prema ovoj metodologiji. Brojni jezici uveli su posebne zamjene za naredbu goto kako bi se olakšalo upravljanje petljama (na primjer, Break and Continue u C).

Razred zadataka. Klasa problema za danu metodologiju odgovara klasi problema za imperativnu metodologiju. Imajte na umu da to omogućuje razvoj složenijih programa, jer ih je lako uočiti i analizirati.

Strukturno programiranjenije je prva potpuna metodologija programiranja. Strukturirano programiranje imalo je ogroman utjecaj na razvoj programiranja. Ova metoda je bila vrlo široko korištena u praktičnom programiranju i do danas nije izgubila na značaju za određenu klasu problema.

Strukturirani pristup temelji se na dva temeljna načela:

1 je korištenje proceduralnih programskih jezika (Algol, Pascal, SI);

Slika 2 je sekvencijalna top-down dekompozicija algoritma za rješavanje problema.

Problem se rješava primjenom niza radnji. U početku je zadatak formuliran u smislu ulazno-izlaznih vrijednosti. To znači da se neki podaci dostavljaju na ulaz programa. Program se pokreće i daje odgovor.

Nakon toga počinje uzastopna dekompozicija cijelog zadatka na jednostavnije radnje.

Na primjer, ako trebamo napisati program za provjeru ispravnosti adrese, prvo ćemo ga napisati na sljedeći način:

Provjerite adresu prema bazi podataka dostupnih adresa

Ako je test pozitivan,ispis Da,

inače, ispis br.

Očito je da se takva oznaka jedan-na-jedan prikazuje u programu na jeziku visoke razine, na primjer, u Pascalu.

adresa_provjere programa (ulaz, izlaz); varan_address: Adresa; započeti read_address (an_address);

if (check_database (an_address)) then

writelnTMIa "); drugo

Ovaj program koristi proceduru čitati_ adresa pročitati adresu i proceduru ček_ baza podataka za provjeru pročitane adrese s podacima u bazi podataka. Sada možemo nastaviti proces sastavljanja programa za postupke sljedeće razine: čitanje adrese i provjeru u bazi podataka.

Vrlo je važno da se u bilo kojoj fazi program može provjeriti. Da biste to učinili, trebate napisati stubove - procedure koje simuliraju ulazak i izlazak iz procedura niže razine. (U gornjem programu možete koristiti proceduru čitanja adrese, koja jednostavno zamjenjuje neku fiksnu adresu umjesto unosa s terminala, i proceduru provjere baze podataka koja ne radi ništa, ali jednostavno uvijek vraća true.)

Program se povezuje s stubovima i može raditi. Stubovi vam omogućuju da testirate svoju logiku najviše razine prije implementacije sljedeće razine.

Strukturirano programiranje je jasno definirano vrijednost modularnog programiranja pri razvoju velikih projekata, ali programski jezici još uvijek slabo podržavaju modularnost. Jedini način za strukturiranje programa bio je sastavljanje od potprograma ili funkcija. Kontrola ispravnosti poziva funkcija, uključujući korespondenciju broja i vrsta stvarnih argumenata s očekivanim formalnim parametrima, provedena je tek u fazi izvršenja (koncept prototipa funkcije pojavio se kasnije).

1.4. Temelji i povijest objektno orijentiranog programiranja

Objektno orijentirano programiranje nastalo je i postalo široko rasprostranjeno zahvaljujući realizaciji tri velika programska problema.

1 - razvoj jezika i metoda programiranja nije išao u korak s rastućim potrebama za programima. Jedini pravi način da se zadovolje te potrebe bila je ponovna upotreba već razvijenog, testiranog i otklonjenog softvera.

2 - potreba za pojednostavljenjem održavanja i modifikacije razvijenih sustava. (Činjenica stalnih promjena zahtjeva za sustavom prepoznata je kao normalan uvjet za razvoj sustava, a ne kao nemogućnost ili nedovoljno jasna organizacija rada programera.) Bilo je potrebno promijeniti način izgradnje softverski sustavi kako lokalne izmjene ne bi poremetile performanse cijelog sustava i bilo bi lakše napraviti promjene u ponašanju sustava...

3 je olakšati dizajn sustava. Nisu svi problemi podložni algoritamskom opisu i, štoviše, algoritamskoj dekompoziciji, kako to zahtijeva strukturirano programiranje. Trebalo je programsku strukturu približiti strukturi zadataka koji se rješavaju i smanjiti tzv. semantički prekid između strukture problema koji se rješava i strukture programa. Semantički jaz nastaje kada su koncepti koji su u osnovi jezika problema i sredstva za njegovo rješavanje različiti. Stoga je, uz potrebu snimanja samog rješenja, potrebno i neke pojmove prevesti u druge. (Usporedite ovo s prijevodom s jednog prirodnog jezika na drugi. Upravo zato što u ruskom jeziku prije nije bilo takvih pojmova, riječi poput broker, offshore ili investitor. Nažalost, u programiranju nije moguće posuđivanje riječi.)

Dakle, pojednostavljenje dizajna, ubrzanje razvoja kroz ponovnu upotrebu gotovih modula i jednostavnost modifikacije - to su tri glavne prednosti objektno orijentiranog programiranja, koje su promovirali njegovi pristaše.

Objektno orijentirano programiranje pretpostavlja jedinstven pristup dizajnu, izgradnji i razvoju sustava.

Pojava objektno orijentirane metode dogodila se na temelju cjelokupnog dosadašnjeg razvoja metoda razvoja softvera, kao i mnogih drugih grana znanosti.

Pojava objektno orijentiranog pristupa projektiranju sustava bila je olakšana sljedećim tehnološkim napretkom:

1 - Razvoj računalne tehnologije, posebice hardverske potpore za osnovne koncepte operacijskih sustava i izgradnju funkcionalno orijentiranih sustava.

2 - Napredak u metodologiji programiranja, posebice konstrukcije modularnih sustava i enkapsulacije informacija.

3 - Teorija konstrukcije i modeliranja sustava upravljanja bazama podataka uvela je ideju izgradnje odnosa između objekata u objektno programiranje.

4 - Istraživanje umjetne inteligencije dovelo je do boljeg razumijevanja mehanizama apstrakcije. Teorija okvira koju je predložio Minsky za predstavljanje stvarnih objekata u sustavima za prepoznavanje uzoraka dala je snažan poticaj ne samo sustavima umjetne inteligencije, već i mehanizmima apstrakcije u programskim jezicima.

5 - Razvoj filozofije i teorije znanja. Na mnogo načina, objektno orijentirana konstrukcija sustava je određeni pogled na simulirani stvarni svijet. Upravo u tom aspektu filozofija i teorija znanja imale su snažan utjecaj na objektni model. Čak su i stari Grci smatrali svijet u obliku predmeta ili procesa. Descartes je iznio pretpostavku da se objektno orijentirano razmatranje okolnog svijeta čini prirodnim za osobu. Minsky je sugerirao da se razum očituje kao interakcija agenata koji ne mogu razmišljati odvojeno.

Objektno orijentirano programiranje podržavaju programski jezici kao što su Smalltalk, C++, Java itd. Jezici su glavni alati za objektno orijentirano programiranje, tijekom njihovog razvoja pojavila se većina ideja koje čine osnovu objektno orijentirane metode.

Prvi korak prema stvaranju objektnog modela treba smatrati pojavom apstraktnih tipova podataka. Vjeruje se da je prva potpuna implementacija apstraktnih tipova podataka u programskim jezicima jezik Simula.

Zatim su došli (i nastavljaju se pojavljivati) drugi objektno orijentirani jezici koji definiraju stanje umjetnosti programiranja. Najčešći od njih su C ++, CLOS, Eiffel, Java.

  • Strukturni
    • Razdvajanje odgovornosti:
  • Predložak: softver koji se temelji na prezentaciji programa u obliku hijerarhijske blok strukture. Predložio 70-ih godina XX. stoljeća E. Dijkstroy, razvio i dopunio N. Virt.

    Prema ovoj metodologiji

    1. Svaki program je struktura izgrađena od tri vrste osnovnih struktura:
      • sekvencijalno izvršenje- jednokratno izvođenje operacija redoslijedom kojim su zapisane u tekstu programa;
      • grananje- jednokratno izvršenje jedne od dvije ili više operacija, ovisno o ispunjenju nekog zadanog uvjeta;
      • ciklus- višestruko izvođenje iste operacije sve dok je zadani uvjet ispunjen (uvjet za nastavak ciklusa).
      U programu se osnovne konstrukcije mogu ugniježditi jedna unutar druge na proizvoljan način, ali nisu predviđeni drugi načini kontrole slijeda operacija.
    2. Fragmenti programa koji se ponavljaju (ili se ne ponavljaju, ali predstavljaju logički integralne računske blokove) mogu se formirati u obliku tzv. potprogrami (postupci ili funkcije). U ovom slučaju, u tekst glavnog programa, umjesto fragmenta smještenog u potprogram, ubacuje se instrukcija poziv potprograma... Kada se takva instrukcija izvrši, izvršava se pozvani potprogram, nakon čega se izvršavanje programa nastavlja instrukcijom koja slijedi naredbu za pozivanje potprograma.
    3. Razvoj programa odvija se korak po korak, metodom "top down".

    Najprije se upisuje tekst glavnog programa u koji se umjesto svakog koherentnog logičkog fragmenta teksta ubacuje poziv potprogramu koji će izvršiti ovaj fragment. Umjesto pravih, radnih potprograma, u program se ubacuju "stubovi", koji ne rade ništa. Rezultirajući program se provjerava i otklanja greške. Nakon što se programer uvjeri da su potprogrami pozvani u ispravnom slijedu (odnosno da je opća struktura programa ispravna), potprogrami se uzastopno zamjenjuju onima koji stvarno rade, a razvoj svake potprograma se provodi u na isti način kao i glavni program. Razvoj završava kada ne ostane niti jedan "čep" koji ne bi bio uklonjen. Ovaj slijed osigurava da u svakoj fazi razvoja programer istovremeno obrađuje mnoštvo fragmenata koji su mu vidljivi i razumljivi, te može biti siguran da je opća struktura svih viših razina programa ispravna. Prilikom održavanja i izmjena programa postaje jasno koje procedure treba mijenjati, a one se izvode bez utjecaja na dijelove programa koji nisu izravno povezani s njima. To vam omogućuje da osigurate da se neki dio programa koji je trenutno izvan pažnje programera neće pokvariti kada unesete izmjene i popravite pogreške.

    Teorem o strukturiranom programiranju:

    Glavni članak: Bohm-Jacopini teorem

    Bilo koja shema algoritma može se predstaviti kao sastav ugniježđenih početnih i završnih blokova, uvjetnih naredbi if, then, else, petlje s preduvjetom (while), a mogu postojati i dodatne logičke varijable (zastavice).
    Ovaj teorem formulirali su talijanski matematičari C. Bohm i J. Jacopini 1966. godine i govori nam kako izbjeći korištenje goto operatora.

    Priča

    Metodologija strukturiranog programiranja nastala je kao posljedica sve veće složenosti zadataka koji se rješavaju na računalima, te odgovarajuće kompliciranja softvera. U 1970-ima, obujam i složenost programa dostigli su toliku razinu da "intuitivni" (nestrukturirani, ili "refleksni") razvoj programa, koji je bio norma u ranijim vremenima, više ne zadovoljava potrebe prakse. Programi su postali previše složeni da bi se pravilno održavali, pa je bila potrebna neka vrsta sistematizacije procesa razvoja i strukture programa.

    Najjača kritika od strane programera strukturiranog pristupa programiranju bila je GOTO operator (bezuvjetni jump operator), koji je tada bio dostupan u gotovo svim programskim jezicima. Netočna i nepromišljena uporaba proizvoljnih prijelaza u tekstu programa dovodi do zbunjujućih, loše strukturiranih programa (tzv. špageti kod), iz čijeg je teksta gotovo nemoguće razumjeti redoslijed izvršavanja i međuovisnost fragmenata.

    Slijedeći načela strukturiranog programiranja tekstove programa, čak i one prilično velike, učinilo je normalno čitljivim. Razumijevanje programa postalo je puno lakše, postalo je moguće razvijati programe u normalnom industrijskom načinu, kada program može lako razumjeti ne samo njegov autor, već i drugi programeri. To je omogućilo da se trudom razvojnih timova razvijaju za to vrijeme dovoljno veliki softverski sustavi, te da prate ove komplekse dugi niz godina, čak iu uvjetima neizbježnih kadrovskih promjena.

    Metodologija razvoja strukturiranog softvera prepoznata je kao "najjača formalizacija 70-ih". Od tada je riječ "strukturalni" postala moderna u industriji, a počela se koristiti gdje god je potrebno i gdje nije potrebno. Radili su se na "projektu konstrukcija", "ispitovanju konstrukcija", "projektu konstrukcija" i tako dalje. Općenito, dogodilo se otprilike isto što se dogodilo 90-ih i događa se sada s pojmovima "objekt", "objektno orijentiran" i "elektronički".

    Evo nekih od prednosti strukturiranog programiranja:

    1. Strukturirano programiranje omogućuje vam da značajno smanjite broj opcija za izgradnju programa prema istoj specifikaciji, što značajno smanjuje složenost programa i, što je još važnije, olakšava drugim programerima da ga razumiju.
    2. U strukturiranim programima logički povezani operatori su vizualno bliži, a slabo povezani dalje, što omogućuje bez blok dijagrama i drugih grafičkih oblika algoritama za prikaz (zapravo, sam program je vlastiti blok dijagram).
    3. Proces testiranja i otklanjanja pogrešaka strukturiranih programa uvelike je pojednostavljen.

    vidi također

    Linkovi


    Zaklada Wikimedia. 2010.

    • Mahajanapada
    • Deva

    Pogledajte što je "Strukturirano programiranje" u drugim rječnicima:

      Strukturirano programiranje- metodologija i tehnologija razvoja softverskih sustava temeljenih na principima: top-down programiranja; modularno programiranje. U ovom slučaju, logika algoritma i programa mora koristiti tri glavne strukture: sekvencijalnu ... ... Financijski rječnik

      strukturirano programiranje- struktūrinis programavimas statusas T sritis automatika atitikmenys: angl. strukturirano kodiranje; strukturirano programiranje vok. strukturelle Programmierung, f rus. strukturirano programiranje, n; strukturirano programiranje, n pranc…… Automatikos terminų žodynas

      Strukturirano programiranje- 46. Strukturirano programiranje Strukturirano programiranje Izvor: GOST 19781 90: Softver za sustave za obradu informacija. Uvjeti i definicije… Rječnik-priručnik pojmova normativne i tehničke dokumentacije

      Programiranje- Ovaj članak treba u potpunosti prepisati. Na stranici za razgovor mogu biti objašnjenja. Ovaj izraz ima druga značenja, pogledajte Programi ... Wikipedia

      PROGRAMIRANJE- 1) proces izrade programa, plana djelovanja. 2) Sekcija informatike koja proučava metode i tehnike programiranja. Uz malo konvencije, P. se kao disciplina dijeli na: teorijski, studijski mat. apstrakcije programa (kao objekata s ... ... Fizička enciklopedija

      Programiranje temeljeno na prototipu- Prototipsko programiranje je stil objektno orijentiranog programiranja u kojem ne postoji koncept klase, a ponovna upotreba (nasljeđivanje) se vrši kloniranjem postojeće instance prototipnog objekta. ... ... Wikipedia.

      paradigma (programiranje)- Paradigma programiranja je skup ideja i koncepata koji određuje stil pisanja programa. Paradigma je prvenstveno određena osnovnom programskom cjelinom i samim principom postizanja modularnosti programa. Kao ova jedinica ... Wikipedia

      Računalno programiranje- Razvoj softvera Analiza koraka procesa razvoja softvera | Dizajniranje | Implementacija | Testiranje | Implementacija | Održavanje agilnih modela / metoda | Čista soba | Iterativno | Scrum | RUP | MSF | Spiralna | ... Wikipedia

      Nestrukturirano programiranje- Metodologija razvoja softvera za strukturirano programiranje, koja se temelji na prezentaciji programa u obliku hijerarhijske blok strukture. Predložio 70-ih godina XX. stoljeća E. Dijkstroy, razvio i dopunio N. Virt. U... Wikipediji

      Komponentno orijentirano programiranje- Programske paradigme Agent-orijentirane Komponente orijentirane Konkatenativne Deklarativne (u suprotnosti s imperativom) Ograničenja Funkcionalni tok podataka Orijentirano na tablice (proračunske tablice) Reaktivno ... Wikipedia

    knjige

    • Disciplina programiranja, Dijkstra E. Knjigu je napisao jedan od najvećih stranih stručnjaka u području programiranja, poznat sovjetskom čitatelju po prevođenju svojih knjiga na ruski (na primjer, "Strukturalni ...

    Strukturirano programiranje predstavlja najveći napredak u ovom području do danas. Unatoč činjenici da gotovo svi imaju opći pojam o tome, gotovo nitko ne može dati konkretnu i jasnu definiciju ovog pojma. Strukturirano programiranje postavlja glavni cilj pisanja programa najmanje složenosti, prisiljavajući programera na jasno razmišljanje, čineći program lakšim za razumijevanje. Njegov tekst mora biti napravljen tako da bude čitljiv od vrha do dna. Ovaj uvjet se krši ako se u programskom kodu susreću izrazi go to, budući da krše strukturu cijelog segmenta programa. Unatoč činjenici da se ovaj pokazatelj ne može smatrati najprikladnijim, ipak se može reći da je prisutnost ovog operatora u programskom kodu najuočljivija vrsta kršenja strukture. Tijela modula i temeljne strukture koje se koriste moraju biti otporne na kvarove hardvera, pogreške u programima i izobličenja izvornih podataka.

    Osnovna načela strukturiranog programiranja su sljedeća. Bilo koji program može se lako sintetizirati na temelju elementarnih konstrukcija tri glavne vrste:

    Jednostavna konzistencija;

    Uvjeti ili alternative;

    Ponavljanja, odnosno petlje i iteracije.

    Jedna ili dvije bilo koje vrste mogu se koristiti u isto vrijeme. Svaka struktura ima jednu značajku - jednu točku prijenosa kontrole na strukturu i jedinu točku ulaska u strukturu. Ova vrsta konstrukcije ima disciplinirajuće i sistematizirajuće značenje.

    Jednostavnost početnih konstrukcija u strukturiranom programiranju sprječava informacijske veze kao i zbunjujuće prijenose kontrole. Složenost programa primjetno se smanjuje povećanjem strukture modula, povećava se njihova jasnoća, a to pomaže u smanjenju broja pogrešaka. Međutim, strukturiranje ima i nedostatak - za ljepotu i jasnoću programskog koda morate platiti dodatnom memorijom, kao i vrijeme potrebno za njihovu implementaciju na računalu.

    Strukturno programiranje, odnosno struktura samih programskih tekstova, u potpunosti ovisi o tome koji se jezik za to koristi. Naravno, postavlja se pitanje koji je najprikladniji. Suvremeni alati za razvoj softvera smatraju se najboljim jezicima za implementaciju strukturiranog pristupa programiranju. Među najčešćim su Basic, Pascal i FoxBASE. Primjerice, praktički je nemoguće implementirati principe postavljene u konceptu strukturiranog programiranja. Ovaj jezik je usmjeren na pisanje programskog koda niske razine.

    Strukturirano programiranje u osnovi je usmjereno na komunikaciju s ljudima, a ne sa strojevima, stoga olakšava pisanje programa koji predstavljaju jasno i jednostavno rješenje zadanog problema. Programer mora razmišljati u smislu osnovnih strukturnih konstrukcija.

    Ako govorimo o položaju u odnosu na prethodno spomenuti go to operator, onda ga treba izbjegavati gdje god je to moguće, ali to ni na koji način ne bi trebalo utjecati na jasnoću programa. Ponekad se ispostavi da je korištenje ovog operatora jednostavno potrebno za izlazak iz određenog segmenta programa ili ciklusa, kao i kako bi se izbjegla pojava predubokih račva, pogotovo jer je prijelaz povezan s nižim razinama programa. Istodobno, struktura programa ostaje lako čitljiva od vrha do dna. Najgore od zadanog operatora ima veze s kretanjem odozdo prema gore.

    Radi lakšeg čitanja, programi često dodaju prazne retke između odjeljaka. Vrijedi napisati tekst programa s pomacima kako biste mogli pročitati slijed radnji i broj privitaka.

    softver

    Strukturalni pristup programiranju je i metodologija i tehnologija za kreiranje programa. Svojedobno je njegova implementacija omogućila povećanje produktivnosti programera prilikom pisanja i otklanjanja pogrešaka u programima; dobivanje programa koji se sastoje od modula i prikladni su za održavanje; stvaranje programa od strane tima programera; završetak kreiranja programa u određenom trenutku.

    Strukturirano programiranje je pristup koji koristi konstrukcije za prijenos kontrole u programu koji omogućuju sekvencijalni, uvjetni i iterativni prijenos kontrole. Zabranjen je bezuvjetni prijenos kontrole naredbom goto. Kao rezultat, svaka složena naredba u programu, koja je kombinacija sekvencijalnih, uvjetnih i cikličkih izraza, ima samo jednu ulaznu i izlaznu točku, što osigurava da se program podijeli na relativno neovisne fragmente.

    Strukturirano programiranje rezultat je primjene aplikativnih tehnika na imperativne programe. Za to se koriste proceduralno orijentirani jezici u kojima je moguće opisati program kao skup procedura. Procedure se mogu pozivati ​​jedna drugu, a svaku od njih može pozvati glavni program, što se također može smatrati procedurom.

    Struktura programa su interakcijski dijelovi programa koje je programer umjetno dodijelio. Korištenje racionalne strukture eliminira problem složenosti razvoja, čini program razumljivim korisnicima, povećava pouzdanost programa uz smanjenje razdoblja njegovog testiranja i vremena razvoja.

    Vrlo često je potrebno ponoviti određeni slijed uputa na različitim mjestima u programu. Kako programer ne bi morao trošiti vrijeme i trud na kopiranje ovih uputa, mnogi programski jezici pružaju alate za organiziranje potprograma. Programer dobiva priliku dodijeliti proizvoljan naziv slijedu instrukcija i koristiti to ime kao kraticu na onim mjestima gdje se pojavljuje odgovarajući slijed instrukcija. Dakle, potprogram je slijed instrukcija koji se može pozvati na nekoliko mjesta u programu. Potprogrami se obično nazivaju postupcima i funkcijama.

    Opis potprograma sastoji se od dva dijela: zaglavlja i tijela. Zaglavlje sadrži identifikator potprograma i varijable koje se u njemu koriste. Tijelo se sastoji od jedne ili više uputa. Identifikator potprograma koristi se kao stenografski zapis na onim mjestima u programu gdje se pojavljuje odgovarajući slijed instrukcija.

    Procedure i funkcije, zvane potprogrami, jedan su od rijetkih temeljnih alata u umjetnosti programiranja koji imaju odlučujući utjecaj na stil i kvalitetu rada programera.

    Procedura nije samo način skraćivanja programskog teksta, već i sredstvo za razlaganje programa na logički povezane, zatvorene elemente koji definiraju njegovu strukturu. Rastavljanje programa na dijelove bitno je za razumijevanje programa, osobito ako je program složen i teško vidljiv zbog velike dužine teksta. Dekompozicija na potprograme neophodna je i za dokumentiranje i za provjeru programa. Stoga je poželjno formulirati slijed instrukcija u obliku potprograma, čak i ako se program koristi samo jednom i, stoga, nema motiva vezan za smanjenje teksta programa.

    Informacije o varijablama ili uvjetima koje argumenti moraju zadovoljiti navedene su u zaglavlju procedure. Korisnost postupka, posebice njegova uloga u strukturiranju programa, nedvojbeno svjedoče još dva koncepta u programiranju. Pogodnost ili lokalne varijable koje se koriste unutar procedure nemaju značenje izvan nje. Lakše je razumjeti stvorenje u programu ako su opsegi takvih varijabli eksplicitno specificirani. Postupak djeluje kao prirodna tekstualna jedinica, uz pomoć koje je ograničen opseg postojanja lokalnih varijabli.

    Najčešća taktika programiranja je razlaganje procesa na pojedinačne radnje:

    • - funkcionalni opis za podfunkcije;
    • - odgovarajući programi za posebne upute.

    U svakom takvom koraku dekompozicije potrebno je osigurati da rješenja pojedinih problema dovedu do rješenja općeg problema, odabrani slijed pojedinačnih radnji je razuman i omogućuje dobivanje instrukcija koje su u nekom smislu bliže jezik na kojem će se program provoditi. Ovaj zahtjev isključuje mogućnost izravnog napretka od početnog postavljanja problema do konačnog programa, koji bi u konačnici trebao biti postignut. Svaka faza dekompozicije je popraćena formulacijom privatnih potprograma. Tijekom ovog rada možda ćete otkriti da je odabrana dekompozicija neuspješna u smislu da je nezgodno izraziti potprograme korištenjem dostupnih sredstava. U tom slučaju, jedan ili više prethodnih koraka razgradnje treba ponovno pregledati.

    Ako vidimo postupno napredovanje u dubini u dekompoziciji korak po korak i istovremenom razvoju i detaljiziranju programa, onda se takav način rješavanja problema može okarakterizirati kao top-down (od vrha prema dolje). I obrnuto, takav pristup rješavanju problema moguć je kada programer prvo prouči računalo ili programski jezik koji mu je na raspolaganju, a zatim skupi neke sekvence instrukcija u elementarne postupke tipične za problem koji se rješava. Elementarne procedure se tada koriste na sljedećoj razini hijerarhije procedura. Ova metoda prelaska s primitivnih strojnih instrukcija na potrebnu implementaciju programa naziva se odozdo prema gore (bottom-up).

    U praksi se razvoj programa nikada ne može provoditi striktno u jednom smjeru – odozgo prema dolje ili odozdo prema vrhu. Međutim, pri dizajniranju novih algoritama obično dominira pristup odozgo prema dolje. S druge strane, kod prilagođavanja programa malo promijenjenim zahtjevima, često se preferira pristup odozdo prema gore.

    Obje metode omogućuju razvoj programa koji imaju strukturu, svojstvo koje ih razlikuje od amorfnih linearnih nizova instrukcija ili strojnih instrukcija. Važno je da jezik koji se koristi u potpunosti odražava ovu strukturu. Tek tada će konačni oblik rezultirajućeg programa omogućiti primjenu metoda sustavne provjere.

    Ako je program podijeljen na potprograme, često je potrebno uvesti nove varijable koje će predstavljati rezultate i argumente, te tako uspostaviti veze između potprograma. Takve varijable treba uvesti i opisati u fazi razvoja u kojoj su potrebne. Štoviše, detaljan opis procesa može biti popraćen detaljnim opisom strukture korištenih varijabli. Stoga jezik mora imati sredstva koja odražavaju hijerarhijsku strukturu podataka. To pokazuje koliku važnu ulogu u postupnom razvoju programa imaju koncept procedure, lokalnost postupaka i podataka te strukturiranje podataka.

    Dizajn počinje popravkom vanjskih specifikacija. Na temelju vanjskih specifikacija izrađuje se opis algoritma internog programa, obavezno sa strukturom internih podataka. Nadalje, velike funkcije se dijele na podfunkcije dok se ne postigne podfunkcija veličine modula - potprogrami programskog jezika, na koje se nameću posebni dodatni zahtjevi.

    Temeljni koncept i funkcionalni element tehnologije strukturiranog programiranja je modul.

    Modul je potprogram, ali je formatiran u skladu sa sljedećim pravilima:

    • 1. modul mora imati jedan ulaz i jedan izlaz i obavljati strogo jednoznačnu funkciju, koja se opisuje jednostavnom uobičajenom rečenicom prirodnog (ruskog) jezika ili čak rečenicom bez predikata;
    • 2. modul mora omogućiti kompilaciju, neovisno o drugim modulima, uz "zaboravljanje" svih internih vrijednosti modula;
    • 3. modul može pozvati druge module njihovim imenima;
    • 4. dobar modul ne koristi globalne varijable za komunikaciju s drugim modulom, budući da je tada teško pronaći modul koji kvari podatke. Kada koristite globalne varijable, morate jasno komentirati one module koji samo čitaju i one module koji mogu mijenjati podatke;
    • 5. Modul je kodiran samo standardnim strukturama i temeljito je komentiran.

    Koncept strukture programa uključuje sastav i opis veza svih modula koji provode nezavisne funkcije programa te opis nositelja podataka uključenih u razmjenu, kako između pojedinih potprograma, tako i ulaza i izlaza s vanjskih uređaja.

    U slučaju složenog, velikog programa potrebno je ovladati posebnim tehnikama za dobivanje racionalne strukture programa. Racionalna struktura programa omogućuje gotovo dvostruko smanjenje količine programiranja i višestruko smanjenje opsega i vremena testiranja, stoga iz temelja smanjuje troškove razvoja.

    Pogodno je prikazati podređenost modula hijerarhijskim dijagramom. Hijerarhijski dijagram odražava samo podređenost potprograma, ali ne i redoslijed njihovog pozivanja ili funkcioniranje programa.

    Prije izrade dijagrama hijerarhije poželjno je izraditi vanjske specifikacije programa i izraditi funkcionalne opise programa zajedno s opisom varijabli - nositelja podataka. Posebnu pozornost treba posvetiti hijerarhiji strukturiranih tipova podataka i njihovom komentiranju. Dekompozicija programa na potprograme provodi se po principu od općeg prema posebnom, detaljnijem. Proces izgradnje funkcionalnog opisa i mapiranja hijerarhije je iterativan. Izbor najbolje opcije je višekriterijski.

    • - modularnost programa;
    • - strukturno kodiranje programskih modula;
    • - top-down dizajn racionalne hijerarhije programskih modula;
    • - implementacija programa odozgo prema dolje pomoću stubova;
    • - provedba planiranja u svim fazama projekta;
    • - end-to-end strukturno upravljanje softverskim sustavima u cjelini i njihovim sastavnim modulima.

    Modularnost programa karakterizira činjenica da se cijeli program sastoji od modula. Neke semantičke skupine modula koncentrirane su u zasebne datoteke. Na primjer, moduli uređivača teksta i moduli hijerarhijskih izbornika mogu se koncentrirati u zasebne datoteke (Jedinica).

    Strukturno kodiranje programskih modula sastoji se u posebnom dizajnu njihovih tekstova. Modul treba imati lako prepoznatljiv naslov s komentarom koji objašnjava funkcionalnost modula. Nazivi varijabli moraju biti mnemonički. Bit varijabli i redoslijed postavljanja informacija u njih treba objasniti komentarima, kod modula je kodiran pomoću standardnih algoritamskih struktura pomoću uvlaka.

    Odozgo prema dolje dizajn racionalne hijerarhije programskih modula je izolirati izvorne module najviše razine hijerarhije, a zatim podređene module.

    Implementacija programa od vrha prema dolje sastoji se u početnoj provedbi skupine modula viših razina, koji se nazivaju jezgrom programa, a zatim se postupno, u skladu s planom, provode moduli nižih razina. . Programi potrebni za povezivanje, moduli koji nedostaju oponašaju se stubovima.

    Provedba planiranja u svim fazama projekta omogućuje vam početno planiranje i sastava faza i trajanja svih faza rada. Ovo planiranje omogućuje da se razvoj završi na vrijeme uz zadanu cijenu razvoja.

    Kontrola konstrukcije od kraja do kraja sastoji se u pridržavanju unaprijed određenog plana ispitivanja, koji pokriva razdoblje od razvoja vanjskih specifikacija, zatim do internih specifikacija i njihove korekcije tijekom razdoblja implementacije do testova prihvaćanja. Moduli koji čine program testiraju se kako u trenutku pisanja njihovog koda, tako i tijekom offline testiranja, pregleda njihovog izvornog koda, tijekom testiranja neposredno nakon povezivanja na kernel.

    U strukturiranom programiranju, program se općenito implementira (izrađuje i testira) od vrha do dna. Prvo, kernel je napisan od 20-30 modula. Za početak testiranja, nedostajući moduli niže razine zamjenjuju se stubovima. Na kraju testiranja kernela, stubovi se zamjenjuju novim gotovim modulima, ali ako program još nije dovršen, svi novi stubovi modula koji nedostaju bit će potrebni za njegovo uspješno povezivanje. Zatim se testira sastavljeni dio itd.

    Stub je lažni modul. Najjednostavniji stub je program ili funkcija bez akcije. Složeniji stub može prikazati poruku u kojoj se navodi da je taj i takav modul radio. Čak i složeniji zaglavci mogu poslati ulaz u datoteku za otklanjanje pogrešaka. Konačno, čak i složeniji stubovi daju testne informacije potrebne za testiranje već implementiranih modula. Pisanje zabačaja je suvišan posao, ali je potrebna vještina dizajnera da što više zaglavlja bude što jednostavnijim i da se završi testiranje prethodno montiranog dijela programa.

    Osmišljavanju strukture programa prethodi izrada vanjskih funkcionalnih opisa. Funkcionalni opisi (algoritmi izvođenja programa) da bi se postigla njihova percepcija moraju se razložiti od općeg do posebnog. Također bi trebali uključivati ​​opise oblika prezentacije i volumena internih podataka.

    Za početak, postoji prva verzija hijerarhijskog dijagrama, dobivena jednostavnim dijeljenjem programskih funkcija u podfunkcije, što ukazuje na varijable potrebne za postavljanje podataka u različite korake obrade. Umjesto toga, ova opcija nije optimalna i potrebne su iteracije dizajna za poboljšanje topologije kruga.

    Svaka nova verzija uspoređuje se s prethodnom verzijom prema ovdje opisanim kriterijima. Generiranje varijanti prestaje kada daljnja poboljšanja nisu moguća.

    Fond kriterija optimalnosti za hijerarhijske sheme neophodna je pomoć u optimizaciji hijerarhijskih shema i sastoji se od sljedećih kriterija:

    • - potpunost obavljanja navedenih funkcija;
    • - mogućnost brzog i jeftinog nadopunjavanja novih, prethodno nespecificiranih funkcija;
    • - preglednost za dizajnera komponenti programa;
    • - maksimalna neovisnost prema podacima pojedinih dijelova programa;
    • - mogućnost povezivanja programa s opsežnom hijerarhijskom shemom na više razina s određenim povezivačem (linkerom). Ako se započne rad na novom programu, vrlo je korisno izvršiti njegov model na računalu u obliku praznih stubova modula koji ne sadrže nikakve radnje;
    • - dovoljnost RAM-a. Ovdje se razmatraju opcije s opisom posebno strukturiranih statičkih i dinamičkih varijabli na različitim razinama hijerarhijske sheme. Provjera zadovoljenja ovog kriterija provodi se proračunima s nekim strojnim pokusima;
    • - procjena utjecaja topologije hijerarhijske sheme na brzinu izvršavanja programa pri korištenju preklapanja (dinamičko učitavanje programa) i mehanizma stranica pri razvoju programa koji se ne može u cijelosti smjestiti u RAM;
    • - nepostojanje različitih modula koji izvode slične radnje. U idealnom slučaju, isti modul se poziva na različitim razinama hijerarhijske sheme;
    • - postizanje tijekom provedbe programa ovakvog mrežnog rasporeda za rad tima programera koji osigurava ujednačeno opterećenje tima prema ključnim datumima projekta;
    • - sveobuhvatno smanjenje troškova testiranja već sastavljene jezgre programa prema ključnim datumima plana implementacije mreže. Karakterizira ga jednostavnost korištenih stubova i kvaliteta testiranja duž svih računskih ruta modula. Postiže se primarnom implementacijom od vrha do dna ulaznih i izlaznih modula programa s kašnjenjem u implementaciji preostalih grana hijerarhijske sheme. Tipično, troškovi testiranja čine oko 60% ukupnih troškova projekta. Dobra hijerarhijska shema smanjuje troškove testiranja za 2-5 puta ili više u usporedbi s izvornom verzijom;
    • - korištenje u ovom projektu što više modula i knjižnica razvijenih u prethodnim projektima s minimalnom količinom novoproizvedenih dijelova;
    • - uspješna distribucija modula među kompiliranim programskim datotekama i knjižnicama;
    • - gomilanje gotovih modula i knjižnica modula za njihovu upotrebu u svim novim razvojima.

    Zaključno, može se primijetiti da je strukturirani pristup programiranju usvojio i koristi mnoge metode iz područja projektiranja složenih tehničkih sustava. Među njima su blok-hijerarhijski pristup projektiranju složenih sustava, faze izrade programa, top-down dizajn, metode procjene i planiranja.

    Vrhunski povezani članci