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

Display

Movies Pictures GUIs Music Alerts Speech Games Web feeds Peer-to-peer Save files Logs Downloads

World

Speakers

Internet

Internet

Storage

Storage

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
Kilo Mega Giga Tera Peta Exa Zetta Yotta

Abbr.
K M G T P E Z Y

Size
2^10 = 1,024 2^20 = 1,048,576 2^30 = 1,073,741,824 2^40 = 1,099,511,627,776 2^50 = 1,125,899,906,842,624 2^60 = 1,152,921,504,606,846,976 2^70 = 1,180,591,620,717,411,303,424 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 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

Prijemnik

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.

glava

tekui lan

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 x1

sledei - next
x2 x3 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: pop Stack push(o)

Vrh

3 2 7 6
current

Slika 6.8 Primer steka Implementacija pomou liste


Vrh steka

PUSH

POP

a1

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

rep

a1

a2

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 1. Poseti levi deo 2. Poseti desni deo 3. Poseti root

Postorder:

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 5 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 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. 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).

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 ... polje 1 Identifikaci oni broj polje2 Naziv firme polje3 Adresa polje4 Dug polje1 Identifikaci oni broj polje2 Naziv firme Slog 2 polje3 Adresa polje4 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

Slog N+1

Slog N+2

Slog N+3

polje 1

polje 2

polje 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

Slog N+1

Slog N+2

Slog N+3

polje klju

polje 2

polje 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
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

Sekvencijalna datoteka
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

ili

If Nivo_Vode = 0 then napuni ajnik

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 1: CBEAD 2: ABECD 3: DCBAE 4: ACDBE 5: ABDEC

devojke A : 35214 B : 52143 C : 43512 D : 12345 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
2

C A D B E

3
4 5

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: 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.

Proces

Ulaz/Izlaz

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. 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. Strelica slui za povezivanje grafikih simbola u smeru njihog logiki sukcesivnog izvravanja.

Odluka

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? NE

DA

Proces

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. 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. display poruka read broj rezultat = broj*2 display rezultat

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.

DA

Uslov?

NE

Naredbe

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.

Uslov?

Naredbe

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: 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.

Naredbe

Uslov?

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

uslov 2

Proces B

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 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 pokaziva na posledenje slovo x 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 broja slovo da li je slovo samoglasnik x 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 da li je pokaziva na tekue slovo <= pokaziva na poslednje slovo x 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

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

x 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 x T T T T a a a a j j j j t t t t e e e e

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 peek internal data

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 sender


dispatcher

receiver

sender sender

receiver

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 system dispatcher

add customer account

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 eventType == "A" : get customerName get next available accountNumber

if

# 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 // 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 // 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. podaci metode

data methods

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 Racun nazivRacuna brojRacuna stanjeRacuna Racun podizanje() ulaganje() proveraStanja()

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

(a) Klasa Samo ime klase

(b) Klasa Ime klase i atributi

(c) Klasa Ime klase i metode

(d) Klasa Ime klase atributi i metode

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

Krug

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) Pravougaonik centar duzina sirina povrsina() obim() pomeri(noviCentar)

pomeri(noviCentar) { centar=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 centar
povrsina() obim() pomeri(noviCentar) pomeri(noviCentar) { centar=noviCentar; }

Krug

Pravougaonik duzina sirina povrsina() obim()

poluprecnik 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

Pravougaonik duzina sirina povrsina() obim()

poluprecnik povrsina() obim()

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

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

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

poluprecnik povrsina() obim()

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

sadri>

Pravougaonik

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