Professional Documents
Culture Documents
void uci(Lekcija X)
{
}
}
Da bi napravili objekat, upotrebljavamo izraz oblika
<ime objekta> =new <ime klase> () .
Korienjem operatora new odvaja se u dinamikoj memoriji prostor za
registrovanje objekta klase <ime klase>. Ovaj operator vraa adresu dodeljenog prostora
koju onda moemo dodeliti imenu objekta:
Ucenik x=new Ucenik();
Atributima opisujemo odreenu osobinu objekta (ime, prezime, datumRodjenja,
razred, odeljenje). Najee, razliiti objekti iste klase imaju razliite vrednosti atributa.
esto kaemo da vrednosti atributa definiu stanje objekta. Pri opisu atributa moramo
navesti tip kome taj atribut pripada (celobrojni, realni, znakovni, ) i ime atributa. Pristup
atributima objekta neke klase realizujemo na sledei nain:
imeObjekta.imeAtributa
Na primer, ako je x objekat klase Ucenik, atributu ime pristupamo navoenjem
x.ime.
Metodom opisujemo ponaanje objekta u odreenoj situaciji i pod odreenim
uslovima (uci), ali i odreujemo nove vrednosti na osnovu osobina koje objekat poseduje
(prosek). Na taj nain opisujemo funkcionalnost objekta.
Metod klase je imenovani blok naredbi koji se sastoji iz zaglavlja i tela metoda. U
zaglavlju navodimo povratni tip (ako metod ne proizvodi vrednost koju vraa, navodimo
rezervisanu re void), zatim ime metoda za kojim sledi u malim zagradama spisak
parametara metoda. Za svaki parametar navodi se tip kome taj parametar pripada kao i
ime parametra. Posle zaglavlja u vitiastim zagradama navodimo telo metoda koje se
sastoji iz odgovarajuih iskaza programskog jezika C#.
<povratni tip> <ime metoda>(<lista parametara>)
{ <telo metoda> }
Svojstva
Jedna od najznaajnih karakteristika objektno orijentisanog programiranja je
enkapsulacija (zatvorenost, uaurenje) objekata. Pod enkapsulacijom objekta
podrazumevamo kontrolisan pristup elementima objekta. Nekim elementima objekta
mogu pristupiti svi koji taj objekat na bilo koji nain koriste. Te elemente nazivamo
javnim (public) i oni ine deo preko koga objekat komunicira sa drugim objektima.
Nasuprot njima postoji deo objekta koji ne koristimo direktno u komunikaciji sa drugim
objektima, da ne bi bio izloen neovlaenom pristupu ili promeni. Za takve elemente
kaemo da su privatni (private).
Vrlo esto postoji potreba da se atributi zatite od neovlaenog pristupa ili
promene pa su oni uglavnom privatni lanovi klase, dok su metode u veini sluajeva
javne.
Posmatrajmo klasu Vreme kojom emo opisivati trajanje odreenih procesa.
Vreme moemo definisati uz pomo razliitih atributa na primer satima, minutama i
sekundama, ili danima, satima, minutama i sekundama i slino. Da bi to efektnije
prikazali razliite elemente klase, vreme emo u primeru koji sledi definisati samo jednim
atributom koji predstavlja broj sekundi.
public class Vreme
{
long sekunde; // ili Int64 sekunde;
public long VratiSate() // broj sati sadrzanih u vremenu
{
return sekunde / 3600;
}
public long VratiMinute() // broj minuta sadrzanih u vremenu
{
return sekunde/60;
}
public long VratiSekunde()
{
return sekunde ;
}
}
Metode VratiSate i VratiMinute raunaju odreene informacije pa je razlog
njihovog postojanja intuitivno jasan. Postavlja se pitanje zato postoji metoda
VratiSekunde kada broj sekundi sadranih u vremenu opisuje atribut sekunde. Atribut
sekunde je privatni lan klase pa ne moemo saznati njegovu vrednost van nje. Zato
uvodimo javni metod VratiSekunde() koji e nam omoguiti pristup toj informaciji. Ovim
metodom dobijamo informaciju o broju sekundi ali je i dalje ne moemo promeniti
(read-only).
Radi lakeg pristupa privatnim atributima klase u programskom jeziku C#
moemo kreirati svojstva (property) i ona po potrebi mogu imati sledee komponente:
Indekseri
U programskom jeziku C# moemo imati lanove klase koje zovemo
indekserima, koji imaju slinosti sa svojstvima ali i svojih specifinosti.
Indekser nam omoguava da pojedinim karakteristikama objekata klase
pristupamo na efikasan nain, navoenjem imena objekta i u uglastim zagradama
indeksa koji nas upuuje na odgovarajuu karakteristiku. Kao i svojstva, indekseri imaju
get i set komponentu u kojima se u zavisnosti od vrednosti indeksa odreuje
karakteristika objekta, odnosno postavljaju vrednosti atributa. Za razliku od svojstava
indekser ima najmanje jedan parametar a moe imati i vie parametara, pa objekat dobija
vie dimenzija. Indekser definiemo na sledei nain:
public <povratni tip indeksera> this[ <tip indeksa > <imeindeksa>, ]
{
get { <telo get komponente> }
set {<telo set komponente> }
}
Indekseru programer ne zadaje ime jer on uvek koristi ime this. Slino
metodama, indekseri mogu imati preklopljene verzije, koje se moraju razlikovati po broju
ili po tipu indeksa.
Klasu Vreme moemo proiriti indekserom koji, u zavisnosti od indeksa, vraa
Sat, Minut ili Sekund. Za indeks moemo izabrati: prethodno definisani nabrojivi tip
(enum) ije su mogue vrednosti sat, minut i sekund, ili tip char tako da za vrednosti
indeksa redom 'h', 'm' i 's' vraa Sat, Minut i Sekund, ili tip string... U navedenoj
realizaciji indeksera koristimo prethodno definisana svojstva. Ovaj indekser mogli smo
realizovati i bez korienja tih svojstava i u tom sluaju on bi mogao i zameniti ta
svojstva. Na slian nain kako je realizovana set komponenta svojstava Sat, Minut i
Sekund moemo realizovati i set komponentu za svaki od navedenih indeksera.
public enum JedinicaVremena
{
sat,
minut,
sekund
}
public long this[JedinicaVremena j]
{
get
{
if (j == JedinicaVremena.sat)
return Sat; // return sekunde / 3600;
if (j == JedinicaVremena.minut)
return Minut; // return (sekunde / 60) % 60
return Sekund;
}
}
public long this[char ch]
{
get
{
if (ch == 'h')
return Sat;
if (ch == 'm')
return Minut;
if (ch == 's')
return Sekund;
return sekunde;
}
}
Ako je A objekat klase Vreme vrednost izraza A[JedinicaVremena.sat] i
A['h'] je broj sati sadranih u vremenu A.
Konstruktori
U C# pri deklaraciji neke instance klase, objekta, rezervie se prostor za adresu
objekta (referencu) a sam objekat se kreira korienjem operatora new .
<ime klase> <ime objekta> = new <ime klase>(<lista parametara>) ;
Operator new vraa adresu novog objekta koju dodeljujemo imenu objekta.
Konstruktor je metod koji se poziva pri kreiranju objekta. Konstruktori su sastavni
deo svake klase i nose njeno ime. Pozivom konstruktora objekat poinje svoj ivot. Klasa
moe imati vie konstruktora koji se razlikuju po listi parametara. Lista parametara
najee sadri vrednosti kojima inicijalizujemo atribute objekta, a moe biti i prazna.
Ako pogramer ne napie ni jedan konstruktor programski prevodilac bi napravio
podrazumevani konstruktor (konstruktor bez parametara, numerikim tipovima dodeljuje
0, logikim atributima dodeljuje vrednost false, referentne atribute postavlja na null).
Ako piemo vie konstruktora, kako svi imaju ime klase, moraju se razlikovati po
listi parametara, tj. po broju ili tipu parametara.
Za klasu Vreme, definisanu u prethodnom delu lanka, moemo definisati sledee
konstruktore:
Zakljuak
Ovo je prvi u nizu lanaka koji planiramo, kojima emo pokuati da populaciji
profesora informatike pribliimo objektno orijentisano programiranje i jedan savremeni
programski jezik koji se, po naim dosadanjim iskustvima, vrlo uspeno moe upotrebiti
u nastavi, u svim fazama uenja programiranja.
U ovom prvom delu smo Vas upoznali sa osnovnim elementima klase a planirano
je da u naredna dva lanka obradimo operatore i nasleivanje.
Predlaemo itaocima da slino naem primeru klase Vreme realizuju i sledee
klase:
TackaDekart koja predstavlja taku u Dekartovom koordinatnom sistemu za koju
moete definisati svojstva RastojanjeOdCentra, Kvadrant