Professional Documents
Culture Documents
SADRAJ
SADRAJ Predgovor UVOD 1. UKRATKO O NASTANKU VISUAL BASIC.NET-A 2. RAZVOJNO OKRUENJE VISUAL BASIC.NET-A 2.1 Linija menija 2.2 Paleta sa alatkama (Toolbar) 2.3 Kutija sa alatkama (Toolbox) 2. 4 Prozor svojstava 2.5 Jo neki prozori u VB.NET-u... 3. FUNKCIONISANJE RAUNARA 3.1 Uloga raunara u poslovanju 3. 2 Reavanje problema bez ogranienja 3. 3 Reavanje problema sa ogranienjima 4. LOGIKE OPERACIJE 4.1 Osnovne logike operacije 4.2 Sloeni iskazi 4. 4 Primena logikih operatora u oblasti kompjutera 4. 4. 1 Logika operacija konjukcija 4.1.2 Logika operacija disjunkcija 4.4.3 Logika operacija iskljuivo ili 4. 4. 4 Sloeni iskazi u raunarskoj obradi 4. 5 Operatori u Visual Basic-u 4.6 Petlje i upravljake strukture 5 9 11 15 17 19 20 20 25 27 29 34 36 47 57 57 58 63 67 69 72 75 80 86
VI
4. 6.1 Struktura For...Next 4. 6. 2 Struktura Do/Loopl 4. 6. 3 Struktura If/Then/Else 4. 6. 4 Struktura Select 5. ELEMENTI PROGRAMSKIH BLOKOVA 5.1 Tipovi podataka 5.2 Promenljive 5.3 Konstante 5. 4 Komentari 5. 5 Prazan prostor 5. 6 Rad sa brojevima 5. 7 Rad sa stringovima 5. 8 Povezivanje (konkatenacija) 5. 9 Rad sa Datumima 6. OBJEKTNO ORIJENTISANO PROGRAMIRANJE 6. 1 Osvrt na MICROSOFT.NET FRAMEWORK 6.2 Objekti 6. 3 Enkapsulacija 6. 4 Dogaaji 6.5 Apstrakcija objekata:VIDLJIVOST 6. 6 Klase objekata 6. 6. 1 Izgradnja klasa 6. 6.2 Mogunost ponovnog korienja koda 6. 7 Funkcije (Potprogrami, procedure , podrutine) 6. 7. 1 Sintaksa procedure Sub 6. 7. 2 Pozivanje procedure Sub
87 88 91 95 101 102 103 106 108 109 109 115 116 122 125 126 129 132 133 134 134 136 139 140 141 142
VII
6. 7. 3 Funkcijske procedure 6. 7. 4 Nazivi funkcija 6. 7. 5 Analiza primene parametara u procedurama 6. 8 Nasleivanje 6. 9 Polimorfizam 6. 10 Programska naredba u Visual Basic-u 7. RAD SA PODACIMA 7. 1 Vektori 7. 2 Matrice 7. 3 Nizovi u visual basic.Net-u 7. 4 Sortiranje i pretraga nizova 7. 5 Strukture 7. 6 Kolekcije 7. 6.1 Brisanje stavki sa liste 7. 6. 2 Listanje i prikaz stavki u nizu 7. 7 Dinamiki niz 7. 8 Viedimenzionalni niz 8. 2 Povezivanje aplikacije sa bazom podataka 8. 2 Dodavanje kontrole na formu aplikacije 8. 3 Dodavanje kontrola za navigaciju sa podacima LITERATURA
144 145 146 148 150 150 153 153 154 155 159 160 164 166 169 170 172 178 182 183 191
PredgoVor
Programiranje, kao vetina izrade aplikacije, zahteva poznavanje elementarnog znanja, dobrog logikog razmiljanja sa primesama kreativnosti. Savremeni alati za izradu aplikativnih softvera su se razvili do tolike mere da omoguuju razvoj veoma kompleksnih informacionih sistema zasnovanih na najnovijim raunarskim tehnologijama. Ispratiti tu iroku oblast sa strunog aspekta zahteva ipak sistematino savlaivanje programerskih metodologija, koncepata informacionih sistema ali i alata. Postoji odreena diferencijacija u oblasti informatike. Neki se bave samo izradom aplikacija, neki multimedijalnim sistemima, projektovanjem baze podataka, administriranjem podataka itd. Ali za sve je to potrebno odreeno znanje. U okviru predmeta Programiranja na smeru menadera poslovne informatike Fakulteta za menadment izuava se nain kreiranja aplikacije. Stoga, ova knjiga je namenjena kao potrebna literatura za predmet Programiranja. Sam koncept knjige je zasnovan na popularnoj paradigmi programiranja objektno orijentisanom programiranju, ali zadire i u logike aspekte razmiljanja, kao neophodne podloge za razvoj programerskog razmiljanja. Sa ovog aspekta mogu se zaokruiti dve velike celine knjige. Prvi deo odnosi se na elementarna znanja koja su potrebna jednom programeru bez obzira na programski alat. Poto veina knjige se bavi principom programiranja pomou nekog savremenog softverskog alata i esto je zapostavljeno ono to je osnovno u ovoj oblasti. Od te osnove ne moemo pobei, bez obzira koliko je tehnika uznapredovala. Jo uvek raunar funkcionie sa starim, dobrim nulama i jedinicama i na potpuno istoj logici. Ono to je toliko odskoilo u razvoju savremenih softverskih alata je njena laka primena pri razvoju aplikacije. Drugi deo knjige je iskljuivo usredsreen na objektno orijentisani princip graenja aplikacije. Izloena je osnovna koncepcija objektne orijentisanosti. Za savlaivanje ove koncepcije u knjizi se demonstriraju i konkretni primeri i to pomou alata koji je potpuno objektno orijentisan Visual Basic.NET. Cilj je da studenti ovladaju ovom vetinom, a da na osnovu steenog znanja se mogu dalje razvijati i u druge sfere informatike. S obzirom da knjiga sadri i osnovnu programersku metodologiju, a ne samo izlaganje
upotrebe komponenata alata, mogu ga koristiti i oni koji su van ovih nastavnih okvira. Naposletku elim da se zahvalim svima koji su doprineli i omoguili da se ova knjiga objavi, ali i onima koji su dali podrku svemu tome.
UVOD
Iako razvoj i primena savremenih raunarskih tehnologija nema duboke istorijske korene, ipak je to oblast koja belei najbre i naj drastinije promene poslednjih decenija. Pojava personalnih raunara i revolucionarni korak nainjen Microsoft-ovim Windows okruenjem, omoguili su masovnu primenu raunara, ujedno pribliavajui ga korisniku. Evidentno je da su raunari svugde oko nas: na poslu, u koli, kod kue itd. Prodrli su u sve sfere naeg ivota, gde je intelektualni rad oveka pogodniji putem raunara. Dugotrajni i zamorni poslovi polako padaju u zaborav, a poslovni procesi postaju bri. Da bi raunar mogao da izvede odreeni posao mora se obuiti za to. To je maina, vetaka tvorevina, koja ne poseduje sopstveni intelekt. Raunaru je potrebno saoptiti kako i ta e da radi, to se odvija putem kreiranog programa. Raunari, kada reavaju postavljene zadatke, izvravaju programe pisane za tu namenu. U savremenim trendovima izuavanja procesa programiranja esto se postavlja pitanje kojoj oblasti pripada programiranje: da li je to oblast istog inenjerstva zasnovanog iskljuivo na strogim naunim principima, ili je to moda samo vetina kojom su sposobni da vladaju pojedinci a moda se moe svrstati u umetnost. Sve ove tri oblasti su vane i ne iskljuuju jedna drugu. Programiranje nije vetina koju poseduju samo neki talentovani pojedinci sa darom za identifikovanje i reavanje problema. Programiranje se moe savladati i nauiti. Naravno, potrebno je posedovati i kreativni duh za izradu programa, neto vetine ali i savladati metodologiju programiranja zasnovanu na
12
naunim principima. Svrsi shodno je uvaavati steena znanja i iskustva iz ove oblasti, koja izviru iz odreenih zakonitosti u vidu ogranienja, kriterijuma i mogunosti izbora. Reavanje nekog problema nije stihijski. Ne radi se metodom pokuaja i pogreke, ve je potrebno primeniti odreenu ustanovljenu metodologiju kreiranja programa. Prema tome moemo jednostavno postaviti definiciju: Programiranje je kreativan postupak izrade programa. Smatra se da je to vetina iju osnovu ini stvaranje i izrada algoritama pri emu se koriste programski jezici. Poi na intelektualni put, kao to je programiranje, zahteva formiranje mentalne mape, slino kao kada se odluimo otii na neko egzotino putovanje. Primena odreene metodologije i sistemskog pristupa u reavanju problema dovodi do adekvatnih rezultata. Cilj je da se eliminie neizvesnost u pronalaenju reenja. To znai da je reenje elegantno, pregledno i sigurno se pronalazi. ak se pri tome pokazuje i odreena sigurnost u proceni vremena izrade. Postupak kreiranja programskog reenja obuhvata nekoliko faza: analizu problema na konceptualnom nivou: definisanje i opis problema odreivanje skupa ulaznih i izlaznih podataka izrada formalne i neformalne specifikacije predvianje potrebnih instrukcija za reavanje problema na apstraktnom nivou plan izrade programa: plan realizacije na osnovu specifikacije saoptavanje reenja raunaru kodiranje i unos u raunar, testiranje programa, eksploataciju programa i dokumentovanje programa.
13
Analizom problema formira se idejno reenje na konceptualnom nivou. Jednostavno reeno utvruje se ta e taj program da radi. Spoznajom njegove namene, ulaznih i izlaznih vrednosti kao i analizom procesa koji se preslikavaju u program nastaje algoritam za realizaciju postavljenog problema. To predstavlja plan programa. Algoritam se konkretizuje nizom programskih instrukcija putem nekih od programskih jezika. Primena programskih jezika zahteva uvaavanje odreenih pravila sintakse programskog jezika (gramatiku - jezika). Da bismo konkretizovali nae reenje postavljenog zadatka potrebno je vladati i nekim odreenim alatom. Jedan od pogodnih jezika za upoznavanja izrade programa je Visual Basic.NET. Relativno je lako za uenje i primenu, pa e ovde, osim logike i tehnike, objektno orijentisano programiranje biti upotrebljeno za konkretno savlaivanje vetine kreiranja softverskog reenja. Zavrni deo postupka programiranja zahteva proveru izvoenja zadatih instrukcija. Putanjem u probni rad kompajliranjem programskog koda - utvrujemo da li taj program radi po naim oekivanjima. U sluaju neoekivanog ponaanja potrebno je izvriti korekciju programskih instrukcija. Inae, ako zadovoljava naa oekivanja i svrsi shodno obavlja postavljeni zadatak, program se moe pustiti u rad u realnom okruenju tj. prei na njegovu konkretnu eksploataciju.
16
Ono to je Windows okruenje promenilo je zamorno pisanje dugih tekstualnih programskih kodova. Alati razvijeni za brzo kreiranje i izradu programa zasnovani su na konceptu ugradnje gotovih elemenata u operativni sistem. Interfejs aplikacija se oslanja na crtanje prozora i elemenata (komponenata), pa se programiranje ovde svodi na definisanje osobina pojedinih komponenata. Zadate akcije nad komponentama se izvravaju generisanjem dogaaja. Primer jednog od takvih dogaaja je pritisak tastera mia, pri emu e se izvriti neki dogaaj, realizovati neka akcija. Kakvu akciju e dogaaj izvriti zavisi od unetog programskog koda. To moe biti izlazak iz programa, otvaranje nekog dokumenta i slino. Od prvih verzija Visual Basic-a prevaljen je put, u kome je Microsoft neumorno radio na usavravanju ovog alata, konano dostiui do potpuno orijentisanog objekta. Pre nego to pristupimo savlaivanju osnovne metodologije programiranja bie nekoliko rei o integrisanom razvojnom okruenju Visual Basic-a, ali prevashodno osvrnuemo se i na digitalni raunar kao sredstvo rada, na njegove elemente i funkcionisanje.
18
ili celom timu za izradu velikih stratekih softverskih aplikacija na nivou organizacije. Takoe sadri alate za razvoj multimedijskih sadraja. Sa Visual Studio.NET-om nainjen je jo jedan korak unapreenja ovog okvira, tako da se radi o potpuno Integrisanom Razvojnom okruenju. Konkretno sadri Visual Basic, Visual C++, Visual Java#, Visual C# i razne druge zajednike alatke npr. Visual Studio Solution. Pokretanjem Visual Studio.NET-a otvorie se prozor na kom se pojavljuje Integrisano Razvojno okruenje (IDE) sa startnom stranom (Start Page). Pokretanjem novog projekta otvara vam se mogunost biranja alata sa kojim ete raditi Visual Basic.NET, Visual C#, Visual Java # itd. Na slici 21 prikazana je poetna strana (Start Page) za Microsoft Visual Basic 2005 Express Edition, alat pomou koga e se uiti programiranje, a ima velike slinosti sa verzijom VB.Net 2003 .
19
Novi projekat se pokree odabirom i aktiviranjem dugmeta Create Project ili otvaranjem neke druge postojee aplikacije sa dugmetom neposredno iznad opcije Create Project-a Open Project. Ali da se vratimo na Start-nu stranu i da vidimo ta ova kartica sadri. Na njoj se nalazi sledee: Liniju menija Paletu sa alatkama (Toolbar) Kutiju sa alatkama (Toolbox) Solution Explorer
File: programi za otvaranje i zatvaranje datoteka i projekata. A kao i u svim Microsoft-ovim alatima ovde se moe izai iz aplikacije Edit: komande za isecanje, kopiranje, umetanje teksta i objekata, Find, Replace itd. View: pomae u podeavanju radne povrine. Omoguuje brz pristup prozorima kao to su: Solution Explorer, Database Explorer Toolbox, prozor svojstava (Properties) i slino Project: za dodavanje raznih drugih datoteka u aplikacije Build: za pokretanje aplikacije bez korienja okruenja Visual Basic.NET-a Debug: za otkrivanje greaka i za pokretanje/zaustavljanje rada aplikacije pri njegovom izvravanju. Data: daje mogunost da doemo do informacija iz baze podataka. Nije aktivan u toku pisanja koda.
20
Format: pomou njega dovodimo u red niz neurednih prozora. Slui za nametanje prozora onako kako e se pojaviti kod korisnika. Tools: obuhvata komande za konfigurisanje Visual Studia.NET IDE-a, ali sadri i komande za veze sa drugim spoljanjim alatima koji su moda instalirani. Window: Slui za upravljanje prozorima Community: Omoguena je komunikacija sa drugim programerima i korisnicima VB.Net programskog alata za razmenu miljenja, za pomo i slino Help
21
1. Pokaziva (Pointer) podrazumevana alatka u Toolbox-u 2. Dugme (Button) Jedna od najpopularnijih kontrola VB-Net-a. Koristi se za izvravanje nekih dogaaja kao to je npr. dodavanje podataka u bazu podataka, izvravanje aritmetikih izraunavanja ili nekih sloenijih obrada podataka i slino. Iako ova kontrola moe pokrenuti razliite dogaaje, kada se doda
22
na formu aplikacije i pokrene editor za kod pojavljuje se podrazumevani dogaaj Click (slika 2-4)
3. Polje za potvrdu (CheckBox) Prua mogunost da se na odreeno pitanje odgovori sa YES (da) ili NO (ne). 4. Polje za tekst (TextBox) Druga najee koriena kontrola je polje za tekst. Slui za rad sa promenljivama. Moe se koristiti i za tekst sa mnogo redova. Ako je tekst toliko dugaak da prevazilazi veliinu okvira TextBox-a, onda okvir moe imati sopstvene trake za pomeranje. Uneti podaci (tekst) u ovom polju mogu da se obrauju, za razliku od Label-a. 5. Kontrole za prikaz teksta (Label) Pomou ove kontrole prikazujemo tekst u naoj aplikaciji. Slino ovoj kontroli je i LabelLink koji daje mogunost primene hiperlinka. Slui za oznaavanje kontrole i drugih delova obrasca. One samo saoptavaju neto, ali tekst unet u njih se ne obrauje. 6. Lista (ListBox) To je lista stavki unutar okvira. 7. Polje za grafiku (PictureBox) Ova kontrola ima vie mogunosti: ona moe sluiti kao kontejner (slino frame-u), zatim reaguje na odreen skup dogaaja i konano takoe podrava razliite formate slike.
23
Pogodna je kada se radi o aplikacijama koje koriste programski interfejs (API). 8. Okvir (GroupBox) Upotrebljava se za razvrstavanje kontrola u logike grupe, ime one postaju preglednije. Istovremeno omoguuju i rad sa ovom kontrolom. Pored toga oni su i kontejner i tako su i grupisani. 9. Dugme opcije (OptionButton ili Radio buttons) Funkcionisanje OptionButton-a je slino starim radio-aparatima u kolima. Samo pritisnuto dugme moe biti aktivno. Pritiskom na drugo dugme, trenutno aktivno dugme se iskljuuje i ukljuuje se odabrano dugme. Znai u pritisnutom stanju moe biti samo jedno dugme. Druga bitna stvar je da na obrascu moe postojati vie grupa ovih kontrola. U tom sluaju oni se razdvajaju okvirima. Tada je mogue odabrati opciju i u jednoj i u drugoj grupi. 10. Padajua lista (ComboBox) Ova kontrola objedinjuje funkcije kontrole ListBox i TextBox. Korisnik ga upotrebljava tako to iz padajue liste bira podatak (stavku), koji se zatim unosi u okvir za tekst. Postoje tri razliita stila ComboBox-a: Obina padajua (Dropdown list) korisnik moe da bira sa liste ali ne moe da unosi tekst za tu namenjenu kontrolu, Jednostavna kombinovana lista (Simple Combo) korisnik moe da upie svoj izbor, ali je lista i dalje otvorena. Kombinovana padajua lista (Dropdown Combo) Kombinuje padajuu listu i unos teksta svog izbora. 11. Horizontalna (HScrollBar) i 12. Vertikalna traka za pomeranje (VScrollBar) Koriste se za pomeranja po kontroli, i to najee u okviru za tekst. 13. Povezivanje sa podacima (Data) Omoguava pristup bazama podataka
24
Na slici 25 prikazane su ostale grupe kontrole od kojih su istaknute grupe: kontrole za rad sa menijima kontrole za rad sa podacima i i sl.) kontrole za rad sa dijalozima - (slue za otvaranje, uvanje datoteka
Slika 25: Prikaz ostalih grupa kontrola kao to su kontrole za rad sa menijima, podacima, komponentama, dijalozima itd.
25
Pokretanjem novog projekta otvara nam se novi prozor, prikazan na slici 2 6, pri emu se odabira alat kojim se radi i ta e da se radi npr. izrada aplikacije. Po otvaranju prozora za kreiranje novog projekta, ponuena nam je aplikacija, naziv (engl. Name), u ovom sluaju je WindowsApplication1 koji se moe promeniti po elji.
Nakon odreivanja naziva aplikacije i pritiskom na dugme OK otvara se sledei prozor (slika 27) gde je posebno naznaen Prozor svojstva Properties.
2. 4 Prozor svojstava
Kontrole pri kreiranju programa u Visual Basic-u predstavljaju objekte. Svaki objekat, slino bilo kojem objektu realnog sveta, poseduje odreene karakteristike, osobine.
26
Primera radi osobine cvea su boja, veliina, oblik, vrsta i slino. Pored toga, svaki objekat moe da ispoljava odreeno ponaanje, izvesti neku akciju. Tako i nad objektima se mogu desiti neke akcije. Spomenute osobine se zovu svojstva (properties), a akcije nad objektom metode (methods). Prilikom programiranja panju emo usmeriti najvie na svojstva, jer je neophodno da ih paljivo pregledamo i odredimo kod svakog objekta. Podeavanje se vri u prozoru svojstva (properties) to se nalazi na desnoj strani ekrana i izgleda kao na slici 2 8.
27
Prozor svojstva (properties) sadri kategorije kao to su : Pristupanost (Accessibility) Izgled (Appearance) Ponaanje (Behavior) Data Dizajniranje (Design) Itd.
28
Prozor task list pokazuje greku prilikom pokretanja koda. U ovom prozoru se bira stavka koja dovodi do reda koda gde se nalazi greka. Pogled Class (pojavljuje se u Solution Explorer-u kao kartica) prikazuje hijerarhije klasa sa osobinama i svojstvima koje poseduju. Klasa obuhvata podatke i funkcije koje manipuliu sa njima inei jednu celinu. Svojstva su podaci a metode funkcije odnosno pod programi. Prozor Output javlja se kao rezultat pokretanja koda. Dynamic Help (dinamika pomo)- nalazi se u krajnjem donjem desnom uglu celokupnog obrasca koji moe pruiti pomo u toku izrade aplikacije. Odabiranjem bilo ega u IDE, moe se videti lista stavki koji se odnose na odabrani objekat.
3. FUNKCIONISANJE RAUNARA
Digitalni raunar predstavlja univerzalno sredstvo pomou kojeg reavamo niz razliitih zadataka. Metoda koja dovodi do efektivnog reenja postavljenog zadatka zasniva se na izvoenju skupa logikih, aritmetikih i transportnih operacija. Rezultat ove metode je opte reenje, koji sadri niz koraka, a na osnovu ega se pristupa reavanju zadatka pomou raunara. Zahteva se da postupak pronalaenja opteg reenja, koji ima sledee osobine: uoptenost to se odnosi na mogunost reavanja bilo kog zadatka; osobine odreenost zadatak mora biti razumljiv i taan, bez mogunosti da se proizvoljno tumai i rezultativnost pod kojim se podrazumeva da dovodi do reenja nakon odreenog broja koraka. Postupci koji se odlikuju ovim osobinama se zovu ALGORITMI. Od njih nastaju programi, kada se pojedini koraci postupka reavanja ralanjenih na elementarna dejstva predstave, pomou raspoloivog skupa instrukcija (osnovnih operacija) raunara. Osim ovih osobina algoritmi treba da zadovolje sledee uslove: Definisanost - svaka operacija ili pravilo mora imati definisano i samo jedno znaenje, tj. rezultat svake operacije mora biti jasno definisan.
30
Diskretnost - jedan algoritamski korak se obavlja u jednom vremenskom intervalu. Konanost mora da postoji odreen, konaan, broj koraka algoritma. Efikasnost - odreena je brzinom i jednostavnou algoritma. Elementarnost jednostavna pravila za dobijanje izlaznih veliina na osnovu ulaznih veliina, u svakom algoritamskom koraku. Usmerenost za svaki skup ulaznih veliina postoji definisan rezultat Univerzalnost razliiti ulazni podaci dovode do odgovarajuih rezultata. Elastinost primenljivost algoritma na razliite varijante izvornih podataka. Programi mogu biti jednostavni ili sloeni u zavisnosti od broja osnovnih operacija. Bitno je istai da savremeni raunari mogu izvesti i do nekoliko milijardi operacija u sekundi. Termini koji se koristi za osnovne operacije u sferi programiranja su instrukcija, nalog, naredba i slino. Da bismo stvorili sliku o tome kako e raunar da izvede neki zadatak, koji smo mi prethodno reili i saoptili raunaru upotrebom programskog alata proviriemo u samo funkcionisanje raunara. Na slici 31 prikazan je model uproenog raunarskog sistema sa svojim komponentama. To su centralni deo raunara, ulazno/izlazne jedinice, a koji su povezani putem kanala. Centralni deo raunara sadri: 1. jedinicu za obradu podataka, 2. operativnu memoriju, 3. upravljaku jedinicu, 4. operativni sistem, Zatim slede komponente: 5. ulazno/izlazne jedinice,
31
Na slici 31 su prikazani i tokovi podataka , programske instrukcije i instrukcije u obliku upravljakih intervencija (3).
Kao to se i iz samog naziva ove komponente primeuje jedinica za obradu podataka, koja ima zadataka da obradi tj. da izvri aritmetike operacije kao to su sabiranje (+), oduzimanje (-) itd. U nekim sluajevima uporeuje veliine odnosno izvodi logike operacije (<, >, =,..). Ove operacije vre se na podacima koji mogu po prirodi porekla biti izvorni ili meu rezultati. Kada je nareena operacija izvrena dobija se konani rezultat. U raunaru se pored izvornih podataka, meu rezultata i rezultata, uvaju programi u operativnoj memoriji. Treba istai da je model raunarskog sistema uproen tako, da ga moe na najpovoljniji nain ematski prikazati. Program je skup instrukcija, razumljivih raunaru, putem kojih se reavaju postavljeni problemi.
32
Uloga upravljake jedinice da interpretira tumai instrukcije programa. Nakon toga generie upravljake impulse koji se prosleuju odreenim komponentama nalaui im da izvre odreene zadatke. Pored toga upravljaka jedinica nadzire i usaglaava rad celokupnog sistema. Kanali odnosno procesori za komunikaciju obezbeuju komunikaciju izmeu perifernih jedinca i centralnog dela raunara. Isto tako i omoguuju razmenu podataka i instrukcija operativne memorije sa ostalim delovima. Ova komponenta upravlja radom perifernih jedinica, tako to osnovne upravljake naredbe dobija od upravljake jedinice, dok ostalim delom upravlja sam. Ovi kanali su prisutni samo kod velikih savremenih raunara. Kod manjih raunara ovu ulogu preuzima upravljaka jedinica. To znai da prilikom upravljanja radom i razmenom podataka perifernih memorija upravljaka jedinica je potpuno posveena tom zadatku i nije u mogunosti da obrauje podatke u centralnom procesoru. Putem ulazno/izlazne jedinice se saoptavaju podaci i programi za njihovo izvrenje kao i dobijeni rezultat. I poslednja komponenta modela raunarskog sistema prikazanog na slici 31 je periferna memorija. Ona je neophodna u sluaju kada nema mesta u operativnoj memoriji ili ako elimo da sauvamo podatke na posebnim medijima, pa se podaci memoriu u cilju zatite. U nekim sluajevima pohranjuju se ak i programi eksterne memorijske jedinice. Prema tome, raunari su takve maine koji se mogu primeniti u razne svrhe. Pomou njih se mogu reavati razni problemi bilo da su matematikog, poslovnog ili nekog drugog porekla. Prilikom izvravanja programskih instrukcija oni obrauju podatke, to ilustruje ema na slici 32. Sa aspekta materijalnosti inioci raunarskog sistema se slino dele na materijalne i nematerijalne. Materijalni inioci se zovu hardverom i obuhvataju sve fizike komponente sistema: Operativnu memoriju Centralni procesor (aritmetika-logika i upravljaka jedinica) Periferne jedinice procesor za komunikaciju
Objektno orijentisano programiranje ulazno /izlazne jedinice periferne memorije. U nematerijalne tj. softver, spadaju: bazini i programi koji reavaju konkretne zadatke postupci i pravila (celokupno znanje raunara).
33
Posebno treba skrenuti panju da tokom razvoja novih tehnologija, aritmetiko-logika jedinica i upravljaka jedinica zajedno predstavljaju centralni procesor raunara (mikroprocesor). Njihovo funkcionisanje je sinhrono. Aritmetiko-logika jedinica je zaduena za izvoenje aritmetikih i logikih operacija, dok upravljaka jedinica odreuje koje e operacije realizovati aritmetiko-logiku jedinicu. Takoe nalae i nad kojim podacima e te operacije biti izvrene, pri emu interpretira zadate instrukcije. Instrukcije (programi) i poetni podaci saoptavaju se raunaru putem tastature i mia ili iz nekog drugog izvora podataka (ULAZNA JEDINICA) i smetaju se u MEMORIJSKU JEDINICU raunara. Memorija se sastoji od niza numerisanih elija radi pronalaenja pohranjenih informacija. Mesto pohranjenih informacija u memoriji odreeno je rednim brojem elija ili kako se to u raunarskoj terminologiji zove memorijske adrese. U elijama memorije informacije se uvaju u obliku instrukcija ili podataka. Podaci mogu biti:
34
Objektno orijentisano programiranje ulazne veliine, meu rezultati (delimino obraeni podaci) i/ili konani rezultati.
Izvravanje instrukcija se ne odvija nasumice. Postoji unapred odreeni redosled izvravanja instrukcija koji je odreen programom. Program sadri sled instrukcija definisan algoritmom. Instrukciju, upravljaka jedinica, pronalazi po odgovarajuoj adresi, odnosno u eliji, gde je bila smetena. Njen zadatak je da sprovede instrukciju. Nakon interpretacije instrukcije nalae aritmetiko-logikoj jedinici da obradi podatke, pri emu dobijene rezultate upravljaka jedinica smeta u odreenu memorijsku eliju. Zatim upravljaka jedinica prelazi na interpretiranje druge instrukcije i na njenu realizaciju, pa na treu itd. Rezultati obrade saoptavaju se krajnjem korisniku putem IZLAZNIH jedinica, u koje spadaju monitor, disketni pogoni, CD/DVD ili tampai.
35
Kada elimo da koristimo neko sredstvo za rad moramo biti svesni njegovih ogranienja, kao to su fizika, tehnika i eksploatacijska ogranienja. Druga znaajna stvar u vezi primene sredstava rada je poznavanje funkcionisanja tog orua. Dodue savremeni programski alati su toliko napredovali da nije potrebno do detalja poznavati svaku komponentu, ali na nekom globalnom nivou to je ipak potrebno. Odgovor na pitanje zato je to potrebno proizilazi od samog naina upotrebe bilo kog aparata. Vano je zbog poznavanja naina aktiviranja i mogunosti upravljanja oruem za rad. Sve ovo vai i za raunar poto spada u sredstva za rad. Raunar je maina ija je svrha da obavi odreeni zadatak putem primene i izvravanja niza instrukcija. U cilju da se u potpunosti iskoristi njegova osnovna osobina velika brzina neophodno je odabrati one instrukcije tj, ona upravljaka uputstva, kojima bi se skratilo dugo vreme ekanja prilikom izvrenja. To znai da program koji se izvrava treba da bude razumljivog oblika u raunaru. Program nije unapred ugraen u raunar, kao u veini automatizovanih orua za rad, ve se formira u zavisnosti od poslovnih potreba. On se pie u odgovarajuem programskom jeziku, koji se zatim prevodi na razumljiv oblik raunara, mainski jezik. Iz ovoga proistie da u primeni raunara u prvi plan dolazi njegovo programiranje, a to opet zahteva neka elementarna znanja o raunaru. Kao sredstvo za rad i raunar ima svoju svrhu upotrebe. Sa jedne strane ovek kada ga primenjuje eli da proiruje svoju intelektualnu snagu, dok sa druge strane eli da se oslobodi mnogih zamornih i dugotrajnih poslova. U prethodnom poglavlju je ve bilo rei o tome da raunar moramo osposobiti, nauiti poslu koji elimo da obavi umesto oveka. Da bi raunar izvrio postavljene zadatke mora postojati niz instrukcija koji e ga navoditi na reenje. Te instrukcije daje ovek. Znai da ovek sa svojom centralnom ulogom mora sagledati problem, analizirati ga i veoma precizno isplanirati postupak reavanja. Zatim je potrebno to reenje pretoiti u niz programskih instrukcija. Sledei korak je saoptavanje reenja u obliku programskog koda raunaru, koji e doslovce da prati svaku saoptenu instrukciju. Naravno, instrukcije se saoptavaju na odgovarajuem jeziku, odnosno, jeziku koji raunar razume. To je veoma vano jer raunar
36
izvodi mainske instrukcije, a te instrukcije su u binarnom kodu. Raunar obrauje podatke putem nule i jedinica. Ovakav binarni oblik rada je veoma sloen za oveka, pa je reenje naeno u korienju prevodioca. Tako sada ovek saoptava programske instrukcije na jeziku koji je za njega mnogo blii, a raunar ih ipak obrauje u binarnom kodu. Ovako opisana obrada podataka izgleda veoma jednostavna, ali u mnogim sluajevima, raunar ne dolazi jednim korakom do reenja. Nekada izvrava veoma sloene instrukcije. Po dosadanjem objanjenju videli smo da pri funkcionisanju raunarskog sistema nastaju rezultati obrade podataka. Takoe moe postojati i meu rezultat. On e se obraivati u kasnijim procesima obrade podataka. Zavretkom obrade, rezultati se saoptavaju korisniku. Iz ovoga sledi da pri pripremi postupka reavanja nekog problema moramo voditi rauna ne samo o samom postupku ve i planirati prostor za pohranjivanje podataka (bilo ulaza/izlaza ili meu rezultata), odnosno projektovati funkcionalno reenje. Iako ovo izgleda veoma banalno u dananje vreme kada postoje personalni raunari sa memorijama reda veliine tera bajta, a kamoli ono to mogu obezbediti umreeni raunari, ipak prostorno planiranje memorisanja podataka ima znaaja u praksi. Dobro isprojektovan sistem omoguuje bolje performanse, pogotovo kada su u pitanju projektna reenja za velike sisteme.
37
podataka postoje ogranienja: odjednom se moe sabrati samo dva broja tj. argumenta. Znai, imaemo jedan meu rezultat koji moe biti: A+B ili A+C ili B+C i to u zavisnosti od toga za ta emo se odluiti da bude prvi ulazni element. Dobijeni meu rezultat se takoe smeta u operativnu memoriju. On je neophodan za sledei korak sabiranja. Predvieni prostor u operativnoj memoriji za meu rezultat oznaiemo sa D. D=A+B ili D=A+C ili D=B+C Do sada smo izloili samo matematiki postupak, ali za ceo postupak raunanja mi moramo saoptiti podatke raunaru. Isto tako i on nama mora prikazati reenje problema. To se postie davanjem odreenih instrukcija. REZULTAT predvianja reavanja problema: kako e se izvriti komunikacija raunara i oveka, zovemo PLAN OPERATIVNE MEMORIJE. Njime predviamo kako e se podaci saoptiti raunaru, na koji nain e se rezultat prikazati na ekranu, kako e se zadatak izvriti u raunaru, koji su prostori potrebni za izvorne podatke, meu rezultate i rezultate. Slika 33. ilustruje plan operativne memorije za sabiranje tri broja. Kada postoji ve plan operativne memorije moemo i da ponemo sa reavanjem zadatog problema.
38
Sledee pitanje je koje predznanje treba da imamo o samom zadatku. Prvenstveno treba da smo upoznati sa kojim brojevima e se izvriti aritmetika operacija. To je vano razjasniti, jer raunar izvodi operacije sa konkretnim brojevima, a mi to moramo saoptiti raunaru, tj. da ih definiemo. Postupak saoptavanja se zove davanje instrukcija raunaru, to je oznaeno na slici 33 sa strelicama. Za konkretni primer imamo tri instrukcije za itanje podataka:
Ovo su izvorni podaci, odnosno konkretni brojevi koje elimo da saberemo, a koje uitavanjem smetamo u operativnu memoriju. Sada nailazimo na problem sabiranja. To moemo izvesti na vie naina:
Objektno orijentisano programiranje Slika 34 prikazuje ostala dva skupa moguih instrukcija.
39
40
Kada reavamo problem mi razmatramo sva mogua reenja od kojih emo odabrati najpogodniji za primenu u raunaru. U ovom sluaju nije toliko vano koji emo skup instrukcija da odaberemo, jer je nain reavanja isti, pa emo odabrati instrukcije d i e. Kada izvrimo instrukciju sabiranja d stvara se meu rezultat koji smetamo u predvienu lokaciju D. Zatim sabiramo meu rezultat i broj C, to se izvodi instrukcijom e i smeta se u polje Z. Sada jo ostaje da se dobijeni rezultat saopti krajnjem korisniku, to je na slici 34 oznaeno sa instrukcijom j. Ako bolje pogledamo sliku 34 vidimo da odabrane instrukcije {a, b, c, d, e, j} ne moemo izvesti bilo kako. Tu postoji odreeni redosled. Izmeu instrukcija se javlja zavisnost, jer raunar, kako smo ve spomenuli, obavlja aritmetiku operaciju sa konkretnim brojevima. Da bi polje D (meu rezultat) mogao da se sabere sa treim brojem, neophodno je da se saberu prethodna dva broja. Ako je polje D prazno raunar nema ta da doda broju C. Znai, instrukcija d ne moe biti izvrena pre nego to su izvrene instrukcije a i b. Slino je i sa instrukcijom e , pa i sa instrukcijom j. Za izvrenje instrukcije e neophodno je izvriti instrukciju itanja treeg broja i sabrati sa meu rezultatom. Zakljuak je da meu instrukcijama postoji uslovljenost. Iako na ovom primeru to deluje prilino lako, kod sloenih problema uoavanje uslovljenosti je nekad presudno za uspeno izvoenje programskih instrukcija. Uslovljenost meu instrukcijama moemo prikazati grafikim putem usmerenog grafa. Ovaj jednostavan instrument za prikazivanje uslovljenosti sastoji se od lukova i vorova. vorovi su instrukcije, a lukovi (usmerene strelice) koje pokazuju uslovljenost meu njima. Usmereni graf naeg odabranog skupa instrukcija za sabiranje tri broja, prezentovan je grafiki na slici 35.
41
Verovatno e se svako zapitati zato je potreban graf uslovljenosti instrukcija kada se jednostavno moe napisati programska instrukcija. Zato to sa jedne strane sintetizuje sve zavisnosti, pa se oni putem crtea lako uoavaju. Sa druge strane pomou njega uoavamo skup moguih instrukcija. Ako ne postoji meuzavisnost instrukcija tada je potpuno svejedno kojim redosledom emo te instrukcije izvriti, kao na primer kod unosa izvornih podataka (uitavanje brojeva): a, b, c a, c, b b, a, c b, c, a c, a, b c, b, a Iz ovoga sledi da postoji est moguih skupova instrukcija za uitavanje brojeva. Kod instrukcija c i d takoe nema meuzavisnosti. Tako dobijamo ukupno osam moguih redosleda izvoenja instrukcija:
42
Kada imamo uvid u mogunosti izvoenja instrukcija mi raspolaemo razliitim mogunostima reavanja nekog problema. Na nama ostaje da odaberemo najadekvatniji skup instrukcija. Kako emo to uraditi? Kako emo znati da smo odabrali ba najbolje reenje? Postoje razliiti kriterijumi odabira reenja i oni zavise od postavljenih zahteva. Moe biti u pitanju npr. brzina izvoenja. Meutim, nekada nam nee ni biti vano koje reenje emo odabrati. U tom sluaju je jedino vano da se zadatak obavi. I na kraju odabiranjem adekvatnog reenja dolazimo do GRAFA ALGORITMA, prikazanog na slici 37. Pri tome ostala reenja nas vie ne interesuju. Poto je ovde izneta samo osnovna logika razmiljanja kreiranja reenja ali ne i realizacija programskog reenja, sada emo pogledati kako tu logiku i da primenimo praktinim radom.
43
Pokretanjem novog projekta zapoinjemo kreiranje programa. Pojavljuje nam se prazna forma (Form1) kao to je to prikazano na slici 38. Na formu se smetaju sledee kontrole iz kutije sa alatkama (Toolbox-a): 1. dve kontrole za prikaz teksta (Label), 2. etiri polja za unos brojeva (Textbox), 3. jedno dugme (Button) za izvravanje operacije sabiranja U kontrolu za prikaz teksta unosi se obavetenje za korisnika ta treba da uradi i ta je ishod operacije sabiranja. Ispod toga su smetena polja za unos tri broja koja treba da se saberu i jedno polje za prikaz rezultata. I na kraju na formu se nanosi dugme ija uloga je da realizuje operaciju sabiranja.
44
Kontrole predstavljaju objekte. Obzirom da se radi o objektno orijentisanom programiranju sledi podeavanje njihovih svojstava u prozoru svojstava. Tabela 31. sadri spisak svojstva koja su podeena za kontrole kao to je naziv, tekst i font.
Tabela 31: Svojstava kontrola programa za sabiranje tri broja
Tekst (Text)
Font (font) Microsoft Sans Serif; 12pt Microsoft Sans Serif; 12pt; style=Bold, Italic Microsoft Sans Serif; 12pt; style=Bold, Italic Microsoft Sans Serif; 12pt; style=Bold, Italic
btnSabiranje
Operacija sabiranja
Kada su podeena svojstva, pristupa se pisanju koda. Kao to je ve reeno ta treba na program da uradi, to mi treba da mu saoptimo i to putem programskih instrukcija. U Visual Basic.Net-u to ostvarujemo tako to dvo-klikom na odabranu kontrolu otvorimo editor koda. U konkretnom sluaju to je dugme na formi (slika 38), i zadajemo sledee programske instrukcije:
45
U skladu sa karakteristikama programskog alata Visual Basic.Net-a prilikom otvaranja editora za kod pojavljuje se editor oblika prikazan na slici 39.
46
U delu gde se nalazi pod programska procedura Private Sub i End Sub unosimo nain kako emo sabrati tri broja, i to za sluaj kada se oni unose u pojedinana polja.
Private Sub ..... End Sub
Poto je u ovom alatu omogueno da se izvri cela operacija sabiranja i jednom koraku i to: A+B+C=Z onda to moemo i zadati tako. Ali ako pogledamo uoiemo da postoji jo niz programskih redova osim navedenog za sabiranje. Da bi to bilo omogueno, prvo moramo predvideti prostor za unos promenljive tj. polja: txtA, txtB, txtC i txtZ (slika 310). Zatim da bi raunar mogao da radi dalje sa njima poto smo uneli brojeve u tekstualna (znakovna) polja moramo ih smestiti u promenljive definisane u kodu A, B, C kao i Z za prikaz rezultata. Oni se odnose na preuzimanje i smetanje promenljivih za dalji rad. Najpre se deklariu promenljive, a zatim se navodi programski kod za preuzimanje vrednosti: Dim A As Single A = txtA.Text Kada su brojevi sabrani dodeljuje se vrednost smetena u Z polju pod nazivom txtZ.
47
48
Onda emo odabrati jedno polje za unos podataka, recimo U. Meu rezultat i rezultat smestiemo u polje S. Neka A ima vrednost 6 (A=6). Tada uitavanjem broja A u raunar polje U e imati vrednost 6. Postavlja se pitanje ta dalje? Mi nemamo vie polja da uitamo i drugi broj, broj B=2, i nemamo tree polje za smetanje meu rezultata. Na raspolaganju nam je samo jo polje S. Sada nam ostaje mogunost da ovo reimo uvoenjem aritmetike operacije u ovom primeru sabiranje pre svakog narednog itanja podatka. Tada polje S dobija vrednost 6 i moemo uitati broj B (B=2). Polje U dobija vrednost 2, a u narednom koraku prenosi se u polje S. Jednostavnim prenosom prethodna vrednost S (S=6) bi se gubila, ali uvoenjem sabiranja ona dobija vrednost 8. Nain izvoenja ovih operacija se moe se napisati kao: S=S+U a ematski prikaz sabiranja u sluaju ogranienja ilustruje slika 311.
Ovo matematiki nije ispravno. Znak jednakosti = ovde ne znai jednako, ve predstavlja instrukciju smetanja neke vrednosti u S. Matematika formula ovog problema bi bila: Sn+1=Sn+U gde je S niz. Sn je opti lan, a Sn+1 je naredni lan niza. Matematiki gledano naredni lan niza jednak je zbiru prethodnog lana niza. Plan operativne memorije za izvoenje raunske operacije sabiranja tri broja sa maksimalnim ogranienjem (dve lokacije) se moe prikazati kao na slici 312 na kome postoji niz instrukcija:
49
Vrednost polja S neophodno je postaviti na nulu pre izvoenja aritmetike operacije, zbog toga to se konani rezultat ne prazni iz tog polja. U sluaju da ponovo elimo da saberemo tri broja, sa sasvim novim vrednostima sabrae se i prethodno dobijeni konani rezultat. Dodeljivanjem poetne vrednosti polju S nulira se njegov zbir na poetku sledeeg sabiranja. Sada kada je polju S dodeljena vrednost nula moe da se pristupi unosu izvornih podataka. Instrukcijom b smeta se prvi broj u lokaciju U. Naredna instrukcija koja sledi je c, putem kojeg se izvodi aritmetika operacija sabiranja. Ako je prvi broj bio 2 onda vrednost S postaje takoe 2.
50
Sledei broj koji treba sabrati je 6. Instrukcijom d se taj broj unosi u lokaciju U. Sabiranje vrednosti polja U sa prethodnom vrednou u S se izvodi instrukcijom e, pa je vrednost polja S osam: S=2+6=8. Neka je vrednost poslednjeg broja 15. Tada dodavanje poslednjeg broja poinje instrukcijom f za smetanje poslednjeg broja u lokaciju U. Izvrenjem instrukcije g formira se konani rezultat sabiranja. Poto S sadri prethodno dobijeni meu rezultat 8, na taj broj se dodaje 15, pa je S=8+15=23. Konani rezultat se saoptava korisniku instrukcijom h koja daje naredbu za ispisivanje na ekranu. Grafiki prikaz meuzavisnosti skupa instrukcija {a,b,c,d,e,f,g,h} je dat na slici 313, gde instrukcije zaokruene isprekidanim linijama predstavljaju vezane instrukcije. to znai da posle instrukcije f mora nastupiti izvrenje instrukcija g. Graf uslovljenosti prikazuje opte reenje zadatog problema, gde je broj konkretnih reenja est, i to u zavisnosti od redosleda instrukcija koji su oznaeni brojevima na slici 314.
51
Slika 314.: Prikaz moguih reenja sabiranja tri broja sa memorijskim ogranienjem
Iako algoritam za sabiranje tri broja (slika 315) prikazuje prvu varijantu konkretnog reenja neophodno je skrenuti panju na to, da ovaj algoritam vai za bilo koju varijantu.
52
Slika 315.: Graf algoritma za sabiranje tri broja u sluaju memorijskog ogranienja
Ako paljivije analiziramo graf algoritma na slici 315, moemo uoiti jo neke detalje. Upadljivo je ponavljanje instrukcija {c,e,g} i instrukcija {b,d,f}. Raunar svaki put ponavlja instrukciju itanja i sabiranja, ime nastaju odreena pravila u izvoenju operacije sabiranja. Kao zakljuak moemo rei da poetni uslovi postavljaju ogranienja u reavanju zadatih problema. Uporeenjem reenja sabiranja tri broja na dva naina sa i bez prostornog ogranienja primeuje se da se broj lokacija smanjilo sa 5 na 2. Usled toga broj reenja se takoe smanjilo sa 24 na 6, ali se broj instrukcija povealo sa 6 na 8. Ako sada pristupimo reavanju zadatka pomou Visual Basic.Net-a, moe se uoiti da reenje odudara od konvencionalnog proceduralnog pisanja programa u samoj realizaciji programskih kodova, ali ne i od logike reavanja zadatka. Na slici 316 prikazano je reenje pomou alata za objektno orijentisano programiranje.
53
Predviena su dva tekstualna polja: jedan za unos brojeva i jedan za prikaz rezultata. Na formi su uneta i dva dugmeta: Clear za poetak novog sabiranja i dugme Sabiranje za realizaciju aritmetike operacije. Osim toga forma sadri i nekoliko kontrola za prikaz teksta (Label), poto moramo korisniku naznaiti i ta treba gde da uradi i gde e se prikazati rezultat. Na formi se u ovom reenju nalaze jo dve labele (slika 317) da bi se videlo ta se deava u pozadini, odnosno da se vizuelno prikae kako raunar obavlja proces sabiranja.
54
Nakon kreiranja forme odnosno izrade poetnog ekrana za unos i predvienog naina prikazivanja rezultata obrade, slede instrukcije za obradu podataka. Dvo-klikom na dugme Sabiranje ulazimo u editor za kod i u delu Public definiemo promenljive. Zato ne delu pod programa i zato na celokupnom nivou, bie detaljnije razmatrano kasnije, za sada je bitno da su promenljive definisane. Public Class Form1 Inherits System.Windows.Forms.Form Dim S As Single
Dim U As Single
U narednom, za proceduru koja se odnosi za izvravanje dogaaja vezanih za dugme Sabiranje, dodaju se sledei programski kodovi prikazani u oznaenom delu:
Private System._ Sub btnSabiranje_Click(ByVal sender As
Object, ByVal e As System.EventArgs) Handles_ btnSabiranje.Click za prikaz sadraja polja U U = txtU.Text za prikaz sadraja polja S nakon unosa vrednosti u polje u lblS.Text = S Dodavanje vrednosti S i prikaz rezultata S = S + U txtS.Text = S End Sub
55
Na formu je dodato jo jedno dugme (Clear) koji ima ulogu da brie sadraj polja i da postavlja S na nulu, a to se postie sledeim kodovima:
Private Sub btnClear_Click(ByVal sender As System._ Object, ByVal e As System.EventArgs) Handles_ btnClear.Click S = 0 txtS.Clear() txtU.Clear() lblS.Text = S End Sub
Sve ovo dovodi nas do toga da sumiramo ta pri reavanju problema posredstvom raunara moramo potovati. Postoje odreena pravila kojih se moramo pridravati bez obzira na alat kojim baratom. 1. Prvo pravilo koje ne smemo da izgubimo iz vida jeste da raunar obrauje samo konkretne podatke. 2. Oni se mogu saoptiti na vie naina raunaru, to se opet reflektuje na izdavanje instrukcija (Pogotovu je to olakano sa savremenim pristupima u projektovanju programskih reenja). 3. Reavanje problema i pisanje rezultata je mogue samo ako se obezbedi i prostor za smetanje izvornih podataka, meu rezultate i rezultate u operativnoj memoriji. 4. U sluaju aritmetikih operacija mogue je dobijene rezultate smestiti i u prostor predvien za izvorne podatke. 5. Iz ovoga sledi da itanjem vie podataka u isto polje, prethodni sadraj tog polja se ponitava. 6. I na kraju neophodno je saoptiti rezultat korisniku.
56
Postoje i niz drugih pravila o kojima moramo voditi rauna, ali smo ovde istakli samo neke elementarne. Navedeni su samo neki od naj znaajnijih pravila koji se potuju nezavisno do programskog jezika. Drugo, pri reavanju nekog problema preporuljivo je sagledati problem i reavati ga sistematino i postupno. Osvrnuemo se ponovo na prethodna dva primera. ta je bilo zajedniko kod njihovih reavanja? Prvenstveno zahtevali smo neki odgovor od raunara. Zahtevali smo neko reenje. On moe da nam da odgovor samo ako smo obezbedili uslove za to. Mi treba da planiramo na osnovu izvornih podataka i naih zahteva i nae poruke, oekivane rezultate, reenja. U tu svrhu izrauje se PLAN ULAZA i PLAN IZLAZA. Planiranjem ulaza i izlaza u sutini mi definiemo kako e se odvijati komunikacija izmeu raunara i korisnika. Sledee to je potrebno izraditi je plan operativne memorije: za prihvatanje ulaznih podataka, memorisanje meu rezultata i pripremu rezultata. Ovaj plan zavisi od uslova i ogranienja koji izvire iz postojeeg problema, pa planovi mogu biti razliiti. Kada smo obezbedili polazne osnove prelazimo na izradu pregleda potrebnih instrukcija, to nam omoguava ispitivanje zavisnosti meu instrukcijama. Oni se zatim prikazuju grafom uslovljenosti instrukcija. To predstavlja opte reenje datog problema pri konkretnim uslovima i konkretnim ogranienjima. Kao to smo uoili, kod reavanja jednostavnih problema nije bila sporna uslovljenost i zadatak se mogao reiti veoma lako, ali kod veoma sloenih zadataka esto je problem tok odvijanja programa. Odreivanjem niza akcija stvaramo tok izvravanja i time smo stvorili mogunost da po odgovarajuim kriterijumima biramo jedno konkretno reenje i da ga saoptimo raunaru. Graf algoritma je prikaz konkretnog reenja.
4. LOGIKE OPERACIJE
Raunar je maina sposobna da memorie i izvrava niz instrukcija, to ga ini svestranijim od obinog kalkulatora. Izrazita razlika u odnosu na kalkulator, koji izvodi samo aritmetike operacije odrava se i u mogunosti zakljuivanja. Stremljenje ka oponaanju ovekovog razmiljanje dovodi do primene logikih operacija. Putem logikih operatora stvara se mogunost modelovanja i formalizovanja procesa miljenja. Logika je nauka koja se bavi procesom miljenja. To je nauka koja stavlja teite na miljenje kao sredstvo vrednovanja, saznanja objektivnog sveta. U osnovi bavi se procesom miljenja: koji su razlozi nekog problema, koji su zakljuci i na osnovu kojih argumenata (iskaza) su ti zakljuci nastali. Logikim procesom miljenja mi dolazimo do injenica i istine. U sutini mi tada formiramo sud o neemu. Logika kao nauka ispituje forme miljenja, njihove odnose i logike operacije. Prema tome, osnovni elementi logike su POJAM i SUD, a proces miljenja SKUP LOGIKIH OPERACIJA SA NJIMA. Logike operacije i iskazi mogu biti osnovni i sloeni.
58
Sada moemo rei ta je tvrdnja, sud ili iskaz. To je takva izreena ili pisana reenica koja moe biti istinita ili neistinita, ali ne moe biti istovremeno oba. Oznake logikih vrednosti iskaza su: I ili 1 za istinu i N ili 0 za neistinu. U daljem tekstu analiziraemo neke iskaze u cilju boljeg upoznavanja sa osnovama logike, pri emu emo odrediti njihovu logiku vrednost. A: Beograd je glavni grad Srbije. B: Sneg je crn. C: Rat i mir je napisao Petar Petrovi Njego. D: 4>7. E: Devojka je lepa. F: Mladi je snaan. Navedeni iskazi su osnovni logiki iskazi sa sledeim logikim vrednostima: A je istinit, B, C i E iskazi su neistiniti. U sluaju E i F ne moemo da utvrdimo logiku vrednost sve dok ne identifikujemo o kome je konkretno re. Ne moemo rei da li je devojka lepa ili da li je mladi snaan, jer ne znamo tano o kojoj devojci, odnosno o kom mladiu je re.
59
Sloeni iskazi takoe mogu biti istiniti ili neistiniti, ali je sada pitanje koja je njihova logika vrednost. Poto su sainjene od osnovnih logikih iskaza njihove logike vrednosti zavise od logikih vrednosti osnovnih iskaza i primenjenih operatora. Znai, sloeni iskaz je funkcija osnovnih logikih iskaza. Na datom primeru osnovnih iskaza pokuaemo da formiramo sloene iskaze: G: Pada kia. H: Danas je neradni dan. J: Danas je vana sportska utakmica. K: Danas je interesantna pozorina predstava. Sada emo skovati sloene iskaze. Kako e se oni formirati? Prvenstveno zavisie od toga da li smo ljubitelji sportskih aktivnosti ili kulturno umetnikih programa. ta emo odabrati od navedenih mogunosti zavisi i od toga da li je lep dan i da nemamo nikakve obaveze. Onda bi se nae ponaanje moglo formulisati na sledei nain: X1 ako pada kia i imam slobodan dan i postoji vana sportska utakmica, idem u sportsku halu. X2 ako ne pada kia idem u etnju. X3 ako je danas sportska utakmica ili pozorina predstava idem da gledam bar jednu od njih. X4 u sluaju da ne pada kia i imam slobodan dan idem u prirodu. Vidimo da je sloeni iskaz X1 sastavljen od osnovnih iskaza G, H i J, koji su povezani sa rei i. Ovo je logika operacija koju zovemo konjukcija.
60
Da bi sloeni iskaz bio istinit, poto se radi o konjukciji, sva tri osnovna iskaza moraju biti istinita. Naziv konjukcije potie iz latinske rei conjungere to znai spajati. Oznaka za konjukciju je , pa sloeni iskaz moe da se formulie i na sledei nain: X 1 = X 1 (G, H , J )
X1 = G H J
U sluaju sloenog iskaza X2 imamo samo jedan logiki operator negaciju i jedan osnovni iskaz. To je iskaz G.
X 2 = G
U sluaju iskaza X3 imamo dva osnovna iskaza J i K koji su povezani sa rei ili. Uslov da bi sloeni iskaz bio istinit dovoljno je da jedan od osnovnih iskaza bude istinit. Logika operacija u ovom sluaju je disjunkcija (disjungere lat. razdvajati) i oznaava se sa .
61
Ako primenimo slina pravila prethodno obrazloenih sloenih iskaza, tada X4 iskaz sastoji se od dva logika operatora (negacije i konjukcije) i dva osnovna iskaza.
X 4 = G K
Tabele istinitosti za logike operacije Tabele istinitosti su matematike tabele primenjene u oblasti logike pomou kojih se utvruju vrednosti logikih iskaza. One daju listu svih moguih logikih vrednosti sloenih iskaza. Tabele istinitosti za razliite logike operacije objasni emo tako to emo odabrati dva osnovna iskaza A i B, koji sainjavaju sloeni iskaz. Sloeni iskaz je funkcija osnovnih logikih iskaza A i B i oznaiemo ga sa X:
X = X (A, B )
Svaki od ova dva osnovna iskaza moe imati samo dve logike vrednosti: istinito ili neistinito. Broj kombinacije njihovih logikih vrednosti je etiri: 1. kombinacija A istina 2. kombinacija A istina 3. kombinacija A neistina 4. kombinacija A neistina i i i i B istina B neistina B istina B neistina
U zavisnosti od toga koji je operator primenjen u sloenoj funkciji, razlikujemo tabele istinitosti za logiki operator konjukciju, disjunkciju i negaciju. Dalje emo videti koje su vrednosti sloenog iskaza kada je u pitanju logiki operator konjukcija. Logika vrednost sloenog iskaza je istinita samo ako su oba osnovna iskaza istinita. Sloeni iskaz je neistinit u ostalim sluajevima, to je prikazuje i tabela 41 .
62
U sluaju da se radi o logikoj funkciji disjunkcije (tabela 42) logika vrednost sloenog iskaza e biti istinita ako je bar jedan osnovni iskaz istinit. Sloeni iskaz X je pogrean samo u sluaju kada su oba elementarna iskaza pogreni.
A 1 1 0 0
B 1 0 1 0
X 1 1 1 0
Ako je u pitanju negacija funkcije X, tada je re o jednolanoj funkciji ija vrednost zavisi od vrednosti tog lana (tabela 43 ). Ako je A istinit onda je X neistinit i obrnuto..
A 1 0
X 0 1
Do sada su opisane osnovne logike operacije. Pored njih interesantna je jo i logika operacija iskljuivo ili.
63
Za ovu operaciju je karakteristino da je logika vrednost sloenog iskaza istinita samo ako je jedan od osnovnih iskaza istinit. U sluaju da su oba iskaza nesitinita ili istinita rezultat ove funkcije je neistinit (tabela 44). A 1 1 0 0 B 1 0 1 0 X 0 1 1 0
64
Ovoj oblasti posvetili smo posebnu panju zbog toga to ini osnovu savremenih digitalnih raunara. Ne samo slova, rei ve i blok tekstova koji se memoriu u brojanom, digitalnom obliku. Funkcionisanje digitalnog raunara zasnovano je na binarnoj obradi podataka, gde moe postojati samo dva stanja: namagnetisano i ne namagnetisano, analogno prekidaima elektrinih kola ukljueno/iskljueno. Radi ilustracije uloge logikih operacija u svakodnevnom ivotu uzet je primer elektrinih kola. Jednostavne logike operacije konjukcija, disjunkcija i negacija se mogu uporediti sa elektrinim kolima. Prvo u nizu je prikaz redno povezanih prekidaa u eletrinom kolu, to se moe prezentovati pomou logike operacije konjukcija. Sijalica koja se nalazi u ovom elektrinom kolu svetlee samo ako su oba prekidaa zatvorena. Logiku operaciju disjunkciju moemo prikazati pomou paralelno vezanih elektrinih prekidaa. U tom sluaju sijalica e da svetli ako je bar jedan od prekidaa zatvoren. Pretposlednji u nizu je negacija, koja moe biti istinita samo ako je A neistinito. Sijalica e da svetli ako prekida nije aktiviran. Pored osnovnih logikih operatora postoje jo i sloeni logiki operatori. Ovde je posebno istaknut sloeni logiki operator iskljuivo ili zbog veoma este primene u raunarskoj oblasti. Nastaje kombinacijom osnovnih logikih operatora konjukcije, disjunkcije i negacije. Prikazano elektrinim kolom to bi bilo paralelno vezana redna kola. Prikazani primeri odnosili su se na formiranje sloenih iskaza putem logikih operacija, ali sada je pitanje kako raunar izvodi logike operacije i nad kojim iskazima. Razlikujemo dve vrste iskaza u odnosu na podatke: iskazi koji se odnose na osobine podataka ona ukazuje da li neka osobina postoji ili ne i iskazi koji se odnose na relacije sa podacima.
65
to se tie druge vrste iskaza one mogu biti izmeu dva broja A i B:
A= B A B A> B A< B A B A B
(A jednako B) (A nije jednako B) (A vee od B) (A manje od B) (A vee ili jednako sa B) (A manje ili jednako sa B)
Sada emo odabrati jedan od osnovnih iskaza, recimo A B . Ovaj iskaz moe imati dve logike vrednosti 1 ili 0. Vrednost 1 znai da je relacija ispunjena, a 0 da nije. Kako se to pokazuje u odnosu na brojane vrednosti? Uzmimo na primer da je A = 7 i da je B = 3 i primenimo relaciju recimo A > B . Tada je logika vrednost za iskaz 7 > 3 istinita tj. 1 . U sluaju da je A = 7 i da je B=15 relacija nije ispunjena i vrednost e biti 0. Ispitivanje logike vrednosti nekog osnovnog iskaza je prikazan na slici 42 .
Slika 42: Grafiki prikaz instrukcije za ispitivanje istinitosti logikih vrednosti iskaza
Kako se to odvija putem raunarske obrade pokazaemo na sledeem primeru. Data su dva podatka A i B koji imaju brojane vrednosti. Potrebno je odrediti koji je vei broj, odnosno kreirati algoritam za tampanje veeg broja od zadatih vrednosti.
66
Objektno orijentisano programiranje Instrukcije kojima emo reiti zadatak su: a) Unos (uitavanje) podataka A i B b) Nalaenje veeg od brojeva A i B
c) Smetanje naenog reenja u lokaciju za pripremu izlaznih podataka d) tampanje sadraja lokacije za izlazne podatke. Problem sa kojim se ovde suoavamo jeste nain pronalaenja veeg broja od zadatih brojanih vrednosti. To se postie postavljanjem relacije meu njima (< , >). Odabraemo sledeu relaciju:
A> B
Relacija je ispunjena ako je A vee od B . U obrnutom sluaju relacija nije ispunjena. Ako je relacija ispunjena, zadatak odreivanja veeg od brojeva A i B je reen i moemo da smestimo u polje MAX vrednost A. Plan operativne memorije sa potrebnim instrukcijama ilustrovan je na slici 43.
67
Instrukcije {a, b, c1, c2, d} se mogu prikazati grafom algoritma (slika 44). Instrukcijom b proverava se logika vrednost unetih brojeva. Nakon toga sledi izvravanje instrukcije c. Ona se u sutini sastoji od dve grane c1 (grana NE) i c2 (grana DA). Koja e se instrukcija od njih izvriti zavisi od unetih brojanih vrednosti. Ako je A=3, a B=6 onda e logiki iskaz imati vrednost neistina i izvee se grana NE . U polje MAX upisae se vrednost 6. U sluaju da su brojane vrednosti sledee A=8 i B=4 logiki iskaz e biti istinit i realizovae se grana DA, pa e se u polje MAX preneti vrednost A, odnosno broj 8. Na ovom jednostavnom primeru upoznali smo se sa nainom ispitivanja logike vrednosti nekog osnovnog iskaza pomou raunara. U narednom delu upoznaemo se i sa ispitivanjem logike vrednosti sloenih iskaza. 4. 4. 1 Logika operacija konjukcija Jedna od znaajnih karakteristika raunara, koju smo ve naveli na poetku, je velika brzina rada. Raunar u veoma kratkom vremenu moe obraditi velike koliine podataka. Pomou raunara u mogunosti smo da ispitamo i logike vrednosti niza osnovnih ili sloenih iskaza. Sa nainom ispitivanja osnovnih iskaza pomou raunara smo se ve upoznali. Ovo steeno znanje moemo dalje nadgraditi upoznavanjem strukture sloenih iskaza. Jedan od moguih naina formiranja sloenih iskaza je i primena logike operacije konjukcije.
68
Za ispitivanje logike vrednosti sloenog iskaza Z posluie sledei primer. Neka je Z sloeni iskaz sainjen od osnovnih iskaza X i Y koji povezuje logiki operator konjukcije.
Z = X Y
Osnovni iskazi su sledei: X: m<17 i Y: n=18 Prethodno smo se ve sreli sa tabelama istinitosti logike funkcija, gde smo videli da je logika funkcija konjukcija istinita samo u sluaju da su oba osnovna iskaza istinita. Sada je pitanje kako to ispitivanje izvriti pomou raunara. Polazei od toga da sloeni iskaz moe imati dve logike vrednosti 1 (istinit) ili 0 (neistinit), na zadatak je da postavimo takav redosled instrukcija koje dovode do logike vrednosti 1 sloenog iskaza. To znai da i osnovni iskazi moraju imati vrednost 1. Redosled e biti kao to je to prikazan na slici 45. Prvo e se izvriti instrukcija ispitivanja logike vrednosti osnovnog iskaza X, a zatim iskaza Y. Ako je X istinit realizuje se grana DA i moe uslediti instrukcija ispitivanja logike vrednosti osnovnog iskaza Y. Ako je logika vrednost Y takoe istinita onda vai da je sloeni iskaz istinit. Jednostavnije, prvi osnovni iskaz se ispituje bezuslovno. Kod ispitivanja logike vrednosti ostalih osnovnih iskaza postavlja se uslov da je prethodni osnovni iskaz istinit. Karakteristino je da svi iskazi moraju imati logiku vrednost istina.
69
Ako imamo sloeni iskaz Z koga sainjava vei broj osnovnih iskaza (X1, X2, X3, X4) gde je (X1 : m>5, X2 : n>15, X3 : p=18, X4 : q<25)
Z = X1 X 2 X 3 X 4
imaemo strukturu prikazanu na slici 46.
4.1.2 Logika operacija disjunkcija Drugi nain stvaranja sloenog iskaza je primena logikog operatora disjunkcije na osnovne iskaze, pa emo u narednom izlaganju da se upoznamo sa ispitivanjem logike vrednosti ovakvih sloenih iskaza putem raunara. Raunar uvek ispituje logiku vrednost osnovnih iskaza. Kada se radi o sloenim iskazima on izvrava isti postupak: proverava svaki osnovni iskaz pojedinano. Svaki iskaz moe imati jednu logiku vrednost: ili je istinit ili neistinit. Kada dajemo instrukciju za utvrivanje logike vrednosti ne smemo da gubimo iz vida da svaki osnovni iskaz ima jedan ulaz i dva mogua izlaza (grana za logiku vrednost istina i grana za logiku vrednost
70
istinit). Ove dve izlazne grane se meusobno iskljuuju, ili se realizuje jedna ili druga, ali nikada obe istovremeno (slika 47).
I u sluaju ispitivanja logike vrednosti sloenih iskaza sastavljenih od osnovnih iskaza logikim operatorom disjunkcije vodiemo se prema tabeli istinitosti. Davanje instrukcije prikazaemo na jednom primeru. Neka je Z sloeni iskaz sastavljen od osnovnih iskaza X i Y:
Z = X Y
X:
m > 25 i Y:
n < 18
Z: = (m > 25) v (n < 18) Logika vrednost iskaza Z je neistinita kada su logike vrednosti osnovnih iskaza neistinite (pogrene). U svim ostalim sluajevima iskaz Z je istinit. Tada postupka ispitivanja putem raunara poinje utvrivanjem logike vrednosti prvog osnovnog iskaza. Utvrivanje logike vrednosti narednog iskaza sledi samo ako je logika vrednost prethodnog iskaza neistinit. To znai da se ovaj postupak ostvaruje putem grane ne (logike vrednosti neistina), pri emu struktura sloenog iskaza izgleda kao na slici 48.
71
Ako je osnovni iskaz X istinit tada po logici sledi da e i sloeni iskaz biti istinit. Shodno tome, da bi sloeni iskaz imao istinitu logiku vrednost vano je da bar jedan iskaz bude istinit. Primera radi slika 17. ilustruje sled instrukcija za logiku funkciju disjunkcije koji je primenjen u sloenom iskazu Z. Osnovni iskazi su X1, X2, X3, X4 gde je (X1 : m>15, X2 : n>35, X3 : p=18, X4 : q<25)
Z = X1 X 2 X 3 X 4
72
Pored logikih operatora konjukcije i disjunkcije sloeni iskazi mogu nastati i primenom logikog operatora iskljuivo ili (u literaturi esto sa oznakom XOR). Pre nego to objasnimo sled instrukcija za utvrivanje istinitosti ovakvog sloenog iskaza podsetiemo se tabele istinitosti. Ova logika operacija ima vrednost istina samo ako jedan od osnovnih iskaza je istinit. U sluajevima da su svi osnovni iskazi isitniti ili neistiniti sloeni iskaz e imati logiku vrednost neistina. Shodno tome i postupak utvrivanja logike vrednosti sloenog iskaza za logiku operaciju iskljuivo ili putem raunara se zasniva na ovom principu. Prvi korak je davanje instrukcije za ispitivanje istinitosti prvog osnovnog iskaza (X) . U narednom koraku zadaje se instrukcija ispitivanja logike vrednosti sledeeg osnovnog iskaza, sa tim da se njegova istinitost ispituje i po grani da i po grani ne. Prema prikazanoj strukturi sloenog iskaza Z na slici 410. vidimo da je pozitivan ishod ispitivanja logike vrednosti sloenog iskaza istinit ako je m vee od 25 i ako n nije vee od 30 ili obrnuto. Z= X X: + Y n > 30 m > 25 i Y:
Slika 410: Struktura sloenog iskaza pri logikoj operaciji iskljuivo ili
73
Povezivanje veeg broja osnovnih iskaza putem logikog operatora iskljuivo ili prikazuje slika 411., gde se sloeni iskaz Z sastoji od osnovnih iskaza X1, X2 i X3 Z= X1 + X2 + X3
Ovo je kompletna struktura za sluaj sa tri osnovna iskaza koji se odlikuje odreenim osobinama: 1. broj potrebnih instrukcija je 7, 2. broj izlaznih grana je 8, 3. broj grana sa istinitim logikim vrednostima je 3, a sa neistinitim 5 (toliko grana sa istinitim vrednostima koliko ima iskaza) 4. sadri nepotrebne instrukcije, jer utvrivanjem logike vrednosti istina za X1 i X2 nema potrebe za daljim proveravanjem. Istu ovu strukturu moemo i uprostiti na osnovu osobina strukture (slika 20). Takva uproena struktura takoe moe obezbediti isti efekat. Kriterijum za postupak uproavanja strukture je broj osnovnih iskaza koji sainjavaju sloeni iskaz. Vrednost sloenog iskaza e biti istinit samo po putanji gde se u grananjima nalazi samo jedna istinita vrednost. Na slici 412 takve putanje su zaokruene.
74
Kako izgleda ova logika funkcija pri izvravanju instrukcija na raunaru doaraemo slikom 413, gde sloeni iskaz ima etiri osnovna iskaza.
75
Retko emo se u realnom ivotu susresti sa tako jednostavnim iskazima iskljuivo sastavljenih od jedne vrste logike funkcije. Obino su to problemi koji sadre razne kombinacije konjukcije, disjunkcije, negacije i logike funkcije iskljuivo ili, to se odraava na sloenost programa. Kada reavamo neki problem putem raunara prvo to treba da uradimo je analiza iskaza koji se odnose na dati problem. Analiza nije jednostavna, jer su iskazi obino deskriptivnog oblika. Izraeni su reenicama. Njima se opisuje ta treba uraditi i koji su zahtevi postavljeni u vezi sa zadatkom. Ovakav oblik obino sadri veliki broj rei, nekada ak i nepotrebnih. Da bi se izbegle greke u izradi programa takav sloeni iskaz se formalizuje. Iskaz Z je sloeni iskaz iz realnog ivota sastavljen od razliitih manje sloenih iskaza (Z1, Z2,Z3,Z4,Z5). Tada se logika funkcija Z moe izraziti na sledei nain: Z = Z (Z1, Z2, Z3, Z4, Z5) a logike funkcije koji su zastupljene su disjunkcija i konjukcija i to u sledeoj kombinaciji :
Z = Z1 Z 2 [(Z 3 Z 4 ) Z 5 ]
76
iskaza. Drugi nain je obrnuti postupak, kada analiziramo odnose meu osnovnim iskazima i polako izgraujemo strukturu ka sloenom iskazu. Nain kreiranja strukture sloenog iskaza po drugom pristupu obuhvata niz koraka kao to je: definisanje skupa osnovnih iskaza, kreiranje strukture na prvom nivou, kreiranje strukture na drugom nivou i kreiranje kompletne strukture. Definisanje skupa osnovnih iskaza u ovom primeru oznaiemo sa A i oni su sledei:
A1 = (D1 = 5)
A2 = (D2 > 4 )
A3 = (D3 < 7 )
A1 1 0 ) 13 3 = (D9 >10
A1 1 2 ) 0 = (D7 < 12 10
A7 = (D5 = 6 )
A4 = (D4 = 5)
17 A5 = (D4 = 1 7 )
A8 = (D6 = 8)
A1 2 0 ) 14 = (D9 < 20 4
17 A1 7 ) 2 = (D7 < 1 12
A9 = (D7 > 5)
A6 = (D4 >25 2 5
Nakon toga pristupamo kreiranje strukture na prvom nivou koji obuhvata manje sloene iskaze Z1, Z2, Z3, Z4, Z5. Tada je Z1 definisan na sledei nain:
Z1 = [A1 A2 ] A3
gde su potrebne instrukcije za utvrivanje logike vrednosti ponaosob za svaki najosnovniji iskaz (A1, A2, A3). Struktura uslova za sloeni iskaz Z1 prikazana je na slici 414.
77
Zatim sledi utvrivanje strukture instrukcije za iskaz Z2 koga definiu osnovni iskazi A4, A5 i A6.
Z 2 = A4 A5 A6
Strukturu instrukcija za ovaj sloeni iskaz ilustruje slika 415.
Poto su iskazi Z3 i Z4 oni imaju istu strukturu kao to to prikazuje i slika 416. Iskaz Z3 definisan je iskazima A7 i A8, a Z4 sa iskazima A9 i A10.
Z 3 = A7 A8
Z4 = A9 A10
78
I poslednja struktura na prvom nivou za ovaj primer je za iskaz Z5, koji se sastoji od iskaza A11, A12 , A13 i A14. Ilustraciju te strukture prikazuje slika 417
Za konkretni primer sloeni iskaz sadri logike funkcije disjunkciju i konjukciju i predstavljen je na sledei nain:
Z = Z1 Z 2 [(Z 3 Z 4 ) Z 5 ]
Struktura ovog iskaza prikazana je na slici 418. Konaan korak u procesu kreiranja strukture sloenog iskaza je kreiranje kompletne strukture iskaza. Da bismo doli do ovog koraka bilo je potrebno ispitati osnove iskaze zadatog konkretnog sloenog iskaza Z i pri tome formirati korak po korak sloenije strukture.
Objektno orijentisano programiranje Sloeni iskaz za ovaj primer je funkcija Z: Z = Z (Z1, Z2, Z3, Z4, Z5)
79
Na drugom nivou kreirali smo strukturu sa manje sloenim iskazima od Z1 do Z5 za zadati primer. Zamenom strukture drugog nivoa sa pojedinim strukturama (Z1, Z2, Z3, Z4, Z5) sa prvog nivoa kreiraemo kompletnu strukturu. Pri tome dobijamo strukturu prikazanu na slici 419. Ovakvim nainom moemo kreirati i strukture veoma sloenih iskaza.
80
81
programa je idejno reavanje problema. To je osnova budueg programa i pri tome uvaavamo sintaksu programskog jezika kojeg koristimo. Treba istai da je primena logikih iskaza i operatora kljuna u upravljakim strukturama za izraavanje raznih uslova putem kojih se usmerava izvravanje programa. Mada svaki programski jezik ima svoju sintaksu, operatori koji se koriste za konkretizaciju logikih iskaza u programima su u veini sluajeva slini. Moda se razlikuju u nekim oznakama operatora. U ovom odeljku osvrnuemo se na logike operatore koji se koriste u Visual Basic-u. Oni se dele na: Aritmetike operatore Poredbene operatore Logike operatore U grupu aritmetikih operatora spadaju operatori kojima izvravaju osnovne aritmetike operacije poznate iz matematike. Pored njih postoje i neki operatori koji nisu poznati iz matematike ali ovde emo se upoznati sa njihovom namenom i simbolom. Operator sabiranja
Za sabiranje se koristi znak plus kao i u matematici. Vano je istai da se samo isti tipovi podataka mogu sabrati. Ako se radi o sabiranju dva broja koji su razliitog tipa npr. jednog celobrojnog i jednog decimalnog, Visual Basic e automatski prevesti (konvertovati) celobrojni u decimalni i sabrati ta dva broja. O tipovima podataka bie rei kasnije. Primer (moe se uraditi u editoru koda za Form1): Debug.Print(2 + 3)
Debug.Print(2 + 4.2)
(Na ekranu u prozoru Immediate treba se ispie rezultat nakon pokretanja programa: 7 i 6.2 kao to to pokazuje slika 420).
82
Operator oduzimanja Slino operatoru sabiranja i za operator oduzimanja se upotrebljava simbol oduzimanja iz matematike. Takoe slui za oznaku negativnog broja. Primer (rezultat u prozoru Immediate): Debug.Print(7 5)
Debug.Print(2 - 4.2)
(Na ekranu treba se ispie rezultat nakon pokretanja programa: 2 i -2.2). Operator mnoenja
83
(Na ekranu treba da se ispie rezultat nakon pokretanja programa: 10). Operator deljenja
Simbol deljenja je kosa crta koje se koristi kao i kod obinog kalkulatora. (Deljenje nulom daje greku.) Primer (rezultat u prozoru Immediate): Debug.Print(12 / 6) (Na ekranu treba da se ispie rezultat nakon pokretanja programa: 2). Operator celobrojnog deljenja \ Primenom operatora celobrojnog deljenja vrednosti dva broja se zaokruuje u celobrojne. Rezultat e takoe biti celobrojan. Za bolje razumevanje uporediemo operatore obinog deljenja i celobrojnog deljenja. Primer obinog deljenja (rezultat u prozoru Immediate): Debug.Print(13.6 / 2) (Na ekranu treba da se ispie rezultat pokretanja programa: 6.8). Primer celobrojnog deljenja (rezultat u prozoru Immediate): Debug.Print(13.6 / 2) (Na ekranu treba da se ispie rezultat nakon pokretanja programa: 7; zaokruuje se boj 13.6 na 14 i deli se sa 2; Rezultat je 7). Napomena: Preporuljivo je da se ovaj operator koristi kod deljenja celobrojnih vrednosti, da bi se izbegli nepoeljni rezultati. Operator stepenovanja ^ Simbol kojim se podie neki broj na stepen je ^. Primer (rezultat u prozoru Immediate):
84
Objektno orijentisano programiranje Debug.Print 3 ^ 2 (Na ekranu treba da se ispie rezultat nakon pokretanja programa je 9). Operator ostatak mod
Ovaj operator se primenjuje za izraunavanje ostataka kod deljenja. Takoe je preporuljivo da se koristi kod celobrojnih vrednosti, jer zaokruuje operande. Oznaka je mod. Primer (rezultat u prozoru Immediate): Debug.Print(8 Mod 5) (Rezultat na ekranu nakon pokretanja programa e biti: 3, jer se u 8 broj tri nalazi jedanput, a ostatak pri deljenju je 3). Debug.Print(8 Mod 2) (Rezultat: 0, jer nema ostataka pri deljenju). Poredbeni operatori slue za poreenje brojeva i brojano tekstualnih znakova. Najee se koriste u logikim iskazima i u upravljakim strukturama o kojima je ve bilo rei. U ove operatore spadaju operatori dodeljivanja vrednosti (znak: jednako), operatori za iskazivanje veeg ili manjeg broja, veeg ili jednog broja itd. Simboli koji se koriste prikazani su u tabeli 45.
Primeri: Debug.Print(8 > 5) (Rezultat nakon pokretanja programa e na ekranu biti: True). Debug.Print(8 < 5)
85
U logike operatore spadaju NOT (negacija), AND i OR. Oni se koriste stvaranju sloenih iskaza. U uvodu logikog razmiljanja ukazali smo da logiki operatori mogu imati samo dve vrednosti: istina (True) i greka (False). Logiki operator NOT pretvara logiku vrednosti istina (True) u greku (False). Primeri ( u prozoru Immediate): Debug.Print Not 14 > 25 (Rezultat e biti: True, jer je 14 > 25 pogreno, a sa logikim operatorom NOT bie suprotno od toga: bie istina). Logiki operator NOT se primenjuje i za invertovanje (tabela 46) operatora, to je nekada veoma zgodno u sloenim iskazima.
Logiki operator AND (i) upotrebljava se u sloenim izrazima za izraavanje konjukcije ( ). U sluaju ovog operatora logika vrednost celokupnog iskaza je istina, ako su oba iskaza istinita. Primeri: Debug.Print (14 > 20 And 14 > 25) (Rezultat e se prikazati u prozoru Immediate i bie: True). Debug.Print (Not 14 > 20 And 14 > 25) (Rezultat e biti: False). Za izraavanje logike funkcije disjunkcije koristi se operator OR (ili). Prema tabeli istinitosti sloeni iskaz e biti istina (True) ako je bar jedan od osnovnih iskaza istinit.
86
Objektno orijentisano programiranje Primeri ( u prozoru Immediate): Debug.Print (14 > 20 Or 14 > 25) (Rezultat e biti: True). Debug.Print (Not 14 > 20 Or 14 > 25) (Rezultat e biti: True). Ali u sluaju izraza Debug.Print (Not 14 > 20 Or 14 = 25) (Rezultat e biti: False).
Ovo su najee korieni logiki operatori u programiranju, iako postoje pored ovih i drugi logiki operatori.
87
Kodovi pored upravljake strukture zasnovane na uslovnoj logici omoguavaju ponavljanje nekih instrukcija, a mogu sadrati i grananja instrukcija radi usmeravanja naina izvravanja programa (slika 421). Upravljake strukture odreuju tok programa pri emu omoguuju izraunavanje petlji. Petlja e se izvriti zadati broj puta ili dok se ne ispuni neki uslov u zavisnosti od zahtevanog zadatka. Zbog toga postoje razliite strukture uslovne logike. 4. 6.1 Struktura For...Next Petlja For ... Next je struktura pomou koje se ponavlja blok programskog koda. Broj ponavljanja se definie u strukturi, gde je i broja koji se ponavlja zadati broj puta. Recimo da elimo da raunar ispie brojeve od 1 do 10 na ekranu (slika 422). Onda e programski blok sadrati petlju For ... Next :
Private Sub Button1_Click(ByVal sender As System._ Object, ByVal e As System.EventArgs) Handles_ Button1.Click Dim i As Integer For i = 1 To 10 Console.WriteLine("Vrednost i je: " & i) Next i End Sub
Poto je poetna vrednost brojaa postavljena na jedan (i=1) raunar e ispisati 1, pa naredni broj 2, zatim 3 itd., sve dok ne premai zadatu vrednost. U ovom sluaju je to 10. Kada i dostigne vrednost 11 program e da stane. Kod svakog narednog izvrenja bloka koda vrednost brojaa i se poveava za 1.
88
Vrednost za koji se broja poveava odreujemo mi. Pogodnost je da postoji slubena re Step koja to omoguava.
Dim i As Integer For i = 1 To 50 Step 5 Console.WriteLine("Vrednost i je: " & i) Next i
4. 6. 2 Struktura Do/Loopl U nekim sluajevima neemo znati koliko puta treba da se izvri programski blok kodova, tako da For ... Next petlja nam nee koristiti. Umesto toga primenjuje se Do/Loop struktura. Karakteristino je da e se ova petlja izvravati sve dok se ne ostvari neki uslov. Moe se primeniti ne etiri razliita naina:
1.
Objektno orijentisano programiranje Naredba koja ispisuje rezultat (slika 424 ) u prozoru Output je
Console.WriteLine(n)
89
2.
Do naredbe e se izvriti jednom i ponavljae se dalje sve do god je uslov ispunjen While uslov
Slika 425: Petlja Do/ Loop kada se prvi put izvri naredba
90 3.
Kako to funkcionie uzeemo novi primer gde emo uneti vrednost u polje namenjeno za to (slika 426) i uneti sledei kod za dogaaj Click dugmeta Do Loop:
Dim n As Integer n = TextBox1.Text MsgBox(n) n = n + 1
Do Until n > 5
U ovom primeru moemo proizvoljno uneti promenljivu n. Ako unesemo broj manji od postavljenog uslova naredba e se izvravati jer je uslov da se naredba izvrava sve dok n ne bude vee od 5. U suprotnom nee se desiti nita, naredba se nee izvravati.
Loop
Until uslov
91
Nekada je potrebno da se program ili blokovi kodova programa izvravaju pod uslovima Ako Onda. Naj jednostavnija logika struktura koja to omoguava je If/Then/Else. Ona je zasnovana na principu logikih kola, gde prekidai mogu imati dva stanja: tano ili netano. Sintaksa ove strukture je sledea:
If uslov Then End If naredbe
to se moe proitati ovako: ako je uslov ispunjen onda se izvre naredbe. Kada se izvri blok koda If/Then struktura se zatvara sa End If, koja je slubena re u Visual Basic-u. If Then strukturu najbolje emo demonstrirati kroz primer za unos imena. Forma za unos imena prikazana je na slici 427.
Za realizaciju potrebno je jedno polje za unos imena i jedno dugme ijim aktiviranjem pokreemo sledei programske linije:
Private Object_ Sub Button1_Click(ByVal sender As System.
End Sub
92
ta se tu u sutini deava kada se dva puta klikne na dugme? Ako korisnik unese neko ime (a tu se podrazumeva prazan karakter) pojavie se poruka koja ga obavetava o unetom imenu. Postavlja se pitanje ta se dogaa kada uslov nije ispunjen. U navedenoj If/Then strukturi nee se desiti nita, jer ne postoji deo programskog koda koji na to ukazuje. Ali ako primenimo strukturu sa kljunom rei Else:
If uslov Then Else naredbe 2 End If naredbe 1
realizovae se naredbe 2. U obinom govornom jeziku ovo se moe rei na sledei nain : Ako je ulov ispunjen onda se izvri naredba 1, inae e se uraditi naredba 2. U konkretnom primeru to e izgledati ovako, a prikaz rezultata kao na slici 325:
Dim Ime As String Ime = txtIme.text If Ime <> "" Then Else
End If
93
Postoji jedna pogodnost u vezi If/Then strukture, a to je mogunost ugnjedavanja u druge If/Then blokove. Meutim, dubina ugnjedavanja moe dovesti do problema, jer se programski kod uslonjava, a to moe prouzrokovati ne samo nepreglednost programa, ve i greke. Za primer ugnjedenog If/Then/Else strukture moe posluiti provera ispunjenosti uslova za dva razliita sluaja. Prvo se proverava da li je ispunjen uslov za oba sluaja. U sluaju da nije ispunjen uslov, treba utvrditi da li su uslovi tani pojedinano. Programski kod putem provere nalae da se tampa onaj uslov koji je ispunjen.
If uslov 1 And uslov 2 Then Else Print Oba uslova su tana
End If
End If
End If
Ovakva struktura se moe napisati preglednije, jer Visual Basic omoguuje i upotrebu pojednostavljenog oblik prethodnog bloka:
If uslov 1 And uslov 2 Then ElseIf uslov1 Then ElseIf uslov2 Then Else Print Oba uslova su tana
Print uslov 1 je taan Print uslov 2 je taan Print Oba uslova su netana
End If
94
Ako prethodni primer proirimo sa unosom prezimena moemo proveriti da li je korisnik uneo bilo ta ili je uneo samo prezime ili samo ime, ili nije nita uneo. Pa bi onda programska struktura bila sledea:
Private Sub Button1_Click(ByVal sender As System.Object_ ByVal e As System.EventArgs) Handles Button1.Click Dim Ime As String Dim Prezime As String Ime = txtIme.Text Prezime = txtPrezime.Text
Ako je ispunjen i uslov1 i uslov2 If Ime <> "" And Prezime <> "" Then MsgBox("Prezime i ime su " & Prezime & " " & Ime) Ako je ispunjen uslov1 ElseIf Ime <> "" Then MsgBox("Niste uneli prezime! ") Ako je ispunjen uslov2 ElseIf Prezime <> "" Then MsgBox("Niste uneli ime! ") Inae nijedan uslov nije ispunjen Else End If End Sub MsgBox("Niste uneli ni ime ni prezime! ")
95
4. 6. 4 Struktura Select If/Then/Else je najee koriena uslovna logika struktura, ali kod sloenijih blokova kodova moe biti prilino neuredna. Tada se pribegava nekim drugim strukturama. Pogodnija struktura u takvim sluajevima je Select struktura, to emo objasniti na primeru. Primer: Treba napisati kod koji e ispisati nazive dana u nedelji. Promenljivom x oznaiemo dane u nedelji. Redni broj dana ukazae na dan u nedelji. U zavisnosti od toga koju vrednost ima promenljiva x ispisae se naziv dana. Kada bismo ovo napisali pomou If/Then strukture to bi izgledalo ovako:
96
ElseIf X=2 Then ElseIf X=3 Then ElseIf X=4 Then ElseIf X=5 Then ElseIf X=6 Then ElseIf X=7 Then End If
MsgBox (Ponedeljak) MsgBox (Utorak) MsgBox (Sreda) MsgBox (etvrtak) MsgBox (Petak) MsgBox (Subota) MsgBox (Nedelja)
Isti ovaj kod napisan uz pomo Select strukture uprostio bi ceo blok iji rezultat je prikazan na slici 4-30:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim X As Integer X = txtX.Text Select Case X Case 1 txtDan.Text Case 2 txtDan.Text Case 3 txtDan.Text Case 4 txtDan.Text Case 5 txtDan.Text Case 6 txtDan.Text Case Is = 7 txtDan.Text End Select End Sub
97
Select struktura se zasniva na izvravanju sluajeva (engl. case). Promenljiva X se navodi na poetku strukture. Za svaku vrednost promenljive odreuje se sluaj koji zapoinje sa kljunom rei Case. Za svaki sluaj navodi se vrednost promenljive, nakon ega sledi proizvoljan broj naredbi. U odnosu na If/Then/Else strukturu ima odreene prednosti. Prvenstveno, okvir jednog sluaja moe sadrati vie slubenih rei, pa ak i druge Select naredbe. Druga znaajna stvar je da umesto promenljive moe stajati neki izraz.
Select Case ((a-7)*b)/(3+c)*d) Case 1 Case 2 uradi neto
Ako ispunjenost uslova za izraz ((a-7)*b)/(3+c)*d) proverama uz pomo If/Then strukture e izgledati ovako:
End Select
Primetna razlika izmeu ova dva bloka koda je ponavljanje izraza u If/Then strukturi. Ne povoljnost se pokazuje u izmenama. Recimo da se
98
neto menjalo u izrazu. Tada moramo menjati programski kod. Ali moramo paziti da se promena izvri na svim mestima u kodu. Kod sloenijih kodova esto se to moe prevideti i negde emo zaboraviti da izmenimo izraz. Pored toga odraava se i na vreme obrade podataka. Raunar svaki put kada naie na izraz rauna, njegovu vrednost ponovi, jer ne pamti rezultate. Pored ovih pogodnosti Select struktura ima jo jednu, a to je obrada grupe moguih vrednosti, to prikazuje sledei primer.
Select Case X Case 1 To 2, 5 To 7, Is > 12 Case Else: End Select uradi neto sa ovom grupom uradi neto u vezi sa ostalim vrednostima
U ovom primeru jedna mogunost je ispitivanje vrednosti za tri razliita opsega. Opsezi se kreu od 1 do 2, od 5 do 7 (ukljuujui i njihove granine vrednosti) i ako je X > 12 (to se proverava sa Is > 12). Case Else koja tu figurira daje mogunost da se obuhvate one vrednosti koje ne spadaju u date opsege. Ova slubena re ima istu funkciju kao i Else u IF/Then strukturi. Ovo moemo ilustrovati na primeru starosne dobi oveka. U sluaju da se starost odreene osobe kree izmeu 1 i 18 kategorisaemo osobu kao adolescenata, inae e spasti u kategoriju odraslih (slika 431).
Objektno orijentisano programiranje Kod kojim se ostvaruje prikaz kategorija starosti je:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Godine As Integer Godine = txtBroj.Text Select Case Godine Case 1 To 18 txtKategorija.Text = "Adolescent" Case 19 To 100 txtKategorija.Text = "Punoletan" End Select End Sub
99
102
103
Pre nego to preemo na objanjenje kako se sa njima radi, osvrnuemo se na to ta su promenljive i konstante.
5.2 Promenljive
Zbog razumevanja ta su promenljive i kako se upotrebljavaju vratiemo se na primer sa poetka ovog poglavlja: sabiranje bilo koja tri broja. Na slici 51 vidimo da se izvorni podaci smetaju u predviene memorijske lokacije koje smo nazvali A, B i C, dok su za smetanje meurezultata i rezultata predviene memorijske lokacije D i Z. Nazive ovih memorijskih lokacija zovemo promenljivama ili varijablama (engl. variables).
104
Znai da postoji deo memorije koji program koristi za smetanje konkretne vrednosti. Recimo da A ima vrednost 25. Tada raunar pamti tu vrednost u odreenoj memorijskoj lokaciji i to sve dok se ne isprazni , odnosno, dok ne izdamo instrukciju da se ukloni ili dok se ne poniti ponovnim unosom. U tu svrhu smo istakli prostorno planiranje tj. postupak odreivanja PLANA OPERATIVNE MEMORIJE. Primena promenljivih znaajno olakava programiranje, jer programer treba da pamti samo nazive memorijskih lokacija. Pomou njih izvravamo razliite aritmetike i logike operacije i koristimo ih za smetanje (akumuliranje) rezultata. Druga vrsta promenljivih slui za pohranjivanje podataka za kasniju upotrebu u programu. Da bi program znao da se radi o promenljivama njih treba definisati, to se u raunarskoj terminologiji zove deklarisanje. Promenljive se deklariu pomou slubene rei Dim u odeljku Declaration za obrazac u kome e se koristiti. Slubena re Dim je skraenica od Dimension, to ukazuje na to da se definie dimenzija promenljive.
105
Odmah nakon slubene rei sledi naziv promenljive (A) i definisanje tipa podataka koju e ta promenljiva da sadri. Treba napomenuti da se u ovom primeru sabiraju celobrojne vrednosti, pa se definie celobrojni tip podataka (Integer) tj. opseg koji se kree od - 2 147 483 648 do 2 147 483 647 (oseneni deo).
Dim A As Integer
Time je omogueno da se vrednosti unete u polja txtA, txtB i txtC saberu, tako to e se dodeliti te vrednosti u promenljive A, B i C. Ovo je potrebno zbog toga to raunar unete vrednosti u polja kao to txtA smatra tekstom i nije u mogunosti da ih sabere kao numerike vrednosti.
Nakon sabiranja neophodno je rezultat saoptiti i korisniku. Rezultat e se pojaviti u polju namenjenom za to kao to to ilustruje slika 52. Promenljive se mogu deklarisati kao javne (public) ili lokalne (private). Javne (public) promenljive se deklariu u standardnom modulu i omoguavaju dostupnost svim procedurama i modulima. Lokalne promenljive (private) deklariu se samo za odreenu proceduru i oni nemaju nikakav znaaj za druge procedure istog progama.
106
5.3 Konstante
Upotrebu konstanti najlake emo objasniti na konkretnom primeru. Za primer emo uzeti obraun doprinosa zarada. Svaka organizacija kod isplate zarade duna je da obrauna pored poreza i doprinose za zdravstveno i penzijsko osiguranje ije stope su propisane zakonom. Ako bi prilikom kreiranja programa za njihovo izraunavanje koristili brojane vrednosti u programskim kodovima, to bi znailo da se stope, odnosno brojane vrednosti, unose neposredno na sva mesta u program. Na prvi pogled to ne bi bilo nita strano, ali kada bi dolo do promene zakonski propisanih stopa nastao bi mukotrpan rad. To bi zahtevalo promenu brojeva (stopa) u svim programskim blokovima u kojima se oni nalaze. Trebalo bi pregledati sve programske kodove i ispraviti na svakom mestu nevaeu stopu. Ovo ne samo to je dugotrajan rad, ve lako mogu nastati i greke.
107
Jednostavno prevideemo na nekom mestu u programu promenu stope. Uvoenjem konstanti ovaj problem se elegantno reava. Da bismo saoptili raunaru da ona postoji treba da je deklariemo (saoptimo). To se u Visual Basicu.Net-u izvodi editoru koda za dati obrazac (npr. Form1.vb). Kada se otvori pojavie se oblast za deklaracije (Declaration area) obrasca kao na slici 53.
Slubena re za deklarisanje konstante je Const nakon ega sledi ime konstante (u ovom primeru StopaPIO). Vrednost stope doprinosa penzijskog osiguranja je 11% (trenutna vrednost u doba pisanja knjige) to se konstanti dodeljuje znakom jednakosti. Primer deklarisanja u editoru koda obrasca Form1: 11% = 11/100
Public Class Form1 Const StopaPIO As Decimal = 0.11
Private Sub ObradaDoprinosa_Click(ByVal sender As System.Object, ByVal e As System._ EventArgs) Handles ObradaDoprinosa.Click Dim Bruto As Decimal Dim PIO As Decimal Bruto = txtBruto.Text PIO = Bruto * StopaPIO
108
End Class
Ako pokrenemo program prethodno napisani kodovi e se izvriti i prikazae nam se kao rezultat obrade iznos doprinosa za penzijsko i invalidsko osiguranje u MessageBox-u (slika 54). U zakljuku moemo rei da su konstante rezervisana memorijska polja u koje se smetaju nepromenljive vrednosti. Odreeni su programskim kodovima i ne mogu se menjati u toku izvravanja programa (run-time).
5. 4 Komentari
Opet jedna karakteristika svih jezika, bilo da su programski alati starijih verzija, bilo da se radi o savremenim alatima, to su komentari. Oni se mogu uneti u redove kodova, a da ne ometaju izvrenje programskih linija. Kao to smo rekli svi jezici podravaju komentare i u zavisnosti od jezika imaju posebne oznake: u C# se komentari oznaavaju sa // u Javi se komentari oznaavaju sa /* ili // (ima vie naina upotrebe) u VB se komentari oznaavaju sa (apostrofom).
109
Tekst koji sledi iza oznake kompajler ne uzima se u obzir. Programeri vole da koriste komentare, zbog toga to se ukratko mogu navesti pojedini koraci u kodovima. Koristi se za opis koda koji sledi. Jednostavno moe sluiti za podsetnik ili ako neko drugi gleda va kod imae jasan uvid ta program radi.
5. 5 Prazan prostor
Jo jedna znaajna karakteristika programskih jezika, upotreba praznog prostora. Uglavnom se radi o estetskom izgledu programskih linija (kodova). Ipak prazan prostor izmeu blokova naredbi utie na preglednost, urednost napisanih kodova (slika 55). Postoji odreeno nepisano pravilo po kom se pridravaju programeri: uvlaenje redova programskih kodova. Kada se pie podprogram ona se najpre definie (u VB.NET-u automatski se pojavljuje poetak i zavretak podrutina). Ono to se pie izmeu su vae programske linije (kodovi), odnosno instrukcije ta e taj dogaaj da uradi.
Ovaj deo teksta se uvlai npr. za jedan Tab. Kada imamo vie programskih blokova u kodu jedne podrutine njih razdvajamo praznim prostorima. Oni takoe ne utiu na izvravanje programskih linija, niti e biti sporije izvrene.
5. 6 Rad sa brojevima
Kada vrimo aritmetike operacije radimo sa brojanim veliinama. One mogu biti: celobrojne ili sa decimalnim vrednostima. Celobrojne vrednosti se retko koriste u procesu programiranja, zbog same prirode raunanja, bilo u poslovnoj oblasti, bilo u naunoj oblasti.
110
Njih je zgodno koristiti recimo kod rednih brojeva, koji se nikako ne smeju pojaviti u decimalnom obliku. Tada sa deklarisanjem promenljive kao Integer mi ujedno i ograniavamo na program. Jedan takav primer je recimo ifre zaposlenih koje odreuje programer. Oni e uvek polaziti od vrednosti 1 i nastavie se do ukupnog broja zaposlenih lica. To prua mogunost adekvatnog baratanja podacima koji su vezani sa rednim brojevima. Kao to je ve spomenuto u ovakvim sluajevima e se promenljiva deklarisati kao Integer, kao to vidimo i u narednim primerima aritmetikih operacija. Primer (deklarisanje celobrojnih vrednosti):
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim A As Integer A = 16 A = A + 8 MessageBox.Show("Rezultat je: " & A,_ "sabiranje INT") End Sub
111
(Tri take pre i posle naredbi oznaavaju da kodu prethodi deklaracija podrutine, koja se automatski pojavljuje i zbog skraenog oblika samo se navode oni kodovi koji su potrebni za reavanje problema. Objanjenje podrutina sledi u narednim oblastima. Takoe treba napomenuti da i crtica na kraju reda podrutine Sub ... samo se u ovom tekstu koristi za razdvajanje redova da bi bilo preglednije. U kodu to nema. )
& A, _
112
Ovde moramo navesti da postoji i drugaija stenografija, da se ne bi neko zbunio ako naie na takav nain pisanja izvoenja aritmetikih operacija. Analogno prethodnim navedenim kodovima oni su sledei:
Dim A As Integer A=16 A+=8 Dim A As Integer A=5 A*=3 Dim A As Integer A=16 A-=2 Dim A As Integer A=21 A/=7
Vano je istai da kada radimo sa celobrojnom matematikom (Integerom), a vrednosti su decimalne postoji odreeni problem. Brojevi se pri izvravanju koda zaokruuju. Primer:
Dim A as Integer A=3 A=A*2.75
Oekivani rezultat bi bio 6,75, ali poto se radi sa celobrojnom matematikom, rezultat e biti u ovom sluaju 7, a ne 6,75. Raunar e po pravilu zaokurivanja brojeva da uzme veu vrednost, jer je naredni broj (broj iza zareza) vee od 5. Da je oekivani rezultat recimo 6,34 vrednost stvarni rezultat u ovom sluaju bi bio 6. Ovde je dat primer sa aritmetikom operacijom mnoenja, inae ovo vai za sve aritmetike operacije.
113
Zbog ovih razloga uglavnom aritmetike operacije sa promenljivama koji sadre brojane vrednosti deklariu se tako da one budu zgodne za matematiku sa pokretnim zarezom. Ova vrsta promenljivih se deklarie pomou Double, Single ili Decimal, u zavisnosti od veliine koja nam je potrebna (slike: 510, 511, 512 i 513). Double znai da se radi sa brojevima dvostruke vrednosti i zauzima vei prostor u memoriji. Decimal prikazuje brojeve sa jo veom tanou. Ovde se radi o veem opsegu. Promenljive koje se odnose na naune podatke neizostavno se definiu na ovaj nain. Inae ako nije potrebna tolika tanost decimala moe se definisati i kao Single, tj. brojevi jednostruke vrednosti. Kako emo promenljivu deklarisati pri matematici sa pokretnim zarezom zavisi od granice gde e raunar prestati da rauna decimalnu komponentu. Primer a)
Dim A As Decimal A = 22 A = A / 7 MessageBox.Show("Rezultat je: " & A,_ "Deljenje DEC")
Slika 510: Aritmetika operacija deljenja kada se broj deklarie kao Decimal
Primer b)
Dim A As Double A = 22 A = A / 7 MessageBox.Show("Rezultat je: " & A,_ "Deljenje Double")
114
Slika 511: Aritmetika operacija deljenja kada se broj deklarie kao Double
Primer c)
Dim A As Single A = 22 A = A / 7 MessageBox.Show("Rezultat je: " & A,_ "Deljenje Single")
Slika 512: Aritmetika operacija deljenja kada se broj deklarie kao Single
115
5. 7 Rad sa stringovima
U programskim kodovima ne radimo samo sa brojanim veliinama, ve i sa znakovnim vrednostima. String znai kolekciju znakova i odnosi se na tekstualne forme. Pored teksta i brojevi se mogu prikazati kao stringovi. U tom sluaju se radi konvertovanje broja u string. String koji elimo da se pojavi u na ekranu u programskom kodu moramo posebno naznaiti. Oznake za string su navodnici. Ako postavimo tekst izmeu navodnika raunar e to tretirati kao string, inae e tumaiti kao deo programskog koda, i na program nee funkcionisati onako kako mi elimo. Time ograniavamo i duinu stringa koji e se pojaviti, odnosno odreujemo poetak i kraj stringa. Uzmimo najjednostavniji primer ime se zapoinje uenje programiranja Hello World! . Programski kod je sledei:
116
5. 8 Povezivanje (konkatenacija)
Pod konkatenacijom podrazumevamo povezivanje neega u lanac, seriju. Obino se izvodi kod stringova. Oznaka za konkatenaciju je & (et: logogram za veznik i u Engleskom jeziku), to smo dosada koristili u primerima u Messagebox-u. U narednom, prikazan je primer kada imamo dva stringa koje treba povezati:
S1=Hello S2=, World! Dim S1 As String S1= Hello Dim S2 As String S2=, World! Dim S As String S=S1&S2 prikai rezultat MessageBox.Show(S, Konkatenacija)
...
...
Postoje jo neke stvari koje moemo izvesti sa stringovima od kojih emo neke i spomenuti kao to je vraanje duine stringa, izdvajanje podstringa, formatiranje stringa i zamena delova stringa. Razlog objanjenja ovih postupaka je to to su veoma korisni u praktinom radu. Vraanje duine stringa To emo izvesti na sledeem primeru. Kreira se forma (Form1 koja se automatski pojavljuje pokretanjem novog projekta) i dodajemo TextBox kontrolu na formu kao na slici 516.
117
Zatim izmenjaemo svojstvo Name (brisanjem postojee teksta:TextBox1) na txtA koji e biti naziv TextBox-a. Nakon toga dodaemo jo jednu kontrolu: dugme pod nazivom Duina. Takoe izvesti potrebne izmene u svojstvima Name (btnDugme) i Text (umesto Button1 - Duzina). Nakon toga dodaemo kod dugmetu Duina:
Private Sub btnDugme_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDugme.Click Dim A As String A = txtA.Text 'prikai duinu teksta MessageBox.Show(A.Length & " znakova") End Sub
Kada pokrenemo program pojavie se forma kao na slici 517. Unosom teksta u polje i aktiviranjem dugmeta Duzina dobiemo rezultat izbrojanih znakova, gde su uraunati i prazni znakovi.
118
Podstringovi su setovi podataka. Primenjujemo ih kada elimo da izdvojimo neke delove stringa. Demonstriraemo na primeru unosa jedinstvenog matinog broja graana (JMBG). Prvih sedam brojeva ukazuje na datum roenja osobe, zatim dva broja pokazuju region tj. prebivalite osobe i poslednja etiri znaka se odnose na jedinstveni broj sa kontrolnim brojem. Kreiraemo formu sa jednim textbox-om i jednim dugmetom za izvrenje programskog koda kao na slici 518. Ono to elimo postii je da se posebno prikae datum roenja osobe, region prebivalita i jedinstveni broj osobe kada se u polje na formi unese broj JMBG-a. Treba napomenuti da ovde nije ogranieno da li se mora uneti neto npr. korisnik, pa ako se nita ne unese program e da blokira, i javie greku.
119
'prikai sadem poetna znaka MessageBox.Show(A.Substring(0, 7), "Datum roenja") 'prikai dva znaka u sredini poevi od osmog MessageBox.Show(A.Substring(7, 2), "Region") 'prikai etiri krajnja znaka MessageBox.Show(A.Substring(A.Length - 4), _"Jedinstveni broj") End Sub
Formatiranje stringa
Kada govorimo o formatiranju stringa mislimo na nain prikazivanja promenljive. U praktinom radu esto se susreemo sa podacima koje u okviru uvanja ili obrade imaju odreeni oblik, a da se prilikom prikazivanja zahteva promene u neki drugi format. Najei sluaj sa kojim se susreu programeri je formatiranje brojeva. Obino se to odnosi na neke specifine poslovne procese, recimo u oblasti finansija, gde se zahteva da se prikau samo dve decimale. Kako to da izvedemo objasniemo na primeru deljenja dva broja. Podeliemo 11 sa 2,15 pri emu je rezultat deljenja prikazan na slici 519.
...
Dim A As Double A = 11 A /= 2.15 MessageBox.Show("Rezultat: " & A)
...
Ovaj broj se moe formatirati tako da prikae samo dve decimale kao to je to na slici 5 20
120
...
U formatiranju brojeva koristi se metod String.Format, iji zadatak je da formatira broj, koji e u konanom obliku biti string.
Formatiranje se odvija tako to imamo nulti parametar podataka (0), gde navodimo da se formatira A, a broj 2 za parametar (n2) ukazuje na broj decimale. Na ovaj nain kaemo da se formatira drugi parametar (A). Zamena delova stringa Ovaj postupak se svodi na manipulaciju sa stringovima. Nekada je potrebno zameniti delove stringa i za to postoji odreeni nain kako se to radi. Kreiraemo formu sa dve kontrole (slika 421). Jedna kontrola je polje za unos i dugme gde e se izvriti sledei kod pokretanjem programa:
121
Private Sub Button1_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles Button1.Click Dim S As String S = txtS.Text Dim noviS As String noviS = S.Replace("Hello", "Goodbye") 'prikai MessageBox.Show(noviS) End Sub
U prikazanom rezultatu na slici 521 vidimo da se promenio deo stringa i umesto Hello sad se nalazi Goodbye. Kljuna re je Replace pri emu se trai prvi parametar i zamenjuje sa drugim. Ako se unese neto drugo a ne definisani parametar Hello za zamenu, koja je navedena u kodu, nee se nita desiti. Odnosno prikazae se kao rezultat smeten tekst u promenljivu noviS.
122
5. 9 Rad sa Datumima
Kod datumskih formi upotrebljava se kljuna re za deklarisanje Date.
...
Dim Datum As Date Datum = Date.Now() MessageBox.Show(Datum)
...
Ovaj deo koda: Date.Now() vratie nam tekui datum i vreme, odnosno sistemsko vreme koje pokazuje raunar. Zbog toga format i vremensko razdoblje prikazivanja podeavaju se sistemski. Takoe postoji mogunost formatiranja datuma i vremena. Moemo prikazati samo datum ili samo vreme i u razliitim oblicima (slika 522 ).
MessageBox.Show(Datum.ToLongDateString) MessageBox.Show(Datum.ToShortDateString) MessageBox.Show(Datum.ToLongTimeString) MessageBox.Show(Datum.ToShortTimeString) (1) (2) (3) (4)
123
Osim toga datumska promenljiva se moe formatirati tako da prikazuje samo mesec, dan, godinu, sat, minut, sekundu, dan u nedelji, dan u godini. MessageBox.Show (Mesec: & Datum.Month) MessageBox.Show (Dan: & Datum.Day) MessageBox.Show (Godina: & Datum.Year) MessageBox.Show (Sat: & Datum.Hour) MessageBox.Show (Minuta: & Datum.Minute) MessageBox.Show (Dan u nedelji: & Datum.DayOfWeek) MessageBox.Show (Dan u godini: & Datum.DayOfYear)
Ovde emo jo spomenuti upotrebu kontrole pomou koje se moe odabrati datum DateTimePiker. Unosi se u formu iz kutije sa alatkama (Toolbox-a) i nudi oblik kao to to prikazuje slika 524. Ovo je zgodna alatka koja korisniku moe pruiti mogunost odabira bilo kog datuma iz palete ponuenih.
124
126
hardverskim opremama i sloenijim zadacima to se odrazilo na kvalitet softverskih reenja. Prvi projekat na kojem se susreu sa takvim kompleksnim problemom je izrada softvera za modelovanje kretanje brodova kroz prolaznu kapiju (rampu) pod razliitim uticajima. Tu se pokazuje eksplozivan broj mogunosti uslova pod kojima brodovi mogu biti izloeni. Projektanti softverskog sistema dolaze na ideju da se brodovi klasifikuju kao objekti odnosno da se izvri grupisanje brodova, pa se brodovi svrstavaju u klase. Pri tome formiran je model objekta sa kojim se moe dalje eksperimentisati i izloiti ga raznim uticajima. Osnovna ideja je u sutini da se nae reenje modelovanja realnog okruenja. Prema tome, karakteristika raunarskih tehnologija je kontinualan razvoj kako hardverskih, tako i softverskih alata. Istraivai su traili nain da odre nivo kvaliteta softvera pri emu su razvili razne alate u cilju da pojednostave programerske aktivnosti. Cilj je da se izbegne onaj dosadni deo pisanja softverskih kodova koji oduzimaju veoma dugaak vremenski period u proceduralnim jezicima. Metodologija u OOP se fokusirala na podatke, a ne na procese tj. na kreiranju objekata koji sadre sve informacije za manipulaciju sa sopstvenim podacima, nasuprot proceduralnim jezicima. Naglasak je na diskretnim jedinicama koje mogu ponovo da upotrebe logiku programiranja (nasleivanje). ta je OOP? OOP je skup objekata koji se meusobno povezuju u cilju da formiraju aplikaciju . Pogodnosti objektno orijentisanog programiranja odraavaju se u lakom odravanju programskih kodova, u mogunosti ponovne upotrebe kodova kroz enkapsulaciju i u mogunosti proirivanja funkcionalnosti klase.
127
koja e omoguiti izradu aplikacija pod raznim Windows operativnim sistemima. Prepoznavajui znaaj Interneta i njegov uticaj na programerski svet, u Microsoftu su odmah usmerili razvoj softverkih tehnologija u pravcu mrenih aplikacija, Web aplikacija i Web servisa. Stvorena je platforma sa nizom funkcionalnosti ujedno nudei iroku lepezu alata obuhvaenih pod istom kapom, a koja nadograuje mogunosti operativnih sistem. Osnovna ideja je bila kako da se olaka rad programera, stoga, sadri i veliki broj gotovih reenja za razvoj aplikacija. Povoljnosti se pokazuju u primeni razvojnog okruenja u kome se izrauje aplikacija, bilo da se radi pri lokalnim izvrenjem instrukcija ili mreno, zatim u sigurnosti izvrenja programskih naredbi i u konzistentnosti programerske prakse kroz razne vrste aplikacije. Osnovno pitanje je o emu se ovde radi? ta je ta pogodnost koja se prua programerima? Najjednostavnije reeno, jednim delom izvrenja aplikacije upravlja platforma u .NET tehnologiji, odnosno .NET Framework , dok je sa ostalim delom izvrenja programskih kodova direktno zaduen centralni procesor. .NET Framework je sloena arhitektura koja sadri niz komponenti. Razlikujemo dve glavne komponente .Net Framework-a: Commom Language Runtime (CRL) i .NET Framework Class Library (FCL) Commom Language Runtime (CRL) je deo koja ima ulogu virtuelne maine. To je koji sistem koji je zaduen i za izvravanje i za upravljanje programskim kodovima u realnom vremenu. Drugi deo .NET Framework-a je Framework Class Library (FCL). On je potpuno objektno orijentisan, jer sadri ogroman skup klasa nezavisnih od programskog jezika. Sutina objektne orijentisanosti je da putem upotrebe postojee klase prenosimo funkcionalnosti na nae programske kodove na novo kreirane klase. Upotreba klase nije ograniena samo na sloene postupke, ve putem njihove primene obavljamo i najbanalnije zadatke kao to su pristupi datotekama, upravljanje stringovima, rad sa kolekcijama i slino. 61. Kako .NET Framework funkcionie ematski je ilustrovan na slici
Kao to je ve dosada spomenuto u knjizi, aplikacije se kreiraju pomou programskih jezika, a potom se interpretiraju i prevode na mainski jezik.
128
U treem poglavlju je objanjenje funkcionisanja raunara uproeno, ali su sutinske funkcije istaknute. Sada emo otii malo dalje i udubiti se u princip .NET izrade aplikacije. Poto se radi o programiranju pomou alata .NET postupak prevoenja i uloga operativnog sistema je malo sloenija.
U izradi .NET aplikacije izvorni kod se kreira pod .NET platformom. Programske instrukcije se neminovno pretvaraju u binarni oblik (mainski kod) da bi raunar mogao da ih razume. Proces se odvija tako to se pokretanjem aplikacije prvo prevodi izvorni kod na Microsoft Intermediat Language (MSIL). To je sloj koji predstavlja skup instrukcija nezavisnih od centralnog procesora i potuje pravila Common Language Specifications (CLS). Ova pravila su vana zbog toga to se aplikacija moe kreirati u bilo kom programskom jeziku. Poto svaki jezik ima svoje specifinosti, CLS pravila obezbeuju kompatibilnost sa .Net Framework-om i interoperabilnost meu aplikacijama. Uporedo sa kompajliranjem na MSIL formiraju se Meta podacima koji e pruiti informacije o elementima, klasama, referencama itd. neophodnih za izvravanje instrukcija koje obavlja Common Language Runtime (CLR). Zatim se Common Language Runtime (CLR) stara o stabilnosti i funkcionalnosti aplikacije na osnovu pronaenih meta podataka, dok je za prevod izvornih instrukcija u mainskom kodu zaduena komponenta Just in Time (JIT). Kao to i samo ime kae proces prevoenja ove komponente se odvija u realnom vremenu. CLR u sutini predstavlja izvrno okruenje. To je sloj koji se nalazi izmeu operativnog sistema i aplikacije kreirane pomou nekog od .NET programskog jezika.
129
Da sumiramo ulogu .NET platforme u kreiranju aplikacije. Karakteristino je da se aplikacije pod ovom platformom mogu izraditi u bilo kom programskom alatu: J#, C#, VB.Net itd. (slika 62). Zatim e CLR prevesti izvorne programske kodove na mainski jezik. Meutim, prevoenje nije tako neposredno i jednostavno, jer CLR ne poznaje nijedan programski jezik. On iskljuivo tumai i izvrava naredbe u MSIL-u. Zbog toga se najpre prevodi programski jezik u MSIL pomou IL (Intermediat Language) kompajlera i zatim na osnovu MSIL naredbi CLR prevodi na mainski jezik.
6.2 Objekti
Iako izraz objektno orijentisano zvui veoma bombasto i zastraujue, danas se smatra da ta tema nije tako strana kao pre nekih petnaest godina. U cilju da razjasnimo ta je koncepcija objektne orijentisanosti poeemo od objanjenja ta je objekat.
130
Objektno orijentisano programiranje Objekat je sve ono to nas okruuje. Moe biti recimo bicikl, lampa, radio, pas, korisniki izvetaji znai, bilo ta iz naeg okruenja.
Uvoenjem objekata mnogo se pojednostavio rad programera, jer su objekti pretvorili softversko inenjerstvo u neto konceptualno slino drevnim gradivnim blokovima. Koncept izrade programa putem proceduralnih jezika ine pisanje gradivnih blokova po odreenom redosledu. Slina je postavka i u objektno orijentisanom pristup izrade aplikacija. U cilju da se formira celina od sume objekata oni se araniraju po odreenom redosledu. Objekti su veoma korisni. Njihova snaga je u tome da ih moe koristiti i onaj ko ne razume kako su sastavljeni. Sutina je da moemo kreirati objekat, traiti od njega da neto uradi, ali mi ne moramo znati kako njegovi unutranji delovi to obavljaju. Objanjenje samog koncepta upotrebe objekata u literaturama se esto svodi na analogiju sa funkcionisanjem televizora kao to to ilustruje slika 63 . Korisnika interesuje koji je taj objekat (TV), koje je to trenutano stanje (koji kanal gleda) i koje ponaanje ispoljava (promena kanala) odnosno prelazak iz jednog stanja u drugi.
131
Prema tome osobenost softverskih objekata pokazuju se u sledeim karakteristikama: identitet, stanje i ponaanje. Da bi se bolje razjasnio rad sa objektima ilustrovaemo to na jo dva primera. Uzmimo na primer maku. Maka je objekat za koje treba utvrditi stanje i ponaanje. Identitet objekta je Maka, koje moe imati stanje {ime, boja,glad,...} i ispoljiti ponaanje {mijaue, mae repom, umiljava se,... }. Drugi primer objekta moe biti bicikl. Identitet objekta je bicikl. Sada ostaje da se utvrdi stanje i ponaanje tog objekta. Stanje opisuje sledei skup svojstava: Stanje = {trenutna brzina, trenutni poloaj pedale, trenutno stanje menjaa}, dok se za ponaanje moe navesti sledei skup: ponaanje={promena koenje}. brzine, promena poloaja pedale,
Prema tome, osnovna pitanja koja se postavljaju pri kreiranju objekta su: koja su mogua stanja objekta koji on moe imati i koje mogue ponaanje e on ispoljiti? to smo na prethodnim primerima i pokazali reprezentujui nain razmiljanja u objektno orijentisanom programiranju. Da bi objekat u aplikaciji imao ove karakteristike mi moramo to nekako saoptiti raunaru, moramo ispoljiti na neki nain uticaj. U sutini na objekte utiemo kroz METODE i SVOJSTAVA (slika 64). Ovo su sada novi pojmovi koje emo sada da razjasnimo: METODE za njih moemo rei da je to neto to zadajemo objektu da radi, a SVOJSTVIMA se opisuju osobine objekata.
132
Objektno orijentisano programiranje Objekat pohranjuje svoje stanje u polja (ili kako u nekim programskim jezicima to nazivaju: VARIJABLAMA) i iskazuju svoje ponaanje kroz metode.
Svaki objekat je sposoban da prima podatke, obrauje ih i da poalje podatke drugom objektu. To znai da struktura podataka ima tendenciju da nosi svoje operatore sa sobom (ili u najmanju ruku da ih nasledi od nekog slinog objekta). To je velika razlika u odnosu na konvencionalni pristup programiranja, gde se podaci i ponaanje posmatraju zasebno.
6. 3 Enkapsulacija
Enkapsulacija je osnovni princip na kome se zasniva objektno orijentisano programiranje. Opet jedna krupna re sa kojom se susreemo. U osnovi se radi o veoma jednostavnoj stvari. U emu je sutina? Jednostavnijim jezikom reeno dolazi do sakrivanja unutranje logike objekta, ali strunije objanjenje je vezano za objekte i za njegove metode. U prethodnom smo rekli da METODE rade sa objektovim unutranjim stanjem i primorani su za komuniciranje objekta sa drugim objektom. UNUTRANJE STANJE se sakriva i sva interakcija meu metodama objekata je enkapsulirana. Enkapsulaciju moemo prezentovati analogijom dugmeta zasnovanog na principu crne kutije. Osnovni princip je u tome da imamo jednu kutiju sa dugmetom (slika 65). Pritiskom na dugme ta kutija treba neto da uradi. Naa uloga u tome je da poveemo kutiju sa nekim elementom da bi ona mogla da
133
izvri svoju funkciju. Mi nemamo potrebe da znamo ta ona zapravo radi. Ono OSNOVNO ZNANJE to je potrebno da imamo je kako se kutija povezuje.
Sklapanjem kutija (objekata) se pravi kompleksan sistem, ali mi ne treba da kreiramo kutije (objekte). One su nam ve na raspolaganju, samo treba da ih upotrebimo.
6. 4 Dogaaji
Iako se dogaaji retko razmatraju kada se objanjava objektna orijentisanost, spomenuemo radi razjanjenja ta je to. Dogaajima odreujemo kada e se neto desiti u kontroli na obrascu. Smatra se da objekat zna ta e da uradi kada mu se zada dogaaj. Jedan od esto korienih dogaaja je i dogaaj Click. Dogaaj navodimo kada na odabranu kontrolu (Button) stanemo i dvoklikom otvorimo ureiva koda (slika 66).
134
Pojavie se i deo funkcije gde moemo navesti ta e taj dogaaj da bude. Recimo da elimo da se obrazac zatvori kada se pritisne dugme (aktivira se kontrola Button na dogaaj Click). Izraz koji se koristi za aktiviranje programskog koda navedenog u funkciji je POKRETANJE METODE a to je analogno izrazu koji se ranije koristio za pozivanje funkcije.
6. 6 Klase objekata
Klasa predstavlja definiciju objekta u obliku softverskog koda. To je ono to je unutar crne kutije koju smo spomenuli u prethodnom primeru. Poto se radi o objektu, unutranjost je programski kod pisan u Visual Basic.NET-u. Sada dolazi do izraaja razumevanja kako rade unutranji delovi, kako radi crna kutija. Klasa objekata se kreira u toku razvoja aplikacije i pisanja softverskog koda. Kada pokrenemo novi projekat automatski se kreira klasa Form (slika 67).
Public Class Form1 End Class
135
Za prvi obrazac Form1 klasa zapoinje sa kljunom rei Public Class i zavrava se sa End Class oznaavajui kraj koda za tu klasu. Klasa definisana sa Public upuuje na to da je klasa pristupana svim ostalim kodovima u aplikaciji. U toku izrade aplikacije moe se kreirati niz primera klase. Ako imamo n objekat imaemo n primerak klase. Kada se pokrene aplikacija tada se od kreiranih klasa formiraju objekti. U sutini formiranjem primeraka klase stvaramo objekat. Da bismo na odgovarajui nain koristili objekat mi moramo nekako i manipulisati sa njima. To se ostvaruje putem definisanja njihovih karakteristika i metoda. Na primer moemo kreirati klasu BICIKL a da na osnovu njega formiramo razne objekte iste klase: sportski bicikl, muki bicikl, tandem bicikl i brdski bicikl. Poto sva etiri objekta dele istu klasu primeri su klase BICIKL imae iste karakteristike i metode kao klasa BICIKL. U okviru ovog dela osvrnuemo se i na klasini primer objekta, a to je MessageBox. On pripada klasi (primerak klase) System.Forms. MessageBox i deo je radnog okruenja. Kada navedemo u programskom kodu sledeu naredbu:
136
mi znamo da e se pokretanjem programa prikazati prozori u kome e se ispisati navedeni tekst Hello World!. Mi jedino znamo da emo dobiti poruku, ali ne znamo nita o tehnologijama za prikazivanje polja i ekanja na ulaz, jer je funkcionalnost prikazivanja prozora i teksta enkapsulirana u samom MessageBox-u. 6. 6. 1 Izgradnja klasa Klase se kreiraju kada se gradi aplikacija. Obino se primenjuju klase koje su ve ugraene u okruenje. U .NET-u postoji ogroman skup klasa pod nazivom Microsoft.NET Framework Classes. U ovakve objekte Framework-a spadaju objekti koji obezbeuju funkcionalnost tampanja i funkcionalnost pristupa bazi podataka. Sa druge strane postoje objekti koji se ne mogu nai u Framework-u. Recimo da treba da izradimo raun za korisnike i da ih dotampamo. Potrebni koraci su u tom primeru:
U ovom primeru objekti Korisnik i Raun ne postoje u Framework-u i njih treba da kreiramo. Kreiranje klasa se odvija pomou Solution Explorera za projekat koji razvijamo. Projekat je sauvan pod nazivom Proba i za njega kreiramo klase tako to na naziv objekta stanemo pokazivaem i klikom na desni taster dodamo novu klasu (Add>New Item). Aktiviranjem New Item prikazae se Template prozor kao to prikazuje slika 68. Korisniku se tada
137
nudi da odabere stavku koju hoe da kreira. Moe da kreira novu formu, dijalog, klasu itd. U ovom primeru odabraemo Class iz Template prozora i kreirati klasu pod nazivom Klasa1. Neophodno je izmenjati naziv klase od ponuenog i dati novi naziv (kao i kod kontrola) zbog toga to posle nekoliko meseci neemo znati ta je Class 1. Kreirana klasa e se pojaviti u obliku kao to to prikazuje slika 69.
Osim novih klasa esto se upotrebljavaju i moduli u aplikacijama. Moduli se koriste kada treba da izdvojimo podrutine izvan klase npr. Form1. Poenta upotrebe modula je da su podrutine napisane u njemu nezavisne od klase u kome se pozivaju. Jednom napisana procedura ili funkcija moe se primeniti u razliitim klasama, to je pojednostavilo izradu aplikacija.
138
Slika 610 prikazuje dodavanje podrutine ispod Public Class Form1. Kao to se vidi podrutina Sub dodavanje je podvueno, to upuuje na greku.
Da bismo izdvojili ovu proceduru i smestili u modul, treba prvo da kreiramo taj modul. Postupak kreiranja modula je identian kreiranju klasa, a zatim dodajemo programske linije za dodavanje broja 10 izmeu Module Module1 i End Module:
Module MojModule Public Sub dodavanje(ByVal broj As Integer) Dim A As Integer A = broj + 10 MessageBox.Show(A)
139
U svrhu upoznavanja primene modula vratiemo se na obrazac Form1 i dodati jedno dugme. Dvoklikom na dugme otvara se editor koda i u podrutini dugmeta Sub Button1 poziva se procedura Sub dodavanje iz modula MojModul.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call dodavanje(10) End Sub
Kada se pokrene aplikacija i aktivira dugme Button1 prikazae se poruka kao na slici 611. Kreirana klasa i modul prikazivae se na jednoj traci iznad editora kod-a, to daje mogunost kretanja kroz datoteke, jer su oni unutar svoje datoteke.
6. 6.2 Mogunost ponovnog korienja koda Prethodno izloeno nas dovodi do jedne druge izuzetno znaajne oblasti objektno orijentisanog programiranja a to je mogunost ponovnog korienja koda. Ilustrovaemo to na sledei nain. Imamo tri razliite aplikacije da kreiramo, s tim da svaki od njih radi neto sa korisnicima: jedna prikazuje raun korisnika, drugi slui za registrovanje novog korisnika, a trei za evidenciju albi. Kao to se samo od sebe namee, reenje ovde postoji, mogunost da se primeni ista klasa objekata (klasa Klijent) u razliitim projektima. Jednom kreirana klasa se moe iskoristiti u drugim aplikacijama pozivanjem iste klase. Ali u nekim sluajevima neophodno je kreirati klasu
140
za svaki projekat ponaosob. To sve zavisi kako koncipirate aplikaciju i kakvi zahtevi su postavljeni za samu izradu (poslovna logika). Ne postoji neko strogo pravilo da se izradi univerzalni objekat. Poenta je u tome da je svaki objekat odgovoran za aktivnosti koje sprovodi i nita vie, a to je ono to treba da uvaimo.
Objektno orijentisano programiranje 6. 7. 1 Sintaksa procedure Sub Ovako izgleda jedna procedura u Visual Basic.Net-u:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim A As String A = txtA.text MessageBox.Show(A.Length & "znakova") End Sub
141
Podprogramske procedure (funkcije) su Sub procedure. One su deo programskog koda koje se izvravaju kao odgovor na neki dogaaj. Karakteristino je da kod obavljanja nekog zadatka ne vraaju vrednost u svom imenu samo u nekoj promenljivoj, to e biti kasnije detaljnije analizirano. Postupak izrade procedure zasniva se na njenom deklarisanju. U optoj formi procedura izgleda ovako:
Procedura Sub poinje sa slubenom rei Private/Public Sub nakon ega sledi naziv procedure Button1_Click. Iza naziva navode se argumenti u zagradi. To su parametri funkcije (sender i e), odnosno definisani tipovi promenljivih. I ono to je na kraju Handles Button1.Click Funkcija se moe deklarisati tako da se ona moe pozivati bilo gde u aplikaciji. Takve procedure su procedure opte namene (general procedure) i po pravilu su tipa Public. Sutina njihovog kreiranja je
142
mogunost izvoenja iste akcije u razliitim procedurama dogaaja (event procedurama). Takav primer smo videli u okviru razmatranja modula. Kljuna re Sub ukazuje da se radi o funkciji/proceduri koja ne vraa vrednost i skraenica je od rei Subroutine. Inae funkcije koje ne vraaju vrednost u Visual Basic.NET-u se zovu METODE. Najznaajnija stvar u vezi izrade kvalitetne aplikacije je dobra strategija programiranja. Pod tim se podrazumeva postavljanje zajednikih izraza u odvojenu proceduru (procedure opte namene) i omoguavajui time njihovo pozivanje u procedurama dogaaja. 6. 7. 2 Pozivanje procedure Sub Pozivanje procedure Sub se odvija putem samostalnog izraza. Ove procedure se ne mogu pozvati po imenu kao funkcije. Prilikom pozivanja procedure Sub prosleuju se argumenti toj proceduri. Prosleeni argumenti su promenljive, koje sainjavaju neophodnu informaciju o stanju aplikacije. Na osnovu ove informacije programski kod obavlja svoj zadatak. Razlikujemo pozivanje procedure: po prosleenoj vrednosti ili po prosleenoj referenci. Pozivanjem procedure po prosleenoj referenci (ByRef) daje se pristup stvarnom sadraju promenljive na mestu njene memorijske adrese. To znai da vrednost promenljive moe biti trajno promenjena i svaka izmena te promenljive se prosleuje nazad u proceduru koja je uputila poziv. Da bi se to izbeglo u deklarisanju procedure koristimo ByVal u listi argumenata. Na ovaj nain prosleuje se samo kopija promenljive, a ByVal ukazuje na argument kome je dodeljena vrednost (promena vrednosti e uticati samo na kopiju). U .Net-u pozivanje se odvija navoenjem kljune rei CALL i naziva funkcije. Kako se primenjuju procedure Sub videemo na sledeem primeru. Pokrenemo novi projekat i na formu unesemo jedno polje za tekst (textbox) i jedno dugme. Zadatak je da se aktiviranjem dugmeta javi greka pri unosu u sluaju da krajnji korisnik nije nita ukucao ili ako je
143
ukucao prazne karaktere. U izradi aplikacije takva ogranienja se esto upotrebljavaju zbog toga da korisnici ne unose sve i svata u skladite podataka. Programski kod koji dodajemo na nivo celokupne klase Form1 je sledei:
Public Class Form1 Private Sub Greska() Dim podatak As String podatak = Trim(TextBox1.Text) If podatak = "" Then MsgBox("Molim ponovite unos") End If
--------------------------------------------------------------End Class
End Sub
Kao to vidimo procedura je definisana kao Private to znai da samo ova forma je moe videti. U ovoj proceduri primenjena je i metoda Trim za odsecanje praznih karaktera. Njegova uloga je da odseca prazne karaktere ispred ili iza teksta. Ako je unet samo prazan karakter, njegovim odsecanjem e se to tretirati kao da nije nita uneto. Tako jednom napisana procedura se moe pozivati vie puta. Pozivanje se vri na sledei nain:
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call Greska() End Sub ------------------------------------------Private Sub Greska() Dim podatak As String podatak = Trim(TextBox1.Text) If podatak = "" Then
144
6. 7. 3 Funkcijske procedure Funkcijske procedure ili jednostavnije samo funkcije su funkcionalno sline procedurama Sub. Jedina razlika je u tome to one uvek vraaju vrednosti u svom imenu. Sintaksa funkcijske procedure je sledea:
Funkction imefunkcije (argumenti) As Tip naredbe End Function
Kod deklarisanja funkcije potrebno je navesti ime funkcije koju emo pozivati. Funkcije se obino primenjuju za izraunavanja, pa se za dobijene rezultate navodi tip podatka pomou opcije As Tip. Kao i kod procedure Sub i ovde postoji mogunost navoenja argumenata koje koristi funkcija. Argumenti se navode u zagradama. I u proceduri Sub i u funkcijama se moe navesti vie argumenata ali se oni onda razdvajaju zarezima. Primer deklarisanja funkcije za izraunavanje povrine kruga:
Ova funkcija koja je ovde data za primer moe se dalje primeniti u aplikaciji. Izmeu kljunih rei Function i End Function nalazi se telo funkcije koje se izvrava samo kada je funkcija pozvana, a parametar funkcije je radius definisan prenosom parametara po vrednosti (ByVal).
145
Kljuna re koja se primenjuje za vraanje funkcije odakle je pozvana je return. Ovu funkciju moemo pozvati iz koda koji je dodat nekom dugmetu:
Dim povrsina As Double povrsina = RacPovrsinuKruga(100) 'prikazi rezultat MessageBox.Show(povrsina, "Povrsina")
Ovde smo definisali promenljivu pod nazivom povrsina. Ona e sadrati povrinu kruga. Zatim podeavamo da se vrati promenljiva koja sadri neku vrednost RacPovrsinuKruga(100),gde je u zagradi naveden vrednost parametra (100). U principu mi smo pozvali funkciju koja treba da izrauna po prethodno definisanom kodu povrinu kruga i vratie rezultat sa naredbom Return. 6. 7. 4 Nazivi funkcija Obino se u sferi programiranja primenjuju odreeni standardi u korienju naziva stvari. U .NET-u ima nekoliko vrsta standarda: Pascal konvencija imenovanja Primer: RacPovrsinuKruga Po ovom standardu svaka re navedena u nazivu FUNKCIJE poinje sa velikim slovom, dok su ostala slova mala. Camel koncencija imenovanja (koristi se i u Javi)
Primer: mojRacun
Ova konvencija se koristi kod naziva parametara i slino je sa Pascalovom konvencijom, sa tim da se prva re navodi sa malim slovima. (Napomena: Visual Basic.NET ne razlikuje mala i velika slova (MOJRACUN=mojRacun)).
146
Kreiraemo aplikaciju za sabiranje dva broja pomou funkcije. Kada se pritisne dugme Odgovor, treba da se pojavi poruka sa rezultatom sabiranja. Da bismo realizovali zadatak potrebno je da nanesemo na formu sledee: 2 polja za tekst ija e svojstva Name biti txtPrvi i txtDrugi i dugme btnOdgovor U editoru koda uneemo svoju proceduru i to izmeu End Sub i End Class:
Public Class Form1 ------------------------------------------------Private Sub btnRezultat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRezultat.Click End Sub ------------------------------------------------Private Sub Sabiranje(ByVal prvi1 As Integer, ByVal drugi1 As Integer) Dim rezultat As Integer prvi1 = Val(txtPrvi.Text) drugi1 = Val(txtDrugi.Text) rezultat = prvi1 + drugi1 MsgBox("Rezultat je: " & rezultat) End Sub End Class
Promenljive prvi1 i drugi1 mogu se zvati bilo kako jer ga definiemo unutar procedure Sub i to kod definisanja procedure:
Private Sub Sabiranje(ByVal prvi1 As Integer, ByVal drugi1 As Integer)
147
One predstavljaju parametre (prvi1 As Integer) definisane kao celobrojne vrednosti u ovom primeru, a koje prosleujemo proceduri Sabiranja. U njih smetamo vrednosti koje smo uneli u polja za unos. Ostalo je da sredimo jo liniju za pozivanje podrutine sa naredbom Call.
Public Class Form1 ------------------------------------------------Private Sub btnRezultat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRezultat.Click Dim prvi As Integer Dim drugi As Integer Call Sabiranje(prvi, drugi) End Sub
------------------------------------------------Private Sub Sabiranje(ByVal prvi1 As Integer, ByVal drugi1 As Integer) Dim rezultat As Integer prvi1 = Val(txtPrvi.Text) drugi1 = Val(txtDrugi.Text) rezultat = prvi1 + drugi1 MsgBox("Rezultat je: " & rezultat) End Sub End Class
Ovaj primer je ilustrovao prosleivanje po vrednosti - ByVal, a u narednom emo videti primenu prosleivanja parametara po referenci - ByRef i ukazati na razlike izmeu njih.
Razlika izmeu njih je da u prvom sluaju prosleujemo samo kopiju promeljive (kako smo to ve jednom prethodno objasnili), a drugom sluaju baratom direktno sa promenljivom. Sada emo to neposredno demonstrirati na jednom primeru.
148
Pokrenemo novi projekat i nanesemo dugme za formu na koji emo dodati sledei programski kod:
Public Class Form1 -------------------------------------------------------Private Sub Button1_Click(ByVal sender As System. Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Broj1 As Integer Broj1 = 20 Call RastucaPromenljiva(Broj1) MsgBox(Broj1) End Sub -------------------------------------------------------Private Sub RastucaPromenljiva(ByVal broj1 As Integer) broj1 = broj1 + 1 End Sub -------------------------------------------------------End Class
Kao to vidimo prosledili smo promenljivu po vrednosti, pa e rezultat sabiranja, ako pokrenemo program, biti 20. To znai da nije vrednost promenljive sabrana. Ona je ostala 20, a dodavanje se desilo na njenoj kopiji. Ako izmenjamo ByVal na ByRef u podrutini RastucaPromenljiva vrednost promenljive e se poveati za 1.
ByVal broj1 As Integer ByRef broj1 As Integer Private Sub RastucaPromenljiva(ByRef broj1 As Integer) broj1 = broj1 + 1 End Sub
6. 8 Nasleivanje
Razliiti objekti mogu imati zajednika svojstva ali imaju i neto to samo njih karakterie. Onda, jednostavno reeno, nasleivanje znai kreiranje objekata koji imaju neto to ima drugi objekat, ali imaju neto i sopstvenih delova. U sutini se proiruje funkcionalnost objekata, i ne zahteva se da potpuno razumemo kako unutranji delovi rade. Objektno orijentisano programiranje dozvoljava klasama da naslede naj uobiajeno ponaanje i stanje. Recimo da je Bicikl klasa od koje mogu ostale klase da naslede osnovne karakteristike, to su trkaki bicikl, obini bicikl i tandem (dvosedni biciklovi).
149
Konkretna realizacija nasleivanja odvija se tako to se prvo kreira klasa na primer Bicikl i iz njega e da sledi klasa Sportski bicikl (Slika 612). Kreiranje klase Bicikl: (dodavanjem Add Class pod imenom Bicikl)
Public Class Bicikl Public Color As String Public BrSedista As Integer Public Pedale As String
Sledi kreiranje objekta Sportski Bicikl koji e biti nasleen od klase objekata Bicikl, i to tako to u Sportskibicikl.vb dodajemo programski kod sa kljunom rei inherits:
Public Class Sportskibicikl Inherits Bicikl Public Menjac As Integer End Class
End Class
150
6. 9 Polimorfizam
Ovaj izraz potie iz grke rei, ije znaenje je mnogo formi. Sam naziv reflektuje princip u objektno orijentisanom programiranju da se objekat moe ponaati kao drugi objekat. Objekat se moe tretirati kao da je druga vrsta objekta. U prethodnom primeru smo videli da je Sportski bicikl nasledio svoja svojstva od klase objekta Bicikl. Takoe odrava i osnovno ponaanje objekta Bicikl. Pozivanjem metode iz Bicikla, da bismo prikazali ta on radi. Znai da Sportski Bicikl takoe mora biti implementiran u metod. To vai samo ako je Sportski Bicikl nasleen iz Bicikla tj. nije posebno definisan. Onda testiranjem Sportskog Bicikla moemo da testiramo i ponaanje objekta Bicikl. (Obrnuto ne vai: Sportski Bicikl ne odraava sve karakteristike Bicikla). emu ovo slui? Pa da pojednostavi aktivnosti onoga koji kreira program. Znaaj, naravno, dolazi do izraaja kod sloenih i kompleksnih aplikacija.
End Sub
151
Ova naredba podeava svojstvo objekta myProba. Operator dodele vrednosti je znak jednakosti. Pored ovog operatora pojavljuje se i taka kao operator povezivanja elemenata. Taka se upotrebljava za povezivanje svojstva, metode, kontrole, forme i kod dodeljivanja vrednosti nekoj promenljivoj. U programskim naredbama naiiemo i na znak uzvika (!), koja ukazuje da je odreeni elemenat (objekat) lan nekog niza.
7. RAD SA PODACIMA
U raunarskoj tehnici esto se stvaraju skupovi podataka. Skupove podataka sainjavaju elementi istog tipa. Shodno tome oni se pohranjuju u polja sa istim svojstvima. Za njih kaemo da su indeksirani ako su poreani po odreenom redosledu. Elemente nekog skupa moemo poreati u: NIZ pri emu dobijamo vektor; TABELU ime se formira matrica ili VIE TABELA stvarajui blokove. Vektori i matrice upotrebljavaju se u mnogim naunim disciplinama. Pogotovu su zastupljene tehnike oblasti, po emu nije izuzetak ni raunarska tehnika. U izradi aplikacija znaajnu ulogu ima programiranje struktura podataka, te su ove strukture podataka ugraene u svakom programskom jeziku.
7. 1 Vektori
Neka nam je dat skup sa n elemenata. Ako elemente tog skupa poreamo po odreenom redosledu nastae vektor V. Naziv vektora V oznaava skup svih elemenata. Na elemente ukazuju naziv vektora i njegov indeks. Indeks je redni broj elementa u nizu, gde je
1 i n.
Tada elemenat vi oznaava elemenat v sa rednim brojem i. Po tome je prvi elemenat v1, drugi elemenat v2, itd. Jednostavnije reeno na elemente
154
vektora se pozivamo nazivom vektora i njegovim rednim brojem (indeksom). Pored ovih obeleja vektor poseduje dimenziju. Dimenzijom se izraava broj elemenata u nizu broj elemenata vektora. Ovo najjednostavnije objanjava ilustracija na slici 71.
Vektore zovemo jo i jedno indeksnim veliinama, jer su elementi vektora odreeni samo sa jednim indeksom. U zavisnosti od toga od kakvih elemenata je sainjen niz, vektori mogu biti: brojani (ako sadre numerike veliine)ili slovno brojani (tekstualni).
7. 2 Matrice
Elemente nekog skupa moemo poreati i u obliku pravougaone tabele. Tada formiramo matricu koja ima m redova i n kolona:
a1,1 a2,1 A= a p ,1
Naziv matrice oznaava skup svih elemenata u tabeli to je u ovom sluaju A. Elementi matrice odreeni su nazivom matrice i rednim
155
brojem reda i kolone. Za razliku od vektora matrice imaju dva indeksa: i -indeks redova i j -indeks kolone. Dimenziju matrica odreuje broj redova m i broj kolona matrice n . I matrice mogu biti sa brojanim i sa tekstualnim vrednostima. Primer matrica sa brojanim vrednostima ilustrovaemo je putem primera proizvodnje kancelarijskih stolica. Pri tome za svaku vrstu stolica formiramo jedan vektor. Ako elimo da izrazimo normu materijala (potrebnu koliinu) za razliite vrste stolica, tada imamo matricu oblika kao na slici 72.
Pri tome imamo vektore redova (niz elemenata odreenog reda) i vektore kolona (niz elemenata odreene kolone). U sluaju da nas interesuje koliina plastike za treu vrstu stolice tada nam na to ukazuje vrednost elementa matrice koja se nalazi u treem redu i u etvrtoj koloni.
156
Prvi korak u primeni niza je njegovo definisanje, pri emu kreiramo promenljivu koja ima vie dimenzija. Na ilustraciji ispod teksta prvo je prikazan nain deklarisanja promenljive u koju moemo smestiti samo jednu vrednost. Ali ako postoji skup podataka slinih vrednosti, onda je mnogo zgodnije smestiti ih u istu promenljivu. Na pitanje ta je niz, najjednostavnije formulisano moemo rei da je to promenljiva koja sadri vie podataka istovremeno.
Sada emo videti na jednostavnom primeru kako se izgrauje niz u Visual basic.Net-u. U novo otvorenom projektu prikazaemo imena naih prijatelja. Za izradu ove aplikacije koristiemo dugme pod nazivom btnPrikazi i na kom e stajati tekst za korisnika Prikai. Za prikaz podataka upotrebiemo kontrolu ListBox pod nazivom lstPrijatelji. Ove kontrole emo naneti na formu (slika 73).
Slika 73: Kreiranje forme za prikaz liste prijatelja (niza) sa potrebnim kontrolama
157
Nakon izrade obrasca, dodavanja kontrole, ostalo je jo i da saoptimo raunaru kako da obavi svoj zadatak. Za to je potrebno da dodamo sledeih nekoliko redova programskih naredbi za dogaaj Click dugmeta btnPrikazi:
Private Sub btnPrikazi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrikazi.Click 'definisanje niza Dim Prijatelji(4) As String 'sacuvaj ime Prijatelji(0) Prijatelji(1) Prijatelji(2) Prijatelji(3) Prijatelji(4) = = = = = "Marija" "Mia" "Aleksa" "Petar" "Ceca"
Hajde sada da vidimo kako ovo radi. Prvo smo naveli naziv lokacije u kojoj e da se uvaju podaci niza (u primeru kao String). Odmah iza sledi navoenje duine u zagradama. Poto elimo da smestimo pet imena prijatelja u promenljivu, navodimo broj 4. Ovaj broj je broj indeksa i u Visual Basic.Net-u poinje sa nulom (0,1,2,3,4). Sada jo treba da kaemo kojim tipom podataka emo da radimo. U ovom sluaju pravimo niz od imena prijatelja, pa e promenljiva biti tipa stringa. Tada kaemo da smo definisali tekstualni niz veliine 5. Elementima niza pristupamo putem indeksa, a stavke se podeavaju sledeim naredbama:
Prijatelji(0) Prijatelji(1) Prijatelji(2) Prijatelji(3) Prijatelji(4) = = = = = "Marija" "Mia" "Aleksa" "Petar" "Ceca"
Indekse koristimo i za vraanje pronalaenje traenog podatka. U ovom primeru rekli smo da vrati podatak za indeks 2 i to sledeim redom:
158
Rezultat toga je ispisivanje podatka u Listbox-u (slika 74). Na ekranu se pojavljuje jedno ime. Meutim, kada radimo sa nizom podataka, uglavnom elimo da se prikae cela lista a ne jedno ime. Takav prikaz se elegantno reava uvoenjem procedure Sub i primenom strukture For, Each ...Next petlje. Ona se intenzivno koristi kod nizova.
Slika 74: Prikaz ekrana kada se pokrene program za prikaz imena prijatelja
Za demonstraciju ovog problema upotrebiemo prethodni primer. Dodaemo Sub proceduru pod nazivom Dodaj u kome emo proslediti parametar po referenci. Unutar procedure navodimo For, Each ...Next petlju
Public Class Form1 Private Sub btnPrikazi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrikazi.Click 'definisanje niza Dim Prijatelji(4) As String 'sacuvaj ime Prijatelji(0) Prijatelji(1) Prijatelji(2) Prijatelji(3) Prijatelji(4) = = = = = "Marija" "Mia" "Aleksa" "Petar" "Ceca"
159
Sub procedura se koristi sa nizom parametra prijatelji tipa Tu se nalaze sva imena navedena u nizu. Nakon toga deklarie se promenljiva pomou koje se pregledava svaki podatak i dodaje se listi. Umesto reda
lstPrijatelji.Items.Add(Prijatelji(2))
160
programske linije
Next
7. 5 Strukture
Na neki nain moemo rei da su strukture vrednosni tipovi. U principu su veoma sline klasama i obino se koriste kada ne primenjujemo puno metoda u aplikaciji. U suprotnom koristimo klase. Kreira se kao klasa, ali se menjaju kljune rei Class u Structure i End Class u End Structure. Kreiraemo jednu novu aplikaciju za evidentiranje telefonskog imenika klijenata, to e biti osnova za objanjenje primene strukture. U ureivau koda dodajemo prvo klasu Klijent, koja e postati struktura pomou navedenog koda kao to je prikazano na slici 76.
Public Structure Klijenti 'lanovi Public Prezime As String Public Ime As String
161
End Structure
Zatim dizajniramo obrazac za prikaz podataka kao to je na slici 77. Dodajemo sledee kontrole i podeavamo svojstva: Vrsta kontrole Naziv kontrole
txtPrezime Svojstvo Text
4 polja za tekst
Dugme
btnUnos
162
Posle u editoru koda dodajem na dogaaj Click ovaj kod zajedno sa metodom (procedura) PrikazKlijenata:
Public Class Form1 -----------------------------------------------------Private Sub btnUnos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUnos.Click 'kreiraj novog klijenta Dim probaKlijent As Klijenti probaKlijent.Prezime = "Toi" probaKlijent.Ime = "Ivana" probaKlijent.Adresa = "Cara Duana 34" probaKlijent.Telefon = "011-2345-345" 'prikaz novog klijenta PrikazKlijenta(probaKlijent)
End Sub ----------------------------------------------Public Sub PrikazKlijenta(ByVal klijent As Klijenti) 'auriranje polja txtPrezime.Text = klijent.Prezime txtIme.Text = klijent.Ime txtAdresa.Text = klijent.Adresa txtTelefon.Text = klijent.Telefon End Sub End Class
Kada startujemo aplikaciju ispisae se podaci o klijentu to smo definisali u programskom kodu.
163
Takoe, slino klasama, i strukturama moemo dodati i svojstva. U ovom primeru dodaemo kod koji je osenen u Klijent.vb, a koji prikazuje prezime i ime klijenta unetog u telefonski imenik:
Public Structure Klijenti 'lanovi Public Public Public Public Prezime As String Ime As String Adresa As String Telefon As String
Public ReadOnly Property CeloIme() As String Get Return Prezime & " " & Ime End Get End Property End Structure
164
Na slici 78 vidimo da se pojavljuje spisak definisanih elemenata strukture stavljanjem take iza parametra metode klijent. Na slici 7 9 se vidi da je dodato jo jedno polje za unos teksta txtCeloIme i jedno polje za prikaz teksta Prezime i ime i kada pokrenemo aplikaciju ovo e biti rezultat obrade
7. 6 Kolekcije
Visual Basic.NETradi i sa posebnim konstrukcijama KOLEKCIJAMA. One spadaju u Framwork-ove klase i nude odreene pogodnosti u odnosu na rad sa nizovima. Njih ini skup informacija sauvanih u nekoj listi, a koje su u nekom odnosu. Njihova primena je mnogo zgodnija sa aspekta programera, jer prua veu fleksibilnost u manipulisanju programa, kao na primer brisanje stavke iz niza, zamena postojeeg elementa u nizu i slino. Demonstriraemo primenu kolekcije na osnovu prethodnog primera modifikacijom postojeeg koda. Prvo emo preraditi obrazac iz prethodnog primera dodavajui jedan LixtBox to emo nazvati lstKlijent. Nakon toga u editoru koda promeniemo kod za klasu Form i upisati sledee:
Public Class Form1 Inherits System.Windows.Forms.Form 'lanovi Private _klijenti As New ArrayList() ---------------------------------------------------------Public Function KreirajKlijenta(ByVal prezime As String,
165
ByVal ime As String, ByVal adresa As String, ByVal telefon As String) As Klijenti 'kreiraj novog klijenta Dim noviKlijent As Klijenti noviKlijent.Prezime = prezime noviKlijent.Ime = ime noviKlijent.Adresa = adresa noviKlijent.Telefon = telefon 'dodaj listi _klijenti.Add(noviKlijent) 'dodaj pregledu lstKlijent.Items.Add(noviKlijent) 'vrati klijenta Return noviKlijent End Function ---------------------------------------------------------Private Sub btnUnos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUnos.Click 'kreiraj neke klijente KreirajKlijenta("Beri", "Maja", "Jug Bogdana 3", "011-2334-567") KreirajKlijenta("Stani", "Petar", "Terazije 12", "011-2117-887") KreirajKlijenta("Popov", "Dara", "Njegoeva 25", "011-2712-999")
Ako pokrenemo kod u polju za prikaz liste nee se pojaviti spisak klijenata, ve e se samo formirati struktura pod nazivom Klijenti, a koja e se popuniti spiskom klijenata. Za prikaz u ListBox-u potrebno je da se doda sledei kod u klasi Klijentu.vb:
Public Structure Klijenti 'lanovi Public Prezime As String Public Ime As String Public Adresa As String Public Telefon As String ---------------------------------------------------------Public Overrides Function ToString() As String
End Sub
166
Return Prezime & " " & Ime & " " & Telefon & " " & Adresa
Pogodnost kolekcije je da se lako moe manipulisati sa podacima, pa emo u narednom videti ta je potrebno za brisanje i prikazivanje stavki. 7. 6.1 Brisanje stavki sa liste Rad sa podacima obuhvata i niz drugih radnji sem dodavanja stavki. Korisniku treba omoguiti i brisanje stavki iz liste, tako da emo nastaviti prethodni primer spiska telefona klijenata i dodati jedno dugme za brisanje pod nazivom btnBrisanje. Na ovo dugme dodaemo sledei kod:
Private Sub btnBrisanje_Click(ByVal sender As System. Object, ByVal e As System.EventArgs) Handles btnBrisanje. Click
167
If MessageBox.Show("Da li stvarno hoete da obriete podatak" & SelectKlijenti.Prezime & "?", "Poruka", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then 'sauvaj klijenta kojeg eli da brie Dim deleteKlijent As Klijenti = SelectKlijenti 'izbrii klijenta _klijenti.Remove(deleteKlijent) End If MessageBox.Show("Morate odabrati klijenta!") End If End Sub Else
Public ReadOnly Property SelectKlijenti() As Klijenti 'selektovano? If lstKlijent.SelectedIndex <> -1 Then 'vrati odabranog klijenta Return lstKlijent.Items(lstKlijent. SelectedIndex) End If End Get End Property
Startovanjem programa moe se prikazati na ekranu obrazac kao na slici 711, kada nismo nita odabrali, ili kao na slici 712 kada pristupamo brisanju. Na poetku programskog koda proveravamo da li je klijent odabrao stavku iz liste ili nije i to se realizuje sa primenom strukture If... Then:
If selectKlijenti.IsEmpty = False Then
168
Ako nije nita odabrao dobija upozorenje u vidu MessageBox-a, pri emu ne doputa korisniku da uradi bilo ta kao na slici 711.
U sluaju da je odabrao u ugnjedenom delu koda If Then strukture, dalje se odvija izvrenja koda. Naravno prvo e nam se pojaviti prozor sa pitanjem da li elimo da obriemo podatak ili ne. Ovo je uobiajeni postupak kada se manipulie sa podacima, jer nikada ne dozvoljavamo korisniku da neposredno izvri brisanje, promenu ili uvanje podataka. Korisnik moe i da pogrei pa je potrebna izvesna fleksibilnost aplikacije.
169
Osim to korisnik nekada treba da obrie stavku iz niza, on u nekim sluajevima eli i da izlista te podatke radi uvida u njih ili provere podataka. Na istom primeru telefonskog imenika klijenata prezentovaemo kako se to radi.
Na slici 713 prikazuje se forma koju smo dosada podrobno odradili za unos i brisanje podataka. Sada je cilj da se doda jo kod za prikazivanje podataka u poljima ispod prikaza liste kada se klikne na odreenog klijenta. Znai, kod za prikaz podataka o klijentima dodaemo na kontrolu ListBox nae aplikacije.
Private Sub lstKlijent_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstKlijent.SelectedIndexChanged PrikazKlijenta(SelectKlijenti) End Sub
Oseneni deo u kodu poziva metodu PrikazKlijenta koju smo prethodno ve definisali u aplikaciji. To je ista procedura koja se koristi kod poetnog uitavanja podataka.
170
Public Sub PrikazKlijenta(ByVal klijent As Klijenti) 'auriranje polja txtPrezime.Text = klijent.Prezime txtIme.Text = klijent.Ime txtAdresa.Text = klijent.Adresa txtTelefon.Text = klijent.Telefon
End Sub
7. 7 Dinamiki niz
Dosada smo se bavili sa nizovima ije duine su bile nepromenjene. Ali to ne mora da bude uvek tako, i uglavnom i nije. U prethodnom delu smo videli da mi moemo dodavati stavke nizu ili da ih obriemo iz niza i tada se menja i njihova duina. Niz ija duina je promenljiva se zove dinamiki niz i postie se kljunom rei ReDim. Dinamiki niz smo demonstrirali u prvom primeru ovog poglavlja uitavanjem spiska prijatelja, ali zbog razumevanja ta se u pozadini deava kada se izvrava program staviemo imena u zagrade. Podsetiemo se samo na rezultat izvravanja te aplikacije. Klikom na dugme Prikai pojavie se spisak unetih prijatelja kao na slici 714. Sada emo da izmenjamo kod. Dodaemo jo i red (osenen u kodu):
ReDim Prijatelji(6)
171
Public Class Form1 ---------------------------------------------------Private Sub btnPrikazi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrikazi.Click 'definisanje niza Dim Prijatelji(4) As String 'sacuvaj ime Prijatelji(0) Prijatelji(1) Prijatelji(2) Prijatelji(3) Prijatelji(4) = = = = = "Marija" "Mia" "Aleksa" "Petar" "Ceca"
ReDim Prijatelji(6) 'dodaj sve prijatelje listi Call Dodaj(Prijatelji) End Sub ---------------------------------------------------Private Sub Dodaj(ByVal prijatelji() As String) 'pregledaj svakog prijatelja Array.Sort(prijatelji) Dim imePrijatelja As String For Each imePrijatelja In prijatelji 'dodaj svakog listi lstPrijatelji.Items.Add("[" & imePrijatelja & "]") Next End Sub ---------------------------------------------------End Class
172
Ali mi ne elimo da vidimo samo unete promene, ve i prethodno skladitene podatke, kao to izgleda druga forma na slici 715. To emo postii primenom kljune rei Preserve kada navodimo redimenzioniranje niza:
ReDim Preserve Prijatelji(6)
7. 8 Viedimenzionalni niz
Sledea znaajna stvar u vezi rada sa nizovima je primena viedimenzionalnog niza, ija je svrha rada sa tabelama. One su u sutini matrinog formata o kojima smo priali na poetku ovog poglavlja, a iji smo koncept funkcionisanja tu i objasnili. U narednom je dat primer koda za definisanje viedimenzionalnih nizova:
Public Class Form1 Inherits System.Windows.Forms.Form 'enumeracija: 1 korak Public Enum IndeksiOsoba As Integer Ime = 0 Adresa = 1 Telefon = 2 End Enum --------------------------------------------------------
173
Private Sub btnPrikai_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrikai.Click 'definisanje niza: 2 korak Dim Prijatelji(2, 2) As String 'postavljanje podataka: 3 korak Prijatelji(0, IndeksiOsoba.Ime) = "Kolar Marija" Prijatelji(0, IndeksiOsoba.Adresa) = "Bianinova 53" Prijatelji(0, IndeksiOsoba.Telefon) = "567-554" Prijatelji(1, IndeksiOsoba.Ime) = "Simi Marko" Prijatelji(1, IndeksiOsoba.Adresa) = "eleznika 6" Prijatelji(1, IndeksiOsoba.Telefon) = "523-864" Prijatelji(2, IndeksiOsoba.Ime) = "Dragi Ilija" Prijatelji(2, IndeksiOsoba.Adresa) = "Dunavska 15a" Prijatelji(2, IndeksiOsoba.Telefon) = "723-456" 'prikai podatke: 4 korak dodajOsobu(Prijatelji) End Sub -------------------------------------------------------'kreiraj metodu Private Sub Dim red For red Dim Dim For za prikaz podataka: 5 korak DodajOsobu(ByVal prijatelji(,) As String) As Integer = 0 To UBound(prijatelji, 1) smesti As String = "" kolona As Integer kolona = 0 To UBound(prijatelji, 2) smesti &= prijatelji(red, kolona) & ", "
Next
Next lstPrijatelji.Items.Add(smesti)
Postupak kreiranja programskog koda pokuaemo da objasnimo putem koraka koji su naznaeni u kodu.
174
1. Korak: Enumercijati Enumeracija se koristi za ograniavanje moguih vrednosti koje smetamo u promenljive. Pomou nje izgraujemo novi tip promenljive. Mogu biti zasnovane na tipu Integer, Long, Short ili Byte, pri emu se promenljiva postavlja na jednu moguu vrednost. 2. Korak: Definisanje niza Naredni korak je definisanje viedimenzionalnog niza kada se aktivira dugme Prikai. Ovde je definisan dvodimenzionalni niz, iako se moe raditi sa razliitim dimenzijama. Ilustrativno prikazano to bi izgledalo kao mrea na slici 716, sa tri kolone i tri reda. Kada pristupamo podacima pristupamo eliji u toj mrei (navodei red i kolonu). Ovo je detaljnije prikazano na slici 72 na poetku ovog poglavlja.
3. Korak: Postavljanje podataka Zatim sledi postavljanje podataka po redovima i kolonama dvodimenzionalnog niza. Ovo emo objasniti na osnovu jednog reda programskog koda. Podatak Kolar Marija je podatak o imenu prijatelja koje treba smestiti u dvodimenzionalni niz iji je naziv Prijatelji. U zagradama se navodi redni broj kolone i reda (0,0) odnosno mesto u dvodimenzionalnom nizu.
175
4. Korak: Prikazivanje podataka Ono to je ostalo da podatke prikaemo na listi i to pozivanjem metode dodajOsobu (slika 717).
5. Korak: Kreiranje metode za prikaz podataka Ova metoda bazira se na For Next petlji i to jedna koja prolazi kroz svaki red, dok druga kroz kolone za tu iteraciju. Upotrebljen je opti parametar UBound, gde se prvo navodi naziv viedimenzionalnog niza, a zatim dimenzija. Jedan oznaava prvu dimenziju, dva drugu. Kada se nae podatak stavlja se u promenljivu smesti i prikazuje se na listi. Po ovom primeru smo videli da rad sa podacima je dosta sloen, pogotovu ako se radi sa viedimenzionalnim nizovima. Zbog toga se najee koriste kolekcije u Visual Basic.Net-u.
178
Connection Omoguuje aktivnu konekciju sa bazom podataka tokom rada. Osim toga daje osnovne informacije o bazi podataka, kao to je: naziv baze podataka, gde se nalazi baza podataka (lokacija). Ova komponenta nudi upravljake programe za konektovanje sa bazom podataka, koji su .dll datoteke. To su neophodni kodovi koji omoguuju komunikaciju DataAdaptera sa bazom podataka na njenom jeziku. Command Pomou ove komponente izvrava se SQL iskaz. Iskaze moemo koristiti i za selektovanje, unos, brisanje i izmenu podataka. DataAdapter Slui za uzimanje podataka iz baze podataka ali i za auriranje podataka DataSet Sadri podatke keirane u memoriji i uzete iz komponente DataAdapter. Osim toga skladiti i tabelarne informacije o podacima (naziv polja, vrsta podataka i slino).
Na zadatak je da dalje kreiramo aplikaciju koja je konektovana na ovu bazu podataka i koja e pristupiti podacima u tabeli Artikli. Najpre treba da pokrenemo novi projekat koji emo nazvati BPVisual u Visual Basic.NET 2005 Express-u. Kliknemo na opciju Data koja se
179
nalazi na meniju. Odabraemo prozor za prikazivanje baze podataka Show Data Source (slika 8 2).
Sada emo krenuti sa odabirom baze podataka sa kojom elimo da ostvarimo vezu. Pokrenuemo Add New Data Source (mogli smo odmah iz menija, ali ovako vidimo da postoje i drugi putevi da se ovo realizuje). Otvorie nam se prozor gde moemo da odaberemo na ta emo se konektovati: na bazu podataka, Web Servis ili objekte. Kada se otvori ovaj prozor automatski je odabrana baza podataka, kliknuemo na dugme Next koji e nas dalje voditi. Aktivirae se drugi prozor (slika 83) koji nas upuuje na odabir baze podataka, a to ostvarujemo klikom na dugme New Connection. Tada se pred nama pojavljuje jedan drugi prozor kao na slici 84. Slui za dodavanje konekcije sa opcijama sa kojom mainom baze podataka emo raditi: Microsoft-ovim Jet ili SQL Server-om, odnosno da li emo koristiti Access-ove tabele ili SQL Server-e.
180
Odabraemo dugme Change i postaviti konekciju za pristup podacima u Access-u. Nakon toga kliknuemo na dugme Brows, jer treba da naemo Artikli.mdb bazu podataka. Odabraemo eljenu datoteku dvoklikom na nju, pri emu nas vraa na prethodni prozor. U donjem levom uglu nalazi se jo jedno dugme interesantno za nas, a to je dugme za testiranje veze. Obavezno proveravamo da li je konekcija ostvarena. Ako je sve u redu arobnjak e nam javiti da je konekcija bila uspena i klikom na dugme OK vraamo se na prethodni prozor, a zatim na prozor odakle smo i krenuli (slika 83). Dalje nas vodi arobnjak kada kliknemo na dugme Next. Na kraju se otvara prozor u kome moemo videti podatke tabele Artikli (slika 85). Odabraemo sva polja iz tabele tako to emo kliknuti na tabelu Artikli i zavriti postupak povezivanja sa dugmetom Finish. Pojavie se prozor Data Source kao to je to prezentovano na slici 86. U ovom prozoru moemo videti i ta sadri Dataset odnosno koja polja tabele.
181
182
183
Kada se nanesu sva polja treba ih urediti zbog estetskog izgleda. Ako je obrazac neuredan nee biti ni lako raditi sa njim. Na slici 88 prikazana je forma koju smo kreirali za manipulaciju podataka.
Ima jo jedna interesantna stvar kod izrade obrasca. Ve kod prvog koraka vidimo da se automatski unosi, osim polja za tekst i polja za prikaz teksta (label) sa nazivom tog polja. Druga stvar je da se pojavljuje meni na vrhu forme koji sadri razne opcije: za pregled podataka (kretanje gore - dole), za dodavanje, brisanje i uvanje. Kada pokrenemo aplikaciju uitavaju se podaci u Dataset-u. ak moemo i nakon otvaranja konekcije odmah i da ga zatvorimo sa: i da radimo dalje sa podacima.
con.Close()
184
Imports System.Data ---------------------------Public Class Form1 Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoad.Click Dim con As New OleDb.OleDbConnection End Sub End Class
Odnosno unosimo samo osenene linije. Sada treba navesti koju tehnologiju povezivanja emo primeniti i gde se nalazi naa baza podataka. Kao to je ve napomenuto na poetku ovog poglavlja moemo se konektovati na razne baze podataka gde svaka ima svoju tehnologiju pristupa. Za realizaciju konekcije najpre nam je potreban objekat za konekciju.
con.ConnectionString="Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:\Artikli.mdb
U ovom sluaju baza podataka je Artikli.mdb koja se nalazi u direktorijumu C. Poto je Access baza podataka koristiemo Jet-ovu tehnologiju za povezivanje podataka. Ove informacije prosleujemo ConnectionString-u, a koje je svojstvo promenljive con. Sada otvaramo konekciju sa metodom Open: Zatim koristimo Dataset da bi negde smestili podatke iz baze podataka. On sadri kopiju podataka iz baze i skriven je od nas. Nalazi se samo u memoriji. Dataset treba da komunicira sa objektom konekcije, ali se oni ne vide. Posrednik izmeu njih je DataAdapter, koji se obraa objektu konekcije i izvrava na upit vraajui podatke u Dataset-u. Oni se navode u kodu na sledei nain:
Dim ds As New DataSet Dim da As OleDb.OleDbDataAdapter Dim sql As String con.Open()
185
Prva tri reda deklariu promenljive. Nakon toga postavlja se strukturirani upit koji e da obezbedi podatke iz tabele. Zatim se kreira novi objekat DataAdapter-a, gde se deklariu dva objekta: SQL upit kao varijabla sql i objekat konekcije con. I konano smetamo podatke u Dataset nakon to ih je DataAdapter selektovao. To se vri pomou metode Fill pri emu se navode: naziv Dataset-a i identifikaciono ime za tog DataAdaptera Artikli. Sada emo dodati kontrole na na prazan obrazac i to tri polja za prikaz teksta (Label), tri polja za podatke (TextBox) i dugmad za unos podataka, brisanje, za kretanje kroz podatke tabele i za potvrdu da su izmenjeni podaci u tabeli. Kada se nanesu kontrole unosi se sledei kod odmah ispod za prikaz teksta:
txtNazivArtikla.Text = ds.Tables("Artikli").Rows(0).Item(1) txtSifraJM.Text = ds.Tables("Artikli").Rows(0).Item(2) txtPakovanje.Text = ds.Tables("Artikli").Rows(0).Item(3)
Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoad.Click Dim con As New OleDb.OleDbConnection Dim ds As New DataSet Dim da As OleDb.OleDbDataAdapter Dim sql As String con.ConnectionString = "PROVIDER=Microsoft.Jet. OleDb.4.0; DataSource=C:\ARTIKLI.mdb" con.Open() sql = "SELECT * FROM Artikli" da = New OleDb.OleDbDataAdapter(sql, con) da.Fill(ds, "Artikli") con.Close() txtNazivArtikla.Text = ds.Tables("Artikli").Rows(0).Item(1) txtSifraJM.Text = ds.Tables("Artikli").Rows(0).Item(2) txtPakovanje.Text = ds.Tables("Artikli").Rows(0).Item(3) End Sub
186
Sada emo urediti kod tako da kada pokrenemo aplikaciju automatski se uitavaju podaci na formi, ali emo prethodno postaviti neke varijable u deklaracionom delu:
Imports System.Data -------------------Public Class Form1 Dim Dim Dim Dim Dim Dim con As New OleDb.OleDbConnection ds As New DataSet da As OleDb.OleDbDataAdapter sql As String inc as integer Maxrows As Integer
ta predstavljaju prve etiri varijable ve smo objasnili, jedino da kaemo da su poslednje dve promenljive: Maxrows za smetanje podataka iz Dataset-a i inc kao broja za metodu prebrojavanja redova Row.Count. Pa onda kodu dodajemo sledee redove: Neophodno je voditi rauna o broju redova u Dataset-u. Ako se nadmai, Visual Basic.NET e javiti greku. Prebrojavanje se radi pomou navedene metode tako to promenljiva inc prolazi kroz sve redove:
Private Sub Navigacija() txtNazivArtikla.Text = ds.Tables("Artikli").Rows(0).Item(1) txtSifraJM.Text = ds.Tables("Artikli").Rows(0).Item(2) txtPakovanje.Text = ds.Tables("Artikli").Rows(0).Item(3) End Sub Maxrows=ds.Tables(Artikli).Row.Count inc=-1
Ostalo je jo da se za ostale kontrole za pregled podataka unese kod tako da emo na dugme Naredni dodati:
If inc > 0 Then inc=inc-1
187
Sa ovim smo uredili kodove za pregled podataka, ali je potrebno omoguiti i auriranje baze podataka. Poto u toku rada baratamo samo sa podacima u Dataset-u, neophodno je omoguiti korisniku da izmenja, da doda i da brie podatke ba u tabeli baze podataka. Za manipulaciju je potrebno dugme btnUnos za unos podataka, btnUpdate za auriranje podataka, btnBrisanje za brisanje postojeeg podatka, btnCommit za prihvatanje podataka u bazu i btnClear u sluaju da korisnik odlui da neto ne unese. U tu svrhu treba da unesemo kodove za dugmad koje smo ve prethodno predvideli za auriranje. Prvo emo dodati kod na dugme btnUpdate:
Dim cb As New OleDb.OleDbCommandBuilder(da) ds.tables("Artikli").Rows(inc).item(1)= txtNazivArtikla. Text ds.tables("Artikli").Rows(inc).item(2)= txtSifraJM.Text ds.tables("Artikli").Rows(inc).item(3)= txtPakovanje.Text da.Update(ds, "Artikli") End Sub
188
Za izvrenje ovog koda potreban je Command Builder koji gradi SQL string i smeta se u promenljivu cb. Sa kojim DataAdapter-om (da je naziv adaptera u ovom sluaju) emo raditi navodimo posle kljune rei u zagradama. Uloga Command Builder-a je da omogui auriranje podataka sa vrednostima koji su smeteni u Dataset-u. O tome je ve bilo rei da je to privremena tabela u koju se smetaju podaci, tako da korisnik ne moe direktno da pristupi podacima. Kada nastane promena u Dataset+u to treba preneti i u tabelu u kojoj su smeteni podaci. DataAdapter e ostvariti kontakt sa bazom podataka i pomou Command Builder-a e aurirati podatke. Korisniku pored auriranja treba omoguiti i da doda novi podatak u bazu. Na dugme btnUnos unosimo programski kod kojim samo briemo sadraj tekstualnih polja, a pri emu istovremeno iskljuujemo ostale dugmie:
btnCommit.Enabled = True btnUnos.Enabled = False btnUpdate.Enabled = False btnBrisanje.Enabled = False txtNazivArtikal.Clear() txtSifraJM.Clear() txtPakovanje.Clear()
Da bi ovo radilo ispravno prilikom pokretanja aplikacije postavljamo svojstvo Enabled na False dugmeta btnCommit u prozoru svojstava. Kada kliknemo na dugme za dodavanje podataka, dugme btnCommit e biti iskljueno. Da bi ponovo bilo aktivno ovo dugme, a pri emu se deaktiviraju ostali, treba da dodamo sledei kod na dugme btnClear:
btnCommit.Enabled = False btnUnos.Enabled = True btnUpdate.Enabled = True btnBrisanje.Enabled = True inc=inc-1 Navigacija()
189
Dodavanje novog podataka u bazu podataka vriemo pomou dugmeta btnCommit dodavanjem sledeeg koda:
If inc <> -1 Then Dim cb As New OleDb.OleDbCommandBuilder(da) Dim dsNewRow As DataRowe dsNewRow =ds.Tables(Artikli).NewRow() dsNewRow.Item(NazivArtikal)=txtNazivArtikla.Text dsNewRow.Item(SifraJM)=txtSifraJM.Text dsNewRow.Item(Pakovanje)=txtPakovanje.Text dsNewRow =ds.Tables(Artikli).Rows.Add(dsNewRows) da.Update(ds,Artikli) btnCommit.Enabled = False btnUnos.Enabled = True btnUpdate.Enabled = True btnBrisanje.Enabled = True End If
U nastavku objasniemo ta ovi kodovi znae. Prvo postavljamo pitanje da li je podatak ispravan ako nije, promenljiva inc e biti -1. U suprotnom realizovae se navedeni kod. Promenljiva dsNewRow slui za dodavanje novog reda u Dataset-u i tipa je DataRow. Nakon toga saoptavamo da emo dodati novi red i to metodom NewRow(). Podaci koje treba uneti su u poljima za prihvatanje teksta (TextBox). U sledeem redu poziva se metod Add za dodavanje novog reda u Dataset-u iz promenljive dsNewRow. Nakon toga pomou metode Update auriramo podatak. Sada je jo ostalo da se kreira kod za dugme btnBrisanje kojim emo brisati podatke iz baze. Kod koji treba uneti glasi ovako:
Dim cb As New OleDb.OleDbCommandBuilder(da) ds.Tables(Artikli).Rows(inc).Delete() Maxrows= Maxrows-1
190
Podrobno objanjenje je nepotrebno jer smo se susreli ve sa ovim kodovima. Jedino treba istai da se ovde koristi metod Delete za brisanje podataka. Do sada izloeno u ovom poglavlju pokazuje da se za kreiranje aplikacije za neku realnu primenu zahteva upotreba klasa, kontrola metode i svojstava, ali i rad sa bazama podataka. Ovde je samo demonstrirano na veoma jednostavnom primeru kako se izgrauje jedna potpuna aplikacija.
Literatura
1. Grupa autora: od poetka Visual Basic .NET,CET, Beograd,2002 2. Spenser K., Eberhard T., Alexsander J.: Izrada viekratno upotrebljivih komponenti Visual Basic .NET, CET, Beograd,2003 3. Riordna R.: ADO.NET Korak po korak, CET, Beograd,2002 4. erniek I.: Projektovanje algoritama, TF M. Pupin-Via kola za organizaciju i informatiku Novi Sad, 1995 5. erniek I.: Programiranje, TF M. Pupin-Via kola za organizaciju i informatiku Novi Sad, 1994 6. msdn.microsft.com 7. www.wikipedia.org 8. www.objc.toodarkpark.net 9. www.homeandlearn.co.uk 10. www.pluto.szikszi .hu 11. www.mathworld.wolfram.com 12. www.linuxo.org 13. www.owlnet.rice.edu 14. www.codeproject.com 15. www.starvbdotnet.com
Impresum