You are on page 1of 14

Objektno-orijentisano

programiranje
1. Nasledjivanje
2. Naini izvodjenja
3. Konstruktori izvedenih klasa
Izvodjenje, nasledjivanje
n esto se sre"e slu%aj da je jedna klasa objekata (klasa B)
podvrsta (a-kind-of) neke druge klase (klasa A).
n Primeri:
q Sisari su klasa koja je okarakterisana na%inom reprodukcije.
n Meso'deri su vrsta sisara koja se hrani mesom.
n Biljojedi su vrsta sisara koja se hrani biljkama.
q Geometrijske figure u ravni su klasa koja je okarakterisana
koordinatama te'i)ta.
n Krug je vrsta figure u ravni koja je okarakterisana du'inom
polupre%nika.
n Kvadrat je vrsta figure u ravni koja je okarakterisana du'inom ivice
Izvodjenje, nasledjivanje
n Objekti klase B imaju sve osobine klase A i jo) neke specijalne,
sebi svojstvene.
n Specijalnija klasa B se izvodi iz generalnije klase A.
n Klasa B nasle+uje iz klase A:
q Osobine (atribute),
q Ponaanje (metode).
n Objekti izvedenih klasa sadr#e:
q Sve %lanove roditeljske klase,
q 'lanove navedene u definiciji izvedene klase.
Izvodjenje, nasledjivanje
n Relacija nasle+ivanja se naj%e)"e prikazuje (usmerenim
acikli%nim) grafom:
n Ako je klasa B nasledila klasu A (izvedena iz klase A), ka'e se
jo) da je:
q klasa A osnovna klasa(engl. base class), a klasa B izvedena klasa(engl.
derived class);
q klasa A nadklasa (engl. superclass), a klasa B podklasa (engl. subclass);
q klasa A roditelj (engl. parent), a klasa B dete (engl. child).
A B
Relacije nasledjivanja
Figura
DvodimenzionaFigura TrodimenzionaFigura
Krunica Kvadrat Trougao Lopta Kocka Tetraedar
specijalizacija generalizacija
Definicija izvedene klase
class Izvedena : [<nacin_izvodjenja>] Osnovna
{

};
n Nain izvodjenja definie pravo pristupa lanovima
roditeljske klase u izvedenoj.
n Izvodjenje mo#e biti:
q Javno (public),
q Zati%eno (protected),
q Privatno (private).
n Ukoliko nain izvodjenja nije naveden podrazumeva se
privatno izvodjenje.
Prava pristupa %lanovima osnovne
klase u izvedenoj klasi
Na%in
izvodjenja
Pravo pristupa %lanu u osnovnoj klasi
javno zati)eno privatno
javno javno zati)eno nedostupni
zati)eno zati)eno privatno nedostupni
privatno privatno privatno nedostupni
Osobine na%ina izvodjenja
n Javno izvodjenje:
q Objekat izvedene klase je isto to i objekat osnovne klase
(objekat izvedene klase mo#e u potpunosti da zamene objekat
roditeljske klase).
n Privatno izvodjenje:
q Osnovna klasa je deo izvedene klase
q Odnos je isti kao da je u izvedenoj klasi definisan objekat
osnovne klase kao atribut
q Objekat izvedene klase ne mo#e da zameni objekat osnovne
klase ne nasledjuje interfejs osnovne klase.
Primer 1. (Osnovna i izvedena klasa)
class Osnovna {
int i; // privatni podatak clan osnovne klase
public:
void f(); // javna funkcija clanica osnovne klase
};
class Izvedena : public Osnovna {
int j; // privatni podatak clan izvedene klase
public:
void g(); // javna funkcija clanica izvedene klase
};
void main () {
Osnovna b; Izvedena d;
b.f();
b.g(); // ! GRESKA: g je funkcija izvedene klase, a
// b je objekat osnovne
d.f(); // objekat izvedene klase d ima i funkciju f,
d.g(); // i funkciju g
}
Primer 2. (Prava pristupa)
class Osnovna {
int pb;
protected:
int zb;
public:
int jb;
};
class Izvedena : public Osnovna {
public:
void write(int x) {
jb=zb=x; // moze da pristupi javnom i zasticenom clanu,
pb=x; // ! GRESKA: privatnom clanu se ne moze pristupiti
}
};
void f() {
Osnovna b; b.zb=5; //odavde ne moze da se pristupa zas. clanu
}
Konstruktori, destruktor, operator=
n Izvedena klasa ne nasle+uje funkciju %lanicu operator=,
konstruktoreni destruktor osnovne klase.
n Ukoliko nisu definisani, funkcija %lanica operator=,
podrazumevani i kopi konstruktor, kao i destruktor se
generi)u pri %emu:
q Funkcija %lanica operator=vr)i dodelu %lan po %lan;
q Podrazumevani konstruktor ima prazno telo;
q Konstruktor za kopiranje vr)i dodelu vrednosti %lan po %lan;
q Destruktor ima prazno telo.
Redosled poziva konstruktora i destruktora
n Pri kreiranju objekta izvedene klase poziva se
q Konstruktor izvedene klase koji
n Prvo poziva konstruktor osnovne klase
n Pri brisanju objekta izvedene klase poziva se
q Kestruktor izvedene klase koji
n Na kraju automatski poziva destruktor osnovne klase.
Implementacija konstruktora
izvedene klase
n Poziv konstruktora osnovne klase iz konstruktora
izvedene klase navodi se kao prva stavka u delu
za inicijalizaciju konstruktora izvedene klase.
n Ukoliko u konstruktoru izvedene, poziv
konstruktora osnovne klase nije naveden,
automatski se poziva default konstruktor
osnovne klase.
Primer 3. Konstruktor izvedene klase
class Osnovna {
int bi;
public:
Osnovna(int); // konstruktor osnovne klase
};
Osnovna::Osnovna (int i) : bi(i) {/*...*/}
class Izvedena : public Osnovna {
int di;
public:
Izvedena(int,int); // konstruktor izvedene klase
};
Izvedena::Izvedena (int i, int j)
: Osnovna(i),di(j)
{/*...*/}

You might also like