Professional Documents
Culture Documents
Objektno Orijentisano Programiranje: Klase
Objektno Orijentisano Programiranje: Klase
programiranje
Klase
Strukturalno i oo programiranje
Dosad smo prouavali strukturalne programe,
tj. programe koji ne koriste nijednu
objektno-orijentisanu karakteristiku jezika C++
Da bi se pisali objektno-orijentisani programi,
moraju se koristiti klase i objekti
Objektno-orijentisana aplikacija sastoji se od skupa
objekata koji meusobno komuniciraju slanjem
poruka i odgovaranjem na njih
Objektno-orijentisano programiranje zasniva se na
principu definisanja sopstvenih tipova podataka
Objektno orijentisano programiranje
ta je klasa?
Klasa je korisniki definisan tip podataka kojim se
modeliraju objekti slinih svojstava
Uoavanje zajednikih osobina (svojstava) objekata
i njihovo grupisanje u klasu naziva se apstrakcija
Klasa je opisana svojim:
o
o
Klase
Klasa se deklarie kljunom rei class
class ime_klase { lista_clanova };
ta je objekat?
Objekat je primerak (instanca) klase
Poto je klasa tip, objekti se mogu smatrati
promenljivama tog tipa u programu
Objekti klase se deklariu navoenjem imena klase
iza koga slede nazivi objekata razdvojeni zarezima
lanovima klase pristupa se pomou znaka .
Objekat
Svaki objekat klase ima sopstveni skup vrednosti
lanova svoje klase
Osobine oo jezika
Sakrivanje podataka (encapsulation)
Nasleivanje (inheritance)
Polimorfizam (polymorphism)
Kapsuliranje
Sakrivanje detalja realizacije klase
Korinicima klase potrebno je samo precizno
definisati ta se sa objektima klase moe raditi,
a nain kako se to radi sakriva se od korisnika
Nema naina da neki objekat zaviri u unutranjost
drugog osim ako mu to ovaj nije eksplicitno dozvolio
Kontrola pristupa podacima lanovima i funkcijama
lanicama klase zadaje se modifikatorima public,
protected i private
Objektno orijentisano programiranje
Nasleivanje
Klasa se moe definisati tako da nasledi sve osobine
neke postojee klase, ali da ima i jo neke dodatne,
svoje osobine
Tako dobijena klasa zove se izvedena (derived class)
iz osnovne klase (base class)
Izvedena klasa je jedna vrsta (a kind of) druge klase
class Izvedena_klasa : public Osnovna_klasa {lista clanova};
10
Nasleivanje
Nasleivanjem se uvodi hijerarhija u sistem klasa
Izvedena klasa nasleuje sve osobine osnovne
klase, a definie samo one nove, koje je ine
jedinstvenom
Mehanizam nasleivanja omoguuje objektu da
bude specifini primerak nekog uoptenijeg sluaja
11
Polimorfizam
Najee se definie izrekom jedan interfejs, vie
metoda
Svojstvo da svaki objekat izvedene klase, ak i kada
mu se pristupa kao objektu osnovne klase, izvrava
metod tano onako kako je to definisano u njegovoj
izvedenoj klasi, naziva se polimorfizam
Koncept polimorfizma pomae u ponovnoj upotrebi
gotovog koda (code reuse)
12
13
14
Konstruktori klasa
Specijalna funkcija lanica koja se automatski
poziva na poetku ivotnog veka objekta zove se
konstruktor
Konstruktor slui za inicijalizovanje objekta
Konstruktor je funkcija lanica koja ima isto ime kao
klasa, a nema povratni tip
Konstruktor moe, ali ne mora imati argumente
Konstruktor se moe preklopiti, tj. za istu klasu moe
se definisati vie konstruktora koji se razlikuju po
tipu ili broju argumenata
Objektno orijentisano programiranje
15
16
17
18
19
20
21
Destruktori klase
Funkcija lanica koja se automatski poziva kada
objekat prestaje da ivi zove se destruktor
Ime destruktora je isto kao ime klase, sa prefiksom
~ (tilde)
Default destruktor nema povratni tip, nema
argumente, ne moe biti preklopljen i javan je
(public)
Moemo da napravimo i sopstvenu verziju
destruktora
Objektno orijentisano programiranje
22
Destruktori
23
Inline funkcije
U definicijama klase esto se koriste ugraene
(inline) funkcije, mada one nisu oo karakteristika
jezika
Inline funkcije od prevodioca zahtevaju da kod tela
funkcije ugradi neposredno u kod programa na
mestima poziva te funkcije, umesto uobiajenog
postupka poziva funkcije
Inline je zapravo zahtev za optimizaciju koda koji
moe ali ne mora biti ispunjen
24
Inline funkcije
Funkcije lanice su podrazumevano inline ako se
njihova definicija navodi unutar deklaracije klase
Moe se deklarisati kao inline i van deklaracije klase
Mehanizam inline treba paljivo primenjivati,
samo za vrlo jednostavne funkcije
25
Pokaziva this
Svaka funkcija lanica koja se izvrava sadri
skriveni pokaziva na objekat koji ju je pozvao
Taj pokaziva zove se this
Kada u funkciji lanici koristimo direktno neki
podatak lan pristupom preko imena, kompajler
automatski razume da koristimo (*this).ime_lana,
to se krae pie kao this->ime_lana
26
Understand this
Ukoliko je potrebno, pokaziva this se moe i
direktno pozvati u funkciji lanici, npr. ako ona vraa
pokaziva na tekui objekat
27
28
Nizovi objekata
Objekti se
mogu smetati
u niz isto kao
prosti tipovi, i
pristupa im se
uobiajenom
sintaksom
indeksiranja
29
30
Pokazivai na objekte
Ako se koriste pokazivai na objekte, za pristup
pojedinanim lanovima koristi se operator ->
p -> funkcija() je ekvivalentno sa (*p).funkcija().
Zagrade oko *p su neophodne zato to operator .
ima vei prioritet od operatora dereferenciranja *
Adresa objekta se dobija primenom operatora &,
kao da se radi o obinoj promenljivoj prostog tipa
I reference na objekte se deklariu na isti nain kao
reference na obine promenljive
31
Pokazivai na objekte
32
33
34
35
36
37
38
Memorija u programu
Heap memorija se razlikuje od drugih zona
memorije koje program koristi, kao to su memorija
za statike i automatske promenljive
Automatske promenljive deklarisane unutar bloka,
kreiraju se u steku kada program ulazi u blok i
dealociraju kada program naputa blok
Programer nema kontrolu nad alokacijom i
dealokacijom automatskih i statikih promenljivih,
ve se ona obavlja automatski
39
Operator new
Operator new pravi dinamiki objekat,
tj. alocira memoriju za njega
Operator new za operand ima identifikator tipa i
eventualne inicijalizatore (argumente konstruktora)
Operator new vraa pokaziva na dati tip
Ako nema dovoljno slobodne heap memorije da bi
se zadovoljio alokacioni zahtev, new vraa null
pokaziva
40
Operator delete
Objekat kreiran pomou operatora new naziva se
dinamiki objekat, jer mu je ivotni vek poznat tek u
vreme izvravanja programa.
Ovakav objekat nastaje kada se izvri operator new,
a traje sve dok se ne ukine operatorom delete
(moe da traje i po zavretku bloka u kome je
nastao)
41
Operator delete
Operator delete ima jedan operand koji je pokaziva
na neki tip. Ovaj pokaziva mora da ukazuje na
objekat nastao pomou operatora new
Operator delete poziva destruktor za objekat na koji
ukazuje pokaziva, a zatim oslobaa zauzeti prostor
Operator delete vraa void
42
43
44
45
Konstruktor kopije
Prilikom kopiranja objekta ne poziva se obian, ve
konstruktor kopije (copy constructor) zato to obian
konstruktor inicijalizuje objekat
Kada kopiramo objekat, mi ne elimo da ga
inicijalizujemo konstruktorom, ne treba nam njegovo
poetno, ve trenutno stanje
Kada se funkcija zavri, lokalna kopija objekta se
unitava pozivom (standardnog) destruktora klase
46
47
ta da se radi?
Reenje br.1:
o
o
Reenje br. 2
Redefinisati konstruktor kopije tako da radi
ono to elimo
o
48
49
Konstruktor kopije
Konstruktor kopije (copy constructor) je specijalan,
preklopljen konstruktor klase koji se poziva uvek
kada se pravi kopija objekta
Deklarie se sa jednim argumentom tipa
ime_klase&
ime_klase (ime_klase&)
50
Konstruktor kopije
Inicijalizacija se deava u tri sluaja:
o
o
51
Konstruktor kopije
52