Download as pdf or txt
Download as pdf or txt
You are on page 1of 49

LOGO

Add your company slogan

Uvod u programiranje
Glava 1 Uvod
PMF Novi Sad
Zimski semestar 2013 v0.3 Departman za matematiku i informatiku
Slajd 2 od 49
Slajd 3 od 49
U ovom poglavlju kratko emo se upoznati sa razvojem programskih jezika
i kriterijumima za njihovu podelu.

Definisaemo i pojam strukturiranog programiranja, koje je, uz objektno-


orijentisano programiranje, najvie korien stil programiranja.

Pri kraju ovog poglavlja, kratko emo se upoznati sa osobinama Module-2 -


programskog jezika kojeg emo izuavati na ovom kursu.

Slajd 4 od 49
Slajd 5 od 49
Pod (raunarskim) programiranjem obino se podrazumeva ovekova
aktivnost (odnosno, aktivnost programera) usmerena ka reenju nekog
konkretnog problema na raunaru.

Problem se obino reava konstrukcijom algoritma za reenje problema, a


algoritam se zapisuje posredstvom programskog jezika.

Po jednoj od najoptijih definicija programskog jezika njegova uloga je da


obezbedi konstrukcije (i naine) za organizovanje izraunavanja na
raunaru.

Organizovano izraunavanje obino nazivamo programom izraunavanja


(ili samo programom).

Slajd 6 od 49
Po drugoj moguoj definiciji, programski jezik predstavlja sredstvo
namenjeno za komunikaciju izmeu oveka i raunara, a slui za opis
algoritma na nain razumljiv raunaru (direktno, ili posle niza
transformacija).

Program tada predstavlja jedan nain zapisa algoritma reenja postavljenog


problema.

Kriterijumi za ocenu programskih jezika mogu biti razni, a vrlo esto su


protivreni.
Sa aspekta programera
programski jezik treba da je jednostavan za uenje i lak za korienje.
Sa aspekta raunara
programski jezik treba da je jednostavan za prevoenje na mainski jezik i da dobro
koristi mogunosti raunara.
Ukratko, programski jezik treba da omogui dobro organizovanje
izraunavanja, tj. pisanje dobrih programa.
Slajd 7 od 49
Definicija dobrog programa se menjala tokom godina razvoja programskih
jezika.
U pionirskim danima programiranja
dobar program je bio onaj koji se brzo izvravao na raunaru i zauzimao malo
memorije.
U dananje vreme
dobrim programom se pre svega smatra program koji je lak za itanje, razumevanje i
odravanje od strane oveka (programera) i koji se lako moe ponovo iskoristiti
za reavanje drugih, slinih problema.
Izmeu ove dve definicije programiranje je doivelo softversku krizu.

U meuvremenu je takoe postalo jasno da se programiranje sastoji od dve


aktivnosti: razvoja i odravanja programa, pri emu se na odravanje
programa utroi oko 90% vremena od ukupnog ivota programa.

Slajd 8 od 49
Bez itkih i jasnih programa i programskih jezika tako definisanih da se u
procesu programiranja otkrije to vie greaka to je mogue ranije (jo
tokom razvoja programa), napredak u oblasti programiranja (i primene
raunara uopte) nije mogu.

Danas se organizovanjem itavog procesa oko razvoja, testiranja i


odravanja programa, kao i kreiranjem odgovarajuih pomonih alatki za
podrku itavom tom procesu, bavi posebna disciplina raunarskih nauka:
softversko inenjerstvo (engl. software engineering).

Do kraja ovog odeljka prikazaemo kratko evoluciju programskih jezika.

Slajd 9 od 49
Slajd 10 od 49
Najvei broj dananjih raunara zasnovan je na takozvanoj Fon Nojmanovoj
arhitekturi raunara (von Neumann).

Po toj arhitekturi raunar se (grubo govorei) sastoji od dva dela:


centralne jedinice (procesora) i
memorije.

Centralna jedinica se dalje sastoji od:


kontrolne jedinice,
aritmetiko-logike jedinice i
ulazno-izlazne jedinice.

Sve navedene komponente se i danas nalaze u raunarima ali su postale


autonomnije: ulazno-izlazne jedinice i aritmetiko-logika jedinica su
postale nezavisne u odnosu na centralni procesor.

Slajd 11 od 49
Mainski jezik raunara je skup binarno kodiranih komandi (instrukcija)
raunara na koje ovaj direktno odgovara, odnosno koje neposredno razume i
izvrava.

Komande poreane u neki redosled nazivaju se mainskim programom. I


program i podaci sa kojima program radi se nalaze u memoriji raunara.

Komande se mogu podeliti po grupama:


aritmetike,
za pristup memoriji (pisanje i itanje),
za uticaj na tok izvravanja programa, itd.

Komanda mainskog jezika se zapisuje (i zadaje) nizom bitova (nula i


jedinica).

Slajd 12 od 49
Primer. Jedan kratak (hipotetiki) mainski program (od tri komande).
00000100111100111010001010
00000101000100100111100010
00101100101010111111001111
Programiranje u mainskim jezicima je bilo teko, programi su bili neitki i
greke su se lako pravile i jo tee pronalazile.

Mainski programi su pisani samo za jedan, odreeni tip raunara nisu se


mogli izvravati na drugim raunarima.

Slajd 13 od 49
Slajd 14 od 49
Prvi korak u otklanjanju loih strana programiranja u mainskim jezicima bili
su asemblerski jezici, koji su nastali automatizacijom svakodnevne prakse
tadanjih programera.

Oni su programe pisali koristei se simbolima za komande i imenima za


memorijske lokacije, da bi tek kasnije te simbole i imena pretvarali u prave
mainske komande i memorijske adrese (nizove nula i jedinica).

Kada je ta aktivnost automatizovana, nastali su asemblerski jezici.

U asemblerskim jezicima (engl. assembly language) mainske komande i


njihovi parametri zapisuju se simbolima (imenima).

Poseban program (takozvani asembler, engl. assembler) prevodi ove simbole


i imena u odgovarajue mainske komande.

Slajd 15 od 49
Primer. Jednostavni (hipotetiki) asemblerski program (koji bi odgovarao naredbi
dodeljivanja C := A + B). Ovde su A, B i C imena za memorijske lokacije.
LOAD A
ADD B
STORE C
U poetku je svakoj asemblerskoj komandi odgovarala tano jedna mainska
komanda.

Kasnije je jednoj asemblerskoj komandi odgovaralo vie mainskih komandi, a


omogueno je i izdvajanje delova koda (koji se esto ponavlja) u potprograme
makro-asemblerski jezici.

Time je zapoeo proces apstrakcije u programskim jezicima sakrivanje mainske


arhitekture iza konstrukcija programskog jezika.

Asemblerski programi se jo uvek ne mogu prenositi sa raunara na raunar, a na


traenje i ispravljanje greaka pri razvoju programa otpada 25 do 50% vremena.

Slajd 16 od 49
Slajd 17 od 49
Dobre osobine apstrakcije neminovno dovode do nastanka viih programskih
jezika sredinom ezdesetih godina (FORTRAN-a, na primer).

Vii programski jezici poseduju visoki nivo apstrakcije i potpuno su


nezavisni od raunara.
Primer. Primer naredbe vieg programskog jezika.
d := a*b - c
Programi koji prevode vii programski jezik u mainski jezik konkretnog
raunara nazivaju se prevodiocima (kompajlerima, engl. compiler).

Vii programski jezici i programi pisani u njima nezavisni su od raunara na


kome e se izvravati.

Da bi se programi pisani na nekom viem programskom jeziku izvravali na


razliitim raunarima, na svakom od njih mora biti realizovan prevodilac za
taj vii programski jezik.

Slajd 18 od 49
Upravo je ovo period kada se javlja softverska kriza.

Zahvaljujui viim programskim jezicima, piu se dui i kompleksniji


programi. Znatno ee se programira i za korisnike koji nisu iz najue
raunarske struke.

Vrlo esto se programira ad hok, bez odreene metodologije, a na slian


nain se realizuju i prevodioci za vie programske jezike.

Rezultat su bili dugi i neitki programi, puni greaka koje su se teko


pronalazile i otklanjale.

Poinje period reavanja softverske krize usavravanjem programskih jezika


i razvijanjem metodologije programiranja.

Slajd 19 od 49
Na osnovu analize estih greaka zakljuuje se da puno greaka nastaje
dozvoljavanjem skokova (goto naredba) i korienjem globalnih
promenljivih.

Da bi se to prevazilo u veini programskih jezika se pojavljuju konstrukcije


koje omguavaju strukturirano programiranje i apstrakciju podataka.

Javljaju se razliiti stilovi i metodologije programiranja.

Slajd 20 od 49
Slajd 21 od 49
Danas se smatra (na osnovu iskustva mnogih programera irom sveta i
dosadanjeg razvoja programskih jezika) da dobar programski jezika treba da:

Omogui apstrakciju sakrivanje to god je mogue vie


nepotrebnih detalja, ostavljajui tako programeru da razmilja na viskom
nivou apstrakcije o problemu koji reava, zanemarujui detalje koji bi ga
u tom poslu ometali.

Omogui jezike konstrukcije i koncepte uz pomo kojih prevodilac


programskog jezika moe da otkrije tokom prevoenja to je mogue
vie greaka koje bi se inae javile tek tokom izvravanja programa.

Prvi od gornja dva zahteva je bitan, jer se smatra da ovek (programer) ne moe
istovremeno da vodi rauna o mnogo stvari.

Zbog toga ga treba rasteretiti i omoguiti mu da ne razmilja o realizaciji struktura


podataka i operacija onda kada razmilja o reenju konkretnog problema, i obrnuto.

Slajd 22 od 49
Nepotrebni detalji se najee sakrivaju na sledee naine:
Apstrakcijom podataka
Raunar podrava mali skup tipova podataka. Programski jezik treba da omogui
definisanje struktura podataka (slogove, skupove...) i kreiranje novih tipova
podataka. Realizacija treba da ostane sakrivena.
Apstrakcijom upravljanja (kontrole)
Pakovanjem niza manjih koraka u vee i zatvorene celine i njihovo korienje bez
uvida u njihovu realizaciju.
Apstrakcijom naina izvravanja programa
Na primer, u logikom stilu programiranja program se sastoji od skupa pravila i
injenica o problemu koji se reava. Prevodilac ili interpretator logikog
programskog jezika vodi rauna o redosledu koraka na osnovu skupa pravila koga je
zadao programer.

Slajd 23 od 49
Rekli smo da je bitno da programski jezik bude definisan tako da prevodiocu
omoguava da bude strog da ve tokom prevoenja otkrije to vie
greaka koje bi se javile tek tokom izvravanja programa.

Kao primer jedne takve konstrukcije slue tipovi podataka koje podravaju
gotovo svi moderni programski jezici.

Svakoj promenljivoj koja se koristi u programu obavezno se pridruuje tip


podataka, kojim se odreuje skup vrednosti koje promenljiva moe da ima i
skup operacija u kojim promenljiva moe da uestvuje.

Prevodilac tada moe da otkrije da li promenljiva uestvuje u ispravnim


aktivnostima ili ne.

Slajd 24 od 49
Slajd 25 od 49
Danas postoji vie hiljada programskih jezika koji se mogu podeliti po vie
razliitih kriterijuma.

Ovde emo pomenuti samo neke od kriterijuma.

Hronologija

Po hronologiji jezici se, po jednoj od moguih podela, mogu podeliti na


generacije prema vremenu nastanka na jezike:

prve generacije (1954-58): FORTRAN, Algol 58, Flowmatic...


druge generacije (1959-69): FORTRAN II, Algol 60, COBOL 61,
LISP...
tree generacije (1962-80): Pascal, CLU, CSP, Ada, Smalltalk, PL/I,
Simula, PROLOG...
etvrte generacije, u koje spadaju jezici orijentisani korisniku: upitni
jezici za pretraivanje baza podataka (SQL), specijalizovani jezici koji
su deo nekih veih programskih paketa, skript jezici.
Slajd 26 od 49
Mainska zavisnost

Po stepenu zavisnosti programskog jezika od raunara programski jezici se mogu


podeliti na mainski nezavisne (ili vie) programske jezike i mainski zavisne jezike
(gde spadaju mainski i asemblerski jezici).

Oblast primene

Po oblasti primene programske jezike moemo podeliti na jezike:

opte namene (Modula-2, Modula-3, C/C++, Ada, PL/I),


za primenu u matematici i tehnici (Pascal, FORTRAN, Modula-2, C/C++),
za poslovne obrade (COBOL, RPG, PL/I),
za obuku u programiranju (Pascal, Modula-2, BASIC, LISP...),
za primenu u vetakoj inteligenciji (LISP, PROLOG...).

Slajd 27 od 49
Apstrakcija naina izvravanja programa

Po tome da li jezik podrava apstrakciju naina izraunavanja ili ne, jezici se


mogu podeliti na proceduralne i deklarativne.

vU osnovi proceduralnih jezika je naredba, a programi se sastoje od precizno


navedenih koraka kojima se reava problem.

vMeu naredbama je od naroitog znaaja naredba dodeljivanja, kojom se


pristupa memoriji i menja sadraj memorijskih lokacija.

vProceduralno programiranje se dalje moe podeliti na sekvencijalno i


konkurentno po tome da li se programira kao da u raunaru postoji jedan ili vie
procesora. (Modula-2 podrava oba ova stila programiranja.)

Slajd 28 od 49
Apstrakcija naina izvravanja programa

Po tome da li jezik podrava apstrakciju naina izraunavanja ili ne, jezici se


mogu podeliti na proceduralne i deklarativne.

vZa razliku od proceduralnih programa, programi deklarativnih programskih


jezika (deklarativni programi) sastoje se od opisa problema, a ne od recepta za
njegovo reavanje.

vNa osnovu opisa problema, prevodilac deklarativnog programskog jezika


generie recept.

vVe pomenuti logiki programski jezici omoguavaju opis problema


relacijama (injenicama i pravilima), a funkcionalni programski jezici
omoguavaju opis problema izrazima i funkcijama.

Slajd 29 od 49
Apstrakcija podataka i upravljanja

Po tome kako jezici podravaju organizaciju i apstrakciju podataka i


upravljanja (kontrole), oni mogu biti:

strukturirani modularni i objektno-orijentisani

(ili neka kombinacija ova tri).

Slajd 30 od 49
Apstrakcija podataka i upravljanja

Po tome kako jezici podravaju organizaciju i apstrakciju podataka i


upravljanja (kontrole), oni mogu biti:

strukturirani modularni i objektno-orijentisani .

vProgramski jezici koji podravaju strukturirani stil programiranja


omoguavaju pravljenje programa koji se lake piu, razumljiviji su i itljiviji od
nestrukturiranih programa.

vStrukturirano programiranje je prvi korak u apstrakciji kontrole ono


omoguava jasne, pregledne i lokalizovane kontrolne strukture bez skokova.
(Danas veina programskih jezika podrava strukturirani stil programiranja.)

Slajd 31 od 49
Apstrakcija podataka i upravljanja

Po tome kako jezici podravaju organizaciju i apstrakciju podataka i


upravljanja (kontrole), oni mogu biti:

strukturirani modularni i objektno-orijentisani .

vModularni programski jezici omoguavaju razbijanje programa na vie


relativno nezavisnih celina koji se mogu zasebno programirati i prevoditi.

vModularno programiranje omoguava apstrakciju podataka i kontrole


sakrivajui realizaciju, a ostavljajui vidljivim samo imena (struktura)
podataka i njihovih operacija.

Slajd 32 od 49
Apstrakcija podataka i upravljanja

Po tome kako jezici podravaju organizaciju i apstrakciju podataka i


upravljanja (kontrole), oni mogu biti:

strukturirani modularni i objektno-orijentisani .

vObjektno-orijentisani jezici (ili jezici koji podravaju objektno-orijentisano


programiranje) za sada omoguavaju najveu apstrakciju podataka i kontrole.

vOni dozvoljavaju pakovanje i podataka i kontrole (procedura) u istu


strukturu i nasleivanje ponaanja tih struktura, bez uvida u nain njihove
realizacije.

Slajd 33 od 49
Slajd 34 od 49
Jedan od prvih i najpopularnijih programskih jezika bio je Pascal, koji je
dizajnirao i realizovao profesor Niklaus Virt (Niklaus Wirth) 1970. godine na
Eidogenssische Technische Hochschule (ETH), Cirih.

Pascal je doneo strukturu jezika koja je jednostavna za uenje i za dobro


strukturiranje algoritama i podataka.

Od svih stilova programiranja pomenutih u prethodnom poglavlju Pascal


podrava samo strukturirano programiranje, to je vremenom postalo
nedovoljno.

Najvei nedostaci su mu bili to to nije podravao modularno programiranje,


to nije dozvoljavao programiranje niskog nivoa i imao je vrlo lo pristup
funkcijama operativnog sistema raunara.

Slajd 35 od 49
Virt je 1975. godine razvio modularni eksperimentalni jezik Modula.

Kao posledica ovog rada i rezultata eksperimentalnog rada na jeziku Mesa, Virt je
1977. godine zapoeo rad na novom programskom jeziku Modula-2.

Virt je u Modulu-2 ukljuio sva dobra svojstva Pascal-a i dodao mogunost


modularnog programiranja, konkurentnog programiranja i programiranja niskog
nivoa (za sistemsko programiranje).

Modula-2 je dakle proceduralni programski jezik (po kriterijumu apstrakcije naina


izraunavanja) koji podrava i sekvencijalno i konkurentno programiranje.

Po kriterijumu apstrakcije kontrole i podataka, Modula-2 podrava strukturirani i


modularni stil programiranja.

Standardizivana (ISO) verzija Module-2 podrava i objektno-orijentisano


programiranje.

Modula-2 je vii (mainski nezavisan) programski jezik.

Slajd 36 od 49
Slajd 37 od 49
Strukturirano programiranje je stil programiranja koji ima svoju jasnu
definiciju i odrednice.

Meutim, esto se ovaj pojam mea sa nekim njemu slinim pojmovima, kao
to su realizacija programa od gore na dole ili sa globalnom koncepcijom
reenja nekog problema i upravljanjem toka programiranja.

Strukturirani program je program koji se sastoji iz blokova koji su odabrani


iz unapred datog, fiksnog skupa osnovnih blokova.

Slajd 38 od 49
N1 N2 ... Nn

a) Niz naredbi (sekvenca)

I DA
NE N
NE I
N2 N1 DA
DA
N I
NE
b) Grananje c) Petlja sa d) Petlja sa
preduslovom postuslovom

Slajd 39 od 49
I

N1 N2 ... Nn

e) Alternativa (selekcija)

Slajd 40 od 49
Osnovni blok je prost blok koji ne sadri proste podblokove sa vie od jednog
elementa (vora).

Prost blok je blok za koji vai da:


ima jedan ulaz i jedan izlaz iz bloka,
za svaku taku u bloku postoji put od ulaza do izlaza koji prolazi kroz
tu taku.

Korienjem samo blokova iz unapred zadatog skupa blokova uvodi se


disciplina u postupak reavanja problema i programiranja i ini program
jasnijim, itljivijim, bez improvizacija i sa manjim brojem greaka.

Osnovni blokovi strukturiranog programiranja esto se zovu kontrolnim


strukturama strukturiranog programiranja, odnosno programskog jezika koji
podrava strukturirano programiranje.

Slajd 41 od 49
Slajd 42 od 49
Mnogi poetnici u programiranju ne prave razliku izmeu programskog
jezika i njegove realizacije na konkretnom raunaru.

Programski jezik je skup pravila (dogovor), koji postoji nezavisno od


raunara i nezavisno od toga da li je realizovan za neki raunar ili ne.

Realizacije programskog jezika za neki raunar obavezno se sastoji od


prevodioca ili interpretatora programskog jezika za taj raunar, a moe da
sadri i jo neke mogunosti.

Realizacija programskog jezika moe da maksimalno iskoristi osobine


programskog jezika na datom raunaru, ali ne moe da ih pobolja.

Programski jezik dakle treba birati zbog dobrih osobina i mogunosti jezika, a
ne toliko zbog dobre realizacije.

Slajd 43 od 49
Ipak, treba napomenuti i da pojedine realizacije programskog jezika ponekad
menjaju i definiciju jezika, pogotovo ako programski jezik nije
standardizovan.

esto i sama definicija jezika nije dovoljno precizna tako da omoguuje


razliita tumaenja, a vrlo esto se dodaju nove konstrukcije da bi se bolje
iskoristile osobine raunara na kojoj se jezik realizuje.

Ako je mogue, treba izbegavati korienje nestandardnih osobina


programskog jezika, jer program tako nee biti prenosiv na neku drugu
realizaciju programskog jezika (ako se to smatra bitnim).

Slajd 44 od 49
Definicija programskog jezika se sastoji od sintakse i semantike.

Sintaksa jezika je skup pravila za pravljenje ispravnih programa.

Sintaksno ispravni program, meutim, nije dovoljno dobro definisan program


potrebno je da znamo i njegovo znaenje.

Semantika programskog jezika je skup pravila kojim se odreuje znaenje


programa nekog programskog jezika.

Slajd 45 od 49
Na primer, naredba:
c := izracunaj(a, b);
je sintaksno ispravna naredba nekog programa, ali bez definisanog znaenja nije
mogue tano odrediti kakav je efekat ove naredbe.

Jedino se zna da se poziva funkcijska procedura izracunaj sa parametrima a i


b, ali se ne zna da li je funkcijska procedura izracunaj uopte definisana,
da li je dobro pozvana (da li se stvarni parametri slau po broju i tipu sa
formalnim) i konano, ako je sve ovo dobro, ta uopte izraunava procedura
izracunaj?

Slajd 46 od 49
Sintaksu pojedinih konstrukcija Module-2 opisivaemo takozvanim
sintaksnim dijagramima.

Semantiku pojedinih konstrukcija Module-2 opisivaemo reima i primerima.

Sintaksnim dijagramom se grafiki opisuju ispravne konstrukcije nekog


programskog jezika.

Jedna konstrukcija je sintaksno ispravna ako i samo ako moe da se dobije


kretanjem kroz graf u pravcu strelica.

Slajd 47 od 49
U sintaksnom dijagramu emo unutar krunica i elipsi navoditi rezervisane
rei i standardna imena programskog jezika, dok emo unutar pravougaonika
navoditi imena za ostale konstrukcije jezika.

Svi pojmovi navedeni unutar pravougaonika moraju biti definisani nekim


sintaksnim dijagramom ili moraju biti intuitivno jasni.
Primer. Sintaksni dijagram sa slike 1.2 opisuje sledee ispravne konstrukcije
programskog jezika: a1, a, b1aab, itd., dok sledee konstrukcije (po gornjoj
definiciji) nisu ispravne: 1, !ab ...

slovo

cifra
slovo

1.2 Ime (identifikator)


Slajd 48 od 49
LOGO

Add your company slogan

PMF Novi Sad


PPTX: Teodor Najdan Trifunov 287/09 Departman za matematiku i informatiku

You might also like