Cilj ovog predmeta je da se upoznamo sa osnovama objektno-orijentisanog
programiranja. Kroz niz praktinih primera objektno-orijentisanih programa pisanih u jeziku C# (ita se SI-!"# a na engleskom pi$e jo$ i C Shapr%# objasni&emo osnovne kon'epte objektno-orijentisanog programiranja# koje je zastupljeno u ogromnoj ve&ini savremenih programskih jezika. "redmetom (vod u programiranje obuhva&ena je materija ije je znanje neophodno za savladavanje gradiva obuhva&enog ovim predmetom. Kako su primeri jednostavnih so)tverskih programa kori$&enih na predmetu (vod u programiranje bili pisani u programskom jeziku *ava# napomenu&emo da su oni u potpunosti primenljivi# odnosno prenosivi i na programski jezik C#. +aime sintaksa programa pisanih u programskom jeziku *ava i programskom jeziku C# veoma je slina# a na nivou jednostavnih primera predstavljenih na predmetu (vod u programiranje# skoro potpuno identina. "rimere koji su dati u okviru ovog materijala treba praktino isprobati# koriste&i ,isual Studio .+-. -/press# ili bilo koje drugo razvojno okru0enje koje omogu&uje pisanje i prevodjenje C# programa. !adi preuzimanja i instaliranja C # ,isual Studio .+-. -/press okru0enja za razvoj so)tverskih aplika'ija na svom raunaru# preporuujemo da posetite 1eb stranu2 http233111.mi'roso)t.'om3e/press34o1nloads3 Poglavlje 1: Osnovni elementi jezika C# Cilj ovog poglavlja je da se na brz nain upoznamo sa osnovnim elementima C# programa# podsetimo nekih tema obradjenih na predmetu (vod u programiranje i pro$irimo ovo znanje. ( okviru ovog poglavlja kroz primere &emo predstaviti osnovne elemente koje sadr0i svaki C# program. 5adr0a&emo se na primerima koji koriste takozvani konzolni ulaz3izlaz (input3output% za interak'iju sa korisnikom programa. 6vo je najjednostavniji nain za interak'iju sa korisnikom i ne koristi gra)iko okru0enje koje pru0a 7indo1s operativni sistem. 8edjutim# kako je 'ilj ovog kursa da ilustruje objektno-orijentisane prin'ipe programiranja# a ogranienost vremena nam ne dozvoljava da se zadr0imo na implementiranju korisnikog inter)ejsa# ostavi&emo pisanje programa za 7indo1s van dometa ovog poglavlja# i ovog kursa. Jednostavan program u jeziku C# "rogramski kod dat u primeru 9.9 ilustruje osnovne elemente C# izvr$nog programa. Cilj ovog primera je da se na brz nain upoznamo sa osnovnim elementima koje svaki C# program sadr0i# kako bismo uskoro potom bili u mogu&nosti da predjemo na detaljnija obja$njenja vezana za kon'epte objektno-orijentisanog programiranja i programski jezik C#. Primer 1.1 : Program dobrodolice // Deklaracija imenskog prostora. using System; // Naziv imenskog prostora u kome definisemo nas program. namespace DemoAplikacija { // Program poinje deklarisanjem klase class Do!rodoslica { // "etodom "ain poinje izvr#avanje programa static void "ain$% { // &spis na ekranu 'onsole.(rite)ine$*Do!rodo#li u predmet +!jektno,orijentisano programiranje-*%; . . . Komentari u programskom kodu Komentari (delovi programa koji se ne prevode% obojeni su zeleno u gornjem primeru. +jihova uloga je da pobli0e objasne delove programskog koda. Komentari su ignorisani kada se na$ program kompajlira. 6ni su tu da dokumentuju $ta na$ program radi. Komentari se u programu oznaavaju zna'ima 33 ili 3: :3. Komentar oznaen zna'ima 33 mo0e se prostirati u samo jednom redu. ko 0elimo da se komentar prote0e na ve&i broj redova# on mora poinjati znakom ;3 :; i zavr$avati se znakom ;:3;. Sve izme<u je deo komentara. Izvravanje programa 4a bismo izvr$ili C# program# potrebno je pokrenuti C# prevodila' (kompajler%# pri emu se program prevodi u program kodiran u .+-. medjujeziku# koji se potom izvr$ava na .+-. plat)ormi# odnosno pozivom generisanog izvr$nog programa# pri emu je na sistemu prethodno instalirana .+-. plat)orma. "rilikom izvr$avanja programa pokre&e se takozvani konzolni prozor# koji podse&a na stari operativni sistem zvani 46S# koji ne podr0ava izradu gra)ikog korisnikog inter)ejsa. Konzolni prozor nam omogu&uje da unosimo i ispisujemo tekst na ekranu# ali ne omogu&uje kreiranje prozora# dugmi&a i ostalih delova standardnog gra)ikog korisnikog inter)ejsa. Obavezna veba Program dat ovim primerom treba izvriti u okviru razvojnog okruenja Visual Studio .NET Express. Potrebno je najpre kreirati projekat, odabrati da to bude konzolna aplikaija, i potom kopirati dati programski kod u odgovaraju!i prozor. Pri tome !ete primetiti da je ovo okruenje obeleilo bojama delova programa na isti na"in kao u gornjem primeru. ,e0ba = kora'i 9. Kreirati novi projekat u ,S.+-. kao Console ppli'ation >. 4esni klik na "rogram.'s )ajl u desnom prozoru i izmena imena )ajla u 4obrodosli'a.'s ?. Izmena imena klase "rogram u 4obrodosli'a @. 4odati liniju za ispis poruke na ekranu kao gore A. K68"*BI!+*-2 8eni --C Duild --C Duild Solution (ili EF% F. S.!.2 8eni --C 4ebug ili Start 7ithout 4ebugging (EA ili Ctrl-EA% #ada pokre!ete program u okviru okruenja VS .NET Express okruenja $skra!eno VS.NET%, potrebno je izabrati na meniju stavku &'un (it)out debugging* da bi se program izvrio. +koliko elite samo da prevedete $kompajlirate% program bez izvravanja $na primer radi provere da li je program sintaksno ispravan%, potrebno je da izaberete stavku &,ompile*, posle "ega moete naknadno da izvrite program. Pri tome, kada pokrenete ovaj program iz okruenja VS.NET, otvori!e se konzolni prozor i odma) potom brzo zatvoriti, pre nego to uspete da vidite odziv programa. -a biste ovo spre"ili, moete dodati slede!u liniju koda kao poslednji red u .ain metodi, dakle pre zatvorene zagrade koja ozna"ava kraj .ain metode/ 'onsole./ead)ine$%; Tada !e program sa"ekati da unesete znak za kraj reda sa tastature pre nego to se konzolni prozor zatvori, a vi moete videti poruku ispisanu na ekranu pre nego to pritisnete 0ENTE'1. lementi programa u primeru 1!1 "rogram u primeru 9.9 sadr0i slede&e elemente# o kojima &e detaljnije biti rei u narednim poglavljima2 - 4eklara'ija imenskog prostora o Imenski prostor mo0e obuhvatati jednu ili vi$e klasa i u su$tini slu0i za lak$e organizovanje programskog koda. ( ovom programu koristi se jedan od imenskih prostora koje sadr0i .+-. biblioteka klasa# koji se zove GSHstemI i koji sadr0i klasu koja se zove GConsoleI# koja sadr0i metod koji se zove G7riteBineI# koji slu0i za ispisivanje linije teksta na ekranu (tanije u konzolnom prozoru%. - 4e)ini'ija klase o Klasa je osnovni element objektno-orijentisanog programa. ( uvodnom primeru 9.9 imamo samo jednu klasu# iji je naziv 4obrodosli'a# koja sadr0i samo jedan metod# iji je naziv 8ain. o .elo klase je uokvireno otvorenom i zatvorenom vitiastom zagradom J K - 4e)ini'ija metode o 8etoda je pojam ekvivalentan pojmu pro'edure iz pro'eduralno- orijentisanog programiranja. 8etoda je programska 'elina koja izvr$ava odredjenu )unk'iju. ( datom primeru postoji samo jedna metoda# iji je naziv 8ain# i ija je uloga da na ekranu ispi$e poruku dobrodo$li'e. o .elo metode je uokvireno otvorenom i zatvorenom vitiastom zagradom J K o 8etoda koja se naziva 8ain predstavlja poetnu taku izvr$avanja programa. Lak i ako se program sastoji od vi$e klasa# od kojih svaka ima vi$e metoda# uvek &e samo jedna od tih klasa sadr0ati metodu 8ain# od koje poinje izvr$avanje programa. - "oziv metode 7riteBine za ispis teksta na ekranu (tanije u konzolnom prozoru% o ( okviru metode 8ain# u primeru 9.9 poziva se metod 7riteBine. o 8etod 7riteBine postoji kao deo klase Console# koja je deo .+-. biblioteke klasa. C# programer ima na raspolaganju hiljade klasa i njihovih metoda# koje su isporuene sa instala'ijom .+-. okru0enja i jezika C#. o .ekst koji 0elimo da ispi$emo na ekranu zadat je kao parametar metodi 7riteBine# i ona &e ga ispisati na ekranu prilikom izvr$enja programa. +apomene2 - "rimetimo da se svaka linija programskog koda C# programa zavr$ava znakom M - 6bratimo pa0nju da se u C# jeziku razlikuju mala i velika slova. +a primer# re ;4obrodosli'a; nije ista kao i da je napisana malim slovima ;dobrodosli'aI. .o bi bila dva razliita identi)ikatora. 6stali detalji programa u primeru 2.2 ( primeru 2.2 vidimo da nazivu metoda Main prethodi modi)ikator static. 6n oznaava da nije potrebno kreirati instan'u (pojavu3objekat% klase Dobrodoslica da bi se pokrenuo metod Main. 6vaj modi)ikator je neophodan za metod Main# jer u trenutku poetka izvr$avanja programa ne mo0e postojati instan'a (objekat% klase. 6na se mo0e kreirati kasnije# tokom izvr$avanja programa. ,i$e o klasama i instan'ama bi&e rei u narednim poglavljima. Svaka metoda mora da ima de)inisan tip povratne vrednosti. ( sluaju metode Main# povratna vrednost je GvoidI (praznina%, $to znai da Main metoda ne vra&a vrednost. 8etoda mo0e imati listu parametara koja se pi$e nakon njenog imena unutar zagrada. !adi jednostavnosti u navedenom primeru nismo dodelili parametre metodi Main. ,i$e o metodama i njihovim parametrima bi&e rei u narednim poglavljima. +apomena2 Koristimo operator ;.; (taka% da odvojimo nazive identi)ikatora koji oznaava imenski prostor# klasu i metod klase. 6 imenskim prostorima bi&e vi$e rei kasnije. 5a sada# dovoljno je znati da postoji klasa koja se zove ,onsole# i koja ima metod 3rite4ine. Klasa ,onsole pripada prostoru imena S5stem# koji je pomenut na poetku programa u liniji using S5stem. .ime je reeno programu da mo0emo koristiti sve klase koje se nalaze u ovom prostoru imena. Sa obzirom da je metoda 3rite4ine koja pripada klasi ,onsole u njoj oznaena stati# mo0emo ovu metodu pozivati u obliku2 KBS . 8-.64 (listaNargumenata% M 4akle2 ,onsole.3rite4ine$%6 Pri"vatanje ulazne komandne linije ( prethodnom primeru# dovoljno je da pokrenemo program i proizveden je izlaz (ispis poruke na ekranu%. 8e<utim# ve&ina programa# ukljuuju&i i 7indo1s operativni sistem koji koristimo svakodnevno# mogu imati neke ulazne parametre koje program prima prilikom pokretanja. +a primer# ako otku'amo Notepad.exe .oja-atoteka.txt# onda &e Notepad program otvoriti .oja-atoteka.txt datoteku tako da mo0emo da ponemo da je ure<ujemo. +aziv datoteke .oja-atoteka.txt bio je ulazni parametar sa kojim smo pokrenuli program Notepad.exe Slino# mo0emo praviti svoje programe koji prihvataju parametre sa komandne linije na ulazu. "rimer 9.> prikazuje program koji prihvata ime kao parametar sa komandne linije# a potom ga ispisuje u konzolnom prozoru u okviru pozdravne poruke. Primer 1.2 : Ulaz sa komandne linije // Deklaracija imenskog prostora. using System; // Naziv imenskog prostora u kome definisemo nas program. namespace DemoAplikacija { // Program poinje deklarisanjem klase class Do!rodoslica&me { // "etodom "ain poinje izvr#avanje programa static void "ain$string01 args% { // &spis na ekranu 'onsole.(rite)ine$*Do!ar dan2 {3.-*2 args031%; . . . 6bratimo pa0nju na parametar metode Main u primeru 9.>. +aziv parametra je args, $to se koristi prilikom re)eren'iranja na parametre dalje u programu. Kljunim reima string78 de)ini$e se tip parametra. .ip string oznaava niz karaktera. (glastim zagradama ;O P; oznaava se niz bilo koji) objekata $u ovom slu"aju niz stringova, odnosno niz nizova karaktera%. (vek kada dodamo string78 args parametrima liste 8ain metode# C # kompajler emituje kod koji analizira argumente komandne linije i upisuje ih u parametar args. Litaju&i vrednost ovog parametra# mo0emo pristupati ovim argumentima. 6bratimo pa0nju na Console.7riteBine(...% naredbu u okviru 8ain metode. args798 je prvi element niza parametara, args728 je drugi element niza, args7:8 tre!i, itd !i, itd. +a primer# ako smo otku'ali 4obrodosli'aIme 8arko na komandnoj liniji# vrednost argsOQP &e biti ;8arko;. ,ratimo se na ugnje0deni parametar ;JQK;# u )ormatiranom stringu. "rilikom odredjivanja stvarne vrednosti )ormatiranog stringa na ekranu ovaj parametar se zamenjuje prvim argumentom# odnosno vredno$&u argsOQP. 4akle# vrednost args798, to je ;8arko;# &e zameniti oznaku ;JQK; u <ormatiranom stringu. +akon izvr$enja komandne linije navodjenjem ; 4obrodosli'aIme 8arko;# ispis na ekranu &e biti slede&i2 Dobar dan, Marko! Obavezna veba Program dat pret)odnim primerom treba izvriti u okviru razvojnog okruenja Visual Studio .NET Express. ,e0ba = kora'i 9. Kreirati novi projekat u ,S.+-. kao Console ppli'ation >. 4esni klik na "rogram.'s )ajl u desnom prozoru i izmena imena )ajla u 4obrodosli'aIme.'s ?. Izmena imena klase "rogram u 4obrodosli'a @. 4odati liniju za ispis poruke na ekranu kao gore A. Snimiti )ajlove 8eni --C Eile --C Save ll a. "ri tome odabrati neki pogodan )older b. "osle snimanja pogledajte )oldere koje ste dobili F. K68"*BI!+*-2 8eni --C Duild --C Duild Solution (ili EF% R. S.!. I5 K68+4+- BI+I*-2 a. 6tvoriti komandni prozor 7indo1s meni Start --C !un --C 'md b. ( komandnom prozoru2 'd ST5U,ezbeU4obar4anImeUbinU!elease "ri tome# ST5 zamenite putanjom do )oldera u kome ste snimili aplika'iju. '. ( komandnom prozoru2 4obar4anIme "etar Interak#ija sa korisnikom preko komandne linije "ostoji mogu&nost da se obezbedi ulaz podataka u program preko konzole. "rimer 9.? pokazuje kako da dobijemo unos podatka od strane korisnika# prilikom startovanja programa u konzoli. Primer 1.3: Interaktivni Ulaz // Deklaracija imenskog prostora. using System; // Naziv imenskog prostora u kome definisemo nas program. namespace DemoAplikacija { // Program poinje deklarisanjem klase class &nteraktivnaDo!rodoslica { // "etodom "ain poinje izvr#avanje programa pu!lic static void "ain$% { // &spis i unos podataka na konzolnom ekranu 'onsole.(rite$*4ako se zove#56 *%; 'onsole.(rite)ine$*Do!ar dan2 {3.- *2 'onsole./ead)ine$%%; . . . ( primeru 9.? .ain metoda nema nikakve parametre. "rilikom deklara'ije metode .ain koristi se kljuna re publi, koja oznaava da se metodi mo0e pristupiti izvan klase u kojoj je de)inisana. "odrazumevani nivo pristupa je private, $to bi znailo da samo lanovi unutar iste klase mogu da pristupe metodi. Sa obzirom da je potrebno pokrenuti metodu 8ain# odnosno pozvati je na izvr$avanje izvan klase u kojoj je de)inisana# neophodno je da se ona uvek oznai publi. Kljune rei publi i private nazivaju se modi)ikatorima pristupa# a detaljnije o njima &e biti rei kasnije. +aredba za ispis ,onsole.3rite4ine$...% ispusuje tekst na konzolnom prozoru, posle "ega se prelazi u drugi red. =a razliku od toga, naredba za ispis ,onsole.3rite$...% ispusuje tekst na konzolnom prozoru, i ne prelazi u drugi red. "rva naredba u primeru 9.? ispisuje na konzoli2 ;Kako se zove$V2; 4ruga naredba ne ispisuje ni$ta sve dok se ne unese linija teksta u konzolnom prozoru i pritisne taster G-nterI. "ri tome )ormatirani string koji je argument ove naredbe uzima unetu liniju teksta kao parametar i zamenjuje je na mesto parametra JQK. 4akle ako se sa konzole unese tekst W8arkoG # na ekranu se ispisuje2 G4obar dan# 8arkoG. 4rugi nain da se postigne isti izlaz bio bi slede&i. 8odi)ikova&emo metod 8ain na slede&i nain2 pu!lic static void "ain$% { // &spis i unos podataka na konzolnom ekranu 'onsole.(rite$*4ako se zove#2 preziva#56 *%; string ime 7 'onsole./ead)ine$%; string prezime 7 'onsole./ead)ine$%; string nadimak 7 'onsole./ead)ine$%; 'onsole.(rite)ine$*Do!ar dan2{3. {8.2zvani {9.-*2 ime2 prezime2 nadimak%; 'onsole.(rite)ine$*Do!ar dan2: ; ime ; * * ; prezime ; :zvani* ; nadimak ; *-*%; . 6vde se koristi promenljiva tipa string# iji je naziv GimeI i u koju se sme$ta vrednost imena unetog sa konzolnog ekrana. !ezultat izvr$avanja ovog programa je isti kao i u prethodnom primeru. Identi$ikatori u jeziku C# Identi)ikatori programskog jezika su rei (tanije nizovi karaktera%# koji se koriste za imenovanje pojedinih elemenata programa (promenljivih# klasa# itd%. "ostoje pravila koja moraju zadovoljavati identi)ikatori u C# jeziku. - identi)ikatori moraju poinjati slovom ili donjom 'rtom ( N % - identi)ikator mo0e sadr0ati slova# 'i)re i3ili donje 'rte - identi)ikator ne mo0e sadr0ati druge spe'ijalne znake# osim donje 'rte - identi)ikator ne mo0e sadr0ati znak praznine o ko se identi)ikator sastoji iz vi$e od jedne rei# one se mogu razdvajati donjom 'rtom# ili pisati spojeno. - identi)ikatori su osetljivi na razliku izmedju velikih i malih slova o +a primer .ojaPromenljiva i mojapromenljiva su dva razliita identi)ikatora. - kljune rei koje imaju spe'ijalno znaenje u jeziku ne mogu biti identi)ikatori Konven#ija imenovanja identi$ikatora .okom ovog kursa pridr0ava&emo se slede&e standardne konven'ije imenovanja identi)ikatora2 Imena promenljivih poinju malim slovom. (koliko se ime metode ili klase sastoji od vi$e rei# svaka nova re u imenu promenljive poinje velikim slovom. +a primer2 mojaPromenljiva , ceoBroj , nekiString , x, y, x1, y1, ceoBroj1, nekoSlovo , ... Imena metoda i klasa poinju velikim slovom. (koliko se ime promenljive sastoji od vi$e rei# svaka nova re u imenu promenljive poinje velikim slovom. +a primer2 8ojaMetoda , NekaKlasa, ac!nanjeKorena, K!ca, "grada, Datoteka, #elicinaDatoteke , ...
Klju%ne re%i jezika C# ( tabeli 9.9 su prikazane sve kljune rei jezika C#. +eke od njih &emo obraditi u okviru ovog kursa. abstract const extern int o!t s$ort ty%eo& as contin!e &alse inter&ace override si'eo& !int base decimal &inally internal %arams stackalloc !long bool de&a!lt &ixed is %rivate static !nc$ecked break delegate &loat lock %rotected string !nsa&e byte do &or long %!blic str!ct !s$ort case do!ble &oreac$ names%ace readonly s(itc$ !sing catc$ else goto ne( re& t$is virt!al c$ar en!m i& n!ll ret!rn t$ro( void c$ecked event im%licit object sbyte tr!e volatile class ex%licit in o%erator sealed try ($ile Promenljive& konstante i osnovni tipovi podataka "ojam promenljive# konstante i osnovnih tipova podataka obradjen je u okviru predmeta (vod u programiranje. ( ovom poglavlju dajemo kratak pregled osnovnih tipova podataka u jeziku C#. Integer i njegove varijante o ( zavisnosti od veliine memorijskog prostora i naina prezenta'ije broja postoje slede&i tipovi podataka za predstavljanje 'elih brojeva2 Na'iv De&inicija Broj bajtova byte ceo broj i'medj! ) i *++ 1 sbyte ceo broj i'medj! ,1*- i 1*. 1 s$ort ceo broj i'medj! ,/*.0- i /*.0. * !s$ort ceo broj i'medj! ) i 0++/+ * int ceo broj i'medj! ,*11.1-/01- i 1 *11.1-/01. !int ceo broj i'medj! ) i 1*2120.*2+ 1 long ceo broj i'medj! ,2**//.*)/0-+1..+-)- - i 2**//.*)/0-+1..+-). !long ceo broj i'medj! ) - i 1-110.11)./.)2++101+ bool o (zima vrednosti true ili )alse )loat ( @ bajta % i double ( X bajtova % o 4e'imalni brojevi u prezenta'iji sa pokretnim zarezom o Yubi se na pre'iznosti kada se vr$e aritmetike opera'ije de'imal ( 9> bajtova % o 4e'imalni broj do >X znaajnih 'i)ara o ritmetike opera'ije su pre'izne# tako da se mo0e koristiti za predstavljanje novanih vrednosti 'har ( > bajta % o Karakter u (ni'ode )ormatu