You are on page 1of 122

Osnove programiranja

Dr Milan Popovi, soba 214, e-mail: milan.popovic@bbs.edu.yu


Konsultacije: Ponedeljak 11:30 13:00, Utorak 11:00 13:00

1. UVOD

O emu se radi u ovom predmetu


ta je cilj ovog predmeta
Kakvo je predznanje potrebno
ta vam je potrebno za ovaj predmet
ta ete saznati u ovom predmetu
Koliko traju predavanja
ta je sadraj ovog predmeta
Uputstvo za uenje

O emu se radi u ovom predmetu?


Kompjuterski programi se dizajniraju (projektuju, razvijaju) sa ciljem da se pomou
njih reavaju kompjuterski reivi problemi. Pretraivanje velikih baza podataka,
izraunavanje plata, auriranje medicinskih kartona, samo su neki primeri uobiajene
primene kompjutera (raunara). Postoje i kompjuterski nereivi problemi, ali oni nee
biti predmet naeg razmatranja. Broj kompjuterski reivih problema je beskonaan, a
broj praktinih primena raunara je ogranien samo naom matom, znanjem i
vetinom.
Za sve primene kompjutera postoji jednistven scenario kako se projektuje programski
sistem kojim se kompjuterska mainerija (hardver) stavlja u eljenu funkciju.
Takav scenario se moe izraziti sledeim fazama (koracima):
0.
0.
0.
0.
0.
0.

Originalna ideja o temi, zadatku ili problemu se to preciznije definie


Temeljna analiza teme, zadatka, problema
Projektovanje reenja (sistema)
Implementacija (konstrukcija) reenja (sistema)
Testiranje i verifikacija reenja (sistema)
Odravanje i unapreivanje reenja (sistema)

ta je cilj ovog predmeta?


U ovom predmetu bie prikazane neke metode, alati i tehnike koje se koriste u fazama
3 i 4 gornjeg scenarija, sa posebnim akcentom na projektovanju programa
korienjem proceduralnih jezika tree generacije kao to su Visual Basic, C++, Java.
Ovaj predmet treba da da dobru osnovu za lako savladavanje bilo kog programskog
jezika tree generacije. ak iako student nema nameru da postane profesionalni

programer, u ovom predmentu moze nai neke korisne metode i tehnike koje e
poboljati njegovu optu sposobnost reavanja problema.

Kakvo je predznanje potrebno?


Nije potrebno nikakvo prethodno kompjutersko znanje i iskustvo za uspeno
savladavanje ovog predmeta. Svi koncepti i termini bie objanjeni na pogodan i jasan
nain. Pitanja i vebe koji su deo ovog teksta su od velike koristi za proveru i
utvrivanje usvojenih znanja.

ta vam je potrebno za ovaj predmet?


Za uspeno savladavanje ovog predmeta potrebno je (i dovoljno) da redovno pratite
nastavu, vebe i uradite ono to se od vas zahteva na asovima. Potrebni kompjuteri
su raspoloivi u laboratoriji (ERC-u), a posedovanje vlastitog kompjutera je prednost.
Softverski alati koji e biti korieni za praktine vebe su iz tzv. pablik domena
(public domain), to znai da se mogu slobodno kopirati i/ili daunlodovati (download)
sa Interneta.

ta ete dobiti izuavanjem ovog predmeta?


Pored oigledne koristi od jo jednog poloenog ispita, nakon uspenog zavretka
rada na ovon predmetu student e dobiti:

Dobru osnovu za detaljnije izuavanje programski jezika kao to su C, C++,


C#, Java. Svi ovi jezici se danas intenzivno koriste za razvoj softverskih
sistema.
Dobru osnovu za studiranje drugih predmeta iz oblasti poslovne informatike

Koliko traju predavanje?


Trajanje predavanja predvieno je kroz 15 troasovnih blokova predavanja i
dvoasovnih vebi, to ini ukupno 75 asova nastave. To vreme je dovoljno za
savladavanje ukupnog materijala. Samostalan rad u otprilike istom obimu trebalo bi
da rezultira uspenim zavretkom.

ta je sadraj ovog predmeta?


0. Uvod u predmet
Predstavljanje i naini komunikacije
Plan i program predmeta
Nain polaganja
0. Kompjuteri, programi, programski jezici
Osnovni elementi kompjuterskog sistema: hardver, softver, komunikacije
Kompjuterski programi
Generacije programskih jezika
Model kompjuterskog programa
Podaci i informacije
0. Podaci i informacije

0.

0.

0.
0.

0.

0.

0.
0.

0.

Obrada podataka (auriranje, sortiranje i pretraivanje)


Prenos i prezentacija podataka
Vrste podataka i nain kodiranja
Osnovni tipovi podataka (int, float, boolean)
Strukture podataka (nizovi, liste, stekovi, stabla, grafovi, he tabele)
Interakcija ovek-kompjuter
Interfejsi
Linijski interfejsi
Grafiki interfejsi
Kompleksni interfejsi
Datoteke i baze podataka itanje, pisanje, auriranje
Serijske datoteke
Sekvencijalne datoteke
Indeks-sekvencijalne datoteke
Datoteke sa direktnim pristupom (heing)
Relacione baze podataka
Algoritmi i algoritamske strukture
Pojam algoritma i teorema o programskoj strukturi
Sekvenca, selekcija, iteracija, rekurzija
Razvoj algoritama
Metodologija razvoja algoritama
Naini prikazivanje algoritama:
Opisno prirodnim jezicima
Blok dijagrami
Pseudokod
Nassi-Schnaiderman diajgrami
JSD (Jackson Structured Diagrams) dijagrami
Modularnost i strukturalnost algoritama (programa)
Testiranje algoritama (programa)
Programska okruenja platforme za razvoj i eksploataciju softvera
Operatini sistemi za stand-alone kompjutere i mree
Kompajleri, debageri, linkeri i loderi
Razvojna i run-time okruenja
Open source
Internet programiranje
Objektno orjentisano programiranje
Principi OO programiranja
Apstrakcija, enkapsulacija, nasleivanje, polimorfizam
Klase, objekti, atributi i metode
OO jezici i metodologije
Metode programiranja
Proceduralno, funkcionalno logiko programiranje
Strukturno i modularno programiranje
Upravljanje softverskim projektima
ivotni ciklus programa (softvera)
Metodologije za razvoj softvera
Savremene metode (extremno i programiranje u paru)
Timski rad
Praktina nastava
Laboratorijske vebe na kompjuterima

Seminarski rad: programski projekat

LITERATURA
1. Osnove programiranje, Milan Popovi, BPS 2007
2. .NET Framework Version 2.0 Redistributable Package (x86), Microsoft
Corporation, free download
3. Visual C# 2008 Express Edition, Microsoft Corporation, free download
4. SQL Server 2008 Express Edition, Microsoft Corporation, free download

Uputstvo za uenje
U svakoj lekciji nai ete pitanja kao to su:
2.
2.
2.
2.
2.
2.
2.
2.
2.
2.

definiite ta se podrazumeva pod kompjuterskim programom


definiite ta se podrazumeva pod kompjuterom
ukratko opiite istorijski razvoj kompjuterskih (programskih) jezika
skicirajte jednostavan model kompjuterskog programa i njegovog okruenja
objasnite kako se podaci razlikuju od informacija
definiite termin algoritam
napravite listu karakteristika algoritma
opiite ta je programske sekvenca
opiite if ... then i if ... then ... else konstrukcije
opiite razliku izmeu objekta i klase.

U itavom kursu ima oko 100 takvih pitanja koja su sainjena tako da ih moete lako
obraditi. Taj skup pitanja vrlo reprezentativno prikazije skup znanja koja su vam
potrebna o programitranju u jezicima tree generacije. To su zapravo pitanja koja vam
se mogu postavljati i prilikom intervjua za posao u oblasti razvoja softvera i
informacionih sistema.
Materijal je podeljen u deset tema koje su kompaktne i detaljno obrauju neku od
oblasti programiranja. Predavanja se logino nastavljaju jedna u drugu, tako da se
koncepti razvijaju u prirodnom redosledu. U veini predavanja data su pitanja na koja
treba da odgovorite, kao i vebe koje treba samostalno da uradite. Ova pitanja i vebe
imaju za cilj da testiraju vae napredovanje u uenju, kao i da vam daju priliku da
praktikujete novosteena znanja i vetine. Pitanja i vebe su za vau korist i ako ih
korektno uradite moete biti sigurni da ste ispunili oekivanja i postigli cilj ovog
predmeta.
Provera znanja se realizuje kroz pismeni ispit u trajanju od 2 sata.
Studenti su, takoe, obavezni da urade i jedan seminarski rad - programski projekat.
Na kraju semestra rezultati pismenog ispita, seminarskog rada i aktivnsoti studenata
tokom nastave i vebi rezultiraju konanom ocenom prma sledeoj formuli:
Pismeni ispit 60 poena
Seminarski rad 20 poena
Aktivnost u nastavi 10 poena
Aktivnost na vebama 10 poena

2. Kompjuteri, programi, programski jezici


Poto je cilj ovog predmeta izuavanje kako se projektuju programi jezicima tree
generacije (3GL), moe biti od koristi podseanje na neke opte kompjuterske termine
koji e biti korieni. Na primer, ta emo podrazumevati kad kaemo kompjuter, ta
je kompjuterski program, ta su to generacije programskih jezika?
Nakon izuavanja ove lekcije biete u stanju da:
1.
2.
3.
4.
5.

definiete ta je to kompjuter
definiete ta je to komjuterski program
opiete razvoj kompjuterskih (programskih) jezika
skicirati jednostavan model kompjuterskog programa i njegovog okruenja
objasniti kako se podaci razlikuju od informacija

Osnovni elementi kompjuterskog sistema: hardver, softver, komunikacije


Kompjuteri su, verovatno, najsloenije maine koje je ovek do sada stvorio. Ako bi
hteli da definiemo kompjutre mogli bi smo rei:

Kompjuter ima ulazne i izlazne ureaje.


Akompjuter ima centralnu procesorsku jedinicu (poznatu kao CPU) za
izvravanje aritmetikih i logikih operacija.
Kompjuter ima memoriju za smetanje programa i podataka.
Kompjuter moe da izvrava nizove instrukcija (naredbi, komandi).

Na sledeoj slici prikazana je takozvana osnovna arhitektura kompjuterskog sistema


onako kako je prouavaju hardverski profesionalci.

Slika 2.1 Osnovna arhitektura kompjtera


1

Na slici se uoavaju gore pomenuti delovi kompjutea procesor, memorija, periferni


ureaji kao i spojni putevi (magistrale) koji povezuju delove u jedinstvenu celinu.
Preko magistrala se odvija sva komunikacija meu delovima kompjutera, a magistrale
(ili bus-ovi) slue za prenos podataka, adresa i kontrolnih komandi. Gornja arhitektura
prikazuje takozvani stand-alone kompjuter koji nije povezan sa drugim kompjuterima.
Danas je, meutim, skoro uvek sluaj da je kompjuter na kome radimo u lokalnoj ili
globalnoj (Internet) mrei.
Za potrebe programera i softver inenjera pogodnija je malo uproenija ahitektura,
koja u sebi sadri i mreni deo prikazana koja jeprikazana na sledeoj slici.

INPUTS
Mouse
Keyboard
Microphone
Tablet
Webcam
GPS
HTML
E-mail
Games
HDD
Flash
RAM

OUTPUTS

User

World

Internet

Storage

Display

Movies
Pictures
GUIs

Speakers

Music
Alerts
Speech

Internet

Storage

Games
Web feeds
Peer-to-peer
Save files
Logs
Downloads

Slika 2.2 Programerski pogled na kompjuter


ta je kompjuterski program?
Ako pogledate definiciju koju smo dali za kompjuter, ali obrnutim redosledom poev
od Kompjuter moe da izvrava nizove instrukcija - dobiete definiciju
kompjuterskog programa - to je niz (sekvenca) instrukcija koju CPU interpretira kao
aritmetike ili logike operacije nad podacima iz memorije. Kompjuterski program je
smeten u memoriji i takoe se sastoji od podataka i instrukcija. Ulazno-izlazni
ureaji (I/O) omoguavaju maini da prenosi podatke izmeu nje i spoljnjeg sveta.
Instrukcije i programi zahtevaju neki redosled kojim e ih kompjuter izvravati, a to je
zapravo element za projektovanje. Projektovanjem programa odreujemo koje su
programske instrukcije i kakva struktura podataka je potrebna da bi maina-kompjuter
obavila neki eljeni zadatak. Najznaajnije je to to projektant programa odreuje niz
(sekvencu), tj. redosled kojim e se instrukcije izvravati u cilju uspenog odvijanja i
zavretka programa.

Sada kada imamo jednu jasniju predstavu ta je kompjuter i ta je kompjuterski


program, hajde da pogledamo ta su generacije jezika?
Generacije kompjuterskih jezika
Pojam generacije proistekao je iz razvoja koji je prikazan na sledeoj slici koja
prikazuje razvoj kompjuterskih jezika od 1940-tih godina do danas.

Slika 2.3 Razvoj programskih jezika


Cilj ove slike nije da bude potpuno precizna, ve da da ideju o vremenskim periodima
i razliitim generacijama koje se se pojavljivale i meupovezanost jezika raznih
generacija sa sloenosu problema koji se reavaju primenom kompjutera.
Vertikalna osa predstavlja definiciju problema, tj. pokazuje kako mi projektujemo
(piemo) kompjuterske programe. Na dnu ove skale se nalazi mainski orjentisan
nain definisanja programa. To znai da se kompjuterski program izraava u jeziku
koji je blii maini nego programeru-oveku, kao to smo vi i ja. Na vrhu ove ose je
ljudski orjentisan nain izraavanja programa. To znai da je definicija problema kompjuterski program izraen na nain blii jeziku projektanta-oveka nego jeziku
maine. I to je naravno poeljniji i bolji nain za programiranje.
Maina razume jezik izraen pomou 1 i 0 (binarni kod), na primer:
101011110001010001000101111010010101010
dok ovek vie voli da isti iskaz prikae ovako:
Saberi total iz ove nedelje sa totalom iz prethodne nedelje
Horizontalna osa na slici prikazuje priblino vreme kada se odreena generacija jezika
pojavila i ula u upotrebu.

Imajte na umu da slika prikazuje samo aproksimativno, i da to to su jezici tree


generacije zavreni krajem 80-tih godina prolog veka, to ne znai da oni nisu i danas
u upotrebi. U praksi ne postoje jasne granice upotrebe jezika, pa nije redak sluaj da
se kod nekih obimnijih projekta pojavi vie generacija jezika u istom projektu. Tako
se mogu nai projekti koji u sebi sadre asemblerske programe kombinovane sa
programima tree i etvrte generacije.
Poslednje generacije kompjuterskih jezika omoguavaju projektantima i
programerima da piu programe na jeziku vrlo slinom prirodnom jeziku.
Model kompjuterskog programa
Poto je kompjuterski program niz instrukcija koje obrauju podatke, moemo to
prikazati kroz sledei prosti model:

Input stream

Output stream

Program

Slika 2.4 Program transformie ulaz i generie izlaz


Model pokazuje da program procesira podatke koji dolaze sa ulaza izvora podataka,
a rezultati obrade idu na izlaz. Iako to nije obavezno sluaj, kod veih programa i
programskih sistema ulaz i izlaz podataka su obino van samog programa. Ulaz je
obino neki ulazni ili memorijski ureaj kao to je tastatura, disk, skener, traka, a
izlaz, obino neki izlazni ureaj ili memorija kao sto je ekran, tampa, disk, traka,
crta itd.
Sam program je zapravo niz instrukcija zapisanih u memoriji kompjutera kojim se
precizno odreuje na koji nain e se transformisati ulazni podaci da bi se dobio
eljeni izlaz. No da bi takav pogodan program dospeo u memoriju raunara, potrebno
je da bude najpre sainjen u nekom programskom jeziku koji je razumljiv za ovekaprogramera a potom preveden na jezik razumljiv procesoru kompjutera. Taj proces
stvaranja novih programa i njihovo prevoenje ra kompjuterski jezik jeste glavni
predmet naeg razmatranja.

Podaci i informacije
Poslednja tema u ovom delu je kratko objanjenje termina podatak i informacija.
Ponekad se ovi termini koriste kao sinonimi, iako ne bi trebalo da bude tako. Podatak
predstavlja neku vrednost (niz simbola, znakova) van konteksta i bez znaenja.
Informacija je podatak sa znaenjem. Na primer, recimo da imamo sledeu listu
brojeva:
24.56, 21.94, 27.23, 30.61
ta oni znae? Znaenje ovih brojeva zavisi od konteksta u kojem se koriste. Oni
mogu predstavljati prosene temperature tokom nekog perioda, ali isto tako mogu
predstavljati i cenu nekog proizvoda. Takvi brojevi mogu biti smeteni na disk i
moemo napisati kompjuterski program koji ita te brojeve sa diska - izvora podataka
i koji ih tretira kao temperature. Neki drugi program ih moze takoe itati sa diska i
tretirati ih kao cene. Tako, zapravo sam program odreuje kontekst podataka.
Sie predavanja
U ovom predavanju upoznali smo se sa osnovnim konceptima koji e nam pomoi da
bolje razumemo naredna predavanja. Sada ste u stanju da definiete ta se
podrazumeva pod kompjuterom i kompjuterskim programom, imate jasniju ideju kako
su se razvijali programski jezici, kao i jasniju predstavu o slinostima i razlikama
pojmova podatak i informacija.
O podacima i informacijama bie vie rei u narednom predavanju.
Pitanja
1. ta je to instrukcija u generalnom smislu?
2. ta je to maina u generalnom smislu?
3. Dajte jedan primer maine i nain na koji dajete instrukcije toj maini. To ne mora
biti kompjuter (recimo automat za koka-kolu)
4. Navedite etiri osnovne karakteristike kompjutera. Moete li da navedete jo neke?
5. ta se podrazumeva pod izrazom - niz (sekvenca)?
6. ta znai izvravanje instrukcije?
7. ta je kompjuterski program?
8. Mainski kod koristi prirodan jezik raunara ta to zapravo znai?
9. ta je ulaz podataka?
10. ta je izlaz podataka?

3.

Podaci i informacije

Obrada podataka
Pod obradom podataka podrazumeva se proces kojim se podaci transformiu tako da
se od nekog poetnog skupa (ulaznih) podataka dobije novi (izlazni) skup podataka.
Tako se recimo mogu sabrati visine (ili teine) niza osoba, pa kada se takav zbir
podeli sa brojem osoba ije su visine (teine) sabrane dobijamo informaciju o
prosenoj visini (teini) tog skupa osoba. Moe se rei da smo obradom podataka o
visinama (teinama) kao rezultat dobili jednu novu informaciju (podatak). Zapravo
svaka obrada podataka i ima za cilj dobijanje nove informacije koja je sakrivena u
sirovim podacima.
Proces obrade podataka moemo slikovito prikazati sledeim dijagramom:

Slika 3.1 Proces obrade podataka


Podrazumeva se, naravno, da se obrada podataka vri u kompjuterima. Podaci se
mogu u kompjuterima obraivati na vie naina u zavisnosti od uslova pod kojima se
obrada vri.
Ako se obrada vri na taj nain to se podaci najpre prikupljaju, prilagoavaju za
kompjutersku obradu unose u kompjuter tek kada su svi podaci prikupljeni onda takvu
obradu podataka nazivamo batch (be) obradom. To je sluaj sa raznim statistikim
obradama, kao i obradama recimo plata u nekom preduzeu, obradama rauna za
elektrinu energiju, TV pretplatu i slino. Trajanje ovakve obrade moe biti i vie sati
rada kompjutera.
Ako se obrada vri odmah nakon unosa podataka onda kaemo da se radi o on-line
obradi. To je sluaj recimo sa bankarskim transakcijama kada podiete (ili ulaete)
gotovinu sa vaeg rauna, plaate kreditnom karticom ili rezerviete mesto u avionu
(ili pozoritu). Kod takvi obrada se ne moe ekati na prispee svih podataka, ve se
obrada vri redom kako oni stiu. Trajanje obrade moe biti do nekoliko sekundi
(ponekad i minuta).
Postoje sluajevi kada se podaci moraju obraditi za veoma kratko vreme (ispod 1
sekunde ili ak za hiljaditi deo sekunde). Za takve obrade kaemo da se odvijaju u
realnom vremenu (real-time). Primeri takve obrade su razne vrste upravljanja
robotima, automatskim pilotima, hirurkim zahvatima i sl. Te su obrade esto
povezane i sa visokim rizicima po bezbednost ljudi ili gubitak njihove imovine.
A kakvi se sve podaci mogu obraivati? Kakve sve oblike podataka znamo?

Vrste podataka i nain kodiranja


Podaci i informacije imaju dve vane karakteristike: formu i sadrinu. Forma je oblik
u kojem se podaci pojavljuju a sadrina je njihovo znaenje. Uobiajene i
najrasprostranjenije forme podataka su slova, brojevi, zvuk, slika, filmski zapis. To su
forme prepoznatljive oveku. ovek moe da prepozna i neke druge forme podataka
koje prima i drugim ulima kao to su dodir, miris, ukus, temperatura. Ali u prirodi
postoje i druge fizike karakteristike materije i prostora koje su mogue forme
podataka kao to su elektrini i magnetni signali, bio-energetski signali da pomenemo
samo neke od njih.
Naa dalja panja bie usmerena samo na standardne forme podataka koje su najee
u upotrebi, mada se taj skup stalno iri novim formama.
Znaenje podataka predstavlja drugu vanu njihovu karakteristiku. Jedan te isti
podatak moe imati razliita znaenja, u zavisnosti od interpretacije. Kakvu emo
interpretaciju pridruiti nekom podatku? Najee je interpretacija povezana sa
kontekstom u kojem se neki podatak nalazi. Mi se ovde neemo baviti znaenjima
podataka ve samo njihovom formom i mogunostima transformacije podataka iz
jedne forme u drugu, kao i kombinovanjem podataka u cilju dobijanja novih
informacija onako kako to prikazuje gornji dijagram.
Numeriki podaci (brojevi)
Brojevima se izraavaju kvantifikatorska svojsta objekata i procesa. Brojevima
prikazujemo cene, koliine, fizike veliine ( visine, teine, temperature, itd.) kao i
razne druge merljive podatke. Brojevima se mogu modelirati i veoma sloene
prirodne i drutvene pojave i procesi. Statistiki pokazatelji su dobar primer za
upotrebu brojeva pri analizi prirodnih i drutvenih fenomena. Aritmetika je oblast
matematike koja se bavi osnovnim karakteristikama brojeva. Tokom razvoja
matematike uvedeno je vie vrsta brojeva, od prirodnih brojeva ( 0,1,2,3...), celih
brojeva (...-2,-1,0,1,2,...), racionalnih brojeva ( razlomaka, , 2/3 , ...), pa sve do
kompleksnih brojeva ( 2 + 3i). Za nas su najinteresantniji celi i decimalni brojevi kao
brojevi koji se najee koriste u praksi.
Dekadni brojni sistem
Brojevi se mogu zapisivati na vie naina. U svakodnevnoj upotrebi je tzv. dekadni
brojni sistem gde se za zapisivanje brojeva koristi dest cifara (0,1,2,3,4,5,6,7,8,9), pa
otuda i ime dekadni (deka na grkom znai deset).
U dekadnom sistemu se recimo zapis 327 tumai kao broj: tri stotine dvadest sedam.
To se moe i ovako prikazati:
327 = 3x100 + 2x10 + 7 (tri puta sto plus 2 puta deset plus 7), ili ovako:
327 = 3x102 + 2x101 + 7x100 (tri puta deset na kvadrat plus dva puta deset na jedan
plus 7 puta deset na nula), pa zato kaemo da je ovo pozicioni brojni sistem jer
vrednost cifre zavisi od mesta na kojem se cifra nalazi u broju.

Decimalni brojevi pored cifara koriste i decimalni zarez kojim se razdava broj celi od
broja koji oznaava deo celog. Tako recimo broj 1835,346 oznaava broj koji ima
1835 celih i dodatak od 346 hiljaditih delova celog (346/1000). U komjuterskim
aplikacijama decimalni zarez se esto zamenjuje decimalnom takom tako da se
gornji broj moe zapisati i kao 1835.346.
Binarni brojni sistem
Brojevi se na slian nain mogu zapisivati sa razliitim brojem cifara. U
kompjuterskim naukama u upotrebi su pored dekadnog jo i binarni, oktalni i
heksadecimalni brojni sistemi.
Binarni brojni sistem koristi samo dve cifre: 0 i 1. Ovaj sistem je pogodan za
komjutere zbog tehnologije njihove izrade i tzv. Bulove algebre na kojoj se zasniva
kompjuterska tehnika. Slino kao i kod dekadnog sistema brojevi se zapisuju ciframa
0 i 1, a vrednsot cifre zavisi od njene pozicije u broju. Tako na primer, binarni broj
10011 zapravo ima sledeu vrednsot:
10011 = 1x24 + 0x23 + 0x22 + 1x21 + 1x20
Ili u dekadnom obliku 1x16 + 0x8 + 0x4 + 1x2 + 1x1 = 19 ( devetneast ).
Gornji primer pokazuje kako se vri konverzija iz binarnog u dekadni brojni sistem.
Potrebno je, zanai, samo svakoj cifri binarnog broja priduiti njenu vrednost u
zavisnosti od pozicije i sabrati.
Obrnute konverzija, iz dekadnog u binarni oblik se moe izvriti sledeim postupkom:
1. Broj koji se konvertuje podeliti sa 2.
2. Rezultat deljenja zapisati ispod broja koji se konvertuje.
3. Ostatak pri deljenju (koji moe biti samo 0 ili 1) zapisati sa strane.
4. Ponoviti korake 1-3 sve dog rezultat deljenja ne bude jednak 0.
5. Ostatke pri deljenju (nule i jedinice) poredjati jedne za drugim u redosledu od
poslednjeg do prvog izraunatog ostatka.
Gornji postupa ilustrujmo na primeru konverzije broja 213 i binarni oblik.
213 podeljeno sa 2 daje rezultat 106 i ostatak 1
106 podeljeno sa 2 daje rezultat 53 i ostatak 0
53 podeljeno sa 2 daje rezultat 26 i ostatak 1
26 podeljeno sa 2 daje rezultat 13 i ostatak 0
13 podeljeno sa 2 daje rezultat 6 i ostatak 1
6 podeljeno sa 2 daje rezultat 3 i ostatak 0
3 podeljeno sa 2 daje rezultat 1 i ostatak 1
1 podeljeno sa 2 daje rezultat 0 i ostatak 1
Dakle, 213 dekadno je isto to i 11010101 binarno.
Heksadecimalni brojni sistem
Heksadecimalni brojni sistem ima 16 cifara (heksa na grkom znai estnaest).

Pored deset cifara koje su preuzete iz dekadnog sistema heksdecimalni sistem koristi i
slova A,B,C,D,E i F. To je takoe pozicionin brojnin sistem sa ciframa:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, gde cifre 0-9 imaju uobiajene vrednosti a
A,B,C,D,E i F vrednosti 10,11,12,13,14, i 15 redom.
Tako je, na primer, heksadecimalni broj 4A2 zapravo:
4A2 = 4x162 + 10x161 +2x160 ( setiete se da A ima vrednost 10, otuda 10x161 )
Dakle 4A2 heksadecimalno ima vrednost 1186 (1024 + 160 + 2).
Konverzija iz dekadnog u heksadecimalni oblik (i obrnuto) vri se analogno kao kod
binarnih brojeva.
Meutim, konverzija iz binarnog u heksadecimalni oblik (i obrnuto) je mnogo
jednostavnija.
Recimo da elimo da heksadecimalni broj 4A2 (iz gornjrg primera) prevedemo u
binarni oblik. Sve to treba da uradimo je da svaku heksadecimalnu cifu prevedemo u
binarni oblik, kako sledi:
4A2 hesadecimalno je 100101010 binarno jer je 4 u binarnom obliku 100, A je 1010,
a 2 je 10, pa kad ova tri binarna niza spojimo dobijamo 100101010.
Obrnuto, ako elimo da neki binarni broj prevedemo u hesadecimalni oblik, sve to
treba da uradimo je da binarni broj razdelimo u grupe od po etiri cifre (poev od
krajnje desne cifre) i svaku takvu grupu prevedemo u heksadecimalnu cifru.
Na primer binarni broj 1000101010101110100100111 koji na prvi pogled izgleda
zastraujue dugaak, lao se prevodi u heksadecimalni zapis.
Najpre broj razdelimo u grupe od po etiri cifre. Dobiemo sledei niz:
1 0001 0101 0101 1101 0010 0111
Sada svaku grupu prevedimo u heksadecimalnu cifu:
Iamaemo:
1 prevodimo u 1
0001 takoe u 1
0101 prevodimo u 5
0101 takoe u 5
1101 prevodimo u D (13)
0010 prevodimo u 2
0111 prevodimo u 7
Pa je tako

1000101010101110100100111 binarno jednako 1155D27 heksadecimalno. Lako, zar


ne?
Operacije sa brojevima
Brojeve moemo da sabiramo, oduzimamo, delimo i moimo. To su tzv. osnovne
aritmetike operacije sa brojevima. Ve se u poetnom stadijumu uenja sreemo sa
ovim operacijama i nauimo kako da ih izvravamo nad dekadno zapisanim
brojevima. Ovde emo samo napomenuti da se gornje aritmetike operacije izvravaju
analognim postupcima i za binarne i heksadecimalno zapisane brojeve.
I najsloeniji matematiki prorauni, najsloenije jednaine se na kraju svode na ove
etiri operacije. Sve to se moe sraunati sraunava se ovim operacijama. Naravno za
sloene proraune imamo postupke (algoritme) u kojima se ove osnovne operacije
kombinuju na razliite naine da se doe do eljenih rezultata. Ali o algoritmima
emo kasnije. O brojevima i operacijama sa brojevima za sada ovoliko.
Tekstualni podaci
Naa civilizacija je dobila ubrzan razvoj od trenutka kada je ovek poeo da zapisuje
svoje misli u obliku teksta. Posebno ubrzanje je dobijeno Gutenbergovim
pronalsakom tamparije kada je postalo mogue tekst umnoavati u vie primeraka na
ekonomian nain. Pojavom kompjutera, a posebno personalnih kompjutera i
njihovim povezivanjem u globalnu mreu (Internet) dostupnost tekstualnih
informacija u obliku knjiga, asopisa i drugih tekstova postala je tako velika da su
nam danas potrebni posebni pretraivai (Google na primer) bez ije pomoi bi bili
izgubljeni u tom okeanu informacija, meu kojima tekstualne informacije imaju
znaajan udeo.
Pa kako su raunari u stanju da pamte tekst. Za brojeve smo ve videli, koriste cifre 0
i 1. A tekst? Takoe. Kako je to mogue?
Na samom poetku korienja raunara (50-tih godina prolog veka) napravljen je
jedan ifarnik kojim su slova kodirana brojevima. Pa kada slova prevedemo u brojeve
onda je lako, brojeve moemo zapisivati u kompjuterima.
Napravljeni ifarnik slova poznat je kao ASCII (American Standard Code for
Information Interchange) tabela i jo uvek je u upotrebi ( vidi sledeu tabelu ).

Slika 3.2 ASCII tabela


Kao to se moe videti sa gornje slike ASCII tabela sadri slova intrenacionalnoh
alfabeta ( 26 slova od A do Z, mala i velika), cifre znake interpunkcije I razne druge
simbole, sa ili bez grafikog prikaza.
Tako recimo veliko slovo A ima ifru 65 u dekadnom brojnom sistemu, ili 41 u
heksadecimalnom.
ASCII kod je prvobitno bio 7-bitni kod (jer ima 128 znakova, a oni se mogu kodirati
sa 7 binarnih cifara). Poto je sadrao samo internacionalnu latininu azbuku, ovaj
kod je bilo nemogue koristiti za druge jezike i pisma (osim engleskog).
U poslednje vreme, a posebno za potrebe interneta koristi se novi tzv. UNICODE.
Ovaj kod se pojavljuje u vie varijanti, a UTF-16 je 16-bitna varijanta koja pokriva
30-tak sistema za pisanje teksta na raynim jezicima.
Operacije sa tekstom
Slino kao to kod brojeva postoje osnovne operacije, tako i obrada tesktualnih
podataka ima jedan skup jednostavnih operacija pomou kojih se mogu obavljati i
najsloenije operacije nad tesktovima. To su operacije nad pojedinanim slovima u
tekstu kao to su: brisanje slova, dodavanje slova, promena slova. Pomou tih
operacija mogue je izvriti razne operacije nad celim tekstovima kao to su brisanje
dela teksta, dodavanje teksta, zamena teksta drugim tekstom. Tekst procesori (MS
Word, na primer) obavljaju sline operacije.

Razvojem grafike (kako na ekranima tako kod tampaa) postalo je mogue


prikazivati slova u raznim oblicima (fontovima), raznim veliinama i drigim
tipografskim karakteristikama (boja, otisak, italik i sl.).
Danas se u kompjuterima koriste i tzv. hipertekstovi u kojima se tekst ne mora itati
liearno ve se moe skakati sa teksta na tekst u proizvoljnom redosledu sledei
takoznake hiperlinkove. A tekstualni zapisi mogu da sadre slike, video i zvune
delove, tako da se dobija informacija obogaena raznim vrstama i formama podataka.
Zvuni podaci
Zvuk, kao to je poznato nastaje vibracijom vazduha, pa kada se ta vibracija prenese
do nae bubne opne, ona vibrira u istom ritmu i proizvodi signal koji na mozak
interpretira kao zvuk.
Kako zvuk registruju, pamte i reprodukuju kompjuteri? Znamo da su mikrofoni i
zvunici standardni deo periferije naih PC-ja. No kako se zvuk pamti u komjuteru?
Opet pomou brojeva. Posto je zvuk vibracija vazduha, ta se vibracija u mikrofonu
(slino kao u naoj bubnoj opni) pretvara u elektrini signal kako je to ilustrovano na
sledeoj slici.

Slika 3.3 Registrovanje zvuka


S druge starne, reprodukcija zvunog signala se odvija tako to se brojevi kojima je
registrovan zvuk pretvaraju ponovo u elektrina signale kako to prikazuje sledea
slika.

Slika 3.4 Reprodukcija zvuka


Konverzija iz zvuka u brojeve (i obrnuto) vri se tako to se analogni elektrini signali
sempliraju ( digitalizuju) na nain ilustrovan sledeom slikom.

3.5 Digitalizacija zvuka


Zvuni podaci ( govor, muzika ) se mogu takoe obraivati. I kod njih postoji jedan
skup osnovnih operacija: brisnaje dela zvunog zapisa, dodavanje zvunog zapisa,
zamena zvunog zapisa. Pomou takvih operacija mogue je izvriti veoma sloene
transformacije zvunih zapisa i postii razne zvune efekte.
U praksi se koristi vie naina digitalizacije i zapisivanja zvunih podataka.
Kompjuterski fajlovi u kojima se nalazi zvuk mogu imati razne ekstenzije kao to su
wav, mp3, aud, midi, da pomenemo samo neke od najpoznatijih.
Grafika ( slika, video )
Jedna slika vredi hiljadu rei kae kineska poslovica. Vuzuelne informacije su veoma
pogodne za oveka. Zato kompjuterska tehnologija posebnu panju poklanja ovoj
vrsti podataka. Svedoci smo stalnog razvoja u ovoj oblasti, gde postoji tendencija da

se preko video tehnologija objedine svi komunikacioni kanali ( TV, komputeri,


novine) u jedisntven sistem multimedijalne prezentacije podataka i informacija.
Kako se slika ( nepokretna i poretna ) registruje, memorie i reprodukuje u
kompjuterima. Brojevima, ponovo.
Sledea slika ilustruje jedan proces digitalizacije crno-bele fotografije.
Original

Digitalizovano

Bit mapa
00000000000000000011110000000000000000
00000000000000001100001100000000000000
00000000000000010000000010000000000000
00000000000000100000000001000000000000
00000000000000100010001001000000000000
00000000000001000111011100100000000000
00000000000001000010001000100000000000
00000000000001000000000000100000000000
00000000000001000000000000100000000000
00000000000001001000000100100000000000
00000000000000100100001001000000000000
00000000000000100011110001000000000000
00000000000000010000000010000000000000
00000000000000001100001100000000000000
00000000000000000011110000000000000000
00011110010000000000000000000000000000
01100010010000000000000000000000000000
11000100100000000000000000000000000000
00000100100001110001011000101100100100
00111111110010010001101000110101100100
00001001000100100111001011100101001000
00010010000101101010010101001011011010
00010010000110110111111011111101101100
00000000000000000100000010000000011000
00000000000000001100000110000000110000
00000000000000001000000100000000100000

Slika 3.6 Digitalizacija slike


Proces se moe opisati ovako: Originalna slika se pretvara u mozaiku verziju, gde
svaki kamen u mozaiku prestavlja crnu ili belu povrinu. Onda se mozaik konveruje u
nizove 0 i 1 tako da 0 odgovara belom a 1 crnom kamiku. Na kraju se te serije 0 i 1
zapisuju u memoriji kompjutera.
Reprodukcija je obrnut proces: Svaka 0 i 1 iz memorije se na ekranu monitora
prikazuje kao svetla (bela) ili tamna (crna) taka. Svaki monitor se zapravo i sastoji od
odreenog broja vertikalnih i horizontalnih linija koje se sastoje od odreenog broja
taaka (piksela). Ovde se matematika definicija linije razlikuje od praktiene
definicije. Dok se matematika linija sastoji od beskonanog niza taaka, linija na
monitoru ima konaan broj takvih taaka ( broj verikalnih i horizontalnih taaka na
ekranu nazivamo rezolucijom ekrana).
A kako pamtimo sliku koja nije crno bela? Tu umesto to svaku taku pamtimo
pomou 0 ili 1, pamtiemo boju take. Iz teorije boja pozanto je da se svaka boja
moe dobiti kombinacijom tri boje (crvene, zelene i plave). Na engleskom, Red,
Green, Blue (RGB). Dakle ako za svaku osnovnu boju uzmemo jedan bajt memorije
onda moemo svaki piksel obojiti sa jednom od 256x256x256 boja.

Slino, ako umesto kolora elimo sliku sa tonovima sivog moemo svakom pikselu
priduiti jedan bajt kojim se opisuje jedan od 256 nivoa sivog.
A ta ako imamo pokretnu sliku (video zapis). Pa nije problem, potrebno je samo
pamtiti vie uzastopnih slika u jednosj sekundi. Kod klasinih filmova sa filmskom
vrpcom uobiajeno je da se prave 24 slike u sekundi, kod kompjutera taj broj je
obino 36 pa je tako kompjuterska slika stabilnija.
Naravno zapisivanje slike, a posebno videa zahteva veliku koliinu kompjuterske
memorije, mnogo vee nego za zvuk, a naroito u odnosu na tekst i brojeve.
I sliku (video) je mogue obraivati. Osnovne operacije su ovde promena
karaketristika piksela (boje, osvetljaja, kontrasta).
Postoji takoe, mnogo naina digitalizacije slike (i vide-a). Najpoznatiji formati
zapisa su bmp, jpg, png, pic, tiff itd.
Pitanja
1.
2.
3.
4.
5.
6.
7.
8.
9.

Kako se podaci razlikuju od informacija?


Nevedite osnovne operacije koje su prisutne u informacionim sistemima?
Od kojih se komponenti sastoji informacioni sistem? ta sve IS ukljuuje?
Navedite neke od operacija koje se mogu vriti nad podacima?
Navedite bar tri vrste podataka.
Navedite najee koriene osnovne tipove podataka u programskim jezicima.
Definiite podatke tipa bool(ean).
Koliko je heksadecimalno 7F u dekadnom sistemu?
Koliko bajtova je potrebno za predstavljanje jednog slova u ASCII kodu? A u
Unicode-u.
10. Zato slui kompresija zvunih signala?
11. Navedite bar dva formata zvunog zapisa.
12. Navedite bar tri formata za memorisanje slike.

10

4. Memorisanje, prenos i prezentacija podataka


Memorisanje podataka u kompjuterima
U predhodnom poglavlju upoznali smo se sa razliitim vrstama podataka
(numerikim, tekstualnim, zvunim i video) i nainiom njihove digitalizacije.
Sada emo se baviti kompjuterskom memorijom koja moe da sadri takve podatke.
Ono to oekujemo od kompjuterske memorije jeste da u nju moemo smestiti
podatke, da im moemo pristupati, da ih moemo menjati i transferovati iz jedne
memorijske lokacije u drugu, ili ak iz jednog kompjutera u drugi udaljeni kompjuter.
Ali ponimo redom. Videli smo da nam je za memorisanje bilo koje vrste podataka
potrebno zapravo da memoriemo samo nizove 0 i 1 od kojih se sastoje sve vrste
podataka. Zato emo za momenat zamisliti da imamo neki fiziki objekat u koji
moemo da upiemo nulu ili jedinicu. Zamislimo ga na nain koji prikazuje sledea
slika:

Slika 4.1 Memorija za pamenje 0 i 1


Ovakva elementana memorijska elija naziva se jednim bitom memorije. Naziv dolazi
otuda to se u njoj moe pamtiti jedna binarna cifra (binary digit).
Kako se tehnoloki realizuje takva memorija za nas u ovom trenutku nije vano.
Napomenuermo samo da ima vie naina za izradu takvih memorija
poluprovodnici, magnetni materijali, optiki materijali. Od poluprovodnike memorije
se najee prave RAM i ROM memorije, od magnetnih hard diskovi a od optikih
CD i DVD diskovi.
Zamislimo sada da ovako malih memorijskih delova, kao onih na slici 4.1 imamo u
izobilju stotine miliona, kao to je est sluaj. Kako se snai u tom ogromnom broju,
kako gnati gde nam se nalaze podaci, gde su slike, gde su tekstovi, a gde programi?
Da bi smo to postigli, porebno je da uvedemo neki sistem u organizacuji memorije.
Prvi korak je da ove male memorijske elemente poveemo u vee skupine.
Ako 8 bitova poveemo u jednu celinu dobiemo tzv. bajt kao pokazuje sledea slika.

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

0 0 0 0 0 0 0 0
Slika 4.2 Bajt
U jednom bajtu moemo da smestmo jedu od 256 moguih kombinacija 0 i 1. Recimo
moemo da smestmo neko slovo iz ASCII tabele, ili jednu od RGB boja nekog piksela
iz slike. Kao to se vidi sa gornje slike s obzirom da svaki bit u bajtu ima svoje mesto
(adresu od 0 do 7) svakom od tih bitova moemo individualno da pristupamo i da ga
menjamo.
A sada pokuajmo da vie bajtova poveemo u jednu celinu kao na sledeoj slici.

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
N

7
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

6
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

4
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

0 0 0 0 0 0 0 0

Slika 4.3 Niz bajtova


Brojevi 0,1,2,3,4,...,N predstavljaju adrese bajtova tako da sada moemo pristupati i
svakom bajtu posebno i menjati njegov sadraj. Dakle memoriju raunara moemo

posmatrati kao jedan linearna niz bajtova, gde se svakom bajtu moe pristupati preko
njegove adrese, a unutar bajta i svakom bitu. Obino memorije sadre veliki broj
bajtova koji se meri kilo, mega, giga ili tera bajtima, a prema sledeoj tabeli vrednosti
za ove mere.
Name

Abbr.

Size

Kilo

2^10 = 1,024

Mega

2^20 = 1,048,576

Giga

2^30 = 1,073,741,824

Tera

2^40 = 1,099,511,627,776

Peta

2^50 = 1,125,899,906,842,624

Exa

2^60 = 1,152,921,504,606,846,976

Zetta

2^70 = 1,180,591,620,717,411,303,424

Yotta

2^80 = 1,208,925,819,614,629,174,706,176

Slika 4.4 Veliina memorije (u bajtima)


Gore prikazani model memorije najpogodniji je za RAM i ROM memorije. Kod
magnetnih i otikih diskova uobiajna je jedna druga organizacija, kod koje imamo
podelu memorijskog prostora na foldere (direktorijume). Folderi se ureuju
hijerarhijski kako prikazuje sledea slika.

Slika 4.5 Organizacija podataka na diskovima


Osnovni kontejner podataka na diskovima je fajl (file, ili u prevodu datoteka). Fajl
moemo takoe zamisliti kao niz bajtova. S obzirom da su fajlovi, najee, veoma
dugaki nizovi bajtova, pojedinanim bajtovima u fajlu se ne pristupa preko adrese
svakog bajta iz fajla, ve se fajl ita deo po deo, pa se onda u trenutno uitanom delu
pronalaze podaci koje treba koristiti (ili menjati).
Da rezimiramo: Kod kompjutera razlikujemo dve osnovne vrste memorije RAM (i
ROM) u kojima se podacima pristupa preko adresa bajtova u kojima se podaci nalaze,
i disk memorije (magnetni i optiki) u kojima su podaci smeteni u fajlove pa se
pristup podacima vri tako to se fajlovi itaju deo po deo, podaci se ovim itanje
prebacuju u RAM a onda im se pristupa.
Prenos (transfer) podataka
Malo pre smo videli kako se podaci iz fajlova moraju najpre preneti u RAM da bi se
sa nad njima vrila obrada. U kompjuteru se odvija veoma iv i obiman prenso
podataka od jedog do drugog njegovog dela, od memorije do procesora i nazad, od
3

memorije do perifernih ureaja i nazad. To su tzv. lokalni transferi koji se odvijaju


velikom brzinom na malim rastojanjima (unutar kompjutera i njegovih ipova).
Moe se slobodno rei da se tokom obrade podata najvei deo vremena troi upravo
na tom transferu podataka. I sami ste svedoci kako po nekad nestrpljivo ekate da
podaci ( i programi) sa vaeg diska budu uitani u memoriju rainara. Da ne govorimo
ovremenu dok ekate da vam se sa interneta daunloduje (download) neki sadraj.
Poto prenos podataka ima tako znaajno mesto, onda je potrebno da se brzina
prenosa uini to veom.
Brzina prenosa zavisi od naina ostvarivanja komunikacije izmeu pojedinih
memorijskih delova. Najbre su, svakako, optike komunikacije kod kojih je brzina
prenosa inforamcije priblina brzini svetlosti, koja je opet najvea mogua poznata
brzina u prirodi. Nakon optikih slede elektromagnetni i elektrini signali koji imaju
sline brzine, ali manji domet bez gubitaka.
Problem prenosa podataka moemo da zamislimo kao problem prenosa niza bitova (ili
bajtova) kako prikayuje sledea slika.
Kanal za prenos podatak
Predajnik

Prijemnik
Slika 4.6 Serijski prenos podataka

Brzina kojom se podaci prenose od predajnika do prijemnika naziva se bitrate i meri


se brojem bitova u sekundi. Na primer 64 kbit/s je brzina kojom se 64000 bitova
prenosi u jednoj sekundi.
Ako se bitovi prenose jedan za drugim, tada govorimo o serijskom prenosu podataka.
No mogue je prenosti i vie bitova istovremeno kao to je prikazano na sledeoj slici.

Prijemnik

Predajnik

Slika 4.7 Paralelni prenos podataka


Naravno da je paralelni prenos bri, ali se kod njega koristi vie linija za povezivanje
predajnika i prijemnika. To je ekonomino samo u sluajevima kada su predajnik i
prijemnik sasvim blizu jedana drugom (kau u sluaju ipova, ili tampanih kola).
Treba takoe razlikovati i dve vrste veze izmeu predajnika i prijemnika. Ako je
prenos podataka mogu samo u jednom smeru (od predajnika ka prijemniku, ali ne i

obratno) govorimo o simpleks vezi. Ako je prenos mogu u oba smera, ali ne
istovremeno, onda je to semi dupleks veza, ako je prenos mogu u oba smera i
istovremeno oda je to tzv. ful dupleks veza.
Danas je uobiajeno da se raunari povezuju u loaklne mree (LAN) unutra nekog
ogranieng prostora, a takoe i na irem prostoru (WAN mree), pa i globalno na
Internetu. U svi tim sluajevima imamo dvosmernu vezu pa moemo podatke i da
primamo (download) i da aljemo (upload) od/do udaljenih ralunara.
Brzine prenosa podataka unutar samog raunara su reda veliine terabita u sekundi,
brzine u lokalnim mreama se mere gigabitima u sekundi, dok su veze sa intenetom
reda megabita u sekundi.
Prezentacija podataka
Prezentacija podataka je finalna faza svake obrade podataka. To je ono to se vidi na
kraju. Korisnik najee nema uvid u to kako komjuter obavlja aritmetike i logike
operacije, obrauje sliku ili zvuk, njega interesuje samo krajnji rezutat: da vidi svoj
novac na svom bankarskom raunu, da uje pesmu koju je poeleo, da vidi spot koji
ga interesuje i slino. On eli da do svih tih informacija doe na to jednostavniji
nain, to bre i da pri tom ima i estetski doivljaj da ekran prikazuje neke za oko
pogodne prizore.
Upravo tu komunikaciju kompjutera i korisnika nazivamo interfejsom ovekkompjuter.
Tokom razvoja kompjutera ova komunikacija je sve pogodnija i pogodnija za oveka.
Sa prvim kompjuterima 40-tih godina prolog veka mogli su da komuniciraju samo
njihovi konstruktori, krajem prolog veka to su mogli samo posebno obueni
operateri, a danas kompjuter koriste skoro svi. U vedskoj recimo vie od 80%
populacije koristi Internet. I kod nas se taj broj rapidno uveava iz godine u godinu.
Verovatno nee proi dugo vremena kada emo sa raunarima komunicirati ne samo
preko tastature, ekrana i mia, ve i na mnogo jednostavniji nain prirodnim glasom
kao i sa ljudima. Ve sada su u upotrebi govorni automati koji upravo to rade ali u jo
uvek primitivnom obliku. Da ne govorimo o posebnim naoarima, odelima i
heptikim ureajima kojima se mogu ostvariti i druge virtuelne komunikacije ovek
kompjuter.
Mi emo se za sada drati klasinih oblika komunikacije i truditi se da postignemo sa
njima to bolje efekte.
Pitanja
1.
2.
3.
4.
5.

ta je bit, bajt?
ta je RAM i ROM?
ta je to memorijska adresa?
Kako se odreuje pozicija bita u bajtu?
Koliko bitova ima jedan kilobajt?

6. ta je to fajl?
7. ta je to folder?
8. Koliko fajlova moe biti u jednom folderu?
9. Koliko foldera moe biti na jednom disku?
10. Mogu li dva foldera imati isto ime?
11. Mogu li dva fajla imati isto ime?
12. ta je serijski prenos podataka?
13. ta je paralelni prenos podataka?
14. ta je simpleks, semidupleks i dupleks prenos podataka?
15. Koliko bajtova je potrebno za 1 minut muzike?
16. Koliko bajtova je potrebno za jednu stranicu teksta?
17. Koliko bajtova je potrebno za jenu sliku?
18. Koliko bajtova je potrebno za 1 minut video zapisa?
19. ta je to GUI?
20. Koje nestandardne periferne ureaje poznajete?
21. ta je to heptika?

5. Osnovni tipovi podataka


U programskim jezicima tipovi podataka (data types) definiu skupove vrednosti I
doyvoljene operacije sa tim vrednostima. Na primer u C# jeziku, tip podatka int
predstavlja skup celih 32-bitnih celih brojeva u rasponu od -2,147,483,648 do
2,147,483,647 sa kojima moemo vriti operacije sabiranja, oduzimanja i mnoenja.
Skoro svi programski jezici definiu tipove podataka kao to su: celi brojevi (
integers, skraeno int), realni brojevi (float), slova (character, sktaeno char), logike
vrednosti (boolean, skraeno bool).
Na primeru C# jezika, pokazaemo skupove vrednosti za osnovne tipove podataka
kao i operacije sa njima.
Celi brojevi
Kao to je ve pomenuto, celi brojevi ( engleski integers), su brojevi koji se definiu
(deklariu) pomou skraenice int kao u sldeemo primeru:
int kolicina;
Ovde re kolicina oznaava promenjivu vredost (varijablu) koja moe da dobije bilo
koju vrednost iz skupa celih brojeva -2,147,483,648 do 2,147,483,647.
Sa celim projevima moemo da vrimo operacije sabiranja, oduyimanja i mnoenja
koje se oznaavaju u veini programskih jezika na sledei nain:
Sabiranja: koristi se znak + kao to je uobiajeno u matematici.
Oduzimanje: koristi se znak - , takoe uobiajeno u matematici.
Mnoenje: koristi se znak * (zvezdica), to nije uobiajeno u matematici ( tamo se
koristi znak x ).
Celi brojevi se ne mogu deliti, jer se kao rezultat ne dobija uvek ceo broj, pa bi se tako
naruio princip da rezultat operacije nad nekim tipom podatka mora bisti isti takav tip.
Zato se deljenje kod celih brojeva definie tako da se kao rezultat deljenje dobija
samo celi rezultat. Na primer 9 podeljeno sa 2 je 4 (ostatak pri deljenju se odbacuje).
Zato je i 2 podeljeno sa 3 jednako 0.
Deljenje se oznaava sa znakom / (kosa crta).
Realni brojevi
Realni brojevi su brojevi koje mi u svakodnevnoj upotrebi nazivamo decimalnim
brojevima ( sa decimalnim zarezom, ili takom). Na engleskom se decimalna taka
naziva floating point pa otuda skraenica float za takve brojeve.
U primeru:
float cena;

cena oznaava promenjivu vredost (varijablu) koja moe da dobije bilo koju vrednost
iz skupa decimalnih brojeva u opsegu 1.5 1045 to 3.4 1038.
Operacije sa realnim (float) brojevima su: sabiranje, oduzimanje, mnoenje i deljenje,
koje se oznaavaju simbolima +, -, *, / respektivno i imaju uobiajeno znaenje kao u
matematici.
Slovni podaci
Slova ( characters na engleskom) je takav tip podatka koji moe da sadri jedno slovo
iz ASCII ili Unicode tabele.
Tako na primer:
char slovo;
oznaava varijablu koja moe da sadri bilo koji slovni znak koji je zastupljen u
Unicode-u. Povezivanje vie slova u tzv. string, postie se mogunost deklarisanja
teksta kao podatka. Ali o nizovima e biti rei na drugom mestu.
Od operacije sa slovima pomenuemo konverzije iz jednog sistema u drugi (npr. iz
ASCII u Unicode i obrnuto), kao i operacije sabiranja koje imaju specifino
znaenje.
Sabiranje slovima:
a + 1 daje rezultat b ( jer je slovo b iza slova a)
a+2 daje rezultat c, itd.
Logiki podaci
Logiki (boolean na engleskom, bool skraeno) je veoma poseban tip podatka koji
ima samo dve vrednosti tano (na engleskom true) i netano (na engleskom false).
Tako na primer:
bool iskaz;
iskaz oznaava varijablu koja moe da sadri jednu od dve vrednosti (true ili false).
Operacije sa logikim podacima su: logiko I (na engleskom AND), logiko ILI
(na engleskom OR), logiko NE (na engleskom NOT).
Za operacije AND, OR i NOT koriste se redom zbaci &&, ||, i !. Za logiko
raunanje koristi se sledea tabela logikih operacija:
X
false
false
true
true

Y
false
true
false
true

X && Y
false
false
false
true

X || Y
false
true
true
true

!X
true
true
false
false
2

Pomenuemo sada i jednan tip podataka koji je u C jeziku odomaen iako ne


predstavlja nikakavu novu vrstu podataka koja ve nije ukljuena u gore navedene.
Radi se o tipu byte koji je prosto niz od 8 bitova pa moe da ima vrednost od 0 do
255.
Tako recimo u primeru:
byte podatak;
varijabla podatak moe da uzme bilo koju vrednost izmu 0 i 255. Ovaj tip podatka se
najee koristi za tzv. byte strimove (byte streams) o kojima e biti rei na drugom
mestu.
Treba na kraju napomenuti da u programskim jezicima obino postoje i razne
modifikacije napred navedenih osnovnih tipova podataka.
S druge strane mogue je gore navedene tipove podataka grupisati s strukturirati na
razliite naine da bi se dobile takve strukture podataka koje na najbolji nain
reprezentuju problem koji se reava. O strukturama podataka bie rei u natstavku.

Pitanja
1. ta su tipovi podataka?
2. Koji su osnovni tipovi podataka?
3. ta je int tip podataka?
4. Koje vrednsoti moe da uzme int tip podatka?
5. Koje su operacije mogue sa int tipovima podataka?
6. Kakva je specifinost deljenja kod int podataka?
7. ta su realni podaci?
8. Koje vrednsoti moe da uzme float tip podatka?
9. Koje su operacije mogue sa float tipovima podataka?
10. Koji se simboli (znaci) koriste za operacije nad int i float podacima?
11. ta je char tip podatka?
12. Koje vrednosti moe da uzme char tip podatka?
13. Koje su operacije mogue sa char podacima?
14. ta je bool tip podatka?
15. Koje vrednosti moe da uzme bool tip podatka?
16. Koje su operacije mogue sa bool podacima?
17. ta je byte tip podataka?
18. Koje vrednsoti moe da ima byte tip podataka?

6. Osnovne strukture podataka


Strukture podataka se bave organizacijom podataka i nainom njihovog memorisanja
u kompjuterima.
Struktura podataka je takva konstrukcija koja se moe izraziti programskim jezikom
za memorisanje skupa meusobno povezanih podataka - npr. niza celih brojeva, niza
objekata, niza nizova, itd. esto se kompjuterske strukture podataka nazivaju i
apstraktnim strukturama, jer se podaci modeliraju tako da vre apstrakcije koje na
najbolji nain odgovaraju problemu koji se reava. Kae se da se u nainu
predstavljanja problema podacima zapravo krije i njegovo reenja.
Apstrakna struktura podataka (Abstract Data Structure-Type) - ADT
Skup (kolekcija) povezanih podataka sa skupom operacija nad tim podacima naziva se
apstraktnom strukturom podataka. Apstrakna struktura pokazuje koje su operacije
definisane nad podacima, ali ne i kako se te operacije implementiraju. Programer,
znai, moe da koristi apstaraktnu strukturu bez znanja kako je ona implementirana.
Operacije nad strukturama podataka
Svaka (apstraktna) struktura podataka ima sa njom povezan skup operacija kojima se
uspostavlja sama struktura (konstruktorske operacije), kao i niz operacija za
dodavanje, brisanje, sortiranje i pretraivanje podataka memorisanih unutar strukture,
kao to je ilustrovano su na sledeem dijagramu.

Slika 6.1 Upotreba apstarktnih struktura podataka


Gornja slika slikovito predstavlja poznatu formulu:
PROGRAM = ALGORITAM + STRUKTURA PODATAKA

Gornjom formulom se izraava povezanost strukture podataka sa reenjem


(algoritmom) problema.
Slika prikazuje kako program preko interfejsa (operacije, funkcije, procedure,
metoda) koristi strukturu podataka. U objektno orjentisanoj metodologiji zapravo
struktura podataka zajedno sa interfejsom predstavlja osnovni element OO pristupa.
Tako se definie klasa objekata koji su modelirani strukturom podataka i metodama
njihove manipulacije (dinamikog kreiranja objekta, modifikacije objekta, i sl). OO
pristup se moe smatrati generalizacijom gornje formule o programima.
O Objektno orjentisanom programiranju bie vie rei kasnije.
Apstrakne strukture podataka imaju niz prednosti nad klasinim pristupom, jer s jedne
starne precizno definiu objekte, a s druge strane olakavaju programiranje jer:
o
o
o
o
o

Sakrivaju nepotrebne detalje (implementaciju)


Olakavaju upravljanje razvojem kompleksnog softvera
Olakavaju odravanje softvera
Smanjuju potrebu za funkcionalnim promenama softvera
Omoguavaju lokalne a ne globalne promene

Nizovi i indeksi (pointeri)


Niz predstavlja kolekciju objekata (podataka) istog tipa smetenih u memoriji u
uzastopnim memorijskim lokacijama kao to prikazuje sledea slika.
P[0]

P[1]

...

P[n-2]

P[n-1]

U gornjem primeru prikazan je sluaj jenog niza od n elemenata (zapazite da brojanje


poinje od 0), gde itav niz ima zajedniko ime p.
Pojedinanom elementu niza pristupa se tako to se pored imena niza u zagradi
navede i redni broj (indeks) tog elementa u nizu. Tako je p[14] podatak koji se nalazi
u 15-tom elementu niza p.
Nizovi su standardan element u programskim jezicima i obino se definiu (deklariu)
na poetku programa kao u sledeem primeru iz jezika C.
int kolicina[100];
Ovde je deklarisan niz sa imenom od 100 elemenata, celobrojnog tipa.
POINTERI
Pointer predstavlja specijalnu vrstu podataka koji se interpretiraju kao adrese na
podatke, a nisu podaci sa nekim drugim znaenjem.
int ar[5], *ip;

Gornjom deklaracijom definisan je niz p i pointer pp

ip = &ar[3];
Ovde je ip pointer na etvrti element niza ar.
Vedimenzionalni nizovi
Moemo zamisliti i nizove sa vie dimenzija (indeksa). Tako bi dvodimenzioni niz
deklarisan sa:
int t_d[2][3]
mogao biti predstavljen kao dvodimenziona ema (matrica)
t_d[0][0]
t_d[1][0]

T_d[0][1]
T_d[1][1]

t_d[0][2]
t_d[1][2]

dok bi mogao da ima sledee preslikavanje u memoriji raunara.

...
Trodimenzioni niz:
int three_dee[5][4][2];

ima 5x4x2=40 elemenata, gde se svakom od elemenata pristupa preko tri indeksa.
Ovaj niz bi slikovito mogao da bude prikazan kao paralelopiped (trodimenzionalno
telo) izdeljeno na 40 kuica, gde svaka kuica ima svoju adresu izraenu sa tri
indeksa, kao npr. three_dee[3][2][1].
Iako je mogue zamisliti i nizove sa vie od tri indeksa, njihova vizuelizacija nije
mogua.
Treba ovde jo istai da elementi niza mogu biti proizvoljni objekti, pa ak i nizovi.
Tako nizovi mogu sadrati kao elemente brojeve (cele i decimalne), slova, slike, itd.
Liste
Lista je konaan skup podataka a1,a2,a3,...,an slian nizu koji smo ranije definisali.
Meutim, za razliku od niza liste mogu biti realizovane kao dinamike strukture kod
kojih se unapred ne zna broj elemenata.
Sledea slika ilustruje jednu jednostruko povezanu listu.

a1

a2

an-1

null

Slika 6.2 Lista


Liste su vrlo rasprostranjene u programiranju lista dogaaja, lista poruka, lista klasa
itd.
Tipine operacije sa listama:
o
o
o
o
o
o
o
o
o

Kreiranje liste
Dodavanje (Insert) elementa u listu
Brisanje (Remove) elementa liste
Test da li je lista prazna (bez lanova)
Traenje elmenta u listi
Trenutni element/ sledei/ prethodni
Nai k-ti element
tampaj celu listu
Itd.

Implementacija lista POINTERIMA


Sada emo prikazati jedan efikasniji nain implementacije liste pomou pointera,
dinamiki.
Glava liste pointer na prvi element

a1

a2

a3

a4

Slika 6.3 Implementacija liste pointerima


Dakle, kod implementacije pointerima lista se sastoji od jednog posebnog pointera
koji ukazuje na poetak liste, a svaki element u listi se sastoji iz dva dela (za podatke i
pointera koji ukazuje na adresu sledeeg elementa liste), kako je to prikazano na
gornjoj slici.
Sada emo ilustrovati kako se operacije insert i delete sa lakoom realizuju u ovom
sluaju, kada je lista implementirana pointerima.

Operacija INSERT
novi lan

glava

tekui lan

a1

a2

a3

a4

Slika 6.4 Dodavanje novog lana u listu


Ako novog lana liste treba dodati posle tekueg lana (a3), onda se takva operacija
moe opisati na sledei nain.
Jednostavno se pointer lana a3 promeni da pokazuje na novi lan, a pointer novog
lana uzme predhodnu vrednost pointera lana a3. Znai, nema nikakvog pomeranja
lanova niza, ve se prostom zamenom pointera izvri dodavanje novog lana.
Operacija DELETE
Kod brisanja je stvar jo jednostavnija. Prosto se lanu koji predhodi brisanom lanu
promeni pointer da ukazuje na lan koji sledi posle brisanog lana, kako to prikazuje
sledea slika.

tekui lan

glava

a1

a2

a3

a4

Slika 6.5 Brisanje lana iz liste


Dvostruko povezane liste
Ponekad je pogodno da se kretanje kroz listu, od elementa do elementa vri u oba
smera (napred i nazad). U takvim sluajevima organizuju se liste sa dva pointera,
jedan za kretanje unapred kao kod obine liste, i dodatni pointer za kretanje unazad,
to je ilustrovano na sledeoj slici.

kretanje unapred
Dvostruko povezana lista
glava

sledei - next

x1

x3

x2

x4

predhodni - prev

kretanje unazad
Slika 6.6 Dvostruko povezana lista
Cirkularne liste
Cirkularna lista nastaje kada umesto da poslednji lan liste ima NULL pointer (NULL
pointer je pointer koji ne pokazuje ni na jedan element) on sadri adresu prvog lana.
Time se omoguava kruno-cirkularno kretanje kroz listu, kao to se moete uveriti
posmatranjem sledee slike.
Cirkularna lista
glava

x1

x2

..

xn

Slika 6.7 Cirkularna lista


Generalno govorei, liste su jedna od najee korienih apstraktnih struktura i slue
za implementacijo mnogih drugih i sloenijih struktura. Posebno je pogodna kada se
implementira pointerima i dinamiki. Objektno orjentisani jezici obino sadre u
biblioteci klasu koja odgovara napred izloenom konceptu liste i iz nje izvedenih
drugih struktura o kojima e sada biti rei.
Stekovi (LIFO lista, Stack)
Stek je lista kod koje se dodavanje i brisanje lana uvek vri na jednom mestu, tj. na
vrhu steka (poetku liste).
Operacije dodavanja i brisanja u steku imaju posebne nazive: push (dodaj-insert) and
pop (obrii-delete).

Stek se moe slikovito prikazati na sledei nain:


push(o)

pop
Stack

Vrh

2
7
6
current

Slika 6.8 Primer steka


Implementacija pomou liste
Vrh
steka

PUSH

a1

POP

a2

a3

a4

Slika 6.9 Implementacija steka pomou liste


Kod operacije POP pointer vrha uzima vrednost koju je imao pointer prvog elementa
steka. Operacijom PUSH pointer vrh pokazuje na novi element a novi element na prvi
element pre izvoenja PUSH operacije.
Stek ima raznovsne primene kao to su:
kod editora teksta (line editing)
uparivanje zagrada (leksika analiza)
izraunavanje u postfiks notaciji
rekurziji i pozivu potprograma (funkcije)
Redovi (FIFO liste, Queue)
Kao i stekovi, redovi se takoe mogu implemetirati kao liste. Kod redova se,
meutim, dodavanje vri na jednom kraju a brisanje na drugom kraju liste.

Redovima se implementira FIFO (first-in first-out) princip. Npr., printer/job red.


Dve osnovne operacije sa redovima:
dequeue: brisanje elementa sa ela reda
enqueue: dodavanje lana na kraj reda

dequeue

enqueue

Implementacija pomou liste


glava

tekui

a1

a2

rep

a3

a4

Slika 6.10 Implementacija reda pomou liste


Primene redova
o Printer redovi za ekanje na tampu,
o Telekomunikacioni redovi ,
o Simulacije,
o Itd.
Binarno stablo (Binary Tree)
Binarno stablo je struktura podataka koji su povezani tako da svaki od podataka
(vorova stabla) moe imati najvie dva sukcesora. Elementi binarnog stabla su:
Koren (root), unutranji elementi i listovi (leaf) stabla. Koren (root) je vor koji se
nalazi na vrhu stabla

Slika 6.11 Primer binarnog stabla

Implementacija listama
koren

list

list

Slika 6.12 Implementacija binarnog stabla listom


Svaki element u stablu ima pored podataka i dva pointera koji pokazuju na levo i
desno podstablo (ako ih ima, ili NULL ako ih nema).
Operacije nad binarnim stablima
-

dodavanje novog elementa


brisanje postojeeg elementa
prolazak: preorder, inorder, postorder

Dodavanje i brisanje elenata stabla vri se promenom pointera slino kao kod lista
(ako su stabla implementirana pomou liste), tako da se neemo posebno baviti ovim
operacijama. Samo emo, neto kasnije, pokazati jednu strategiju za dodavanje
elemenata u stablo koja e rezultirati jednom specijalnom vrstom stabla takozvanim
sortnim binarnim stablom.
Malo detaljnije emo se baviti operacijama sistematskog obilaska svih elemenata
stabla takozvanim algoritmima za prolazak kroz stablo. Ovo iz razloga to ovi
algoritmi dobro ilustruju jedan vaan koncept u programiranja takozbanu rekurziju.
Algoritmi prolaska kroz binarno stablo.
Preorder algoritam
Preorder algoritam se moe iskazati na sledei naina, sa tri koraka.
Preorder:

1. Poseti koren
2. Poseti levi deo stabla (levo podstablo)
3. Poseti desni deo stabla (desno podstablo)

Korak 1. je eksplicitan. U njemu se poseuje koren, tj jest vor koji je na vrhu stabla
(ili podstabla, kada se poseuje podstablo). Koraci 2 i 3 su implicitni (rekurzivni), jer
nam ne kau koji vor treba posetiti, ve nam daju uputstvo kako nastaviti sa prolazon
kroz levo ili desno podstablo. Zapravo poseta levom (ili desnom) podstablu e se
vriti istim ovim preorder algoritmom, ali sada primenjenim na podstablu. I tako
redom dok god ima novih podstabala.
Za primer preorder prolaska kroz stablo uzmimo stablo sa sledee slike.

Ako primenimo preorder algoritam imamo:


Korak 1. Posetimo koren stabla. Dakle posetimo vrh koji sadri podatak 2 i oznaimo
ga poseenim.
Korak 2. Sada treba da posetimo levo podstablo, tj stablo koje ima vorove 7,2,6,5,11.
Kako da ga posetimo. Pa opet istim algoritmom, ali sada primenjenim na ovo
podstablo. A to znai:
Korak 1. Poseti koren. Znai poseti i oznai poseenim vor 7 (koji je koren
podstabla koji upravo poseujemo).
Korak 2. Poseti levo podstablo tekueg podstabla. To je podstablo koje se
sastoji od samo jednog vora vora 2. Tako imamo:
Korak 1. Poseti koren oznai 2 poseenim.
Korak 2. Nema levog podstabla.
Korak 3. Nema desnog podstabla.
Znai nastavljamo sa korakom 3 za levo podstablo originalnog stabla.
Korak 3. Poseti desno podstablo. To je podstablo sa vorovima 6,5,11
Korak1. Poseti koren to je vor 6.
Korak 2. Poseti levo podstablo. To je samo jedan vor 5.
Korak 3. Poseti desno podstablo. To je samo jedan vor 11.
Sada se vraamo na Korak 3 za pocetno stablo.
Korak 3 Sada treba da posetimo desno podtablo, tj stablo koje ima vorove 5,9,i 4.
Korak1. Poseti koren to je vor 5 oynaimo ga poseenim.
Korak 2. Poseti levo podstablo nema
Korak 3. Poseti desno podstablo to je stablo sa vorovima 9 i 4.
Korak 1. Poseti koren to je vor 9, oznai ga poseenim.
Korak 2. Poseti levo podstablo to je samo jedan vor, 4, oznai ga
poseenim.
Korak3. Poseti desno podstablo nema.
Time je algoritam zavren. Redosled posete vorova je sledei: 2,7,2,6,5,11,5,9,4.
Slian postupak se sprovodi i za druga dva naina prolsaka kroz stablo. Za vebu
odredite redosled prolaska kroz gornje stablo za inorder I postorder redolsede.

10

Inorder:

1. Poseti levi deo


2. Poseti root
3. Poseti desni deo

Postorder:

1. Poseti levi deo


2. Poseti desni deo
3. Poseti root

Sortno binarno stablo


Sortno binarno stablo je stablo koje se dobija kada se niz brojeva (ili nekih drugih
objekata) unose u stablo po sledeem algoritmu.
1. Prvi pristigli broj (objekat) se unosi u koren stabla.
2. Svaki sledei se rekurzivno unosi u stablo tako da ako je manji od broja
(objekta) u korenu ide u levo podstablo, a ako je veu u desno.
Tako na primer niz brojeva 11,5,8,4,3,9,7,15 bie smeten u sortno binarno stablo kao
to je prikazano na sledeoj slici.

11
15

Slika 6.13 Sortno binarno stablo


Ako se sada kroz ovo stablo proe inorder redosledom dobiemo niz:
3,4,5,7,8,9,11,15. Zapravo dobiemo sortiran ulazni (poetni niz). Dakle, ovaj
postupak se moe koristiti za sortiranje (veoma efikasno) nizova brojeva (objekata).
Grafovi G(nodes, vertices) vorovi i lukovi.
Grafovi su posebne mrene strukture koje nalaze primenu u raznim algoritmima
optimizacije, teoriji igara, telekomunikacijama, itd.

11

Na sledeoj slici prikazan je jedan graf i njegova implementacija kombinacijom


nizova i lista. Kruii u grfau predstavljaju takozvane vorove (engleski nodes) , a
linije lukove (engleski arcs).

Slika 6.14 Graf


Graf se moe implementirati kao niz lkoji sadri vorove uz koje je pridruena lista
susednih vorova sa kojima je vor povezan. Tako se na predhodnoj slici nalazi lista
sa 5 elemenata koja sadri vorove 1 do 5. Svaki element iz niza ima pointer na listu.
Tako vor 1 ima pointer na vor 2 a ovaj na vor 5, jers su vorovi 2 i 5 susedni voru
1. Slino tome, vor 2 ima pointer na listu vorova 1,3,4 i 5 jer je vor 2 povezan sa
svim tim vorovima.
Algoritmi sa grafovima su sloeniji i izlaze van okvira ovog predemeta. Ovde emo
samo napomenuti da se za sistematski prolaz kroz graf mogu koristiti dve osnovne
startegije: prvo u dubinu (depth first) ili prvo u irinu (breadth first). Kod prve se
najpre ide po dubini grafa, tj. ide se sve dalje od poetnog vora, a kod druge se
najpre poseuju susedni vorovi.
He tabele
He tabele je posebna struktura podataka koja podsea na asocijativnu memoriju kod
oveka. U toj strukturi sam podatak koji se trai ukazuje na moguu adresu na kojoj
se on nalazi u memoriji. To se postie takozvanom transformacijom podatka (kljua)
u adresu na sledei nain:
adresa= f(klju), gde je f neka matematika funkcija.
Najee se primenjuju funkcije opisane metodama 1,2 i 3.
Metod 1: adresa = (klju) MOD N + 1
Metod 2: promena baze (radix conversion)
Metod 3: kvadriranje kljua i uyimanje dela rezultata

12

Implementacija he tabele nizovima


Podaci iz neke kolekcije podataka imaju poseban deo koji se zove klju i koji slui za
izraunavanje adrese na kojoj e podataka (zajedno sa kljuem) biti smeten. Taj
postupak je ilustrovan na sledeoj slici.

Slika 6.15 He tabela


Meutim, postoji verovatnoa da e transformacija dva razliita kljua dati istu
adresu, tako da dolazi do takozvane kolizije kljueva. Tada bi oba kljua trebalo
smestiti u istu adresu, to je naravno nemogue. U takvim sluajevima se pribegava
posebnom postupku razreavanja kolizije, to je mogue postii na vie naina.
Na sledeoj slici je prikazano reavanje kolizije olanavanjem (chaining).

13

Samo emo navesti jo neke metode reavanja kolizije bez dalje elaboracije:
1. Posebno podruje memorrije za koliziju (overflow areas),
2. Primena alternativne he funkcije (re-hashing),
3. Smetanje na sluajno odabranu adresu (random probing)
Pitanja
1.
2.
3.
4.
5.
6.

Navedite bar tri osnovne strukture podatak.


ta je ADS (ADT)?
Navedite neke od operacija nad strukturom podataka.
Koje su osnovne karakteristike ADT-a?
Definiite poiter (pokaziva).
Koliko elemenata sadri niz triD definisan sa : int triD [10][3][5]? A koliko
bitova, ako int zauzima 4 bajta?
7. Koliki je maksimalan i minimalan indeks niza deklarisanog sa: char niz [100]?
8. Koje podatke o listi (linked list) najee moramo da imamo?
9. Koje su najee operacije nad elementima liste?
10. Navedite nain na koje se liste mogu implementirati?
11. Kakva je prednost dvostruko povezanih lista u odnosu na obine (jednostruko
povezane) liste?
12. Definiite cirkularnu listu?
13. Opiite FIFO i LIFO principe.
14. Koje podatke o steku najee moramo da imamo?
15. Koje su najee operacije nad stekom?
16. Navedite bar dve primene steka.
17. Koje podatke o redovima najee moramo da imamo?
18. Koje su najee operacije nad redovima?
19. Navedite bar dve primene redova.
20. Nacrtajte primer nekog binarnog stabla i oznaite koren (root) i lie (leafs) stabla.
21. Na primeru nekog stabla (nacrtati stablo i njegove vorove oznaiti slovima
a,b,c,d,...) ispisati redosled posete vorova za:
A. preorder
B. inorder
C. postorder
prolaske kroz stablo.
22. ta je sortno binarno stablo?
23. Definisati heing postupak za memorisanje podataka.
24. Na kojoj adresi e se nai podatak 248 ako se za heing koristi sledea
transformacija kljua u adresu:
a) adresa = (kljuc) MOD 300 + 1
b) kvadriranje kljua i uzimanje prve tri cifre.

14

7. Interakcija ovek-kompjuter
Interakcija izmeu oveka i kompjutera (Human-Computer Interaction) je
multidisciplinarna studija odnosa korisnika (user) i kompjutera, koja taj odnos
prouava sa aspekta kompjuterskih nauka, psihologije i dizajna, sa ciljem da se to
vie olaka upotreba raunara od strane obinih korisnika. Korisniki intefejsi koji su
deo ove interakcije obuhvataju i softver I hardver kojim se postie komunikacija
izmeu oveka i kompjutera.
U uem smislu, ovek-komjuter intefejs se odnosi na grafiku, tekstualnu ili audio
komunikaciju ovek-komjuter. Mi emo se ovde upoznati sa nekim elementima te
komunikacije.
Grafiki Interfejs (Graphic User Interface skraeno GUI)
To je danas najrasprostranjeniji oblik interakcije ovek-kompjuter. Komunikacija se
ostvaruje tako to ovek (korisnik) putem ureaja kao to su tastatura (keyboard), ili
mia (mouse) saoptava svoje komande, a kompjuter odgovara grafikim prikazima
na monitoru. Tipian primer su Majkrosoft Windows operativni sistemi (vidi sliku).

Slika 7.1 Windows XP grafiki interfejs


Savremeni programski jezici, kao to je i C# pruaju mogunost da programeri koriste
isti pristup pri razvoju aplikacija, tako da programi pisani u tim jezicima imaju isti
korisniki interfejs kao i operativni sistemi pod kojima aplikacije rade. To doprinosi
1

uniformnosti pri korienju i olakava korisnicima snalaenje u radu sa aplikacijama


kao i sa samim operativnim sistemima.
Linijski interfejsi (Command Line Interfaces)
Kod linijskih interfejsa, korisnik koristi samo tastaturu za ukucavanje komandi, a i
odgovor kompjutera je takoe u obliku teksta. To je nekada bio jedini nain
komunikacije ovek kompjuter (recimo pre pojave Windows-a, Majkrosoft je imao
DOS operativni sistem sa linijskim interfejsom). Jo uvek je takav interfejs u upotrebi
za aplikacije koje ne zahtevaju grafiku interakciju. ak i Windows opeartivni sistemi
zadrali su takvu mogunost, preko takozvanog Command Prompt panela. U C# za
aplikacije koje koriste linijski intefejs kae se da rade u Console reimu (vidi sliku)

7.2 Linijski interfejs - konzolna aplikacija


Web orjentisani interfejs
Web interfejsi su specijalan oblik grafikog interfejsa u kojem se korisi hipertekst za
prikaz podataka i informacija. Razvoj web aplikacija vri se jezicima kao to su
HTML (Hyper Text Mark-up Laguage), Java, PHP i sl. Ovde se aplikacije nalaze na
web serverima i preko interneta se aktiviraju web brauzerima (web browser) kao to je
Explorer ili Firefoxm, na primer ( vidi sliku ).

7.3 Web interfejs


Specijalni iterfejsi
Gore navedeni intefjesi ovek-kompjuter su primeri klasinih interfejsa koji su u
najiroj upotrebi. Meutim postoji i niz specijalnih intefejsa koji omoguavaju i druge
oblike komunikacije ovek raunar. Nabrojaemo ovde neke od njih:
Taktilni interfejsi
Audio intefejsi
Touch Screen interfejsi
Heptiki intefejsi ( specijalna odela )
Pitanja
1.
2.
3.
4.
5.
6.
7.
8.
9.

ta je to interakcija ovek-kompjuter?
Nabrojte nekoliko vrsta intefejsa ovek-kompjuter.
ta je grafiki interfejs?
ta je linijski interfejs?
ta je linijski interfejs?
Nabrojte neke specijalne interfejse?
ta su heptiki intefejsi?
Kako funkcionie touch screen interfejs?
ta su audio interfejsi (govorni automati)?

8. Datoteke
Datoteke su vana struktura podataka pa joj zbog toga posveujemo posebno
predavanje. Skoro da nema ni jedne aktivnosti koja se obavlja uz pomo raunara a da
se pri tom ne koristi neka datoteka.
taje to datoteka?
Datoteka (engleski file fajl) je logiki organizovana skupina meusobno
povezanih podataka.
Pod logikom organizacijom se podrazumeva da je datoteka logiki izdeljena na
manje delove slogove koji ine jedinstvene celine podataka. Jedinstvenost se ogleda
u tome to se slogovi meusobno razlikuju u bar nekom podatku koji sadre.
I slogovi sami po sebi jesu strukture podataka, jer se sastoje od vie podataka kojima
odgovaraju polja (engleski field fild) u slogu.
Pored logike organizacije koja pokazuje logike veze medju podacima u datoteci, za
potpuno razumevanje koncepta datoteke potrebno je razmatrati i nain na koji se
podaci iz datoteke memoriu na nekom medijumu (traci, disku, itd...). Metode i
tehnike memorisanja datoteka nazivaju se fizikom organizacijom. Fizika
organizacija zapravo pokazuje kako se podaci iz logike datoteke preslikavaju u
fizike adrese (staze i sektore kod diskova na primer). Mi emo se baviti prevashodno
logikom organizacijom datoteka, to jest datoteke emo posmatrati sa aspekta
programera.
Slogovi
Slogovi su logike celine meusobno povezanih podataka kojima se modelira onaj
entitet koji je predstavljen u datoteci. Tako e recimo datoteka KUPCI sadrati
slogove koji sadre potrebne podatke o kupcima, kao to je prikazano na sledeoj
slici:
Slog 1
...

Slog 2

polje 1

polje2

polje3

polje4

polje1

polje2

polje3

polje4

Identifikaci
oni broj

Naziv firme

Adresa

Dug

Identifikaci
oni broj

Naziv firme

Adresa

Dug

Kao to se iz predhodnog primera vidi slogovi se sastoje od jednog ili vie uzastopnih
polja koja sadre podatke. Polja odgovaraju obelejima ili atributima koje
dodeljujemo entitetu koji se modelira. U predhodnom sluaju entitet su bili kupci, a
taj entitet je modeliran atributima: identifikacioni broj, naziv firme, adresa i dug.
Dakle, polja sadre elementarne podatke i obino su popunjena brojevima i slovima.
Mogue su i polja koja sadre i sloenije vidove podataka, kao slike, zvuni zapisi i
sl.

...

Datoteke obino sadre veliki broj slogova, iji broj se nekad meri i milionima
slogova (za uvanje birakih spiskova na primer). Zato je veoma vano da logika i
fizika organizacija podataka bude tako ureena da obezbedi efikasno korienje i
manipulaciju podacima u datotekama.
Koje su osnovne operacije nad datotekama?
Razmotrimo nekoliko osnovnih operacija koje se sreu pri radu sa datotekama.
Kreiranje datoteke
Kreiranje datoteke je operacija kojom se uspostavlja nova datoteka i priprema za sve
naredne operacije. Kreriranjem se obino definiu osnovni podaci o datoteci kao to
su: naziv datoteke, struktura slogova nazivi polja i tipovi podataka u poljima,
medijum na kojem se datoteka nalazi (traka, disk, CD, itd.), tip organizacije datoteke
(o tipovima organizacije bie rei malo kasnije) itd.
Upisivanje slogova u datoteku
Datoteke se kreiraju sa namerom da u nima budu pohranjeni (memorisani) slogovi.
Pohranjivanje slogova u datoetku vri se operacijama upisa. Da bi se operacija upisa
izvrila potrebno je datoteku otvoriti (operacija OPEN), zatim operacijama upisa
(operacija WRITE) u datoteku smetati slogove jedan za drugim i nakraju datoteku
zatvoriti (operacija CLOSE) kojom se na kraj datoteke postavlja poseban znak-marker
kraja datoteke (end-of-file marker).
Uitavanje slogova iz datoteke
Slogovi koji su predhodno upisani u datoteku mogu biti naknadno uitavani. Pod
uitavanjem se ovde podrazumeva proces prenoenja podataka iz sloga na medijumu
na kome se datoteka nalazi (traka, disk, CD) u centralnu (RAM) memoriju raunara.
Operacija uitavanja (READ) zahteva takoe da datoteka bude predhodno otvorena.
Zavisno od naina logike i fizike organizacije datoteke mogue je slogove itati u
razliitom redosledu. O tome e biti govora kasnije. Za sada emo smatrati da se
slogovi itaju jedan za drugim onako kako su i bili upisivani. Na kraju itanja.
datoteku treba ponovo zatvoriti.
Brisanje slogova
Ponekad je potrebno da se neki ve upisani slog (ili vie njih) odstrani iz datoteke.
Ovu operaciju nazivamo brisanjem sloga (operacija DELETE). Za izvravanje ove
operacije potrebno je otvoriti datoteku, pronai (locirati) slog koji se brie, izvriti
brisanje i zatvoriti datoteku. Kako se slogovi lociraju? Pa tako to se uitavaju redom
slogovi i proverava identifikaciono polje da li odgovara slogu koji treba brisati.
Moda je ovo trenutak da definiemo identifikator sloga (datoteke). U gornjem
primeru smo u datoteci KUPCI imali jedno polje identifikacioni broj, koje je sluilo
jednistvenu identifikaciju sloga. To znai da datoteka KUPCI ne moe da sadri dva
sloga sa istim identifikacionim brojem. Jedno ili vie polja datoteke iji sadraj se ne
sme ponoviti u drugim slogovima nazivaju se potencijalnim kljuevima datoteke.

Kljuevi su dakle jedinstveni za svaki slog i mogu sluiti za njihovo pretraivanje i


lociranje . O upotrebi kljueva bie vie rei kada se budu razmatrale razliite vrste
organizacije datoteka.
Dodavanje slogova
Kada u ve postojeu datoteku koja sadri slogove treba dodati slog sa podacim, tada
se operacija dodavanja vri upisivanjem novog sloga, ato znai da datoteku treba
otvoriti, locirati mesto gde e novi slog biti dodat, upisati slog i zatvoriti datoteku.
Ponovo imamo pitanje lociranja mesta gde e slog biti upisan. Mesto zapisa novog
sloga zavisi od vrste organizacije datoteke, to emo razmatrati uskoro.
Promena sadraja sloga
Ponekad je potrebno izmeniti sadraj jednog ili vie polja u nekom slogu datoteke. Ta
operacija je delikatna sa vie aspekata. Poseban problem predstavlja promena onih
polja koji sainjavaju klju datoteke, jer to moe da izazove neeljene posledice
(pojavljivanje slogova sa istim kljuem, naruavanje ureenosti datoteke, i sl.). Sama
operacija bi se promene sadraja bi se mogla odvijati na sledei nain: uitati slog koji
se menja, izvriti zamenu polja, bisati slog iz datoteke, dodati sloga sa izmenjenim
poljima u datoteku. Ovakav scenario se najee i primenjuje pri promeni (auriranju)
slogova datoteke.
Organizcija datoteka
Postoji vie razlitih tipova logike organizacije datoteka. Svaki od tih tipova ima
svoje prednosti i nedostatke i svaki od njih je pogodniji od drugih za neke specifine
primene. Pravilan izbor organizacije datoteka presudno utie na ukupnu efikasnost
obrade podataka.
Slede etiri glavne organizacije datoteka koje e biti i ukratko opisane:
1)
2)
3)
4)

Datoteke sa serijskim pristupom (Serijske datoteke)


Datoteke sa sekvencijalnim pristupom (Sekvencijalne datoteke)
Datoteke sa direktnim pristupom (Direktne datoteke)
Datoteke sa indeks-sekvencijalnim pristupom (Indeks-sekvencijalne datoteke)

Mogue su i druge varijacije ovih osnovnih tipova datoteka, ali mi se njima neemo
baviti.
Serijske datoteke
Osnovna karakteristika serijskih datoteka je da se slogovi u datoteci upisuju jedan za
drugim bez nekog logikog redosleda (najee onako kako podaci pristiu u
vremenskoj seriji). Takva organizacija se najee primenjuje kada se podaci
prikupljaju sa raznih lokacija (izvora) tokom nekog vremenskog perioda. Oni se tada
najee memoriu (upisuju u datoteku) sa namerom da budu obraeni u nekom
kasnijem trenutku (kada pristignu svi oekivani podaci). Sledea slika ilustruje
serijsku organozaciju.

Pointer na slog

Slog N-1

Slog N

polje 1

polje 2

Slog N+1

polje 3

Slog N+2

Slog N+3

polje 4

Serijske datoteke se obino obrauju tako to se slogovi itaju redom od prvod do


poslednjeg. One takoe mogu biti koriene kao priprema za formiranje ureenih
datoteka iji opis sledi.
Sekvencijalne datoteke
Kada elimo da datoteka ima neki logian redosled slogova onda nam sekvencijane
datoteke pruaju jednu takvu mogunost. Na primer, bankovne raune u datoteci
moemo smetati u rastuem redosledu broja rauna, podatke o studentima moemo u
slogovima koji su poreani u po azbunom redosledu imena studenata, ili pak po
rastuem redosledu broja indeksa.
Upravo na primeru studenata vidimo znaaj kljua datoteke. Dok u koli moemo
imati vie studenata sa istim imenom i prezimenom, broj indeksa je jedinstven za
svakog studenta i predstavlja klju datoteke.
Sekvencijalne datoteke su jako efikasne za takozvanu be (batch) obradu podataka,
kao to je sluaj kod obrauna rauna za komunalne usluge (struja, voda, itd.). Pri be
obradi se pristupa svim slogovima datoteke u redosledu koji je odreen kljuem, vri
se odgovarajua obrada podataka iz sloga (obraun potronje vode ili stuje) i tampaju
izvetaji (rauni, fakture, statistiki pokazatelji, itd.)
Sledea slika ilustruje sekvencijalnu organizaciju podataka.
Pointer na slog

Slog N-1

Slog N

polje klju

polje 2

Slog N+1

polje 3

Slog N+2

Slog N+3

polje 4

Sekvencijalna organizacija nije pogodna za pojedinanu obradu slogova. Na primer,


ako nam iz neke datoteke koja ima N slogova treba samo jedan slog da bi nad njim
izvrili neku operaciju (brisanje, izmena podataka, obrada podataka iz sloga), onda je
u proseku potrebno N/2 uitavanja slogova da bi uitali eljeni slog. Za veliko N (npr.
milion) to bi moglo da rezultira u veoma neefikasnom radu.
4

Direktne datoteke
Direktne datoteke upravo reavaju problem individualnog pristupa slogovima. Kod
direktne organizacije slogovima se pristupa direktno, bez itanja predhodnika
traenom slogu. To se postie na taj nain to se uspostavlja veza izmeu kljua i
logike (fizike) adrese u memoriji na kojoj se slog sa datim kljuem nalazi. Ovavrsta
organizacije moe se ilustrovati sledecom slikom.
Memorija
Logike adrese
Adresa N-1
Adresa N
Adresa N+1
Adresa N+2
Adresa N+3

polje 1
polje 1
polje 1
polje 1
polje 1
polje 1

polje 2
polje 2
polje 2
polje 2
polje 2
polje 2

polje3
polje3
polje3
polje3
polje3
polje3

polje4
polje4
polje4
polje4
polje4
polje4

pointer na
tekui slog

Uspostavljanje veze izmeu kljua i adrese se moe vriti na vie naina. Najee se
koristi heing metoda o kojoj je ve bilo rei pri definisanju he tabela u predhodnom
predavanju. Direktna organizacija zahteva i da ureaj za memorisanje podataka ima
mogunost direktnog pristupa (diskovi imaju tu mogunost, dok na trakama moemo
uvati samo serijske i sekvencijalne datoteke).
Za razliku od sekvencijalnih datoteka, gde su slogovi poreani u nekom logikom
redosledu, kod direktnih datoteka slogovi su rasuti po memoriji bez ikakvog logikog
reda (ve onako kako transformacija kljua u adresu zahteva). Zato su nepogodne za
be obradu.
Indeks-sekvencijalne datoteke
Indeks sekvencijalne datoteke imaju za cilj da pomire prednosti i nedostatke
sekvencijalnih i direktnih datoteka. Drugim reima, kod indekssekvencijalne
organizacije slogovima se moe efikasno pristupati i sekvencijalno i direktno. U cilju
postizanja takve organizacije uvode se pomone datoteke koje sadre indekse za lake
pronalaenje slogova (setite se indeksa na kraju knjige koji olakavaju pronalaenje
karakteristinih rei koje se u klnizi pojavljuju).
Indeks-sekvancijana datoteka se zapravo sastoji od jedne sekvencijalne (po kljuu
ureenje datoteke) i jedne pomone datoteke indeksa, kao to to ilustruje sledeca
slika.

Index
0
1
2
3
...
9

Sekvencijalna datoteka
Adersa sloga
Adresa N
Adresa N+1
Adresa N+2
Adresa N+3
Adresa N+4
Adresa N+5
...
Adresa N+k

klju
0012345
0023456
1087976
1999808
2890778
2898999
9002010

polje 1
polje 1
polje 1
polje 1
polje 1
polje 1
polje 1
polje 1
polje 1

polje 2
polje 2
polje 2
polje 2
polje 2
polje 2
polje 2
polje 2
polje 2

polje3
polje3
polje3
polje3
polje3
polje3
polje3
polje3
polje3

Ovakvom organizacijom se obezbeuje da se slogovima datoteke moe pristupati


sekvencijalno jer su slogovi upisani u sekvencijalnu datoteku u recimo rastuem
reodsledu kljua (kao na slici). S druge strane, kad elimo da pristupimo jednom slogu
sa odreenim kljuem, tada najpre pogledamo kojem indeksu tak klju odgovara pa
sledei pointer iz indeksne datoteke pristupamo grupi slogova u kojoj se moe nai
slog sa traenim kljuem. Unutar te grupe pristupamo slogovima redom, pa ili
pronaemo traeni slog ili zakljuimo da takav slog (sa zadatim kljuem) nije u
datoteci.
Datoteke su obino u novije vreme zapravo najee delovi baze podataka. Drugim
reima baze podataka se obino sastoje od vie datoteka ureenih na jedan od
predhodno opisanih naina. Zato i softver za podrku radu sa bazama podataka, tzv
DBMS (database management software) kao to je Oracle, SQL ili neki drugi, u sebi
sadre sve potrebne elemente za kreiranje, brisanje, modifikaciju kao i obradu
podataka u datotekama koje ine bazu. Programski jezici obino ne sadre takve
mogunosti kao inherentne karakteristike jezika, ve obino uz takve jezike idu
bibiloteke potprograma (klasa, funkcija, procedura) koje programerima omoguavaju
manipulaciju podacima u bazama podataka. To su tzv. ODBC (Open Database
Connectivity) drajveri.
Kako su datoteke (u bazama podataka) osnovni resurs koji sadri velike i znaajne
podatke u svakoj poslovnoj strukturi, to njihova organizacija, aurnost i obrada
znaajno doprinose ukupnoj produktivnosti poslovnog sistema. Danas, kada poslovni
sistemi prelaze ne samo granice zemalja ve i kontinenata, nije redak sluaj da se
datoteke jedne kompanije nalaze na vie lokacija irom sveta i da obuhvataju velike
koliine informacija (reda tetra bajta).
Zbog znaaja koje podaci imaju u poslovanju svake kompanije posebna panja se
poklanja integritetu, sigurnosti i zatiti podataka (datoteka).
Pod integritetom se podrazumeva spreavanje greake na unosu, greake u proceduri,
programskih greaka, virusa, greake u prenosu. To se postie permanentnom
validacijom i verifikacijom podataka kojom se utvruje integritet, kao i raznim
metodama za uspostavljanje naruenog integriteta.

Sigurnost datoteka se bavi pitanjima sluajnih oteenja, namernih oteenja,


ilegalanog pristupa i sl. Poveanje sigurnosti podataka postie se razliitim merama
kao to su ogranienje pristupa podacima putem lozinki, strogo potovanje procedura
za promenu podataka, uvanje kopija (back-up), firewall-ove, pa sve do fizike zatite
pristupa prostoru i opremi na kojoj se uvaju podaci.
Zatita datoteka ukljuuje takoe i kriptografiju i antivirusne mere.
Detaljan opis nekih od najeih procedura kao to su sortiranje i meryovanje
datoteka, kao i primere obrade moete nai u knjizi Projektovanje programa,
N.Markovi, BP 2001.

Pitanja
1. Definiite sledee izraze povezane sa datotekama: Character, Field, Record, File.
2. Po emu se datoteka razlikuje od drugi struktura podataka?
3. ta je to slog?
4. ta je polje?
5. Koje su etiri osnovne organizacije podataka?
6. ta je serijska datoteka?
7. ta je sekvencijalna datoteka?
8. ta je klju datoteke?
9. Koji tipovi datoteke se mogu organizovati na magnetnoj traci?
10. ta je direktna datoteka?
11. ta je indeks-sekvencijalna datoteka?
12. Koje se tipine operacije izvravaju nad datotekama?
13. Kako se kreira datoteka?
14. ta znai aurirati datoteku?
15. Kakvi se problemi mogu javiti pri auriranju sekvencijalne datoteke?
16. ta znai sortiranje datoteke?
17. ta je merdovanje datoteka?
18. ta su master i transakcione datoteke?
19. Kako se moe spreavati neautorizovan pristup podacima?
20. Kako se moe detektovati neautorizoban pristup podacima?
21. Kako se podaci mogu zatititi od unitenja?
22. Kako kriptografija pomae zatitu podataka?
23. Kako virusi mogu uticati na podatke?

9. Algoritmi
Nakon ovog predavanja vi ete biti u stanju da:
1. definiete termin algoritam
2. navedete osnovne karakteristike algoritama
3. opiete ta se podrazumeva pod nizom (sekvencom)
4. opiete if ... then i if ... then ... else konstrukciju
5. opiete dowhile I whiledo konstrukciju
6. navedete razliite naine izraavanja algoritama
7. objasnite ta se podrazumeva pod terminom "varijabla"
8. objasnite ta se podrazumeva pod pojmom tip varijable (data type)
9. objasnite ta su to pravila za davanje imena varijablama
10. opiete strategiju projektovanja algoritama

ta je to algoritam?
Poznati programerski istraiva i profesor Niklaus Wirth je dao ovakvu definiciju:
Programs = Algorithms + Data
Jo u prvom predavanju vam je predstavljen pojam programa i podataka, ali ta je sad to
algoritam?
Algoritam je osnovno reenje problema na kome se zasniva program ili plan za izradu
programa, ili se moe rei da je algoritam:
"Efektivna procedura za reavanje problema u konanom broju koraka."
Efektivna zapravo znai da su koraci koje procedura definie izvodljivi i jasno definisani.
Veoma je vano da je broj tih koraka konaan tj. da se procedura odvija u konanom
vremenu. Dobro projektovan program mora uvek dati odgovor, taj odgovor nam se ne
mora uvek svideti, ali on mora biti dat u konanom vremenu. Ponekad se deava da nama
odgovora. To je u raunarskoj teoriji poznato kao HALTING problem. Meutim , dobro
projektovani programi moraju imati reenje i za takve sluajeve, tj. moraju garantovati
zavretak u konanom broju koraka.

Osnovne elementi (konstruktori) algoritama


Evo najpre jednog jednostavnog algoritma za spremanje aja:
1.
2.
3.
4.

Ako u ajniku nema vode napunite ajnik vodom


Stavite ajnik na poret i ukljuite odgovarajuu ringlu.
Ako olja za aj nije prazna ispraznite je.
Stavite lie aja u olju za aj.

5. Ako voda u ajniku nije provrela idite na korak 5, ako jeste idite na korak 6.
6. Iskljuite ringlu.
7. Sipajte vodu iz ajnika u olju (pazite da ne prelijete).
Zapaamo da ovaj algoritam ima vie koraka, da neki od koraka (1,3 i 5) sadre
donoenje odluka, da jedan korak (5) sadri ponavljanje u kome se izvrava proces
ekanja na vodu da provri.
Algoritam sadri tri elementa:
1. Sekvencu niz (proces)
2. Odluivanje (selekcija)
3. Ponavljanje (repeticija, iteracija, ciklus, petlja)
Godine 1964 matematiari Corrado Bohm i Guiseppe Jacopini pokazali su da se svaki
algoritam moe izraziti pomou sekvence, odluke i ponavljanja. To je poznato kao
teorema o programskoj strukturi i predstavljalo je veoma vaan korak ka
strukturalnom programiranju koje je danas u upotrebi.

Sekvenca (niz operacija)


Sekvenca znai da se svaki korak sekvence izvrava u unapred datom redosledu onako
kako se pojavljuju u sekvenci, jedan za drugim. U predhodnom algoritmu svaki korak
mora biti uraen u zadatom redosledu. Ako bi promenili redosled koraka to bi moglo da
dovede do pogrenih (ponekad i tragikominih) rezultata.

Odluka (Selekcija)
U algoritmima rezultat odluke je ili tano ili netano, nema nita izmeu. Rezultat odluke
se bazira na nekoj tvrdnji (logikom iskazu) koja moe da ima vrednost tano ili netano,
na primer:
if danas je sreda then uzmi platu
je odluka koja ima sledei oblika:
if tvrdnja then proces
Tvrdnja (iskaz) je neka reenica koja moe biti tana ili netana, tako je tano da danas
je sreda ili je netano da danas je sreda. To ne moe biti istovremeno i tano i netano,
niti neto tree. Ako je tvrdnja tana tada se izvrava proces koji sledi iza rei then. Ako
tvrdnja nije tana prelazi se na sledeu instrukciju bez izvravanja procesa posle rei
then.
Odluka moe da ima i neto sloeniji oblik:

if tvrdnja
then proces1
else proces2
to je oblik if ... then ... else .... Ovo znai da ako je tvrdnja tana tada se izvrava proces1
a ako je netana proces2.
U onom prvom obliku odluke if tvrdnja then proces u else delu nema procesa pa zato ni
else nije potrebno.

Ponavljanje (Iteracija)
Ponavljanje ima dva oblika: dowhile ciklus i while..do ciklus.
Repeat ciklus se koristi za ponavljanje procesa ili niza procesa sve dok tvrdnja iz uslova
ponavljanja ne postane tana. Repeat ciklus ima sldei oblik:
do
Proces1
Proces2
.............
ProcesN
while tvrdnja
Evo jednog primera
do
Sipaj vodu u ajnik
while ajnik nije pun
Proces je Sipaj vodu u ajnik, a uslov za nastavak ciklusa ajnik nijeje pun.
dowhile ciklus obavi (bar jednom) proces pre testiranja da li je uslov zavretka ciklusa
ispinjen. ta e se desiti u predhodnom primeru ako je ajnik ve bio pun kada je ciklus
zapoet? Doi e do neeljenog procesa koji e izazvati prelivanje vode iz ajnika.
Za takve sluajeve pogodnije je koristiti whiledo ciklus:
while ajnik nije pun
Sipaj vodu u ajnik
Poto se odluka da li je ajnik pun ili ne donosi pre sipanja vode, mogunost prelivanja je
eliminisana.

Razliiti naini izraavanja algoritama


Jedan nain izraavanja algoritma smo videli maloas taj nain emo zvati forma
deskriptivnih koraka. Tokom predavanja prouiemo etiri razliite forme izraavanja
algoritama:
1.
2.
3.
4.
5.

Korana-forma
Pseudokod
Dijagram toka
Nassi-Schneiderman (NS) forma
Jackson-ovi strukturni dijagrami (JSD) forma

Prve dve su pisane forma. Primer pravljenja aja je tipian primer Korane forme (StepForm) gde smo za izraavanje algoritma koristili prirodan jezik. Problem sa prirodnim
jezikom je u tome to ponekad moe biti neprecizan. Tako se moe desiti da ono to
jedan ovek napie drugi proita sa sasvim drugim tumaenjem. Pseudokod je takoe
vrlo slian prirodnom jeziku ali mnogo precizniji i sa ogranienim renikom.
Posldenja tri naina izraavanja algoritama su grafiki, to jest u njima se koristi meavina
grafikih simbola i pisanih rei da se predstave sekvenca, odluka i ponavljanje.
U sledeem predavanju emo se baviti ovim razliitim nainima izraavanja algoritama, a
sada emo najpre prouiti dve vane teme.

ta su to varijable?
Poto je Programs = Algorithms + Data vraamo se na temu podataka. Kako smo ve
rekli podatak je simboliki prikazana vrednost koja u programskom kontekstu dobija i
znaenje znai u programu se podatak transformie u informaciju. Pitanje glasi: Kako
se podaci predstavljaju u programima?
Skoro svaki program sadri podatke, a podaci se obino sadre u varijablama. Tako
varijablu moemo shvatiti kao kontejner za vrednosti koje mogu da se menaju tokom
izvravanja programa. Na primer, u naem primeru za pravljenje aja nivo vode u ajniku
je jedna varijabla, temperatura vode je varijabla, a i koliina lia je, takoe, varijabla.
Svakoj varijabli u programu se daje posebno ime, na primer:

Nivo_Vode
Temperatura_Vode
Koliina_Listova_aja

i u svakom datom trenutku vrednost koja je predstavljena varijablom Nivo_Vode moe


biti razliita od vrednosti iste varijable u nekom drugom trenutku. Instrukcija:

If ajnik ne sadri vodu then napuni ajnik

moe biti napisana i ovako:

If Nivo_Vode je 0 then napuni ajnik

If Nivo_Vode = 0 then napuni ajnik

ili

U nekom trenutku Nivo_Vode e dostii dozvoljeni maksimum, ma koliki on bio, i tada


je ajnik pun.

Varijable i tipovi podataka


Podaci koji se koriste u algoritmima mogu biti razliitog tipa. Najprostiju tipovi podataka
su:

numeriki podaci kao to su 12, 11.45, 901.


alfabetski (slovni) podaci (karakteri) kao to su 'A', 'Z' ili 'Ovo je alfabetski niz'.
logiki podaci sa TRUE, FALSE vrednostima.

Davanje imena varijablama


Uvek treba da se trudite da varijablama u algoritmu date smislena imena to e algoritam
(i program) uiniti itljivijim i razumljivijim. To je posebno vano kod velikih i
kompleksnih programa.
U algoritmu za pravljenje aja koristili smo prirodan jezik. Pokazaemo kako se mogu
koristiti imena varijabli za varijable tog algoritma. U desnoj koloni smo izabrali imena
varijabli koja iako kraa od originalnih ne umanjuju znaenje. Donja crta u nazivu
varijable treba da oznai da sve rei predstavljaju jednu jedinstvenu celinu kojom se
predstavlja data varijabla.
1. Ako u ajniku nema vode napunite
ajnik vodom
2. Stavite ajnik na poret i ukljuite
odgovarajuu ringlu
3. Ako olja za aj nije prazna ispraznite je.
4. Stavite lie aja u olju za aj.
5. Ako voda u ajniku nije provrela idi na
korak 5
6. Iskljuite ringlu

1. If ajnik_prazan then napuni ajnik


2. Stavite ajnik na poret i ukljuite
odgovarajuu ringlu
3. If olja_nije_prazna then isprazni olju
4. Stavite lie aja u olju za aj.
5. If voda_ne_vri then idi na korak 5
6. Iskljuite ringlu

7. Sipajte vodu iz ajnika u olju

7. Sipajte vodu iz ajnika u olju

Ne postoje neka stroga pravila kao treba davati imena varijablama, ali postoje odreene
konvencije i preporuke. Dobro je da se usvojite neku od tih preporuka i da je onda
dosledno koristite.
Uz put slina preporuka se moe dati i za davanje imena procesima, takoe. To sve ini
va program itljivijim i razumljivijim, a time pogodnijim za odravanje i dalje
unapreivanja - to znai da pomae produetku ivotnog ciklusa programa.

Strategija projektovanja algoritama


Sada kada znamo poneto o algoritmima u stanju smo da razmatramo i strategiju za
projektovanje algoritama. Evo jedne takve strategije koja moe da bude korisna:
Korak 1: Istraivaki korak
1.
2.
3.
4.

Identiifikovati procese
Identifikovati glavne odluke
Identifikovati ponavljanja
Identifikovati varijable

Korak 2: Izrada preliminarnog (grubog) algoritma


1. Izrada algoritma vieg nivoa
2. Proi kroz algoritam misaonom simulacijom. Ako simulacija otkrije probleme
ispraviti algoritam.
Korak 3: Izrada finalnog (detaljnog) algoritma
1.
2.
3.
4.

Do detalja razraditi grubi algoritam napravljen u koraku 2.


Grupiite procese koji se mogu grupisati
Grupiite varijable koje se mogu grupisati
Testirajte algoritam simulacijom korak po korak.

Ovu strategiju emo stalno koristiti, ali za momenat emo se baviti samo opisom
navedenih koraka.
Prvi korak Istraivanje zahteva paljivo prouavanje definicije problema koji se
reava, kao i detaljnu analizu termina i pojmova koji se u toj definiciji koriste. U primeru
sa pravljenjem aja uoavamo niz procesa punjenje ajnika, stavljanje na ringlu i tako
dalje. Tu su takoe odluke i varijable.
Drugi korak Preliminarni algoritam je prvi pokuaj reavanja problema. taj prvi
pokuaj moe biti i veoma grub, ponekad i nepravilan, ali e korak 2.2 otkriti sve
nedostatke i pomoi da se doe do korektnog reenja.

Trei korak Finalizacija je i najtei, zahteva iskustvo, strpljenje i preciznost. takoe je


za uspenu realizaciju ovog koraka potrebno vladanje nekim programerskim vetinama
koje se stiu samo dugotrajnim praktikovanjem vebanjem. U pragmatinom delu
ovog predmeta, kada se izuava specifian programski jezik (Visual Basic ili C++) takva
praktina znanja i vetine bie razvijene do novoa samostalnog razvoja programa od ideje
do gotovog izvrnog programa.
Sada emo analizirati jedan neto sloeniji problem i algoritam kojim se on reava.
Problem stabilnih parova
Pretpostavimo da u jednom gradu na jugu Srbije imamo n mladia i n devojaka. Svi se
moeusobno poznaju, jer to je jedno malo mesto. Svaki mladi ima rang listu svih
devojaka iz tog gradia, tako da se na toj listi na prvom mestu nalazi deveojka koja mu se
najvie svia, a na poslednjem n-tom mestu devojka koja mu se najmanje svia. Istu
takvu listu imaju i sve devojke, ali sa rang listom svih n mladia. Te liste su nam unapred
poznate na neki nain (Radio Milevom).
Cilj nam je da oenimo momke i devojke tako da svi budu sretni, a da brakovi budu
stabilni. Videemo uskoro ta pod tim podrazumevamo.
Definicija. Skup brakova je stabilan ako ne postoji par mladi-devojka koji se jedno
drugom sviaju vie nego njihovi brani drugovi.
Na primer, pretpostavimo da su Marko i Jovana u jednom, a Petar i Milica u drugom
braku. Na nesreu Jovani se vie svia Petar nego Marko, a Petru se svia vie Jovana
nego Milica. Ovo znai da bi Jovana i Petar bili sreniji da su zajedno. To moe da bude
razlog za branu prevaru, pa se njihovi brakovi mogu smatrati nestabilnim.
Matematiki se moe dokazati da uvek postoji stabilno uparivanje mladia i devojaka,
takvo da ne postoji ni jedan nestabilan par. (Takoe se moe matematiki dokazati da ne
postoji stabilno uparivanje ako bi dozvolili da se brano uparuju osobe istog pola.).
Veoma je interesantno da ovaj algoritam u SAD-u ima jednu veoma praktinu primenu.
Tamo se svake godine svreni studenti medicine upuuju (mladii) na praksu u bolnice
(devojke) upravo korienjem ovog algoritma. Inae, algoritam su prvi put opisali D.
Gale i L.S. Shapley 1962 godine.
Hajdemo sada da problem razmotrimo na jednom konkretnom sluaju 5 devojaka i 5
mladia. Mladie emo oznaiti brojevima 1-5, a devojke slovim A-E. Sledea tabela
pokazule njihove rang liste.

mladii

devojke

1: CBEAD

A : 35214

2: ABECD

B : 52143

3: DCBAE

C : 43512

4: ACDBE

D : 12345

5: ABDEC

E : 23415

Pokuajmo najpre jednu prostu ( grabljivu ) strategiju. Krenimo redom od prvog mladia
i svima dajmo devojku koja je najvie kotirana na njegovoj listi, a jo uvek je
raspoloiva. To bi nam dalo sledei rezultat uparivanja:
1

Da proverimo stabilnost ovako napravljenih parova. Mladii 1, 2 i 3 su dobili svoje


omiljene devojke, tako da im nee pasti na pamet da jure za drugima. Mladi 4 moe biti
problematian jer mu se vie svia devojka A od one koju je dobio (B), ali je devojka A
njega stavila na poslednje mesto, tako da to nije problem. Meutim mladiu 4 se vie
svia i devojka C one koju je dobio, a devojci C se on takoe vie svia od onog kojeg je
ona dobila (1). Znai mladi 4 i devojka C su potencijalni brakolomci. Uparivanje je,
dakle, nestabilno. Mogli bi sada da pokuamo da nekom kombinatorikom to popravimo,
ali bi pri tom mogli da formiramo druge nestabilne parove, i da vrtei se u krug ne
naemo reenje. I to za samo 5 parova. A, ta bi bilo da je 100-tinak (ili vie) parova u
pitanju. Izgleda kao nemogu zadatak. Ali, generalno reenje postoji i to veoma
elegantno.
Algoritam
Sada emo opisati jedan algoritam koji se odvija u nekoliko dana i koji dovodi do
stabilnog uparivanja.

Svakod dana se ponavlja sledei ritual (scenario):


Jutro: Svaka devojka izae na svoj balkon. Svaki mladi doe ispod balkona devojke
koja je na prvom mestu njegove rang liste i peva joj serenadu. Ako mladiu nije ostala ni
jedna devojka u listi, on ostaje kod kue ( i radi domae zadatke iz programiranja).
Popodne: Svaka devojka koja ispod svog balkona ima udvarae (koji pevaju serenade),
jednom od njih koji je najvii na njenoj rang listi kae: Moda, doi sutra., a svim
ostalima kae: Nikad se neu udati za tebe. etaj.
Uvee: Svaki mladi koji je dobio korpu iz svoje liste brie devojku kod koje nema
nikakve anse.
Kada posle nekoliko dana ujutro ispod svakogbalkona bude samo po jedan mladi,
devojke uzimaju te mladie i tako se formiraju parovi. Tako formirani parovi bie stabilni
u skaldu sa naom definicijom stabilnosti. Tu je i kraj naeg algoritma. Algoritam sadri
sve tri vrste koraka: sekvencu, selekciju i repeticiju.

Sie predavanja
U ovom predavanju ste saznali o:

algoritmima i nihovim osnovnim elementima sekvenci, odluci i ponavljanju


razliitim nainima prikaza algoritama
varijablama, tipovima varijabli i konvencijama za davanje imena varijablama
strategiji projektovanja algoritama

Algoritam je zapravo plan (scenario) kako e problem biti reen, a skoro svi algoritmi
imaju iste osobine i sastavljeni su od istih elemenata (teorema o strukturi). Postoji vie
naina za izraavanje (prikazivanje) algoritama, a neki od tih naina su ovde pomenuti.
Svaki algoritam koristi podatke koji se mogu menjati tokom rada algoritma. Za
projektovanje (izradu) algoritma dobro je imati strategiju. Jedna mogua strategija
prikazana je u ovom predavanju.
Sada ste ve spremni za projektovanje programa, ali pre toga u narednom predavanju
baviemo se jednom temom koja projektovanje programa stavlja u iri kontekst
projektovanja softverskih sistema i softversko inenjerstvo uopte.

Pitanja
1. Definiite pojam algoritam.
2. ta se podrazumeva kad kaemo da je neki algoritam efektivan?
3. Kakvo je znaenje rei konaan u vezi sa algoritmima?
4. Navedite tri osnovna elementa algoritama.
5. Koja su to dva konstruktora odluke?
6. ta je to tvrdnja?

7. Koja su to dva konstruktora ponavljanja?


8. Navedite etiri naina prikazivanja algoritama.
9. ta je to varijabla?
10. Dajte neki primer varijable iz svakodnevnog ivota.
11. ta je to tip podatka?
12. Navedite tri osnovna tipa podatka koji se mogu pojaviti u algoritmima.
13. U predavanju je prikazana jedna strategija za projektovanje algoritama. Navedite
osnovne korake te strategije. Moete li napraviti neku svoju strategiju - opiite.

10 . Razvoj algoritama
Prevalili smo polovinu semestra i vreme je da napravimo malu rekapitulaciju
preenog i preostalog puta.
Podaci
Iscrpno smo se bavili podacima, analizirajui razliite vidove u kojima se oni javljaju
(tekstualni, numeriki, zvuni, grafiki, video, itd.), analizirajui naine na koji se
podaci memoriu u raunarima (bitovi, bajtovi itd.), tipove podataka (int, char, float,
pointer, itd...) i strukture podataka ( nizovi, liste, stekovi, redovi, grafovi, he tabele,
datoteke), to sve zajedno ini osnovu za kompleksnu primene raunara za reavanje
razliitih problema u raznim domenima primene (tehnici, biznisu, medicini, upravi,
itd...)
ivotni ciklus softvera - Software Development Life Cycle (SDLC)
Razvoj i proizvodnja softvera je jedna od danas najatraktivnijih poslovnih sfera. Setite
se samo da je vlasnik Microsofta dugo godina prvi na listi najbogatijih ljudi na svetu,
a njegova kompanija prodaje softverske proizvode (Windows operativne sisteme i
drugo) u stotinama miliona primeraka irom sveta.
Razvoj i proizvodnja softvera je sloen zadatak, koji zahteva visoko kvalifikovane
ljude, vrhunsku organizaciju posla, vrhunski marketing i menadment.
Mi emo se detaljnije bavit fazama kroz koje svaki softverski proizvod prolazi od
ideje o proizvodu do njegove realizacije, upotrebe, zastarevanja i nestajanja. Sledea
slika ilustruje taj ciklus.

Slika 10.1 ivotni ciklus softvera

Svaka od faza zahteva posebnu metodologiju, posebno obuene ljude za tu fazu i


posebne tehnike rada.
Nae teite bie na Fazi 3 Razvoju algoritama jer to i jeste naa osnovna tema.
Meutim moraemo se, bar delimino, baviti i svim drugim fazama.
Pojam algoritma (programa)
Podsetiemo se na neke osnovne pojmove koje smo definisali u poglavlju 9.
Dali smo jednu intuitivnu definiciju algoritma ( Efektivna procedura kojok se reava
neki problem u konanom broju koraka). Veza izmeu programa, algoritma i
podataka najbolje se odslikava formulom (Niklaus Wirth, autor jezika Pascal):
Program = Algoritam + Podaci
gde se pod programom podrazumeva algoritam izraen u nekom konkretnom
programskom jeziku (C, C++, C#, Java, Cobol, Basic, itd.).
Teorema o programskoj strukturi
Analizirajui razne algoritme Bohm i Jacopini su uoili da se svaki algoritam moe
izraziti sa sledee tri vrste koraka.
1. Sekvenca - proces
2. Odluka - selekcija
3. Ponavljanje - repeticija, iteracija, ciklus, petlja
O ovim osnovnim algoritamskim strukturama bilo je rei u poglavlju 9. Ovde se samo
podseamo na njih jer one predstavljaju korake koji se mogu nai u svakom
algoritmu.
Izloiemo sada jednu optu metodologiju (strategiju) za razvoj algoritama. Naravno,
ovo nije jedina metodologija, ali se pomou nje jasno ilustruje proces razvoja
algoritama.

Strategija razvoja algoritama


Korak 1: Istraivaki korak
o Identiifikovati procese
o Identifikovati glavne odluke
o Identifikovati ponavljanja
o Identifikovati varijable
Korak 2: Izrada preliminarnog (grubog) algoritma
o Izrada algoritma vieg nivoa
o Proi kroz algoritam misaonom simulacijom. Ako simulacija otkrije
probleme ispraviti algoritam.
Korak 3: Izrada finalnog (detaljnog) algoritma
o Do detalja razraditi grubi algoritam napravljen u koraku 2.
o Grupiite procese koji se mogu grupisati
o Grupiite varijable koje se mogu grupisati
o Testirajte algoritam simulacijom korak po korak.
Metode prikazivanja algoritama
Sada emo se baviti sa nekoliko najrasprostranjenijih tehnika (naina) za prikazivanje
algoritama. Jedan od naina smo ve koristili u primeru Stabilni parovi. Re je o
opisnom prikazu algoritma korienjem prirodnog (srpskog, engleskog ili nekog
drugog ) jezika.
Sledi lista tehnika koje emo prouiti:
o
o
o
o
o

Prirodni jezik (korana forma)


Dijagrami toka (Flowcharts)
Pseudo kod (Pseudo cod)
Nasi-najderman dijagrami (Nassi-Sneiderman N/S diagrams)
Deksonovi Strukturalni dijagrami (Jackson Structured Diagrams JSD)

Za svaku od navedenih tehnika, pored opisa, daemo i kratak komentar o uzajamnim


prednostima i nedostacima.
Prirodni jezik
Ovom tehnikom se algoritam prikazuje kao niz brojem oznaenih koraka. Svaki korak
se sadri jednu ili vie reenica prirodnog kezika (srpskog, na primer) kojim se
opisuje proces (operacija) koju u tom koraku treba izvriti.
Evo jednog jednostavnog primera:
Problem: Prikazati (na monitoru raunara, na primer) dvostruku vrednost broja koji je
predhodno unet u raunar (pomou tastature, na primer).

Algoritam u priprodnom jeziku:


1.
2.
3.
4.

Traiti od korisnika da uz pomo tastature unese broj.


Uitati broj koji korisnik ukuca na tastaturi.
Pomnoiti uitani broj sa brojem 2.
Prikazati rezultat operacije iz koraka 3 na monitoru raunara.

Sekvenca se prikazuje jednostavno ninizanjem koraka jedan za drugim, pri ;emu svaki
korak dobija redni broj u redsledu kojim treba da se iyvravaju.
Odluka se pprikazuje opisom uslova i uputstvom na koji korak se ide za sluaj da je
uslov ispunjen, a na koji korak kada uslov nije ispunjen. Na slian nain moemo
izvriti i selekciju iz vie moguih rezultata nekog uslova.
Repeticija iteracija se postie tako to se izvrenje nastavlja nekim korakom koji
ima manji redni broj od onog u kojem se postavlja uslov repeticije.
Prednisti prirodnog jezika:
o Jednostavan za uenje, jer se ionako sluimo prirodnim jezikom.
Nedostaci:
o Koraci su predugaki jer se mora koristitu puno rei za njihov opis.
o Prevoenje iz prirodnog jezika u kompjuterski jezik moe biti teko jer za
razliku od prirodnih jezika, kompjuterski (programski) jezici imaju vrlo
precizno definisanu sintaksu (gramatiku) i semantiku (znaenje).
Dijagrami toka (Flowcharts)
Ova tehnika koristi niz grafikih simbola povezanih usmerenim linijama (strelicama)
kojima se pokazuje sekvenca (niz) u kojoj e koraci opisani grafikim simbolima biti
izvravani. Unutar grafikog simbola upisuje se prirodnim jezikom (ili pseudo
kodom) proces (operacija) koju treba izvriti. Grafiki simboli koji se najee koriste
za prikaza algoritama dijagramom toka su sledei:

Proces

Pravouganik sadri opis procesa (naredbi) koje se


izvravaju jedna za drugom u redosledu kako su napisane.
Nakon to se naredbe (jedna ili vie) izvre nastavlja se sa
sledeim grafikim simbolom koji sledi. Dakle,
pravougaonik odgovara programskoj sekvenci.

Romb predstavlja ili ulaznu ili izlaznu naredbu kojim se


podaci unose u kompjutersku memoriju (ulaz) ili iz
kompjuterske memorije prikazuju na nekom spoljnjem
ureaju (izlaz). Nakon to se naredba ulaza (izlaza) izvri,
algoritam se nastavlja naredbom iz sledeeg simbola.

Ulaz/Izlaz

Dijamant predstavlja proces donoenja odluke.


Odluka sadri pitanje koje obino ima dva odgovora, DA ili
NE, pa se nakon utvrivanja koji od tih odgovora je taan
algoritam nastavlja jednom od dve mogue putanje koje
slede (izlaze) iz ovog simbola.

Odluka

Strelica slui za povezivanje grafikih simbola u smeru


njihog logiki sukcesivnog izvravanja.

Krug koristi se za povezivanje delova dijagranma


toka. Kada dijagram toka ne moe da bude prikazan na jednoj
stranici (to je est sluaj) ovaj znak se koristi za povezivanje delova
dijagrama koji se nalaze na razliitim stranicama.

Oval (elipsa) se koristi za oznaavanje poetka i kraja


algoritma. Oval za start pokazuje gde algoritam zapoinje i
obino sadri re Start, a oval za kraj pokazuje gde se
algoritam zavrava i obino sadri re Kraj.
Oval

Evo kako bi algoritam iz predhodnog primera (prikaz dvostruke vrednosti uitanog


broja) bio prikazan ovom tehnikom:

Start

Poruka

Ulaz-broj

broj=broj*2

Izaz-broj

Kraj

Kako se prikazuje repeticija dijagramima toka?


Kako smo ve videli dijagrami toka imaju simbole za sekvencu (pravougaonik) i
odluku (dijamant). Ali, kao prikazati repeticiju (do...until i while tipa na primer).
To se postie kombinacijom simbola za sekvencu i odluku.

Tako se repeticija tipa:


do {
proces;
}while(uslov)
postie sledeim dijagramom:

Proces

DA
Uslov?

NE

Slino tome repeticija:


while (uslov) {
proces;
}
moe da se izrazi dijagramom toka na sledei nain:

Uslov?

DA

Proces

NE

Prednosti dijagrama toka:


o Grafika prezentacija algoritma olakava pronalaenje logikih greaka u
algoritmu (slika vredi hiljadu rei stara kineska poslovica).
o Postojanje znaka za povezivanje (krug) omoguava veoma lako dodavanje
novig delova algoritma.
6

o Algoritam prikazan grafiki lake se prevodi u programski kod nego to je to


sluaj sa prirodnim jezikom ili pseudokodom.
Nedostaci:
o Treba upamtiti znaenje grafikih simbola.
o Kada postoji mnogo koraka odluke i ponavljanja, dijagram toka moe da se
pretvori u vrlo zamrenu mreu iz koje je teko sainiti valjan programski kod.
Pseudo kod
Ova tehnika je veoma slina prirodnom jeziku s tom razlikom to se umesto prirodnog
jezika koristi neki drugi jezik (slian prirodnom) koji ima precizniju sintaksu, koristi
manji broj unapred zadatih rei, pa je time lake definisati i semantiku (znaenje)
reenica koje se formiraju u tom jeziku. Takav jezik esto podsea i na programske
jezike, to jest on predstavlja kompromis izmeu prirodnog i programskog jezika.
Kompromis u smislu da je dovoljno jednostavan i razumljiv za oveka, a istovremeno
pogodan za dalje transformisanje algoritma u program. Rcimo takav jezik moe
sadrati rei kao to su: display (za prikaz poruke na monitoru), read (za uitavanje
podatka), kao i simbole +,-,*,/,= za korienje u matematikim formulama itd.
Tako na predhodni primer algoritma moe pseudo kodom biti prikazan kako sledi:
1.
2.
3.
4.

display poruka
read broj
rezultat = broj*2
display rezultat

Prednosti:
o Jednsotavan za uenje skoro kao i kod prirodnog jezika.
o Laki za prevoenje u programski jezik, jer kao to je reeno jako podsea
na stvarne programske jezike.
Nedostaci:
o Ova tehnika se oslanja na poznavanje takozvanih imperativnih
(proceduralnih) jezika, pa za one koji se prvi put sreu sa ovom vrstom
jezika moe biti malo zbunjujue mea se prirodni i simboliki jezik.

Nasi-najdermanovi dijagrami (N/S dijagrami)


I kod Nasi-najdermanovih algoritama se koriste grafiki simboli kao i kod dijagrama
toka, ali se ovde itav algoritam stavlja u jedan jedini pragougaonik (boks). Simboli
(koraci algoritma) se izvravaju poev od prvog simbola na vrhu boksa i nastavljaju
redom do poslednjeg na prikazanog dnu boksa. Svaki simbol sadri ili prirodnim
jezikom ili pseudokodom prikazane naredbe (procese).

Postoje tri vrste simbola: za sekvencu, za odluku i za repeticiju, u skladu sa teoremom


o programskoj strukturi.
Simboli su:

Naredba - proces

Pravougaonik koristi se za naredbe koje se izvravaju


jedna za drugom (sekvenca). Kada se sve naredbe iz
pravouganika izvre algoritam se nastavlja sledeim N/S
simbolom.

Uslov?

DA

Naredbe

NE

Naredbe

Uslov?

Naredbe

Simbol za odluku se sastoji od dela u


kojem se nalazi uslov i dva prevougaonika
koji sadre alternativne naredbe ako je
uslov ispunjen (DA) i ako nije (NE). Kada
se izvri odgovarajua naredba algoritam
se nastavlja sledeim N/S simbolom.

Repeticija se sastoji od ulsova i naredbe


(ili niza naredbi) koje se izvravaju sve
dok je uslov ispunjen (while ciklus).
Kada uslov nije ispunjen algoritam
nastavlja rad sledeim N/S simbolom.

Repeticija za sluaj do...while ciklusa izgleda ovako:

Naredbe

Uslov?

U ovom sluaju, za razliku od predhodnog,


Naredbe e biti izvrene pre testiranja da li
je uslov ispunjen. Ako jeste ponavlhja se
iyvravanje Naredbi, a ako nije algoritam
nastavlja rad sledeim N/S simbolom.

Evo kako bi izgledao na standardni primer korienjem N/S dijagrama:


display poruka
read broj
rezultat=broj*2
display rezultat

Prednosti N/S dijagrama:


o Grafika prezentacija algoritma olakava pronalaenje logikih greaka u
algoritmu (kao kod dijagrama toka).
o Lake se prevodi u programski kod nego dijagram toka. Tri programske
strukture (sekvenca, odluka i repeticija) zastupljene su u svim programskim
jezicima.
o Poto nema sterlica kao kod dijagrama toka ne mogu se kreirati zamrene
strukture, ve algoritam glatko sledi logiku reenja.
Nedostaci:
o Moraju se pamtiti grafiki simboli koji predstavljaju sekvencu, odluku i
repeticije.
o Oteano je umetanje novih koraka u ve sainjeni algoritam, a to je bilo lako
kod dijagrama toka (korienjem simbola za konekciju kruga). S drude
strane nastavljanje algoritma na sledeoj strani je jednostavno nacrtate novi
boks a stranu obeleite brojem 2, itd.
Deksonovi strukturalni dijagrami (Jackson Structured Diagrams) JSD
dijagrami
Deksonovi dijagrami slede ideju o podeli problema na niz podproblema manje
sloenosti (strategija poznata kao devide and conquer podeli pa vladaj).
Ali oni takoe zadovoljavaju i teoremu o programskoj strukturi, to jest JSD dijagrami
imaju grafiki simbol za sve tri osnovne komponente algoritma sekvencu, odluku i
repeticiju.

Sledi opis naina na koji se prikazuju ove komponente.


a) Sekvenca

Proces A

Proces B

Proces C

Ovde je proces A sloen proces koji se sastoji od prostih procesa B i C. Da bi se


obavio proces A potrebno je najpre obaviti proces B a onda proces C. Podprocesi se ,
dakle, izvravaju sleva udesno jedan za drugim. Naravno proces A je mogao biti jedan
jednostavan proces koji ne zahteva dalju podelu.
b) Odluka (selekcija)
Proces A

uslov 1

Proces B

uslov 2

Proces C

Odluka se oznaava tako to se proces A deli na procese B i C, ali uslovno, tako da se


proces A ispunjava bilo izvravanjem procesa B (kada je uslov 1 ispunjen) bilo
izvravanjem procesa C (kada je uslov 2 ispunjen). Uoite mali krui u gornjem
desnom uglu pravougaonika procesa B i C. Ti se kruii koriste da se pravougaonik
odluke razlikuje od pravougaonika sekvence.

10

c) Repeticija

Proces A
uslov
Proces B

Repeticija iteracija je sloena komponenta koja se izvrava ponavljanjem nekog


procesa nula ili vie puta u zavisnosti da li je uslov ispunjen ili ne.
Evo kako bi izgledao na primer prikazan JSD dijagramom:
Izraunavanje
dvostruke vrednsoti broja

display poruka

read broj

rezultat=broj*2

display rezultat

Prednosti:
o Grafika prezentacija algoritma olakava pronalaenje logikih greaka u
algoritmu (kao kod dijagrama toka).
o Jednostavniji grafiki simboli nego kod dijagrama toka i N/S dijagrama.
o Sledi logiku reenja podelom na podprobleme.
Nedostaci:
1. Ne uoavaju se lako odluke i repeticije.
2. Prevoenje u programski kod je neto sloenije mora se voditi rauna o
redosledu izvravanja procesa.

11

Pitanja
1. Nabrojte faze u ivotnom ciklusu softvera.
2. Definiite algoritam.
3. Objasnite zato se moe smatrati da je Program=Algorita+Podaci.
4. Kako glasi teorema o programskoj strukturi?
5. Navedite korake u nekoj od strategija za razvoj algoritama.
6. Navedite nekoliko tehnika za prikaz algoritama.
7. Koje su osnovne komponente (grafiki simboli) dijagrama toka?
8. Koje su osnovne komponente (grafiki simboli) N/S dijagrama?
9. Koje su osnovne komponente (grafiki simboli) JSD dijagrama?
10. Navedite komparativne prednosti i nedotatke algoritama izraenih: prirodnim
jezikom, dijagramima toka, pseudokodom, N/S dijagramima, JSD
dijagramima.

12

11 Testiranje algoritama (programa)


Dokaziti da algoritam obavlja zadatak ili reava problem koji je postavljen nije nimalo
lak zadatak. Iako postoje matematike metode za takvo dokazivanje (koje se nazivaju
verifikacija programa) u praksi se najee takve metode ne primenjuju. Umesto toga
pristupa se testiranju programa. Izuzev za veoma jednostavne programe, testiranjem se ne
moe dokazati ispravnost programa. Testiranjem se pokuavaju pronai greke u
programu. No, bez obzira koliko se greaka pronae, uvek postoji mogunost da ih ima
jo. I pored toga to testiranje ne garantuje odsustvo greaka, testirani programi su bolji
nego netestirani.
Kao to je ve reeno u vezi sa ivotnim ciklusom softvera, a i kod strategije razvoja
algoritama, testiranje je veoma vana faza u razvoju svakog algoritma programa.
Naalost, testiranjem se ne moe dokazati ispravnost programa, to jest ne moe se
dokazati potpuno odsustvo greaka, ali se mogu otkriti neke od greaka ako se primeni
pravilan postupak testiranja nad paljivo odabranim testnim podacima.
Cilj testiranja je da se pronau okolnosti pod kojima program (algoritam) daje pogrene
rezultate ili ne da je rezultat uopte (halting problem). Ako ne moemo da pronaemo
takve okolnosti tada moemo imati razumno verovanje da program ispravno funkcionie.
Pravljenje dobrog test plana kojim se potruje ispravnost programa je veoma teak
zadatak. Kada programi imaju hiljade linija koda (koraka) teko je testirati svaku moguu
putanju pri njegovom izvravanju kako bi se proverilo da program ispravno radi u svim
moguim sluajevima. Postoji nekoliko test strategija koje poveati ansu za pronalaenje
greaka (bagova) u programima.
Testiranje bele kutije (staklene kutije)

if total < 6000 then


display(Uneti platu)
read(plata)
total=total+plata
else
display(Uneti ID)
read(id)
endif

Ovu vrstu testiranja moe da obavlja ili programer koji je napisao program ili neko drugi
kome je specijalnost testiranje softvera. Testiranje se naziva bela kutija zato to je
onom ko testira poznat algoritam ili programski kod.

Posmatrajmo sledei primer programa napisanog u pseudokodu:


if podatak < 100 then
print(Loa ocena)
else
if podatak <200 then
display(Moglo je bolje)
else
if podatak <300 then
display(Dobro)
else
display(Vrlo dobro)
endif
endif
endif
Poto osoba koja testira program moe da vidi program onda je u stanju da proveri saki
deo programa tako to e testirati program za razne vrednosti podatka: za manje od 100,
izmeu 100 i 200, izmeu 200 i 300, i na kraju za 300 ili vie od 300.
Za testiranje programa pored uobiajenih biraju i takozvane granine vrednsoti. Granine
vrednosti su one vrednosti podataka kod kojih se mogu oekivati pogreni rezultati (
nula, ekstremne vrednosti itd.)
Testiranje crne kutije

if total < 6000 then


write(Uneti platu)
read(plata)
total=total+plata
else
wite(Uneti ID)
read(id)
endif

Testiranje crne kutije se tako naziva jer je programski kod ili algoritam nevidljiv osobi
koja vri tetsiranje. test se sprovodi tako to se programu (crnoj kutiji) daju razliiti
podaci i posmatra ponaanje algoritma. Da bi se postigao efekat testiranja, kod ove vrste
testova se test podaci pripremaju pre izrade programa, imajui na umu samo programske
zahteve date u psecifikaciji programa.
Za ovu vrstu testa se obino planiraju tri vrste testnih podataka :
o Ispravni podaci
o Neispravni podaci
o Granine vrednosti podataka
Za predhodni primer, ispravni podaci bi bili recimo 34, 150, 250, neispravni recimo ako
umesto cifara damo slova, a graninim sluajevima se mogu smatrati podaci
99,100,101,199,200,201,299,300 i 301.
Alfa testiranje
Softver moe biti testiran bilo kojom od predhodne dve metode. Uobiajeno je da se
nakon testiranje progrem pre putanja u prodaju, da na upotrebu ogranienom broju
(obino programera) u istoj kompaniji. Oni koristei program (simulirajui krajnjeg
korisnika) pronalaze eventualne greke koje su zaostale posle testiranja, a takoe mogu
da daju i sugestije za unapreenje programa
Beta test testiranje
Nakon alfa testiranja uobiajena je procedura da se softver da na upotrebu ogranienom
broju spolanjih korisnika i da se od njih dobije odziv. Odziv moe da sadri pronaene
greske ili takoe sugestije za funkcionalno ili neko drugo unapreenje softvera .
Tehnike testiranja
Jedna od najee primenjivanih tehnika testiranja kada znamo algoritam (bela kutija)
je primena tebela za testiranje (Trace Table). Ovde se nad testnim podacima vri
simuliranje rada algoritma, a za svaki korak algoritma se u tabeli vri odgovarajua
izmena podataka definisana tim korakom.
Pokazaemo to na jednom jednostavnom primeru.
Posmatrajmo sledei algoritam (dat u prirodnom jeziku):
1. Postaviti pokaziva (indeks) na tekue slovo na vrednost 0.
2. Postaviti pokaziva (indeks) na poslednje slovo na vrednost koja odgovara
ukupnom broju slova na stranici.
3. Postaviti broja na 0.
4. Uitati slovo na koje pokazuje pokaziva (indeks) na tekue slovo.
5. Ako je uitano slovo samoglasnik dodati 1 na broja.

6. Poveati pokaziva (indeks) na tekue slovo za 1.


7. Ako je pokaziva (indeks) na tekue slovo <= pokaziva (indeks) na
poslednje slovo idi na korak 4.
Ovim programom se oigledno prebrojavaju samoglasnici u tekstu ispisanom na nekoj
stranici.
Kao testne podatke uzmimo da se na stranici nalazi sledei tekst:
Taj tekst
Tekst ima 9 slova (uoite da smo i razmak (blanko znak) raunali kao slovo, jer i to je
jedan ASCII znak.
Sledea tabela ilustruje kako se u svakom od koraka gornjeg algoritma menjaju vrednosti
podataka (promenljivih) koje se pojavljuju u algoritmu.
Korak

pokaziva
na tekue
slovo

pokaziva na
posledenje
slovo

broja

slovo

da li je slovo
samoglasnik

pre
poetka
algoritma
1
2
3
4
5
6
7
4
5
6
7
4
5
6
7
4
5
6
7
4
5
6
7
4
5
6
7

da li je pokaziva
na tekue slovo <=
pokaziva na
poslednje slovo
x

1
1
1
1
1
2
2
2
2
3
3
3
3
4
4
4
4
5
5
5
5
6
6
6
6
7
7

x
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9

x
x
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2

x
x
x
T
T
T
T
a
a
a
a
j
j
j
j

t
t
t
t
e
e
e
e

x
x
x
x
ne
ne
ne
ne
da
da
da
da
ne
ne
ne
ne
ne
ne
ne
ne
ne
ne
ne
ne
da
da
da

x
x
x
x
x
x
da
da
da
da
da
da
da
da
da
da
da
da
da
da
da
da
da
da
da
da
da

4
5
6
7
4
5
6
7
4
5
6
7

7
7
8
8
8
8
9
9
9
9
10
10

9
9
9
9
9
9
9
9
9
9
9
9

2
2
2
2
2
2
2
2
2
2
2
2

k
k
k
k
s
s
s
s
t
t
t
t

da
ne
ne
ne
ne
ne
ne
ne
ne
ne
ne
ne

da
da
da
da
da
da
Da
Da
Da
Da
Da
Ne

Ovakve tabela nam pokazuju neke interesantne stvari o algoritmima. Iz tabele se jasno
vidi da promenljive (podaci varijable) ne menjaju vredosti sve dok se ne naie na korak
u kojem se nad njima vri neka operacija. Druga vana injenica je da tabela postaje
veoma velika kada algoritam sadri ponavljanje, posebno nad veim skupom podataka.
Veliina tabele se moe smanjiti ako se kod repeticije uradi samo jedan ciklus u posebnoj
tabeli a u glavnoj tabeli pokae samo prvo i poslednje ponavljanje. Tabela takoe
pokazuje i znaaj inicijalizacije promenljivih na poetku programa kako bi se izbegle
situacije da algoritam radi sa pogrenim podacima ( pogledajte inicijalno stanje pre
poetka rada algoritma gde promenljive imaju nepoznatu vrednost oznaenu sa x).
Pitanja
1.
2.
3.
4.
5.
6.
7.

ta su testni podaci?
ta je testiranje bele kutije?
ta je testiranje crne kutije?
ta je alfa test?
ta je beta test?
ta su testne tabele (Trace table)?
Kada testna tabela ima mnogo vie redova nego to algoritam ima koraka?

12 Programska okruenja
Bilo ko ko eli da programira suoava se sa problemom izbora takozvanog
programskog okruenja. Pod programskim okruenjem podrazumeva se skup
softverskih alata pomou kojih programer projektuje i razvija programe.
Programsko okruenje uvek ukljuuje editor, kompajler, biblioteku predhodno
razvijenih programa (run time environment), dibager (debugger). Pored ovoga,
programeru mogu biti na raspolaganju i drugi softverski alati kao to su alati
za analizu i projektovanje sistema (UML, na primer), alati za grafiki dizajn
korisnikog interfejsa itd.
Mogu se razlikovati dve vrste programskih okruenja: integrisana okruenja
(integrated development environment, ili IDE skraeno) i linijski editori
komandi.
Integrisano okruenje je grafiki korisniki interfejs koji sadri sve potrebne
alate za razvoj programa kao to su editor, kompajler, grafiki dizajner (za
forme i sl..), dibager, pojekt menader itd.
Okruenje sa linijskim editorom komandi je jednsotavno okruenje gde
programer korienjem jednostavnih tekst editora unosi naredbe programskog
koda, naredbe za kompilaciju i izvravanje.
Danas se za programiranje najee koriste integrisana okruenja. Za
programere poetnike se meutim preporuuje korienje jednostavnih
linijskih editora kako bi programeri poetnici mogli da prate sve korake u
izradi programa koji su u IDE ponekad sakriveni.
Naravno, IDE su znatno pogodnija za razvoj sloenih programskih sistema jer
ukljuuju i elemente upravljanja projektima.
Poznati primer koji se koristi pri izuavanju bilo kog programskog jezika je primer
Hello World programa. To je veoma jednostavan program kojim se na ekranu
tmpa poruka Hello World. To je dobar primer kako je ponekad jednostavnije
koristiti linijke editore nego IDE za razvoj jednostavnih programa.
Evo kako taj program izgleda u C#.
using System;
class Hello
{
static void Main() {
Console.WriteLine("Hello, World");
}
}

Datoteke koje sadre C# program obino imaju ekstenziju .cs. Pod pretpostavkom da
smo gore navedeni program smestili u datoteju pod imenom hello.cs, onda bismo
korienjem linijkog editora komandi mogli koristiti komandu csc hello.cs kojom se
poziva Microsoft-ov C# kompajler da izvri prevoenje programa u izvrni mainski
kod koji e biti smeten u datoteci hello.exe.

Sada emo analizirati ovaj jednostavan program sa ciljem da razumevajui njegovu


strukturu razumemo i itav proces razvoja programa.
Program poinje using System naredbom ime se oznaava da elimo da u programu
koristimo biblioteku klasa koju je Microsoft (.NET Framework biblioteka) razvio i
stavio na raspolaganje programerima. Ova biblioteka sadri oko 8.000 klasa
podeljenih u nekoliko tematskih oblast: za rad sa podacim (System.Data) , za rad sa
windows formama (System.Windows.Forms), za rad sa ulazno-izlaznim ureajima
(IO) itd.
Zato to smo using System naredbu uvrstili u na program, moemo da koristimo
Console.WriteLine metodu koja je deo gornje biblioteke.
Because of the using directive, the program can use Console.WriteLine as shorthand
for System.Console.WriteLine.
Dalje uoavamo da program poinje definicijom klase hello (class hello), koja ima
samo jedan metod pod imenom Main. Ispred nazva Main stoje rei static i void. Re
static oznaava da se metoda Main ne odnosi ni na jedan poseban objekat, to jest da se
static metod koristi bez reference na objekat. Re void oznaava da metod Main ne
vraa vrednost. Po konvenciji static metod pod imenom Main je ulazna taka u svaki
C# program.
Metod Main sadri samo jednu liniju koda, koja zapravo i nije neka C# naredba, ve
poziv metode Console.WriteLine koja je deo biblioteke System, a ta metoda e
automatski biti pozvana od strane C# kompajlera.
Kompajleri i interpreteri
Postoje dva naina kako se programi nanpisani u programskijm jezicima mogu
izvravati u raunarima. To su kompilacija i interpretacija.
Kompilacija (koja se obavlja kompajlerima) je postupak u kome se program napisan u
izvornom obliku prevodi u mainski kod datog raunara.
Sledea slika ilustruje proces kompilacije programa od izvornog oblika to objektnog
(mainskog) koda.
Leksika analiza
Leksika analiza

Sintaksna analiza

Generisanje koda

Mainski kod

Interpretacija (koja se obavlja interpreterima) je postupak u kome se program napisan


u izvornom obliku prevodi u neki meukod, to jest neki jednostavniji jezik slian
mainskom jeziku, a zatim raunar izvrava (intrepretira) naredbe meukoda. Time se
postie da se isti meukod moe izvravati na razliitim raunarima jer nije zavistan
od mainskog jezika nekog specifinog raunara. Za meukod bi se moglo rei da
predstavlja neki univerzalni mainski jezik.
Sledea slika ilustruje proces interpretacije.
Izvorni program
Leksika analiza

Sintaksna analiza

Generisanje koda

Meukod

Kompilirani programi obino rade bre, a prednost interpretera je to su obino


iteraktivni i nije potrebno prolaziti sve faze kao kod kompilacije da bi se program
izvrio.
.
Linkeri i loderi (loadres)
Linkeri i loderi su vani elementi u procesu dobijanja izvrnog (.exe) programa .
Njihova uloga je da izvre povezivanje (linkovanje) razliitih internih delova
programa kao i eksternih bibliotekih potprograma u jednistvenu izvrnu celinu, kao i
da tako pripremljen izvrni program prenesu (loduju) u memoriju raunara kako bi
poelo njegovo izvravanje (egzekucija).
Programski editor
Programski editor je deo integrisanog okruenja i slui za editovanje razliitih
komponenti izvornog koda (programskih naredbi, formi, itd.).

Dibager (Debugger)
Dibager je softverski alat koji slui za testiranje ispravnosti rada programa. On
omoguava izvravanje programa korak-po-korak pri emi programer moe da prati
promenu vredosti varijabli. Dibageri modu da na automatizovan nain prave trace
table koje smo ranije pominjali kao sredstvo za testiranje algoritama.
Dinamiko povezivanje programa (DLL)
Umesto pravljenja izvrnog programa u .exe obliku, eto se pribegava
kompilaciji programa do takozvanog .dll oblika. To je skraenica od Dynamic
Link Library (dll) to znai da je ovako generisan mainski kod mogue
dinamiki povezivati tokom izvrenja nekog drugog progrtama koji moe da
poziva .dll metode.
Povezivanje sa softverima za baze podataka (ODBC)
Open DataBase Connectivity (ODBC), je jedan standardni metod za
povezivanje programa sa bazama podataka. Standard je razvila SQL Access
grupa 1992 godine sa ciljem da se bilo kom podatku moe pritupiti iy bilo koje
aplikacije nezavisno od sistema za upravljanje bazama podataka (DBMS). To
se postie umetanjem drajvera za baze podataka kao interfejsa (srednjeg sloja)
izmeu aplikacije i DBMS-a. Ovi drajveri mogu se nai u u Microsoft .NET
Framework biblioteci.
Korisniki interfejs
Pod korisnikim interfejsom, u uem smislu , podrazumeva se izgled ekrana koji
korisnik nekog programa vidi na svom monitoru. Meutim, u irem smislu, korinsiki
interfejs predstavlja bilo koji nain na koji ovek interaguje sa raunarom.
Korisnikim interfejsima se poklanja velika panja, jer od toga kakav je korisniki
interfejs zavisi upotrebljivost programa ili lakoa sa kojom ovek-korisnik moe da
koristi neki softver. Dobar korisniki interfejs olakava korisniku da obavi posao koji
mu je potreban. esto se ispred rei korisniki intergejs stavlja i re grafiki kojom
se oznaava da softver sadri grafike prikaze (forme, slike, ikone, itd.) kojima se
olakava korienje programa. Grafiki interfejsi se oznaavaju sa GUI (Graphic User
Interface).
Pitanja
1. ta je programsko okruenje?
2. Koji su najee komponente IDE?
3. ta je kompajler?
4. ta je interpreter?
5. ta je linker?
6. ta je loder?
7. ta je linijski editor?
8. ta je dibager?
9. ta je ODBC?
10. ta je GUI?
4

13 Dogaajima upravljano, OO i GUI programiranje


Kod konvencijalnog programiranja, sekvenca operacija u nekoj aplikaciji odreena je
centralnim programskim modulom glavnim programom (Main program). Kod
dogaajima upravljanom programiranju (event-driven programming) sekvenca
operacija u aplikaciji odreena je korsinikovom interakcijom putem grafikog
interfejsa (formi, menija, dugmia, itd).
Program za dogaajima upravljanom aplikacijom ostaje u pozadini sve dok se ne desi
neki dogaaj, kao na primer:

Kada se promeni vrednost u nekom polju forme aktivira se program za


verifikacuju ispravnosti unetog podataka.
Kada korsinik pritisne neko dugme i time oznai da je zavren unos podataka
koim se menja stanje u skladitu, aktivira se procedura za auriranje skladita.

Dogaajima upravljano programiranje, grafiki kosriniki intefejs (GUI) i objektnoorijentisano programiranje su meusobno povezani jer su forme i grafiki interfejs
objekti (boksovi, dugmii, i sl.) predstavljaju skelet itave aplikacije.
Primer konvencionalne (konzolne) aplikacije u C#
using System;
using System.Collections.Generic;
using System.Text;

GLAVNI
PROGRAM

namespace prviprojekat
{
class Program
{
static void Main(string[] args)
{
string naslov = "POZDRAV SVIMA";
Console.WriteLine(naslov);
Console.ReadKey();
}
}
}

U gornjem primeru vidi se kako glavni program (Main) upravlja odvijanjem


aplikacije: najpre se deklarie varijabla naslov I dodeljuje joj se vrednost "POZDRAV
SVIMA", zatim se poziva procedura Console.WriteLine kojom se ispisuje na ekranu
vrensot varijable naslov, I na kraju se procedurom Console.ReadKey eka da korisnik
pritisne neki taster na tastaturi pa da aplikacija zavri rad.
Sledei primer prikazuje jednu dogaajima voenu aplikaciju u C#.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsApplication1
{
static class Program
{

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

Ovde se, za razliku od prethodnog primera, u glavnom programu samo aktivira jedan
objekat tipa forme, a sva dalje dogaanja u aplikaciji zavisie od interakcije korisnika
i objekata prikazanih u formi. Jedan jednostavan primer forme koja sadri samo dva
objekta (button1 i tekst boks) prikazan je na sledeoj slici:

Programski segment kojim se definie upravljanje dogaajima sa formom Form1 iz


gornjg primera moe da, na primer, glasi ovako:
using
using
using
using
using
using
using

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Text;
System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form1 : Form

public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Random r = new Random();
textBox1.BackColor =
Color.FromArgb(r.Next(0,255),r.Next(0,255),r.Next(0,255));
}

Ovde se moe uoiti procedura button1_Click kojom se definie ta e biti


uraeno kada korisnik pritisne dugme button1. U ovom sluaju svaki
pritisak na dugme button1, obojie tekst boks drugom (sluajno
odabranom) bokom.

Sada, kada smo se upoznali sa osnovnom razlikom izmeu konvencionalnih


(konzolnih) i dogaajima upravljanim (windows) aplikacijama, moemo se malo
detaljnije pozabaviti mehanizmom izvravanja dogaajima upravljanim programima
(aplikacijama).
Oekivanje (listening) i opsluivanje (handling) dogaaja (events)
Kada kreira jednu dogaajima voenu aplikaciju, programer zapravo kreira niz malih
programa koje se nazivaju opsluiocima dogaajima (event handlers), koji se
dodeljuju dogaajima koje pokree neki od objekata iz aplikacije. Ovi mali programi,
opsluioci, definiu se u modulu kojim se opisuju forme (vidi gornji primer).
Proces ekanja i opsluivanja dogaaja moe biti ilustrovan sledeom slikom:

Gornji proces moemo prikazati i pseudokodom kako sledi:


while(true) {
if (dogaaj == krajAplikacije) zavri;

if (dogaaj == X) pozvatiOdgovarajuuProceduruX;
if (dogaaj == Y) pozvatiOdgovarajuuProceduruY;

if (dogaaj == ) pozvatiOdgovarajuuProceduru;
}
Objekti
Tokom 1990-tih godina objektno-orjentisana tehnologija je postepeno prevladala
strukturalnu metodologiju 1970-tih i 1980-tih godina. U softversku metodologiju su
uvedeni novi dijagrami kojima su opisivani objekti, razliiti od dijagrama koje smo
razmatrali u poglavlju 10 (blok, N/S i JSD dijagrami). U to vreme, korieni su
takozvani objektni dijagrami, kao ovaj prikazan na sledeoj slici:
Stack
push
p op

internal
data

peek

Objektni dijagram za STACK


U ovom dijagramu STACK je tip objekta. Umesto rei tip koju smo koristili kod
varijabli, kod objekata se koristi re klasa (class). Push, pop i peek su takozvane
metode. Da bi koristili Stack klasu, potrebno je da kreirate stack objekat a onda da
korsitite metode kojima se obavljaju operacije nad objektima. Na primer:

# create a stack object by instantiating the Stack class


myStack = new Stack()
myStack.push("abc")
myStack.push("xyz")
print myStack.pop() # prints "xyz"
print myStack.peek() # prints "abc"

U gornjem primeru se naredbom myStack = new Stack() kreira jedand novi objekat
sa imenom myStack, zatim se neredbama myStack.push("abc") i
myStack.push("xyz") na stek postavljaju dva stringa (abc i xyz), a zatim se
naredbama print myStack.pop() i print myStack.peek()tampaju isti stringovi
obrnutim redom (jer je stek, setite se, LIFO lista).
Moemo da uoimo slinost izmeu OO programiranja i event-driven
programiranja, koja se ogleda u tome da metode iz OO programa veoma
podseaju na opsluioce dogaaja (event handlers).

Klijent-server arhitektura
Jo jedan poznati sluaj gde se pojavljuje opsluivanje dogaaja jeste takozvana
klijent-server arhitektura. Server je neki hardverski ili softverski modul koji prua
neku uslugu (service) klijentima. Posao servera je da eka na zahtev za uslugu
(service requests) od klijenata, da odgovara na te zahteve pruanjem zahtevane
usluge, a onda da nastavi ekanje na nove zahteve. Poznati primeri servera su: serveri
za tampanje, fajl serveri, database serveri, aplikacioni serveri, web serveri. Na
primer, kad god posetite neku novu web adresu pomou vaeg brauzera, va bauzer
(koji je u tom sluaju klijent) alje zahtev web serveru na koji ovaj odgovara slanjem
traene web stranice.
Ovaj proces traenja i pruanja usluge u interakciji klijent-server moe biti ilustrovan
kao na sledeoj slici.

client
client

client

"event queue"
containing
service requests

events
server
dispatcher

handler 1

handler 2

handlern

Klijent-server arhitektura

Sistemi za razmenu poruka (Messaging Systems)


Sistemi za razmenu poruka predstavljaju ekstremni sluaj opsluioca dogaaja
(handler-a). Svrha sistema za razmenu poruka je da preuzme dogaaj (poruku) od
generatora dogaaja (poiljaoca) i prosledi ga opsluiocu (primaocu), pa je tako uloga
dispeera jednostavna. Jedan poznat primer sistema za razmenu poruka su pote.
Poiljalac predaje poruku (pismo ili paket) na potu (sistemu za raymenu poruka).
Pota prepoznaje adresu primaoca i transportuje poiljki na tu adresu.
Sledea slika ilustruje ovaj proces_

Messaging System

receiver

sender
dispatcher

sender

receiver

sender
receiver

E-mail sistem vri istu ovakvu funkciju, kao i klasina pota, jedina razlika je to su
poruke u elektronskoj a ne u fizikoj formi.
Objektno-orjentisano dogaajima upravljano programiranje
Sada kada smo u stanju da vidimo potpunu sliku kako se koncept opsluivanja
manifestuje u kompjuterskim sistemima, moemo da se pozabavimo I pitanjem kako
to sve funkcionie u konkretnim programima.
Posmatrajmo jedan poslovni sistem koji posluje sa muterijama. Prirodno je da
vlasnici tog biznisa ele da imaju na raspolaganju informacioni sistem u kojem mogu
da memoriu, pretrauju i auriraju informacije o raunima svojih muterija. Oni ele
sistem koji moe da opslui razliite zahteve: zahtev za otvaranjem rauna nove
muterije, promenu naziva nekog postojeeg rauna, zatvaranje postojeeg rauna itd.
Takav sistem, znai mora da ima opsluioce (handler-e) za sve ove dogaaje.

Sledea slika ilustruje arhitekturu jednog takvog informacionog sistema.


business
person
events
information
system

add
customer
account

system
dispatcher

change
account
name

close
account

Pre pojave objektno orjentisanog programiranja, gornji opsluioci bi bili programski


implementirani kao niz potprograma (subroutines).
Tako bi dispeerski deo programa mogao da izgleda kao to je prikazano u slegeem
pseudokodu:
get eventType from the input stream

if

eventType == EndOfEventStream :
quit # break out of event loop

if
eventType == "A" : call addCustomerAccount()
elif eventType == "U" : call setCustomerName()
elif eventType == "C" : call closeCustomerAccount()
... and so on ...

potprogrami kojima se opsluuju zahtevi mogli bi da izgledaju ovako:


subroutine addCustomerAccount():
get customerName
# from data-entry screen
get next available accountNumber
# generated by the system
accountStatus = OPEN
# insert a new row into the account table
SQL: insert into account
values (accountNumber, customerName, accountStatus)
subroutine setCustomerName():
get accountNumber
# from data-entry screen
get customerName
# from data-entry screen
# update row in account table
SQL: update account
set
customer_name = customerName
where account_num
= accountNumber
subroutine closeCustomerAccount():
get accountNumber
# from data-entry screen
# update row in account table
SQL: update account
set
status
= CLOSED
where account_num = accountNumber

Danas, korienjem OO tehnologije, opsluivanje dogaaja se implementira


metodama za objekte. Tako sada, programski kod kojim se postie isti efekat kao u
predhodnom primeru moe da izgleda ovako:
get eventType from the input stream
if

eventType == "end of event stream":


quit # break out of event loop

if

eventType == "A" :
get customerName
get next available accountNumber

# from data-entry screen


# from the system

# create an account object


account = new Account(accountNumber, customerName)
account.persist()
elif eventType == "U" :
get accountNumber
get customerName

# from data-entry screen


# from data-entry screen

# create an account object & load it from the database


account = new Account(accountNumber)
account.load()
# update the customer name and persist the account
account.setCustomerName(customerName)
account.persist()
elif eventType == "C" :
get accountNumber

# from data-entry screen

# create an account object & load it from the database


account = new Account(accountNumber)
account.load()
# close the account and persist it to the database
account.close()
account.persist()
... and so on ...

A Account klasa, sa metodama koje fukncioniu kao handler-i, moe da izgleda


ovako:
class Account:
# the class's constructor method
def initialize(argAccountNumber, argCustomerName):
self.accountNumber = argAccountNumber
self.customerName = argCustomerName
self.status = OPEN
def setCustomerName(argCustomerName):
self.customerName = argCustomerName
def close():
self.status = CLOSED
def persist():

... code to persist an account object

def load():
... code to retrieve an account object from persistent storage

Grafiki interfejsi (GUI programiranje)


Grafiki interfejsi su, danas, najee korieni okviri (frameworks) za razvoj
objektno-orjentisanih i dogaajima upravljanih aplikacija (programa).
GUI programiranje je teko iz vie razloga.
Kao prvo, potrebno je uloiti dosta truda da se specificira iygled GUI-a na ekranu
kompjutera. Sve te stvarice koje se pojavljuju na ekranu svako dugme, labela,
meni, tekst boks, list boks, itd. moraju biti definisane preko oblika, veliine, boje
pozadine, fontova itd., mora se definisati njihova poetna pozicija unutar forme, kako
e se ponaati ako im se promeni veliina, kao i kao se uklapaju sa ostalim objektima
definisanim na ekranu. Zato se kao pomo pri dizajnu koriste IDE alati kojima se
olakava definisanje izgleda.
Drugo, GUI programitanje je teko jer postoji jako mnogo vrsta razliitih dogaaja
koje treba opsluiti. Skoro svaki element GUI-a svako dugme, ek-boks, radio
dugme, polje za unos podataka, list boks, tekst boks, meni, itd. predstavljaju
generatore jednog ili vie dogaaja. Osim toga i hardverski ureaji mogu da generiu
dogaaje. Recimo, mi moe da generie pritisak (klik) na levo dugne, desno dugme,
dvsotruki klik na levo i desno dugme, itd. Slino svaki pritisak na tastaturi slova, broja
ili funkcijske tipke moe generisati dogaaje. Za sve takve dogaaje moraju biti
programirani opsluioci (handleri).
Integrisana razvojna okruenja kao to je Microsoft Visual Studio znaajno
olakavaju razvoj GUI aplikacija jer u sebi sadre takozvane form dizajnere kojima
se olakava definisanje svih karakteristika (properties) objekata koji se koriste u
interfejsu. Meutim, hendleri moraju i dalje biti programirani na nain slian
konvencionalnim programima.
Pitanja
1) Kakva je razlika izmeu konvencionalnog (proceduralnog) i dogaajima
upravljanog programiranja?
2) Kakvu ulogu ima glavni program (Main) u konvencionalnom, a kakvu u
event-driven programiranju.
3) Kako se u Microsoft Visual Studio razvojnom okruenju oznaavaju
konvencionalne, a kako even-driven aplikacije?
4) Koje sve komponente kompjuterskog sistema mogu da generiu dogaaje?
5) Navedite primer jednog softverski generisanog dogaaja.
6) Navedite jedan primer hardverski generisanog dogaaja?

7) ta je to opsluivanje dogaaja?
8) ta je server?
9) ta je klijent?
10) ta je dispeer dogaaja?
11) ta su objekti (klase)?
12) Od ega se sastoje objekti (klase)?
13) ta je OO programiranje?
14) ta je GUI programiranje?
15) Kakva veza postoji izmeu dogaajima upravljanom, OO i GUI
programiranja?

14 Objektno orjentisano (OO) programiranje


ta je OO programiranje?
Objektno orjentisano programiranje je metodologija programiranja kojom se modelira
realan svet kao skup objekata i odnosa meu objektima. Osnovni element u ovoj
metodologiji su, znai, objekti koji se koriste za razvoj programa (softvera).
Pomislite o objektima koji nas okuuju automobili, ptice, drvee, ljudi itd. Ima ih
bezbroj svuda oko nas. Uobiajeno je da sve objekte koji nas okruuju klasifikujemo
pa otuda i jedan od osnovnih pojmova kod OO metodologije pojam klase (Class).
Klasa (Class)
Klasa je sastavljena od osobina objekta koje se izraavaju podacima koje ih opisuju
(atributa) i akcija koje objekti mogu sprovoditi (metoda).
Uzmimo na primer automobil: podaci (atributi) koji karakteriu automobile su brzina,
boja, broj sedita, itd., a aktivnsoti (metode) koje ovaj objekat moe da obavlja su
ubrzavanje, koenje, promena stepena brzine (menjaem) itd.
Ili, uzmimo za primer objekte kao to su studenti. Atributi studenta su ime, prezime,
broj indeksa, godina roenja, godina studija, itd. Aktivnosti koje studenti izvravaju
su upis semestra, prijava ispita, polaganje ispita, itd.
Ili, recimo posmatrajmo automat za kafu. Kao atribute automata mozemo da uzmemo
boju, listu artikala koji se nude, iznos novca u kasi, trenutnu upatu, itd. Metode kod
automata mogu biti izbor artikla, ubacivanje novca, preuzimanje artikla, preuzimanje
kusura, odustajanje od kupovine, itd.
Klasa opisuje sve objekte datog tipa, na taj nain to definie koji e podaci biti
korieni za opis svakog pojedinanog objekta. Zato je klasa apstraktna struktura bez
pojedinanih vredosti za podatke kojima se opisuju objekti.
Objekti (Object)
Objekta je jedna konkretizacija klase, odnosno objekat je jedan konkretan primerak sa
konkretnim atributima koji ga razlikuju od drugih objekata iz iste klase. Na primer u
klasi student, koju smo ranije opisali, moe da sadri objekat Jovana Mirkovi koja
prestavlja jedan poseban sluaj objekta iz klase Student.
Razmena poruka (Message Passing)
Objekti ne postoje izolovano. Oni interaguju sa drugim objektima. U OO
programiranju ova interakcija se ostvaruje preko poruka. Prenos poruka je proces u
kome jedan objekat (poiljalac-sender) alje podatke drugom objektu (primaocureceiver) ili trai od drugof objekta da aktivira neki svoj metod. Tako svaka poruka
ima poiljaoca i primaoca.

Ponaanje objekata (Behavior)


Ponaanje se odnosi na to kako objekti reaguju na poruke, to jest kako menjaju
sopstveno stanje (atribute) i/ili aktiviraju svoje metode.
Pogledajmo sada kako se OOP koristi u C#.
Deklarisanje nove klase
Kada elimo da deklariemo (definiemo, opiemo) novu klasu, u C# to inimo uz
pomo sledee sintakse:
class < Ime Klase >
{
atributi// podaci kojima se opisuju objekti iz klase
metode// kojima se opisuju akcije (funkcije) koje objekti izvravaju
}
Ovde je class kljuna re. Ime klase moe biti bilo koje ime koje elimo da damo
klasi, ali u skaldu sa pravilima imenovanje klese
Pravila za davanje imena klasama

Ime klase mora poeti slovom iza koga moe da sledi niz slova (A-Z, velika
i/ili mala), cifre (0-9) i znak donja povlaka (_)
Specijalna slova kao to su ? - + * / \ ! @ # $ % ^ ( ) [ ] { } , ; : . ne smeju se
koristiti u imenu klase.
Ime klase ne sme da bude neka od slubenih rei C#, kao to su rei using,
public, etc.

Konvencija za imenovanje klase


Sledea konvencija nije obavezujua, ve predstavlja preporuku kako treba davati
imena klasama.

Ime klase treba da bude sa znaenjem koje opisuje klasu, a najbolje je da bude
neka imenica (na primer Student za klasu studenti, Automat za automat za
kafu, i sl).
Kod imenovanja uobiajene su dva sluaja: takozvani Pascal oznaavanje gde
je prvo slovo u imenu veliko a sva ostala mala, ili Kamilje (Camel)
oznaavanje gde je u imenu klase prvo slovo malo a samo prva slova iz svake
naredne rei su velika Na primer:o Pascal Case: Klasajedan
o Camel Case: klasaJedan

Primer deklaracije klase


class Student
{
// Podaci - Atributi
public string Ime;
public int Starost;
// Medode
public void Prikazinaekranu()
{
Console.WriteLine("Name {0}\n Age {1}", Name, Age);
}
}
Re public oznaava da e atributi i metode koje imaju ovu re biti dostupne I van
same klase Student.
Deklarisanje i inicijalizacija objekta
Kada elimo da definiemo objekat iz neke klase, to radimo na nain slian
deklarisanju varijabli, sa sledeom sintaksom:
<Ime klase> <Ime objekta>;
Primer:
Student S1;
Ali, pre nego to ponemo sa korienjem objekta, potrebno je da mu zadamo poetne
atribute (podatke), kroz proceduru koja se naziva inicijalizacija. Ta procedura
ukljuuje dodelu memorije i druge osnovne procese za inicijalizaciju (konstrukciju)
objekta. U C# koristimo re new da oznaimo ovaj proces
Sintaksa je sledea:Napomena: Konstruktori su posebne metode iz klase koje slue za inicijalizaciju
objekta.
<Ime objekta> = new <Ime klase>;
Primer:
S1 = new Student();
Ova dva koraka (deklaracija i inicijalizacija) mogu da se obave u jednoj liniji koda
kao to sledi:

Student S1 = new Student(); // Konstruktor Student()


Korienje objekata u OO programima
Za pistup atributima i metodama deklarisanog i inicijalizovanog objekta koristi se .
(Dot) operator.
Na primer ako elimo da aktiviramo metod za prikaz na ekranu podataka objekta S1
iz klase student pisaemo:
S1.Prikazinaekranu();
Atributima se moe pristupati na slian nain, na primer:
S1.Ime = Teofilovic Danijel;
promenie ime objekta student S1.
Oslobaanje memorije
Da oslobodimo memoriju koju zauzima objekat S1 (koji nam vie nije potreban)
koristomo izraz:
S1 = null;
Evo kako bi sada mogao da izgleda jedan kompletan program koji koristi klasu
Student.
using System;
namespace PrimerStudent
{
class Student
{
// Podaci - Atributi
public string Ime;
public int Starost;
// Medode
public void Prikazinaekranu()
{
Console.WriteLine("Ime i prezime {0}\n Godine starosti {1}", Ime, Starost);
}
}

class Program
{
static void Main(string[] args)
{
Student S1;
// Deklaracija
S1 = new Student();
// Inicijalizacija
Student S2 = new Student();

// Deklaracija & Instantiation

// Davanje vrednsoti atributima


S1.Name = "Mihailo Petrovic";
S1.Starost = 20;
S1.Name = "Jelica Milic";
S2.Starost = 21;
// Aktiviranje metoda
S1.Prikazinaekranu();
S2. Prikazinaekranu ();
Console.ReadLine();
}
}
}
Prednosti korienja OO programiranja

Realistino modeliranje realnosti: Korienje OO metodologije daje


mogunost boljeg I verodostojnijeg modeliranja procesa iz nae realnosti.
Viestruko korienje klasa: Jedanput dizajnirana klasa moe biti iskoriena
u raznim aplikacijama.
Olakano odravanje softvera: Korienjem OO metodologije znaajno se
olakava odravanje softvera, jer je jednostvnija identifikacija modula koje
treba menjati.

Osnovna svojstva OO metodologije


Sada emo se ukratko baviti nekim osnovnim svojstvima OO metodologije.
Uaurivanje, enkapsulacija (Encapsulation, data hiding)
Enkapsulacija je jedan vaan koncept u OO programiranju. Spoljni svet, kao je ve
reeno, pristupa samo onim atributima i metodama koje su oznaene kao public.
Programer koji koristi neku klasu ne mora da zna kako su atributi i metode u samoj
klasi kodirane. Sve to je njemu potrebno je da poznaje intefejs preko kojeg pristupa
metodama i atributima klase. Naravno, potrebno je da razume i znaenje atributa i
metoda kojima pristupa, ali ne mora da zna kako su same metode programirane. Na
taj nain je obezbeeno da se greke koje se pojave u klasi otklanjaju u samoj klasi,
bez potrebe za promenom onog dela programa koji tu klasu koristi.

Apstrakcija (Abstraction)
Apstrakcija je proces kojim se objekti iz realnog sveta modeliraju uproenom
slikom napravljenom u klasi pomou atributa i metoda. Recimo klasa automobil
koju smo napred pomenuli ne opisuje sve mogue karakteristike automobola, ve
neke osobine zanemaruje (apstrahuje) i ne prikazuje ih kroz atribute i metode. Koji
atributi i metodi e biti odabrani za prikaz u klasi zavisi od namera koje imamo u
pogledu budueg korienja klase u raznim aplikacijama. Pravilno odabran model
realnog sveta moe da pomogne da se razumeju reenja problema koje treba reiti
kroz softversku aplikaciju.
Kompozicija (Composition)
Objekti mogu da interaguju na razliite naine u nekom sistemu. U nekim sluajevima
klase i objekti mogu biti tako meusobno povezani da svi zajedno ine kompleksan
sistem. U primeru sa automobilom tokovi, paneli, motor, menja itd. Mogu biti
posmatrani kao posebne klase. Klasa automobil, u tom sluaju, predstavlja
kompoziciju ovih posebnih klasa
Nasleivanje (Inheritance)
Nasleivanje Inheritance is an interesting object-oriented programming
conceptomoguava da neka klasa (sub klasa) bude bazirana na drugoj klasi (super
klasa) i da od nje nasledi svu funkcionalnost. Kroz dodatni kod (atribute metode) sub
klasa moe biti specijalizovana za posebne potrebe. Na primer, kod klase vozila (kao
super klase) moemo kreirati sub klase automobili i motorcikli. Obe ove klase
nasledile bi sve metode klase vozila, ali bi takoe mogle da imaju I svoje
specijalizovane metode i atribute, kao to su metoda Nagnise() i atribut
Ugaonaginjanja za motorcikle.
Polimorfizam (Polymorphism)
Polimorfizam je sposobnost objekta da menja ponaanje u zavisnosti od naina na
koji se koristi. Polimorfizam u najjednostavnijem obliku se pojavljuje kao niz metoda
sa istim imenom ali sa razliitim parametrima. Ovaj oblik polimorfizma naziva se
overloding (overloading), a sree se i kod operatora . U zavisnosti od parametara
koje koristimo bie pozvan onaj metod koji odgovara korienim parametrima.
Polimorfizam ima i druge oblike o kojima ovde nee rei.
Modularnost (Modularity)
IPored gore navedenih koncepata OO programiranje donosi i poveanje modularnosti
programa. Individualne klase ili grupe povezanih klasa (biblioteke klasa) mogu se
posmatrati kao moduli koji se mogu koristiti u raznim softverskim projektima. Na taj
nain se smanjuje potreba za ponovnim programiranjem slinih zadataka, pa se tako
redukuje ukupan napor potreban za razvoj sofvera.

Pitanja
1. ta je klasa?
2. ta je objekat?
3. Koji su osnovne komponente klase?
4. ta je apstarkcija?
5. ta je uaurivanje?
6. ta je nasleivanje? Primer.
7. ta je polimorfizam? Primer.
8. ta je overloding metoda? Primer.
9. ta je overloding operatora? Primer.
10. Koje su prednosti korienja OO metoda?
11. Kako se postie modularsnot u OO programiranju?

15 OOP i UML
Od proceduralnog ka OO modelu programiranja
Svi programski jezici podravaju etiri sledea koncepta:
o
o
o
o

Sekvencu kojom se izvrava niz instrukcija (naredbi, komandi)


Selekciju donoenje odluke (if..then...else, switch....case)
Iteracije ponavljanja, repeticije, petlje, ciklusa
Apstrakcije procesa kreiranja softvera kojim se omoguava parametrizacija
reenja ime se postie da softver dobija generalan karakter

Upravo se na konceptu apstrakcije razlikuju proceduralni (kao to je C) i OO jezici


(kao to su C++,C#,Java).
Apstrakcija kod proceduralnih jezika
Apstrakcija kod proceduralnih jezika se postie korienjem potprograma (funkcija i
procedura).
Funkcije slue za transformaciju eksternih podataka u neki finalni rezultat, kao na
primer funkcija koja odreuje srednju vrednost izmeu dva broja:
float SrednjaVrednost(float a, float b) {
float result;
result = (a+b)/2;
return result;
}
Na taj nain se problem top-daun (top-down) pristupom moe podeliti u potprobleme
(metoda poznata kao podeli pa vladaj - divide and conquer) koji se reavaju kroz
posebne procedure ili funkcije to se moe izraziti na sledei nain:
F(G(x1,x2,...,xn), H(y1,y2,...,ym))
gde se funkcijom F reava problem koji je podeljen na dva potproblema koji se
reavaju funkcijama G i H. Vrednosti x1,x2,...,xn i y1,y2,...,ym nazivaju se parametrima
funkcija.
Prenos parametara
U jeziku C#, na primer, parametri mogu biti prenoeni na tri naina: po vrednosti, po
referenci i kao izlazni parametri. Razmotriemo samo prva dva naina (po vrednosti i
po referenci)

Porenos parametara po vrednosti


Kod prenosa parametara kao vrednosti u potprogram (metodu) se prenosi vrednost
koja se dalje u metodi koristi, ali se ne menja vrednost varijable koja je bila koriena
u pozivu potprograma (metode).
To je ilustrovano u sledeem primeru:

// PassingParams1.cs
using System;
class PassingValByVal
{
static void SquareIt(int x)
// The parameter x is passed by value.
// Changes to x will not affect the original value of myInt.
{
x *= x;
Console.WriteLine("The value inside the method: {0}", x);
}
public static void Main()
{
int myInt = 5;
Console.WriteLine("The value before calling the method: {0}",
myInt);
SquareIt(myInt);

// Passing myInt by value.

Console.WriteLine("The value after calling the method: {0}",


myInt);
}
}

Output
The value before calling the method: 5
The value inside the method: 25
The value after calling the method: 5

Prenos parametara po referenci


Kod prenosa parametara po referenci u potprogram (metodu) se prenosi referenca
(adresa) varijable koja se dalje u metodi koristi, pa se menja i vrednost varijable koja
je bila koriena u pozivu potprograma (metode).
To je ilustrovano u sledeem primeru:
// // PassingParams2.cs
using System;
class PassingValByRef
{

static void SquareIt(ref int x)


// The parameter x is passed by reference.
// Changes to x will affect the original value of myInt.
{
x *= x;
Console.WriteLine("The value inside the method: {0}", x);
}
public static void Main()
{
int myInt = 5;
Console.WriteLine("The value before calling the method: {0}",
myInt);
SquareIt(ref myInt);

// Passing myInt by reference.

Console.WriteLine("The value after calling the method: {0}",


myInt);
}
}

Output
The value before calling the method: 5
The value inside the method: 25
The value after calling the method: 25

Apstrakcija u OO jezicima
Apstrakcija u OO jezicima se postie kroz takozvane apstraktne tipove podataka
(ADT Abstract Data Type), koji sadre istovremeno i podatke i operacije (metode)
koji se nad njima mogu vriti.
U OO jezicima apstrakcija se postie preko programske konstrukcije koja se naziva
klasa.
U OO terminologiji podaci se nazivaju atributima a operacije koje se nad njiva
izvravaju nazivaju se metodama.
Dakle klasa sadri atribute i metode.
Klasa predstavlja generalizaciju (model) nekog entiteta (objekta) iz realnog sveta.
Klasom se modeliraju podaci (atributi) i procedure (metode). Primeri entiteta koji se
mogu modelirati klasama su: student, automobil, bankarski raun i sl.

Primer klase Bankovni raun


BankovniRaun
naziv rauna
broj rauna
stanje rauna
podizanje gotovine
ulaganje gotovine
provera stanja

podaci
metode

// Pseudokod za klasu Bankovni raun


class BankovniRacun {
string nazivRacuna;
long brojRacuna;
float stanjeRacuna;
podizanjeGotovine();
ulaganjeGotovine();
proveraStanja();
} // Klasa Bankovni raun
Evo jo jednog primera:
Klasa Krug
Krug
Centar
poluprenik
obim kruga
povrina kruga
pomeri krug

data
methods

// Pseudokod za klasu Krug


class Krug {
double cetarX, centarY;
double poluprecnik;
povrsinaKruga();
obimKruga();
pomeriKrug();
} // Klasa Krug
Objekat je jedan konkretan sluaj (instanca) klase na primer Petrov raun u banci je
jedan objekat tipa bankovni raun.
Objekat Jelenin raun je drugi objekat iz iste klase. Dakle objekti sadre konkretne
podatke dok klasa ne sadri podatke. Klasa je samo okvir (templejt) za podatke
pokazuje koje e podatke objekat iz date klase imati.

Na primer Petrov raun moe izgledati ovako:


nazivRacuna = Petar Petrovic
brojRacuna = 423838634543
stanjeRacuna = 150.850,00
Obino aplikacija koju elimo da razvijemo OO metodologijom sadri vei broj
objekata koji su meusobno povezani i u nekoj interakciji. Recimo, ako elimo da
izgradimo informacioni sistem neke banke moemo imati sledee klase: bankovni
raun, korisnik usluga (muterija), bankovni automat, krediti, itd.
Ili u sluaju trgovine, mogue klase su: skladita, fakture, kupci, dobavljaci, itd.
Objektno orjentisani sistem je skup meusobno interagujuih objekata kao to
ilustruje sledea slika.

Primer objekata

Klase su zapravo objekti sa istim atributima i ponaanjem


Na sledeoj slici su muskarci i ene predstavljeni jedinstvenom klasom osobe,
putniki i teretni automobil klasom automobili, a trouglovi, estouganici i rombovi
klasom poligoni.

Uvod u UML
Kao to smo kod proceduralnih metoda koristili grafike simbole za prikazivanje
algoritama, tako se i OO metodologiji nametnuo jedan standardni grafiki nain za
prikazivanje klasa.
UML (Unified Modeling Language) je grafiki jezik za modeliranje koji se koristi za
prikaz razliitih OO komponenti pri analizi, projektovanju i implementaciji OO
sistema. UML je postao meunarodni standard. Njegovi autori su Grady Booch, Jim
Rumbaugh and Ivar Jacobson.

Kratak istorijat razvoja UML-a


Istorijat razvoja UML je interesantan i sa aspekta ubrzanja irenja metodologija, a ne
samo novih tehnolokih reenja.
1994 Grady Booch i Jim Rumbaugh su osnovali kompaniju Rational Rose sa novom
idejama:
Grandy Booch sa Booch Metodom
Jim Rumbaugh Tehnikom Objektnog Modeliranja
1995 Ivar Jacobson se pridruio timu sa idejom:
Objekt Orjentisanog Softverskog Inenjerstva
Tako je nastala prva verzija UML 0.8
1995 Object Management Group (OMG) proglasila je UML standardom.

1996 U proces su se ukljuile i druge kompanije.


Tekua verzija je UML 2.0
Skraeni opis UML-u i dobar tutorial moete pronai na adresi
http://www.smartdraw.com/tutorials/software-uml/uml.htm
a detalje na: http://www.uml.org

Predstavljanje klasa pomou UML-a


Klase se mogu predstaviti na jedan od sledeih naina u zavisnosti od nivoa detalja
koji se eli prikazati.
Posmatrajmo ponovo na primer bankovnog rauna. Radi skracenog pisanja malo smo
promenili nazive podataka i metoda.

Klasa Racun
Racun

(a) Klasa
Samo ime klase

Racun
nazivRacuna
brojRacuna
stanjeRacuna

(b) Klasa
Ime klase i atributi

Racun
podizanje()
ulaganje()
proveraStanja()

(c) Klasa
Ime klase i metode

Racun
nazivRacuna
brojRacuna
stanjeRacuna
podizanje()
ulaganje()
proveraStanja()

(d) Klasa
Ime klase atributi i
metode

Klasa Krug

Krug

Krug
centar
poluprecnik

Krug
povrsina()
obim()
pomeri()

Krug
centar
poluprecnik
povrsina()
obim()
pomeri()

Jo o karakteristikama klasa
Uaurivanje (Encapsulation)
Sve informacije (atributi i metode) u OO sistemu su smetene (sakrivene) unutar same
klase (objekta).
Ovim informacija se moe pristupati samo preko metoda iz klase koje su stavljene na
korienje spoljnjem svetu kao interfejs. Sama implementacija je sakrivena od
korisnika.
Mogunost da se kod klasa (objekata) od korisnika mogu sakriti detalji naziva se
uaurivanjem (enkapsulacijom). Kao da je objekat (klasa) zatvoren u kapsulu, ne
moe se prii njegovim unutranjim delovima, ve se objekat koristi samo pomou
javnih metoda koje jedino imaju pravo da pristupaju i menjaju podatke (atribute)
objekta.

Primer uaurivanja

uloziGotovin

podigniGotovi

nazivRacuna
brojRacuna
stanjeRacun

proveriSta

Samo metode uloziGotovinu(), podigniGotovinu() i proveriStanje() mogu pristupati i


modifikovati podatke nazivRacuna, brojRacuna i stanjeRacuna.
Pogledajmo sada kako pseudokod i UML dijagram meusobno korespondiraju.
class Racun {
private String nazivRacuna;
private brojRacuna;
private float stanjeRacuna;
public podigniGotovinu();
public uloziGotovinu();
public proveriStanje();
} // Klasa Racun

Racun
nazivRacuna
brojRacuna
stanjeRacuna
podigniGotovinu()
uloziGotovinu()
proveriStanje()

Nasleivanje (Inheritance)
Nove klase mogu biti kreirane korienjem postojeih klasa. Tako se stvara odnos
Roditelj-Dete (Parent-Child), gde roditelj predstavlja postojeu klasu (super klasu) a
dete novu (izvedenu) klasu (pod klasu).
Podklasa (dete) nasleuje svojstva od superkalse (roditelja), to ilustruje sledea slika:

Ponovo emo iskoristiti primer bankovnog rauna da ilustrujemo nasleivanje


Klasa Racun je klasa roditelj (superklasa) koja ima sledee atribute:
nazivRacuna, brojRacuna i stanjeRacuna
No, mogue je imati raliite vrste rauna u bankama tekue, iro, itd.
Tako recimo, klasa TekuciRacun je nova klasa dete (podklasa) koja pored gore
navedenih atributa iz klase Racun (superklase) moe imati i dodatne atribute:
brojIzdatihCekova i brojRealizovanihCekova
I sada, umesto da kreiramo novu klasu TekuciRacuni koja bi imala svih pet atributa,
moemo da klasu TekuciRacuni definiemo kao podklasu klase Racun koja nasleuje
atribute nazivRacuna, brojRacuna i stanjeRacuna, kao i sve metode klase Racun.

Prikaz nasleivanja UML dijagramima


TekuciRacun je podklasa superklase Racun. To se UML dijagramom iskazuje na
sledei nain:

Racun

TekuciRacun

Drugim reima, klasa TekuciRacun je izvedena iz klase Racun.

Nasleivanje Primer 2
Klasa Krug
Kasa krug u naem primeru imala je atribute centar i poluprecnik.
Posmatrajmo sada klasu Pravougaonik. Ta klasa moe imati atribut centar, ali
poluprenik nije prikladan atribut za ovu klasu.
Pravougaonik treba da ima atribute duina i irina, ali oni nisu prikladni za krug.
Metode povrina, obim i pomeranje mogu biti primenjene i na krug i na pravougaonik
(dodue sa razliitim nainom izraunavanja povrine i obima, ali o tome e biti rei
kasnije).
Ali umesto da definiemo novu klasu Pravougaonik nezavisnu od klase Krug, mi
emo definisati novu klasu Figura, tako to emo sve zajednike atribute i metode
kruga i pravougaonika smestiti u novu klasu. Onda emo Krug i Pravougaonik
definisati kao podklase klase Figura.
Prikaimo to UML dijagramom:
Figura

Krug

Pravougaonik

Ponovno korienje nasleivanja - Reuse


Ako vie klasa imaju zajednike atribute i metode onda takve klase moemo sakupitu
u jednu zajedniku klasu superklasu (klasu roditelj). Time se postie bri razvoj
aplikacija jer se klase ne moraju nanovo programirati ve se koriste ve postojee koje
mogu biti sakupljene iz razliitih izvora.
Primer: Pravougaonik i Krug imaju zajedniki metod pomeranje jer je tada potrebno
samo promeniti koordinate centra (to je atribut koji imaju i krug i pravougaonik).
Krug
centar
poluprecnik
povrsina()
obim()
pomeri(noviCentar)

pomeri(noviCentar) {
centar=noviCentar;
}

Pravougaonik
centar
duzina
sirina
povrsina()
obim()
pomeri(noviCentar)

pomeri(noviCentar) {
centar=noviCentar;
}

10

Sada bi mogli da definiemo novu klasu Figura koja e sadrati zajednike atribute i
zajednike metode za klase Krug i Pravougaoonik, to je ilustrovano na sledeoj slici:

Figura
pomeri(noviCentar) {

centar

centar=noviCentar;
}

povrsina()
obim()
pomeri(noviCentar)

Krug

Pravougaonik
duzina
sirina

poluprecnik
povrsina()
obim()

povrsina()
obim()

Korienje nasleivanje za specijalizacija


Subklasi (detetu) tokom nasleivanja mogu biti pridodata nova svojstva. Taj postupak
se naziva specijalizacijom klase.
Na primer, metod povrsina je razliit kod kruga i pravougaonika. Isto vai i za obim.
Zato se povrina i obim ponovo definiu (specijalizuju) u izvedenim klasama - Krug i
Pravougaonik, kako je ilustrovano na sledeoj slici:

Krug

poluprecnik
povrsina()
obim()

povrsina(){
return r^2*pi;
}

Pravougaonik
duzina
sirina
povrsina()
obim()

povrsina(){
return duzina*sirina;
}

11

Korinje klase za proirenje funkcionalnosti postojee klase


Klasa dete moe imati i posebne metode koje nema klasa roditelj.
Na primer pravougaonimu moemo dodati novi metod koji kod kruga moe biti
besmislen rotaciju za 90 stepeni, kako je to ilustrovano na sledeoj slici:

Figura
centar
povrsina()
obim()
pomeri(noviCentar)

Krug

poluprecnik
povrsina()
obim()

Pravougaonik
duzina
sirina
povrsina()
obim()
rotacija90()

Dakle u ovom sluaju samo je dodata jo jedna metoda klasi Pravougaonik, ali se
nita drugo nije promenilo.

Polimorfizam (Polymorphism)
Polimorfizam znai vie oblika
U OOP polimorfizam i sam ima vie znaenja.
Polimorfizam omoguava da objekti, metode, operatori imaju rauzliita znaenja
zavisno od naina kako im se prenose parametri.
Na primer u sledeem pseudokodu:

12

krugA = new Krug(); // Kreiranje novog objekta iy klase Krug


Figura figura = krugA; // kreiranje objekta figura iz klase figura, podklase Krug
Figura.povrsina(); // povrsina ce biti izracunata prema metodi za krug
pravougaonikA = new Pravougaonik(); // Kreiranje novog objekta pravougaonika
figura= pravougaonikA;
Figura.povrsina(); // povrsina za metod pravougaonik ce se koristiti

Overloding metoda(Method Overloading)


Jedan drugi slu;aj korienja polimorfizma je overloding metoda, u kojem se istim
imenom definie vie razliitih metoda. Metode se meusobno razlikuju samo po
parametrima koji im se pri pozivu prenose.
na primer neka imamo metodu inicijalizacija sa dve varijante prenosa parametara:
Metod 1 - initializacija(int a)
Metod 2 - inicijalizacija(int a, int b)
Kada u programu pozivamo metodu, od toga koje parametre stavimo u pozivu
zavisie koja od metoda (1 ili 2) e biti zapravo pozvan.
initializacija(2) // Bie pozvana metoda 1
initializacija(2,4) // Bie pozvana metoda 2

Overloding operatora (Operator Overloading)


Overloding-om operatora omoguava se davanje novog znaenja operatorima kao to
su +, -, *, /.
Na primer operator. + operator for Krug moe biti definisan pa je izraz tipa
Krug c = c + 2;
postaje legitiman.
Ovo nije podrano u Java i C++ jezicima.

Asocijacija (Association)
Neka klasa moe biti povezana sa drugim klasama pa je potrebno omoguiti
komunikaciju meu objektima iz razliitih klasa.
U svhu povezivanja ( asocijacije) klasa koriste se takozvani dijagrami klasa koji
pokazuju meusobnu povezanost klasa i tip veze meu njima.
Na primer, Krug i Pravougaonik mogu biti deo klase Dijagram. Ovim se uspostavlja
veza izmeu klase Dijagram i klasa Krug i Pravougaonik kao to prikazuje sledea
alika:

13

sadri>

Krug

Dijagram

Pravougaonik

sadri>

Primer dijagrama klase


Nacrtati dijagram klase prema sledem opisu:
Student moe biti dodiplomac ili postdiplomac.
Dodiplomac moe biti demonstrator. Demonstrator vri demonstarcije studentima.
Predava i profesor su dva tipa nastavnika.
Asistent je postdiplomac koji pomae profesoru.
demonstrira>
Demonstartor

Student

Dodiplomac

Postdiplomac

Nastavnik

asistira>
Asistent

Profesor

Predavac

Pitanja
1.
2.
3.
4.
5.
6.

Koja su etiri osnovna koncepta programiranja?


Kako se princip apstrakcija izraava u proceduralnim jezicima?
Koji naini prenosa parametara se najee primenjuju u OO jezicima?
Koja je razlika izmeu prenosa po vrednosti i prenosa po referenci?
ta je UML? Primer.
ta su dijagrami klasa? Primer.

14

16 Metodologije za programiranje i razvoj softvera


Metodologija se moe definisati kao skup meusobno povezanih metoda i tehnika,
gde se pod metodama podrazumevaju sistematine procedure sline tehnikama.
Metodologije za razvoj softvera bave se metodama i tehnikama za razne elemente
koji se pojavljuju u procesu razvoja softvera. Na sledeoj slici prikazani su najvaniji
elemenati razvoja softvera od kojih zavisi uspenost svakog softverskog poduhvata.

Slika 1. Elementi metodologije razvoja softvera

Gornja slika moe biti interpretirana na sledei nain.


Softverski timovi (Teams) koji se sastoje od menadera, dizajnera, testera,
dokumentalista i sl. (Roles) koji poseduju potrebna znanja i vetine (Skills) , svojim
svakodnevnim aktivnostima (Activities) kao to su planiranje i programiranje kroz
procese (Process) i kljune rezultate (Milestones), a korienjem razliitih tehnika
(Techniques) i alata (Tools) stvaraju nove oftverske proizvode (Products) odreenog
kavliteta (Quality) i po de fakto ili de jure standardima (Standards). Naravno, ne
treba zaboraviti da su timovi sastavljeni od ljudi koji imaju svoje osobenosti
(Personality) o kojima takoe treba voditi rauna.
Kada se proces razvoja (proizvodnje) softvera shvati na prikazani nain, onda postaje
jasnije zato je potrebno da se taj razvoj odvija prema nekoj unapred usvojenoj
metodologiji. Odsustvo metodologije bi za sluaj svakog malo sloenijeg softverskog
poduhvata vodilo ka haosu sa negativnim posledicama.

ivotni ciklus razvoja softvera


Tokom vremena razvijeno je vie modela za razvoj softverskih sistema poznatim pod
nazivom SDLC (System Development Life Cycle) modeli.
SDLC modeli imaju za cilj da daju jedan metodian pristup za razvoj informacionih
sistema i to za sve faze razvoja od izrade studije izvodljivosti (feasibility study) , sve
do odravanja gotovih aplikacija.
Ukratko emo navesti neke od najpoznatijih SDLC modela za razvoj softvera.
Vodopad (Waterfall) model: To je klasian SDLC model kod kojeg se faze u
razvoju softvera linearno i sekvencijalno odvijaju jedna za drugom bez preklapanja
faza i/ili vraanja (iteracije) na prethodno zavrenu fazu. To se moe islustrovati
sledeom slikom:
Fizibiliti
Studija
Zahtevi
Analiza
Specifikacija

Dizajn
Analiza
Specifikacija

Programiranje
Kodiranje
Testiranje

Implementacija
Isporuka
Odravanje

Slika 2 Vodopad model


Fizibiliti
Fizibiliti stufijom se odreuje da li vredi uopte zapoeti rad na nekom softverskom
projektu. Ako je odluka da se projekat realizuje onda se ve u samoj fizibiliti studiji
daju osnove plana izvoenja projekta i procena budeta ( i drugih resursa) potrebnih
za realizaciju.
Zahtevi
Zahtevi za izradu novog ili modifikaciju postojeeg sistema predstavljaju detaljan
opis eljene funkcionalnosti i drugih karakteristika softverskog sistema koji e biti
razvijen.Zahtevi moraju biti to precizniji I u pisanoj formi, kako bi se na kraju
projekta moglo ustanoviti da li realizovani sistem odgovara zahtevima.

Dizajn
Dizajn se moe podeliti na tri dela:
Design focuses on:

Vii nivo kojim se odreuje koji su sve programski moduli potrebni, ta su


njihovi ulazi/izlazi i kako oni interaguju meusobno i sa drugim softverom i
operativnim sistemom.
Nii nivo na kojem se definie nain rada programskih modula, koji algoritmi i
modeli e biti korieni, koje su programske biblioteke potrebne i sl.
Dizajn podataka kao to je interfejs za ulaz/izlaz podataka, strukture podataka
koje e se koristiti i sl.

Do kojih e se detalja ii pri dizajnu je stvar izbora. Ako iamo veoma detaljan dizaj,
pisanje programskog koda e biti mnogo lake ali e naknadne promene ii mnogo
tee, dok je za sluaj grubog (manje detaljnog) dizajna mnogo vie posla ostavljeno za
pisanje koda, ali je i jednostavnija njegova naknadna promena. Iynad svega je vano
da dizajn bude dobro dokumentovan i da u dokumentaciji jasno pie zato su
napravljene one odluke kod kojih je bilo vie opcija. Takav pristup olakava
ukljuivanje novih programera na projekat, a takoe olakava dalji razvoj sistema
dodavanjem novih funkcija I karakteristika.
Programiranje i testiranje
U ovoj fazi se dizajn pretvara u programski kod. Programski alati kao to su
kompajleri i dibageri se pri tome koriste za generisanje izvornog koda dobrog
kvaliteta a time i celokupne softverske aplikacije. Testiranje manjih delova (modula)
je pogodan nain za kontrolu kvaliteta i pronalaenje greaka to je ranije mogue.
Testiranje sistema kao celine vri se da se proveri da li sistem radi na ciljnim
platformama, i da li njegovo ponaanje odgovara zathevima koji su postavljeni na
poetku projekta.
Odravanje
Od trenutka kada je softverski sistem isporuen korisnicima poinje i potreba za
njegovim odravanjem. Mogu se pojaviti greeke prouzrokovane pogreno unetim
podacima od strane korisnika (takve podatke uvrstiti u plan testiranja), ili zbog
neoekivanog i/ili nepravilnog korienja softvera (takve sluajeve uvrstiti u
dokumentaciju). korisnici, takoe, mogu zahtevati i dodatne funkcije koje nisu
ukljuene u tekuu reviziju softvera, mogu traiti da softver radi bre, ili ak postaviti
pred razvojni tim i vee probleme. Proces rzvoja softvera mora biti prilagoen za
promene koje take moraju proi kroz sve gore navedene faze.
Iterativni Razvoj (Iterative Development)
Ovde se propisuje inicijalna konstrukcija malog (pa sve veeg) dela softverskog
projekta kojom se pomae da svi oni koji su ukljueni u razvoj otkriju probleme i
pitanja pre nego to oni postanu suvie ozbiljni. Iterativni procesi su pogodni za
komercijalni pristup razvoju jer omoguavaju da se zadovolje potrebe buduih
korsnika softvera koji ne znaju da definiu ta im je potrebno. Iterativne metode

ukljuuju i druge ideje kao to su agilni softver I ekstremno programiranje, o emu e


biti rei kasnije.
Brzi razvoj aplikacija (Rapid Application Development - RAD): Ovaj metod baziran
je na konceptu da se softverski proizvod moe dobiti bre i bolje organizovanjem
radionica (workshops) interesnih grupa i na taj nain generiu softverski zahtevi.
Zajedniki razvoj (Joint application development - JAD): Ovaj model podrazumeva
ukljuivanje korisnika u dizajn I razvoj aplikacije kroz seriju kolaborativnih
vorkopova koji se nayivaju JAD sesijama.
Prototipski razvoj (Prototyping Model): U ovom metodu se najpre uradi prototip
sistema koji predstavlja samo jednu ranu aproksimaciju finalnog sistema. Zatim se
prototip testira I unapreuje sve do nivoa konano prihvatljivog prototipa na osnovu
kojeg se onda razvija eljeni softverski proizvod.
Sinhronizuj i stabilizuj (Synchronize-and-Stabilize): Ovaj model se zasniva na
timovima koji rade paralelno na individualnim modulima zajednike aplikacije,
povremeno (esto) sinhronizuju svoj kod sa kodovima ostalih timova do postizanja
stabilnog sitema, a zatim nastavljaju dalji razvoj. Ovaj metod se generalno koristi u
Majkrosoftvu i predstavlja osnovu Majkrosoftvove metodologije poznate kao
Microsoft Solution Framework (MSF).
Spiralni razvoj (Spiral Model): Ovaj model razvoja softvera kombinuje vodopad i
prototip modele. On je pogodan za velike, skupe i komplikovane projekte.

Organizija rada na softverskih projektima


Razvoj i proizvodnja softvera zahteva visko obrazovane strunjake raznih profile,
najsavremenija sredstva rada kao i dobru organizaciju rada. Analiziraemo aktivnsoti i
uloge lanova softverskog tima, organizaciju timova i potrebne uslove rada.
Aktivnosti i uloge softverskih timova
Sledea slika pokazuje kako se aktivnosti i uloge softverskih timova dovode u vezu sa
ivotnim ciklusom razvoja softvera. Liste aktivnosti i uloga su samo ilustrativne i
naravno ne iscrpljuju sve sluajeve.

Slika . Tri dimenzije projekta. Metodologije se bave samo delom projektnih aktivnosti.

Opisaemo sada neke od standardnih aktivnsoti i uloga prikazanih na gornjoj slici.


Ativnosti
Razvoj proizvoda (Product Development): Ovo je centralna aktivnsot u softverskim
projektima. Obuhvata ve pomenute procese analize, dizajna, kodiranja, testiranja,
odravanja, pisanja tehnike dokumentacije i sl.
Tehnika edukacija (Technical Education): Informacione tehnologije se veoma brzo
razvijaju. Praenje tako brzog razvoja zahteva poseban tretman u obuci i treningu
lanova softverskog tima. Specijalistiki kursevi, seminari, konferencije, vorkopovi
su samo neki od oblika permanentnog obrazovanja neophodnog da softverski
strunjaci odre visok nivo svoje profesionalnosti.

Odmor i rekreacija ( Rest and Recreation) Rad na softveru zahteva izuzetno naporno
mentalno angaovanje. Borba sa vremenom za to raniji izlazak na trite sa
proizvodom koji se razvija moe da bude veoma stresna. Zato softverske kue
pokuavaju da ove izuzetne napore svojih zaposlenih kompenziraju raznim oblicima
komfornih radnih okruenja, sportskih i rekreacionih aktivnosti. Nije udo to je u
Kaliforniji sedite najveih softverskih kompanija (Google, na primer) jer je
Kalifornija poznata kao deo USA sa izuzetnom ponudom za rekreaciju i razonodu.
Uloge
Dizajneri/Programeri: Ovo je sutinska uloga svakog razvoja softvera. To su
kreatori sistema. Oni definiu arhitekturu sistema, vre izbor platformi, alata, metoda,
algoritama, proizvode kod (source code). Moe postojati vie nivoa prema iskustvu
(seniori, juniori, poetnici, itd.) ili prema oblastima (GUI, biznis logika, baze
podataka, itd).
Testeri: Testeri su veoma vana uloga kojom se postie vie efekata. Pored kontrole
kvaliteta softvera koji se razvija, testeri mogu da pomognu i u podizanju ukupne
produktivnsoti tima, da ukau ne samo na reke u funkcionisanju ve i da, svojim
primedbama, pomognu dizajn korisnikog intefejsa, i/ili ukupne funkcionalnosti
sistema.
Pisci: Pisci su oni koji proizvode hiljade stranica teksta kojim se opisuje proizvod., od
prvog dokumeta kojim se proizvod najavljuje (white paper), pa sve do opisa
sistema, uputstava za korienje, marketinkih prezentacija i reklamiranja.
Menader projekta (Project Manager): To je osoba koja je najvie odgovorna za
uspeh projekta. On planira aktivnosti, prati izvrenje plana, komunicira sa svim
zaintersovanim stranama u projektu (lanovima softverskog tima, menadementu
firme, korsnicima, itd.). Sldea slika ilustruje rad menadera projekta.

Slika Uloga menadera projekta u agilnim SW projektima

Sponzor projekta (Project Sponsor) To je osoba koja predstavlja spiritus movens


projekta. Projekat je iv sve dok su lanovima tima na raspolaganju resursi (novac,
ljudi i oprema) potrebni za njegovu realizaciju. Sponzor predstavlja sponu projektnog
tima i finansijera projekta.
Timovi
Softverski timovi mogu biti organiyovani na vie naina. Sledea slika prikazuje
tipine organizacije.

Slika etiri principa organizacije

Kod hijerhijske organizacije uoava se jasna struktura tima sa efom na vrhu i


jednim ili vie podreenih nivoa. ( Primer: Vojna jednicia)
Random (razasuta) organizacija je organizacija u kojoj svako radi svoj posao bez
subordinacije i definisane kolaboracije. (Primer: Fudbalska reprezentacije Srbije)
Kolaborativna organizacija zahteva poveanu komunikaciju izmeu lanova tima,
nema hijerarhiju, ali deluje povezano. (Primer: Vaterpolo rprezentacija Srbije)
Sinhrona organizacija pokuava da obezbedi sinhronizovano delovanje svojih delova.
Nema izraenu hijerahiju. (Primer: Sinhrono plivanje).
U softverskih firmama prisutne su sva etiri tipa organizacije, jer imaju meusobne
prednosti i nedostatke. Bez obzira o kojoj se vrsti organizacije radi za timove vai
pravilo da je potrebno vreme za njihovo uspostavljanje. Proces uigravanja se odvija
kroz vie faza, od formiranja tima (forming), kroz burnu fazu upoznavanja (storming),
do uspostavljanja normalnog reima funkcionisanja (norming) i skladnog izvravanja
projektnih zadataka (performing).

Jedan primer moderne organizacije je takozvano programiranje u parovima (pair


programming), gde dva programera rade simultano, kako prikazuje sledea slika.

Slika. Programiranje u parovima

Na kraju, pominjemo i najnoviju inicijativu za metodologiju izrade softvera poznatu


kao Agilno programiranje (Agile initiative). Ova metodologija se zasniva na
principima datim u manifestu koji proklamuje ovu ideju (Agile Manifesto).
Manifesto for Agile Software Development
We are uncovering better ways of developing
software by doing it and helping others do it.
Through this work we have come to value:

Individuals and interactions over processes and tools


Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

That is, while there is value in the items on


the right, we value the items on the left more.

Pitanja
1. Navedite osnovne elemente razvoja softvera za koje je potrebna metodologija?
2. Zato je vano korienje metodologija?
3. ta je ivotni ciklus razvoja softvera (SDLC)?
4. Koje su glavne faze SDLC-a? Objasnite svaku fazu.
5. Navedite nekoliko poznatih modela za razvoj softvera?
6. Koje su etiri poznata naina organizacije?
7. Navedite neke aktivnosti pri razvoju softvera.
8. Opiite ulogu dizajnera-programera.
9. Opiite ulogu SW testera?
10. ta su glavne odgovornosti softverskog menadera projekta?
11. Kakva je uloga sponzora SW projekta?
12. Navedite nekoliko uloga koje mogu imati lanovi softverskog tima.
13. ta je agilni softver?
14. Koje su prednosti (nedostaci) programiranja u parovima?

You might also like