Professional Documents
Culture Documents
NET Framework je
platforma na kojoj
mogu raditi razliite
vrste aplikacija
(Windows aplik., Web
apl., Web servisi...)moe
koristiti bilo koji pr.jez.C++, Visual Basic
Objekat je primerak
(instanca) klase.
Klasa pred. skup
podataka i instruk. koje
se izvode na nekim
podacima. Klasa je skup
pravila koji odreuju
kako e se formirati neki
objekat. Svaka klasa ima
svoje lanove i to su
podaci i kod. Podaci koji
se definiu u klasi
obino se nazivaju polja
(fields).. Metodi su
podprogrami i oni mogu
imati svojstva, dogaaje
i konstruktore. Metodi
se izvravaju nad
poljima koja su
definisana u klasi.
Da bi aplikacija bilo ta
radila potrebno je dodati
bar dve linije koda ispod
glavne
funkcije
(metode) static void
Main(string[] args)
namespace
predstavlja .NET nain
da se kod i njegov
sadraj
jedinstveno
identifikuju. Koristi se
za
kategorizaciju
elemenata
u
.NET
Framework. namespace
je deklarisan za kod
aplikacije koja se u
ovom sluaju naziva
ConsoleApplication1.
using
System;predst.
korienje
System
namespace
(odnosi se na biblioteku
klasa .NET Framework,
iju biblioteku koristi
C#). Za vee projekte
moe
se
kreirati
sopstveni namespaces.
class
Primer{
-definicija klase Primer.
Poetak klase poinje sa
otvorenom
vitiastom
zagradom {, a zavrava
se sa zatvorenom viti.
zagradom }.
static void Main()poinje glavni metod,
gde se izvrava program.
Ovaj metod poinje sa
static, to znai da je
statiki i void - ne vraa
vrednost.
Console.WriteLine("
Jednostavan
C#
program.");
-WriteLine() je funkcija
koji kao rezultat vraa
string koji mu je
prosleen.
Console - podrava
konzolni
I/O.
U
kombinaciji
se
kompajleru govori da je
WriteLine()
lanica
Console klase.
Izrazi u C# se zvravaju
sa taka-zarezom (;).
Console.ReadKey();
- metoda za unos nekog
znaka sa tastature (za
prekid rada programa)
Console.ReadLine();
- metoda za unos stringa
pomou
standardnog
ulaza (tastature)
Tip
bool
Znaenje
Predstavlja
true/false
vrednosti
byte 8-bitni pozitivna
celobr.vredn.
char Znakovne
vrednosti
deci Numeriki tip
mal vredn. za
finansijske
obraune
doub Realne
le
vredn.dvostruke
preciznosti
float Realne
vrednosti
int
Celobrojne
vredn. (32
bitne)
long Celobrojne
vrednosti veeg
opsega (64
bitne)
sbyt 8-bitna
e
celobr.oznaena
(+ i -) vrednost
shor 16-bitna celobr.
t
vrednost
uint Neoznaena
celobr. vrednost
ulon Neoznaena
g
celobr. vrednost
veeg opsega
usho Neoznaena
rt
celobrojna
vrednost manjeg
opsega
2
unarni - izvravaju se
na jednom operandu
(promenljivoj)
binarni - koriste se u
kombinaciji
sa dva
operanda
tenarni - koristi se u
kombinaciji sa tri
operanda (kondicionalni
operator:
uslov ? prvi_izraz:
drugi_izraz;)
Tipovi
konverzije
promenljivih mogu biti:
Implicitna konverzijakonverzija iz tipa I u tip
II je mogua u svim
sluajevima, i pravila
izvoenja konverzije su
jednostavna.
Eksplicitna konverzijakonverzija iz tipa I u tip
II je mogua samo u
odreenim sluajevima
ili
su
pravila
za
konverziju
prilino
komplikovana.
Opcionalni
parametar
args u Main() funkciji
obezbeuje nain za
dobijanje
informacija
izvan aplikacije.
metode ReadLine i Parse
vraaju vrednosti koje se
koriste u programu. Ove
definisane
metode
vraaju samo jednu
vrednost koristei na
kraju
return
promenljiva.
Nizovi
u
C#
predstavljaju
objekte.
Deklaracija niza vri se
na sledei nain:
osnovni tip ime
niza
Osnovni tip moe biti
int, float, string, kao i
enumeracija ili struktura.
Niz
se
mora
inicijalizovati
pre
upotrebe.
Strukture su sloeni
tipovi podataka koji se
sastoji od nekoliko
podataka
obino
razliitog tipa
Enumerisani tipovi su
takvi tipovi podataka
koji imaju odreenu
"orijentaciju", gde se
definie neki niz od n
vrednosti koji redom
uzimaju indekse od 0 do
n-1. Definiu se sa
kljunom rei enum
nakon
koga
sledi
deklaracija
promenljivih. Ukoliko se
eli dodeliti neka druga
vrednost promenljivoj,
eksplicitno se dodeljuje
u okviru definicije tako
to se koristi operator =.
Klasa je korisniki
izveden tip podataka
koji se sastoji od polja
razliitog tipa i metoda.
Klasa definie podatak i
njegovo ponaanje.
Objekat je konkretan
primerak klase. esto se
meaju pojmovi klase i
objekat. Klasa predst. tip
objekta, kao to je npr.
int tip neke celobrojne
promenljive.
Ako se klasa ne
deklarie kao static,
korisnik kod moe
koristiti kreiranjem
objekata ili primeraka
(instanci) koji se odnose
na neku promenljivu.
Ako se klasa deklarie
kao static postoji tada
samo jedna kopija u
memoriji i korisniki
kod mu moe pristupiti
3
klase prenose na drugu
klasu koja se naziva
izvedenom klasom. Pri:
Definiimo 2 klase:
KAPITALISTA i
RADNIK. Razmotrimo
podatke koji se mogu
pridruiti ovim
entitetima. Npr. klasi
KAPITALISTA prirodno
je pridruiti podatke
kapital i profit (brojni
tipovi podataka) i
metodu profitiranje.
Klasi RADNIK moemo
dodeliti podatke plata i
norma, i metodu
proizvodnja. Atributi i
metode se vezuju za
odreenu osobu koja se
moe identifikovati
adresom. Moemo
definisati i klasu
OSOBA koja sadri
atribut ime i prezime,
adresa i npr. metodu
pisanje. Zakljuujemo
da i klasa
KAPITALISTA i klasa
RADNIK pored ve
pridruenih atributa i
metoda treba da ukljue
atribute i metode
sadrane u klasi
OSOBA.
Ovde je prikazano da
klasa KAPITALISTA i
RADNIK nasleuju
sadraj klase OSOBA;
tako podrazumevaju sve
to i klasa OSOBA sa
dodatkom lanova
specifinih za svaku od
izvedenih klasa.
Potrebno je naglasiti da
postoji razlika izmeu
nasleivanja i
sadravanja. To su
suprotne veze jer sloen
objekat sadri
jednostavan objekat dok
specifian objekat se
izvodi (nasleuje) optiji
objekat.
Koncept nasleivanja je
put ka formiranju
organizovanih familija
klasa koje mogu dalje da
se proiruju. To u
mnogome podsea na
programerske bibl.
funkcija.Ukoliko postoji
nasleivanje, ono se
mora odrediti u definiciji
klase. Osnovna klasa se
dodaje izvedenoj tako
to se iza imena
izvedene klase stave dve
take (:).
Svaki objekat nastane u
jednom trenutku, pa se
izvesno vreme koristi ili
neto radi, i na kraju je
potrebno da se uniti.
Tako da postoje 2
znaajne faze.
U I fazi, objekat se
inicijalizuje koristei
konstruktor. U II fazi
neophodno je unititi
objekat (oslobaanjem
memorije i sl) koristei
destruktor.
Postoje dva tipa
konstruktora:
1.podrazumevani
(default) konstruktor
2.konstruktor
inicijalizacije
Sve definicije klasa
sadre bar jedan
konstruktor bez
argumenata koji se
naziva podrazumevani
konstruktor (default
constructor), koji
predstavlja metod koji
ima isto ime kao ime
klase i nema argumente,
moe se definisati u
okviru klase, ali i ne
override modifikator je
neophodan kod primene
nasleenih metoda,
svojstava, itd ili
virtuelnih metoda. Ne
koristi se kod statikih
metoda.
Svojstva (properties) su
lanovi koji obezbeuju
fleksibilan mehanizam
za itanje, pisanje, ili
izraunavanje vrednosti
privatnih polja i mogu
se koristiti kao da su
javni podaci lanova, ali
su oni zapravo posebne
metode koje se nazivaju
metode za pristup
(accessors).
Na ovaj nain, podaci su
lako dostupni, a postoji
sigurnost i fleksibilnost
metoda.Svojstva
obezbeuju pristup
javnim podacima
lanova, bez rizika koji
dolaze sa nezatienim,
nekontrolisanim, i
nepotvrenim pristupom
podacima objekta. Ovo
se postie pristupanjem
posebnim metodama i
preuzimanje vrednosti iz
osnovnih podataka.
set metod omoguava
lanovima da budu
oznaeni (koristi se pri
unosu podataka), a
get metod za pristup
vraa vrednosti
podataka lanova
(koristi se pri ispisu
podataka).
Primitivni tipovi kao
to su int, float i char
se nazivaju vrednosnim
tipovima. Promenljive
ovog tipa sadre neku
vrednost.
Klase meutim
predstavljaju referentne
tipove podataka.
Promenljiva tipa class ne
sadri vrednost Student,
Rada
4
ve referencu na objekat
tipa Student. To znai da
vrednosni tipovi uvaju
vrednosti, a referentni
tipovi uvaju reference.
Zbog naina uvanja
podataka, vrednosni
tipovi se nazivaju i
direktnim tipovima, a
referentni indirektnim
tipovima podataka. Ako
uzmemo primer neke
celobrojne promenljive
a kojoj se inicijalizuje
vrednost npr. 5, i druge
celobrojne promenljive
b kojoj se dodeljuje
vrednost promenljive a,
onda postoje dva
primerka vrednosti 5.
int a = 5;
int b = a;
Ako s deklariemo kao
primerak klase Student,
posledice su drugaije.
Kada se s deklarie kao
Student, s postaje ime
promenljive koja
referencira na objekat
tipa Student. Ako
deklariemo jo jednu
promenljivu refs tipa
klase Student, ona
postaje ime promenljive
koja moe da referencira
na objekat tipa Student.
Ako se promenljivoj
refs dodeli s, refs e
referencirati na isti
objekat tipa Student na
koji referencira s, tako
da postoji samo jedan
objekat tipa Student, i
dve promenljive refs i s
koje referenciraju na
njega:
Student s = new
Student("Markovic
Ivan", "234/2007",
55, 5);
Student refs = s;
Vrednosni (primitivni)
tipovi podataka su:
-numerii tipovi
podataka (int, float,
decimal, short...)
-bool
-strukturni tipovi
podataka
Rada
5
-enumerisani tipovi
podataka.
Referentni tipovi
podataka su:
Klase,stringovi,delegati,
object (objekti),
interfejsi.
Vrednosni tipovi uvaju
vrednosti, a referentni
uvaju reference. Zbog
naina uvanja podataka
vrednosni tipovi se
nazivaju direktnim
tipovima, a referentni
indirektnim tipovima.
Npr. ako imamo
celobrojnu promenljivu
p=10, p je ime
celobrojne promenljive
koja uva vrednost 10.
Ako napravimo kopiju
ove promenljive kp koja
uzima inicijalno
vrednost p dobijamo:
int p = 10;
int kp = p;
Na ovaj nain se
dobijaju dva primerka
vrednosti 10, jedna je u
p, a druga u kp. Ako se
npr. k deklarie kao
klasa Kvadrat, posledice
su drugaije. U prvom
sluaju k postaje ime
promenljive koja
referencira na objekat
tipa Kvadrat. Ako se
deklarie refk kao jo
jedna promenljiva tipa
Kvadrat, to postaje ime
promenljive koja
referencira na objekat
tipa Kvadrat. Zatim
emo dodeliti k
promenljivoj refk, pa e
refk referencirati na isti
objekat tipa
Kvadrat na koji
referencira k. U ovom
sluaju postoji samo
jedan objekat tipa
Kvadrat, a dve
promenljive refk i k
referenciraju na njega.
Kvadrat
k=new
Kvadrat(30);
Kvadrat
refk=k;
System.Object-Jedan
od najvanijih
referentnih tipova je
klasa Object prostora
imena System radnog
okruenja Microsoft
.NET:
namespace System
Ovo je znaajna klasa,
pa ak i kljuna re
object u sutini
predstavlja samo jedan
alijas (referentna
promenljiva je
alternativno ime za
drugu promenljivu) za
System.Object. U kodu
programa moe da se
napie object ili
System.Object; znaenje
je identino. Tako,
promenljive koje su tipa
object mogu da
referenciraju na
primerak bilo koje klase.
Na pr.
Pakovanje je proces
konvertovanje
vrednostnog tipa u tip
object ili neki interfejs
tip koji koristi taj
vrednosni tip. Kada
CLR pakuje vrednosni
tip, tada je vred. u
System.Object i
smetena je na heapu.
Promenljive tipa object
mogu da referenciraju na
bilo koju vrednost nekog
tipa. Na pr. ako se
inicijalizuje promenljiva
i (tipa int) sa 123 i zatim
inicijalizuje promenljiva
o (tipa object) sa i:
int i = 123;
// Pakovanje i.
(kopira vrednost i u
objekat o)
object o = i;
Referenca unutar
promenljive o ne
referencira na
promenljivu i. Vrednost
i se nalazi na steku, pa
se zbog toga na heap
memoriji pravi tana
kopija vrednosti iz i, a
referenca unutar o
referencira na tu kopiju.
To automatsko kopiranje
se naziva pakovanjem.
Raspakivanje-Poto
promenljiva tipa object
moe da referencira na
upakovanu kopiju neke
vrednosti, tako se preko
te promenljive moe
dozvoliti pristup
upakovanoj kopiji.
Sledei primer pokazuje
kako se vri
raspakivanje:
int i = 123; // a
vrednosni tip
object o = i; //
pakovanje
int j = (int)o; //
raspakivanje
U C# izuzeci pomau pri
nekim neoekivanim
situacijama koje nastaju
pri radu aplikacija. Pri
obradi izuzetaka koriste
se throw, try, catch i
finally kljune rei pri
radu sa nekim delovima
koda koji se ne mogu
izvriti, ili
pri prihvatanju greki
koje nismo predvideli.
Izuzeci se formiraju
pomou CLR (Common
Language Runtime),
.Net Frameworka ili
koda date
aplikacije.
Try / catch blokovi slue
za obradu greaka u C#u. Try blok sadri
naredbe koje
potencijalno mogu da
sadre greke. Ako doe
do greke, generie se
odgovarajui izuzetak
exception, nakon ega se
programski tok
preusmerava na
odgovarajui catch blok
koji sadri kod za
obradu generisanog
izuzetka. Catch blokovi
se piu odmah iza try
bloka. Moe biti vie
catch blokova koji
hvataju razne vrste
izuzetaka
U veini sluajeva
izuzeci mogu biti
izbaeni ne samo
metodom koji se
direktno poziva u kodu,
vee sa drugim
metodom koji se nalazi
na pozivajuem steku.
Ukoliko postoji try/catch
blok, CLR e preurediti
stek traei catch blok za
odreeni tip izuzetka, i
izvrie prvi takav catch
blok koji pronae. Ako
se ne pronae
odgovarajui catch blok
bilo gde u pozivajuem
steku, proces e se
unitititi i ispisati poruka
korisniku.
Kolekcije su standardne
strukture podataka koje
dopunjuju nizove.
Nizovi su jedina
kolekcija koja je
ugraena u C# jezik. Sve
ostale kolekcije su
Rada
6
ugraene u prostor
imena (namespace)
System.Collections.
Interfejsi koji su
definisani u ovom
namespaceu:Ilist,Icollection,Idictio
nary,IEnumerable,IEnu
merator
IList interfejs
predstavlja kolekciju
koja sadri elemente sa
mogunou pristupa
tim elementima. Sledee
klase se odnose na ovaj
interfejs:System.Array,S
ystem.Collections.Arra
yList,System.Collectio
ns.Specialized.StringC
ollection,System.Collec
tions.Specialized.String
Dictionary
Ovde su navedene klase
koje su izvedene iz
interfejsa
ICollection:System.Coll
ections.Stack
,System.Collections.Qu
eue .
System.Collections.BitA
rray,System.Collections.
Specialized.NameValue
Collection
IDictionary interfejs
predstavlja kolekciju
koja ima par vrednosnih
imena Kolekcije koje
nasleuju IDictionary
interf.su:System.Collect
ions.Hashtable,System.
Collections.SortedList,
System.Collections.Spec
ialized.HybridDictionary
,System.Collections.Spe
cialized.ListDictionary
Klasa ArrayList je
dinamii niz razliitih
vrsta objekata. U niz se
mogu smestiti samo
Rada