programske paradigme

22
Programske paradigme Svojstva programskih jezika Milena Vujoˇ sevi´ c Janiˇ ci´ c Programske paradigme Beograd, 24. decembar, 2015. Pregled Sadrˇ zaj 1 Svojstva programskih jezika 1 1.1 Sintaksa ................................ 2 1.2 Semantika ............................... 2 1.3 Imena, povezanost, doseg ...................... 4 1.4 Kontrola toka ............................. 5 1.5 Tipovi ................................. 6 1.6 Kompilacija vs Interpretiranje .................... 7 1.7 Izvrˇ savanje .............................. 7 1.8 Pitanja i literatura .......................... 8 2 Imperativna paradigma 9 2.1 Osnove imperativne paradigme ................... 9 2.2 Operaciona paradigma ........................ 11 2.3 Strukturna paradigma ........................ 13 2.4 Proceduralna paradigma ....................... 15 2.5 Modularna paradigma ........................ 19 2.6 Naˇ cin reˇ savanja problema ...................... 19 2.7 Specifiˇ cnosti imperativne paradigme ................ 20 2.8 Pitanja i literatura .......................... 21 1 Svojstva programskih jezika Svojstva programskih jezika ˇ Sta je ono ˇ sto ˇ cini dva programska jezika sliˇ cnim? Na osnovu ˇ cega neki jezik pripada nekoj paradigmi? ˇ Sta je ono ˇ sto ˇ cini dva programska jezika razliˇ citim? Na osnovu ˇ cega neki jezika ne pripada nekoj paradigmi? ˇ Sta je zajedniˇ cko za sve programske jezike?

Upload: vuhanh

Post on 02-Feb-2017

304 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Programske paradigme

Programske paradigmeSvojstva programskih jezika

Milena Vujosevic Janicic

Programske paradigmeBeograd, 24. decembar, 2015.

Pregled

Sadrzaj1 Svojstva programskih jezika 1

1.1 Sintaksa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Semantika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3 Imena, povezanost, doseg . . . . . . . . . . . . . . . . . . . . . . 41.4 Kontrola toka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.5 Tipovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.6 Kompilacija vs Interpretiranje . . . . . . . . . . . . . . . . . . . . 71.7 Izvrsavanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.8 Pitanja i literatura . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2 Imperativna paradigma 92.1 Osnove imperativne paradigme . . . . . . . . . . . . . . . . . . . 92.2 Operaciona paradigma . . . . . . . . . . . . . . . . . . . . . . . . 112.3 Strukturna paradigma . . . . . . . . . . . . . . . . . . . . . . . . 132.4 Proceduralna paradigma . . . . . . . . . . . . . . . . . . . . . . . 152.5 Modularna paradigma . . . . . . . . . . . . . . . . . . . . . . . . 192.6 Nacin resavanja problema . . . . . . . . . . . . . . . . . . . . . . 192.7 Specificnosti imperativne paradigme . . . . . . . . . . . . . . . . 202.8 Pitanja i literatura . . . . . . . . . . . . . . . . . . . . . . . . . . 21

1 Svojstva programskih jezikaSvojstva programskih jezika

• Sta je ono sto cini dva programska jezika slicnim?

• Na osnovu cega neki jezik pripada nekoj paradigmi?

• Sta je ono sto cini dva programska jezika razlicitim?

• Na osnovu cega neki jezika ne pripada nekoj paradigmi?

• Sta je zajednicko za sve programske jezike?

Page 2: Programske paradigme

• Sta je ono sto je specificno za svaki programski jezik?

• Sta je ono sto je specificno za neki programski jezik?

Svojstva programskih jezika

• Postoje razlicita svojstva programskih jezika koja cemo izucavati:

– Sintaksa– Semantika– Imena, doseg, povezanost– Kontrola toka, podrutine– Tipovi– Kompajlirani/Interpretirani jezici– Izvrsavanje

1.1 SintaksaSintaksa

• Sintaksa programskog jezika definise strukturu izraza

• Ukljucuje nacin formiranja ispravnih tokena kao i spajanje tokena u ispravneizraze

• Formalno, sintakse se opisuju gramatikama

Sintaksa

• Na primer, sledeca jednostavna gramatika prepoznaje jednostavne arit-meticke izraze

<exp> ::= <exp> "+" <exp><exp> ::= <exp> "*" <exp><exp> ::= "(" <exp> ")"<exp> ::= "a"<exp> ::= "b"<exp> ::= "c"

• Program u ovom jeziku je proizvod ili suma od ’a’, ’b’ i ’c’, na primerispravan izraz je a*(b+c)

1.2 SemantikaSemantika

• Semantika pridruzuje znacanje ispravnim konstrukcijama na nekom pro-gramskom jeziku.

• Uloga semantike je da programer moze da razume kako se program izvrsavapre njegovog pokretanja.

2

Page 3: Programske paradigme

• Semantika moze da se opise formalno i neformalno, cesto se zadaje samoneformalno.

• Na primer, semnatika nardbe if(a<b) a++; neformalno se opisuje sa „uko-liko je vrednost promenljive a manja od vrednosti promenljive b, ondauvecaj vrendnost promenljive a za jedan”

Semantika

• Formalan opis znacenja jezickih konstrukcija

– Operaciona semantika– Aksiomska semantika– Denotaciona semantika

Operaciona semantika

• Operaciona semantika opisuje kako se izracunavanje izvrsava.

• Ponasanje se formalno definise koriscenjem apstraktnih masina, formalnihautomata, tranzicionih sistema...

• U okviru ove semantike postoje strukturna operaciona semantika (small-step semantics, opisuje individualne korake izracunavanja) i prirodna ope-raciona semantika (big-step semantics, opisuje ukupne rezultate izracunavanja).

Aksiomatska semantika

• Aksiomska semantika zasniva se na matematickoj logici, na primer naHorovoj logici

• Horova trojka {P} C {Q}; opisuje kako izvrsavanje dela koda menja sta-nje izracunavanja: ako je ispunjen preduslov {P}, izvrsavanje komande Cvodi do postuslova {Q}

• Horova logika obezbeduje aksiome i pravila izvodenja za sve konstruktejednostavnog imperativnog programskog jezika

• Na primer

{P}S{Q}, {Q}T{R}-------------- -----------------{P}skip{P} {P}S;T{R}

Denotaciona semantika

• Denotaciona semantika definise znacenje prevodenjem u drugi jezik, zakoji se pretpostavlja da je poznata semantika

• Najcesce je taj drugi jezik nekakav matematicki formalizam

• Pristup formalizaciji semantike konstruisanjem matematickih objekata kojiopisuju znacenje jezika, matematicke funkcije koje preslikavaju ulaz u izlaz

3

Page 4: Programske paradigme

Semantika

• Kompajler prevodi kod na masinski kod u skladu sa zadatom semantikomjezika.

• Tokom kompilacije, vrsi se proveravanje da li postoji neka semantickagreska, tj situacija koja je sintaksno ispravna ali za konkretne vrednostinema pridruzeno znacenje zadatom semantikom.

• Neki aspekti semanticke korektnosti programa se mogu proveriti tokomprevodenja programa — na primer, da su sve promenljive koje se koristeu izrazima definisane i da su odgovarajuceg tipa),

• Neki aspekti semanticke korektnosti se mogu proveriti tek u fazi izvrsavanjaprograma — na primer, deljenje nulom, pristup elementima niza van gra-nica...

Semantika

• Semanticke provere se mogu podeliti na staticke (provere prilikom kompi-lacije) i dinamicke (provere prilikom izvrsavanja programa).

• Staticki se ne moze pouzdano utvrditi ispunjenost semantickih uslova, takoda je moguce da se neke greske ne utvrde, iako prisutne, kao i da se nekegreske pogresno utvrde iako nisu prisutne i da rezultiraju nepotrebnimproverama prilikom izvrsavanja programa.

• Razlicitim programskim jezicima odgovaraju izvrsni programi koji sadrzerazlicite nivoe dinamickih provera ispravnosti.

1.3 Imena, povezanost, dosegImena, povezanost, doseg

• Ime — string koji se koristi za predstavljanje necega (promenljive, kon-stante, operatora, tipova...)

• Povezivanje uspostavlja odnos izmedu imena sa onim sto to ime predsta-vlja.

• Vreme povezivanja je vreme kada se ova veza uspostavlja

• Rano vreme povezivanja — veca efikasnost, kasno vreme povezivanja —veca fleksibilnost.

Imena, povezanost, doseg

• Vreme povezivanja moze biti

– vreme dizajna programskog jezika (osnovni konstrukti, primitivni ti-povi podataka...)

– vreme implementacije (velicina osnovnih tipova podataka...)

– vreme programiranja (algoritmi, strukture, imena promenljivih)

4

Page 5: Programske paradigme

– vreme kompiliranja (preslikavanje konstrukata viseg nivoa u masinskikod)

– vreme povezivanja (kada se ime iz jednog modula odnosi na objekatdefinisan u drugom modulu)

– vreme ucitavanja (kod starijih operativnih sistema, povezivanje obje-kata sa fizickim adresama u memoriji)

– vreme izvrsavanja (povezivanje promenljivih i njihovih vrednosti)

Imena, povezanost, doseg

• Doseg odreduje deo programa u kojem je vidljivo neko ime

• Doseg ne odreduje nuzno zivotni vek objekta

1.4 Kontrola tokaKontrola toka

• Kontrola toka definise redosled izracunavanja koje racunar sprovodi da bise ostvario neki cilj.

• Postoje razliciti mehanizmi odredivanja kontrole toka:

1. Sekvenca — odreden redosled izvrsavanja

2. Selekcija — u zavisnosti od uslova, pravi se izbor (if, switch)

3. Iteracija — fragment koda se izvrsava vise puta

4. Podrutine su apstrakcija kontrole toka: one dozvoljavaju da progra-mer sakrije proizvoljno komplikovan kod iza jednostavnog interfejsa(procedure, funkcije, rutine, metodi, potprogrami)

Kontrola toka

• Postoje razliciti mehanizmi odredivanja kontrole toka:

5. Rekurzija — definisanje izraza u terminima samog izraza (direktnoili indirektno)

6. Konkurentnost — dva ili vise fragmenta programa mogu da se izvrseistovremeno, bilo paralelno na razlicitim procesorima, bilo ispreple-tano na istom procesoru

7. Podrska za rad sa izuzecima —fragment koda se izvrsava ocekujucida su neki uslovi ispunjeni, ukoliko se desi suportno, izvrsavanje senastavlja u okviru drugog fragmenta za obradu izuzetka

8. Nedeterminizam — redosled izvrsavanja se namerno ostavlja nedefi-nisan, sto povlaci da izvrsavanje proizvoljnim redosledom dovodi dokorektnog rezultata

5

Page 6: Programske paradigme

1.5 TipoviTipovi

• Programski jezici moraju da organizuju podatke na neki nacin

• Tipovi pomazu u dizajniranju programa, proveri ispravnosti programa i uutvrdivanju potrebne memorije za skladistenje podataka

• Mehanizmi potrebni za upravljanjem podacima nazivaju se sistem tipova

Tipovi

• Sistem tipova obicno ukljucuje

– skup predefinisanih osnovnih tipova (npr int, string...)

– mehanizam gradenja novih tipova (npr struct, union)

– mehanizam kontrolisanja tipova

∗ pravila za utvrdivanje ekvivalentnosti: kada su dva tipa ista?∗ pravila za utvrdivanje kompatibilnosti: kada se jedan tip moze

zameniti drugim?∗ pravila izvodenja: kako se dodeljuje tip kompleksnim izrazima?

– pravila za proveru tipova (staticka i dinamicka provera)

Tipovi

• Jezik je tipiziran ako precizira za svaku operaciju nad kojim tipovimapodataka moze da se izvrsi

• Jezici kao sto je asembler i masinski jezici nisu tipizirani jer se svakaoperacija izvrsava nad bitovima fiksne sirine

• Postoji slabo i jako tipiziranje

– Kod jako tipiziranih jezika izvodenje operacije nad podacima po-gresnog tipa ce izazvati gresku

– Slabo tipizirani jezici izvrsavaju implicitne konverzije ukoliko nemapoklapanja tipova

– Neki jezici dozvoljavaju eksplicitno kastovanje tipova

Tipovi

• Vazan je trenutak kada se radi provera tipova

– Za vreme prevodenja programa — staticko tipiziranje

– Za vreme izvrsavanja programa — dinamicko tipiziranje

• Staticko tipiziranje je manje sklono greskama ali moze da bude previserestriktivno, dok je dinamicko tipiziranje sklonije greskama i tesko za de-bagovanje ali fleksibilnije.

6

Page 7: Programske paradigme

1.6 Kompilacija vs InterpretiranjeKompilacija vs Interpretiranje

• Kompilirani jezici se prevode u masinski kod koji se izvrsava direktno naprocesoru racunara - faze prevodenja i izvrsavanja programa su razdvo-jene.

• U toku prevodenja, vrse se razne optimizacije izvrsnog koda sto ga ciniefikasnijim.

• Jednom preveden kod se moze puno puta izvrsavati, ali svaka izmenaizvornog koda zahteva novo prevodenje.

Kompilacija vs Interpretiranje

• Interpretirani jezici se prevode naredbu po naredbu i neposredno zatim senaredba izvrsava — faze prevodenja i izvrsavanja nisu razdvojene vec sumedusobno isprepletene.

• Rezultat prevodenja se ne smesta u izvrsnu datoteku, vec je za svakonaredno pokretanje potrebna ponovna analiza i prevodenje.

• Sporiji, ali prilikom malih izmena koda nije potrebno vrsiti analizu celo-kupnog koda.

• Hibridni jezici — kombinacija prethodna dva.

Kompilacija vs Interpretiranje

• Teorijski, svi programski jezici mogu da budu i kompilirani i interpretirani.

• Moderni programski jezici najcesce pruzaju obe mogucnosti, ali u praksije za neke jezike prirodnije koristiti odgovarajuci pristup.

• Nekada se u fazi razvoja i testiranja koristi interpretirani pristup, a potomse generise izvrsni kod kompilacijom.

• Prema tome, razlika se zasniva pre na prakticnoj upotrebi nego na samimkarakteristikama jezika.

1.7 IzvrsavanjeIzvrsavanje

• Svaka netrivijalna implementacija jezika viseg nivoa intenzivno koristi ran-tajm biblioteke

• Rantajm sistem se odnosi na skup biblioteka od kojih implementacija je-zika zavisi kako bi program mogao ispravno da se izvrsava.

• Neke bibliotecke funkcije rade jednostavne stvari (npr podrska aritmetickimfunkcijama koje nisu implementirane u okviru hardvera, kopiranje sadrzajamemorije...) dok neke rade komplikovanije stvari (npr upravljanje hipom,rad sa baferovanim I/O, rad sa grafickim I/O...)

7

Page 8: Programske paradigme

Izvrsavanje

• Neki jezici imaju veoma male rantajm sisteme (npr C)

• Neki jezici koriste rantajm sisteme intenzivno

• Virtuelne masine u potpunosti skrivaju hardver arhitekture nad kojom seprogram izvrsava

• C# koristi rantajm sistem CLI, JAVA koristi JVM

1.8 Pitanja i literaturaPitanja

• Koja su osnovna svojstva programskih jezika?

• Koji formalizam se koristi za opisivanje sintakse programskog jezika?

• Sta definise semantkika programskog jezika?

• Koji su formalni okviri za definisanje semantike programskih jezika?

• Sta je ime?

• Sta je povezivanje?

• Koja su moguca vremena povezivanja?

Pitanja

• Sta je doseg?

• Sta je kontrola toka?

• Koji su mehanizmi odredivanja kontrole toka?

• Sta je sistem tipova i sta on ukljucuje?

• Sta je tipiziranje i kakvo tipiziranje postoji?

• Kada se radi provera tipova?

• Koja je razlika izmedu kompiliranja i interpretiranja?

• Sta je rantajm sistem?

Literatura

• Programming Language Pragmatics, Third Edition, 2009 by Michael L.Scott

• Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Pro-gramming Languages (Pragmatic Programmers), 2010 by Bruce A. Tate

8

Page 9: Programske paradigme

2 Imperativna paradigma

2.1 Osnove imperativne paradigmeImperativna paradigma

• Imeprativna paradigma je prvonastala programska paradigma.

• Nastala je pod uticajem Fon Nojmanove arhitekture racunara (tj. ova ar-hitektura namece ovaj stil programiranja, prilagoden masini, a ne coveku).

• U resavanju problema prednost se daje algoritmima pa se imperativnoprogramiranje naziva i Algoritmaski orijentisano programiranje

• Podaci i algoritmi postoje nezavisno: Podaci+Algoritmi=Programi

Imperativna paradigma

• Kao sto se u govornom jeziku zapovedni nacin (ili imperativ) koristi zaizrazavanje naredbi, tako se imperativni programi mogu posmatrati kaoniz naredbi koje racunar treba da izvrsi.

• Pored naredbi, kljucan je i redosled izvrsavanja naredbi — procedura.

• Imperativna paradigma i proceduralna paradigma se cesto koriste kao si-nonimi.

• Imperativno programiranje karakterise izracunavanje u terminima naredbikoje menjaju stanje programa.

Stanje programa

• Stanje programa cine sve sacuvane informacije, u datom trenutku vre-mena, kojima program ima pristup (preko memorije).

• Izvrsavanjem programa generise se niz stanja. Prelaz iz jednog stanja usledece je odreden komandama koje se izvrsavaju.

• Svaki imperativni jezik obezbeduje raznovrsne komande za modifikacijustanja (manipulisanje) memorije.

Naredba dodele

• Osnovna komanda za modifikaciju stanja memorije je naredba dodele.

• Naredba dodele vrsi povezivanje imena i neke vrednosti, odnosno upisiva-nje konkretne binarne reci na odgovarajucu memorijsku lokaciju.

• Analogija izmedu memorijskih i (procedurlno) jezickih elemenata:

Memorija binarna rec mem. registar adresaJezik vrednost promenljiva ime

9

Page 10: Programske paradigme

Promenljive i naredba dodele

• Deklaracijom promenljive u proceduralnom jeziku odreduje se velicina me-morijslog prostora za zapis promenljive. Na primer:

Pascal: var name : Type;C : type name;

• Promenljiva se povezuje sa nekom vrednoscu preko izraza, sto se razlicitoopisuje u razlicitim jezicima. Na primer:

Pascal : V := EC : V = EAPL : V <-- E

Naredba dodele i redosled vezivanja

• Redosled povezivanja imena i vrednosti (dodeljivanje) utice na vrednostiizracunavanja

a = 5; b = 3; c = 7;b = a+1;c = a+b; /*Redosled izvrsavanja ovih naredbi je bitan!*/

• Bitan je i redosled povezivanja (asocijativnost, prioriteti).

b = a+b*c/2;

Kontrola toka

• Kontrola toka se ostvaruje kroz razlicite instrukcije i apstrakcije.

• Najveci broj konstrukcija u imperativnim jezicima je odraz hardverskeimplementacije.

• Imperativna paradigma prolazi kroz razlicite faze razvoja, a svaku fazukarakterise visi nivo apstrakcije u odnosu na arhitekturu racunara, i uda-ljavanje od asemblerskih jezika.

Faze razvoja imperativne (proceduralne) paradigme

• Neki autori svaku fazu imperativne paradigme izdvajaju u posebnu pro-gramsku paradigmu, a neki ih tretiraju kao potparadigme imperativneparadigme.

– Operaciona (pod)paradigma

– Strukturna (pod)paradigma

– Proceduralna (pod)paradigma

– Modularna (pod)paradigma

10

Page 11: Programske paradigme

2.2 Operaciona paradigmaOperaciona (pod)paradigma

• Prva faza programiranja.

• Programiranje zasnovano na dosetkama, trikovima, naziva se i trik progra-miranje.

• Programi su pisani bez opstih pravila, koriscenje su specificnosti u raduracunara, trikovi za ustedu memorije, pisanje samomodifikujucih pro-grama.

• Ogromna produkcija softvera karajem 60-tih godina proslog veka.

• Jezici: FORTRAN, ALGOL, COBOL, BASIC, ...

Kontrola toka• Minimalan skup komandi (koji je cesto koriscen):

komanda ::=identifikator = izraz | (naredba dodele)komanda; komanda | (sekvenca)labela : komanda | (obelezavanje)GOTO labela | (naredba skoka)IF (log_izraz) [THEN] GOTO labela (selekcija)

Kontrola toka

• Ove upravljacke strukture su nastale kao odraz (analogoni) struktura uprogramu na masinskom jeziku.

• Prema Fon Nojmanovom konceptu racunara, instrukcije slede jedna zadrugom (sekvenca naredbi u imperativnom jeziku), a redosled se mozepromeniti koriscenjem GOTO (Jump) – naredbe.

• U imperativnim jezicima javljaju se 2 oblika GOTO-naredbe (u IF-naredbii bez IF-naredbe).

• Koriscenje prethodnih naredbi dovodi do pisanja nepreglednih programa,teskih za modifikaciju (“Spageti-programi”).

• To je posledica prilagodavanja jezika masini, a ne coveku.

Spageti programiranje — primer u C-u#include <stdio.h>

main(){float x,y;int n;

n=1;l20: scanf("%f", &x);

y=x;if(x<0) goto l30;y=-x;

l30: printf("y = %f\n",y);n=n+1;if (n!=5) goto l20;

}

11

Page 12: Programske paradigme

Spageti programiranje - primer u Pascal-u

program idina;

label 20, 30;var x,y:real;

n:integer;begin

n:=1;20: readln(x);

y:=x;if x<0 then goto 30;y:=-x;

30: writeln(y);n:=n+1;if n<>5 then goto 20

end.

Spageti programiranje — primer u C-u

main() {int i,n;float h, x0, x, y;printf ("Unsete h, x0 i n\n");scanf("%f%f%d",&h,&x0,&n);if (n<0) goto komentar;

printf("Pocetak \n");i=0;

poc: x=x0+i*h;y=x*x;printf("x=%f, y=%f\n", x, y);if(i<n) goto uvecanje;return 0;

uvecanje: i=i+1; goto poc;komentar: printf("Nekorektno zadato n\n");}

Spageti programiranje - primer u Pascal-u

program sagoto;label poc, kraj;var i,n: integer;

h, x0, x, y: real;begin

writeln (’Unsete h, x0 i n’);readln (h, x0, n);writeln (’Pocetak’);i:=0;

poc: x:=x0+i*h;y:=x*x;

writeln(’x = ’, x, ’ y = ’, y);if(i>=n) then goto kraj;i:=i+1;goto poc;

kraj:end.

Spageti programiranje — primer

12

Page 13: Programske paradigme

Operaciona paradigma — problemi

• Teska citljivost programa i odrzavanje programa.

• Kreirani softver je nepogodan za izmene i prilagodavanje novim situaci-jama.

• Softverska kriza 1970-ih — zbog lose prakse programiranja softver nijemogao da dostigne mogucnosti hardvera.

• Uzrok: nekontrolisana upotreba GOTO-naredbe.

• Resenje: strukturno programiranje — disciplinovan pristupu programira-nju, bez nekontrolisanih skokova i uz koriscenje samo malog broja naredbiza kontrolu toka programa.

2.3 Strukturna paradigmaStrukturna paradigma

• C. Bohm i G. Jacopini su 1966. g. publikovali naucni rad u kojem sudokazali da se svaki prost program moze izraziti pomocu 3 upravljackestrukture:

– sekvenca (naredba za naredbom),

– selekcija (odluka da li da se izvrsi neka naradba zavisno od tacnostiili netacnosti nekog uslova)

– ponavljanje (ponavljanje bloka koda vracanjem na pocetak sve dokje ispunjen neki uslov).

• Kasnije su usledeli radovi: Dijkstra-e, Knuth-a i E. Ashcroft i Z. Manna. . . u kojima je pokazano da goto naredba nije neophodna.

• Dijkstra je napisao 1968. cuveno pismo "Go To Statement ConsideredHarmful".

13

Page 14: Programske paradigme

Strukturna paradigma

• Strukturno programiranje nastaje kao nastojanje da zapis programa budepregledniji.

• Akcenat je na programskim strukturama u kojima svaka komanda imajednu ulaznu i jednu izlaznu tacku.

• Cilj je da se proceduralni jezik vise prilagodi coveku.

• Minimalan skup upravljackih struktura cine:

komanda :: =identifikator := izraz | (naredba dodele)komanda ; komanda | (sekvenca)IF log_izraz THEN-grana

ELSE-grana | (selekcija)WHILE log_izraz DO naredba | (iteracija)

Strukturna paradigma

• Zbog preglednijeg zapisa programa, najcesce se uvode dodatne upravljackestrukture, kao sto su:

CASE (switch)FORREPET-UNTIL (do-while)

• Kontrolne naredbe su sintaksicke strukture preko kojih se definise redosledu kojem se vrsi dodeljivanje.

• Sve kontrolne strukture mogu da se svrstaju u 3 kategorije: sekvencijanakompozicija, alternacija (selekcija) i iteracija.

Strukturna paradigma

• Programi zapisani pomocu ovih upravljackih struktura su pregledniji, ja-sniji i cesto kraci.

#include <stdio.h>main(){float x,y;int n;

n=1;l20: scanf("%f", &x);

y=x;if(x<0) goto l30;y=-x;

l30: printf("y = %f\n",y);n=n+1;if (n!=5) goto l20;

}

#include <stdio.h>main(){float x,y;int n;printf("Unesite 4 realne vrednosti\n");for(n=1; n<5; n++){

scanf("%f", &x);y=x;if(x>=0) y=-x;printf("y = %f\n",y);

}}

14

Page 15: Programske paradigme

Strukturna paradigmaprogram idina;

label 20, 30;var x,y:real;

n:integer;begin

n:=1;20: readln(x);

y:=x;if x<0 then goto 30;y:=-x;

30: writeln(y);n:=n+1;if n<>5 then goto 20

end.

program bezIdina;var x,y:real;

n:integer;begin

writeln(’Unesite 4 realne vrednosti’);for n:=1 to 4 dobegin

readln(x);y:=x;if x>=0 then y:=-x;writeln(’y = ’, y);

endend.

2.4 Proceduralna paradigmaProceduralna paradigma

• Apstrakcija kontrole toka — podrutine (funkcije, procedure, metodi, ko-rutine, potprogrami).

• Podrutine predstavljaju apstrakciju niza naredbi.

• Poziv podrutine je poziv na apstarkciju, priblizava programiranje dekla-rativnosti.

• Podrutina izvrsava svoje operacije u ime svog pozivaoca.

• Nastanak potprograma prethodi strukturnom programiranju.

Proceduralna paradigma+strukturno programiranje

• Svaki podrutina ima svoje lokalne podatke i algoritam.

• Svaki podrutina je nezavisna od ostalih.

• Razvija se mehanizam prenosa parametara.

• Nastaju korisnicki definisani tipovi.

• Uvodi se vidljivost i doseg podataka.

• Podrzava se ugnjezdavanje podrutina.

• Podrutine su osnovni blokovi za podrzavanje modularnog programiranja.

Proceduralna paradigma

• U imperativnim programskim jezicima, podrutine su najcesce procedure ifunkcije.

• Procedure — nemaju povratnu vrednost.

• Funkcije — imaju povratnu vrednost.

• Jednim imenom se procedure i funkcije nazivaju potprogrami.

• Sintaksa potprograma je obicno jednostavna:

15

Page 16: Programske paradigme

Definicija potprograma:ime( parametar-lista ) { telo }

Poziv potprograma:ime( argument-lista )

Potprogrami

• Parametri se cesto nazivaju formalni parametri, a argumenti, aktuelniparametri.

• Sintaksa parametar-liste, tj. argument-liste je razlicita u razlicitim pro-gramskim jezicima (obicno lako shvatljiva).

• Mogu se razlikovati

– vrednosni parametri (in-parametri)

– promenljivi parametri (out-parametri)

Prenos parametara

• Vrednosni parametri sluze samo za unos vrednosti u proceduru, mogu semenjati u proceduri, ali ne mogu izneti izmenjenie vrednosti.

• Promenljivi parametri mogu uneti vrednost u proceduru, mogu biti me-njani u proceduri i (najvaznije) zadrzavaju izmenjene vrednosti po izlaskuiz procedure.

• Kao stvarni argumenti vrednosnih parametara obicno se pojavljuju izrazi,a kao stvarni argumenti promenljivih parametra obicno su promenljive ilipokazivaci.

Prenos parametra — preciznije

• Neki jezici imaju samo jedan nacin prenosa parametara, dok neki dozvo-ljavaju vise nacina.

• Osnovne vrste prenosa parametara:

1. Prenos po vrednosti — argument se evaluira i kopira njegova vred-nost u podrutinu (podrazumevan prenos u jezicima nakon Algol 60,Pascal, Delphi, Simula, Modula, Oberon, Ada, C, C++...)

2. Prenos po referenci — prenosi se referenca na argument, obicno adresa(moguce odabrati u svim prethodno navedenim jezicima)

Prenos parametara po vrednosti

var m: integer procedure prva (m: integer);.... ....

m:= 2; m:= m+1;prva (m); ....

....

16

Page 17: Programske paradigme

Prenos parametara po referenci

var m: integer procedure prva (var m: integer);.... ....

m:= 2; m:= m+1;prva (m); ....

....

Prenos parametra — preciznijeDodatni nacini prenosa parametara:

3. Prenos po rezultatu — na izlasku iz podrutine, vrednost parametra sekopira (prenosi) pozivajucoj rutini (Ada OUT parametri)

4. Prenos po vrednosti i rezultatu — vrednost parametra se kopira na ulaskui na izlasku iz podrutine (Algol)

5. Prenos po imenu — kao u makroima, parametri se zamenjuju sa neevalui-ranim izrazima (Algol, Scala)

6. Prenos po konstanoj vrednosti — isto kao kod prenosa po vrednosti, osimsto se parametar tretira kao konstanta (npr kvalifikator const u C i C++)

Organizacija memorije

• U vecini jezika, prostor potreban za smestanje podataka potrebnih zaizvrsavanje potprograma (promenljive, argumenti i slicno) se rezervise nasteku.

17

Page 18: Programske paradigme

• Uvodenje steka je imalo za ideju ustedu memorije — u memoriji su podacisamo za trenutno aktivne potprograme.

• Alternativa bi bila da se za svaki potprogram unapred rezervise potrebnamemorija. Ovo onemogucava koriscenje rekurzija i zauzima vise prostoranego sto je potrebno.

• S druge strane, kreiranje stek okvira povecava cenu poziva potprograma.

Stek okviri

Sadrzaj stek okvira

Korutine

• Zavrsetak rada potprograma vraca nas u prethodni stek okvir (stek okvirpozivaoca potprograma).

• Pored procedura i funkcija, u imperativnim jezicima mogu se javiti i drugevrste potprograma (upravljackih struktura), kao sto su korutine.

• Korutine omogucavaju „preskakanje” stek okvira i povratak u odredenistek okvir koji nije nuzno stek okvir pozivaoca potprograma.

18

Page 19: Programske paradigme

Korutine

• Upotreba moze da bude za brz i efikasan izlaz iz duboke rekurzije.

• Slicni mehanizmi koriste se u npr objektno orijentisanim programskimjezicima za rad sa izuzecima.

• U C-u korutine nisu podrzane direktno u jeziku, vec se mogu koristitifunkcije setjmp i longjmp (iz zaglavlja setjmp.h). Ispravna upotreba ko-rutina zahteva precizno poznavanje njihovog mehanizama funkcionisanja.

2.5 Modularna paradigmaModularna paradigma — rane 1970.

• Modularnost podrazumeva razbijanje veceg problema na nezavisne celine.

• Celine sadrze definicije srodnih podataka i funkcija.

• Cesto se celine (moduli) smestaju u posebne datoteke, cime se postizelakse odrzavanje kompleksnih sistema.

• Moduli mogu medusobno da komuniciraju, kroz svoje interfejse.

• Modularnost — skrivanje podataka, razdvajanje poslova

Modularna paradigma

• Moduli omogucavaju visestruku upotrebu jednom napisanog koda.

• Moduli se zasebno prevode i kasnije povezuju u jedinstven program.

• Moduli u imperativnim jezicima cesto se nazivaju biblioteke.

• Modularnost je sada prisutna u vecini programskih jezika.

2.6 Nacin resavanja problemaKreiranje programa od „Od opsteg ka posebnom”

• Kreiranje programa proceduralne paradigme zasniva se na principu „Odopsteg ka posebnom” (odozgo-nadole, od vrha ka dnu (Top-down concept))

• Polazi se od postavljenog zadataka kao opsteg

• Zatim se uocavaju jednostavnije celine i zadatak dekomponuje na jedno-stavnije delove (koji se izrazavaju procedurama i funkcijama).

• Ukoliko su ti delovi i dalje kompleksni razbijaju se na jos jednostavnijedelove (takode pomocu procedura i funkcija) dok se ne dodje do nivoanaredbi.

• Funkcionalna dekompozicija problema

19

Page 20: Programske paradigme

Kreiranje programa od „Od opsteg ka posebnom”

Primer

• Napisati program koji izracunava prosecno rastojanje izmedu zadatih tacakau ravni.

• Opste resenje: ucitati tacke iz datoteke, izracunati prosecno rastojanje,odstampati prosecno rastojanje.

• Sledeci korak: profiniti svaki od prethodnih koraka, posebno izracunavanjeprosecnog rastojanja.

• Pronalazenje prosecnog rastojanja: sabirati rastojanja izmedu svake dvetacke, podeliti rezultat sa ukupnim brojem parova tacaka.

• Obezbediti funkciju rastojanje

• ...

2.7 Specificnosti imperativne paradigmePropratni (bocni) efekti

• Prilikom izracunavanja vrednosti izraza, kod imeprativnih programa cestisu propratni (bocni) efekti.

• Propratni (bocni) efekti odnose se na situacije kada se prilikom izracunavanjanekog izraza istovremeno menja i stanje memorije (na primer, vrednost iz-raza se upisuje u neku memorijsku lokaciju)

• Oznake promenljivih su istovremeno i oznake memorijskih lokacija pa seu naredbama mesaju oznake lokacija i njihovih vrednosti, u zavisnosti odoperatora koji se nad promenljivom primeni.

Propratni (bocni) efekti

• U naredbi x = x + 1; sa desne strane, koristi se vrednost sa lokacije x,dok se sa leve strane koristi sama lokacija na koju se upisuje sracunatavrednost.

• Propratni (bocni) efekti mogu da budu prisutni u mnogim naredbama(npr. u C-u naredbe ++, –, +=, -=, *=, ...).

• Propratni (bocni) efekti mogu znacajno da otezaju razumevanje impera-tivnih programa.

20

Page 21: Programske paradigme

Propratni (bocni) efekti

• Propratni (bocni) efekti odnose se i na izmenu globalnog stanja memorijenakon izvrsavanja neke funkcije (u tom slucaju se kaze da funkcija imapropratne (bocne) efekte).

• Ova vrsta propratnih (bocnih) efekata je posebno nezgodna za razumeva-nje rada programa

• Ukoliko funkcija sqrt nema propratnih efekata,

z = f(sqrt(2), sqrt(2));

onda prethodni kod mozemo transformisati na sledeci nacin:

s = sqrt(2); z = f(s, s);

Medutim, za sledeci poziv funkcije f

z = f(getchar(), getchar());

ne mozemo da ponovimo isti postupak!

Propratni (bocni) efekti

• Ukoliko funkcija ima propratne (bocne) efekte, onda to moze da dovededo raznih nelogicnosti

• Na primer, izrazi: 2*fun() fun()+fun() algebarski imaju iste vrednosti,ali u programskom jeziku ne moraju.

Primeri bocnih efekata#include <stdio.h>

int a = 3;int fun(int);int main() {

int f, g;f= a+fun(1)+a;g= a+fun(1)+a;printf("%d %d\n ", f, g);

}

int fun(int b) {a+=5;return a+b;

}

Program p;var z:integer;Function f(Var x:integer):boolean;begin

x:= x+1;f := x > 0

end;begin

z := -1;writeln(f(z), ’ ’, f(z))

end.

2.8 Pitanja i literaturaPitanja

• Pod kakvim uticajem je nastala imperativna paradigma?

• Sta je stanje programa?

• Koje su faze razvoja imperativne paradigme?

• Koje su karakteristike operacione paradigme?

21

Page 22: Programske paradigme

Pitanja

• Koji je minimalni skup naredbi operaciona pardigme?

• Koje su karakteristike strukturne paradigme?

• Koji je minimalni skup naredbi strukturne pardigme?

• Koje su karakteristike proceduralne paradigme?

Pitanja

• Koje vrste prenosa parametara postoje?

• Kako je u memoriji orgranizovano izvrsavanje potprograma?

• Sta su korutine?

• Koje su karakteristike modularne paradigme?

Pitanja

• Sta omogucava modularna paradigma?

• Kako se resavaju problemi u okviru proceduralne paradigme?

• Sta su bocni efekti?

• Do cega dovode bocni efekti?

Literatura

• Programming Language Pragmatics, Third Edition, 2009 by Michael L.Scott

• Deo materijala je preuzet od prof Dusana Tosica, iz istoimenog kursa.

22