Što je strukturirani pristup programiranju? Strukturni pristup programiranju

Strukturirano programiranjecija je prva cjelovita metodologija programiranja. Strukturirano programiranje imalo je veliki utjecaj na razvoj programiranja. Ova metoda se vrlo široko koristila u praktičnom programiranju i do danas nije izgubila na važnosti za određenu klasu problema.

Strukturni pristup temelji se na dva temeljna principa:

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

2 je sekvencijalna dekompozicija algoritma za rješavanje problema odozgo prema dolje.

Problem se rješava nizom radnji. U početku je problem formuliran u terminima input-output. To znači da se neki podaci dostavljaju ulazu programa. Program radi i daje odgovor.

Nakon toga počinje sekvencijalna 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 u bazi dostupnih adresa

Ako je rezultat testa pozitivan,ispis Da,

inače ispisati br.

Očito je da se takav zapis prikazuje jedan na jedan u programu na jeziku visoke razine, na primjer Pascal.

program provjeri_adresu(ulaz, izlaz); varan_address:Adresa; započeti read_address(an_address);

if (check_database(an_address)) then

writelnTMIa") ; else

Ovaj program koristi proceduru pročitati_ adresa pročitati adresu i postupak provjeriti_ baza podataka za usporedbu pročitane adrese s podacima u bazi podataka. Sada možemo nastaviti proces sastavljanja programa za sljedeću razinu procedura: čitanje adrese i provjera u bazi podataka.

Vrlo je važno da se program može provjeriti u bilo kojoj fazi. Da biste to učinili, morate napisati stubove - procedure koje simuliraju ulaz i izlaz procedura niže razine. (Gornji program mogao bi koristiti rutinu čitanja adrese, koja jednostavno zamjenjuje neku fiksnu adresu umjesto terminalskog unosa, i rutinu provjere baze podataka, koja ne radi ništa, ali jednostavno uvijek vraća true.)

Program je povezan s stubovima i može se izvoditi. Stubovi vam omogućuju testiranje logike najviše razine prije implementacije sljedeće razine.

Strukturirano programiranje je jasno definirano važnost modularnog dizajna programa pri razvoju velikih projekata, ali programski jezici još uvijek slabo podržavaju modularnost. Jedini način za strukturiranje programa bio je njihovo 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 samo u fazi izvršenja (koncept prototipa funkcije pojavio se kasnije).

1.4. Temelji i povijest objektno orijentiranog pristupa programiranju

Objektno orijentirano programiranje se pojavilo i postalo rašireno zahvaljujući prepoznavanju tri glavna programska problema.

1 - razvoj jezika i metoda programiranja nije držao korak s rastućim potrebama za programima. Jedini pravi način za zadovoljenje ovih potreba bio je ponovna upotreba onoga što je već razvijeno, testirano i otklonjeno. softver.

2 - potreba za pojednostavljenjem održavanja i modifikacije razvijenih sustava. (Činjenica stalnih promjena zahtjeva za sustav prepoznata je kao normalan uvjet za razvoj sustava, a ne kao nesposobnost ili nedovoljno jasna organizacija rada programera.) Bilo je potrebno promijeniti način izgradnje programskih sustava tako da lokalne izmjene nisu poremetile funkcionalnost cijelog sustava te je bilo lakše napraviti promjene u ponašanju sustava.

3 je olakšati dizajn sustava. Nisu svi problemi podložni algoritamskom opisu, a još manje algoritamskoj dekompoziciji, kako to zahtijeva strukturirano programiranje. Bilo je potrebno strukturu programa približiti strukturi zadataka koji se rješavaju i smanjiti tzv. semantički jaz između strukture problema koji se rješava i strukture programa. Semantički jaz nastaje kada su pojmovi na kojima se temelji jezik problema i sredstva za njegovo rješavanje različiti. Dakle, uz potrebu da se zapiše samo rješenje, potrebno je i prevesti neke pojmove u druge. (Usporedite ovo s prijevodom s jednog prirodnog jezika na drugi. Upravo zato što takvi pojmovi prije nisu postojali u ruskom jeziku, riječi poput broker, offshore ili investitor. Nažalost, posuđivanje riječi nije moguće u programiranju.)

Dakle, pojednostavljenje dizajna, ubrzanje razvoja zbog ponovne upotrebe gotovih modula i jednostavnost modifikacije tri su glavne prednosti objektno orijentiranog programiranja koje su promovirali njegovi zagovornici.

Objektno orijentirano programiranje pretpostavlja unificirani pristup projektiranju, izgradnji i razvoju sustava.

Pojava objektno orijentirane metode temelji se na cjelokupnom dosadašnjem razvoju metoda razvoja softvera, ali i mnogih drugih grana znanosti.

Pojava objektno orijentiranog pristupa dizajnu sustava bila je olakšana sljedećim tehnološkim dostignućima:

1 - Razvoj računalne tehnologije, posebno hardverske podrške za osnovne koncepte operativni sustavi i izgradnja sustava orijentiranih na funkcije.

2 - Napredak u metodologiji programiranja, posebno modularne konstrukcije sustava i enkapsulacije informacija.

3 - Teorija konstruiranja i modeliranja sustava za upravljanje bazom podataka uvela je ideje izgradnje odnosa između objekata u objektno programiranje.

4 - Istraživanja u području umjetne inteligencije dovela su 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 spoznaje. Na mnogo načina, objektno orijentirani dizajn sustava je specifičan pogled na stvarni svijet koji se modelira. Upravo u tom aspektu filozofija i epistemologija imale su snažan utjecaj na objektni model. Čak su i stari Grci promatrali svijet u obliku objekata ili procesa. Descartes je sugerirao da se objektno orijentirano razmatranje svijeta oko nas ljudima čini prirodnim. Minsky je sugerirao da se inteligencija manifestira kao interakcija agenata koji ne mogu misliti pojedinačno.

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

Prvi korak prema stvaranju objektnog modela trebao bi biti pojava apstraktnih tipova podataka. Vjeruje se da je prva cjelovita implementacija apstraktnih tipova podataka u programskim jezicima jezik Simula.

Zatim su se pojavili (i dalje se pojavljuju) drugi objektno orijentirani jezici koji definiraju moderno stanje programiranja. Najčešći od njih bili su C++, CLOS, Eiffel, Java.

Strukturirano programiranje - to su sigurni opći principi i pravila za dizajn, razvoj i izvođenje programa kako bi se olakšali procesi njihove izrade i testiranja, povećala produktivnost programera i poboljšala čitljivost rezultirajućeg programa. Struktura programa i algoritam za rješavanje problema trebaju biti lako razumljivi, jednostavni za dokazivanje ispravnosti i zgodni za modificiranje. U svojoj srži, strukturalni pristup je odbacivanje neurednog stila u algoritmizaciji i programiranju (osobito, odbacivanje goto operatora) i identificiranje ograničenog broja standardnih tehnika za konstruiranje lako čitljivih algoritama i programa s jasno definiranim struktura, što je posebno važno kod razvoja velikih programskih sustava.

Iskustvo korištenja metoda strukturiranog programiranja pri razvoju, na primjer, niza složenih operacijskih sustava pokazuje da se ispravnost logičke strukture sustava u ovom slučaju može lako dokazati, a sam sustav omogućuje prilično potpuno testiranje. Smanjenje poteškoća u otklanjanju pogrešaka i testiranju programa dovodi do povećanja produktivnosti programera, budući da testiranje programa troši od trećine do polovice vremena njegovog razvoja. Produktivnost programera obično se mjeri brojem ispravljenih pogrešaka koje može napisati u jednom danu. Približne procjene pokazuju da korištenje metoda strukturiranog programiranja omogućuje povećanje ove brojke za 5-6 puta. Također treba reći da strukturirano programiranje pretpostavlja određenu organizaciju samog procesa programiranja i određenu tehnologiju izrade programa, što također ima pozitivan učinak na produktivnost programera.

Osnove strukturnog programiranja. Teorijska osnova strukturiranog programiranja je teorem o strukturiranju, iz čega slijedi da se algoritam (program) za rješavanje bilo kojeg praktički izračunljivog problema može prikazati pomoću tri elementarne osnovne upravljačke strukture: sekvencijske strukture; razgranate strukture, ciklusne strukture prikazane na sl. 6.5-6.7 respektivno, gdje je P uvjet, S je operator.

Slijedeća struktura predstavlja prirodni tijek algoritma - bilo koji niz operatora koji se izvode jedan za drugim (vidi sl. 6.5). U programskom jeziku, ovo odgovara nizu ulaznih, izlaznih i naredbi za dodjelu.

Predstavlja faktor odlučivanja, uključuje provjeru određenog logičkog uvjeta P i, ovisno o rezultatima te provjere, izvršavanje operatora S1 ili operatora S2. U programskim jezicima (na primjer, Pascal) to implementira operator if P onda SI else S2 (vidi sl. 6.6).

Struktura petlje (petlja s preduvjetom) predstavlja faktor ponavljanja izračuna, osigurava da se izvođenje operatora S ponavlja mnogo puta dok (pravi) logički

Riža. 6.5.Slijedeća struktura

Riža. 6.6.

uvjet P. U programskim jezicima (na primjer, Pascal) implementira ga operator dok P do S (vidi sl. 6.7).

Osnovni skup upravljačkih struktura je funkcionalno dovršen, tj. uz njegovu pomoć možete stvoriti bilo koji algoritam, bez obzira koliko složen, međutim, za stvaranje kompaktnijih i vizualnijih algoritama i programa koriste se dodatne kontrolne strukture: struktura smanjenog grananja; struktura opcije ili višealternativnog izbora; struktura petlje s parametrom; struktura petlje s postuvjetom. U različitim jezicima U programiranju, implementacija osnovnih upravljačkih struktura može biti različita, na primjer, sve predložene strukture implementirane su u jeziku Pascal.

Bilo koji program može se izgraditi kroz sastav osnovnih struktura: bilo pomoću serijska veza- formiranje uzastopnih struktura, ili njihovim ugniježđivanjem jedne u drugu - formiranje ugniježđenih struktura.

Svaka od struktura može se smatrati jednim funkcionalnim blokom s jednim ulazom i jednim izlazom. Blokovi S, SI, S2, koji su dio osnovnih upravljačkih struktura, mogu i sami biti jedan od njih, pa su moguće ugniježđene strukture. Međutim, bez obzira na stupanj i dubinu "gniježđenja", važno je da svaki dizajn u konačnici ima jedan ulaz i jedan izlaz. Stoga se svaka složena struktura može promatrati kao "crna kutija" s jednim ulazom i jednim izlazom. Dakle, moguće je uvesti transformaciju bilo koje strukture u funkcijski blok. Tada se bilo koji algoritam sastavljen od standardnih struktura može sekvencijalno transformirati u jedan funkcionalni blok, a taj se niz transformacija može koristiti kao sredstvo za razumijevanje algoritma i dokazivanje njegove ispravnosti. Obrnuti slijed transformacija može se koristiti u procesu projektiranja algoritma s postupnim proširenjem jednog funkcionalnog bloka u složenu strukturu osnovnih elemenata.

Za strukturiranje i razumijevanje velikih programa također se koriste dodatni strukturalni alati koji podržavaju modularni princip razvoja softvera: to su potprogrami i moduli. Korištenje stroja potprogrami (procedure i funkcije) - Ovo je mogućnost dodjele odvojenih (često ponavljanih) dijelova koda u neovisne programske jedinice s vlastitim ulaznim i izlaznim podacima za naknadne ponovljene pozive iz različitih točaka u programu i drugim potprogramima. Modul je autonomno kompajlirana biblioteka opisa tipova, podataka, procedura i funkcija, koja vam omogućuje grupiranje opisa podataka i potprograma prema njihovim funkcijama i namjeni u skladu s jednim od osnovnih principa strukturiranog programiranja - razbijanjem velikih zadataka u podzadatke.

Metodologija izrade programa. Postoje dvije uobičajene tehnike (strategije) razvoja programa povezane sa strukturiranim programiranjem: programiranje odozgo prema dolje; programiranje odozdo prema gore.

Top-down programiranje, ili top-down dizajn programa, je tehnika razvoja programa u kojoj razvoj počinje definiranjem ciljeva rješavanja problema, nakon čega slijedi sekvencijalno detaljiziranje, a završava detaljnim programom. Najprije je identificirano nekoliko najglobalnijih problema, čije se rješenje može prikazati u općoj strukturi funkcionalno nezavisnim blokovima. Razvoj logičke strukture svakog takvog bloka i njegove izmjene mogu se provesti neovisno o drugim blokovima. U ovoj prvoj fazi projekta otkrivaju se najvažnije i najznačajnije veze, utvrđuje se funkcionalna namjena svakog bloka, njegovi ulazni i izlazni podaci. U kasnijim fazama projektiranja pojašnjava se (detalizira) logička struktura pojedinih funkcionalnih blokova općeg sklopa, što se također može provesti u nekoliko faza detaljizacije do najjednostavnijih uputa. U svakoj fazi projekta provode se višestruke provjere i korekcije.

Ovaj pristup je prilično racionalan i može značajno ubrzati proces razvoja kompleksa softverski projekti te u velikoj mjeri izbjegavati pogrešne odluke. Osim toga, postaje moguće ne implementirati neke potprograme (module) odmah, već privremeno odgoditi njihov razvoj dok se drugi dijelovi ne završe. Na primjer, ako postoji potreba za izračunavanjem složene matematičke funkcije, tada se zasebna podrutina za takav izračun dodjeljuje i privremeno implementira od strane jednog operatora, koji jednostavno dodjeljuje željenu vrijednost. Nakon što je cijela aplikacija napisana i otklonjene pogreške, možete početi implementirati ovu složenu značajku.

Programiranje “bottom up” ili dizajn programa odozdo prema gore - Ovo je tehnika razvoja programa koja počinje razvojem potprograma (procedura, funkcija), dok razvoj opće sheme nije dovršen. Ova tehnika je manje poželjna od top-down dizajna, jer često dovodi do neželjenih rezultata, prepisivanja koda i produljenog vremena razvoja. Njegova uporaba može biti prikladna kada novi projekt koristi dobro poznata vlasnička rješenja.

Opća načela za razvoj softverskih projekata. Korištenje tehnologije strukturiranog programiranja u razvoju ozbiljnih softverskih projekata temelji se na sljedećim načelima:

  • programiranje se mora vršiti odozgo prema dolje;
  • cijeli projekt treba podijeliti na module/potprograme s jednim ulazom i jednim izlazom;
  • svaki potprogram mora dopuštati samo tri osnovne strukture: sekvencijalno izvođenje iskaza, grananje i petlju;
  • bezuvjetni prijenos kontrole operatora goto nije valjan;
  • dokumentaciju treba stvarati istovremeno s programiranjem, djelomično u obliku komentara programa. Korištenje principa i metoda strukturiranog programiranja omogućuje povećanje pouzdanosti programa (zahvaljujući dobrom strukturiranju tijekom projektiranja, program je lako testirati i otklanjati pogreške) i njihovu učinkovitost (strukturiranje programa olakšava pronalaženje i ispravljanje pogreške, a pojedinačni potprogrami mogu se prepravljati/modificirati neovisno o drugima), smanjuju vrijeme i troškove razvoj softvera, poboljšati čitljivost programa.

Predavanje 1. Objektno orijentirano programiranje.

Objektno orijentirano programiranje (OOP) dominantan je stil za stvaranje velikih programa. Glavne faze evolucije strukturiranog pristupa programiranju pomažu boljem razumijevanju odnosa strukturalni pristup, modularno programiranje I OOP.

Jedinična cijena izrade programa donedavno se malo mijenjala. Kako je obujam programa rastao, jedinični trošak njegove izrade mogao bi nelinearno rasti. Vrijeme potrebno za izradu složenih programa proporcionalno je kvadratu ili čak kubu volumena programa. Stoga je jedan od glavnih čimbenika koji određuju razvoj tehnologije programiranja smanjenje troškova dizajna i izrade softverski proizvodi(PP) ili suočavanje sa složenošću programiranja.

Ostali čimbenici koji utječu na evoluciju dizajna PCB-a i metoda izrade su:

Mijenjanje arhitekture računalne mogućnosti(BC) u interesu povećanja
produktivnost, pouzdanost;

Pojednostavljenje interakcije korisnika sa zrakoplovom i intelektualizacija zrakoplova.
Učinak posljednja dva čimbenika povezan je s povećanjem složenosti softvera zrakoplova. Složenost predstavlja inherentno svojstvo programiranja i programa koji očituje se u vremenu i cijeni izrade programa, u obujmu ili duljini programskog teksta, karakteristikama njegove logičke strukture specificirane operatorima prijenosa kontrole (grananja, petlje, pozivi potprograma).

Postoji 5 izvora složenosti programiranja:

Problem koji treba riješiti;

Programski jezik;

Okruženje za izvođenje programa;

Proces zajednički razvoj i izrada softvera;

Težnja univerzalnosti i učinkovitosti algoritama i tipova podataka.

Svojstvo složenosti ne može se eliminirati, ali se značajke njegove manifestacije mogu promijeniti kroz upravljanje ili organizaciju.

Široko korišten u programiranju temeljno načelo upravljanje složenim sustavima, što je čovjeku poznato od davnina - Devide et impera(podijeli pa vladaj, lat.) i koristi se u razvoju i dizajnu bilo kojeg kompleksa tehnički sustavi. Prema prvom dijelu ovog načela, prilikom projektiranja složenog softverskog sustava, algoritamska dekompozicija problem koji se rješava.

Svrha dekompozicije je prikazati sustav koji se razvija u obliku međusobno povezanih malih podsustava (modula ili blokova), od kojih se svaki može debug bez obzira na druge. Pri projektiranju sustava koji je podijeljen na podsustave potrebno je voditi računa o znatno manjem broju detalja nego bez takve podjele.


Uz pojam raspad , koristi se i izraz strukturiranje problema, zadataka ili programa. Ideje o podjeli programa na relativno neovisne velike dijelove koji provode određene postupke i funkcije te tvore određenu hijerarhiju odnosa ogledaju se u strukturalni pristup na razvoj i stvaranje softver. U programiranju se strukturni pristup pojavio pojavom prvih potprograma i funkcija napisanih u njemu proceduralno orijentirani stil. Ovaj se stil temelji na pravilu: definirajte varijable i konstante koje će biti potrebno pohraniti u memoriju računala i opišite algoritam za njihovu obradu.

Strukturalni pristup dobio je teorijsku formulaciju početkom 70-ih u radovima teoretičara i praktičara programiranja (A.P. Ershov, E. Yodan, N. Wirth). Vrijedno je spomenuti pojavu strukturiranog programiranja, u kojem je ideja o racionalizaciji strukture programa našla određeni odraz. Strukturirano programiranje fokusira se na sastavljanje programa čija je struktura bliska "stablu" operatora ili blokova. Korištenje strukture stabla kao svojevrsnog standarda objašnjava se činjenicom da je to struktura koju je jednostavno analizirati i implementirati.

Daljnji razvoj strukturalnog pristupa doveo je do modularno programiranje. Omogućuje dekompoziciju aplikacijskog problema u obliku hijerarhije međusobno povezanih modula ili programa. Modul koji sadrži podatke i postupke za njihovu obradu pogodan je za autonomni razvoj i stvaranje. Specijalizacija modula prema vrsti obrade i prisutnost određenih vrsta podataka u njima svojstva su koja odražavaju vezu između modularnog programiranja i OOP-a.

Najvažniji alati za proizvođače PCB-a, koji odražavaju gotovo sve aspekte evolucije, su programski jezici.

Programski jezik je u početku računalno orijentiran i sadrži skup tipova podataka, operatora, operacija i funkcija koje se mogu jednostavno prevesti u naredbe za upravljanje računalnim hardverom i softverom. U ovom slučaju poželjno je maksimizirati učinkovitost prevođenja jezičnih rečenica u strojne kodove u smislu minimiziranja potrebne memorije, vremena izvođenja programa i troškova izrade prevoditelja. Istovremeno, programski jezik je programerski orijentiran i pruža alate za modeliranje objekata, njihovih svojstava i ponašanja pri rješavanju primijenjenih problema u određenom predmetnom području u obliku programa.

Razvoj jezika u smjeru povećanja učinkovitosti pisanja aplikacijskih programa doveo je do podjele jezika na sljedeće razine:

Niska razina (strojno orijentirani jezici - montažni jezici),

Visoka razina(proceduralno orijentirani jezici: FORTRAN, ALGOL,

Razina problema koji se rješava (problemski orijentirani jezici - SQL).

Uvod tipovi podataka označio još jedan smjer u razvoju tehnologije
logika programiranja. Upisivanje podataka ima za cilj olakšati
programiranje i automatizirati otkrivanje pogrešaka korištenjem
prijenos podataka u obliku operanda i stvarnih parametara prilikom pozivanja funkcija.
Korištenje strukturni tipovi podataka omogućuje, prvo, pojednostavljenje rada algoritmičara pri usporedbi podatkovnih struktura aplikacijskog zadatka i podataka obrađenih funkcijama programskih modula, i, drugo, smanjenje volumena rutinski rad programer prilikom kodiranja algoritma obrade.

Rezultat generalizacije pojma “tip podataka” je klase objekti (C++), koji kao elementi mogu sadržavati ne samo podatke određene vrste, već i metode za njihovu obradu (funkcije).

Dakle, kako se razvijala tehnologija programiranja, tako su i programi i tipovi podataka sve adekvatnije odražavali strukturu aplikativnog problema koji se rješava i provodila se odgovarajuća integracija podataka i programa u module. U isto vrijeme, programski jezici su se proširili sredstva, potrebno za opisi slične strukture. Razvoj ideja apstrakcije i modularnosti doveo je do pojave pristup objektu .

Čovjek razmišlja u slikama ili objektima, poznaje njihova svojstva i njima manipulira u skladu s određenim događajima. Stari Grci su imali ideju da se svijet može promatrati u obliku predmeta i događaja. Ljudi obično imaju objektno orijentirani pogled na svijet. Dakle, razmišljajući o telefonu, osoba može zamisliti ne samo njegov oblik i boju, već i mogućnost telefoniranja, prirodu zvuka poziva i niz drugih svojstava (ovisno o njegovom tehničkom znanju i mašti) .

Programski jezik omogućuje vam da opišete svojstva simuliranih objekata i redoslijed manipulacije objektima ili redoslijed njihove interakcije, u skladu s uvjetima problema koji se rješava. Prvi programski jezici bili su usmjereni na matematičke objekte, na određeni model računala. Stoga su sadržavali takve konstrukte kao što su varijabla, konstanta, funkcija, formalni i stvarni parametri. Programeri su zamislili svoje programe kao međusobno povezane funkcije i module. Priroda programiranja bila je proceduralno orijentirana, jer je primarna pažnja bila posvećena sekvencama radnji s podacima. U skladu s tim, nazivaju se programski jezici kao što su FORTRAN, PL-1, C proceduralno orijentiran.

Podaci i rutine kombinirani su u module prema logici projektanata koji stvaraju kompleks programski sustavi za pojedina područja njihove primjene. Logika integracije u module određena je nizom čimbenika, među kojima valja istaknuti svojstva domene: podaci i rutine za njihovu obradu, koji odgovaraju određenoj klasi objekata u predmetnom području, kombinirani su u modul. Tako je modul za obradu nizova sadržavao funkcije za izvođenje osnovnih operacija s nizovima: kombiniranje, uspoređivanje, kopiranje i izračunavanje duljine niza.

Razvoj ideje modularnog programiranja je mapiranje programskih konstrukcija tzv objekti, vrste objekata ili klase (modeliranje objekata). Objekti za modeliranje sadrže podatke i funkcije koje opisuju svojstva objekata koji se modeliraju. Dakle, podaci mogu odražavati atributna ili kvantitativna svojstva (masa, duljina, snaga, cijena), a funkcije odražavaju svojstva ponašanja ili rada (promijeniti masu, izračunati snagu, postaviti cijenu). Dakle, kod objektnog pristupa, integracija podataka i funkcija njihove obrade određena je strukturom predmetnog područja, odnosno skupa modeliranih objekata, njihove interakcije u okviru problema koji se rješava.

Simulirani objekt uvijek se čovjeku čini kao nešto pojedinačno, cjelovito, iako se može sastojati od dijelova ili drugih predmeta. Holistički prikaz objekta u obliku međusobno povezanog skupa njegovih svojstava ili komponenti je osnovni princip pristup objektu.

Objektni pristup počeo se razvijati u programiranju 70-ih godina (Smalltalk, CLOS, Ada). Ovi se jezici nazivaju cilj. Hijerarhijska klasifikacija objekti i nasljedstvo svojstva su polazne ideje objektno orijentiranog pristupa koji se pojavio 80-ih godina. Jedan od razloga relativno sporog razvoja objektno orijentiranog stila programiranja je njegova značajna razlika od proceduralno orijentiranog stila.

Programiranje- relativno mlada grana znanosti i tehnologije koja se brzo razvija. Iskustvo u provođenju stvarnog razvoja i poboljšanju postojećeg softvera i tehnička sredstva neprestano se promišlja, što rezultira pojavom novih metoda, metodologija i tehnologija, koje zauzvrat služe kao osnova za više modernim sredstvima razvoj softvera. Preporučljivo je proučiti procese stvaranja novih tehnologija i utvrditi njihove glavne trendove uspoređujući te tehnologije sa stupnjem razvoja programiranja i značajkama softvera i hardvera koji su dostupni programerima.

Tehnologija programiranja nazovite 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:

  • naznaka redoslijeda tehnoloških operacija;
  • navođenje uvjeta pod kojima se pojedina operacija izvodi;
  • opise samih operacija, gdje su za svaku operaciju definirani polazni podaci, rezultati, te upute, propisi, standardi, kriteriji i načini vrednovanja i dr.

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

Objektno orijentirano programiranje (OOP) definira se kao tehnologija za stvaranje složenog softvera koja se temelji na predstavljanju programa kao skupa objekata, od kojih je svaki instanca određenog tipa (klase), a klase tvore 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 integracije s procesnim rutinama, što omogućuje gotovo neovisan razvoj pojedinih dijelova (objekata) programa. Uz to, objektni pristup nudi nove načine organiziranja programa koji se temelje na mehanizmima nasljeđivanja, polimorfizma, sastava i popunjavanja. Ti mehanizmi omogućuju konstruiranje složenih objekata od relativno jednostavnih. Rezultat je značajno povećanje ponovne upotrebe koda i mogućnost stvaranja biblioteka klasa za različite aplikacije.



Brzi razvoj tehnologija programiranja temeljenih na objektnom pristupu omogućio je rješavanje mnogih problema. Tako su nastala okruženja koja podržavaju vizualno programiranje, npr. Delphi, C++ Builder, Visual C++ itd. Kod korištenja vizualnog okruženja programer ima priliku dizajnirati neki dio, npr. sučelja budućeg proizvoda, korištenje vizualnih alata za dodavanje i konfiguriranje posebnih komponenti knjižnice. Rezultat vizualnog oblikovanja je priprema budućeg programa u koji su već uneseni odgovarajući kodovi.

Može se dati opća definicija: OOP objekt je skup varijabli stanja i pridruženih metoda (operacija). Ove metode određuju način interakcije objekta s vanjskim svijetom.

Pod objektne metode razumjeti procedure i funkcije čija je deklaracija uključena u opis objekta i koje izvode akcije. Sposobnost kontrole stanja objekta pozivanjem metoda u konačnici određuje ponašanje objekta. Ova zbirka metoda često se naziva sučelje objekta.

Strukturno programiranje (SP) pojavilo se kao rješenje problema smanjenja SLOŽENOSTI razvoja softvera.

Na početku ere programiranja rad programera nije bio ni na koji način reguliran. Problemi koji su se rješavali nisu se razlikovali po opsegu i veličini; korišteni su uglavnom strojno orijentirani jezici, kao što je Assembly; razvijeni programi rijetko su dostizali značajne veličine vrijeme njihovog razvoja.

Kako se programiranje razvijalo, tako su se pojavljivali zadaci za koje su određivani ograničeni rokovi za sve složenije zadatke koji uključuju skupine programera. Kao rezultat toga, programeri se suočavaju s činjenicom da se metode prikladne za razvoj malih problema ne mogu koristiti pri razvoju velikih projekata zbog složenosti potonjih.

Dakle, cilj strukturiranog programiranja je povećati pouzdanost programa, osigurati održavanje i izmjene, olakšavanje i ubrzavanje razvoja.

Metodologija strukturnog imperativnog programiranja - pristup koji se sastoji u specificiranju dobre topologije imperativnih programa, uključujući odbijanje korištenja globalnih podataka i operatora bezuvjetnog skoka, razvijanje modula s jakom povezanosti i osiguranje njihove neovisnosti o drugim modulima.

Pristup se temelji na dva glavna principa:

· Sekvencijalna dekompozicija algoritma za rješavanje problema odozgo prema dolje.

· Korištenje strukturnog kodiranja.

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

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

Metode i koncepti na kojima se temelji strukturirano programiranje. Ima ih troje

metoda top-down algoritamska dekompozicija- sastoji se u detaljnom opisivanju problema, počevši od najopćenitijeg problema. Ova metoda daje dobru strukturu. Metoda je podržana konceptom algoritma.

metoda modularna organizacija programskih dijelova- sastoji se od podjele 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 strukture pri kodiranju. Oznake i operator bezuvjetnog skoka teško su pratiti veze bez kojih želimo. Metoda je podržana konceptom upravljanja

Strukturni programski jezici. Glavna razlika u odnosu na klasičnu metodologiju imperativnog programiranja je neuspjeh (točnije, različiti stupnjevi neuspjeha) od operatora bezuvjetnog skoka .

„Važno svojstvo sintakse za programera je sposobnost u strukturi programa odražavaju strukturu temeljnog algoritma. Kada koristite metodu poznatu kao strukturirano programiranje, program je konstruiran hijerarhijski - od vrha prema dolje (od glavni program do potprograma najniže razine), uz korištenje na svakoj razini samo ograničenog skupa kontrolnih struktura: jednostavnih nizova instrukcija, petlji i nekih vrsta uvjetnih grananja. Kada se ova metoda provodi dosljedno, strukturu rezultirajućih algoritama lako je razumjeti, otkloniti pogreške i modificirati. U idealnom slučaju, trebali bismo biti u mogućnosti prevesti programski dijagram konstruiran na ovaj način izravno u odgovarajuće programske upute koje odražavaju strukturu algoritma."

Teorem o strukturiranju (Boem-Jacopini): Bilo koji regularni 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

Korolar 1: Bilo koji program može se pretvoriti u formu bez naredbe goto.

Korolar 2: Bilo koji algoritam može se implementirati u jezik koji se temelji na tri kontrolne konstrukcije - slijed, petlja, ponavljanje.

Korolar 3: Složenost strukturiranih programa je ograničena, čak i ako je njihova veličina neograničena.

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

U gotovo svim jezicima koji podržavaju imperativnu metodologiju, moguće je razviti programe pomoću ove metodologije. Brojni jezici uveli su posebne zamjene za goto operator kako bi se olakšalo upravljanje petljama (na primjer, Break i Continue u C).

Klasa problema. Klasa zadataka za ovu metodiku odgovara klasi zadataka za imperativnu metodiku. Imajte na umu da je u ovom slučaju moguće razviti više složeni programi, jer ih je lako uočiti i analizirati.

funkcionalni pristup do programiranja.

Prije svega, okrenimo se povijesti temeljnih matematičkih istraživanja koja su dovela do nastanka funkcionalni pristup do programiranja.

Vrijeme pojave teorijskih radova koji potkrepljuju funkcionalni pristup, datira iz 20-30-ih godina XX. stoljeća. Kao što ćemo kasnije vidjeti, teorija je često znatno ispred programske prakse, a najvažniji radovi koji su činili matematičku osnovu pristupa napisani su puno prije pojave računala i programskih jezika koji bi potencijalno mogli implementirati ovu teoriju.

Što se tiče prve implementacije, ona se pojavila 50-ih godina 20. stoljeća u obliku jezika LISP, o kojem će biti više riječi.

Podsjetimo da najvažnija karakteristika funkcionalni pristup je činjenica da se bilo koji program razvijen u funkcionalnom programskom jeziku može smatrati funkcijom čiji argumenti također mogu biti funkcije.

Funkcionalni pristup iznjedrio cijelu obitelj jezika, čiji je predak, kao što je već navedeno, bio programski jezik LISP. Kasnije, 70-ih godina, razvijena je početna verzija ML jezika, koja se kasnije razvila, posebno, u SML, kao i niz drugih jezika. Od njih je možda "najmlađi" jezik Haskell, nastao sasvim nedavno, 90-ih.

Važna prednost implementacije jezika funkcionalno programiranje je automatiziran dinamička dodjela memorije računalo za pohranu podataka. U tom slučaju, programer se oslobađa potrebe za kontrolom podataka, a ako je potrebno, može pokrenuti funkciju "odvoz smeća"– brisanje memorije od podataka koji više nisu potrebni programu.

Složeni programi sa funkcionalni pristup grade se agregirajućim funkcijama. U ovom slučaju programski tekst je funkcija, čiji se neki od argumenata također mogu smatrati funkcijama. Dakle, ponovna uporaba koda svodi se na pozivanje prethodno opisane funkcije čija je struktura za razliku od procedure imperativni jezik, matematički je transparentan.

Budući da je funkcija prirodni formalizam za funkcionalne programske jezike, implementacija različitih aspekata programiranja povezanog s funkcijama uvelike je pojednostavljena. Pisanje postaje intuitivno transparentno rekurzivne funkcije , tj. funkcije koje same sebe pozivaju kao argument. Provedba obrade također postaje prirodna rekurzivne strukture podataka.

Zahvaljujući provedbi mehanizam usklađivanja uzoraka funkcionalni programski jezici kao što su ML i Haskell dobri su za korištenje za simboličku obradu.

Naravno, funkcionalni programski jezici nisu bez nekih nedostataka.

To često uključuje nelinearnu strukturu programa i relativno niske učinkovitost provedbe. Međutim, prvi je nedostatak prilično subjektivan, a drugi je uspješno prevladan modernim implementacijama, posebice brojnim nedavnim prevoditeljima SML jezika, uključujući kompilator za Microsoftovo okruženje. NETO.

Da biste razvili profesionalni softver u funkcionalnim programskim jezicima, morate imati duboko razumijevanje prirode funkcije. Predavanja 2-12 ovog kolegija uglavnom su posvećena proučavanju obrazaca i značajki prirode funkcije.

Imajte na umu da se izraz "funkcija" u matematičkoj formalizaciji i implementaciji softvera odnosi na različite koncepte.

Tako, matematička funkcija f s domenom A i rasponom B je skup uređenih parova

takav da ako

b 1 = b 2 .

Zauzvrat, funkcija u programskom jeziku je konstrukcija ovog jezika koja opisuje pravila za pretvaranje argumenta (tzv. stvarnog parametra) u rezultat.

Formalizirati koncept "