Professional Documents
Culture Documents
Osnove Programiranja
Osnove Programiranja
1. UVOD
programer, u ovom predmentu moze nai neke korisne metode i tehnike koje e
poboljati njegovu optu sposobnost reavanja problema.
0.
0.
0.
0.
0.
0.
0.
0.
0.
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.
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
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
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
Input stream
Output stream
Program
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:
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
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
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.
10
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
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
Prijemnik
Slika 4.6 Serijski prenos podataka
Prijemnik
Predajnik
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?
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
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?
P[1]
...
P[n-2]
P[n-1]
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]
...
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
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.
a1
a2
a3
a4
Operacija INSERT
novi lan
glava
tekui lan
a1
a2
a3
a4
tekui lan
glava
a1
a2
a3
a4
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
pop
Stack
Vrh
2
7
6
current
PUSH
a1
POP
a2
a3
a4
dequeue
enqueue
tekui
a1
a2
rep
a3
a4
Implementacija listama
koren
list
list
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.
10
Inorder:
Postorder:
11
15
11
12
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.
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).
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.
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
Slog N-1
Slog N
polje klju
polje 2
Slog N+1
polje 3
Slog N+2
Slog N+3
polje 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
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.
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.
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.
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
ili
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.
Identiifikovati procese
Identifikovati glavne odluke
Identifikovati ponavljanja
Identifikovati varijable
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.
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
Sie predavanja
U ovom predavanju ste saznali o:
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?
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.
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
Ulaz/Izlaz
Odluka
Start
Poruka
Ulaz-broj
broj=broj*2
Izaz-broj
Kraj
Proces
DA
Uslov?
NE
Uslov?
DA
Proces
NE
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.
Naredba - proces
Uslov?
DA
Naredbe
NE
Naredbe
Uslov?
Naredbe
Naredbe
Uslov?
Proces A
Proces B
Proces C
uslov 1
Proces B
uslov 2
Proces C
10
c) Repeticija
Proces A
uslov
Proces B
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
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.
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.
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.
Sintaksna analiza
Generisanje koda
Mainski kod
Sintaksna analiza
Generisanje koda
Meukod
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
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();
}
}
}
/// <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:
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));
}
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
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
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.
add
customer
account
system
dispatcher
change
account
name
close
account
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 ...
if
eventType == "A" :
get customerName
get next available accountNumber
def load():
... code to retrieve an account object from persistent storage
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?
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.
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
class Program
{
static void Main(string[] args)
{
Student S1;
// Deklaracija
S1 = new Student();
// Inicijalizacija
Student S2 = new Student();
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
// 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);
Output
The value before calling the method: 5
The value inside the method: 25
The value after calling the method: 5
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.
podaci
metode
data
methods
Primer objekata
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.
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
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:
Racun
TekuciRacun
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
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()
Krug
poluprecnik
povrsina()
obim()
povrsina(){
return r^2*pi;
}
Pravougaonik
duzina
sirina
povrsina()
obim()
povrsina(){
return duzina*sirina;
}
11
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
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>
Student
Dodiplomac
Postdiplomac
Nastavnik
asistira>
Asistent
Profesor
Predavac
Pitanja
1.
2.
3.
4.
5.
6.
14
Dizajn
Analiza
Specifikacija
Programiranje
Kodiranje
Testiranje
Implementacija
Isporuka
Odravanje
Dizajn
Dizajn se moe podeliti na tri dela:
Design focuses on:
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
Slika . Tri dimenzije projekta. Metodologije se bave samo delom projektnih aktivnosti.
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.
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?