Download as pdf or txt
Download as pdf or txt
You are on page 1of 0

Copyright Link group

Klase i objekti


Definisanje klase

Klasa predstavlja apstraktnu predstavu skupa objekata koji imaju iste osobine. Sastoji se
od atributa i metoda. Atributi i metode se nazivaju lanice klase.Objekat predstavlja
konkretan primerak- instancu klase. Klasu treba shvatiti kao skicu na osnovu koje e
kasnije biti kreirani objekti. U nastavku je prikazana klasa AutomatNovca koja ima dva
javna atributa imePrezime i stanje.

public class AutomatNovca
{
public string imePrezime;
public double stanje;
}

Da bi se klasa definisala koristi se kljuna re class ispred imena klase. Preporuka je da
ime klase poinje velikim slovom. Ako se ime klase sastoji iz vie rei tada svaka sledea
re poinje velikim slovom. Klasa je korisniki definisani tip.

Instanciranje klase , tj. kreiranje objekata klase vri se upotrebom slubene rei new.
Funkcija koja se nalazi iza kljune rei new naziva se podrazumevani konstruktor i kao
to joj samo ime kae slui za konstruisanje objekata. Atributima objekta pristupa se
preko operatora .(taka). Ovde je kreiran objekat oznaen sa an.

AutomatNovca an = new AutomatNovca();
an.imePrezime = Pera Peric;
an.stanje = 12345.67;


Metode klase

Metoda klase je funkcija lanica klase. Svaka metoda treba da definie tip podataka
koji vraa ili ukoliko metoda ne vraa nita onda se povratni tip metode oznaava sa
void. Ukolika metoda vra neku vrednost onda se unutar tela metode koristi slubena re
return. Svaka metoda ima svoje ime. Uobiajeno da ime metode poinje malim slovom.
Metoda moe imati listu parametara ili moe biti bez parametara. Metoda prikazana u
primeru ima ime podizanjeNovca, ima jedan ulzni parametar tipa double i vraa rezultat
tipa double.

public double podizanjeNovca(double iznos)
{
stanje -= iznos ; // stanje = stanje - iznos
return stanje ;
}

Metoda se koristi za postavljanje vrednosti atributa stanje (koji se nalazi unutar iste
klase kojoj pripada i metoda podizanjeNovca). Prevedeno na poslovnu terminologiju
stanje na raunu se samnjuje za podignuti iznos.



Copyright Link group

Primer klase

Data je definicija klase AutomatNovca koja slui za rad sa nekim tekuim raunom. Klasa
ima dva atributa imePrezime i stanje, gde atribut stanje predstavlja stanje na raunu
korisnika ije je ime i prezime sadrano u atributu imePrezime. Klasa ima dve metode
uplata i podizanjeNovca. Svakom uplatom poveava se stanje na raunu korisnika za
odreeni iznos a svakim podizanjem novca vrednost na raunu se smanjuje.

public class AutomatNovca
{
public string imePrezime;
public double stanje;

// metoda uplata
public void uplata(double iznos)
{
stanje += iznos;
}
// metoda podizanjeNovca
public double podizanjeNovca(double iznos)
{
stanje -= iznos ; // stanje = stanje - iznos
return stanje ;
}
}


Pozivanje metode

Da bi se metoda klase pozvala potrebno je napraviti objekte te klase a zatim se metodi
klase pristupa korienjem operatora .(taka). Ovo vai za tzv. javne metode klase,
odnosno metode uz koje stoji slubena re public. Ovde je kreiran tekui raun tj.
objekat klase AutomatNovca za korisnika pod imenom Mika Mikic . Zatim su izvrene
dve uplate na raun korisnika pozivanjem metode uplata. Obratiti panju da metoda
uplata ima ulazni parametar tipa double i da ne vraa nikakvu vrednost. Na kraju je
izvreno jedno podizanje novca korienjem metode podizanjeNovca. Ova metoda ima
ulazni parametar tipa double i vraa rezultat tipa double. Rezultat izvravanja metode je
prihvaen u promenljivoj tipa double pod nazivom trenutniIznos.

AutomatNovca an1 = new AutomatNovca();
an1.imePrezime = "Mika Mikic";
// uplate na racun
an1.uplata(12345.23);
an1.uplata(1000);
// podizanje novca i racunanje preostalog iznosa
double trenutniIznos = an1.podizanjeNovca(456);


Definisanje konstruktora

Konstruktor je specijalna metoda klase koja se koristi za kreiranje objekata tj.
instanciranje te klase. Konstruktor ima isto ime kao i klasa. Konstruktor ne vraa
nijedan tip, ak ni void. Ukoliko se unutar klase ne definie konstruktor onda okruenje
obezbeuje podrazumevani (default) konstruktor. Podrazumevani konstruktor nema
parametre. Moe se iskoristiti za inicijalizaciju atributa klase prilikom kreiranja objekata.
Pored podrazumevanog konstruktora mogue je definisati i tzv. parametarske
konstruktore. U jednoj klasi se moe definisati veliki broj konstruktora.

Copyright Link group

U nastavku je dat primer definisanja podrazumevanog i parametarskog konstruktora:

// podrazumevani konstruktor
public AutomatNovca()
{
imePrezime = null;
stanjeNaRacunu = 100;
}

// parametarski konstruktor

public AutomatNovca(string ime, double stanje)
{
imePrezime = ime;
stanjeNaRacunu = stanje;
}

Kada se u klasi definiu metode koje imaju isto ime a razliit potpis tj. listu ulaznih
parametara onda se kae da je izvren overloading metode. Kada se u klasi definie vie
konstruktora radi se o overloading-u konstruktora.


Poziv konstruktora

U primeru je prikazan nain poziva parametarskog i podrazumevanog konstruktora.
Prilikom pozivanja parametarskog konstruktora, atributi odgovarajueg objekta koji je
konstruisan bivaju inicijalizovani.

AutomatNovca an = new AutomatNovca("Pera Peric", 12000.567);
an.uplata(100);

Kod podrazumevanog konstruktura to nije sluaj ve se atributi objekta inicijalizuju
pristupanjem preko operatora .(taka).

AutomatNovca an1 = new AutomatNovca();
an1.imePrezime = "Jovan Jovanovic";
an1.stanjeNaRacunu = 20000;


Predavanje parametara po vrednosti

Ponovo je kreiran deo klase AutomatNovca koja ima atribut stanjeNaRacunu. Da bi se
ilustrovalo predavanje parametara po vrednosti nekoj funkciji, napravljena je metoda
vratiStanjePrekoParametaraVred koja ima jedan ulazni parametar tipa double. Unutar
tela metode se vrednost tog ulaznog parametra inicijalizuje na vrednost atributa
stanjeNaRacunu. Pokuava se da se metodi prosledi neka promenljiva po vrednosti tako
da ona posle izvravanja te metode sadri vrednost atributa stanjeNaRacunu. Objekat
klase AutomatNovca oznaen sa an je kreiran primenom paremetarskog konstruktora
tako da su atributi tog objekta inicijalizovani. Metodi vratiStanjePrekoParametaraVred je
prosleena promenljiva trenutoStanje koja je prethodno inicijalizovana na vrednost nula.

public class AutomatNovca
{
public double stanjeNaRacunu ;
.......

// predavanje parametar preko vrednossti
// metoda clanica klase AutomatNovca

Copyright Link group


public void vratiStanjePrekoParametaraVred( double stanje1)
{
stanje1 = stanjeNaRacunu ;
}
............
.............
}
AutomatNovca an = new AutomatNovca("Pera Peric", 12000.567);

double trenutoStanje = 0;
an.vratiStanjePrekoParametaraVred( trenutoStanje);


Ako se sada odtampa vrednost promenljive trenutno stanje da li e njena vrednost biti
jednaka vrednosti atributa stanjeNaRacunu?


Rezultat predavanja paremetara po vrednosti

Promenljiva trenutnoStanje e i posle pozivanja metode imati vrednost 0. Razlog toga je
to se unutar f-je vratiStanjePrekoParametaraVred kreira lokalna kopija promenljive
trenutnoStanje , dok sama promenljiva ostaje ne promenjena. Dakle ako se eli promena
vrednosti spoljanje promenljive (koja nije lanica klase) tada je ne treba prosleivati
metodi klase po vrednosti.


Predavanje parametara po referenci

Spoljanji objekat ili promenljiva koja je argument funkcije se moe promeniti samo ako
se predaje po referenci. Predavanje vrednosti po referenci vri se korienjem slubene
rei ref. Tada se prilikom pozivanja metode ne pravi lokalna kopija promenljive ve se
radi sa referencom na objekat. Referencu treba shvatitia kao nadimak (engl. alias) za
stvarni objekat i sve to se deava sa referencom deava se i sa stvarnim objektom.


Primer predavanja parametara po referenci

Pri pozivu metode kojoj se promenljiva prosleuje po referenci se takoe koristi slubena
re ref. Promenljiva trenutoStanje prethodno inicijalizovana na nulu se prosleuje po
referenci. Posle izvravanja ove metode vrednost promenljive trenutoStanje se menja.

double trenutnoStanje = 0;
an.vratiStanjePrekoParametaraRef(ref trenutoStanje);

Promenljiva koja se prosleuje po refrenci mora biti inicijalizovana. Ukoliko se ne eli
prethodna inicijalizacija promenljive koja e biti predata po referenci onda se koristi
slubena re out.


Objekat kao argument funkcije

Objekti klase se uvek predaju nekoj funkciji po referenci, to znai da objekat moe
promeniti vrednost svojih atributa ako se preda nekoj funkciji. U nastavku je prikazana
klasa Omotac koja ima samo jedan atribut tipa double, objekti ovakve klase se esto
nazivaju umotani double.

Copyright Link group

public class Omotac
{
public double omotacStanja ;
public Omotac()
{
omotacStanja = 5 ;
}
}

Unutar klase AutomatNovca je sada napravljena metoda koja kao ulazni parametar ima
objekat klase Omotac. U telu metode se njegovom atributu omotacStanja dodeljuje
vrednost atributa stanjeNaRacunu klase AutomatNovca.

public void vratiStanjePrekoObjekta(Omotac om)
{
om.omotacStanja = stanjeNaRacunu ;
}


Primer prosleivanja objekta kao argumenta funkcije

AutomatNovca an = new AutomatNovca("Pera Peric", 12000.567);
Omotac umotaniDouble = new Omotac();
........
an.vratiStanjePrekoObjekta(umotaniDouble);
Console.WriteLine("Sada umotana promenljiva ima vrednost " +
umotaniDouble.omotacStanja);

U primeru su najpre instancirane klase AutomatNovca i klasa Omotac. Objekat klase
Omotac oznaen sa umotaniDouble se prosleuje metodi vratiStanjePrekoObjekta. Zbog
injenice da se objekti prosleuju po referenci atributi objekta umotaniDouble se
menjaju to se moe proveriti tampanjem vrednosti atributa na standardnom izlazu.


Funkcija koja vraa objekat

Unutar klase se moe napraviti metodakoja kao povratnu vrednost ima objekat neke
druge klase. To je sluaj i ovde sa metodom vratiObjekat unutar klase AutomatNovca.
Ova metoda vraa objekat klase Omotac. Unutar tela metode se vrednost jedinog
atributa ove klase setuje na vrednost stanjeNaRacunu klase AutomatNovca. Iitavanjem
vrednosti atributa vraenog objekta se moe proitati vrednost atributa stanjeNaRacunu
klase AutomatNovca.

public Omotac vratiObjekat()
{
Omotac tOm = new Omotac();
tOm.omotacStanja = stanjeNaRacunu ;
return tOm ;
}


Statiki lanovi klase

Statiki lanovi klase pripadaju klasi a ne objektima klase. Inicijalizuju se pre nego to se
kreira instanca klase. Pristupa im se preko imena klase. Statiki mogu biti i atributi i
metode klase. Svi objekti klase dele statike lanove klase. Deklariu se korienjem
slubene rei static. Dat je primer upotrebe statikog lana klase.

Copyright Link group

public class AutomatNovca
{
public string imePrezime;
public double stanjeNaRacunu;
public static int brojRacuna = 0;
public AutomatNovca()
{
brojRacuna ++ ;
}
........
}

Atribut brojRacuna je statiki to znai da ga dele svi objekti klase AutomatNovca. U
konstruktoru klase AutomatNovca inkrementira se ovaj statiki lan. Kad god se kreira
objekat klase AutomatNovca inkrementira se statiki lan brojRacuna tako da je vrednost
ovog lana u svakom trenutku jednaka broju kreiranih objekata klase AutomatNovca tj.
broju kreiranih tekuih rauna.


Upotreba statikog lana

Statiki lan se inicijalizuje na vrednost 20 pre kreiranja objekata klase. Zatim se kreiraju
dva objekta klase AutomatNovca. Sada je vrednost statikog lana 22.

// inicijalizacija statickog clana pre kreiranja objekata
AutomatNovca.brojRacuna = 20 ;

// kreiranje objekata
// pri kreiranju svakog objekta inkrementira se staticki clan

AutomatNovca an1 = new AutomatNovca();
AutomatNovca an2 = new AutomatNovca();
Console.WriteLine(AutomatNovca.brojRacuna);

// rezultat : brojRacuna = 22


Definisanje prava pristupa lanovima klase

Korienjem modifikatora moe se definisati pravo pristupa lanovima klase unutar
aplikacije.


Tabela 1: Prava pristupa
Kod public prava pristupa, pristup nije ogranien. Svaka druga klasa moe pristupati
javnim lanovima date klase.

Copyright Link group

Privatnim lanovima klase mogu pristupati samo drugi lanovi te iste klase. Internal
pravo pristupa je ogranieno na prostor imena. Kod protected prava pristupa pristup je
ogranien na lanove pripadajue klase kao i na lanove klase koja je izvedena iz te
klase.


Svojstva (Properties)

Svojstva su lanovi klase koji omoguavaju pristup lnovima objekta neke klase.
Svojstva se prave da bi se korisniku olakao pristup privatnim lanovima klase.
Privatnom lanu klase se ne moe pristupiti spolja preko operatora taka. Da bi se
proitala vrednost privatnog lana potrebno je napraviti javnu metodu lanicu klase koja
to moe da uradi , pa mu se pristupa indirektno preko pristupne odnosno aksesorske
metode. Slino je i sa setovanjem vrednosti privatnog lana. Property ili svojstvo u sebi
objedinjuje ove dve funkcionalnosti. On ima get deo pomou kga se ita vrednost
privatnog lana i set deo pomou koga se setuje vrednost privatnog lana. Oznaka
stanjeNaRacunu = value oznaava da e promenljiva stanjeNaRacunu biti setovana na
vrednost sa desne strane jednakosti. Properti ima povratni tip kao i promenljiva za koju
se pravi. Obino se oznaava velikim poetnim slovom. Uoiti da property nema male
zagrade kao metoda.

public class AutomatNovca
{
public string imePrezime;
private double stanjeNaRacunu;

// property za privatnu promenljivu stanjeNaRacunu

public double Stanje
{
get
{
return stanjeNaRacunu;
}
set
{
stanjeNaRacunu = value ;
}
}
}


Korienje Property-ja

U nastavku je ilustrovana upotreba propertija Stanje definisanog u prethodnom primeru.
Kada se napie izraz an.Stanje = 23000 koristi se set deo propertija stim to je value =
23000. Ukoliko posle pozivanja propertija nema znaka jednakosti i izraza na desnoj strani
koristi se get deo propertija.

AutomatNovca an = new AutomatNovca();
an.imePrezime = "Pera Peric";

// an.stanjeNaRacunu = 23000;
// ne radi jer je atribut stanjeNaRacunu privatan

// koristim set property(value = 23000)
an.Stanje = 23000 ;


Copyright Link group

// sada koristim get property da procitam stanje

Console.WriteLine("Korisnik " + an.imePrezime + " " + "ima na racunu : " +
an.Stanje + " dinara");

You might also like