03 klase i objekti
Post on 06-Jul-2018
232 Views
Preview:
TRANSCRIPT
-
8/17/2019 03 Klase i Objekti
1/54
Objektno orijentisanoprogramiranje 1
Klase i objekti
-
8/17/2019 03 Klase i Objekti
2/54
18.10.2005.Klase i objekti2
Klase i objekti – osnovni pojmovi Klasa je strukturirani tip koji obuhvata:
– podatke koji opisuju stanje objekta klase i
– funkcije namenjene definisanju operacija nad podacima klase Klasa je realizacija apstrakcije koja ima:
– internu implementaciju i – javni interfejs
Jedan primerak (instanca, pojava) klase naziva se objektom te klase
Podaci koji su deo klase nazivaju se: – podaci članovi klase (engl data members), polja ili atributi
!unkcije koje su deo klase nazivaju se: – funkcije članice (engl member functions), primitivne operacije, metode
-
8/17/2019 03 Klase i Objekti
3/54
18.10.2005.Klase i objekti3
Komunikacija objekata Jedan od osnovnih principa "" programiranja:
– objekti klasa komuniciraju (sara#uju) da ostvare slo$ene funkcije
Poziv metoda se naziva upućivanjem poruke objektu klase "bjekat klase mo$e da menja svoje stanje predstavljeno atributima
kada se pozove njegov metod, odnosno kada mu se uputi poruka "bjekat koji %alje poruku (poziva metod) naziva se objekat&klijent "bjekat koji prima poruku ('iji se metod poziva) je objekat&server
z svoje metode objekat mo$e pozivati metodu drugog objekta – pozvana metoda mo$e biti 'lanica iste ili druge klase – tok kontrole prolazi kroz razne objekte koji komuniciraju
*nutar metode, 'lanovima objekta 'ija je funkcija pozvanapristupa se navo#enjem njihovog imena
-
8/17/2019 03 Klase i Objekti
4/54
18.10.2005.Klase i objekti4
Prava pristupa (1) Klasa ima sekcije koje odre#uju pravo pristupa 'lanovima +vaka sekcija zapo'inje labelom sekcije (klju'na re')
lanovi (podaci ili funkcije) klase iza klju'ne re'i private: – nazivaju se privatnim (engl private) 'lanovima: – za%ti-eni su od pristupa spolja (kapsulirani su) – njima mogu pristupati samo metode klase (i prijatelji)
lanovi iza klju'ne re'i public: – nazivaju se javnim (engl public ) 'lanovima:
– dostupni su spolja bez ograni'enja lanovi iza klju'ne re'i protected:
– nazivaju se zaštićenim (engl protected ) 'lanovima: – dostupni su metodama date klase, kao i klasa izvedenih iz te klase – nisu dostupni ostalim funkcijama
-
8/17/2019 03 Klase i Objekti
5/54
18.10.2005.Klase i objekti5
Prava pristupa (2) .edosled sekcija public, protected i private je proizvoljan
– preporu'uje se navedeni redosled
/o$e biti vi%e sekcija iste vrste Podrazumevana sekcija (do prve labele) je privatna Preporuka je da se klase projektuju tako da nemaju javne atribute Kontrola pristupa 'lanovima nije stvar objekta, nego klase:
– objekat neke klase iz svoje metode
mo$e da pristupi privatnim 'lanovima drugog objekta iste klase Kontrola pristupa 'lanovima je odvojena od koncepta dosega imena:
– najpre se, na osnovu oblasti va$enja imena i njihove vidljivosti, odre#uje entitetna koga se odnosi dato ime na mestu obra-anja u programu
– zatim se odre#uje da li je tom entitetu dozvoljen pristup sa tog mesta
-
8/17/2019 03 Klase i Objekti
6/54
18.10.2005.Klase i objekti6
Definisanje klase (1) 0tributi (podaci 'lanovi):
– mogu da budu samo deklarisani, a ne i definisani (nema inicijalizacije) – ne mogu da budu tipa klase koja se defini%e,
ali mogu biti pokaziva'i ili reference na tu klasu /etode (funkcije 'lanice):
– u definiciji klase mogu da se: deklari%u (navodi se samo prototip) ili defini%u (navodi se i telo)
– funkcije koje su definisane u definiciji klase:
mogu neposredno pristupati 'lanovima klase 12su inline funkcije – funkcije koje su samo deklarisane u definiciji klase:
moraju biti definisane kasnije, izvan definicije klase mora se pro%iriti doseg klase (3ime4klase5::3ime4funkcije5)
– vrednost rezultata, kao i argumenti mogu biti tipa klase koja se defini%e
-
8/17/2019 03 Klase i Objekti
7/5418.10.2005.Klase i objekti7
Definisanje klase (2) 6efinicija klase mora biti prisutna tamo gde se klasa koristi
– zato se definicija klase uobi'ajeno pi%e u datoteci zaglavlju (7h) Primer definicije klase:
// definicija klase Complex:
class Complex { public:
Complex dodaj(Complex); Complex oduzmi(Complex);float re(); float im(); private: float real,imag;
; 8epotpuna definicija klase (bez tela) se naziva deklaracijom (class !;) Pre definicije klase:
– mogu da se defini%u pokaziva'i i reference na tu klasu – ne mogu da se defini%u objekti te klase
-
8/17/2019 03 Klase i Objekti
8/5418.10.2005.Klase i objekti8
Objekti (primerci) klase Primerci klase se defini%u na na'in
koji je uobi'ajen za definisanje objekata standardnih tipova:
– identifikator klase se koristi kao oznaka tipa, npr Complex c; 9a svaki objekat klase formira se poseban komplet
svih nestati'kih atributa te klase 9a svaku metodu, postoji jedinstven skup
lokalnih stati'kih promenljivih bez obzira na broj objekata te klase: – ovi objekti $ive od prvog nailaska programa na njihovu definiciju,
do kraja programa – lokalni stati'ki objekti funkcija 'lanica imaju sva svojstva
lokalnih stati'kih objekata globalnih funkcija
-
8/17/2019 03 Klase i Objekti
9/5418.10.2005.Klase i objekti9
Podrazumevane operacije Podrazumevano je mogu-e:
– definisanje objekata, pokaziva'a i referenci na objekte i nizova objekata klase –
dodeljivanje vrednosti (operator"
) jednog objekta drugom – uzimanje adrese objekata (operator #) – posredno pristupanje objektima preko pokaziva'a (operator $) – neposredno pristupanje atributima i pozivanje metoda (operator %) – posredno pristupanje atributima i metodama preko pokaziva'a (operator &') – pristupanje elementima nizova objekata (operator ) –
preno%enje objekata kao argumenata funkcija i to po vrednosti ili referenci – preno%enje pokaziva'a na objekte kao argumenata funkcija – vra-anje objekata iz funkcija po vrednosti ili referenci – vra-anje pokaziva'a na objekte
8eke od ovih operacija korisnik mo$e redefinisati preklapanjem operatora
-
8/17/2019 03 Klase i Objekti
10/5418.10.2005.Klase i objekti10
Pokaziva this (1)
*nutar svake funkcije 'lanice postoji implicitni (podrazumevani, ugra#eni)lokalni pokaziva' t*is
ip ovog pokaziva'a je konstantni pokaziva' na klasu 'ija je funkcija 'lanica 0ko je klasa +, t*is je tipa +$const "vaj pokaziva' ukazuje na objekat 'ija je funkcija 'lanica pozvana
// definicija funkcije dodaj(Complex) metode klase Complex
Complex Complex::dodaj (Complex c) {
Complex t"$this; //u t se kopira objekat cija je f&ja pozvana
t%real"c%real; t%imag"c%imag; return t;
//%%%
void main(){ Complex c,c-,c.;%%% c"c-%dodaj(c.); %%%
-
8/17/2019 03 Klase i Objekti
11/5418.10.2005.Klase i objekti11
Pokaziva this (2)
Pristup 'lanovima objekta 'ija je metoda pozvana obavlja se neposredno mplicitno je to pristup preko pokaziva'a t*is i operatora &'
/o$e se i eksplicitno pristupati 'lanovima preko ovog pokaziva'a unutar metode// nova definicija funkcije dodaj(Complex) metode klase ComplexComplex Complex::dodaj (Complex c) {
Complex t;
t%real"this&'realc%real; t%imag"this&'imagc%imag;
return t;
Pokaziva' t*is je, u stvari, jedan skriveni argument funkcije 'lanice Poziv objekat%f() se prevodi u k;d koji ima semantiku kao f(#objekat) Primeri kori%-enja:
– adresa teku-eg objekta je potrebna kao argument neke funkcije – teku-i objekat treba uklju'iti u listu
-
8/17/2019 03 Klase i Objekti
12/5418.10.2005.Klase i objekti12
Konstantne metode (1) /etoda mo$e da samo 'ita stanje ili da menja stanje objekata /etode koje ne menjaju stanje objekta:
– inspektori ili selektori (engl inspector , selector ) /etoda koja menja stanje objekta:
– mutator ili modifikator (engl mutator , modifier )
6obra praksa je da se korisnicima klase navededa li neka metoda menja unutra%nje stanje objekta
6a je metoda inspektor, govori re' const iza zaglavlja funkcije "vakve metode nazivaju se konstantnim metodama
-
8/17/2019 03 Klase i Objekti
13/5418.10.2005.Klase i objekti13
Konstantne metode (2) 6eklarisanje metode kao inspektora je:
– samo notaciona pogodnost i stvar lepog pona%anja –
to je obe-anje projektanta klase da funkcija ne menja stanje objekta – prevodilac nema na'ina da osigura da inspektor ne menja neke atribute inspektor mo$e da menja atribute uz pomo- eksplicitne konverzije,
koja probija kontrolu konstantnosti
* konstantnoj funkciji 'lanici tip pokaziva'a t*is jeconst +$const, tako da pokazuje na konstantni objekat
8ije mogu-e menjati objekat preko pokaziva'a t*is (a svaki neposredni pristup 'lanu je u stvari pristup preko t*is)
ako#e, za konstantne objekte klase nije dozvoljeno pozivatinekonstantnu funkciju 'lanicu
-
8/17/2019 03 Klase i Objekti
14/5418.10.2005.Klase i objekti14
Konstantne metode ! primer class + {
public:
int
citaj ()const
{return
i;
int pisi (int j") { int t"i; i"j; return t;
private:
int i;
;
+ x; const + cx;
x%citaj(); // u redu: konst% f&ja nekonst% objektax%pisi(); // u redu: nekonst% f&ja nekonst% objekta
cx%citaj(); // u redu: konst% f&ja konst% objekta
cx%pisi(); // 0 123!45: nekonst% f&ja konst% objekta
-
8/17/2019 03 Klase i Objekti
15/5418.10.2005.Klase i objekti15
"epostojane metode +uprotnost konstantne metode je nepostojana (volatile) metoda
int f() volatile {/$%%%$/
Pri izvr%enju nepostojane metode f objekat ($t*is)mo$e promeniti stanje nezavisno od toka funkcije f 8epostojanost metode predstavlja napomenu prevodiocu
da ne vr%i neke optimizacijeclass + {
public:
+(){kraj"false;
int f() volatile { // da nije volatile, moguca optimizacija: while(0kraj){/$%%%$/ // if (0kraj) while() {/$%%%$/
// u telu (%%%) se ne menja kraj
void zavrseno(){kraj"true;
private:
int kraj;
-
8/17/2019 03 Klase i Objekti
16/5418.10.2005.Klase i objekti16
Pojam konstruktora Konstruktor :
– specifi'na funkcija klase koja defini%e po'etno stanje objekta
– nosi isto ime kao i klasa – nema tip rezultata ('ak ni void) – ima proizvoljan broj argumenata proizvoljnog tipa
Konstruktor se implicitno poziva prilikom kreiranja objekta *nutar tela konstruktora, 'lanovima objekta se pristupa
kao i u bilo kojoj drugoj metodi Konstruktor, kao i svaka metoda, mo$e biti preklopljen
– va$e ista op%ta pravila kao za preklapanje funkcija
-
8/17/2019 03 Klase i Objekti
17/5418.10.2005.Klase i objekti17
Podrazumevani konstruktor Podrazumevani konstruktor (PK):
– konstruktor koji se mo$e pozvati bez stvarnih argumenata
Podrazumevani konstruktor: – nema formalne argumente ili – ima sve argumente sa podrazumevanim vrednostima
*gra#eni podrazumevani konstruktor je: – bez argumenata i – ima pazno telo
*gra#eni PK postoji samo ako klasa nije definisala ni jedankonstruktor
Kada se kreira niz objekata neke klase, poziva se PK za svaki element – redosled poziva PK elemenata je po rastu-em redosledu indeksa
-
8/17/2019 03 Klase i Objekti
18/5418.10.2005.Klase i objekti18
Pozivanje konstruktora
Konstruktor se poziva uvek kada se kreira objekat klase: – kada se izvr%ava definicija stati'kog objekta – kada se izvr%ava definicija automatskog objekta – kada se kreira dinami'ki objekat operatorom ne6 – kada se stvarni argument klasnog tipa prenosi u formalni
(formalni argument se inicijalizuje stvarnim)
– kada se kreira privremeni objekat, pri povratku iz funkcije(inicijalizuje se izrazom iz return naredbe)
-
8/17/2019 03 Klase i Objekti
19/54
18.10.2005.Klase i objekti19
#rgumenti konstruktora 8a mestu gde se kreira objekat mogu-e je navesti inicijalizator iza imena nicijalizator sadr$i listu stvarnih argumenta konstruktora u zagradama *koliko postoji samo jedan argument, mogu-a je i notacija sa simbolom " Poziva se onaj konstruktor koji se najbolje sla$e po broju i tipovima argumenata
(kao kod preklapanja funkcija):class + {
public:
+ ();
+ (double);
+ (char$);
;
void main () {
double d"7%8;
char $p"9iz znakova9;
+ a(d),b(p),c; // poziva se +(double),pa +(c*ar$),pa +()
-
8/17/2019 03 Klase i Objekti
20/54
18.10.2005.Klase i objekti20
Konstrukcija lanova (1) Pre izvr%avanja konstruktora pozivaju se konstruktori 'lanova
– redosledom pojavljivanja u klasi nicijalizatori (argumenti ovih poziva) mogu da se navedu
iza zaglavlja definicije (ne deklaracije) konstruktora, iza znaka : class {
public:
(int j) {%%%
;
class ++ {
-
8/17/2019 03 Klase i Objekti
21/54
18.10.2005.Klase i objekti21
Konstrukcija lanova (2) 8avo#enje inicijalizatora u zaglavlju definicije konstruktora
predstavlja specifikaciju inicijalizacije 'lanova
nicijalizacija je razli'ita od operacije dodele koja se mo$e vr%iti jedino unutar tela konstruktora
nicijalizacija je jedini na'in: – kada ne postoji podrazumevani konstruktor – kada je 'lan konstanta – kada je 'lan referenca
-
8/17/2019 03 Klase i Objekti
22/54
18.10.2005.Klase i objekti22
Primer konstrukcije Primer konstrukcije dva objekta od kojih jedan sadr$i drugi:
– objekat klase 4ontejner sadr$i objekat klase =eo,pri 'emu objekat deo treba da zna ko ga sadr$i
class 4ontejner { public:
4ontejner () : deo(this) {%%%
private:
=eo deo;;
class =eo{ public:
=eo(4ontejner$ kontejner):moj4ontejner(kontejner) {%%%
private:
4ontejner$ moj4ontejner;;
-
8/17/2019 03 Klase i Objekti
23/54
18.10.2005.Klase i objekti23
$ksplicitni poziv konstruktora Konstruktor se mo$e pozvati i eksplicitno u nekom izrazu akav poziv kreira privremeni objekat klase
pozivom odgovaraju-eg konstruktora sa navedenimargumentima
sto se de%ava ako se u inicijalizatoru objektaeksplicitno navede poziv konstruktora:
void main () { Complex c-(-,.%8),c.;
c."c-Complex(7%8,&-%>); // privremeni objekat
Complex c7"Complex(%-,>); // priv% obj% se kopira u c7
-
8/17/2019 03 Klase i Objekti
24/54
18.10.2005.Klase i objekti24
Konstruktor kopije (1) Pri inicijalizaciji objekta x- drugim objektom x. iste klase +:
– podrazumevano se vr%i prosta inicijalizacija 'lanova x- 'lanovima x.
Prosta inicijalizacija (kopiranjem) ponekad nije zadovoljavaju-a – na primer, ako objekti sadr$e 'lanove koji su pokaziva'i ili reference – tada programer treba da ima potpunu kontrolu
nad inicijalizacijom objekta drugim objektom iste klase
9a ovu svrhu slu$i konstruktor kopije (engl copy constructor ) Konstruktor kopije klase ++ se mo$e pozvati
sa samo jednim stvarnim argumentom tipa ++
-
8/17/2019 03 Klase i Objekti
25/54
18.10.2005.Klase i objekti25
Konstruktor kopije (2) Konstruktor kopije se poziva
kada se objekat inicijalizuje objektom iste klase, a to je:
– prilikom inicijalizacije objekta (pomo-u znaka " ili sa zagradama) – prilikom prenosa argumenata u funkciju (kreira se lokalni objekat) – prilikom vra-anja vrednosti iz funkcije (kreira se privremeni objekat)
Konstruktor ne sme imati formalni argument tipa svoje klase Konstruktor kopije ima argument tipa ++# ili const ++# "stali eventualni argumenti kopiraju-eg konstruktora
moraju imati podrazumevane vrednosti
-
8/17/2019 03 Klase i Objekti
26/54
18.10.2005.Klase i objekti26
Primer konstruktora kopijeclass ++ {
public: ++ (int);
++ (const ++#); // konstruktor kopije //%%%
;++ f(++ x-) {
++ x."x-; // poziv konst% kopije ++(++#) za x. return x.; // poziv konst% kopije za privremeni
// objekat u koji se sme?ta rezultat
void g() {
++ xa"7, xb"-; xa"f(xb); // poziv konst% kopije samo za formalni
// argument x-, a u xa se samo prepisuje
// privremeni objekat rezultata, ili se // poziva ++::operator" ako je definisan
-
8/17/2019 03 Klase i Objekti
27/54
18.10.2005.Klase i objekti27
Konverzioni konstruktor Konverziju izme#u tipova od kojih je barem jedan klasa – defini%e korisnik Korisni'ke konverzije -e se primenjivati automatski
ako je jednozna'an izbor konverzije Jedna mogu-nost konverzije tipova je pomo-u konstruktora konverzije,
ali odredi%ni tip mora biti klasa 0ko u klasi @ postoji @::@(A#), ili @::@(A)gde je A klasa ili standardni tip:
– vrednost izraza @(t), gde je t tipa A, je privremeni objekat tipa @ – to predstavlja konverziju iz tipa A u tip @
0utomatska konverzija mora biti neposredna: – za @::@(A#) i B::B(@#) mogu-e je samo eksplicitno B(@(t)) 8a ovaj na'in nije mogu-a konverzija u standardni tip:
– ovaj nije klasa za koju korisnik defini%e konverzioni konstruktor 6ruga mogu-nost definisanja konverzija – preklapanje kast operatora
-
8/17/2019 03 Klase i Objekti
28/54
18.10.2005.Klase i objekti28
Primer konverzije konstruktorom Pri pozivu funkcije:
– inicijalizuju se formalni argumenti stvarnim argumentima, uz eventualnu konverziju tipa – formalni argumenti se pona%aju kao automatski lokalni objekti pozvane funkcije
– ovi objekti (ako su klasnih tipova) se konstrui%u pozivom odgovaraju-ih konstruktora Pri povratku iz funkcije:
– konstrui%e se privremeni objekat koji prihvata vrednost return izraza na mestu poziva:
class Aip {
//%%% public: Aip(int i); // konstruktor
;Aip f (Aip k) {
//%%% return .; // poziva se konstruktor Aip(.)
void main () {
Aip k(); k"f(-); // poziva se konstruktor Aip(-) //%%%
-
8/17/2019 03 Klase i Objekti
29/54
18.10.2005.Klase i objekti29
Destruktor (1) Destruktor:
– specifi'na funkcija 'lanica klase koja razgra#uje objekat – nosi isto ime kao klasa, uz znak ispred imena – nema tip rezultata i ne mo$e imati argumente
6estruktor se implicitno poziva pri prestanku $ivotnog veka objektaclass + {
public:
+ () { coutDD9Eoziv destruktora klase +0Fn9;
void main () { + x;
//%%%
// ovde se poziva destruktor objekta x GBG 000
-
8/17/2019 03 Klase i Objekti
30/54
18.10.2005.Klase i objekti30
Destruktor (2) +vaka klasa mo$e da ima najvi%e jedan destruktor * destruktoru se 'lanovima pristupa kao i u bilo kojoj drugoj metodi Pri uni%tavanju dinami'kog objekta pomo-u operatora delete
– destruktor klase objekta se implicitno poziva pre dealokacije memorije Pri uni%tavanju dinami'kog niza
– destruktor se poziva za svaki element niza, po opadaju-em indeksu .edosled poziva destruktora je obratan redosledu poziva konstruktora 6estruktor se pi%e uvek kada objekat treba da dealocira memoriju
koju je konstruktor alocirao est slu'aj potrebe za destruktorom – kada klasa sadr$i 'lanove koji su pokaziva'i
Posle izvr%avanja tela destruktora – automatski se osloba#a memorija koju je sam objekat zauzimao
-
8/17/2019 03 Klase i Objekti
31/54
18.10.2005.Klase i objekti31
&tatiki (zajedniki) atributi Pri kreiranju objekata klase, za svaki se kreira poseban komplet atributa 0tribut mo$e biti deklarisan kao stati'ki pomo-u specifikatora static
Postoji samo jedan primerak stati'kog atributa za celu klasu(zajedni'ki podatak za sve objekte klase)class + {
private: static int i; // postoji samo jedan i za celu klasu int j; // svaki objekat ima svoj j
;
+tati'ki atributi se koriste kada svi primerci jedne klasetreba da dele neku zajedni'ku informaciju
Primer: – klasa defini%e listu objekata, a glava liste je zajedni'ki 'lan klase
-
8/17/2019 03 Klase i Objekti
32/54
18.10.2005.Klase i objekti32
Definisanje statikog atributa &tatiki atribut mora da se defini%e
– izvan definicije klase
– izvan definicija funkcija 'ak i privatni statiki atributi se moraju definisati izvan definicije klase definiciji statikog atributa moe da se koristi samo konstantan izraz Dodela inicijalne vrednosti statikom atributu se vr%i pre poziva main()
Obra*anje statikom atributu van klase vr%i se preko operatora :: int X::i=5;
-
8/17/2019 03 Klase i Objekti
33/54
18.10.2005.Klase i objekti33
&tatiki atributi i globalni objekti +tati'ki atribut ima $ivotni vek kao i globalni stati'ki objekat:
– nastaje na po'etku i traje do kraja programa
+tati'ki atribut ima sva svojstva globalnog stati'kog objekta,osim oblasti va$enja klase i kontrole pristupa
9ajedni'ki 'lanovi smanjuju potrebu za globalnim objektima .azlike od globalnih objekata:
– zajedni'ki 'lanovi logi'ki pripadaju klasi – doseg imena zajedni'kih podataka je klasa – zajedni'kim podacima je mogu-e ograni'iti pristup
-
8/17/2019 03 Klase i Objekti
34/54
18.10.2005.Klase i objekti34
+ajedniki atributi ! primeri Primer: glava liste
class 3lement {
public:
static 3lement $glava; //%% private:
int vrednost;
3lement $sledeci;
;
Primer: vo#enje evidencije o broju kreiranih primerakaclass Gbjekat {
public: Gbjekat(){brojac;
//%% private:
static int brojac;
;
-
8/17/2019 03 Klase i Objekti
35/54
18.10.2005.Klase i objekti35
&tatike (zajednike) metode (1) /etode se deklari%u kao zajednike (za celu klasu),
dodavanjem re'i static ispred deklaracije
+tati'ke metode imaju sva svojstva globalnih funkcija,osim oblasti va$enja i kontrole pristupa
&tatike metode ne poseduju pokaziva this +tati'ke metode ne mogu neposrednim imenovanjem
pristupati nestati'kim 'lanovima klase
+tati'ke metode mogu pristupati nestati'kim 'lanovima konkretnog objektakoji je formalni argument, lokalni ili globalni objekat
+tati'ke metode mogu neposredno pristupati samo stati'kim 'lanovima
-
8/17/2019 03 Klase i Objekti
36/54
18.10.2005.Klase i objekti36
&tatike (zajednike) metode (2) +tati'ke metode se mogu pozivati za konkretan objekat
(%to treba izbegavati)
+tati'ke metode se mogu pozivati i pre stvaranja objekata,i to ovako: 3klasa5::3poziv5
&tatike metode imaju samo jedan komplet lokalni- statiki- promenljivi-
+tati'ke metode su operacije klase, a ne svakog posebnog objekta Primena: za op%te usluge klase Primer: dohvatanje glave liste ili broja 'lanova liste
-
8/17/2019 03 Klase i Objekti
37/54
18.10.2005.Klase i objekti37
&tatike metode – primer (1.1)class + {
static int x; // staticki atribut int
-
8/17/2019 03 Klase i Objekti
38/54
18.10.2005.Klase i objekti38
&tatike metode – primer (1.2)int +::g () {
int i"x; // nestaticka metoda moze da koristi
int j"
-
8/17/2019 03 Klase i Objekti
39/54
18.10.2005.Klase i objekti39
O / O&tatike metode – primer (2) Primer:
– za datu klasu mogu da se kreiraju samo dinami'ki objekti:class + {
public:
static +$ kreiraj () { return new +; private:
+(); // konstruktor je privatan;void main() { + x; // 0 123!45
+$ px"+::kreiraj(); // moze
Primena: – funkcija kreiraj moe ograniiti broj kreirani- objekata klase
-
8/17/2019 03 Klase i Objekti
40/54
18.10.2005.Klase i objekti40
Prijatelji klasa Ponekad je potrebno da klasa ima i povla%-ene korisnike
koji mogu da pristupaju njenim privatnim 'lanovima
Povla%-eni korisnici mogu biti: – funkcije (globalne ili metode drugih klasa) ili – cele klase
akve funkcije i klase nazivaju se prijateljima (engl friends) Prijateljstvo, kao relacija izme#u klasa:
– se ne nasle#uje – nije simetri'na relacija – nije tranzijentna relacija
Prijateljstvo je relacija koja reguli%e isklju'ivo pravo pristupa,a ne oblast va$enja i vidljivost identifikatora
-
8/17/2019 03 Klase i Objekti
41/54
18.10.2005.Klase i objekti41
Prijateljske funkcije Prijateljske funkcije su funkcije koje nisu 'lanice klase,
ali imaju dozvoljen pristup do privatnih 'lanova klase Prijateljske funkcije mogu da budu:
– globalne funkcije ili – 'lanice drugih klasa
!unkcija je prijateljska: – ako se u definiciji klase navede deklaracija funkcije sa klju'nom re'i friend
8eva$no je pravo pristupa sekciji klase (privatno, za%ti%eno, javno)
u kojoj se navodi deklaracija prijateljske funkcije Prijateljska funkcija nema pokaziva this
na objekat klase kojoj je prijatelj !unkcija mo$e da bude prijatelj ve-em broju klasa istovremeno
-
8/17/2019 03 Klase i Objekti
42/54
18.10.2005.Klase i objekti42
Prijateljske funkcije ! primer class + {
friend void g (int +#); // prijateljska globalna funkcija
friend void ::* (); // prijateljska metoda * druge klase
int i;
public:
void f(int ip) {i"ip;
;
void g (int k, + #x) {
x%i"k; // prijateljska funkcija moze da pristupa
// privatnim clanovima klase
void main () {
+ x;
x%f(>); // postavljanje preko metode
g(I,x); // postavljanje preko prijateljske funkcije
-
8/17/2019 03 Klase i Objekti
43/54
18.10.2005.Klase i objekti43
Prijateljske funkcije i metode Ponekad su globalne prijateljske funkcije pogodnije od metoda:
– metoda mora da se pozove za objekat date klase,
dok globalnoj funkciji mo$e da se dostavi i objekat drugog tipa,koji -e se konvertovati u potrebni tip – kada funkcija treba da pristupa 'lanovima vi%e klasa,
efikasnija je prijateljska globalna funkcija – ponekad je notaciono pogodnije da se koriste globalne funkcije
(f(x)) nego metode (x%f())< na primer: max(a,b) je 'itljivije od a%max(b)<
– kada se preklapaju operatori, 'esto je jednostavnije definisati globalne(operatorske) funkcije nego metode
-
8/17/2019 03 Klase i Objekti
44/54
18.10.2005.Klase i objekti44
Prijateljske klase 0ko su sve metode klase prijateljske funkcije klasi +,
onda je prijateljska klasa (friend class) klasi + class + {
friend ;//ako je klasa definisana ili deklarisana friend class J; //ako J jos nije ni def% ni dek%;
+ve metode klase mogu da pristupaju privatnim 'lanovima klase + Prijateljske klase se tipi'no koriste
kada neke dve klase imaju te%nje me#usobne veze Primer:
– mo$e se obezbediti da samo klasa 4reator mo$e da kreira objekte klase +class + {
private: friend class 4reator; +(); // konstruktor je dostupan samo klasi 4reator;
-
8/17/2019 03 Klase i Objekti
45/54
18.10.2005.Klase i objekti45
&trukture +truktura je klasa kod koje su svi 'lanovi podrazumevano javni
– to se mo$e promeniti eksplicitnim umetanjem public: i private:
struct a { isto ?to i: class a {
public: //%%% //%%%
private: private:
//%%% //%%%; ;
8a =>> struktura mo$e imati i funkcije 'lanice +truktura se tipi'no koristi:
– za definisanje slogova podataka koji ne predstavljaju apstrakciju,odnosno nemaju pona%anje (nemaju zna'ajnije operacije)
+trukture tipi'no poseduju samo konstruktore i eventualno destruktore
-
8/17/2019 03 Klase i Objekti
46/54
18.10.2005.Klase i objekti46
gne0ivanje klasa (1) Klase mogu da se defini%u i unutar definicije druge klase (ugne$#ene klase) 8a ovaj na'in se ugne$#ena klasa nalazi u oblasti va$enja okru$uju-e klase
int x,
-
8/17/2019 03 Klase i Objekti
47/54
18.10.2005.Klase i objekti47
gne0ivanje klasa (2) +polja se imenu ugne$#ene klase mo$e pristupiti
samo preko operatora razre%avanja oblasti va$enja ::
@nutrasnja u; // 0 123!45: @nutrasnja nije u dosegu0
!poljna::@nutrasnja u; // u redu;
z spolja%nje klase do 'lanova unutra%njemogu- je samo pristup pomo-u %, &' i :: (obrnuto tako#e va$i)
z unutra%nje klase mogu direktno da se koriste samo identifikatori: – tipova, – nabrojanih konstanti i – zajedni'kih 'lanova iz spolja%nje klase
Pristup zajedni'kom 'lanu unutra%nje klase:3id spoljašnje5::3id unutrašnje5::3id zajedničkog člana5
-
8/17/2019 03 Klase i Objekti
48/54
18.10.2005.Klase i objekti48
gne0ivanje klasa () *gne$#ivanje je samo stvar oblasti va$enja,
a ne i kontrole prava pristupa 'lanovima – okru$uju-a klasa nema nikakva posebna prava pristupa 'lanovima ugne$#ene – ni ugne$#ena klasa nema posebna prava pristupa 'lanovima spolja%nje klase
*nutar definicije klase se mogu navesti i: – definicije nabrajanja (enum) iK t
-
8/17/2019 03 Klase i Objekti
49/54
18.10.2005.Klase i objekti49
okalne klase (1) ?okalne klase se defini%u unutar funkcija dentifikator lokalne klase ima doseg (oblast va$enja)
od deklaracije do kraja bloka u kojem je deklarisan *nutar lokalne klase iz okru$uju-eg dosega
je dozvoljeno samo kori%-enje: – identifikatora tipova – nabrojanih konstanti
– stati'kih lokalnih i globalnih objekata – spolja%njih (eksternih) promenljivih i funkcija
-
8/17/2019 03 Klase i Objekti
50/54
18.10.2005.Klase i objekti50
okalne klase (2) /etode lokalne klase moraju da se defini%u unutar definicije klase ?okalna klasa ne mo$e da ima stati'ke (zajedni'ke) atribute
int x;
void f() { static int s; int x; e!tern int g(); class Lokalna { public: int * (){ return x; // 123!45: x je automatska promenljiva int j (){ return s; // G4: s je staticka promenljiva
int k (){ return ::x; // G4: x je globalna promenljiva int l (){ return g(); // G4: g() je spoljasnja funkcija ;
Lokalna $p " ; // 123!45: Lokalna nije u opsegu vazenja
-
8/17/2019 03 Klase i Objekti
51/54
18.10.2005.Klase i objekti51
Pokazivai na lanove klase 6odelom vrednosti pokaziva'u na 'lanove klase ozna'i se neki 'lan klase 0nalogija: kao %to se indeksom ozna'i komponenta niza
Pokaziva' na 'lanove klase se defini%e:3tip 'lana klase5 3klasa5::$3identifikator pokaziva'a5 !ormiranje adrese 'lanova klase:
3identifikator pokaziva'a5"#3klasa5::3'lan klase5 Pristup 'lanovima pomo-u pokaziva'a na 'lanove klase:
3objekat klase5%$3identifikator pokaziva'a5 ili
3pokaziva' na objekat klase5&'$3identifikator pokaziva'a5 "peratori %$ i &'$ su prioriteta @A i asocijativnost je sleva&udesno
-
8/17/2019 03 Klase i Objekti
52/54
18.10.2005.Klase i objekti52
Pokazivai na lanove klase ! primer class 5lfa {%%% public: int a, b; ;
int 5lfa::$pc;// pc je pokazivac na int clanove klase 5lfa
5lfa alfa,$beta;beta"#alfa;
pc"#5lfa::a;// pc pokazuje na clanove a objekata klase 5lfa
alfa%$pc " -; // alfa%a"-;
beta&'$pc " -; // beta&'a"-;
pc"#5lfa::b;// pc pokazuje na clanove b objekata klase 5lfa
alfa%$pc " .; // alfa%b".;
beta&'$pc " .; // beta&'b".;
-
8/17/2019 03 Klase i Objekti
53/54
18.10.2005.Klase i objekti53
3rafika notacija (4)*/? – *nified /odeling ?anguge
– grafi'ka notacija za modeliranje softvera
Klasa:
"bjekat: krug0 : Krug
acka
B : doubleC : double
rastojanje(t : acka) : double
Krug
Krug
centar : ackar : double
povrsina() : doublepopuni(boja : Doja)
-
8/17/2019 03 Klase i Objekti
54/54
5elacije 0socijacija
9avisnost
0gregacija
Kompozicija
Krug acka
@@
¢ar
@@
"soba!akultet
@n@
&student
@ @n
0utomobil ocak
A@ A@
DojaKrug
top related