195

objektno orijentisano programiranje

Embed Size (px)

Citation preview

Page 1: objektno orijentisano programiranje
Page 2: objektno orijentisano programiranje
Page 3: objektno orijentisano programiranje

Marta Ambrozi

OBJEKTNO ORIJENTISANO PROGRAMIRANJE

Novi Sad

2009.

Page 4: objektno orijentisano programiranje
Page 5: objektno orijentisano programiranje

SADRžAJ

SADRŽAJ 5

Predgovor 9

UVOD 11

1. UKRATKO O NASTANKU VISUAL BASIC.NET-A 15

2. RAZVOJNO OKRUŽENJE VISUAL BASIC.NET-A 17

2.1 Linija menija 19

2.2 Paleta sa alatkama (Toolbar) 20

2.3 Kutija sa alatkama (Toolbox) 20

2. 4 Prozor svojstava 25

2.5 Još neki prozori u VB.NET-u... 27

3. FUNKCIONISANJE RAČUNARA 29

3.1 Uloga računara u poslovanju 34

3. 2 Rešavanje problema bez ograničenja 36

3. 3 Rešavanje problema sa ograničenjima 47

4. LOGIČKE OPERACIJE 57

4.1 Osnovne logičke operacije 57

4.2 Složeni iskazi 58

4. 4 Primena logičkih operatora u oblasti kompjutera 63

4. 4. 1 Logička operacija konjukcija 67

4.1.2 Logička operacija disjunkcija 69

4.4.3 Logička operacija ”isključivo ili” 72

4. 4. 4 Složeni iskazi u računarskoj obradi 75

4. 5 Operatori u Visual Basic-u 80

4.6 Petlje i upravljačke strukture 86

Page 6: objektno orijentisano programiranje

VI

4. 6.1 Struktura For...Next 87

4. 6. 2 Struktura Do/Loopl 88

4. 6. 3 Struktura If/Then/Else 91

4. 6. 4 Struktura Select 95

5. ELEMENTI PROGRAMSKIH BLOKOVA 101

5.1 Tipovi podataka 102

5.2 Promenljive 103

5.3 Konstante 106

5. 4 Komentari 108

5. 5 Prazan prostor 109

5. 6 Rad sa brojevima 109

5. 7 Rad sa stringovima 115

5. 8 Povezivanje (konkatenacija)� 116

5. 9 Rad sa Datumima 122

6. OBJEKTNO ORIJENTISANO PROGRAMIRANJE 125

6. 1 Osvrt na MICROSOFT.NET FRAMEWORK 126

6.2 Objekti 129

6. 3 Enkapsulacija 132

6. 4 Događaji 133

6.5 Apstrakcija objekata:VIDLJIVOST 134

6. 6 Klase objekata 134

6. 6. 1 Izgradnja klasa 136

6. 6.2 Mogućnost ponovnog korišćenja koda 139

6. 7 Funkcije (Potprogrami, procedure , podrutine)� 140

6. 7. 1 Sintaksa procedure Sub 141

6. 7. 2 Pozivanje procedure Sub 142

Page 7: objektno orijentisano programiranje

VII

6. 7. 3 Funkcijske procedure 144

6. 7. 4 Nazivi funkcija 145

6. 7. 5 Analiza primene parametara u procedurama 146

6. 8 Nasleđivanje 148

6. 9 Polimorfizam 150

6. 10 Programska naredba u Visual Basic-u 150

7. RAD SA PODACIMA 153

7. 1 Vektori 153

7. 2 Matrice 154

7. 3 Nizovi u visual basic.Net-u 155

7. 4 Sortiranje i pretraga nizova 159

7. 5 Strukture 160

7. 6 Kolekcije 164

7. 6.1 Brisanje stavki sa liste 166

7. 6. 2 Listanje i prikaz stavki u nizu 169

7. 7 Dinamički niz 170

7. 8 Višedimenzionalni niz 172

8. RAD SA BAZAMA PODATAKA U VISUAL BASIC.NET-U 177

8. 2 Povezivanje aplikacije sa bazom podataka 178

8. 2 Dodavanje kontrole na formu aplikacije 182

8. 3 Dodavanje kontrola za navigaciju sa podacima 183

LITERATURA 191

Page 8: objektno orijentisano programiranje
Page 9: objektno orijentisano programiranje

PREDGOvOR

Programiranje, kao veština izrade aplikacije, zahteva poznavanje elementarnog znanja, dobrog logičkog razmišljanja sa primesama kreativnosti. Savremeni alati za izradu aplikativnih softvera su se razvili do tolike mere da omogućuju razvoj veoma kompleksnih informacionih sistema zasnovanih na najnovijim računarskim tehnologijama. Ispratiti tu široku oblast sa stručnog aspekta zahteva ipak sistematično savlađivanje programerskih metodologija, koncepata informacionih sistema ali i alata.

Postoji određena 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 određeno znanje.

U okviru predmeta Programiranja na smeru menadžera poslovne informatike Fakulteta za menadžment izučava se način 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 logičke aspekte razmišljanja, kao neophodne podloge za razvoj programerskog razmišljanja.

Sa ovog aspekta mogu se zaokružiti dve velike celine knjige. Prvi deo odnosi se na elementarna znanja koja su potrebna jednom programeru bez obzira na programski alat. Pošto većina knjige se bavi principom programiranja pomoću nekog savremenog softverskog alata i često je zapostavljeno ono što je osnovno u ovoj oblasti. Od te osnove ne možemo pobeći, bez obzira koliko je tehnika uznapredovala. Još uvek računar funkcioniše sa ”starim, dobrim” nulama i jedinicama i na potpuno istoj logici. Ono što je toliko odskočilo u razvoju savremenih softverskih alata je njena lakša primena pri razvoju aplikacije.

Drugi deo knjige je isključivo usredsređen na objektno orijentisani princip građenja aplikacije. Izložena je osnovna koncepcija objektne orijentisanosti. Za savlađivanje ove koncepcije u knjizi se demonstriraju i konkretni primeri i to pomoću alata koji je potpuno objektno orijentisan – Visual Basic.NET.

Cilj je da studenti ovladaju ovom veštinom, a da na osnovu stečenog znanja se mogu dalje razvijati i u druge sfere informatike. S obzirom da knjiga sadrži i osnovnu programersku metodologiju, a ne samo izlaganje

Page 10: objektno orijentisano programiranje

Objektno orijentisano programiranjeX

upotrebe komponenata alata, mogu ga koristiti i oni koji su van ovih nastavnih okvira.

Naposletku želim da se zahvalim svima koji su doprineli i omogućili da se ova knjiga objavi, ali i onima koji su dali podršku svemu tome.

Page 11: objektno orijentisano programiranje

UvOD

Iako razvoj i primena savremenih računarskih tehnologija nema duboke istorijske korene, ipak je to oblast koja beleži najbrže i naj drastičnije promene poslednjih decenija. Pojava personalnih računara i revolucionarni korak načinjen Microsoft-ovim Windows okruženjem, omogućili su masovnu primenu računara, ujedno približavajući ga korisniku. Evidentno je da su računari svugde oko nas: na poslu, u školi, kod kuće itd. Prodrli su u sve sfere našeg života, gde je intelektualni rad čoveka pogodniji putem računara. Dugotrajni i zamorni poslovi polako padaju u zaborav, a poslovni procesi postaju brži.

Da bi računar mogao da izvede određeni posao mora se ”obučiti” za to. To je mašina, veštačka tvorevina, koja ne poseduje sopstveni intelekt. Računaru je potrebno saopštiti kako i šta će da radi, što se odvija putem kreiranog programa. Računari, kada rešavaju postavljene zadatke, izvršavaju programe pisane za tu namenu.

U savremenim trendovima izučavanja procesa programiranja često se postavlja pitanje kojoj oblasti pripada programiranje: da li je to oblast čistog inženjerstva zasnovanog isključivo na strogim naučnim principima, ili je to možda samo veština kojom su sposobni da vladaju pojedinci – a možda se može svrstati u umetnost.

Sve ove tri oblasti su važne i ne isključuju jedna drugu. Programiranje nije veština koju poseduju samo neki talentovani pojedinci sa darom za identifikovanje i rešavanje problema. Programiranje se može savladati i naučiti. Naravno, potrebno je posedovati i kreativni duh za izradu programa, nešto veštine ali i savladati metodologiju programiranja zasnovanu na

Page 12: objektno orijentisano programiranje

Objektno orijentisano programiranje12

naučnim principima. Svrsi shodno je uvažavati stečena znanja i iskustva iz ove oblasti, koja izviru iz određenih zakonitosti u vidu ograničenja, kriterijuma i mogućnosti izbora.

Rešavanje nekog problema nije stihijski. Ne radi se metodom pokušaja i pogreške, već je potrebno primeniti određenu ustanovljenu metodologiju kreiranja programa.

Prema tome možemo jednostavno postaviti definiciju:

Programiranje je kreativan postupak izrade programa. Smatra se da je to veština čiju osnovu čini stvaranje i izrada algoritama pri čemu se koriste programski jezici.

Poći na intelektualni put, kao što je programiranje, zahteva formiranje mentalne mape, slično kao kada se odlučimo otići na neko egzotično putovanje. Primena određene metodologije i sistemskog pristupa u rešavanju problema dovodi do adekvatnih rezultata. Cilj je da se eliminiše neizvesnost u pronalaženju rešenja. To znači da je rešenje elegantno, pregledno i sigurno se pronalazi. Čak se pri tome pokazuje i određena sigurnost u proceni vremena izrade.

Postupak kreiranja programskog rešenja obuhvata nekoliko faza:

■ analizu problema na konceptualnom nivou:

▪ definisanje i opis problema

▪ određivanje skupa ulaznih i izlaznih podataka

▪ izrada formalne i neformalne specifikacije

▪ predviđanje potrebnih instrukcija za rešavanje problema na apstraktnom nivou

■ plan izrade programa:

▪ plan realizacije na osnovu specifikacije

▪ saopštavanje rešenja računaru – kodiranje i unos u računar,

■ testiranje programa,

■ eksploataciju programa i

■ dokumentovanje programa.

Page 13: objektno orijentisano programiranje

Objektno orijentisano programiranje 13

Analizom problema formira se idejno rešenje na konceptualnom nivou. Jednostavno rečeno utvrđuje 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 uvažavanje određenih pravila – sintakse programskog jezika (gramatiku - jezika). Da bismo konkretizovali naše rešenje postavljenog zadatka potrebno je vladati i nekim određenim alatom. Jedan od pogodnih jezika za upoznavanja izrade programa je Visual Basic.NET. Relativno je lako za učenje i primenu, pa će ovde, osim logike i tehnike, objektno orijentisano programiranje biti upotrebljeno za konkretno savlađivanje veštine kreiranja softverskog rešenja.

Završni deo postupka programiranja zahteva proveru izvođenja zadatih instrukcija. Puštanjem u probni rad – kompajliranjem programskog koda - utvrđujemo da li taj program radi po našim očekivanjima. U slučaju neočekivanog ponašanja potrebno je izvršiti korekciju programskih instrukcija. Inače, ako zadovoljava naša očekivanja i svrsi shodno obavlja postavljeni zadatak, program se može pustiti u rad u realnom okruženju tj. preći na njegovu konkretnu eksploataciju.

Page 14: objektno orijentisano programiranje
Page 15: objektno orijentisano programiranje

1. UKRATKO O NASTANKU vISUAL BASIC.NET-A

Prethodnik Visual Basic.Net-a, Visual Basic 6.0 spadao je u grupu brzih razvojnih aplikacija i bazirao se na izvođenju događaja. Može se reći da je VB.Net naslednik Visual Basic-a 6.0., čiji su osnovni elementi i koncepti preuzeti i znatno izmenjeni.

Put razvoja ovog alata sledi u kratkim crtama.

Uvođenjem Windows okruženja 1991. godine nastaju drastične promene u programiranju. Kreiranjem korisničkog interfejsa (engl. user interface)� postaje jednostavnije, bez kompleksnih kodova. Do tada programeri su morali biti veoma dobro obučeni za programski jezik C++ i biti upoznati sa osnovnim blokovima gradnje samog sistema Windows.

Druga važna činjenica koja je dovela do prekretnice u programiranju pored Windows okruženja je pojava Microsoft Word-a i Excel-a. Oni su pružali sasvim nove mogućnosti. Korisniku su na raspolaganju palete sa alatkama. Osim toga, ovi alati podržavaju istovremeno izvršavanje više aplikacija, a unutar glavnog prozora se može koristiti više prozora. Tada nastaje ideja da se ovi elementi ugrade i u programske jezike, čime bi se olakšalo i brže bi se stvarale aplikacije.

Treba istaći da ”drevne” programerske tehnike tj. način i logika razmišljanja ipak ostaju osnova kreiranja programa, promene se pokazuju u pojednostavljenu alata za kreiranje programa.

Page 16: objektno orijentisano programiranje

Objektno orijentisano programiranje16

Ono što je Windows okruženje 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 izvršavaju generisanjem događaja. Primer jednog od takvih događaja je pritisak tastera miša, pri čemu će se izvršiti neki događaj, realizovati neka akcija. Kakvu akciju će događaj izvršiti zavisi od unetog programskog koda. To može biti izlazak iz programa, otvaranje nekog dokumenta i slično.

Od prvih verzija Visual Basic-a prevaljen je put, u kome je Microsoft neumorno radio na usavršavanju ovog alata, konačno dostižući do potpuno orijentisanog objekta.

Pre nego što pristupimo savlađivanju osnovne metodologije programiranja biće nekoliko reči o integrisanom razvojnom okruženju Visual Basic-a, ali prevashodno osvrnućemo se i na digitalni računar kao sredstvo rada, na njegove elemente i funkcionisanje.

Page 17: objektno orijentisano programiranje

2. RAZvOJNO OKRUžENJE vISUAL BASIC.NET-A

Konkurencija na tržištu softverskih rešenja je nezaobilazna čak i po pitanju razvoja programa. Pogotovu je to izraženo kada se radi o softverskim aplikacijama za velike organizacione sisteme. Sredstva koja omogućuju veću brzinu, ujedno ne gubeći na kvalitetu izrade sveobuhvatnih poslovnih rešenja, su savremena integrisana razvojna okruženja. Pružaju fleksibilnost kreiranja programskog rešenja, što je podloga agilnosti u prilagođavanju novim mogućnostima.

Integrisano razvojno okruženje (integrated development environment – IDE) predstavlja delimično automatizovanu softversku aplikaciju koja značajno olakšava razvoj programskih rešenja. Obično obuhvata editor izvornog koda za pisanje programskih kodova, kompajler i interpretator za prevod izvornog programa u binarni, mašinski oblik, program za pronalaženje grešaka (debugger)� i niz drugih alata. Primeri integrisanog razvojnog okruženja su Visual Studio, Delphi, JBuilder, FrontPage and DreamWeaver

Ovde ćemo se više osvrnuti na razvojno okruženje koji je Microsoft-ov proizvod: Visual Studio.NET. Prvi pokušaj ove kompanije u stvaranju programskog okvira nije se mogao pohvaliti integrisanošću, jer je obuhvatao samo skup nepovezanih softverskih alata i uslužnih programa. Određeni stepen integrisanosti alata i uslužnih programa načinjen je kasnije, razvojem Visual Studija 6.0, sa ciljem da se obezbedi jedan izvor i okvir za razne programerske potrebe. To znači da mogu podjednako služiti programerima za razvoj Web aplikacija, programerima za razvoj samostalnih aplikacija

Page 18: objektno orijentisano programiranje

Objektno orijentisano programiranje18

ili celom timu za izradu velikih strateških softverskih aplikacija na nivou organizacije. Takođe sadrži alate za razvoj multimedijskih sadržaja.

Sa Visual Studio.NET-om načinjen je još jedan korak unapređenja ovog okvira, tako da se radi o potpuno Integrisanom Razvojnom okruženju. Konkretno sadrži Visual Basic, Visual C++, Visual Java#, Visual C# i razne druge zajedničke alatke npr. Visual Studio Solution.

Pokretanjem Visual Studio.NET-a otvoriće se prozor na kom se pojavljuje Integrisano Razvojno okruženje (IDE)� sa startnom stranom (Start Page)�. Pokretanjem novog projekta otvara vam se mogućnost biranja alata sa kojim ćete raditi Visual Basic.NET, Visual C#, Visual Java # itd.

Na slici 2–1 prikazana je početna strana (Start Page)� za Microsoft Visual Basic 2005 Express Edition, alat pomoću koga će se učiti programiranje, a ima velike sličnosti sa verzijom VB.Net 2003 .

Slika 2-1: Prikaz početne strane (Start Page)�

Page 19: objektno orijentisano programiranje

Objektno orijentisano programiranje 19

Novi projekat se pokreće odabirom i aktiviranjem dugmeta Create Project ili otvaranjem neke druge postojeće 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 sadrži. Na njoj se nalazi sledeće:

■ Liniju menija

■ Paletu sa alatkama (Toolbar)�

■ Kutiju sa alatkama (Toolbox)�

■ Solution Explorer

2.1 Linija menija

Veoma je slična drugim menijima Microsoft-ovih proizvoda. U njemu se nalaze sledeće komponente (slika 2–2)�:

Slika 2-2: Prikaz linije menija

▪ File: programi za otvaranje i zatvaranje datoteka i projekata. A kao i u svim Microsoft-ovim alatima ovde se može izaći iz aplikacije

▪ Edit: komande za isecanje, kopiranje, umetanje teksta i objekata, Find, Replace itd.

▪ View: pomaže u podešavanju radne površine. Omogućuje brz pristup prozorima kao što su: Solution Explorer, Database Explorer Toolbox, prozor svojstava (Properties)� i slično

▪ Project: za dodavanje raznih drugih datoteka u aplikacije

▪ Build: za pokretanje aplikacije bez korišćenja okruženja Visual Basic.NET-a

▪ Debug: za otkrivanje grešaka i za pokretanje/zaustavljanje rada aplikacije pri njegovom izvršavanju.

▪ Data: daje mogućnost da dođemo do informacija iz baze podataka. Nije aktivan u toku pisanja koda.

Page 20: objektno orijentisano programiranje

Objektno orijentisano programiranje20

▪ Format: pomoću njega dovodimo u red niz neurednih prozora. Služi za nameštanje prozora onako kako će se pojaviti kod korisnika.

▪ Tools: obuhvata komande za konfigurisanje Visual Studia.NET IDE-a, ali sadrži i komande za veze sa drugim spoljašnjim alatima koji su možda instalirani.

▪ Window: Služi za upravljanje prozorima

▪ Community: Omogućena je komunikacija sa drugim programerima i korisnicima VB.Net programskog alata za razmenu mišljenja, za pomoć i slično

▪ Help

2.2 Paleta sa alatkama (Toolbar)

Na njoj se nalaze najčešće korišćene funkcije (slika 2–2)�. Sadrži niz paleta alata, od kojih možemo odabrati one koje najčešće upotrebljavamo u meniju.

2.3 Kutija sa alatkama (Toolbox)

Visual Basic.Net je programski jezik koji se zasniva na programiranju pomoću komponenata. Komponente se zovu kontrole. Visual Basic u sebi sadrži unutrašnje kontrole (engl. intrinsic controls)�, koje su smeštene u kutiji sa alatkama (Toolbox)�. To je standardni skup kontrola koje su ugrađene u okruženje Visual Basic.Net-a. Oni se automatski pojavljuju, kreiranjem novog projekta. (Pokretanjem Veiw>Toolbox-a ili postoji i mogućnost otvaranja sa Ctrl+Alt+X).

Slika 2–3 prikazuje listu standardnih kontrola grupisanih po određenoj logičnoj celini kao što su naj uobičajeno korišćene kontrole (engl. Common Controls)�, kontrole za kreiranje i rad sa menijima, podacima itd. Visual Basic.NET ima mnoge kontrole ali u nastavku su date samo neke od njih sa kratkim objašnjenjem.

Page 21: objektno orijentisano programiranje

Objektno orijentisano programiranje 21

Slika 2-3: Lista standardnih kontrola u VB.Net-u

1. Pokazivač (Pointer)

▪ podrazumevana alatka u Toolbox-u

2. Dugme (Button)

▪ Jedna od najpopularnijih kontrola VB-Net-a. Koristi se za izvršavanje nekih događaja kao što je npr. dodavanje podataka u bazu podataka, izvršavanje aritmetičkih izračunavanja ili nekih složenijih obrada podataka i slično. Iako ova kontrola može pokrenuti različite događaje, kada se doda

Page 22: objektno orijentisano programiranje

Objektno orijentisano programiranje22

na formu aplikacije i pokrene editor za kod pojavljuje se podrazumevani događaj ”Click” (slika 2-4)

Slika 2-4: Ilustracija programskog koda za događaj ”Click” dugmeta na formi

3. Polje za potvrdu (CheckBox)

▪ Pruža mogućnost da se na određeno pitanje odgovori sa YES (da) ili NO (ne).

4. Polje za tekst (TextBox)

▪ Druga najčešće korišćena kontrola je polje za tekst. Služi za rad sa promenljivama. Može se koristiti i za tekst sa mnogo redova. Ako je tekst toliko dugačak da prevazilazi veličinu okvira TextBox-a, onda okvir može imati sopstvene trake za pomeranje.

▪ Uneti podaci (tekst) u ovom polju mogu da se obrađuju, za razliku od Label-a.

5. Kontrole za prikaz teksta (Label)

▪ Pomoću ove kontrole prikazujemo tekst u našoj aplikaciji. Slično ovoj kontroli je i LabelLink koji daje mogućnost primene hiperlinka.

▪ Služi za označavanje kontrole i drugih delova obrasca. One samo saopštavaju nešto, ali tekst unet u njih se ne obrađuje.

6. Lista (ListBox)

▪ To je lista stavki unutar okvira.

7. Polje za grafiku (PictureBox)

▪ Ova kontrola ima više mogućnosti: ona može služiti kao kontejner (slično frame-u), zatim reaguje na određen skup događaja i konačno takođe podržava različite formate slike.

Page 23: objektno orijentisano programiranje

Objektno orijentisano programiranje 23

▪ Pogodna je kada se radi o aplikacijama koje koriste programski interfejs (API).

8. Okvir (GroupBox)

▪ Upotrebljava se za razvrstavanje kontrola u logičke grupe, čime one postaju preglednije. Istovremeno omogućuju 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 slično starim radio-aparatima u kolima. Samo pritisnuto dugme može biti aktivno. Pritiskom na drugo dugme, trenutno aktivno dugme se isključuje i uključuje se odabrano dugme. Znači u pritisnutom stanju može biti samo jedno dugme.

▪ Druga bitna stvar je da na obrascu može postojati više grupa ovih kontrola. U tom slučaju oni se razdvajaju okvirima. Tada je moguće odabrati opciju i u jednoj i u drugoj grupi.

10. Padajuća lista (ComboBox)

▪ Ova kontrola objedinjuje funkcije kontrole ListBox i TextBox. Korisnik ga upotrebljava tako što iz padajuće liste bira podatak (stavku), koji se zatim unosi u okvir za tekst.

▪ Postoje tri različita stila ComboBox-a:

▪ Obična padajuća (Dropdown list) – korisnik može da bira sa liste ali ne može da unosi tekst za tu namenjenu kontrolu,

▪ Jednostavna kombinovana lista (Simple Combo) – korisnik može da upiše svoj izbor, ali je lista i dalje otvorena.

▪ Kombinovana padajuća lista (Dropdown Combo) – Kombinuje padajuću listu i unos teksta svog izbora.

11. Horizontalna (HScrollBar) i

12. Vertikalna traka za pomeranje (VScrollBar)

▪ Koriste se za pomeranja po kontroli, i to najčešće u okviru za tekst.

13. Povezivanje sa podacima (Data)

▪ Omogućava pristup bazama podataka

Page 24: objektno orijentisano programiranje

Objektno orijentisano programiranje24

Na slici 2–5 prikazane su ostale grupe kontrole od kojih su istaknute grupe:

■ kontrole za rad sa menijima

■ kontrole za rad sa podacima i

■ kontrole za rad sa dijalozima - (služe za otvaranje, čuvanje datoteka i sl.)

Slika 2-5: Prikaz ostalih grupa kontrola kao što su kontrole za rad sa menijima, podacima, komponentama, dijalozima itd.

Page 25: objektno orijentisano programiranje

Objektno orijentisano programiranje 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, ponuđena nam je aplikacija, naziv (engl. Name)�, – u ovom slučaju je WindowsApplication1 – koji se može promeniti po želji.

Slika 2-6: Pokretanje novog projekta za izradu nove aplikacije

Nakon određivanja naziva aplikacije i pritiskom na dugme OK otvara se sledeći prozor (slika 2–7)� gde je posebno naznačen Prozor svojstva - Properties.

2. 4 Prozor svojstava

Kontrole pri kreiranju programa u Visual Basic-u predstavljaju objekte. Svaki objekat, slično bilo kojem objektu realnog sveta, poseduje određene karakteristike, osobine.

Page 26: objektno orijentisano programiranje

Objektno orijentisano programiranje26

Primera radi osobine cveća su boja, veličina, oblik, vrsta i slično. Pored toga, svaki objekat može da ispoljava određeno ponašanje, 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 pažnju ćemo usmeriti najviše na svojstva, jer je neophodno da ih pažljivo pregledamo i odredimo kod svakog objekta. Podešavanje se vrši u prozoru svojstva (properties)� što se nalazi na desnoj strani ekrana i izgleda kao na slici 2 – 8.

Slika 2-7: Polazni ekran za kreiranje nove aplikacije

Page 27: objektno orijentisano programiranje

Objektno orijentisano programiranje 27

Slika 2-8: Prozor svojstva

2.5 Još neki prozori u vB.NET-u...

Database Explorer – za upravljanje bazama podataka kako lokalno tako i u mreži. Tu se vrši konekcija sa bazom podataka.

Prozor Design – ili kako ga inače nazivaju dizajner služi za izradu korisničkog interfejsa. Kao što je već rečeno interfejs se crta. Osim toga tu se ispituje i kod.

Solution Explore – prozor koji prikazuje hijerarhijski pregled rešenja programa. (Sadrži: projekte, kodove i ono što rešava neke probleme)�.

Prozor svojstva (properties)� sadrži kategorije kao što su :

▪ Pristupačnost (Accessibility)�▪ Izgled (Appearance)�▪ Ponašanje (Behavior)�▪ Data▪ Dizajniranje (Design)�

▪ Itd.

Page 28: objektno orijentisano programiranje

Objektno orijentisano programiranje28

Slika 2-9: Prozori koji se mogu koristiti u radu sa VB.Net-om

Prozor task list – pokazuje grešku prilikom pokretanja koda. U ovom prozoru se bira stavka koja dovodi do reda koda gde se nalazi greška.

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 manipulišu sa njima čineći jednu celinu. Svojstva su podaci a metode funkcije odnosno pod programi.

Prozor Output javlja se kao rezultat pokretanja koda.

Dynamic Help (dinamička pomoć)�- nalazi se u krajnjem donjem desnom uglu celokupnog obrasca koji može pružiti pomoć u toku izrade aplikacije. Odabiranjem bilo čega u IDE, može se videti lista stavki koji se odnose na odabrani objekat.

Page 29: objektno orijentisano programiranje

3. FUNKCIONISANJE RAČUNARA

Digitalni računar predstavlja univerzalno sredstvo pomoću kojeg rešavamo niz različitih zadataka. Metoda koja dovodi do efektivnog rešenja postavljenog zadatka zasniva se na izvođenju skupa logičkih, aritmetičkih i transportnih operacija. Rezultat ove metode je opšte rešenje, koji sadrži niz koraka, a na osnovu čega se pristupa rešavanju zadatka pomoću računara.

Zahteva se da postupak pronalaženja opšteg rešenja, koji ima sledeće osobine:

uopštenost – što se odnosi na mogućnost rešavanja bilo kog zadatka;

određenost – zadatak mora biti razumljiv i tačan, bez mogućnosti da se proizvoljno tumači i

rezultativnost – pod kojim se podrazumeva da dovodi do rešenja nakon određenog broja koraka.

Postupci koji se odlikuju ovim osobinama se zovu ALGORITMI. Od njih nastaju programi, kada se pojedini koraci postupka rešavanja raščlanjenih na elementarna dejstva predstave, pomoću raspoloživog skupa instrukcija (osnovnih operacija)� računara.

Osim ovih osobina algoritmi treba da zadovolje sledeće uslove:

▪ Definisanost - svaka operacija ili pravilo mora imati definisano i samo jedno značenje, tj. rezultat svake operacije mora biti jasno definisan.

osobine

Page 30: objektno orijentisano programiranje

Objektno orijentisano programiranje30

▪ Diskretnost - jedan algoritamski korak se obavlja u jednom vremenskom intervalu.

▪ Konačnost – mora da postoji određen, konačan, broj koraka algoritma.

▪ Efikasnost - određena je brzinom i jednostavnošću algoritma.

▪ Elementarnost – jednostavna pravila za dobijanje izlaznih veličina na osnovu ulaznih veličina, u svakom algoritamskom koraku.

▪ Usmerenost – za svaki skup ulaznih veličina postoji definisan rezultat

▪ Univerzalnost – različiti ulazni podaci dovode do odgovarajućih rezultata.

▪ Elastičnost – primenljivost algoritma na različite varijante izvornih podataka.

Programi mogu biti jednostavni ili složeni u zavisnosti od broja osnovnih operacija. Bitno je istaći da savremeni računari mogu izvesti i do nekoliko milijardi operacija u sekundi. Termini koji se koristi za osnovne operacije u sferi programiranja su instrukcija, nalog, naredba i slično.

Da bismo stvorili sliku o tome kako će računar da izvede neki zadatak, koji smo mi prethodno rešili i saopštili računaru upotrebom programskog alata ”provirićemo” u samo funkcionisanje računara.

Na slici 3–1 prikazan je model uprošćenog računarskog sistema sa svojim komponentama. To su centralni deo računara, ulazno/izlazne jedinice, a koji su povezani putem kanala.

Centralni deo računara sadrži:

1. jedinicu za obradu podataka,

2. operativnu memoriju,

3. upravljačku jedinicu,

4. operativni sistem,

Zatim slede komponente:

5. ulazno/izlazne jedinice,

Page 31: objektno orijentisano programiranje

Objektno orijentisano programiranje 31

6. periferne memorije i

7. kanali za komunikaciju

Na slici 3–1 su prikazani i tokovi podataka , programske instrukcije i instrukcije u obliku upravljačkih intervencija (3).

Slika 3-1: Model uprošćenog računarskog sistema

Kao što se i iz samog naziva ove komponente primećuje jedinica za obradu podataka, koja ima zadataka da obradi tj. da izvrši aritmetičke operacije kao što su sabiranje (+)�, oduzimanje (-)� itd. U nekim slučajevima upoređuje veličine odnosno izvodi logičke operacije (<, >, =,..)�. Ove operacije vrše se na podacima koji mogu po prirodi porekla biti izvorni ili među rezultati. Kada je naređena operacija izvršena dobija se konačni rezultat.

U računaru se pored izvornih podataka, među rezultata i rezultata, čuvaju programi u operativnoj memoriji. Treba istaći da je model računarskog sistema uprošćen tako, da ga može na najpovoljniji način šematski prikazati.

Program je skup instrukcija, razumljivih računaru, putem kojih se rešavaju postavljeni problemi.

Page 32: objektno orijentisano programiranje

Objektno orijentisano programiranje32

Uloga upravljačke jedinice da interpretira – tumači – instrukcije programa. Nakon toga generiše upravljačke impulse koji se prosleđuju određenim komponentama nalažući im da izvrše određene zadatke. Pored toga upravljačka jedinica nadzire i usaglašava rad celokupnog sistema.

Kanali odnosno procesori za komunikaciju obezbeđuju komunikaciju između perifernih jedinca i centralnog dela računara. Isto tako i omogućuju razmenu podataka i instrukcija operativne memorije sa ostalim delovima. Ova komponenta upravlja radom perifernih jedinica, tako što osnovne upravljačke naredbe dobija od upravljačke jedinice, dok ostalim delom upravlja sam.

Ovi kanali su prisutni samo kod velikih savremenih računara. Kod manjih računara ovu ulogu preuzima upravljačka jedinica. To znači da prilikom upravljanja radom i razmenom podataka perifernih memorija upravljačka jedinica je potpuno posvećena tom zadatku i nije u mogućnosti da obrađuje podatke u centralnom procesoru.

Putem ulazno/izlazne jedinice se saopštavaju podaci i programi za njihovo izvršenje kao i dobijeni rezultat.

I poslednja komponenta modela računarskog sistema prikazanog na slici 3–1 je periferna memorija. Ona je neophodna u slučaju kada nema mesta u operativnoj memoriji ili ako želimo da sačuvamo podatke na posebnim medijima, pa se podaci memorišu u cilju zaštite. U nekim slučajevima pohranjuju se čak i programi eksterne memorijske jedinice.

Prema tome, računari su takve mašine koji se mogu primeniti u razne svrhe. Pomoću njih se mogu rešavati razni problemi bilo da su matematičkog, poslovnog ili nekog drugog porekla. Prilikom izvršavanja programskih instrukcija oni obrađuju podatke, što ilustruje šema na slici 3–2.

Sa aspekta materijalnosti činioci računarskog sistema se slično dele na materijalne i nematerijalne.

Materijalni činioci se zovu hardverom i obuhvataju sve fizičke komponente sistema:

■ Operativnu memoriju■ Centralni procesor (aritmetička-logička i upravljačka jedinica)�■ Periferne jedinice

▪ procesor za komunikaciju

Page 33: objektno orijentisano programiranje

Objektno orijentisano programiranje 33

▪ ulazno /izlazne jedinice

▪ periferne memorije.

U nematerijalne – tj. softver, spadaju:

■ bazični i programi koji rešavaju konkretne zadatke■ postupci i pravila (celokupno znanje računara)�.

Slika 3-2: Ilustracija funkcionisanja računara

Posebno treba skrenuti pažnju da tokom razvoja novih tehnologija, aritmetičko-logička jedinica i upravljačka jedinica zajedno predstavljaju centralni procesor računara (mikroprocesor)�. Njihovo funkcionisanje je sinhrono. Aritmetičko-logička jedinica je zadužena za izvođenje aritmetičkih i logičkih operacija, dok upravljačka jedinica određuje koje će operacije realizovati aritmetičko-logičku jedinicu. Takođe nalaže i nad kojim podacima će te operacije biti izvršene, pri čemu interpretira zadate instrukcije. Instrukcije (programi)� i početni podaci saopštavaju se računaru putem tastature i miša ili iz nekog drugog izvora podataka (ULAZNA JEDINICA)� i smeštaju se u MEMORIJSKU JEDINICU računara.

Memorija se sastoji od niza numerisanih ćelija radi pronalaženja pohranjenih informacija. Mesto pohranjenih informacija u memoriji određeno je rednim brojem ćelija ili kako se to u računarskoj terminologiji zove memorijske adrese.

U ćelijama memorije informacije se čuvaju u obliku instrukcija ili podataka. Podaci mogu biti:

Page 34: objektno orijentisano programiranje

Objektno orijentisano programiranje34

■ ulazne veličine,

■ među rezultati (delimično obrađeni podaci) i/ili

■ konačni rezultati.

Izvršavanje instrukcija se ne odvija nasumice. Postoji unapred određeni redosled izvršavanja instrukcija koji je određen programom. Program sadrži sled instrukcija definisan algoritmom.

Instrukciju, upravljačka jedinica, pronalazi po odgovarajućoj adresi, odnosno u ćeliji, gde je bila smeštena. Njen zadatak je da sprovede instrukciju. Nakon interpretacije instrukcije nalaže aritmetičko-logičkoj jedinici da obradi podatke, pri čemu dobijene rezultate upravljačka jedinica smešta u određenu memorijsku ćeliju. Zatim upravljačka jedinica prelazi na interpretiranje druge instrukcije i na njenu realizaciju, pa na treću itd.

Rezultati obrade saopštavaju se krajnjem korisniku putem IZLAZNIH jedinica, u koje spadaju monitor, disketni pogoni, CD/DVD ili štampači.

3.1 Uloga računara u poslovanju

Istorijska razdoblja se mogu deliti u zavisnosti od aspekta posmatranja. Jedna od podela je i u odnosu na ljudske aktivnosti i razvoja sredstva za rad. Razdoblja koja su nastala su: poljoprivredno društvo, nakon čega sledi industrijsko društvo, sa pojavom i primenom parne mašine. Pre nešto oko pola veka načinjen je sledeći revolucionarni korak u razvoju sredstava za rad. Pojavljuje se računar, čijem je rasprostranjenom primenom ljudsko društvo zakoračilo u informatičko doba.

Oruđa za rad nastala su sa ciljem da se olakša čovekov rad. Prema tome i računar je sredstvo za rad isto kao i svaka druga mašina, alat ili uređaj. Slično svim drugim oruđima za rad i on poseduje određene osobine koje treba da pogoduju čoveku kada izvodi određene radnje ili aktivnosti. Uporedo sa tim postoji još i cilj, ili, možemo reći težnja, da se proces rada ubrza i ujedno da se poboljša kvalitet rada.

Sa ovog stanovišta računar poseduje osobine kao što su:

■ velika brzina,■ tačnost,■ sposobnost uvažavanja velikog broja kriterijuma,■ neprekidan rad bez zamora,

Page 35: objektno orijentisano programiranje

Objektno orijentisano programiranje 35

■ izuzetna moć pamćenja,■ objektivnost (radi bez emocija)�.

Kada želimo da koristimo neko sredstvo za rad moramo biti svesni njegovih ograničenja, kao što su fizička, tehnička i eksploatacijska ograničenja. Druga značajna stvar u vezi primene sredstava rada je poznavanje funkcionisanja tog oruđa. Doduše 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 zašto je to potrebno proizilazi od samog načina upotrebe bilo kog aparata. Važno je zbog poznavanja načina aktiviranja i mogućnosti upravljanja oruđem za rad. Sve ovo važi i za računar pošto spada u sredstva za rad.

Računar je mašina čija je svrha da obavi određeni zadatak putem primene i izvršavanja niza instrukcija. U cilju da se u potpunosti iskoristi njegova osnovna osobina – velika brzina – neophodno je odabrati one instrukcije tj, ona upravljačka uputstva, kojima bi se skratilo dugo vreme čekanja prilikom izvršenja. To znači da program koji se izvršava treba da bude razumljivog oblika u računaru. Program nije unapred ugrađen u računar, kao u većini automatizovanih oruđa za rad, već se formira u zavisnosti od poslovnih potreba. On se piše u odgovarajućem programskom jeziku, koji se zatim prevodi na razumljiv oblik računara, mašinski jezik.

Iz ovoga proističe da u primeni računara u prvi plan dolazi njegovo programiranje, a to opet zahteva neka elementarna znanja o računaru.

Kao sredstvo za rad i računar ima svoju svrhu upotrebe. Sa jedne strane čovek kada ga primenjuje želi da proširuje svoju intelektualnu snagu, dok sa druge strane želi da se oslobodi mnogih zamornih i dugotrajnih poslova.

U prethodnom poglavlju je već bilo reči o tome da računar moramo osposobiti, ”naučiti” poslu koji želimo da obavi umesto čoveka. Da bi računar izvršio postavljene zadatke mora postojati niz instrukcija koji će ga navoditi na rešenje. Te instrukcije daje čovek. Znači da čovek sa svojom centralnom ulogom mora sagledati problem, analizirati ga i veoma precizno isplanirati postupak rešavanja. Zatim je potrebno to rešenje pretočiti u niz programskih instrukcija. Sledeći korak je saopštavanje rešenja u obliku programskog koda računaru, koji će doslovce da prati svaku saopštenu instrukciju. Naravno, instrukcije se saopštavaju na odgovarajućem jeziku, odnosno, jeziku koji računar razume. To je veoma važno jer računar

Page 36: objektno orijentisano programiranje

Objektno orijentisano programiranje36

izvodi mašinske instrukcije, a te instrukcije su u binarnom kodu. Računar obrađuje podatke putem nule i jedinica. Ovakav binarni oblik rada je veoma složen za čoveka, pa je rešenje nađeno u korišćenju prevodioca. Tako sada čovek saopštava programske instrukcije na jeziku koji je za njega mnogo bliži, a računar ih ipak obrađuje u binarnom kodu. Ovako opisana obrada podataka izgleda veoma jednostavna, ali u mnogim slučajevima, računar ne dolazi jednim korakom do rešenja. Nekada izvršava veoma složene instrukcije.

Po dosadašnjem objašnjenju videli smo da pri funkcionisanju računarskog sistema nastaju rezultati obrade podataka. Takođe može postojati i među rezultat. On će se obrađivati u kasnijim procesima obrade podataka. Završetkom obrade, rezultati se saopštavaju korisniku.

Iz ovoga sledi da pri pripremi postupka rešavanja nekog problema moramo voditi računa ne samo o samom postupku već i planirati prostor za pohranjivanje podataka (bilo ulaza/izlaza ili među rezultata)�, odnosno projektovati funkcionalno rešenje. Iako ovo izgleda veoma banalno u današnje vreme kada postoje personalni računari sa memorijama reda veličine tera bajta, a kamoli ono što mogu obezbediti umreženi računari, ipak prostorno planiranje memorisanja podataka ima značaja u praksi. Dobro isprojektovan sistem omogućuje bolje performanse, pogotovo kada su u pitanju projektna rešenja za velike sisteme.

3. 2 Rešavanje problema bez ograničenja

Kada se počne sa objašnjenjem šta je programiranje, i kako se pri tome izvršavaju instrukcije najčešće odmah se uranja u savremene pristupe programiranja zaboravljajući neke fundamentalne stvari. To elementarno znanje je ono na koje se grade čak i svi savremeni pristupi. Zato ćemo se radi bolje ilustracije kako računar obrađuje podatke malo vratiti u ”drevna” vremena programiranja. Počećemo od jednostavnog primera.

Sada ćemo računar posmatrati kao jednostavni kalkulator koji treba da izvrši određenu aritmetičku operaciju. Ulazne veličine – brojeve – saopštićemo putem tastature, a rezultat će se pokazati na ekranu.

Analiziraćemo jednostavan problem: sabiranje tri broja.

A+B+C=Z

Za izvođenje operacije sabiranja treba predvideti odgovarajući prostor za brojeve A, B i C. Važno je napomenuti da u mašinskoj obradi

Page 37: objektno orijentisano programiranje

Objektno orijentisano programiranje 37

podataka postoje ograničenja: odjednom se može sabrati samo dva broja tj. argumenta. Znači, imaćemo jedan među rezultat koji može biti:

A+B ili A+C ili B+C

i to u zavisnosti od toga za šta ćemo se odlučiti da bude prvi ulazni element. Dobijeni među rezultat se takođe smešta u operativnu memoriju. On je neophodan za sledeći korak sabiranja. Predviđeni prostor u operativnoj memoriji za među rezultat označićemo sa D.

D=A+B ili D=A+C ili D=B+C

Do sada smo izložili samo matematički postupak, ali za ceo postupak računanja mi moramo saopštiti podatke računaru. Isto tako i on nama mora prikazati rešenje problema. To se postiže davanjem određenih instrukcija.

REZULTAT predviđanja rešavanja problema: kako će se izvršiti komunikacija računara i čoveka, zovemo PLAN OPERATIVNE MEMORIJE. Njime predviđamo kako će se podaci saopštiti računaru, na koji način će se rezultat prikazati na ekranu, kako će se zadatak izvršiti u računaru, koji su prostori potrebni za izvorne podatke, među rezultate i rezultate.

Slika 3-3. ilustruje plan operativne memorije za sabiranje tri broja.

Kada postoji već plan operativne memorije možemo i da počnemo sa rešavanjem zadatog problema.

Slika 3-3.: Plan operativne memorije za sabiranje tri broja

Page 38: objektno orijentisano programiranje

Objektno orijentisano programiranje38

Sledeće pitanje je koje predznanje treba da imamo o samom zadatku. Prvenstveno treba da smo upoznati sa kojim brojevima će se izvršiti aritmetička operacija. To je važno razjasniti, jer računar izvodi operacije sa konkretnim brojevima, a mi to moramo saopštiti računaru, tj. da ih definišemo. Postupak saopštavanja se zove davanje instrukcija računaru, što je označeno na slici 3–3 sa strelicama.

Za konkretni primer imamo tri instrukcije za čitanje podataka:

Ovo su izvorni podaci, odnosno konkretni brojevi koje želimo da saberemo, a koje učitavanjem smeštamo u operativnu memoriju. Sada nailazimo na problem sabiranja.

To možemo izvesti na više načina: Z=(A+B)+C

Z=(B+C)+A

Z=(A+C)+BShodno tome i instrukcije mogu činiti tri različita skupa:

Page 39: objektno orijentisano programiranje

Objektno orijentisano programiranje 39

Slika 3–4 prikazuje ostala dva skupa mogućih instrukcija.

Slika 3-4.: Prikaz mogućih instrukcija u planu operativne memorije

Page 40: objektno orijentisano programiranje

Objektno orijentisano programiranje40

Kada rešavamo problem mi razmatramo sva moguća rešenja od kojih ćemo odabrati najpogodniji za primenu u računaru. U ovom slučaju nije toliko važno koji ćemo skup instrukcija da odaberemo, jer je način rešavanja isti, pa ćemo odabrati instrukcije d i e. Kada izvršimo instrukciju sabiranja d stvara se među rezultat koji smeštamo u predviđenu lokaciju D. Zatim sabiramo među rezultat i broj C, što se izvodi instrukcijom e i smešta se u polje Z.

Sada još ostaje da se dobijeni rezultat saopšti krajnjem korisniku, što je na slici 3–4 označeno sa instrukcijom j.

Ako bolje pogledamo sliku 3–4 vidimo da odabrane instrukcije {a, b, c, d, e, j} ne možemo izvesti bilo kako. Tu postoji određeni redosled. Između instrukcija se javlja zavisnost, jer računar, kako smo već spomenuli, obavlja aritmetičku operaciju sa konkretnim brojevima. Da bi polje D (među rezultat)� mogao da se sabere sa trećim brojem, neophodno je da se saberu prethodna dva broja. Ako je polje D prazno računar nema šta da doda broju C. Znači, instrukcija d ne može biti izvršena pre nego što su izvršene instrukcije a i b. Slično je i sa instrukcijom e , pa i sa instrukcijom j. Za izvršenje instrukcije e neophodno je izvršiti instrukciju čitanja trećeg broja i sabrati sa među rezultatom.

Zaključak je da među instrukcijama postoji uslovljenost. Iako na ovom primeru to deluje prilično lako, kod složenih problema uočavanje uslovljenosti je nekad presudno za uspešno izvođenje programskih instrukcija.

Uslovljenost među instrukcijama možemo prikazati grafičkim 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 među njima.

Usmereni graf našeg odabranog skupa instrukcija za sabiranje tri broja, prezentovan je grafički na slici 3–5.

Slika 3-5.: Graf uslovljenosti sabiranja tri broja

Page 41: objektno orijentisano programiranje

Objektno orijentisano programiranje 41

Simboli koji se koriste za prikazivanje grafa su sledeći:

Verovatno će se svako zapitati zašto je potreban graf uslovljenosti instrukcija kada se jednostavno može napisati programska instrukcija. Zato što sa jedne strane sintetizuje sve zavisnosti, pa se oni putem crteža lako uočavaju. Sa druge strane pomoću njega uočavamo skup mogućih instrukcija. Ako ne postoji međuzavisnost instrukcija tada je potpuno svejedno kojim redosledom ćemo te instrukcije izvršiti, kao na primer kod unosa izvornih podataka (učitavanje 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 mogućih skupova instrukcija za učitavanje brojeva. Kod instrukcija c i d takođe nema međuzavisnosti. Tako dobijamo ukupno osam mogućih redosleda izvođenja instrukcija:

Page 42: objektno orijentisano programiranje

Objektno orijentisano programiranje42

Slika 3-6.: prikaz mogućih redosleda izvođenja instrukcija

Kada imamo uvid u mogućnosti izvođenja instrukcija mi raspolažemo različitim mogućnostima rešavanja nekog problema. Na nama ostaje da odaberemo najadekvatniji skup instrukcija. Kako ćemo to uraditi? Kako ćemo znati da smo odabrali baš najbolje rešenje?

Postoje različiti kriterijumi odabira rešenja i oni zavise od postavljenih zahteva. Može biti u pitanju npr. brzina izvođenja. Međutim, nekada nam neće ni biti važno koje rešenje ćemo odabrati. U tom slučaju je jedino važno da se zadatak obavi.

I na kraju odabiranjem adekvatnog rešenja dolazimo do GRAFA ALGORITMA, prikazanog na slici 3–7. Pri tome ostala rešenja nas više ne interesuju.

Pošto je ovde izneta samo osnovna logika razmišljanja kreiranja rešenja ali ne i realizacija programskog rešenja, sada ćemo pogledati kako tu logiku i da primenimo praktičnim radom.

Page 43: objektno orijentisano programiranje

Objektno orijentisano programiranje 43

Slika 3-7.: Graf algoritma sabiranja tri broja

Pokretanjem novog projekta započinjemo kreiranje programa. Pojavljuje nam se prazna forma (Form1)� kao što je to prikazano na slici 3–8. Na formu se smeštaju sledeće 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 izvršavanje operacije sabiranja

U kontrolu za prikaz teksta unosi se obaveštenje za korisnika šta treba da uradi i šta je ishod operacije sabiranja. Ispod toga su smeštena 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.

Page 44: objektno orijentisano programiranje

Objektno orijentisano programiranje44

Slika 3-8: Program za sabiranje tri broja

Kontrole predstavljaju objekte. Obzirom da se radi o objektno orijentisanom programiranju sledi podešavanje njihovih svojstava u prozoru svojstava.

Tabela 3–1. sadrži spisak svojstva koja su podešena za kontrole kao što je naziv, tekst i font.

Tabela 3-1: Svojstava kontrola programa za sabiranje tri broja

Kontrole Naziv Name) Tekst (Text) Font (font)

Textbox1Textbox2Textbox3Textbox4

txtA txtB txtC txtZ

Prazno Microsoft Sans Serif; 12pt

Label1 Unesite tri broja Microsoft Sans Serif; 12pt; style=Bold, Italic

Label2 Rezultat Microsoft Sans Serif; 12pt; style=Bold, Italic

Button btnSabiranje Operacija sabi-ranja

Microsoft Sans Serif; 12pt; style=Bold, Italic

Kada su podešena svojstva, pristupa se pisanju koda. Kao što je već rečeno šta treba naš program da uradi, to mi treba da mu ”saopštimo” i to putem programskih instrukcija. U Visual Basic.Net-u to ostvarujemo tako što dvo-klikom na odabranu kontrolu otvorimo editor koda. U konkretnom slučaju to je dugme na formi (slika 3–8)�, i zadajemo sledeće programske instrukcije:

Page 45: objektno orijentisano programiranje

Objektno orijentisano programiranje 45

U skladu sa karakteristikama programskog alata Visual Basic.Net-a prilikom otvaranja editora za kod pojavljuje se editor oblika prikazan na slici 3–9.

Slika 3-9: Editor koda

Page 46: objektno orijentisano programiranje

Objektno orijentisano programiranje46

U delu gde se nalazi pod programska procedura Private Sub i End Sub unosimo način kako ćemo sabrati tri broja, i to za slučaj kada se oni unose u pojedinačna polja.

Private Sub..... End Sub

Pošto je u ovom alatu omogućeno da se izvrši cela operacija sabiranja i jednom koraku i to:

A+B+C=Z

onda to možemo i zadati tako.

Ali ako pogledamo uočićemo da postoji još niz programskih redova osim navedenog za sabiranje. Da bi to bilo omogućeno, prvo moramo predvideti prostor za unos promenljive tj. polja: txtA, txtB, txtC i txtZ (slika 3–10)�. Zatim da bi računar mogao da radi dalje sa njima pošto 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 smeštanje promenljivih za dalji rad.

Najpre se deklarišu promenljive, a zatim se navodi programski kod za preuzimanje vrednosti:

Dim A As Single

A = txtA.Text

Kada su brojevi sabrani dodeljuje se vrednost smeštena u Z polju pod nazivom txtZ.

Page 47: objektno orijentisano programiranje

Objektno orijentisano programiranje 47

Slika 3-10: Prostor za unos brojeva i određivanje naziva polja

3. 3 Rešavanje problema sa ograničenjima

U prethodnom delu razmatrali smo problem sabiranja tri broja kada nije postojalo nikakvo memorijsko ograničenje prostora. Za svaku instrukciju imali smo po jedno polje obezbeđeno.

Isti ovaj problem sada ćemo rešavati kada nam je maksimalno ograničen prostor za podatke. U ovom slučaju na raspolaganju su nam samo dva memorijska polja U i S.

Mi takođe imamo da učitamo tri broja (A,B,C)� čijim sabiranjem se stvara među rezultat i konačni rezultat. Broj među rezultat nam je zasad nepoznat.

Pre nego što pristupimo rešavanju neophodno je istaći da se memorijsko polje svaki put prazni pri prihvatanju nove vrednosti. To znači da ako rezultat sada smeštamo u neko polje ono će izgubiti prethodnu vrednost i biće „preklopljen” vrednošću koja je poslednja uneta.

Page 48: objektno orijentisano programiranje

Objektno orijentisano programiranje48

Onda ćemo odabrati jedno polje za unos podataka, recimo U. Među rezultat i rezultat smestićemo u polje S. Neka A ima vrednost 6 (A=6)�. Tada učitavanjem broja A u računar polje U će imati vrednost 6. Postavlja se pitanje šta dalje? Mi nemamo više polja da učitamo i drugi broj, broj B=2, i nemamo treće polje za smeštanje među rezultata. Na raspolaganju nam je samo još polje S. Sada nam ostaje mogućnost da ovo rešimo uvođenjem aritmetičke operacije – u ovom primeru sabiranje – pre svakog narednog čitanja podatka. Tada polje S dobija vrednost 6 i možemo učitati 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 uvođenjem sabiranja ona dobija vrednost 8.

Način izvođenja ovih operacija se može se napisati kao:

S=S+U

a šematski prikaz sabiranja u slučaju ograničenja ilustruje slika 3–11.

Slika 3-11.: Ilustracija sabiranja tri broja u slučaju memorijskog ograničenja

Ovo matematički nije ispravno. Znak jednakosti ”=” ovde ne znači jednako, već predstavlja instrukciju smeštanja neke vrednosti u S.

Matematička formula ovog problema bi bila:

Sn+1=Sn+U

gde je S niz. Sn je opšti član, a Sn+1 je naredni član niza. Matematički gledano naredni član niza jednak je zbiru prethodnog člana niza.

Plan operativne memorije za izvođenje računske operacije sabiranja tri broja sa maksimalnim ograničenjem (dve lokacije)� se može prikazati kao na slici 3–12 na kome postoji niz instrukcija:

Page 49: objektno orijentisano programiranje

Objektno orijentisano programiranje 49

Vrednost polja S neophodno je postaviti na nulu pre izvođenja aritmetičke operacije, zbog toga što se konačni rezultat ne prazni iz tog polja. U slučaju da ponovo želimo da saberemo tri broja, sa sasvim novim vrednostima – sabraće se i prethodno dobijeni konačni rezultat. Dodeljivanjem početne vrednosti polju S nulira se njegov zbir na početku sledećeg sabiranja.

Sada kada je polju S dodeljena vrednost nula može da se pristupi unosu izvornih podataka. Instrukcijom b smešta se prvi broj u lokaciju U. Naredna instrukcija koja sledi je c, putem kojeg se izvodi aritmetička operacija sabiranja. Ako je prvi broj bio 2 onda vrednost S postaje takođe 2.

Slika 3-12.: Instrukcije za sabiranje tri broja sa maksimalnim memorijskim ograničenjem

Page 50: objektno orijentisano programiranje

Objektno orijentisano programiranje50

Sledeći broj koji treba sabrati je 6. Instrukcijom d se taj broj unosi u lokaciju U. Sabiranje vrednosti polja U sa prethodnom vrednošću 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 počinje instrukcijom f za smeštanje poslednjeg broja u lokaciju U. Izvršenjem instrukcije g formira se konačni rezultat sabiranja. Pošto S sadrži prethodno dobijeni među rezultat 8, na taj broj se dodaje 15, pa je S=8+15=23.

Konačni rezultat se saopštava korisniku instrukcijom h koja daje naredbu za ispisivanje na ekranu.

Grafički prikaz međuzavisnosti skupa instrukcija {a,b,c,d,e,f,g,h} je dat na slici 3–13, gde instrukcije zaokružene isprekidanim linijama predstavljaju vezane instrukcije. Što znači da posle instrukcije f mora nastupiti izvršenje instrukcija g.

Graf uslovljenosti prikazuje opšte rešenje zadatog problema, gde je broj konkretnih rešenja šest, i to u zavisnosti od redosleda instrukcija koji su označeni brojevima na slici 3–14.

Slika 3-13.: Graf uslovljenosti instrukcija sa maksimalnim memorijskim ograničenjem

Page 51: objektno orijentisano programiranje

Objektno orijentisano programiranje 51

Slika 3-14.: Prikaz mogućih rešenja sabiranja tri broja sa memorijskim ograničenjem

Iako algoritam za sabiranje tri broja (slika 3–15)� prikazuje prvu varijantu konkretnog rešenja neophodno je skrenuti pažnju na to, da ovaj algoritam važi za bilo koju varijantu.

Page 52: objektno orijentisano programiranje

Objektno orijentisano programiranje52

Slika 3-15.: Graf algoritma za sabiranje tri broja u slučaju memorijskog ograničenja

Ako pažljivije analiziramo graf algoritma na slici 3–15, možemo uočiti još neke detalje. Upadljivo je ponavljanje instrukcija {c,e,g} i instrukcija {b,d,f}. Računar svaki put ponavlja instrukciju čitanja i sabiranja, čime nastaju određena pravila u izvođenju operacije sabiranja.

Kao zaključak možemo reći da početni uslovi postavljaju ograničenja u rešavanju zadatih problema. Upoređenjem rešenja sabiranja tri broja na dva načina – sa i bez prostornog ograničenja primećuje se da se broj lokacija smanjilo sa 5 na 2. Usled toga broj rešenja se takođe smanjilo sa 24 na 6, ali se broj instrukcija povećalo sa 6 na 8.

Ako sada pristupimo rešavanju zadatka pomoću Visual Basic.Net-a, može se uočiti da rešenje odudara od konvencionalnog proceduralnog pisanja programa u samoj realizaciji programskih kodova, ali ne i od logike rešavanja zadatka. Na slici 3–16 prikazano je rešenje pomoću alata za objektno orijentisano programiranje.

Page 53: objektno orijentisano programiranje

Objektno orijentisano programiranje 53

Slika 3-16.: Sabiranje brojeva sa ograničenim prostorom za smeštanje brojeva

Predviđena su dva tekstualna polja: jedan za unos brojeva i jedan za prikaz rezultata. Na formi su uneta i dva dugmeta: ”Clear” – za početak novog sabiranja i dugme ”Sabiranje” za realizaciju aritmetičke operacije. Osim toga forma sadrži i nekoliko kontrola za prikaz teksta (Label)�, pošto moramo korisniku naznačiti i šta treba gde da uradi i gde će se prikazati rezultat. Na formi se u ovom rešenju nalaze još dve labele (slika 3–17)� da bi se videlo šta se dešava u pozadini, odnosno da se vizuelno prikaže kako računar obavlja proces sabiranja.

Slika 3-17: Kontrola (Label)� koja prikazuje smeštanje vrednosti u S

Page 54: objektno orijentisano programiranje

Objektno orijentisano programiranje54

Nakon kreiranja forme odnosno izrade početnog ekrana za unos i predviđenog načina prikazivanja rezultata obrade, slede instrukcije za obradu podataka. Dvo-klikom na dugme Sabiranje ulazimo u editor za kod i u delu Public definišemo promenljive. Zašto ne delu pod programa i zašto na celokupnom nivou, biće 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 izvršavanje događaja vezanih za dugme ”Sabiranje”, dodaju se sledeći programski kodovi prikazani u označenom delu:

Private Sub btnSabiranje_Click(ByVal sender As System._

Object, ByVal e As System.EventArgs) Handles_

btnSabiranje.Click

’za prikaz sadržaja polja U U = txtU.Text

’za prikaz sadržaja 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

Page 55: objektno orijentisano programiranje

Objektno orijentisano programiranje 55

Na formu je dodato još jedno dugme (”Clear”)� koji ima ulogu da briše sadržaj polja i da postavlja S na nulu, a to se postiže sledećim 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 rešavanju problema posredstvom računara moramo poštovati. Postoje određena pravila kojih se moramo pridržavati bez obzira na alat kojim baratom.

1. Prvo pravilo koje ne smemo da izgubimo iz vida jeste da računar obrađuje samo konkretne podatke.

2. Oni se mogu saopštiti na više načina računaru, što se opet reflektuje na izdavanje instrukcija (Pogotovu je to olakšano sa savremenim pristupima u projektovanju programskih rešenja)�.

3. Rešavanje problema i pisanje rezultata je moguće samo ako se obezbedi i prostor za smeštanje izvornih podataka, među rezultate i rezultate u operativnoj memoriji.

4. U slučaju aritmetičkih operacija moguće je dobijene rezultate smestiti i u prostor predviđen za izvorne podatke.

5. Iz ovoga sledi da čitanjem više podataka u isto polje, prethodni sadržaj tog polja se poništava.

6. I na kraju neophodno je saopštiti rezultat korisniku.

Page 56: objektno orijentisano programiranje

Objektno orijentisano programiranje56

Postoje i niz drugih pravila o kojima moramo voditi računa, ali smo ovde istakli samo neke elementarne. Navedeni su samo neki od naj značajnijih pravila koji se poštuju nezavisno do programskog jezika.

Drugo, pri rešavanju nekog problema preporučljivo je sagledati problem i rešavati ga sistematično i postupno.

Osvrnućemo se ponovo na prethodna dva primera. Šta je bilo zajedničko kod njihovih rešavanja? Prvenstveno zahtevali smo neki odgovor od računara. Zahtevali smo neko rešenje. On može da nam da odgovor samo ako smo obezbedili uslove za to. Mi treba da planiramo na osnovu izvornih podataka i naših zahteva i naše poruke, očekivane rezultate, rešenja. U tu svrhu izrađuje se PLAN ULAZA i PLAN IZLAZA.

Planiranjem ulaza i izlaza u suštini mi definišemo kako će se odvijati komunikacija između računara i korisnika.

Sledeće što je potrebno izraditi je plan operativne memorije: za prihvatanje ulaznih podataka, memorisanje među rezultata i pripremu rezultata. Ovaj plan zavisi od uslova i ograničenja koji izvire iz postojećeg problema, pa planovi mogu biti različiti.

Kada smo obezbedili polazne osnove prelazimo na izradu pregleda potrebnih instrukcija, što nam omogućava ispitivanje zavisnosti među instrukcijama. Oni se zatim prikazuju grafom uslovljenosti instrukcija. To predstavlja opšte rešenje datog problema pri konkretnim uslovima i konkretnim ograničenjima. Kao što smo uočili, kod rešavanja jednostavnih problema nije bila sporna uslovljenost i zadatak se mogao rešiti veoma lako, ali kod veoma složenih zadataka često je problem tok odvijanja programa.

Određivanjem niza akcija stvaramo tok izvršavanja i time smo stvorili mogućnost da po odgovarajućim kriterijumima biramo jedno konkretno rešenje i da ga saopštimo računaru. Graf algoritma je prikaz konkretnog rešenja.

Page 57: objektno orijentisano programiranje

4. LOGIČKE OPERACIJE

Računar je mašina sposobna da memoriše i izvršava niz instrukcija, što ga čini svestranijim od običnog kalkulatora. Izrazita razlika u odnosu na kalkulator, koji izvodi samo aritmetičke operacije održava se i u mogućnosti zaključivanja. Stremljenje ka oponašanju čovekovog razmišljanje dovodi do primene logičkih operacija. Putem logičkih operatora stvara se mogućnost modelovanja i formalizovanja procesa mišljenja.

Logika je nauka koja se bavi procesom mišljenja. To je nauka koja stavlja težište na mišljenje kao sredstvo vrednovanja, saznanja objektivnog sveta. U osnovi bavi se procesom mišljenja: koji su razlozi nekog problema, koji su zaključci i na osnovu kojih argumenata (iskaza)� su ti zaključci nastali. Logičkim procesom mišljenja mi dolazimo do činjenica i istine. U suštini mi tada formiramo sud o nečemu.

Logika kao nauka ispituje forme mišljenja, njihove odnose i logičke operacije. Prema tome, osnovni elementi logike su POJAM i SUD, a proces mišljenja SKUP LOGIČKIH OPERACIJA SA NJIMA.

Logičke operacije i iskazi mogu biti osnovni i složeni.

4.1 Osnovne logičke operacije

U svakodnevnom životu mi stvaramo mišljenje o nekome ili nečemu. Mi u suštini donosimo sud, tvrdimo da li je nešto istinito ili ne. Naš iskaz, tvrdnja, sud ne mora biti istinit, nikom osim nas.

Page 58: objektno orijentisano programiranje

Objektno orijentisano programiranje58

Sada možemo reći šta je tvrdnja, sud ili iskaz. To je takva izrečena ili pisana rečenica koja može biti istinita ili neistinita, ali ne može biti istovremeno oba.

Oznake logičkih vrednosti iskaza su:

I ili 1 za istinu i

N ili 0 za neistinu.

U daljem tekstu analiziraćemo neke iskaze u cilju boljeg upoznavanja sa osnovama logike, pri čemu ćemo odrediti njihovu logičku 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 snažan.

Navedeni iskazi su osnovni logički iskazi sa sledećim logičkim vrednostima: A je istinit, B, C i E iskazi su neistiniti. U slučaju E i F ne možemo da utvrdimo logičku vrednost sve dok ne identifikujemo o kome je konkretno reč. Ne možemo reći da li je devojka lepa ili da li je mladić snažan, jer ne znamo tačno o kojoj devojci, odnosno o kom mladiću je reč.

4.2 Složeni iskazi

Iskazi koje smo dosada naveli su elementarni ili osnovni iskazi. Ali u realnom životi nije sve tako jednostavno. Mi u svakodnevnom životu uglavnom koristimo složenije iskaze, sastavljenih od elementarnih.

Kako oni nastaju? Pa jednostavno povezivanjem osnovnih iskaza putem logičkih operatora. Ovi operatori su:

konjukcija (i)�

disjunkcija (ili)� i

negacija (ne)�.

Page 59: objektno orijentisano programiranje

Objektno orijentisano programiranje 59

Složeni iskazi takođe mogu biti istiniti ili neistiniti, ali je sada pitanje koja je njihova logička vrednost. Pošto su sačinjene od osnovnih logičkih iskaza njihove logičke vrednosti zavise od logičkih vrednosti osnovnih iskaza i primenjenih operatora.

Znači, složeni iskaz je funkcija osnovnih logičkih iskaza.

Na datom primeru osnovnih iskaza pokušaćemo da formiramo složene iskaze:

G: Pada kiša.

H: Danas je neradni dan.

J: Danas je važna sportska utakmica.

K: Danas je interesantna pozorišna predstava.

Sada ćemo skovati složene iskaze. Kako će se oni formirati? Prvenstveno zavisiće od toga da li smo ljubitelji sportskih aktivnosti ili kulturno umetničkih programa. Šta ćemo odabrati od navedenih mogućnosti zavisi i od toga da li je lep dan i da nemamo nikakve obaveze.

Onda bi se naše ponašanje moglo formulisati na sledeći način:

X1 – ako pada kiša i imam slobodan dan i postoji važna sportska

utakmica, idem u sportsku halu.

X2 – ako ne pada kiša idem u šetnju.

X3 – ako je danas sportska utakmica ili pozorišna predstava idem da

gledam bar jednu od njih.

X4 – u slučaju da ne pada kiša i imam slobodan dan idem u prirodu.

Vidimo da je složeni iskaz X1 sastavljen od osnovnih iskaza G, H i J, koji su povezani sa reči ”i”. Ovo je logička operacija koju zovemo konjukcija.

Page 60: objektno orijentisano programiranje

Objektno orijentisano programiranje60

Da bi složeni iskaz bio istinit, pošto se radi o konjukciji, sva tri osnovna iskaza moraju biti istinita.

Naziv konjukcije potiče iz latinske reči conjungere što znači spajati. Oznaka za konjukciju je ∧ , pa složeni iskaz može da se formuliše i na sledeći način:

( )JHGXX ,,11 =

JHGX ∧∧=1

U slučaju složenog iskaza X2 imamo samo jedan logički operator – negaciju – i jedan osnovni iskaz. To je iskaz G.

Simbol za negaciju je ¬ , pa je logička vrednost X2 – istinita ako je osnovni iskaz G neistinit.

GX ¬=2

U slučaju iskaza X3 imamo dva osnovna iskaza J i K koji su povezani sa reči ”ili”. Uslov da bi složeni iskaz bio istinit dovoljno je da jedan od osnovnih iskaza bude istinit. Logička operacija u ovom slučaju je disjunkcija (disjungere – lat. razdvajati)� i označava se sa ∨ .

Iskaz X3 možemo napisati i na sledeći način:

KJX ∨=3

Page 61: objektno orijentisano programiranje

Objektno orijentisano programiranje 61

Ako primenimo slična pravila prethodno obrazloženih složenih iskaza, tada X4 iskaz sastoji se od dva logička operatora (negacije i konjukcije)� i dva osnovna iskaza.

KGX ∨¬=4

Tabele istinitosti za logičke operacije

Tabele istinitosti su matematičke tabele primenjene u oblasti logike pomoću kojih se utvrđuju vrednosti logičkih iskaza. One daju listu svih mogućih logičkih vrednosti složenih iskaza.

Tabele istinitosti za različite logičke operacije objasni ćemo tako što ćemo odabrati dva osnovna iskaza A i B, koji sačinjavaju složeni iskaz. Složeni iskaz je funkcija osnovnih logičkih iskaza A i B i označićemo ga sa X:

( )BAXX ,=

Svaki od ova dva osnovna iskaza može imati samo dve logičke vrednosti: istinito ili neistinito. Broj kombinacije njihovih logičkih vrednosti je četiri:

1. kombinacija A istina i B istina2. kombinacija A istina i B neistina3. kombinacija A neistina i B istina4. kombinacija A neistina i B neistina

U zavisnosti od toga koji je operator primenjen u složenoj funkciji, razlikujemo tabele istinitosti za logički operator konjukciju, disjunkciju i negaciju.

Dalje ćemo videti koje su vrednosti složenog iskaza kada je u pitanju logički operator konjukcija.

Logička vrednost složenog iskaza je istinita samo ako su oba osnovna iskaza istinita. Složeni iskaz je neistinit u ostalim slučajevima, što je prikazuje i tabela 4–1 .

Page 62: objektno orijentisano programiranje

Objektno orijentisano programiranje62

A B X1 1 11 0 00 1 00 0 0

Tabela 4-1: Tabela istinitosti logičke funkcije KONJUKCIJE

U slučaju da se radi o logičkoj funkciji disjunkcije (tabela 4–2)� logička vrednost složenog iskaza će biti istinita ako je bar jedan osnovni iskaz istinit. Složeni iskaz X je pogrešan samo u slučaju kada su oba elementarna iskaza pogrešni.

A B X1 1 11 0 10 1 10 0 0

Tabela 4-2: Tabela istinitosti logičke funkcije DISJUNKCIJE

Ako je u pitanju negacija funkcije X, tada je reč o jednočlanoj funkciji čija vrednost zavisi od vrednosti tog člana (tabela 4–3 )�.

Ako je A istinit onda je X neistinit i obrnuto..

A X1 00 1

Tabela 4-3: Tabela istinitosti logičke funkcije NEGACIJE

Do sada su opisane osnovne logičke operacije. Pored njih interesantna je još i logička operacija ”isključivo ili”.

Page 63: objektno orijentisano programiranje

Objektno orijentisano programiranje 63

Za ovu operaciju je karakteristično da je logička vrednost složenog iskaza istinita samo ako je jedan od osnovnih iskaza istinit. U slučaju da su oba iskaza nesitinita ili istinita rezultat ove funkcije je neistinit (tabela 4–4)�.

A B X1 1 01 0 10 1 10 0 0

Tabela 4-4: Tabela istinitosti logičke funkcije ISKLJUČIVO ILI

4. 4 Primena logičkih operatora u oblasti kompjutera

Do sada smo se upoznali sa iskazima, logičkim operacijama i kako se dolazi do logičke vrednosti složenih iskaza. Sada već znamo šta su tabele istinitosti i kako se transformišu ulazne logičke vrednosti u odnosu na primenjeni logički operator.

Logički operatori se koriste u matematici kod teorije skupova, Boolovoj algebri, ali su našli mesto i u praktičnoj primeni. Komparacija primene nekih logičkih operatora prikazuje slika 4–1.

Slika 4-1: Primena logičkih operatora

Page 64: objektno orijentisano programiranje

Objektno orijentisano programiranje64

Ovoj oblasti posvetili smo posebnu pažnju zbog toga što čini osnovu savremenih digitalnih računara. Ne samo slova, reči već i blok tekstova koji se memorišu u brojčanom, digitalnom obliku. Funkcionisanje digitalnog računara zasnovano je na binarnoj obradi podataka, gde može postojati samo dva stanja: namagnetisano i ne namagnetisano, analogno prekidačima električnih kola – uključeno/isključeno.

Radi ilustracije uloge logičkih operacija u svakodnevnom životu uzet je primer električnih kola. Jednostavne logičke operacije konjukcija, disjunkcija i negacija se mogu uporediti sa električnim kolima.

Prvo u nizu je prikaz redno povezanih prekidača u eletričnom kolu, što se može prezentovati pomoću logičke operacije konjukcija. Sijalica koja se nalazi u ovom električnom kolu svetleće samo ako su oba prekidača zatvorena.

Logičku operaciju disjunkciju možemo prikazati pomoću paralelno vezanih električnih prekidača. U tom slučaju sijalica će da svetli ako je bar jedan od prekidača zatvoren.

Pretposlednji u nizu je negacija, koja može biti istinita samo ako je A neistinito. Sijalica će da svetli ako prekidač nije aktiviran.

Pored osnovnih logičkih operatora postoje još i složeni logički operatori. Ovde je posebno istaknut složeni logički operator ”isključivo ili” zbog veoma česte primene u računarskoj oblasti. Nastaje kombinacijom osnovnih logičkih operatora konjukcije, disjunkcije i negacije. Prikazano električnim kolom to bi bilo paralelno vezana redna kola.

Prikazani primeri odnosili su se na formiranje složenih iskaza putem logičkih operacija, ali sada je pitanje kako računar izvodi logičke 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.

Page 65: objektno orijentisano programiranje

Objektno orijentisano programiranje 65

Što se tiče druge vrste iskaza one mogu biti između dva broja A i B:

BABABABABABA

≤≥<>≠=

Sada ćemo odabrati jedan od osnovnih iskaza, recimo BA ≥ . Ovaj iskaz može imati dve logičke vrednosti ”1” ili ”0”. Vrednost ”1” znači da je relacija ispunjena, a ”0” da nije.

Kako se to pokazuje u odnosu na brojčane vrednosti? Uzmimo na primer da je 7=A i da je 3=B i primenimo relaciju recimo BA > .

Tada je logička vrednost za iskaz 37 > istinita tj. ”1’ . U slučaju da je 7=A i da je B=15 relacija nije ispunjena i vrednost će biti ”0”.

Ispitivanje logičke vrednosti nekog osnovnog iskaza je prikazan na slici 4–2 .

Slika 4-2: Grafički prikaz instrukcije za ispitivanje istinitosti logičkih vrednosti iskaza

Kako se to odvija putem računarske obrade pokazaćemo na sledećem primeru.

Data su dva podatka A i B koji imaju brojčane vrednosti. Potrebno je odrediti koji je veći broj, odnosno kreirati algoritam za štampanje većeg broja od zadatih vrednosti.

(A jednako B)

(A nije jednako B)

(A veće od B)�

(A manje od B)

(A veće ili jednako sa B)�

(A manje ili jednako sa B)

Page 66: objektno orijentisano programiranje

Objektno orijentisano programiranje66

Instrukcije kojima ćemo rešiti zadatak su:

a)� Unos (učitavanje)� podataka A i B

b)� Nalaženje većeg od brojeva A i B

c)� Smeštanje nađenog rešenja u lokaciju za pripremu izlaznih podataka

d)� Štampanje sadržaja lokacije za izlazne podatke.

Problem sa kojim se ovde suočavamo jeste način pronalaženja većeg broja od zadatih brojčanih vrednosti. To se postiže postavljanjem relacije među njima (< , >)�. Odabraćemo sledeću relaciju:

BA >

Relacija je ispunjena ako je A veće od B . U obrnutom slučaju relacija nije ispunjena. Ako je relacija ispunjena, zadatak određivanja većeg od brojeva A i B je rešen i možemo da smestimo u polje MAX vrednost A.

Plan operativne memorije sa potrebnim instrukcijama ilustrovan je na slici 4–3.

Slika 4-3: Plan operativne memorije sa potrebnim instrukcijama

Page 67: objektno orijentisano programiranje

Objektno orijentisano programiranje 67

Slika 4-4.: Graf algoritma za iznalaženje većeg broja

Instrukcije {a, b, c1, c2, d} se mogu prikazati grafom algoritma (slika 4–4)�. Instrukcijom b proverava se logička vrednost unetih brojeva. Nakon toga sledi izvršavanje instrukcije c. Ona se u suštini sastoji od dve grane c1 (grana NE) i c2 (grana DA)�. Koja će se instrukcija od njih izvršiti zavisi od unetih brojčanih vrednosti. Ako je A=3, a B=6 onda će logički iskaz imati vrednost ”neistina” i izvešće se grana ”NE” . U polje MAX upisaće se vrednost 6. U slučaju da su brojčane vrednosti sledeće A=8 i B=4 logički iskaz će biti ”istinit” i realizovaće se grana ”DA”, pa će se u polje MAX preneti vrednost A, odnosno broj 8.

Na ovom jednostavnom primeru upoznali smo se sa načinom ispitivanja logičke vrednosti nekog osnovnog iskaza pomoću računara. U narednom delu upoznaćemo se i sa ispitivanjem logičke vrednosti složenih iskaza.

4. 4. 1 Logička operacija konjukcija

Jedna od značajnih karakteristika računara, koju smo već naveli na početku, je velika brzina rada. Računar u veoma kratkom vremenu može obraditi velike količine podataka. Pomoću računara u mogućnosti smo da ispitamo i logičke vrednosti niza osnovnih ili složenih iskaza.

Sa načinom ispitivanja osnovnih iskaza pomoću računara smo se već upoznali. Ovo stečeno znanje možemo dalje nadgraditi upoznavanjem strukture složenih iskaza.

Jedan od mogućih načina formiranja složenih iskaza je i primena logičke operacije konjukcije.

Page 68: objektno orijentisano programiranje

Objektno orijentisano programiranje68

Za ispitivanje logičke vrednosti složenog iskaza Z poslužiće sledeći primer.

Neka je Z složeni iskaz sačinjen od osnovnih iskaza X i Y koji povezuje logički operator konjukcije.

YXZ ∧=

Osnovni iskazi su sledeći: X: m<17 i Y: n=18 Prethodno smo se već sreli sa tabelama istinitosti logičke funkcija,

gde smo videli da je logička funkcija konjukcija istinita samo u slučaju da su oba osnovna iskaza istinita. Sada je pitanje kako to ispitivanje izvršiti pomoću računara.

Polazeći od toga da složeni iskaz može imati dve logičke vrednosti 1 (istinit)� ili 0 (neistinit)�, naš zadatak je da postavimo takav redosled instrukcija koje dovode do logičke vrednosti 1 složenog iskaza. To znači da i osnovni iskazi moraju imati vrednost 1.

Redosled će biti kao što je to prikazan na slici 4–5. Prvo će se izvršiti instrukcija ispitivanja logičke vrednosti osnovnog iskaza X, a zatim iskaza Y. Ako je X istinit realizuje se grana ”DA” i može uslediti instrukcija ispitivanja logičke vrednosti osnovnog iskaza Y. Ako je logička vrednost Y takođe istinita onda važi da je složeni iskaz istinit.

Jednostavnije, prvi osnovni iskaz se ispituje bezuslovno. Kod ispitivanja logičke vrednosti ostalih osnovnih iskaza postavlja se uslov da je prethodni osnovni iskaz ”istinit”. Karakteristično je da svi iskazi moraju imati logičku vrednost ”istina”.

Slika 4-5: Struktura složenog iskaza pri logičkoj operaciji konjukcije

Page 69: objektno orijentisano programiranje

Objektno orijentisano programiranje 69

Ako imamo složeni iskaz Z koga sačinjava veći broj osnovnih iskaza (X1, X2, X3, X4)

gde je (X1 : m>5, X2 : n>15, X3 : p=18, X4 : q<25)�

4321 XXXXZ ∧∧∧=

imaćemo strukturu prikazanu na slici 4–6.

Slika 4-6: Struktura logičke operacije sa većim brojem osnovnog iskaza

4.1.2 Logička operacija disjunkcija

Drugi način stvaranja složenog iskaza je primena logičkog operatora disjunkcije na osnovne iskaze, pa ćemo u narednom izlaganju da se upoznamo sa ispitivanjem logičke vrednosti ovakvih složenih iskaza putem računara.

Računar uvek ispituje logičku vrednost osnovnih iskaza. Kada se radi o složenim iskazima on izvršava isti postupak: proverava svaki osnovni iskaz pojedinačno. Svaki iskaz može imati jednu logičku vrednost: ili je ”istinit” ili ”neistinit”.

Kada dajemo instrukciju za utvrđivanje logičke vrednosti ne smemo da gubimo iz vida da svaki osnovni iskaz ima jedan ulaz i dva moguća izlaza (grana za logičku vrednost ”istina” i grana za logičku vrednost

Page 70: objektno orijentisano programiranje

Objektno orijentisano programiranje70

”istinit”)�. Ove dve izlazne grane se međusobno isključuju, ili se realizuje jedna ili druga, ali nikada obe istovremeno (slika 4–7)�.

Slika 4-7: Grafički prikaz grananja iskaza u zavisnosti od logičke vrednosti

I u slučaju ispitivanja logičke vrednosti složenih iskaza sastavljenih od osnovnih iskaza logičkim operatorom disjunkcije vodićemo se prema tabeli istinitosti. Davanje instrukcije prikazaćemo na jednom primeru.

Neka je Z složeni iskaz sastavljen od osnovnih iskaza X i Y:

YXZ ∨=

X: m > 25 i Y: n < 18

Z: = (m > 25)� v (n < 18)�

Logička vrednost iskaza Z je ”neistinita” kada su logičke vrednosti osnovnih iskaza ”neistinite” (pogrešne)�. U svim ostalim slučajevima iskaz Z je ”istinit”.

Tada postupka ispitivanja putem računara počinje utvrđivanjem logičke vrednosti prvog osnovnog iskaza. Utvrđivanje logičke vrednosti narednog iskaza sledi samo ako je logička vrednost prethodnog iskaza ”neistinit”. To znači da se ovaj postupak ostvaruje putem grane ”ne” (logičke vrednosti ”neistina”)�, pri čemu struktura složenog iskaza izgleda kao na slici 4–8.

Page 71: objektno orijentisano programiranje

Objektno orijentisano programiranje 71

Slika 4-8: Struktura složenog iskaza pri logičkoj operaciji disjunkcije

Ako je osnovni iskaz X istinit tada po logici sledi da će i složeni iskaz biti istinit.

Shodno tome, da bi složeni iskaz imao istinitu logičku vrednost važno je da bar jedan iskaz bude istinit.

Primera radi slika 17. ilustruje sled instrukcija za logičku funkciju disjunkcije koji je primenjen u složenom iskazu Z. Osnovni iskazi su X1, X2, X3, X4 gde je

(X1 : m>15, X2 : n>35, X3 : p=18, X4 : q<25)�

4321 XXXXZ ∨∨∨=

Slika 4-9: Instrukcije za logičku funkciju disjunkcije sa više osnovnih iskaza

Page 72: objektno orijentisano programiranje

Objektno orijentisano programiranje72

4.4.3 Logička operacija ”isključivo ili”

Pored logičkih operatora konjukcije i disjunkcije složeni iskazi mogu nastati i primenom logičkog operatora ”isključivo ili” (u literaturi često sa oznakom XOR).

Pre nego što objasnimo sled instrukcija za utvrđivanje istinitosti ovakvog složenog iskaza podsetićemo se tabele istinitosti.

Ova logička operacija ima vrednost istina samo ako jedan od osnovnih iskaza je istinit. U slučajevima da su svi osnovni iskazi ”isitniti” ili ”neistiniti” složeni iskaz će imati logičku vrednost ”neistina”.

Shodno tome i postupak utvrđivanja logičke vrednosti složenog iskaza za logičku operaciju isključivo ili putem računara se zasniva na ovom principu.

Prvi korak je davanje instrukcije za ispitivanje istinitosti prvog osnovnog iskaza (X)� . U narednom koraku zadaje se instrukcija ispitivanja logičke vrednosti sledećeg osnovnog iskaza, sa tim da se njegova istinitost ispituje i po grani da i po grani ne.

Prema prikazanoj strukturi složenog iskaza Z na slici 4–10. vidimo da je pozitivan ishod ispitivanja logičke vrednosti složenog iskaza ”istinit” ako je m veće od 25 i ako n nije veće od 30 ili obrnuto.

Z = X + Y

X: m > 25 i Y: n > 30

Slika 4-10: Struktura složenog iskaza pri logičkoj operaciji ”isključivo ili”

Page 73: objektno orijentisano programiranje

Objektno orijentisano programiranje 73

Povezivanje većeg broja osnovnih iskaza putem logičkog operatora ”isključivo ili” prikazuje slika 4–11., gde se složeni iskaz Z sastoji od osnovnih iskaza X1, X2 i X3

Z= X1 + X2 + X3

Slika 4-11: Prikaz kompletne strukture za slučaj sa tri osnovna iskaza

Ovo je kompletna struktura za slučaj sa tri osnovna iskaza koji se odlikuje određenim osobinama:

1. broj potrebnih instrukcija je 7,

2. broj izlaznih grana je 8,

3. broj grana sa ”istinitim” logičkim vrednostima je 3, a sa ”neistinitim” 5 (toliko grana sa istinitim vrednostima koliko ima iskaza)

4. sadrži nepotrebne instrukcije, jer utvrđivanjem logičke vrednosti ”istina” za X1 i X2 nema potrebe za daljim proveravanjem.

Istu ovu strukturu možemo i uprostiti na osnovu osobina strukture (slika 20)�. Takva uprošćena struktura takođe može obezbediti isti efekat.

Kriterijum za postupak uprošćavanja strukture je broj osnovnih iskaza koji sačinjavaju složeni iskaz. Vrednost složenog iskaza će biti ”istinit” samo po putanji gde se u grananjima nalazi samo jedna ”istinita” vrednost. Na slici 4–12 takve putanje su zaokružene.

Page 74: objektno orijentisano programiranje

Objektno orijentisano programiranje74

Slika 4-12.: Uprošćena struktura ”isključivo ili” sa tri osnovna iskaza

Kako izgleda ova logička funkcija pri izvršavanju instrukcija na računaru dočaraćemo slikom 4–13, gde složeni iskaz ima četiri osnovna iskaza.

Slika 4-13.: Struktura ”isključivo ili” sa četiri osnovna iskaza

Page 75: objektno orijentisano programiranje

Objektno orijentisano programiranje 75

4. 4. 4 Složeni iskazi u računarskoj obradi

Retko ćemo se u realnom životu susresti sa tako jednostavnim iskazima isključivo sastavljenih od jedne vrste logičke funkcije. Obično su to problemi koji sadrže razne kombinacije konjukcije, disjunkcije, negacije i logičke funkcije ”isključivo ili”, što se odražava na složenost programa.

Kada rešavamo neki problem putem računara prvo što treba da uradimo je analiza iskaza koji se odnose na dati problem. Analiza nije jednostavna, jer su iskazi obično deskriptivnog oblika. Izraženi su rečenicama. Njima se opisuje šta treba uraditi i koji su zahtevi postavljeni u vezi sa zadatkom. Ovakav oblik obično sadrži veliki broj reči, nekada čak i nepotrebnih. Da bi se izbegle greške u izradi programa takav složeni iskaz se formalizuje.

Iskaz Z je složeni iskaz iz realnog života sastavljen od različitih manje složenih iskaza (Z1, Z2,Z3,Z4,Z5).

Tada se logička funkcija Z može izraziti na sledeći način:

Z = Z (Z1, Z2, Z3, Z4, Z5)

a logičke funkcije koji su zastupljene su disjunkcija i konjukcija i to u sledećoj kombinaciji :

( )[ ]54321 ZZZZZZ ∧∨∧∨=

Pri tome su manje složeni iskazi:

( ) ( )[ ] ( )745 3211 <∨>∧== DDDZ( ) ( ) ( )2575 4442 >∨=∨== DDDZ( ) ( )86 653 =∧== DDZ( ) ( )125 774 <∧>= DDZ( ) ( ) ( ) ( )2010174 99885 <∧>∨<∧>= DDDDZ

Ovako definisan složeni iskaz podloga je za dalji postupak određivanja logičke vrednosti. Sledeći korak u tom postupku je određivanje potrebnih instrukcija. Treba istaći da u tom procesu nije dovoljno samo definisati instrukcije, već je neophodno odrediti i strukturu instrukcija. Pod strukturom podrazumevamo odnose među instrukcijama.

Do toga dolazimo postepeno i može da se odvija u dva smera. Jedan način je definisanje odnosa polazeći od složenog iskaza Z do najosnovnijeg

25

12

17 10 20

Page 76: objektno orijentisano programiranje

Objektno orijentisano programiranje76

iskaza. Drugi način je obrnuti postupak, kada analiziramo odnose među osnovnim iskazima i polako izgrađujemo strukturu ka složenom iskazu.

Način kreiranja strukture složenog 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 označićemo sa A i oni su sledeći:

( ) ( ) ( )745 332211 <=>=== DADADA

( ) ( ) ( )25175 464544 >===== DADADA

( ) ( ) ( )586 796857 >===== DADADA( ) ( ) ( )17412 712811710 <=>=<= DADADA( ) ( )2010 914913 <=>= DADA

Nakon toga pristupamo kreiranje strukture na prvom nivou koji obuhvata manje složene iskaze Z1, Z2, Z3, Z4, Z5. Tada je Z1 definisan na sledeći način:

[ ] 3211 AAAZ ∨∧=

gde su potrebne instrukcije za utvrđivanje logičke vrednosti ponaosob za svaki najosnovniji iskaz (A1, A2, A3)�. Struktura uslova za složeni iskaz Z1 prikazana je na slici 4–14.

Slika 4-14.: Struktura instrukcija za iskaz Z1

17 25

12 17

10 2010 11 12

1413

Page 77: objektno orijentisano programiranje

Objektno orijentisano programiranje 77

Zatim sledi utvrđivanje strukture instrukcije za iskaz Z2 koga definišu osnovni iskazi A4, A5 i A6.

6542 AAAZ ∨∨=

Strukturu instrukcija za ovaj složeni iskaz ilustruje slika 4–15.

Slika 4-15.: Struktura instrukcija za iskaz Z2

Pošto su iskazi Z3 i Z4 oni imaju istu strukturu kao što to prikazuje i slika 4–16. Iskaz Z3 definisan je iskazima A7 i A8, a Z4 sa iskazima A9 i A10.

873 AAZ ∧=

Z4 = A9 ˄ A10

Slika 4-16: Struktura instrukcija za iskaz Z3 i Z4

Page 78: objektno orijentisano programiranje

Objektno orijentisano programiranje78

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 4–17

Z4 = A11 ˄ A12 ˄ A13 ˄ A14

Kada su kreirane strukture iskaza na prvom nivou, nastupa sledeći korak: kreiranje strukture složenog iskaza na drugom nivou. Ovde se koncentrišemo na strukturu koju kreiraju funkcije manje složenih iskaza: Z1, Z2, Z3 ,Z4 i Z5.

Slika 4-17.: Struktura instrukcija za iskaz Z5

Za konkretni primer složeni iskaz sadrži logičke funkcije disjunkciju i konjukciju i predstavljen je na sledeći način:

( )[ ]54321 ZZZZZZ ∧∨∧∨=

Struktura ovog iskaza prikazana je na slici 4–18.

Konačan korak u procesu kreiranja strukture složenog iskaza je kreiranje kompletne strukture iskaza.

Da bismo došli do ovog koraka bilo je potrebno ispitati osnove iskaze zadatog konkretnog složenog iskaza Z i pri tome formirati korak po korak složenije strukture.

Page 79: objektno orijentisano programiranje

Objektno orijentisano programiranje 79

Složeni iskaz za ovaj primer je funkcija Z:

Z = Z (Z1, Z2, Z3, Z4, Z5)

Na drugom nivou kreirali smo strukturu sa manje složenim iskazima od Z1 do Z5 za zadati primer. Zamenom strukture drugog nivoa sa pojedinim strukturama (Z1, Z2, Z3, Z4, Z5)� sa prvog nivoa kreiraćemo kompletnu strukturu. Pri tome dobijamo strukturu prikazanu na slici 4–19.

Ovakvim načinom možemo kreirati i strukture veoma složenih iskaza.

Slika 4-18: Struktura instrukcija iskaza Z

Page 80: objektno orijentisano programiranje

Objektno orijentisano programiranje80

Slika 4-19: Struktura instrukcija iskaza Z na detaljnijem nivou

4. 5 Operatori u visual Basic-u

Primena logičkih struktura je veoma značajna u programiranju. Kada se za neki postavljeni problem kreira program uvek se polazi od logičkih struktura i iskaza koji taj problem opisuju. Osnovni princip kreiranja

Page 81: objektno orijentisano programiranje

Objektno orijentisano programiranje 81

programa je idejno rešavanje problema. To je osnova budućeg programa i pri tome uvažavamo sintaksu programskog jezika kojeg koristimo. Treba istaći da je primena logičkih iskaza i operatora ključna u upravljačkim strukturama za izražavanje raznih uslova putem kojih se usmerava izvršavanje programa.

Mada svaki programski jezik ima svoju sintaksu, operatori koji se koriste za konkretizaciju logičkih iskaza u programima su u većini slučajeva slični. Možda se razlikuju u nekim oznakama operatora.

U ovom odeljku osvrnućemo se na logičke operatore koji se koriste u Visual Basic-u.

Oni se dele na:

■ Aritmetičke operatore

■ Poredbene operatore

■ Logičke operatore

U grupu aritmetičkih operatora spadaju operatori kojima izvršavaju osnovne aritmetičke 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. Važno je istaći

da se samo isti tipovi podataka mogu sabrati. Ako se radi o sabiranju dva broja koji su različitog tipa npr. jednog celobrojnog i jednog decimalnog, Visual Basic će automatski prevesti (konvertovati)� celobrojni u decimalni i sabrati ta dva broja.

O tipovima podataka biće reči kasnije.

Primer (može se uraditi u editoru koda za Form1)�:

Debug.Print(2 + 3)�

Debug.Print(2 + 4.2)�

(Na ekranu u prozoru Immediate treba se ispiše rezultat nakon pokretanja programa: 7 i 6.2 kao što to pokazuje slika 4–20).

Page 82: objektno orijentisano programiranje

Objektno orijentisano programiranje82

Slika 4-20: Prikaz rezultat u prozoru Immediate

Operator oduzimanja -Slično operatoru sabiranja i za operator oduzimanja se upotrebljava

simbol oduzimanja iz matematike. Takođe služi za oznaku negativnog broja.

Primer (rezultat u prozoru Immediate)�:

Debug.Print(7 – 5)�

Debug.Print(2 - 4.2)

(Na ekranu treba se ispiše rezultat nakon pokretanja programa: 2 i -2.2).

Operator množenja *Simbol za operaciju množenja dve promenljive, konstante ili literala

je zvezdica.

Page 83: objektno orijentisano programiranje

Objektno orijentisano programiranje 83

Primer (rezultat u prozoru Immediate):

Debug.Print(2 * 5)

(Na ekranu treba da se ispiše rezultat nakon pokretanja programa: 10).

Operator deljenja /Simbol deljenja je kosa crta koje se koristi kao i kod običnog

kalkulatora. (Deljenje nulom daje grešku.)�

Primer (rezultat u prozoru Immediate):

Debug.Print(12 / 6)

(Na ekranu treba da se ispiše rezultat nakon pokretanja programa: 2).

Operator celobrojnog deljenja \Primenom operatora celobrojnog deljenja vrednosti dva broja se

zaokružuje u celobrojne. Rezultat će takođe biti celobrojan. Za bolje razumevanje uporedićemo operatore običnog deljenja i celobrojnog deljenja.

Primer običnog deljenja (rezultat u prozoru Immediate)�:

Debug.Print(13.6 / 2)

(Na ekranu treba da se ispiše rezultat pokretanja programa: 6.8).

Primer celobrojnog deljenja (rezultat u prozoru Immediate):

Debug.Print(13.6 / 2)

(Na ekranu treba da se ispiše rezultat nakon pokretanja programa: 7; zaokružuje se boj 13.6 na 14 i deli se sa 2; Rezultat je 7).

Napomena: Preporučljivo je da se ovaj operator koristi kod deljenja celobrojnih vrednosti, da bi se izbegli nepoželjni rezultati.

Operator stepenovanja ^Simbol kojim se podiže neki broj na stepen je ^.Primer (rezultat u prozoru Immediate)�:

Page 84: objektno orijentisano programiranje

Objektno orijentisano programiranje84

Debug.Print 3 ^ 2

(Na ekranu treba da se ispiše rezultat nakon pokretanja programa je 9).

Operator ostatak mod

Ovaj operator se primenjuje za izračunavanje ostataka kod deljenja. Takođe je preporučljivo da se koristi kod celobrojnih vrednosti, jer zaokružuje 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 služe za poređenje brojeva i brojčano tekstualnih znakova. Najčešće se koriste u logičkim iskazima i u upravljačkim strukturama o kojima je već bilo reči. U ove operatore spadaju operatori dodeljivanja vrednosti (znak: jednako)�, operatori za iskazivanje većeg ili manjeg broja, većeg ili jednog broja itd.

Simboli koji se koriste prikazani su u tabeli 4–5.

Tabela 4-5: Simboli operatora

Primeri:

Debug.Print(8 > 5)�

(Rezultat nakon pokretanja programa će na ekranu biti: True).

Debug.Print(8 < 5)�

Page 85: objektno orijentisano programiranje

Objektno orijentisano programiranje 85

(Rezultat : False).

U logičke operatore spadaju NOT (negacija)�, AND i OR. Oni se koriste stvaranju složenih iskaza. U uvodu logičkog razmišljanja ukazali smo da logički operatori mogu imati samo dve vrednosti: istina (True) i greška (False).

Logički operator NOT pretvara logičku vrednosti istina (True) u grešku (False).

Primeri ( u prozoru Immediate)�:

Debug.Print Not 14 > 25

(Rezultat će biti: True, jer je 14 > 25 pogrešno, a sa logičkim operatorom NOT biće suprotno od toga: biće istina).

Logički operator NOT se primenjuje i za invertovanje (tabela 4–6)� operatora, što je nekada veoma zgodno u složenim iskazima.

Tabela 4-6: Invertovanje putem operatora NOT

Logički operator AND (i)� upotrebljava se u složenim izrazima za izražavanje konjukcije (∧ )�. U slučaju ovog operatora logička 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 biće: True).

Debug.Print (Not 14 > 20 And 14 > 25)�

(Rezultat će biti: False).

Za izražavanje logičke funkcije disjunkcije koristi se operator OR (ili)�. Prema tabeli istinitosti složeni iskaz će biti istina (True) ako je bar jedan od osnovnih iskaza istinit.

Page 86: objektno orijentisano programiranje

Objektno orijentisano programiranje86

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 slučaju izraza

Debug.Print (Not 14 > 20 Or 14 = 25)�

(Rezultat će biti: False).

Ovo su najčešće korišćeni logički operatori u programiranju, iako postoje pored ovih i drugi logički operatori.

4.6 Petlje i upravljačke strukture

Kada računar izvršava neki program on čita programske linije, instrukcije, red po red i tako ih i izvršava. Kada stigne do poslednje instrukcije on ga izvrši i stane. Dalje nema instrukcije šta da radi. Pored toga često ćemo se sresti sa problemom da se neke instrukcije ponavljaju, kao što to prikazuje i graf algoritma na slici 3–15. Ovaj konkretni algoritam je kratak, ali kada je problem složeniji pogodnije je ugraditi uslovnu logiku u program kao što to prikazuje slika 3–18 . Prilikom pisanja kodova ugrađuju se logičke strukture, čime se u stvari određuje šta treba sledeće da se uradi.

Slika 4-21: Prikaz algoritma sa uslovnom logikom

Page 87: objektno orijentisano programiranje

Objektno orijentisano programiranje 87

Kodovi pored upravljačke strukture zasnovane na uslovnoj logici omogućavaju ponavljanje nekih instrukcija, a mogu sadržati i grananja instrukcija radi usmeravanja načina izvršavanja programa (slika 4–21)�. Upravljačke strukture određuju tok programa pri čemu omogućuju izračunavanje petlji. Petlja će se izvršiti zadati broj puta ili dok se ne ispuni neki uslov u zavisnosti od zahtevanog zadatka. Zbog toga postoje različite strukture uslovne logike.

4. 6.1 Struktura For...Next

Petlja For ... Next je struktura pomoću koje se ponavlja blok programskog koda. Broj ponavljanja se definiše u strukturi, gde je ”i’ brojač koji se ponavlja zadati broj puta.

Recimo da želimo da računar ispiše brojeve od 1 do 10 na ekranu (slika 4–22)�. Onda će programski blok sadržati 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

Slika 4-22: Prikaz rezultata For... Next petlje

Pošto je početna vrednost brojača postavljena na jedan (i=1)� računar će ispisati 1, pa naredni broj 2, zatim 3 itd., sve dok ne premaši zadatu vrednost. U ovom slučaju je to 10. Kada i dostigne vrednost 11 program će da stane. Kod svakog narednog izvršenja bloka koda vrednost brojača ”i” se povećava za 1.

Page 88: objektno orijentisano programiranje

Objektno orijentisano programiranje88

Vrednost za koji se brojač povećava određujemo mi. Pogodnost je da postoji službena reč Step koja to omogućava.

Dim i As Integer For i = 1 To 50 Step 5 Console.WriteLine("Vrednost i je: " & i) Next i

Napomena - važi i za negativne brojeve: Dim i As Integer For i = 50 To 1 Step -5 Console.WriteLine("Vrednost i je: " & i) Next i

4. 6. 2 Struktura Do/Loopl

U nekim slučajevima nećemo znati koliko puta treba da se izvrši programski blok kodova, tako da For ... Next petlja nam neće koristiti. Umesto toga primenjuje se Do/Loop struktura. Karakteristično je da će se ova petlja izvršavati sve dok se ne ostvari neki uslov.

Može se primeniti ne četiri različita načina: 1. Do While uslov ’naredbe se izvršavaju dok je uslov ispunjen Loop

Kako to izgleda programski prikazano je na slici 4–23.

Page 89: objektno orijentisano programiranje

Objektno orijentisano programiranje 89

Naredba koja ispisuje rezultat (slika 4–24 )� u prozoru Output jeConsole.WriteLine(n)

Slika 4-24: Prozor Output pri izvršenju Do/Loop petlje

2. Do ’naredbe će se izvršiti jednom

’i ponavljaće se dalje sve do god je

’uslov ispunjen

While uslov

Slika 4-25: Petlja Do/ Loop kada se prvi put izvrši naredba

Page 90: objektno orijentisano programiranje

Objektno orijentisano programiranje90

3. Do Until uslov

’naredbe se izvršavaju dok uslov ne bude ispunjen

Loop

Kako to funkcioniše uzećemo novi primer gde ćemo uneti vrednost u polje namenjeno za to (slika 4–26)� i uneti sledeći kod za događaj Click dugmeta “Do Loop”:

Dim n As Integer

n = TextBox1.Text

Do Until n > 5

MsgBox(n)

n = n + 1

Loop

U ovom primeru možemo proizvoljno uneti promenljivu n. Ako unesemo broj manji od postavljenog uslova naredba će se izvršavati jer je uslov da se naredba izvršava ”sve dok n ne bude veće od 5”. U suprotnom neće se desiti ništa, naredba se neće izvršavati.

Slika 4-26: Petlja Do Until

Drugi način, da se primeni Do Until petlja, je sledeći:

4. Do ’naredbe će se izvršiti jednom

’i ponavljaće se dalje sve do god

’uslov ne bude ispunjen

Until uslov

Page 91: objektno orijentisano programiranje

Objektno orijentisano programiranje 91

4. 6. 3 Struktura If/Then/Else

Nekada je potrebno da se program ili blokovi kodova programa izvršavaju pod uslovima ”Ako … Onda”. Naj jednostavnija logička struktura koja to omogućava je If/Then/Else. Ona je zasnovana na principu logičkih kola, gde prekidači mogu imati dva stanja: tačno ili netačno.

Sintaksa ove strukture je sledeća:

If uslov Then

’naredbe

End If

to se može pročitati ovako: ako je uslov ispunjen onda se izvrše naredbe. Kada se izvrši blok koda If/Then struktura se zatvara sa End If, koja je službena reč u Visual Basic-u.

If Then strukturu najbolje ćemo demonstrirati kroz primer za unos imena. Forma za unos imena prikazana je na slici 4–27.

Slika 4-27: Program koji proverava unos imena

Za realizaciju potrebno je jedno polje za unos imena i jedno dugme čijim aktiviranjem pokrećemo sledeći programske linije:

Private Sub Button1_Click(ByVal sender As System.Object_

ByVal e As System.EventArgs) Handles Button1.Click

Dim Ime As String

Ime = txtIme.text

If Ime <> "" Then

MsgBox("Ime je " & Ime)

End If

End Sub

Page 92: objektno orijentisano programiranje

Objektno orijentisano programiranje92

Šta se tu u suštini dešava kada se dva puta klikne na dugme? Ako korisnik unese neko ime (a tu se podrazumeva prazan karakter)� pojaviće se poruka koja ga obaveštava o unetom imenu.

Postavlja se pitanje šta se događa kada uslov nije ispunjen. U navedenoj If/Then strukturi neće se desiti ništa, jer ne postoji deo programskog koda koji na to ukazuje. Ali ako primenimo strukturu sa ključnom reči Else:

If uslov Then

’naredbe 1

Else

’naredbe 2

End If

realizovaće se naredbe 2. U običnom govornom jeziku ovo se može reći na sledeći način :

”Ako je ulov ispunjen onda se izvrši naredba 1, inače će se uraditi naredba 2.”

U konkretnom primeru to će izgledati ovako, a prikaz rezultata kao na slici 3–25:

Dim Ime As String

Ime = txtIme.text

If Ime <> "" Then

MsgBox("Ime je " & Ime)

Else

MsgBox("Niste uneli ime! ")

End If

Slika 4-28: Struktura If Then Else

Page 93: objektno orijentisano programiranje

Objektno orijentisano programiranje 93

Postoji jedna pogodnost u vezi If/Then strukture, a to je mogućnost ugnježdavanja u druge If/Then blokove. Međutim, dubina ugnježdavanja može dovesti do problema, jer se programski kod usložnjava, a što može prouzrokovati ne samo nepreglednost programa, već i greške.

Za primer ugnježdenog If/Then/Else strukture može poslužiti provera ispunjenosti uslova za dva različita slučaja. Prvo se proverava da li je ispunjen uslov za oba slučaja. U slučaju da nije ispunjen uslov, treba utvrditi da li su uslovi tačni pojedinačno. Programski kod putem provere nalaže da se štampa onaj uslov koji je ispunjen.

If uslov 1 And uslov 2 Then

Print ”Oba uslova su tačna”

Else

If uslov1 Then

Print ”uslov 1 je tačan”

Else

If uslov2 Then

Print ”uslov 2 je tačan”

Else

Print ”Oba uslova su netačna”

End If

End If

End If

Ovakva struktura se može napisati preglednije, jer Visual Basic omogućuje i upotrebu pojednostavljenog oblik prethodnog bloka:

If uslov 1 And uslov 2 Then

Print ”Oba uslova su tačna”

ElseIf uslov1 Then

Print ”uslov 1 je tačan”

ElseIf uslov2 Then

Print ”uslov 2 je tačan”

Else

Print ”Oba uslova su netačna”

End If

Page 94: objektno orijentisano programiranje

Objektno orijentisano programiranje94

Ako prethodni primer proširimo sa unosom prezimena možemo proveriti da li je korisnik uneo bilo šta ili je uneo samo prezime ili samo ime, ili nije ništa uneo. Pa bi onda programska struktura bila sledeća: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! ")

’Inače nijedan uslov nije ispunjen

Else MsgBox("Niste uneli ni ime ni prezime! ") End If End Sub

Na slici 4–29 prikazan je sled ovih komandi pri izvršenju programa.

Page 95: objektno orijentisano programiranje

Objektno orijentisano programiranje 95

Slika 4-29: Struktura ugnježdene If/Then/Else strukture u pojednostavljenoj formi

4. 6. 4 Struktura Select

If/Then/Else je najčešće korišćena uslovna logička struktura, ali kod složenijih blokova kodova može biti prilično neuredna. Tada se pribegava nekim drugim strukturama. Pogodnija struktura u takvim slučajevima je Select struktura, što ćemo objasniti na primeru.

Primer: Treba napisati kod koji će ispisati nazive dana u nedelji. Promenljivom x označićemo dane u nedelji. Redni broj dana ukazaće na dan u nedelji. U zavisnosti od toga koju vrednost ima promenljiva x ispisaće se naziv dana.

Kada bismo ovo napisali pomoću If/Then strukture to bi izgledalo ovako:

Page 96: objektno orijentisano programiranje

Objektno orijentisano programiranje96

If X=1 Then

MsgBox (”Ponedeljak”)

ElseIf X=2 Then

MsgBox (”Utorak”)

ElseIf X=3 Then

MsgBox (”Sreda”)

ElseIf X=4 Then

MsgBox (”Četvrtak”)

ElseIf X=5 Then

MsgBox (”Petak”)

ElseIf X=6 Then

MsgBox (”Subota”)

ElseIf X=7 Then

MsgBox (”Nedelja”)

End If

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 = "Ponedeljak" Case 2 txtDan.Text = "Utorak" Case 3 txtDan.Text = "Sreda" Case 4 txtDan.Text = "Četvrtak" Case 5 txtDan.Text = "Petak" Case 6 txtDan.Text = "Subota" Case Is = 7 txtDan.Text = "Nedelja" End Select End Sub

Page 97: objektno orijentisano programiranje

Objektno orijentisano programiranje 97

Slika 4-30: Prikaz dana u nedelji pomoću Select strukture

Select struktura se zasniva na izvršavanju slučajeva (engl. case). Promenljiva X se navodi na početku strukture. Za svaku vrednost promenljive određuje se slučaj koji započinje sa ključnom reči Case. Za svaki slučaj navodi se vrednost promenljive, nakon čega sledi proizvoljan broj naredbi.

U odnosu na If/Then/Else strukturu ima određene prednosti. Prvenstveno, okvir jednog slučaja može sadržati više službenih reči, pa čak i druge Select naredbe. Druga značajna stvar je da umesto promenljive može stajati neki izraz.

Select Case ((a-7)*b)/(3+c)*d)

Case 1

’uradi nešto

Case 2

’uradi nešto drugo

End Select

Ako ispunjenost uslova za izraz ((a-7)�*b)�/(3+c)�*d)� proverama uz pomoć If/Then strukture će izgledati ovako:

Primetna razlika između ova dva bloka koda je ponavljanje izraza u If/Then strukturi. Ne povoljnost se pokazuje u izmenama. Recimo da se

Page 98: objektno orijentisano programiranje

Objektno orijentisano programiranje98

nešto menjalo u izrazu. Tada moramo menjati programski kod. Ali moramo paziti da se promena izvrši na svim mestima u kodu. Kod složenijih kodova često se to može prevideti i negde ćemo zaboraviti da izmenimo izraz. Pored toga odražava se i na vreme obrade podataka. Računar svaki put kada naiđe na izraz računa, njegovu vrednost ponovi, jer ne pamti rezultate.

Pored ovih pogodnosti Select struktura ima još jednu, a to je obrada grupe mogućih vrednosti, što prikazuje sledeći primer.

Select Case X

Case 1 To 2, 5 To 7, Is > 12

’uradi nešto sa ovom grupom

Case Else:

’uradi nešto u vezi sa ostalim vrednostima

End Select

U ovom primeru jedna mogućnost je ispitivanje vrednosti za tri različita opsega.

Opsezi se kreću od 1 do 2, od 5 do 7 (uključujući i njihove granične vrednosti)� i ako je X > 12 (što se proverava sa Is > 12)�.

Case Else koja tu figurira daje mogućnost da se obuhvate one vrednosti koje ne spadaju u date opsege. Ova službena reč ima istu funkciju kao i Else u IF/Then strukturi.

Ovo možemo ilustrovati na primeru starosne dobi čoveka.

U slučaju da se starost određene osobe kreće između 1 i 18 kategorisaćemo osobu kao adolescenata, inače će spasti u kategoriju odraslih (slika 4–31)�.

Slika 4-31: Program za određivanje starosne kategorije

Page 99: objektno orijentisano programiranje

Objektno orijentisano programiranje 99

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

Page 100: objektno orijentisano programiranje
Page 101: objektno orijentisano programiranje

5. ELEMENTI PROGRAMSKIH BLOKOvA

U programiranju pored instrukcija postoji još jedan osnovni aspekat, a to su podaci. Dosada je bilo reči o instrukcijama, gde je ukazano i na važnost usmeravanja toka programa, ali rad sa podacima smo zapostavili.

Dakle, u ovom delu upoznaćemo se sa elementima osnovnih gradivnih blokova programa. Najosnovniji gradivni blokovi se odnose na pomeranje podataka sa jedne memorijske lokacije na drugi ili na neko izračunavanje. Programi nastaju kombinacijom ovih osnovnih programskih blokova.

U uvodnom delu, gde je objašnjen postupak rešavanja nekog problema, šematski je ilustrovan ovaj postupak, ali u ovom delu dalje ćemo da razmatramo rad sa podacima. Videćemo šta su promenljive i konstante koji su tipovi podataka i koja je njihova sintaksa.

Polazeći od toga da se radi u alatu Visual Basic.Net može se reći da sadrži podskup osnovnih tipova podataka koji su definisani u Net Framework-ovoj biblioteci osnovnih klasa.

U daljem tekstu ćemo objasniti sledeće elemente:

■ tipove podataka,

■ promenljive,

■ konstante i

■ operatore.

Page 102: objektno orijentisano programiranje

Objektno orijentisano programiranje102

5.1 Tipovi podataka

Svaki programski jezik razlikuje različite vrste tipove podataka koji preciznije definišu promenljive i konstante. Naravno, razlike se odnose na vrste tipova podataka, a ne na razlike između programskih alata. Karakteristično je da svaki tip podataka ima određena ograničenja (minimalne i maksimalne vrednosti)�, što u suštini predstavlja opsege podataka .

U tabeli 5–1 prikazani su tipovi podataka koji se koriste u Visual Basic.Net-u

Koji tip podataka ćemo upotrebiti zavisi od vrednosti koja će biti smeštena u promenljivu ili konstantu. Na primer logički tip podataka (Boolean)� upotrebljava se u logičkim iskazima, gde se vrednosti kreću u opsegu istina ili pogreška (True/False)�. Kada radimo sa brojčanim vrednostima koristićemo Integer, za decimalne brojeve Single, Double ili Decimal, i to opet u zavisnosti od veličine podataka koji će se pojaviti u programu. Pored varijabilnih tipova koji se odnose na definisanje opsega brojčanih vrednosti postoje još i tipovi podataka za deklarisanje tekstualnih znakova: String, za memorisanje datuma: Date. Ako ne odaberemo odgovarajući tip podataka program će javiti grešku. To znači da numeričku vrednost nećemo odnosno nećemo moći obrađivati u promenljivoj koja je određena kao string.

Osnovno pitanje je: zašto je važno navesti dimenziju podataka. Jednostavno, jer utiču na izvršavanje celokupnog programa pa i na memorijske lokacije. Uostalom nije svejedno da li radimo sa celim brojevima, sa brojevima pokretnog zareza ili stringovima.

Deklarisanjem tipa podatka određujemo nominalni opseg koji može zauzeti vrednost koja se memoriše, jer CLR (Common Language Runtime)� dodeljuje memoriju u zavisnosti od platforme na kojem radite.

Page 103: objektno orijentisano programiranje

Objektno orijentisano programiranje 103

Tabela 5-1.: Prikaz tipova podataka

Pre nego što pređemo na objašnjenje kako se sa njima radi, osvrnućemo se na to šta su promenljive i konstante.

5.2 Promenljive

Zbog razumevanja šta su promenljive i kako se upotrebljavaju vratićemo se na primer sa početka ovog poglavlja: sabiranje bilo koja tri broja. Na slici 5–1 vidimo da se izvorni podaci smeštaju u predviđene memorijske lokacije koje smo nazvali A, B i C, dok su za smeštanje međurezultata i rezultata predviđene memorijske lokacije D i Z.

Nazive ovih memorijskih lokacija zovemo promenljivama ili varijablama (engl. variables).

Page 104: objektno orijentisano programiranje

Objektno orijentisano programiranje104

Znači da postoji deo memorije koji program koristi za smeštanje konkretne vrednosti. Recimo da A ima vrednost 25. Tada računar pamti tu vrednost u određenoj memorijskoj lokaciji i to sve dok se ne ”isprazni” , odnosno, dok ne izdamo instrukciju da se ukloni ili dok se ne poništi ponovnim unosom. U tu svrhu smo istakli prostorno planiranje tj. postupak određivanja PLANA OPERATIVNE MEMORIJE.

Primena promenljivih značajno olakšava programiranje, jer programer treba da pamti samo nazive memorijskih lokacija. Pomoću njih izvršavamo različite aritmetičke i logičke operacije i koristimo ih za smeštanje (akumuliranje)� rezultata. Druga vrsta promenljivih služi za pohranjivanje podataka za kasniju upotrebu u programu.

Da bi program znao da se radi o promenljivama njih treba definisati, što se u računarskoj terminologiji zove deklarisanje. Promenljive se deklarišu pomoću službene reči Dim u odeljku Declaration za obrazac u kome će se koristiti. Službena reč Dim je skraćenica od Dimension, što ukazuje na to da se definiše dimenzija promenljive.

Slika 5-1.: Prikaz sabiranja tri broja smeštanjem u memorijske lokacije

Kako se deklarišu promenljive demonstrira sledeći primer:

Naziv promenljive

Dim A As Integer

Dim B As Integer Dim C As Integer Dim Z As Integer

Page 105: objektno orijentisano programiranje

Objektno orijentisano programiranje 105

Private Sub Button1_Click_(ByVal sender As System.Object,_ ByVal e As System.EventArgs)_ Handles Button1.Click

A = txtA.Text B = txtB.Text C = txtC.Text Z = A + B + C txtZ.Text = Z

End Sub

Odmah nakon službene reči sledi naziv promenljive (A)� i definisanje tipa podataka koju će ta promenljiva da sadrži.

Treba napomenuti da se u ovom primeru sabiraju celobrojne vrednosti, pa se definiše celobrojni tip podataka (Integer)� tj. opseg koji se kreće od - 2 147 483 648 do 2 147 483 647 (osenčeni deo)�.

”Dim A As Integer”

Time je omogućeno 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 računar unete vrednosti u polja kao što txtA smatra tekstom i nije u mogućnosti da ih sabere kao numeričke vrednosti.

Nakon sabiranja neophodno je rezultat saopštiti i korisniku. Rezultat će se pojaviti u polju namenjenom za to kao što to ilustruje slika 5–2.

Promenljive se mogu deklarisati kao javne (public) ili lokalne (private)�. Javne (public)� promenljive se deklarišu u standardnom modulu i omogućavaju dostupnost svim procedurama i modulima. Lokalne promenljive (private)� deklarišu se samo za određenu proceduru i oni nemaju nikakav značaj za druge procedure istog progama.

Page 106: objektno orijentisano programiranje

Objektno orijentisano programiranje106

Slika 5-2: Postupak izrade programa za sabiranje tri broja

5.3 Konstante

Upotrebu konstanti najlakše ćemo objasniti na konkretnom primeru.

Za primer ćemo uzeti obračun doprinosa zarada. Svaka organizacija kod isplate zarade dužna je da obračuna pored poreza i doprinose za zdravstveno i penzijsko osiguranje čije stope su propisane zakonom. Ako bi prilikom kreiranja programa za njihovo izračunavanje koristili brojčane vrednosti u programskim kodovima, to bi značilo da se stope, odnosno brojčane vrednosti, unose neposredno na sva mesta u program. Na prvi pogled to ne bi bilo ništa strašno, ali kada bi došlo 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 nevažeću stopu. Ovo ne samo što je dugotrajan rad, već lako mogu nastati i greške.

Page 107: objektno orijentisano programiranje

Objektno orijentisano programiranje 107

Jednostavno previdećemo na nekom mestu u programu promenu stope. Uvođenjem konstanti ovaj problem se elegantno rešava.

Da bismo saopštili računaru da ona postoji treba da je deklarišemo (saopštimo)�. To se u Visual Basicu.Net-u izvodi editoru koda za dati obrazac (npr. Form1.vb)�. Kada se otvori pojaviće se oblast za deklaracije (Declaration area)� obrasca kao na slici 5–3.

Slika 5-3: Deo za deklarisanje

Službena 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

Page 108: objektno orijentisano programiranje

Objektno orijentisano programiranje108

MessageBox.Show("PIO: " & PIO)

End Sub

End Class

Slika 5-4: Primena konstante u programu

Ako pokrenemo program prethodno napisani kodovi će se izvršiti i prikazaće nam se kao rezultat obrade iznos doprinosa za penzijsko i invalidsko osiguranje u MessageBox-u (slika 5–4)�.

U zaključku možemo reći da su konstante rezervisana memorijska polja u koje se smeštaju nepromenljive vrednosti. Određeni su programskim kodovima i ne mogu se menjati u toku izvršavanja 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 izvršenje programskih linija.

Kao što smo rekli svi jezici podržavaju komentare i u zavisnosti od jezika imaju posebne oznake:

■ u C# se komentari označavaju sa //

■ u Javi se komentari označavaju sa /* ili // (ima više načina upotrebe)�

■ u VB se komentari označavaju sa ’ (apostrofom)�.

Page 109: objektno orijentisano programiranje

Objektno orijentisano programiranje 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 može služiti za podsetnik ili ako neko drugi gleda vaš kod imaće jasan uvid šta program radi.

5. 5 Prazan prostor

Još jedna značajna karakteristika programskih jezika, upotreba praznog prostora. Uglavnom se radi o estetskom izgledu programskih linija (kodova)�. Ipak prazan prostor između blokova naredbi utiče na preglednost, urednost napisanih kodova (slika 5–5)�.

Postoji određeno nepisano pravilo po kom se pridržavaju programeri: uvlačenje redova programskih kodova. Kada se piše podprogram ona se najpre definiše (u VB.NET-u automatski se pojavljuje početak i završetak podrutina)�. Ono što se piše između su vaše programske linije (kodovi)�, odnosno instrukcije šta će taj događaj da uradi.

Slika 5-5: Prikaz upotrebe praznog prostora u programskim kodovima

Ovaj deo teksta se uvlači npr. za jedan Tab. Kada imamo više programskih blokova u kodu jedne podrutine njih razdvajamo praznim prostorima. Oni takođe ne utiču na izvršavanje programskih linija, niti će biti sporije izvršene.

5. 6 Rad sa brojevima

Kada vršimo aritmetičke operacije radimo sa brojčanim veličinama. One mogu biti: celobrojne ili sa decimalnim vrednostima.

Celobrojne vrednosti se retko koriste u procesu programiranja, zbog same prirode računanja, bilo u poslovnoj oblasti, bilo u naučnoj oblasti.

Page 110: objektno orijentisano programiranje

Objektno orijentisano programiranje110

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 ograničavamo naš program.

Jedan takav primer je recimo šifre zaposlenih koje određuje programer. Oni će uvek polaziti od vrednosti 1 i nastaviće se do ukupnog broja zaposlenih lica. To pruža mogućnost adekvatnog baratanja podacima koji su vezani sa rednim brojevima.

Kao što je već spomenuto u ovakvim slučajevima će se promenljiva deklarisati kao Integer, kao što vidimo i u narednim primerima aritmetičkih 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

Rezultat je prikazan u ovom obliku (slika 5– 6)�:

Slika 5-6: Sabiranje celobrojnih vrednosti… Dim A As Integer

A = 16 A = A - 2 MessageBox.Show("Rezultat je: " & A,_ "Oduzimanje INT")…

Page 111: objektno orijentisano programiranje

Objektno orijentisano programiranje 111

Slika 5-7: Oduzimanje celibrojnih vrednosti

(Tri tačke pre i posle naredbi označavaju da kodu prethodi deklaracija podrutine, koja se automatski pojavljuje i zbog skraćenog oblika samo se navode oni kodovi koji su potrebni za rešavanje problema. Objašnjenje podrutina sledi u narednim oblastima.

Takođe treba napomenuti da i crtica na kraju reda podrutine Sub „... & A, _ ” samo se u ovom tekstu koristi za razdvajanje redova da bi bilo preglednije. U kodu to nema. )…

Dim A As Integer

A = 3 A = A * 5 MessageBox.Show("Rezultat je: " & A,_ "Množenje INT")…

Slika 5-8: Množenje celobrojnih vrednosti… Dim A As Integer

A = 21 A = A / 7

MessageBox.Show("Rezultat je: " & A,_

"Deljenje INT")…

Page 112: objektno orijentisano programiranje

Objektno orijentisano programiranje112

Slika 5-9: Deljenje celobrojnih vrednosti

Ovde moramo navesti da postoji i drugačija stenografija, da se ne bi neko zbunio ako naiđe na takav način pisanja izvođenja aritmetičkih operacija. Analogno prethodnim navedenim kodovima oni su sledeći:

Dim A As Integer

A=16

A+=8

Dim A As Integer

A=16

A-=2

Dim A As Integer

A=5

A*=3

Dim A As Integer

A=21

A/=7

Važno je istaći da kada radimo sa celobrojnom matematikom (Integerom), a vrednosti su decimalne postoji određeni problem. Brojevi se pri izvršavanju koda zaokružuju.

Primer:

Dim A as Integer

A=3

A=A*2.75

Očekivani rezultat bi bio 6,75, ali pošto se radi sa celobrojnom matematikom, rezultat će biti u ovom slučaju 7, a ne 6,75. Računar će po pravilu zaokurživanja brojeva da uzme veću vrednost, jer je naredni broj (broj iza zareza)� veće od 5. Da je očekivani rezultat recimo 6,34 vrednost stvarni rezultat u ovom slučaju bi bio 6.

Ovde je dat primer sa aritmetičkom operacijom množenja, inače ovo važi za sve aritmetičke operacije.

Page 113: objektno orijentisano programiranje

Objektno orijentisano programiranje 113

Zbog ovih razloga uglavnom aritmetičke operacije sa promenljivama koji sadrže brojčane vrednosti deklarišu se tako da one budu zgodne za matematiku sa pokretnim zarezom.

Ova vrsta promenljivih se deklariše pomoću Double, Single ili Decimal, u zavisnosti od veličine koja nam je potrebna (slike: 5–10, 5–11, 5–12 i 5–13)�. Double znači da se radi sa brojevima dvostruke vrednosti i zauzima veći prostor u memoriji. Decimal prikazuje brojeve sa još većom tačnošću. Ovde se radi o većem opsegu. Promenljive koje se odnose na naučne podatke neizostavno se definišu na ovaj način. Inače ako nije potrebna tolika tačnost decimala može se definisati i kao Single, tj. brojevi jednostruke vrednosti.

Kako ćemo promenljivu deklarisati pri matematici sa pokretnim zarezom zavisi od granice gde će računar prestati da računa decimalnu komponentu.

Primer a) Dim A As Decimal

A = 22 A = A / 7

MessageBox.Show("Rezultat je: " & A,_

"Deljenje DEC")

Slika 5-10: Aritmetička operacija deljenja kada se broj deklariše kao Decimal

Primer b) Dim A As Double

A = 22 A = A / 7

MessageBox.Show("Rezultat je: " & A,_

"Deljenje Double")

Page 114: objektno orijentisano programiranje

Objektno orijentisano programiranje114

Slika 5-11: Aritmetička operacija deljenja kada se broj deklariše kao Double

Primer c) Dim A As Single

A = 22 A = A / 7 MessageBox.Show("Rezultat je: " & A,_ "Deljenje Single")

Slika 5-12: Aritmetička operacija deljenja kada se broj deklariše kao Single

Slika 5-13: Uporedni prikaz rada sa različitim deklarisanim opsegom promenljive

Page 115: objektno orijentisano programiranje

Objektno orijentisano programiranje 115

Promenljive sa pokretnim zarezom se deklarišu na sledeći način:

Dim A As Decimal

Dim A As Double

Dim A As Single

5. 7 Rad sa stringovima

U programskim kodovima ne radimo samo sa brojčanim veličinama, već i sa znakovnim vrednostima. String znači kolekciju znakova i odnosi se na tekstualne forme. Pored teksta i brojevi se mogu prikazati kao stringovi. U tom slučaju se radi konvertovanje broja u string.

String koji želimo da se pojavi u na ekranu u programskom kodu moramo posebno naznačiti. Oznake za string su navodnici. Ako postavimo tekst između navodnika računar će to tretirati kao string, inače će tumačiti kao deo programskog koda, i naš program neće funkcionisati onako kako mi želimo. Time ograničavamo i dužinu stringa koji će se pojaviti, odnosno određujemo početak i kraj stringa.

Uzmimo najjednostavniji primer čime se započinje učenje programiranja „Hello World! “. Programski kod je sledeći:

Rezultat koji će se prikazati na ekranu ilustruje slika 5–14:

Slika 5-14: Rad sa stringom

Page 116: objektno orijentisano programiranje

Objektno orijentisano programiranje116

5. 8 Povezivanje (konkatenacija)

Pod konkatenacijom podrazumevamo povezivanje nečega u lanac, seriju. Obično 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

’prikaži rezultat

MessageBox.Show(S, ”Konkatenacija”)...

Rezultat (slika 4–15 )� će biti isto kao na slici 5–14:

Slika 5-15: Povezivanje stringova

Postoje još neke stvari koje možemo izvesti sa stringovima od kojih ćemo neke i spomenuti kao što je vraćanje dužine stringa, izdvajanje podstringa, formatiranje stringa i zamena delova stringa. Razlog objašnjenja ovih postupaka je to što su veoma korisni u praktičnom radu.

Vraćanje dužine stringa

To ćemo izvesti na sledećem primeru. Kreira se forma (Form1 – koja se automatski pojavljuje pokretanjem novog projekta)� i dodajemo TextBox kontrolu na formu kao na slici 5–16.

Page 117: objektno orijentisano programiranje

Objektno orijentisano programiranje 117

Slika 5-16: Forma sa kontrolama za program vraćanja dužine stringa

Zatim izmenjaćemo svojstvo Name (brisanjem postojeće teksta:TextBox1)� na txtA koji će biti naziv TextBox-a. Nakon toga dodaćemo još jednu kontrolu: dugme pod nazivom ”Dužina”. Takođe izvesti potrebne izmene u svojstvima Name (btnDugme) i Text (umesto Button1 - Duzina).

Nakon toga dodaćemo kod dugmetu Dužina: Private Sub btnDugme_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDugme.Click

Dim A As String A = txtA.Text

'prikaži dužinu teksta MessageBox.Show(A.Length & " znakova") End Sub

Kada pokrenemo program pojaviće se forma kao na slici 5–17. Unosom teksta u polje i aktiviranjem dugmeta Duzina dobićemo rezultat izbrojanih znakova, gde su uračunati i prazni znakovi.

Slika 5-17: Vraćanje dužine stringa

Page 118: objektno orijentisano programiranje

Objektno orijentisano programiranje118

Podstringovi

Podstringovi su setovi podataka. Primenjujemo ih kada želimo da izdvojimo neke delove stringa.

Demonstriraćemo na primeru unosa jedinstvenog matičnog broja građana (JMBG)�. Prvih sedam brojeva ukazuje na datum rođenja osobe, zatim dva broja pokazuju region tj. prebivalište osobe i poslednja četiri znaka se odnose na jedinstveni broj sa kontrolnim brojem.

Kreiraćemo formu sa jednim textbox-om i jednim dugmetom za izvršenje programskog koda kao na slici 5–18.

Ono što želimo postići je da se posebno prikaže datum rođenja osobe, region prebivališta i jedinstveni broj osobe kada se u polje na formi unese broj JMBG-a. Treba napomenuti da ovde nije ograničeno da li se mora uneti nešto npr. korisnik, pa ako se ništa ne unese program će da blokira, i javiće grešku.

Slika 5-18: Postupak izdvajanja podstringa

Programska naredba kojom ćemo ostvariti zadatak je sledeća:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim A As String A = txtA.Text

Page 119: objektno orijentisano programiranje

Objektno orijentisano programiranje 119

'prikaži sadem početna znaka MessageBox.Show(A.Substring(0, 7), "Datum rođenja")

'prikaži dva znaka u sredini počevši od osmog MessageBox.Show(A.Substring(7, 2), "Region")

'prikaži četiri krajnja znaka MessageBox.Show(A.Substring(A.Length - 4), _"Jedinstveni broj")

End Sub

Formatiranje stringa

Kada govorimo o formatiranju stringa mislimo na način prikazivanja promenljive. U praktičnom radu često se susrećemo sa podacima koje u okviru čuvanja ili obrade imaju određeni oblik, a da se prilikom prikazivanja zahteva promene u neki drugi format. Najčešći slučaj sa kojim se susreću programeri je formatiranje brojeva. Obično se to odnosi na neke specifične poslovne procese, recimo u oblasti finansija, gde se zahteva da se prikažu samo dve decimale.

Kako to da izvedemo objasnićemo na primeru deljenja dva broja. Podelićemo 11 sa 2,15 pri čemu je rezultat deljenja prikazan na slici 5–19. ... Dim A As Double A = 11 A /= 2.15 MessageBox.Show("Rezultat: " & A)...

Slika 5-19: Rezultat deljenja u neformatiranom obliku

Ovaj broj se može formatirati tako da prikaže samo dve decimale kao što je to na slici 5 – 20

Page 120: objektno orijentisano programiranje

Objektno orijentisano programiranje120

Slika 5-20: Rezultat deljenja u formatiranom obliku

Programska naredba koja ostvaruje rezultat aktiviranjem dugmeta je:… Dim A As Double A = 11 A /= 2.15

'prikaži bez formatiranja MessageBox.Show("Rezultat: " & A)

'prikaži formatirani rezultat MessageBox. Show("Rezultat: " & String.Format("{0:n2}", A))

...

U formatiranju brojeva koristi se metod String.Format, čiji zadatak je da formatira broj, koji će u konačnom 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 način kažemo 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 određeni način kako se to radi.

Kreiraćemo formu sa dve kontrole (slika 4–21)�. Jedna kontrola je polje za unos i dugme gde će se izvršiti sledeći kod pokretanjem programa:

Page 121: objektno orijentisano programiranje

Objektno orijentisano programiranje 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")

'prikaži MessageBox.Show(noviS)

End Sub

U prikazanom rezultatu na slici 5–21 vidimo da se promenio deo stringa i umesto Hello sad se nalazi Goodbye. Ključna reč je Replace pri čemu se traži prvi parametar i zamenjuje sa drugim. Ako se unese nešto drugo a ne definisani parametar „Hello“ za zamenu, koja je navedena u kodu, neće se ništa desiti. Odnosno prikazaće se kao rezultat smešten tekst u promenljivu noviS.

Slika 5-21: Zamena delova stringa

Page 122: objektno orijentisano programiranje

Objektno orijentisano programiranje122

5. 9 Rad sa Datumima

Kod datumskih formi upotrebljava se ključna reč za deklarisanje Date.

... Dim Datum As Date

Datum = Date.Now()

MessageBox.Show(Datum)...

Ovaj deo koda: Date.Now()� vratiće nam tekući datum i vreme, odnosno sistemsko vreme koje pokazuje računar. Zbog toga format i vremensko razdoblje prikazivanja podešavaju se sistemski.

Takođe postoji mogućnost formatiranja datuma i vremena. Možemo prikazati samo datum ili samo vreme i u različitim oblicima (slika 5–22 )�.

MessageBox.Show(Datum.ToLongDateString) (1)

MessageBox.Show(Datum.ToShortDateString) (2)

MessageBox.Show(Datum.ToLongTimeString) (3)

MessageBox.Show(Datum.ToShortTimeString) (4)

5-22: Različito formatirani prikazani datumi

Page 123: objektno orijentisano programiranje

Objektno orijentisano programiranje 123

Osim toga datumska promenljiva se može 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)�…

Slika 5-23: Prikaz delova datumske promenljive

Ovde ćemo još spomenuti upotrebu kontrole pomoću koje se može odabrati datum DateTimePiker. Unosi se u formu iz kutije sa alatkama (Toolbox-a)� i nudi oblik kao što to prikazuje slika 5–24. Ovo je zgodna alatka koja korisniku može pružiti mogućnost odabira bilo kog datuma iz palete ponuđenih.

Page 124: objektno orijentisano programiranje

Objektno orijentisano programiranje124

Slika 5-24: Upotreba kontrole za odabir datuma (DateTimePiker)�

Page 125: objektno orijentisano programiranje

6. OBJEKTNO ORIJENTISANO PROGRAMIRANJE

Objektno orijentisano programiranje (OOP)� je paradigma koja se zasniva na korišćenju objekata i njihovih interakcija pri dizajniranju aplikacije odnosno izrade računarskih programa.

Programerska tehnika u OOP uključuje sledeće:

■ sakrivanje informacija,

■ enkapsulaciju,

■ modularnost,

■ polimorfizam i

■ nasleđivanje.

Od nastanka prvih programskih jezika pristup u kreiranju logičkog rešenja problema nije se mnogo menjalo, ali uvođenjem objektno orijentisanog programiranja izrada aplikacija je značajno olakšana. Znači da iznalaženje rešenja izrade softvera na logičnom nivou još uvek ima korene u prvim danima nastanka ove naučne oblasti, ali i u primenjenim granama, međutim, razvoj alata je dovelo do unapređenja programerskog rada.

Objektno orijentisani alati se aktuelizuju 90-tih godina, iako začeci potiču još iz 60-tih uvođenjem objekata kao programskih entiteta. Do takvog razvoja dolazi usled konfrontacije programera sa sve složenijim

Page 126: objektno orijentisano programiranje

Objektno orijentisano programiranje126

hardverskim opremama i složenijim zadacima – što se odrazilo na kvalitet softverskih rešenja. Prvi projekat na kojem se susreću sa takvim kompleksnim problemom je izrada softvera za modelovanje kretanje brodova kroz prolaznu kapiju (rampu)� pod različitim uticajima. Tu se pokazuje eksplozivan broj mogućnosti uslova pod kojima brodovi mogu biti izloženi. Projektanti softverskog sistema dolaze na ideju da se brodovi klasifikuju kao objekti odnosno da se izvrši grupisanje brodova, pa se brodovi svrstavaju u klase. Pri tome formiran je model objekta sa kojim se može dalje eksperimentisati i izložiti ga raznim uticajima. Osnovna ideja je u suštini da se nađe rešenje modelovanja realnog okruženja.

Prema tome, karakteristika računarskih tehnologija je kontinualan razvoj kako hardverskih, tako i softverskih alata. Istraživači su tražili način da održe 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 dugačak vremenski period u proceduralnim jezicima.

Metodologija u OOP se fokusirala na podatke, a ne na procese tj. na kreiranju objekata koji sadrže sve informacije za manipulaciju sa sopstvenim podacima, nasuprot proceduralnim jezicima. Naglasak je na diskretnim jedinicama koje mogu ponovo da upotrebe logiku programiranja (nasleđivanje)�.

Šta je OOP?

OOP – je skup objekata koji se međusobno

povezuju u cilju da formiraju aplikaciju .

Pogodnosti objektno orijentisanog programiranja odražavaju se u lakom održavanju programskih kodova, u mogućnosti ponovne upotrebe kodova kroz enkapsulaciju i u mogućnosti proširivanja funkcionalnosti klase.

6. 1 Osvrt na MICROSOFT.NET FRAMEWORK

Visual Basic.Net je alat kojim se u ovoj knjizi demonstrira objektno orijentisano programiranje. Kao što je već spomenuto u knjizi ovaj alat je zasnovan na NET tehnologiji čiju osnovu čini Microsft.NET Framework. Cilj Microsoft korporacije je bio da stvori takvu programsku platformu

Page 127: objektno orijentisano programiranje

Objektno orijentisano programiranje 127

koja će omogućiti izradu aplikacija pod raznim Windows operativnim sistemima. Prepoznavajući značaj Interneta i njegov uticaj na programerski svet, u Microsoftu su odmah usmerili razvoj softverkih tehnologija u pravcu mrežnih aplikacija, Web aplikacija i Web servisa. Stvorena je platforma sa nizom funkcionalnosti ujedno nudeći široku lepezu alata obuhvaćenih pod istom kapom, a koja nadograđuje mogućnosti operativnih sistem.

Osnovna ideja je bila kako da se olakša rad programera, stoga, sadrži i veliki broj gotovih rešenja za razvoj aplikacija. Povoljnosti se pokazuju u primeni razvojnog okruženja u kome se izrađuje aplikacija, bilo da se radi pri lokalnim izvršenjem instrukcija ili mrežno, zatim u sigurnosti izvršenja 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 pruža programerima? Najjednostavnije rečeno, jednim delom izvršenja aplikacije upravlja platforma u .NET tehnologiji, odnosno .NET Framework , dok je sa ostalim delom izvršenja programskih kodova direktno zadužen centralni procesor. .NET Framework je složena arhitektura koja sadrži 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 mašine. To je koji sistem koji je zadužen i za izvršavanje i za upravljanje programskim kodovima u realnom vremenu.

Drugi deo .NET Framework-a je Framework Class Library (FCL)�. On je potpuno objektno orijentisan, jer sadrži ogroman skup klasa nezavisnih od programskog jezika. Suština objektne orijentisanosti je da putem upotrebe postojeće klase prenosimo funkcionalnosti na naše programske kodove – na novo kreirane klase. Upotreba klase nije ograničena samo na složene postupke, već putem njihove primene obavljamo i najbanalnije zadatke kao što su pristupi datotekama, upravljanje stringovima, rad sa kolekcijama i slično.

Kako .NET Framework funkcioniše šematski je ilustrovan na slici 6–1.

Kao što je već dosada spomenuto u knjizi, aplikacije se kreiraju pomoću programskih jezika, a potom se interpretiraju i prevode na mašinski jezik.

Page 128: objektno orijentisano programiranje

Objektno orijentisano programiranje128

U trećem poglavlju je objašnjenje funkcionisanja računara uprošćeno, ali su suštinske funkcije istaknute. Sada ćemo otići malo dalje i udubiti se u princip .NET izrade aplikacije. Pošto se radi o programiranju pomoću alata .NET postupak prevođenja i uloga operativnog sistema je malo složenija.

Slika 6-1: Ilustracija funkcionisanja .NET Framework-a

U izradi .NET aplikacije izvorni kod se kreira pod .NET platformom. Programske instrukcije se neminovno pretvaraju u binarni oblik (mašinski kod)� da bi računar 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 poštuje pravila Common Language Specifications (CLS)�. Ova pravila su važna zbog toga što se aplikacija može kreirati u bilo kom programskom jeziku. Pošto svaki jezik ima svoje specifičnosti, CLS pravila obezbeđuju kompatibilnost sa .Net Framework-om i interoperabilnost među aplikacijama.

Uporedo sa kompajliranjem na MSIL formiraju se Meta podacima koji će pružiti informacije o elementima, klasama, referencama itd. neophodnih za izvršavanje instrukcija koje obavlja Common Language Runtime (CLR).

Zatim se Common Language Runtime (CLR) stara o stabilnosti i funkcionalnosti aplikacije na osnovu pronađenih meta podataka, dok je za prevod izvornih instrukcija u mašinskom kodu zadužena komponenta Just in Time (JIT)�. Kao što i samo ime kaže proces prevođenja ove komponente se odvija u realnom vremenu. CLR u suštini predstavlja izvršno okruženje. To je sloj koji se nalazi između operativnog sistema i aplikacije kreirane pomoću nekog od .NET programskog jezika.

Page 129: objektno orijentisano programiranje

Objektno orijentisano programiranje 129

Da sumiramo ulogu .NET platforme u kreiranju aplikacije. Karakteristično je da se aplikacije pod ovom platformom mogu izraditi u bilo kom programskom alatu: J#, C#, VB.Net itd. (slika 6–2)�. Zatim će CLR prevesti izvorne programske kodove na mašinski jezik. Međutim, prevođenje nije tako neposredno i jednostavno, jer CLR ne poznaje nijedan programski jezik. On isključivo tumači i izvršava naredbe u MSIL-u. Zbog toga se najpre prevodi programski jezik u MSIL pomoću IL (Intermediat Language)� kompajlera i zatim na osnovu MSIL naredbi CLR prevodi na mašinski jezik.

Slika 6-2: Prevođenje instrukcija u .NET tehnologiji

6.2 Objekti

Iako izraz objektno orijentisano zvuči veoma bombasto i zastrašujuće, danas se smatra da ta tema nije tako strašna kao pre nekih petnaest godina.

U cilju da razjasnimo šta je koncepcija objektne orijentisanosti počećemo od objašnjenja šta je objekat.

Page 130: objektno orijentisano programiranje

Objektno orijentisano programiranje130

Objekat – je sve ono što nas okružuje. Može biti recimo bicikl, lampa, radio, pas, korisnički izveštaji – znači, bilo šta iz našeg okruženja.

Uvođenjem objekata mnogo se pojednostavio rad programera, jer su objekti pretvorili softversko inženjerstvo u nešto konceptualno slično drevnim gradivnim blokovima. Koncept izrade programa putem proceduralnih jezika čine pisanje gradivnih blokova po određenom redosledu. Slična je postavka i u objektno orijentisanom pristup izrade aplikacija. U cilju da se formira celina od sume objekata oni se aranžiraju po određenom redosledu.

Objekti su veoma korisni. Njihova snaga je u tome da ih može koristiti i onaj ko ne razume kako su sastavljeni. Suština je da možemo kreirati objekat, tražiti od njega da nešto uradi, ali mi ne moramo znati kako njegovi unutrašnji delovi to obavljaju. Objašnjenje samog koncepta upotrebe objekata u literaturama se često svodi na analogiju sa funkcionisanjem televizora kao što to ilustruje slika 6–3 .

Korisnika interesuje koji je taj ”objekat” (TV)�, koje je to trenutačno stanje (koji kanal gleda)� i koje ponašanje ispoljava (promena kanala)� odnosno prelazak iz jednog stanja u drugi.

Slika 6-3: Analogija upotrebe objekata sa upotrebom TV

Page 131: objektno orijentisano programiranje

Objektno orijentisano programiranje 131

Prema tome osobenost softverskih objekata pokazuju se u sledećim karakteristikama:

■ identitet,

■ stanje i

■ ponašanje.

Da bi se bolje razjasnio rad sa objektima ilustrovaćemo to na još dva primera.

Uzmimo na primer mačku. Mačka je objekat za koje treba utvrditi stanje i ponašanje.

Identitet objekta je Mačka, koje može imati stanje {ime, boja,glad,...} i ispoljiti ponašanje {mijauče, maše repom, umiljava se,... }.

Drugi primer objekta može biti bicikl. Identitet objekta je bicikl. Sada ostaje da se utvrdi stanje i ponašanje tog objekta. Stanje opisuje sledeći skup svojstava:

Stanje = {trenutna brzina, trenutni položaj pedale, trenutno stanje menjača}, dok se za ponašanje može navesti sledeći skup:

ponašanje={promena brzine, promena položaja pedale, kočenje}.

Prema tome, osnovna pitanja koja se postavljaju pri kreiranju objekta su:

■ koja su moguća stanja objekta koji on može imati i

■ koje moguće ponašanje će on ispoljiti?

Što smo na prethodnim primerima i pokazali reprezentujući način razmišljanja u objektno orijentisanom programiranju.

Da bi objekat u aplikaciji imao ove karakteristike mi moramo to nekako saopštiti računaru, moramo ispoljiti na neki način uticaj. U suštini na objekte utičemo kroz METODE i SVOJSTAVA (slika 6–4)�.

Ovo su sada novi pojmovi koje ćemo sada da razjasnimo:METODE – za njih možemo reći da je to nešto što zadajemo objektu da radi, aSVOJSTVIMA – se opisuju osobine objekata.

Page 132: objektno orijentisano programiranje

Objektno orijentisano programiranje132

Objekat pohranjuje svoje stanje u polja (ili kako u nekim programskim jezicima to nazivaju: VARIJABLAMA) i iskazuju svoje ponašanje kroz metode.

Slika 6-4: Ilustracija uticaja na objekte

Svaki objekat je sposoban da prima podatke, obrađuje ih i da pošalje podatke drugom objektu. To znači da struktura podataka ima tendenciju da nosi svoje operatore sa sobom (ili u najmanju ruku da ih nasledi od nekog sličnog objekta)�. To je velika razlika u odnosu na konvencionalni pristup programiranja, gde se podaci i ponašanje posmatraju zasebno.

6. 3 Enkapsulacija

Enkapsulacija je osnovni princip na kome se zasniva objektno orijentisano programiranje. Opet jedna ”krupna” reč sa kojom se susrećemo. U osnovi se radi o veoma jednostavnoj stvari.

U čemu je suština? Jednostavnijim jezikom rečeno dolazi do ”sakrivanja” unutrašnje logike objekta, ali stručnije objašnjenje je vezano za objekte i za njegove metode.

U prethodnom smo rekli da METODE rade sa objektovim unutrašnjim stanjem i primorani su za komuniciranje objekta sa drugim objektom. UNUTRAŠNJE STANJE se sakriva i sva interakcija među metodama objekata je enkapsulirana.

Enkapsulaciju možemo prezentovati analogijom dugmeta zasnovanog na principu crne kutije.

Osnovni princip je u tome da imamo jednu kutiju sa dugmetom (slika 6–5)�. Pritiskom na dugme ta kutija treba nešto da uradi. Naša uloga u tome je da povežemo kutiju sa nekim elementom da bi ona mogla da

Page 133: objektno orijentisano programiranje

Objektno orijentisano programiranje 133

izvrši svoju funkciju. Mi nemamo potrebe da znamo šta ona zapravo radi. Ono OSNOVNO ZNANJE što je potrebno da imamo je kako se kutija povezuje.

Slika 6-5: Analogija principa crne kutije sa objektom

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 Događaji

Iako se događaji retko razmatraju kada se objašnjava objektna orijentisanost, spomenućemo radi razjašnjenja šta je to.

Događajima određujemo kada će se nešto desiti u kontroli na obrascu. Smatra se da objekat zna šta će da uradi kada mu se zada događaj. Jedan od često korišćenih događaja je i događaj Click.

Događaj navodimo kada na odabranu kontrolu (Button)� stanemo i dvoklikom otvorimo uređivač koda (slika 6–6)�.

Slika 6-6: Događaj Click za kontrolu Button1

Page 134: objektno orijentisano programiranje

Objektno orijentisano programiranje134

Pojaviće se i deo funkcije gde možemo navesti šta će taj događaj da bude. Recimo da želimo da se obrazac zatvori kada se pritisne dugme (aktivira se kontrola Button na događaj 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.5 Apstrakcija objekata:vIDLJIvOST

Druga važna karakteristika koncepta objektno orijentisanih jezika je mogućnost apstrakcije objekata. Šta se pod tim podrazumeva je veoma jednostavno. Cilj je da objekti u dovoljnoj meri odražavaju deo realnog sveta koje prezentuju da bi bili jednostavni za korišćenje. Poenta je da razvijalac ne mora da zna tačno šta se izvršava u ”pozadini” objekta.

Ovde se radi o mogućnosti korisnika da upotrebi objekat bez zalaženja u neke detaljnije sfere programskih kodova. U odnosu na to delovi objekata mogu biti privatni ili javni. Privatne interfejse treba da razumete vi, dok javni interfejsi spadaju u domen razvijalaca koji koriste vaše objekte.

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. Pošto se radi o objektu, unutrašnjost je programski kod pisan u Visual Basic.NET-u. Sada dolazi do izražaja razumevanja kako rade unutrašnji 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 6–7)�.

Public Class Form1…End Class

Page 135: objektno orijentisano programiranje

Objektno orijentisano programiranje 135

Slika 6-7: Prikaz klase u editoru koda

Za prvi obrazac Form1 klasa započinje sa ključnom reči Public Class i završava se sa End Class označavajući kraj koda za tu klasu. Klasa definisana sa Public upućuje na to da je klasa pristupačna svim ostalim kodovima u aplikaciji.

U toku izrade aplikacije može se kreirati niz primera klase. Ako imamo n objekat imaćemo n primerak klase. Kada se pokrene aplikacija tada se od kreiranih klasa formiraju objekti. U suštini formiranjem primeraka klase stvaramo objekat. Da bismo na odgovarajući način koristili objekat mi moramo nekako i manipulisati sa njima. To se ostvaruje putem definisanja njihovih karakteristika i metoda.

Na primer možemo kreirati klasu BICIKL a da na osnovu njega formiramo razne objekte iste klase: sportski bicikl, muški bicikl, tandem bicikl i brdski bicikl. Pošto sva četiri objekta dele istu klasu – primeri su klase BICIKL – imaće iste karakteristike i metode kao klasa BICIKL.

U okviru ovog dela osvrnućemo se i na klasični primer objekta, a to je MessageBox. On pripada klasi (primerak klase)� System.Forms.MessageBox i deo je radnog okruženja.

Kada navedemo u programskom kodu sledeću naredbu:

Page 136: objektno orijentisano programiranje

Objektno orijentisano programiranje136

mi znamo da će se pokretanjem programa prikazati prozorčić u kome će se ispisati navedeni tekst ”Hello World!”. Mi jedino znamo da ćemo dobiti poruku, ali ne znamo ništa 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. Obično se primenjuju klase koje su već ugrađene u okruženje. U .NET-u postoji ogroman skup klasa pod nazivom Microsoft.NET Framework Classes. U ovakve objekte Framework-a spadaju objekti koji obezbeđuju funkcionalnost štampanja i funkcionalnost pristupa bazi podataka.

Sa druge strane postoje objekti koji se ne mogu naći u Framework-u. Recimo da treba da izradimo račun za korisnike i da ih doštampamo.

Potrebni koraci su u tom primeru:

U ovom primeru objekti Korisnik i Račun ne postoje u Framework-u i njih treba da kreiramo.

Kreiranje klasa se odvija pomoću Solution Explorera za projekat koji razvijamo. Projekat je sačuvan pod nazivom Proba i za njega kreiramo klase tako što na naziv objekta stanemo pokazivačem i klikom na desni taster dodamo novu klasu (Add>New Item)�. Aktiviranjem New Item prikazaće se Template prozor kao što prikazuje slika 6–8. Korisniku se tada

Page 137: objektno orijentisano programiranje

Objektno orijentisano programiranje 137

nudi da odabere stavku koju hoće da kreira. Može da kreira novu formu, dijalog, klasu itd. U ovom primeru odabraćemo Class iz Template prozora i kreirati klasu pod nazivom Klasa1. Neophodno je izmenjati naziv klase od ponuđenog i dati novi naziv (kao i kod kontrola)� zbog toga što posle nekoliko meseci nećemo znati šta je Class 1. Kreirana klasa će se pojaviti u obliku kao što to prikazuje slika 6–9.

Slika 6-8: Kreiranje nove klase

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 može se primeniti u različitim klasama, što je pojednostavilo izradu aplikacija.

Page 138: objektno orijentisano programiranje

Objektno orijentisano programiranje138

Slika 6-9: Prikaz nove klase u aplikaciji

Slika 6–10 prikazuje dodavanje podrutine ispod Public Class Form1. Kao što se vidi podrutina Sub dodavanje je podvučeno, što upućuje na grešku.

Slika 6-10: Uvođenje podrutine izvan klase

Da bismo izdvojili ovu proceduru i smestili u modul, treba prvo da kreiramo taj modul. Postupak kreiranja modula je identičan kreiranju klasa, a zatim dodajemo programske linije za dodavanje broja 10 između Module Module1 i End Module:

Module MojModule Public Sub dodavanje(ByVal broj As Integer) Dim A As Integer A = broj + 10 MessageBox.Show(A)

End SubEnd Module

Page 139: objektno orijentisano programiranje

Objektno orijentisano programiranje 139

U svrhu upoznavanja primene modula vratićemo 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 prikazaće se poruka kao na slici 6–11.

Kreirana klasa i modul prikazivaće se na jednoj traci iznad editora kod-a, što daje mogućnost kretanja kroz datoteke, jer su oni unutar svoje datoteke.

Slika 6-11: Rezultat obrade podataka procedure Sub dodavanje

6. 6.2 Mogućnost ponovnog korišćenja koda

Prethodno izloženo nas dovodi do jedne druge izuzetno značajne oblasti objektno orijentisanog programiranja a to je mogućnost ponovnog korišćenja koda.

Ilustrovaćemo to na sledeći način. Imamo tri različite aplikacije da kreiramo, s tim da svaki od njih radi nešto sa korisnicima: jedna prikazuje račun korisnika, drugi služi za registrovanje novog korisnika, a treći za evidenciju žalbi.

Kao što se samo od sebe nameće, rešenje ovde postoji, mogućnost da se primeni ista klasa objekata (klasa Klijent)� u različitim projektima.

Jednom kreirana klasa se može iskoristiti u drugim aplikacijama pozivanjem iste klase. Ali u nekim slučajevima neophodno je kreirati klasu

Page 140: objektno orijentisano programiranje

Objektno orijentisano programiranje140

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 ništa više, a to je ono što treba da uvažimo.

6. 7 Funkcije (Potprogrami, procedure , podrutine)Aplikacije koje se kreiraju za razne potrebe obično zahtevaju složene

programske kodove. Osim složenosti programa često se dešava da se neki delovi programskog koda ponavljaju više puta. Pojednostavljenje izrade aplikacije omogućuje primena podprograma. Oni se pojavljuju kao funkcije i predstavljaju niz zasebnih logičkih celina. Uopšteno funkcija je blok koda koji nešto radi: otvaranje datoteke, štampanje izveštaja, prikazivanje podataka na ekranu itd. Pomoću funkcije možemo napisati programski kod za izvođenje neke operacije i pozivanjem te funkcije izvršavati ga na više mesta u programu neograničeno.

Povoljnosti pored eliminisanja suvišnih programskih instrukcija se pokazuju i u smanjenju pojave grešaka i u lakoći održavanja celokupne aplikacije. Aplikacija je mnogo preglednija, a programski kodovi se lakše čitaju.

Iz ovoga se može konstatovati da postoje dve značajne prednosti.

■ Prvo mogućnost da se aplikacija razgradi na posebne logičke celine čineći program razumljivijim, jasnijim i

■ drugo, da se zatim ti programski blokovi upotrebe za izradu neke druge aplikacije tj. promovišu ponovno korišćenje koda

U Visual Basic.NET-u široko se primenjuju funkcije i razlikujemo ih po tome da li vraćaju vrednosti u svom imenu ili ne.

Osnovni princip funkcionisanja funkcije je da na osnovu ULAZNIH VREDNOSTI i informacija iz okruženja nešto urade. Ako kažemo da dajemo informaciju funkciji, mi joj u stvari predajemo podatke. Podaci su opisani kao parametri. Funkcija će se izvršiti ako je aktiviramo odnosno ako je pozovemo.

Drugim rečima: ”Mi pozivamo funkciju i predajemo joj podatke kao parametre.”

Page 141: objektno orijentisano programiranje

Objektno orijentisano programiranje 141

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

Podprogramske procedure (funkcije)� su Sub procedure. One su deo programskog koda koje se izvršavaju kao odgovor na neki događaj. Karakteristično je da kod obavljanja nekog zadatka ne vraćaju vrednost u svom imenu samo u nekoj promenljivoj, što će biti kasnije detaljnije analizirano.

Postupak izrade procedure zasniva se na njenom deklarisanju.

U opštoj formi procedura izgleda ovako:

Procedura Sub počinje sa službenom reči 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 može deklarisati tako da se ona može pozivati bilo gde u aplikaciji. Takve procedure su procedure opšte namene (general procedure)� i po pravilu su tipa Public. Suština njihovog kreiranja je

Page 142: objektno orijentisano programiranje

Objektno orijentisano programiranje142

mogućnost izvođenja iste akcije u različitim procedurama događaja (event procedurama)�. Takav primer smo videli u okviru razmatranja modula.

Ključna reč Sub ukazuje da se radi o funkciji/proceduri koja ne vraća vrednost i skraćenica je od reči Subroutine. Inače funkcije koje ne vraćaju vrednost u Visual Basic.NET-u se zovu METODE.

Najznačajnija stvar u vezi izrade kvalitetne aplikacije je dobra strategija programiranja. Pod tim se podrazumeva postavljanje zajedničkih izraza u odvojenu proceduru (procedure opšte namene)� i omogućavajući time njihovo pozivanje u procedurama događaja.

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 prosleđuju se argumenti toj proceduri. Prosleđeni argumenti su promenljive, koje sačinjavaju neophodnu informaciju o stanju aplikacije. Na osnovu ove informacije programski kod obavlja svoj zadatak.

Razlikujemo pozivanje procedure:

■ po prosleđenoj vrednosti ili

■ po prosleđenoj referenci.

Pozivanjem procedure po prosleđenoj referenci (ByRef)� daje se pristup stvarnom sadržaju promenljive na mestu njene memorijske adrese. To znači da vrednost promenljive može biti trajno promenjena i svaka izmena te promenljive se prosleđuje nazad u proceduru koja je uputila poziv.

Da bi se to izbeglo u deklarisanju procedure koristimo ByVal u listi argumenata. Na ovaj način prosleđuje 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 navođenjem ključne reči CALL i naziva funkcije.

Kako se primenjuju procedure Sub videćemo na sledećem primeru.

Pokrenemo novi projekat i na formu unesemo jedno polje za tekst (textbox) i jedno dugme. Zadatak je da se aktiviranjem dugmeta javi greška pri unosu u slučaju da krajnji korisnik nije ništa ukucao ili ako je

Page 143: objektno orijentisano programiranje

Objektno orijentisano programiranje 143

ukucao prazne karaktere. U izradi aplikacije takva ograničenja se često upotrebljavaju zbog toga da korisnici ne unose sve i svašta u skladište podataka.

Programski kod koji dodajemo na nivo celokupne klase Form1 je sledeći: Public Class Form1 Private Sub Greska()

Dim podatak As String podatak = Trim(TextBox1.Text)

If podatak = "" Then MsgBox("Molim ponovite unos") End If End Sub --------------------------------------------------------------- End Class

Kao što vidimo procedura je definisana kao Private što znači da samo ”ova forma je može 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 ništa uneto.

Tako jednom napisana procedura se može pozivati više puta. Pozivanje se vrši na sledeći način: 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

Page 144: objektno orijentisano programiranje

Objektno orijentisano programiranje144

MsgBox("Molim ponovite unos") End If End Sub End Class

6. 7. 3 Funkcijske procedure

Funkcijske procedure ili jednostavnije samo funkcije su funkcionalno slične procedurama Sub. Jedina razlika je u tome što one uvek vraćaju vrednosti u svom imenu. Sintaksa funkcijske procedure je sledeća:

Funkction imefunkcije (argumenti) As Tip

naredbe

End Function

Kod deklarisanja funkcije potrebno je navesti ime funkcije koju ćemo pozivati. Funkcije se obično primenjuju za izračunavanja, pa se za dobijene rezultate navodi tip podatka pomoću opcije ”As Tip”. Kao i kod procedure Sub i ovde postoji mogućnost navođenja argumenata koje koristi funkcija. Argumenti se navode u zagradama. I u proceduri Sub i u funkcijama se može navesti više argumenata ali se oni onda razdvajaju zarezima.

Primer deklarisanja funkcije za izračunavanje površine kruga:

Ova funkcija koja je ovde data za primer može se dalje primeniti u aplikaciji.

Između ključnih reči Function i End Function nalazi se telo funkcije koje se izvršava samo kada je funkcija pozvana, a parametar funkcije je radius definisan prenosom parametara po vrednosti (ByVal)�.

Page 145: objektno orijentisano programiranje

Objektno orijentisano programiranje 145

Ključna reč koja se primenjuje za vraćanje funkcije odakle je pozvana je return.

Ovu funkciju možemo 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 sadržati površinu kruga. Zatim podešavamo da se vrati promenljiva koja sadrži neku vrednost RacPovrsinuKruga(100),gde je u zagradi naveden vrednost parametra (100)�.

U principu mi smo pozvali funkciju koja treba da izračuna po prethodno definisanom kodu površinu kruga i vratiće rezultat sa naredbom Return.

6. 7. 4 Nazivi funkcija

Obično se u sferi programiranja primenjuju određeni standardi u korišćenju naziva stvari. U .NET-u ima nekoliko vrsta standarda:

■ Pascal konvencija imenovanja

Primer: RacPovrsinuKruga

Po ovom standardu svaka reč navedena u nazivu FUNKCIJE počinje 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 slično je sa Pascal-ovom konvencijom, sa tim da se prva reč navodi sa malim slovima.

(Napomena: Visual Basic.NET ne razlikuje mala i velika slova (MOJRACUN=mojRacun)).

Page 146: objektno orijentisano programiranje

Objektno orijentisano programiranje146

6. 7. 5 Analiza primene parametara u procedurama

Kreiraćemo aplikaciju za sabiranje dva broja pomoću funkcije. Kada se pritisne dugme Odgovor, treba da se pojavi poruka sa rezultatom sabiranja.

Da bismo realizovali zadatak potrebno je da nanesemo na formu sledeće:

■ 2 polja za tekst čija će svojstva Name biti txtPrvi i txtDrugi

■ i dugme btnOdgovor

U editoru koda unećemo svoju proceduru i to između 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 definišemo unutar procedure Sub i to kod definisanja procedure: Private Sub Sabiranje(ByVal prvi1 As Integer, ByVal drugi1 As Integer)

Page 147: objektno orijentisano programiranje

Objektno orijentisano programiranje 147

One predstavljaju parametre (prvi1 As Integer) definisane kao celobrojne vrednosti u ovom primeru, a koje prosleđujemo proceduri Sabiranja. U njih smeštamo 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 SubEnd Class

Ovaj primer je ilustrovao prosleđivanje po vrednosti - ByVal, a u narednom ćemo videti primenu prosleđivanja parametara po referenci - ByRef i ukazati na razlike između njih.

Razlika između njih je da u prvom slučaju prosleđujemo samo kopiju promeljive (kako smo to već jednom prethodno objasnili)�, a drugom slučaju baratom direktno sa promenljivom. Sada ćemo to neposredno demonstrirati na jednom primeru.

Page 148: objektno orijentisano programiranje

Objektno orijentisano programiranje148

Pokrenemo novi projekat i nanesemo dugme za formu na koji ćemo dodati sledeći 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 znači 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 povećati za 1. ByVal broj1 As Integer ByRef broj1 As Integer

Private Sub RastucaPromenljiva(ByRef broj1 As Integer) broj1 = broj1 + 1 End Sub

6. 8 Nasleđivanje

Različiti objekti mogu imati zajednička svojstva ali imaju i nešto što samo njih karakteriše. Onda, jednostavno rečeno, nasleđivanje znači kreiranje objekata koji imaju nešto što ima drugi objekat, ali imaju nešto i sopstvenih delova. U suštini se proširuje funkcionalnost objekata, i ne zahteva se da potpuno razumemo kako unutrašnji delovi rade.

Objektno orijentisano programiranje dozvoljava klasama da naslede naj uobičajeno ponašanje i stanje. Recimo da je Bicikl klasa od koje mogu ostale klase da naslede osnovne karakteristike, što su trkački bicikl, obični bicikl i tandem (dvosedni biciklovi)�.

Page 149: objektno orijentisano programiranje

Objektno orijentisano programiranje 149

Konkretna realizacija nasleđivanja odvija se tako što se prvo kreira klasa na primer Bicikl i iz njega će da sledi klasa Sportski bicikl (Slika 6–12)�.

Kreiranje klase Bicikl: (dodavanjem Add Class pod imenom Bicikl)� Public Class Bicikl

Public Color As String Public BrSedista As Integer Public Pedale As String

End Class

Sledi kreiranje objekta Sportski Bicikl koji će biti nasleđen od klase objekata Bicikl, i to tako što u Sportskibicikl.vb dodajemo programski kod sa ključnom reči inherits: Public Class Sportskibicikl

Inherits Bicikl Public Menjac As Integer

End Class

Slika 6-12: Ilustracija principa nasleđivanja svojstava i metode objekata

Page 150: objektno orijentisano programiranje

Objektno orijentisano programiranje150

6. 9 Polimorfizam

Ovaj izraz potiče iz grčke reči, čije značenje je ”mnogo formi”. Sam naziv reflektuje princip u objektno orijentisanom programiranju da se objekat može ponašati kao drugi objekat. Objekat se može tretirati kao da je druga vrsta objekta.

U prethodnom primeru smo videli da je Sportski bicikl nasledio svoja svojstva od klase objekta Bicikl. Takođe održava i osnovno ponašanje objekta Bicikl. Pozivanjem metode iz Bicikla, da bismo prikazali šta on radi. Znači da Sportski Bicikl takođe mora biti implementiran u metod.

To važi samo ako je Sportski Bicikl nasleđen iz Bicikla – tj. nije posebno definisan. Onda testiranjem Sportskog Bicikla možemo da testiramo i ponašanje objekta Bicikl. (Obrnuto ne važi: Sportski Bicikl ne odražava sve karakteristike Bicikla)�.

Čemu ovo služi? Pa da pojednostavi aktivnosti onoga koji kreira program. Značaj, naravno, dolazi do izražaja kod složenih i kompleksnih aplikacija.

6. 10 Programska naredba u visual Basic-u

Svaki programski jezik ima svoju sintaksu po čemu nije izuzetak ni Visual Basic.Net. U oblasti računarstva pod sintaksom se podrazumeva pravilo pisanja programskih naredbi, a koju prepoznaje prevodilac datog programskog jezika. Sintaksa Visual Basic-a obuhvata kombinaciju ključnih reči, svojstava, funkcija, operatora itd.

Potpunu programsku naredbu može predstavljati i jedna reč, na primer za završetak aplikacije se koristi ključna reč (naredba)� END, Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

End

End Sub

ali je najčešće sastavljena od različitih elemenata kao što to prikazuje i sledeći primer:

Page 151: objektno orijentisano programiranje

Objektno orijentisano programiranje 151

Ova naredba podešava svojstvo objekta myProba. Operator dodele vrednosti je znak jednakosti. Pored ovog operatora pojavljuje se i tačka kao operator povezivanja elemenata. Tačka se upotrebljava za povezivanje svojstva, metode, kontrole, forme i kod dodeljivanja vrednosti nekoj promenljivoj.

U programskim naredbama naićićemo i na znak uzvika (!)�, koja ukazuje da je određeni elemenat (objekat)� član nekog niza.

Page 152: objektno orijentisano programiranje
Page 153: objektno orijentisano programiranje

7. RAD SA PODACIMA

U računarskoj tehnici često se stvaraju skupovi podataka. Skupove podataka sačinjavaju elementi istog tipa. Shodno tome oni se pohranjuju u polja sa istim svojstvima. Za njih kažemo da su indeksirani ako su poređani po određenom redosledu.

Elemente nekog skupa možemo poređati u:■ NIZ – pri čemu dobijamo vektor;■ TABELU – čime se formira matrica ili ■ VIŠE TABELA – stvarajući blokove.

Vektori i matrice upotrebljavaju se u mnogim naučnim disciplinama. Pogotovu su zastupljene tehničke oblasti, po čemu nije izuzetak ni računarska tehnika. U izradi aplikacija značajnu ulogu ima programiranje struktura podataka, te su ove strukture podataka ugrađene u svakom programskom jeziku.

7. 1 vektori

Neka nam je dat skup sa n elemenata. Ako elemente tog skupa poređamo po određenom redosledu nastaće vektor V. Naziv vektora V označava skup svih elemenata. Na elemente ukazuju naziv vektora i njegov indeks. Indeks je redni broj elementa u nizu, gde je

ni ≤≤1 .

Tada elemenat vi označava elemenat v sa rednim brojem i. Po tome je prvi elemenat v1, drugi elemenat v2, itd. Jednostavnije rečeno na elemente

Page 154: objektno orijentisano programiranje

Objektno orijentisano programiranje154

vektora se pozivamo nazivom vektora i njegovim rednim brojem (indeksom).

Pored ovih obeležja vektor poseduje dimenziju. Dimenzijom se izražava broj elemenata u nizu – broj elemenata vektora.

Ovo najjednostavnije objašnjava ilustracija na slici 7–1.

Slika 7-1: Ilustracija vektora sa prikazom njegovih obeležja

Vektore zovemo još i jedno indeksnim veličinama, jer su elementi vektora određeni samo sa jednim indeksom.

U zavisnosti od toga od kakvih elemenata je sačinjen niz, vektori mogu biti:

■ brojčani (ako sadrže numeričke veličine)�ili

■ slovno brojčani (tekstualni)�.

7. 2 Matrice

Elemente nekog skupa možemo poređati i u obliku pravougaone tabele. Tada formiramo matricu koja ima m redova i n kolona:

qppp

q

q

aaa

aaaaaa

A

,2,1,

,22,21,2

,12,11,1

...

...

...

=

Naziv matrice označava skup svih elemenata u tabeli što je u ovom slučaju A. Elementi matrice određeni su nazivom matrice i rednim

Page 155: objektno orijentisano programiranje

Objektno orijentisano programiranje 155

brojem reda i kolone. Za razliku od vektora matrice imaju dva indeksa: i -indeks redova i j -indeks kolone. Dimenziju matrica određuje broj redova m i broj kolona matrice n .

I matrice mogu biti sa brojčanim i sa tekstualnim vrednostima.

Primer matrica sa brojčanim vrednostima ilustrovaćemo je putem primera proizvodnje kancelarijskih stolica. Pri tome za svaku vrstu stolica formiramo jedan vektor. Ako želimo da izrazimo normu materijala (potrebnu količinu)� za različite vrste stolica, tada imamo matricu oblika kao na slici 7–2.

Slika 7-2: Matrica sa brojčanim vrednostima

Pri tome imamo vektore redova (niz elemenata određenog reda)� i vektore kolona (niz elemenata određene kolone)�.

U slučaju da nas interesuje količina plastike za treću vrstu stolice tada nam na to ukazuje vrednost elementa matrice koja se nalazi u trećem redu i u četvrtoj koloni.

7. 3 Nizovi u visual basic.Net-u

Nakon izlaganja šta su nizovi sa matematičkog aspekta možemo krenuti sa upoznavanjem rada sa strukturama podataka u okviru Visula Basic.NET-a.

Svrha primene niza je da se liste sličnih podataka mogu čuvati programski.

Page 156: objektno orijentisano programiranje

Objektno orijentisano programiranje156

Prvi korak u primeni niza je njegovo definisanje, pri čemu kreiramo promenljivu koja ima više dimenzija.

Na ilustraciji ispod teksta prvo je prikazan način deklarisanja promenljive u koju možemo smestiti samo jednu vrednost. Ali ako postoji skup podataka sličnih vrednosti, onda je mnogo zgodnije smestiti ih u istu promenljivu.

Na pitanje šta je niz, najjednostavnije formulisano možemo reći da je to promenljiva koja sadrži više podataka istovremeno.

Sada ćemo videti na jednostavnom primeru kako se izgrađuje niz u Visual basic.Net-u.

U novo otvorenom projektu prikazaćemo imena naših prijatelja. Za izradu ove aplikacije koristićemo dugme pod nazivom btnPrikazi i na kom će stajati tekst za korisnika ”Prikaži”. Za prikaz podataka upotrebićemo kontrolu ListBox pod nazivom lstPrijatelji. Ove kontrole ćemo naneti na formu (slika 7–3)�.

Slika 7-3: Kreiranje forme za prikaz liste prijatelja (niza)� sa potrebnim kontrolama

Page 157: objektno orijentisano programiranje

Objektno orijentisano programiranje 157

Nakon izrade obrasca, dodavanja kontrole, ostalo je još i da saopštimo računaru kako da obavi svoj zadatak. Za to je potrebno da dodamo sledećih nekoliko redova programskih naredbi za događaj 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) = "Marija" Prijatelji(1) = "Miša" Prijatelji(2) = "Aleksa" Prijatelji(3) = "Petar" Prijatelji(4) = "Ceca"

'dodaj Aleksa listi lstPrijatelji.Items.Add(Prijetelji(2))

End Sub

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 navođenje dužine u zagradama. Pošto želimo da smestimo pet imena prijatelja u promenljivu, navodimo broj 4. Ovaj broj je broj indeksa i u Visual Basic.Net-u počinje sa nulom (0,1,2,3,4)�. Sada još treba da kažemo kojim tipom podataka ćemo da radimo. U ovom slučaju pravimo niz od imena prijatelja, pa će promenljiva biti tipa stringa. Tada kažemo da smo definisali tekstualni niz veličine 5.

Elementima niza pristupamo putem indeksa, a stavke se podešavaju sledećim naredbama:

Prijatelji(0) = "Marija" Prijatelji(1) = "Miša" Prijatelji(2) = "Aleksa" Prijatelji(3) = "Petar" Prijatelji(4) = "Ceca"

Indekse koristimo i za vraćanje – pronalaženje – traženog podatka. U ovom primeru rekli smo da vrati podatak za indeks 2 i to sledećim redom:

Page 158: objektno orijentisano programiranje

Objektno orijentisano programiranje158

lstPrijetelji.Items.Add(Prijatelji(2))

Rezultat toga je ispisivanje podatka u Listbox-u (slika 7–4)�. Na ekranu se pojavljuje jedno ime.

Međutim, kada radimo sa nizom podataka, uglavnom želimo da se prikaže cela lista a ne jedno ime. Takav prikaz se elegantno rešava uvođenjem procedure Sub i primenom strukture For, Each ...Next petlje. Ona se intenzivno koristi kod nizova.

Slika 7-4: Prikaz ekrana kada se pokrene program za prikaz imena prijatelja

Za demonstraciju ovog problema upotrebićemo prethodni primer. Dodaćemo Sub proceduru pod nazivom ”Dodaj” u kome ćemo proslediti parametar po referenci. Unutar procedure navodimo For, Each ...Next petljuPublic 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) = "Marija" Prijatelji(1) = "Miša" Prijatelji(2) = "Aleksa" Prijatelji(3) = "Petar" Prijatelji(4) = "Ceca"

'dodaj sve prijatelje listi Call Dodaj(Prijatelji)

End Sub-------------------------------------------------------

Page 159: objektno orijentisano programiranje

Objektno orijentisano programiranje 159

Private Sub Dodaj(ByVal prijatelji() As String) 'pregledaj svakog prijatelja

Dim imePrijatelja As String For Each imePrijatelja In prijatelji

'dodaj svakog listi lstPrijatelji.Items.Add(imePrijatelja) Next

End SubEnd Class

Sub procedura se koristi sa nizom parametra prijatelji tipa Tu se nalaze sva imena navedena u nizu. Nakon toga deklariše se promenljiva pomoću koje se pregledava svaki podatak i dodaje se listi.

Umesto reda

lstPrijatelji.Items.Add(Prijatelji(2))

procedura se poziva sa naredbom Call – delom koji je osenčen u programskom kodu.

7. 4 Sortiranje i pretraga nizova

Pod sortiranjem elemenata niza podrazumeva se ređanje elemenata po rastućem ili opadajućem redosledu. Sortiranje predstavlja jednu važnu i veoma često primenjivanu tehniku u programiranju, jer je usko povezan sa tehnikom pretraživanja nizova. Pretraživanje znači pronalaženje elementa u nizu koji zadovoljava određeni definisani kriterijum.

U praktičnoj primeni nizovi su veoma različiti, ali uvek sadrže konkretne podatke. Oni mogu sadržati ime, prezime lica, njihove adrese, itd. Pronalaženje određenog elementa, u konkretnom postupku pronalaženje npr. nečije adrese tako što nam je dato ime osobe, znači pretragu tog niza. U tom slučaju veoma je korisno poređati elemente po različitim ali adekvatnim kriterijumima.

U Visual Basic.NET-u nizovi su smešteni u klasi System.Array. Na klasu primenjujemo metod Sort, a pošto smo u prethodnom primeru imali Stringove za nazive prijatelja sortiraće ih abecedno. Na ekranu će se prikazati rezultat obrade kao na slici 7–5.

Page 160: objektno orijentisano programiranje

Objektno orijentisano programiranje160

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

Slika 7-5: Prikaz liste imena sortiranih po opadajućem redosledu

7. 5 Strukture

Na neki način možemo reći da su strukture vrednosni tipovi. U principu su veoma slične klasama i obično se koriste kada ne primenjujemo puno metoda u aplikaciji. U suprotnom koristimo klase.

Kreira se kao klasa, ali se menjaju ključne reči Class u Structure i End Class u End Structure.

Kreiraćemo jednu novu aplikaciju za evidentiranje telefonskog imenika klijenata, što će biti osnova za objašnjenje primene strukture. U uređivaču koda dodajemo prvo klasu Klijent, koja će postati struktura pomoću navedenog koda kao što je prikazano na slici 7–6.

Public Structure Klijenti

'članovi Public Prezime As String Public Ime As String

Umetnut je red programske linije za sortiranje

Page 161: objektno orijentisano programiranje

Objektno orijentisano programiranje 161

Public Adresa As String Public Telefon As String

End Structure

Slika 7-6: Kreiranja i primena strukture u aplikaciji

Zatim dizajniramo obrazac za prikaz podataka kao što je na slici 7–7. Dodajemo sledeće kontrole i podešavamo svojstva:

Vrsta kontrole Naziv kontrole Svojstvo Text

4 polja za tekst

txtPrezime

txtImetxtAdresaTxtTelefon

5 polja za prikaz teksta

lblPrezime Prezime

lblIme Ime

lblAdresa Adresa

lblTelefon Telefon

Label1 TELEFONSKI IM-ENIK

Dugme btnUnos UNOS

Page 162: objektno orijentisano programiranje

Objektno orijentisano programiranje162

Slika 7-7: Obrazac za prikaz podataka o klijentima

Posle u editoru koda dodajem na događaj 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 = "Tošič" probaKlijent.Ime = "Ivana" probaKlijent.Adresa = "Cara Dušana 34" probaKlijent.Telefon = "011-2345-345"

'prikaz novog klijenta PrikazKlijenta(probaKlijent)End Sub----------------------------------------------- Public Sub PrikazKlijenta(ByVal klijent As Klijenti) 'ažuriranje polja txtPrezime.Text = klijent.Prezime txtIme.Text = klijent.Ime txtAdresa.Text = klijent.Adresa txtTelefon.Text = klijent.Telefon

End SubEnd Class

Kada startujemo aplikaciju ispisaće se podaci o klijentu što smo definisali u programskom kodu.

Page 163: objektno orijentisano programiranje

Objektno orijentisano programiranje 163

Takođe, slično klasama, i strukturama možemo dodati i svojstva. U ovom primeru dodaćemo kod koji je osenčen u Klijent.vb, a koji prikazuje prezime i ime klijenta unetog u telefonski imenik:Public Structure Klijenti 'članovi Public Prezime As String Public Ime As String Public Adresa As String Public Telefon As String

Public ReadOnly Property CeloIme() As String Get Return Prezime & " " & Ime End Get End Property

End Structure

Sada je ostalo da dodamo kod proceduri PrikazKlijenta (slika7–8):txtCeloIme.Text = klijent.CeloIme

Slika 7-8: Upotreba svojstva strukture

Page 164: objektno orijentisano programiranje

Objektno orijentisano programiranje164

Na slici 7–8 vidimo da se pojavljuje spisak definisanih elemenata strukture stavljanjem tačke 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

Slika 7-9: Rezultat primene svojstava strukture

7. 6 Kolekcije

Visual Basic.NET radi i sa posebnim konstrukcijama – KOLEKCIJAMA. One spadaju u Framwork-ove klase i nude određene pogodnosti u odnosu na rad sa nizovima. Njih čini skup informacija sačuvanih u nekoj listi, a koje su u nekom odnosu. Njihova primena je mnogo zgodnija sa aspekta programera, jer pruža veću fleksibilnost u manipulisanju programa, kao na primer brisanje stavke iz niza, zamena postojećeg elementa u nizu i slično.

Demonstriraćemo primenu kolekcije na osnovu prethodnog primera modifikacijom postojećeg koda.

Prvo ćemo preraditi obrazac iz prethodnog primera dodavajući jedan LixtBox što ćemo nazvati lstKlijent.

Nakon toga u editoru koda promenićemo kod za klasu Form i upisati sledeće:Public Class Form1 Inherits System.Windows.Forms.Form 'članovi Private _klijenti As New ArrayList()----------------------------------------------------------

Public Function KreirajKlijenta(ByVal prezime As String,

Page 165: objektno orijentisano programiranje

Objektno orijentisano programiranje 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", "Njegoševa 25", "011-2712-999")

End Sub Ako pokrenemo kod u polju za prikaz liste neće 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 sledeći 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

Page 166: objektno orijentisano programiranje

Objektno orijentisano programiranje166

Return Prezime & " " & Ime & " " & Telefon & " " & Adresa

End Function----------------------------------------------------------End Structure

Kada aktiviramo program prikazaće se ishod obrade kao na slici 7–10.

Slika 7-10: rad sa strukturama podataka

Pogodnost kolekcije je da se lako može 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 omogućiti 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 dodaćemo sledeći kod:Private Sub btnBrisanje_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrisanje.Click

Page 167: objektno orijentisano programiranje

Objektno orijentisano programiranje 167

If selectKlijenti.IsEmpty = False Then

If MessageBox.Show("Da li stvarno hoćete da obrišete podatak" & SelectKlijenti.Prezime & "?", "Poruka", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

'sačuvaj klijenta kojeg želiš da brišeš Dim deleteKlijent As Klijenti = SelectKlijenti

'izbriši klijenta _klijenti.Remove(deleteKlijent)

End If

Else MessageBox.Show("Morate odabrati klijenta!") End If End Sub

Ispod toga dodajemo sledeće svojstvo:Public ReadOnly Property SelectKlijenti() As Klijenti

Get

'selektovano? If lstKlijent.SelectedIndex <> -1 Then 'vrati odabranog klijenta Return lstKlijent.Items(lstKlijent.SelectedIndex)

End If End Get End Property

Startovanjem programa može se prikazati na ekranu obrazac kao na slici 7–11, kada nismo ništa odabrali, ili kao na slici 7–12 kada pristupamo brisanju.

Na početku 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

Page 168: objektno orijentisano programiranje

Objektno orijentisano programiranje168

Ako nije ništa odabrao dobija upozorenje u vidu MessageBox-a, pri čemu ne dopušta korisniku da uradi bilo šta kao na slici 7–11.

Slika 7-11: Korisnik nije odabrao ništa od postojećih stavki

U slučaju da je odabrao u ugnježdenom delu koda If Then strukture, dalje se odvija izvršenja koda. Naravno prvo će nam se pojaviti prozor sa pitanjem da li želimo da obrišemo podatak ili ne. Ovo je uobičajeni postupak kada se manipuliše sa podacima, jer nikada ne dozvoljavamo korisniku da neposredno izvrši brisanje, promenu ili čuvanje podataka. Korisnik može i da pogreši pa je potrebna izvesna fleksibilnost aplikacije.

Slika 7-12: Korisnik je odabrao stavku u listi i želi da je briše

Page 169: objektno orijentisano programiranje

Objektno orijentisano programiranje 169

7. 6. 2 Listanje i prikaz stavki u nizu

Osim što korisnik nekada treba da obriše stavku iz niza, on u nekim slučajevima želi i da izlista te podatke radi uvida u njih ili provere podataka.

Na istom primeru telefonskog imenika klijenata prezentovaćemo kako se to radi.

Slika 7-13: Listanje podataka u nizu

Na slici 7–13 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 određenog klijenta. Znači, kod za prikaz podataka o klijentima dodaćemo na kontrolu ListBox naše aplikacije.

Private Sub lstKlijent_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstKli-jent.SelectedIndexChanged

PrikazKlijenta(SelectKlijenti)

End Sub

Osenčeni deo u kodu poziva metodu PrikazKlijenta koju smo prethodno već definisali u aplikaciji. To je ista procedura koja se koristi kod početnog učitavanja podataka.

Page 170: objektno orijentisano programiranje

Objektno orijentisano programiranje170

Public Sub PrikazKlijenta(ByVal klijent As Klijenti)

'ažuriranje polja

txtPrezime.Text = klijent.Prezime

txtIme.Text = klijent.Ime txtAdresa.Text = klijent.Adresa txtTelefon.Text = klijent.TelefonEnd Sub

7. 7 Dinamički niz

Dosada smo se bavili sa nizovima čije dužine su bile nepromenjene. Ali to ne mora da bude uvek tako, i uglavnom i nije. U prethodnom delu smo videli da mi možemo dodavati stavke nizu ili da ih obrišemo iz niza i tada se menja i njihova dužina. Niz čija dužina je promenljiva se zove dinamički niz i postiže se ključnom reči ReDim.

Dinamički niz smo demonstrirali u prvom primeru ovog poglavlja – učitavanjem spiska prijatelja, ali zbog razumevanja šta se u pozadini dešava kada se izvršava program stavićemo imena u zagrade. Podsetićemo se samo na rezultat izvršavanja te aplikacije. Klikom na dugme ”Prikaži” pojaviće se spisak unetih prijatelja kao na slici 7–14.

Sada ćemo da izmenjamo kod. Dodaćemo još i red (osenčen u kodu)�:

ReDim Prijatelji(6)

gde saopštavamo za koliko treba da se poveća niz.

Slika 7-14: Niz sa određenom dužinom

Page 171: objektno orijentisano programiranje

Objektno orijentisano programiranje 171

U tom slučaju kod će biti sledeći: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) = "Marija" Prijatelji(1) = "Miša" Prijatelji(2) = "Aleksa" Prijatelji(3) = "Petar" Prijatelji(4) = "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

Ponovo pokrećemo program i videćemo prvi prozor kao na slici 7–15.

Page 172: objektno orijentisano programiranje

Objektno orijentisano programiranje172

Slika 7-15: Redimenzioniranje niza

Ali mi ne želimo da vidimo samo unete promene, već i prethodno skladištene podatke, kao što izgleda druga forma na slici 7–15.

To ćemo postići primenom ključne reči Preserve kada navodimo redimenzioniranje niza:

ReDim Preserve Prijatelji(6)

7. 8 višedimenzionalni niz

Sledeća značajna stvar u vezi rada sa nizovima je primena višedimenzionalnog niza, čija je svrha rada sa tabelama. One su u suštini matričnog formata o kojima smo pričali na početku ovog poglavlja, a čiji smo koncept funkcionisanja tu i objasnili.

U narednom je dat primer koda za definisanje višedimenzionalnih 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--------------------------------------------------------

Page 173: objektno orijentisano programiranje

Objektno orijentisano programiranje 173

Private Sub btnPrikaži_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrikaži.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) = "Bičaninova 53" Prijatelji(0, IndeksiOsoba.Telefon) = "567-554"

Prijatelji(1, IndeksiOsoba.Ime) = "Simić Marko" Prijatelji(1, IndeksiOsoba.Adresa) = "Železnička 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"

'prikaži podatke: 4 korak dodajOsobu(Prijatelji)

End Sub-------------------------------------------------------- 'kreiraj metodu za prikaz podataka: 5 korak Private Sub DodajOsobu(ByVal prijatelji(,) As String) Dim red As Integer For red = 0 To UBound(prijatelji, 1) Dim smesti As String = "" Dim kolona As Integer For kolona = 0 To UBound(prijatelji, 2) smesti &= prijatelji(red, kolona) & ", " Next lstPrijatelji.Items.Add(smesti) Next

End SubEnd Class--------------------------------------------------------

Postupak kreiranja programskog koda pokušaćemo da objasnimo putem koraka koji su naznačeni u kodu.

Page 174: objektno orijentisano programiranje

Objektno orijentisano programiranje174

1. Korak: EnumercijatiEnumeracija se koristi za ograničavanje mogućih vrednosti koje

smeštamo u promenljive. Pomoću nje izgrađujemo novi tip promenljive. Mogu biti zasnovane na tipu Integer, Long, Short ili Byte, pri čemu se promenljiva postavlja na jednu moguću vrednost.

2. Korak: Definisanje nizaNaredni korak je definisanje višedimenzionalnog niza kada se aktivira

dugme “Prikaži”. Ovde je definisan dvodimenzionalni niz, iako se može raditi sa različitim dimenzijama.

Ilustrativno prikazano to bi izgledalo kao “mreža” na slici 7–16, sa tri kolone i tri reda. Kada pristupamo podacima pristupamo ćeliji u toj mreži (navodeći red i kolonu)�. Ovo je detaljnije prikazano na slici 7–2 na početku ovog poglavlja.

Slika 7-16: Ilustracija dvodimezionalnog niza

3. Korak: Postavljanje podatakaZatim 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.

Page 175: objektno orijentisano programiranje

Objektno orijentisano programiranje 175

4. Korak: Prikazivanje podatakaOno što je ostalo da podatke prikažemo na listi i to pozivanjem metode

dodajOsobu (slika 7–17)�.

Slika 7-17: Prikazivanje dvodimenzionalnog niza

5. Korak: Kreiranje metode za prikaz podatakaOva metoda bazira se na For Next petlji i to jedna koja prolazi kroz

svaki red, dok druga kroz kolone za tu iteraciju. Upotrebljen je opšti parametar UBound, gde se prvo navodi naziv višedimenzionalnog niza, a zatim dimenzija. Jedan označava prvu dimenziju, dva drugu.

Kada se nađe podatak stavlja se u promenljivu smesti i prikazuje se na listi.

Po ovom primeru smo videli da rad sa podacima je dosta složen, pogotovu ako se radi sa višedimenzionalnim nizovima. Zbog toga se najčešće koriste kolekcije u Visual Basic.Net-u.

Page 176: objektno orijentisano programiranje
Page 177: objektno orijentisano programiranje

8. RAD SA BAZAMA PODATAKA U vISUAL BASIC.NET-U

Dosada smo se bavili načinom manipulisanja sa podacima samo u okviru Visual Basic.Net-a. Međutim, u praksi retko ćemo se susretati sa baš tako jednostavnim rešenjima rada sa podacima kao što su nizovi. Obično se radi sa podacima uskladištenih u baze podataka.

Stoga, značajnu ulogu sa aspekta softverskog inženjerstva ima savlađivanje izrade aplikacije u interakciji sa nekom bazom podataka (Microsoft Access, SQL, Oracle itd.)�. Tu interakciju u objektno orijentisanim alatima omogućava posebna tehnologija ADO.NET i deo je Microsoft.NET Framework-a. Ona predstavlja poseban skup biblioteka, čiji zadatak je da omogući pristup izvoru podataka. Iako ovde moramo istaći da osim baza podataka izvori podataka mogu biti i u drugoj formi. Podaci mogu poticati iz Excel tabela, XML ili tekstualne datoteke. Iako ADO:NET podržava i rad sa takvim oblicima podataka, ipak ćemo se u ovom delu usredsrediti samo na rad sa relacionim bazama podataka.

U tom cilju neophodno je pristupiti podacima ili kako se to često kaže napraviti konekciju. Postoje male razlike u načinu konektovanja sa bazom podataka u zavisnosti od verzije Visual Basic.NET-a. U VB.NET-u 2003 pristup bazi podataka se vrši preko Data Form Wizard-a. U verziji 2005 Express Edition je to malo drugačije. Pošto se knjiga orijentisala na demonstraciji nekih programskih delova pomoću verzije Visula Basic-a 2005 Express Edition-a, način pristupanja podacima će se razmatrati u ovom alatu. Postoji nekoliko glavnih komponenti za realizaciju veze sa podacima:

Page 178: objektno orijentisano programiranje

Objektno orijentisano programiranje178

■ Connection – Omogućuje 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 upravljačke programe za konektovanje sa bazom podataka, koji su .dll datoteke. To su neophodni kodovi koji omogućuju komunikaciju DataAdaptera sa bazom podataka na njenom jeziku.

■ Command – Pomoću ove komponente izvršava se SQL iskaz. Iskaze možemo koristiti i za selektovanje, unos, brisanje i izmenu podataka.

■ DataAdapter – Služi za uzimanje podataka iz baze podataka ali i za ažuriranje podataka

■ DataSet – Sadrži podatke keširane u memoriji i uzete iz komponente DataAdapter. Osim toga skladišti i tabelarne informacije o podacima (naziv polja, vrsta podataka i slično)�.

8. 2 Povezivanje aplikacije sa bazom podataka

Povezivanje sa bazom podataka znači uzimanje podataka iz tabela na osnovu prethodno navedenih komponenti. Baza podatka na koju ćemo se fokusirati u ovom delu je Artikli.mdb (slika 8–1)�. Ekstenzija .mdb ukazuje da se radi o Microsoft Access bazi podataka, koja u principu može sadržati osim tabele, upite, izveštaje itd.

Slika 8-1: tabela Artikli baze podataka Atikli.mdb

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

Page 179: objektno orijentisano programiranje

Objektno orijentisano programiranje 179

nalazi na meniju. Odabraćemo prozor za prikazivanje baze podataka Show Data Source (slika 8 – 2)�.

Slika 8-2: Pokretanje opcije Data Source za pronalaženje izvora podataka

Sada ćemo krenuti sa odabirom baze podataka sa kojom želimo da ostvarimo vezu.

Pokrenućemo Add New Data Source (mogli smo odmah iz menija, ali ovako vidimo da postoje i drugi putevi da se ovo realizuje)�. Otvoriće nam se prozor gde možemo da odaberemo na šta ćemo se konektovati: na bazu podataka, Web Servis ili objekte. Kada se otvori ovaj prozor automatski je odabrana baza podataka, kliknućemo na dugme Next koji će nas dalje voditi. Aktiviraće se drugi prozor (slika 8–3)� koji nas upućuje na odabir baze podataka, a to ostvarujemo klikom na dugme New Connection. Tada se pred nama pojavljuje jedan drugi prozor kao na slici 8–4. Služi za dodavanje konekcije sa opcijama sa kojom mašinom baze podataka ćemo raditi: Microsoft-ovim Jet ili SQL Server-om, odnosno da li ćemo koristiti Access-ove tabele ili SQL Server-e.

Page 180: objektno orijentisano programiranje

Objektno orijentisano programiranje180

Slika 8-3: Odabir podataka sa kojom će aplikacija da radi

Odabraćemo dugme Change i postaviti konekciju za pristup podacima u Access-u. Nakon toga kliknućemo na dugme Brows, jer treba da nađemo Artikli.mdb bazu podataka. Odabraćemo željenu datoteku dvoklikom na nju, pri čemu nas vraća 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 uspešna i klikom na dugme OK vraćamo se na prethodni prozor, a zatim na prozor odakle smo i krenuli (slika 8–3)�.

Dalje nas vodi čarobnjak kada kliknemo na dugme Next. Na kraju se otvara prozor u kome možemo videti podatke tabele Artikli (slika 8–5)�.

Odabraćemo sva polja iz tabele tako što ćemo kliknuti na tabelu Artikli i završiti postupak povezivanja sa dugmetom Finish.

Pojaviće se prozor Data Source kao što je to prezentovano na slici 8–6. U ovom prozoru možemo videti i šta sadrži Dataset odnosno koja polja tabele.

Page 181: objektno orijentisano programiranje

Objektno orijentisano programiranje 181

Slika 8-4: Dodavanje konekcije

Slika 8-5: Odabir objekata za Dataset

Page 182: objektno orijentisano programiranje

Objektno orijentisano programiranje182

Slika 8-6: Prikaz prozora Data Source-a i Dataseta

8. 2 Dodavanje kontrole na formu aplikacije

Povezivanjem baze podataka omogućili smo pristup podacima, ali to nije dovoljno. Sa tim podacima treba da manipulišemo kroz aplikaciju. Stoga, vraćamo se na formu gde ćemo smestiti polja za prikaz podataka. Postupak je veoma jednostavan. Na prozoru Data Sours-a, gde su sva polja iz tabele Artikli, kliknemo levim tasterom na odabrano polje i držeći pritisnut levi taster miša prevučemo ga na formu. Postupak ćemo ponoviti za sva polja iz tabele i imaćemo formu kao na slici 8–7

Slika 8-7: Unos polja na formu za manipulaciju podataka

Page 183: objektno orijentisano programiranje

Objektno orijentisano programiranje 183

Kada se nanesu sva polja treba ih urediti zbog estetskog izgleda. Ako je obrazac neuredan neće biti ni lako raditi sa njim. Na slici 8–8 prikazana je forma koju smo kreirali za manipulaciju podataka.

Slika 8-8: Forma za unos podataka u tabelu Artikli

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 sadrži razne opcije: za pregled podataka (kretanje gore - dole)�, za dodavanje, brisanje i čuvanje.

Kada pokrenemo aplikaciju učitavaju se podaci u Dataset-u. Čak možemo i nakon otvaranja konekcije odmah i da ga zatvorimo sa:

con.Close()

i da radimo dalje sa podacima.

8. 3 Dodavanje kontrola za navigaciju sa podacima

U prethodnom delu formirali smo aplikaciju gde se manipulacija sa podacima mogla uraditi na osnovu menija što je automatski dodato na formu. Ali navigaciju podataka možemo i sami obezbediti, korišćenjem kontrola.

U svrhu demonstracije dodaćemo dugme formi pod nazivom Load, zbog toga što prvo moramo obezbediti konekciju. Programski kod koji je potrebno uneti je sledeći:

Page 184: objektno orijentisano programiranje

Objektno orijentisano programiranje184

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 SubEnd Class

Odnosno unosimo samo osenčene linije.

Sada treba navesti koju tehnologiju povezivanja ćemo primeniti i gde se nalazi naša baza podataka. Kao što je već napomenuto na početku ovog poglavlja možemo 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 slučaju baza podataka je Artikli.mdb koja se nalazi u direktorijumu C. Pošto je Access baza podataka koristićemo Jet-ovu tehnologiju za povezivanje podataka. Ove informacije prosleđujemo ConnectionString-u, a koje je svojstvo promenljive con.

Sada otvaramo konekciju sa metodom Open:con.Open()

Zatim koristimo Dataset da bi negde smestili podatke iz baze podataka. On sadrži 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 između njih je DataAdapter, koji se obraća objektu konekcije i izvršava naš upit vraćajući podatke u Dataset-u.

Oni se navode u kodu na sledeći način: Dim ds As New DataSet

Dim da As OleDb.OleDbDataAdapter Dim sql As String

Page 185: objektno orijentisano programiranje

Objektno orijentisano programiranje 185

sql = "SELECT * FROM tblArtikli" da = New OleDb.OleDbDataAdapter(sql, con) da.Fill(ds, "Artikli")

Prva tri reda deklarišu promenljive. Nakon toga postavlja se strukturirani upit koji će da obezbedi podatke iz tabele. Zatim se kreira novi objekat DataAdapter-a, gde se deklarišu dva objekta: SQL upit kao varijabla sql i objekat konekcije con. I konačno smeštamo podatke u Dataset nakon što ih je DataAdapter selektovao. To se vrši pomoću 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 sledeći 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)

pa će celokupno kod izgledati ovako: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

Page 186: objektno orijentisano programiranje

Objektno orijentisano programiranje186

Sada ćemo urediti kod tako da kada pokrenemo aplikaciju automatski se učitavaju podaci na formi, ali ćemo prethodno postaviti neke varijable u deklaracionom delu:

Imports System.Data --------------------Public Class Form1

Dim con As New OleDb.OleDbConnection Dim ds As New DataSet Dim da As OleDb.OleDbDataAdapter Dim sql As String

Dim inc as integer Dim Maxrows As Integer

Šta predstavljaju prve četiri varijable već smo objasnili, jedino da kažemo da su poslednje dve promenljive: Maxrows za smeštanje podataka iz Dataset-a i inc kao brojač za metodu prebrojavanja redova Row.Count.

Pa onda kodu dodajemo sledeće redove:Maxrows=ds.Tables(“Artikli”).Row.Count

inc=-1

Neophodno je voditi računa o broju redova u Dataset-u. Ako se nadmaši, Visual Basic.NET će javiti grešku. Prebrojavanje se radi pomoću 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

Sada ćemo na dugme “Sledeći” uneti kod:

If inc <> Maxrows -1 Then inc=inc+1 Navigacija()

Else MsgBox(“Nema više podataka”)

End If

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

Page 187: objektno orijentisano programiranje

Objektno orijentisano programiranje 187

Navigacija()ElseIf inc = -1 Then

MsgBox(“Nema još podataka”)Else

MsgBox(“Prvi podataka”)End If

na dugme “Poslednji” uneti sledeće:

If inc <> Maxrows -1 Then inc= Maxrows -1 Navigacija()

End IfI

i na dugme “Prvi” kod:If inc <> 0 Then

inc= 0 Navigacija()

End If

Sa ovim smo uredili kodove za pregled podataka, ali je potrebno omogućiti i ažuriranje baze podataka. Pošto u toku rada baratamo samo sa podacima u Dataset-u, neophodno je omogućiti korisniku da izmenja, da doda i da briše podatke baš u tabeli baze podataka. Za manipulaciju je potrebno dugme btnUnos za unos podataka, btnUpdate za ažuriranje podataka, btnBrisanje za brisanje postojećeg podatka, btnCommit za prihvatanje podataka u bazu i btnClear u slučaju da korisnik odluči da nešto ne unese.

U tu svrhu treba da unesemo kodove za dugmad koje smo već prethodno predvideli za ažuriranje.

Prvo ćemo dodati kod na dugme btnUpdate:Dim cb As New OleDb.OleDbCommandBuilder(da)

ds.tables("Artikli").Rows(inc).item(1)= txtNazivArtikla.Textds.tables("Artikli").Rows(inc).item(2)= txtSifraJM.Textds.tables("Artikli").Rows(inc).item(3)= txtPakovanje.Text

da.Update(ds, "Artikli")

End Sub

Page 188: objektno orijentisano programiranje

Objektno orijentisano programiranje188

Za izvršenje ovog koda potreban je Command Builder koji gradi SQL string i smešta se u promenljivu cb. Sa kojim DataAdapter-om (da je naziv adaptera u ovom slučaju)� ćemo raditi navodimo posle ključne reči u zagradama. Uloga Command Builder-a je da omogući ažuriranje podataka sa vrednostima koji su smešteni u Dataset-u. O tome je već bilo reči da je to ”privremena“ tabela u koju se smeštaju podaci, tako da korisnik ne može direktno da pristupi podacima. Kada nastane promena u Dataset+u to treba preneti i u tabelu u kojoj su smešteni podaci. DataAdapter će ostvariti kontakt sa bazom podataka i pomoću Command Builder-a će ažurirati podatke.

Korisniku pored ažuriranja treba omogućiti i da doda novi podatak u bazu. Na dugme btnUnos unosimo programski kod kojim samo brišemo sadržaj tekstualnih polja, a pri čemu istovremeno isključujemo ostale dugmiće:… 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 isključeno. Da bi ponovo bilo aktivno ovo dugme, a pri čemu se deaktiviraju ostali, treba da dodamo sledeći kod na dugme btnClear: … btnCommit.Enabled = False btnUnos.Enabled = True btnUpdate.Enabled = True btnBrisanje.Enabled = True

inc=inc-1 Navigacija()…

Poslednje dve stavke samo prikazuju prvi podatak.

Page 189: objektno orijentisano programiranje

Objektno orijentisano programiranje 189

Dodavanje novog podataka u bazu podataka vršićemo pomoću dugmeta btnCommit dodavanjem sledećeg 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.TextdsNewRow.Item(“SifraJM”)=txtSifraJM.TextdsNewRow.Item(“Pakovanje”)=txtPakovanje.Text

dsNewRow =ds.Tables(“Artikli”).Rows.Add(dsNewRows)

da.Update(ds,”Artikli”)

btnCommit.Enabled = False btnUnos.Enabled = TruebtnUpdate.Enabled = TruebtnBrisanje.Enabled = True End If…

U nastavku objasnićemo šta ovi kodovi znače. Prvo postavljamo pitanje da li je podatak ispravan – ako nije, promenljiva inc će biti -1. U suprotnom realizovaće se navedeni kod. Promenljiva dsNewRow služi za dodavanje novog reda u Dataset-u i tipa je DataRow. Nakon toga saopštavamo da ćemo dodati novi red i to metodom NewRow(). Podaci koje treba uneti su u poljima za prihvatanje teksta (TextBox)�. U sledećem redu poziva se metod Add za dodavanje novog reda u Dataset-u iz promenljive dsNewRow. Nakon toga pomoću metode Update ažuriramo 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

Page 190: objektno orijentisano programiranje

Objektno orijentisano programiranje190

inc=0Navigacija()da.Update(ds,”Artikli”)

Podrobno objašnjenje je nepotrebno jer smo se susreli već sa ovim kodovima. Jedino treba istaći da se ovde koristi metod Delete za brisanje podataka.

Do sada izloženo 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 izgrađuje jedna potpuna aplikacija.

Page 191: objektno orijentisano programiranje

LITERATURA

Grupa autora: od početka Visual Basic .NET,CET, Beograd,20021.

Spenser K., Eberhard T., Alexsander J.: Izrada višekratno 2. upotrebljivih komponenti Visual Basic .NET, CET, Beograd,2003

Riordna R.: ADO.NET Korak po korak, CET, Beograd,2002 3.

Černiček I.: Projektovanje algoritama, TF „M. Pupin”-Viša škola 4. za organizaciju i informatiku Novi Sad, 1995

Černiček I.: Programiranje, TF „M. Pupin”-Viša škola za 5. organizaciju i informatiku Novi Sad, 1994

msdn.microsft.co6. m

www.wikipedia.org7.

www.objc.toodarkpark.net8.

www.homeandlearn.co.u9. k

www.pluto.szikszi .hu10.

www.mathworld.wolfram.co11. m

www.linuxo.or12. g

www.owlnet.rice.ed13. u

www.codeproject.co14. m

www.starvbdotnet.co15. m

Page 192: objektno orijentisano programiranje
Page 193: objektno orijentisano programiranje

Impresum

Page 194: objektno orijentisano programiranje
Page 195: objektno orijentisano programiranje