SlideShare a Scribd company logo
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev 1
Glava 2: Uvod u OOP
Zašto OOP?
Šta nudi OOP kao rešenje?
Šta se menja prelaskom na OOP?
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev2/26
Zašto OOP?
Problemi u razvoju softvera:
 Zahtevi korisnika su složeni i stalno se povećavaju.
Softverski sistemi su složeni
 Uvek je potrebno povećati produktivnost proizvodnje
softvera. Kako? Povećanjem broja programera u timu?
Problemi – interakcija između delova softvera!
 Način povećanja produktivnosti – ponovna upotreba
softvera (software reuse). Kako obezbediti?
 Problemi održavanja softvera: ispravljanje grešaka,
promena zahteva i dodavanje zahteva. Kako postići?
Kako odgovoriti na izazove? Unapređenjem
koncepata!
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev3/26
Šta nudi OOP?
OOP je deo objektne paradigme koja obuhvata osnovne
objektne koncepte, od kojih su neki:
 apstraktni tipovi podataka (abstract data types): tip koji je definisao
programer, za koji se mogu kreirati primerci (instance) i koji je
predstavljen strukturom i ponašanjem
 enkapsulacija (encapsulation): deo softvera ima jasno definisan
interfejs i implementaciju; interfejs je svima dostupan,
implementacija je nedostupna
 nasleđivanje (inheritance): jedan tip može da nasledi drugi, sa
značenjem da su njegove instance jedna vrsta instanci osnovnog
tipa
 polimorfizam (polymorphism)
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev4/26
Šta se menja prelaskom na OOP?
Prelazak sa proceduralnog programiranja na OOP je
promena paradigme!
OO paradigma sadrži koncepte višeg nivoa apstrakcije,
bliže domenima problema
Menja se način razmišljanja
Težište se prebacuje sa implementacije na interfejse i veze
između delova softvera – cilj je oslabiti veze između delova
i učiniti ih lakšim za kontrolu i modifikaciju
Umesto isključivo algoritamske dekompozicije koristi se
objektna dekompozicija
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev 5
Glava 3: Pregled osnovnih koncepata
OOP na jeziku C++
Klase, atributi i objekti
Konstruktori i destruktori
Nasleđivanje
Polimorfizam
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev6/26
Klase, atributi i objekti
Klasa (class) je osnovna organizaciona jedinica programa u OOP
jezicima, pa i u jeziku C++. Klasa predstavlja strukturu u koju su
grupisani podaci i funkcije:
/* Deklaracija klase: */
class Osoba {
public:
void koSi(); // funkcija: predstavi se!
// ... i još nešto
private:
char* ime; // podatak: ime i prezime
int god; // podatak: koliko ima godina
};
// Svaka funkcija se mora i definisati:
void Osoba::koSi () {
cout<<"Ja sam "<<ime<<" i imam "<<god<<" godina.n";
}
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev7/26
Klase, atributi i objekti
Klasom se definiše novi, korisnički tip za koji se mogu kreirati instance
(primerci, promenljive). Klasa može da predstavlja realizaciju
apstrakcije iz domena problema
Instance klase nazivaju se objekti (objects). Svaki objekat ima
sopstvene elemente koji su navedeni u deklaraciji klase. Ovi elementi
klase nazivaju se članovi klase (class members). Članovima se
pristupa pomoću operatora .:
/* Korišćenje klase Osoba:
negde u programu se definišu objekti tipa Osoba, */
Osoba Pera, mojOtac, direktor;
/* a onda se oni koriste: */
Pera.koSi(); // poziv funkcije koSi objekta Pera
mojOtac.koSi(); // poziv funkcije koSi objekta mojOtac
direktor.koSi(); // poziv funkcije koSi objekta direktor
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev8/26
Klase, atributi i objekti
Ako pretpostavimo da su ranije, na neki način, postavljene
vrednosti članova svakog od navedenih objekata, ovaj
segment programa daje:
Ja sam Petar Markovic i imam 25 godina.
Ja sam Slobodan Milicev i imam 58 godina.
Ja sam Aleksandar Simic i imam 40 godina.
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev9/26
Klase, atributi i objekti
Specifikator public: govori prevodiocu da su samo članovi koji se
nalaze iza njega dostupni spolja. Ovi članovi nazivaju se javnim
Članovi iza specifikatora private: su nedostupni korisnicima klase
(ali ne i članovima klase) i nazivaju se privatnim:
/* Izvan članova klase nije moguće: */
Pera.ime="Petar Markovic"; /* nedozvoljeno */
mojOtac.god=55; /* takođe nedozvoljeno */
/* Šta bi tek bilo da je ovo dozvoljeno: */
direktor.ime="bu...., kr...., ...";
direktor.god=1000;
/* a onda ga neko pita (što je dozvoljeno): */
direktor.koSi();
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev10/26
Konstruktori i destruktori
Da bi se omogućila inicijalizacija objekta, u klasi se definiše posebna
funkcija koja se implicitno (automatski) poziva kada objekat nastaje.
Ova funkcija se naziva konstruktor (constructor) i nosi isto ime kao i
klasa:
class Osoba {
public:
Osoba(char *ime, int godine); // konstruktor
void koSi(); // funkcija: predstavi se!
private:
char *ime; // podatak: ime i prezime
int god; // podatak: koliko ima god
};
Osoba::Osoba (char *i, int g) {
if (proveriIme(i)) // proveri ime
ime=i;
else
ime="necu da ti kazem ko";
god=((g>=0 && g<=100)?g:0); // proveri godine
}
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev11/26
Konstruktori i destruktori
Kreiranje objekata sada izgleda ovako:
Osoba Pera("Petar Markovic",25),
mojOtac("Slobodan Milicev",58);
Pera.koSi();
mojOtac.koSi();
Moguće je definisati i funkciju koja se poziva uvek kada
objekat prestaje da živi. Ova funkcija naziva se destruktor
(destructor)
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev12/26
Nasleđivanje
Pretpostavimo da nam je potreban novi tip, Maloletnik. Maloletnik je
"jedna vrsta" osobe, koja "poseduje sve što i osoba, samo ima još
nešto", tj. ima staratelja. Ovakva relacija između klasa naziva se
nasleđivanje:
class Maloletnik : public Osoba {
public:
Maloletnik (char* ime, char* staratelj, int godine);
void koJeOdgovoran();
private:
char *staratelj;
};
void Maloletnik::koJeOdgovoran (){
cout<<"Za mene odgovara "<<staratelj<<".n";
}
Maloletnik::Maloletnik (char *i, char *s, int g) :
Osoba(i,g), staratelj(s) {}
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev13/26
Nasleđivanje
Sada se mogu koristiti i nasleđene osobine objekata klase
Maloletnik, a na raspolaganju su i njihova posebna
svojstva kojih nije bilo u klasi Osoba:
Osoba otac("Petar Petrovic",40);
Maloletnik dete("Milan Petrovic","Petar Petrovic",12);
otac.koSi();
dete.koSi();
dete.koJeOdgovoran();
otac.koJeOdgovoran(); // ovo, naravno, ne može!
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev14/26
Polimorfizam
Pretpostavimo da nam je potrebna nova klasa žena, koja je "jedna
vrsta" osobe, samo što još ima i devojačko prezime. Klasa Zena biće
izvedena iz klase Osoba
I objekti klase Zena treba da se "odazivaju" na funkciju koSi, ali je
teško pretpostaviti da će jedna dama otvoreno priznati svoje godine.
Zato objekat klase Zena treba da ima funkciju koSi, samo što će ona
izgledati malo drugačije, svojstveno izvedenoj klasi Zena:
class Osoba {
public:
Osoba(char* ime, int godine); // konstruktor
virtual void koSi(); // virtuelna funkcija
protected: // dostupno naslednicima
char* ime; // podatak: ime i prezime
int god; // podatak: koliko ima
god
};
Osoba::Osoba (char* i, int g) : ime(i), god(g) {}
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev15/26
Polimorfizam
class Zena : public Osoba {
public:
Zena(char* ime, char* devojacko, int godine);
virtual void koSi(); // nova verzija funkcije koSi
private:
char* devojacko;
};
Zena::Zena (char* i, char* d, int g)
: Osoba(i,g), devojacko(d) {}
void Zena::koSi () {
cout<<"Ja sam "<<ime<<", devojacko prezime "<<
devojacko<<".n";
}
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev16/26
Polimorfizam
Funkcija članica koja će u izvedenim klasama imati nove
verzije deklariše se u osnovnoj klasi kao virtuelna funkcija
(virtual). Izvedena klasa može da dâ svoju definiciju
virtuelne funkcije, ali i ne mora. U izvedenoj klasi ne mora
se navoditi reč virtual
Drugi delovi programa, korisnici klase Osoba, ako su dobro
projektovani, ne vide nikakvu promenu zbog uvođenja
izvedene klase. Oni uopšte ne moraju da se menjaju:
// Funkcija ispitaj propituje osobe i
// ne mora da se menja:
void ispitaj (Osoba* hejTi) {
hejTi->koSi();
}
Oktobar 2009. Copyright (C) 2009 by Dragan Milićev17/26
Polimorfizam
Svojstvo da se odaziva prava verzija funkcije klase čiji su naslednici dali
nove verzije naziva se polimorfizam (polymorphism):
Osoba otac("Petar Petrovic",40);
Zena majka("Milka Petrovic","Mitrovic",35);
Maloletnik dete("Milan Petrovic","Petar Petrovic",12);
ispitaj(&otac); // pozvaće se Osoba::koSi()
ispitaj(&majka); // pozvaće se Zena::koSi()
ispitaj(&dete); // pozvaće se Osoba::koSi()
/* Izlaz će biti:
Ja sam Petar Petrovic i imam 40 godina.
Ja sam Milka Petrovic, devojacko prezime Mitrovic.
Ja sam Milan Petrovic i imam 12 godina.
*/

More Related Content

What's hot

СПИН (AIDS)
СПИН (AIDS)СПИН (AIDS)
СПИН (AIDS)
souhs
 
Bodljokosci ppt
Bodljokosci pptBodljokosci ppt
Bodljokosci ppt
edinadina
 
Vitamini
VitaminiVitamini
Vitamini
Ања Т.
 
Vitamin D
Vitamin DVitamin D
Povijest matematike (History of Math)
Povijest matematike (History of Math)Povijest matematike (History of Math)
Povijest matematike (History of Math)
Gordana Divic
 
Incoterms 2010 pariteti
Incoterms 2010 pariteti Incoterms 2010 pariteti
Incoterms 2010 pariteti
Jelena Milojkovic
 
Rad sa direktorijumima i datotekama
Rad sa direktorijumima i datotekamaRad sa direktorijumima i datotekama
Rad sa direktorijumima i datotekama
majapts
 
ulazni uredjaji
ulazni uredjajiulazni uredjaji
ulazni uredjaji
jlkhl
 
космолошки период
космолошки периодкосмолошки период
космолошки период
filozofskaazbuka
 
Kako napraviti dobru power point prezentaciju
Kako napraviti dobru power point  prezentacijuKako napraviti dobru power point  prezentaciju
Kako napraviti dobru power point prezentaciju
Superbubica
 
Masovni mediji
Masovni medijiMasovni mediji
Masovni mediji
VečitiStudent
 
врсте судова
врсте судоваврсте судова
врсте судова
filozofskaazbuka
 
Bolesti organa za izlučivanje
Bolesti organa za izlučivanjeBolesti organa za izlučivanje
Bolesti organa za izlučivanje
Ivana Damnjanović
 
Uvod iz bromatologije
Uvod iz bromatologijeUvod iz bromatologije
Uvod iz bromatologije
Dama Kamelijama
 
Uvod u logiku
Uvod u logikuUvod u logiku
Uvod u logiku
Damjan Pavlica
 
Licna higijena nina rakic viii1
Licna higijena nina rakic viii1Licna higijena nina rakic viii1
Licna higijena nina rakic viii1
apenjaskovic
 
Racunarska grafika
Racunarska grafikaRacunarska grafika
Racunarska grafika
Olynx
 
дедуктивни закључак
дедуктивни закључакдедуктивни закључак
дедуктивни закључак
filozofskaazbuka
 
Uvod u softversko inženjerstvo
Uvod u softversko inženjerstvoUvod u softversko inženjerstvo
Uvod u softversko inženjerstvo
Damjan Pavlica
 

What's hot (20)

СПИН (AIDS)
СПИН (AIDS)СПИН (AIDS)
СПИН (AIDS)
 
Bodljokosci ppt
Bodljokosci pptBodljokosci ppt
Bodljokosci ppt
 
Folderi i fajlovi
Folderi i fajloviFolderi i fajlovi
Folderi i fajlovi
 
Vitamini
VitaminiVitamini
Vitamini
 
Vitamin D
Vitamin DVitamin D
Vitamin D
 
Povijest matematike (History of Math)
Povijest matematike (History of Math)Povijest matematike (History of Math)
Povijest matematike (History of Math)
 
Incoterms 2010 pariteti
Incoterms 2010 pariteti Incoterms 2010 pariteti
Incoterms 2010 pariteti
 
Rad sa direktorijumima i datotekama
Rad sa direktorijumima i datotekamaRad sa direktorijumima i datotekama
Rad sa direktorijumima i datotekama
 
ulazni uredjaji
ulazni uredjajiulazni uredjaji
ulazni uredjaji
 
космолошки период
космолошки периодкосмолошки период
космолошки период
 
Kako napraviti dobru power point prezentaciju
Kako napraviti dobru power point  prezentacijuKako napraviti dobru power point  prezentaciju
Kako napraviti dobru power point prezentaciju
 
Masovni mediji
Masovni medijiMasovni mediji
Masovni mediji
 
врсте судова
врсте судоваврсте судова
врсте судова
 
Bolesti organa za izlučivanje
Bolesti organa za izlučivanjeBolesti organa za izlučivanje
Bolesti organa za izlučivanje
 
Uvod iz bromatologije
Uvod iz bromatologijeUvod iz bromatologije
Uvod iz bromatologije
 
Uvod u logiku
Uvod u logikuUvod u logiku
Uvod u logiku
 
Licna higijena nina rakic viii1
Licna higijena nina rakic viii1Licna higijena nina rakic viii1
Licna higijena nina rakic viii1
 
Racunarska grafika
Racunarska grafikaRacunarska grafika
Racunarska grafika
 
дедуктивни закључак
дедуктивни закључакдедуктивни закључак
дедуктивни закључак
 
Uvod u softversko inženjerstvo
Uvod u softversko inženjerstvoUvod u softversko inženjerstvo
Uvod u softversko inženjerstvo
 

Viewers also liked

Šta je Bootstrap?
Šta je Bootstrap?Šta je Bootstrap?
Šta je Bootstrap?
Damjan Pavlica
 
Projektovanje web aplikacija
Projektovanje web aplikacijaProjektovanje web aplikacija
Projektovanje web aplikacija
Damjan Pavlica
 
Starenje softvera
Starenje softveraStarenje softvera
Starenje softvera
Damjan Pavlica
 
Uvod u funkcionalno programiranje
Uvod u funkcionalno programiranjeUvod u funkcionalno programiranje
Uvod u funkcionalno programiranje
Damjan Pavlica
 
Refaktorisanje
RefaktorisanjeRefaktorisanje
Refaktorisanje
Damjan Pavlica
 
WordPress za početnike
WordPress za početnikeWordPress za početnike
WordPress za početnike
DejanVesic
 
Programski jezici
Programski jeziciProgramski jezici
Programski jezici
Damjan Pavlica
 
Introduction to Philosophy
Introduction to PhilosophyIntroduction to Philosophy
Introduction to Philosophy
Aurora Computer Studies
 
Lecture 1 Introduction to Philosophy
Lecture 1 Introduction to PhilosophyLecture 1 Introduction to Philosophy
Lecture 1 Introduction to Philosophy
Arnel Rivera
 
Philosophy ppt
Philosophy ppt Philosophy ppt
Philosophy ppt
Megha Mohan
 
CONS Vintage bulldozers-3
CONS Vintage bulldozers-3CONS Vintage bulldozers-3
CONS Vintage bulldozers-3
Vivienne Haldane
 
Biodivercidadkaren
BiodivercidadkarenBiodivercidadkaren
Biodivercidadkaren
wendy jaquelin reyes mendez
 
Školice programiranja
Školice programiranjaŠkolice programiranja
Školice programiranja
Pogled kroz prozor
 
Wordpress - Sistem za upravljanje sadržajem na webu
Wordpress - Sistem za upravljanje sadržajem na webuWordpress - Sistem za upravljanje sadržajem na webu
Wordpress - Sistem za upravljanje sadržajem na webu
Milan Stošić
 
Javascript #3 - StartIt centar Indjija
Javascript #3 - StartIt centar IndjijaJavascript #3 - StartIt centar Indjija
Javascript #3 - StartIt centar Indjija
Dušan Stanković
 
May The Nodejs Be With You
May The Nodejs Be With YouMay The Nodejs Be With You
May The Nodejs Be With You
Dalibor Gogic
 
Javascript #2 - StartIt centar Indjija
Javascript #2 - StartIt centar IndjijaJavascript #2 - StartIt centar Indjija
Javascript #2 - StartIt centar Indjija
Dušan Stanković
 
Javascript #4 - Startit Centar Indjija
Javascript #4 - Startit Centar IndjijaJavascript #4 - Startit Centar Indjija
Javascript #4 - Startit Centar Indjija
Dušan Stanković
 
Profiling php5 to php7
Profiling php5 to php7Profiling php5 to php7
Profiling php5 to php7
julien pauli
 
Responsive Web Design tehnike u WordPress-u
Responsive Web Design tehnike u WordPress-uResponsive Web Design tehnike u WordPress-u
Responsive Web Design tehnike u WordPress-u
Igor Benić
 

Viewers also liked (20)

Šta je Bootstrap?
Šta je Bootstrap?Šta je Bootstrap?
Šta je Bootstrap?
 
Projektovanje web aplikacija
Projektovanje web aplikacijaProjektovanje web aplikacija
Projektovanje web aplikacija
 
Starenje softvera
Starenje softveraStarenje softvera
Starenje softvera
 
Uvod u funkcionalno programiranje
Uvod u funkcionalno programiranjeUvod u funkcionalno programiranje
Uvod u funkcionalno programiranje
 
Refaktorisanje
RefaktorisanjeRefaktorisanje
Refaktorisanje
 
WordPress za početnike
WordPress za početnikeWordPress za početnike
WordPress za početnike
 
Programski jezici
Programski jeziciProgramski jezici
Programski jezici
 
Introduction to Philosophy
Introduction to PhilosophyIntroduction to Philosophy
Introduction to Philosophy
 
Lecture 1 Introduction to Philosophy
Lecture 1 Introduction to PhilosophyLecture 1 Introduction to Philosophy
Lecture 1 Introduction to Philosophy
 
Philosophy ppt
Philosophy ppt Philosophy ppt
Philosophy ppt
 
CONS Vintage bulldozers-3
CONS Vintage bulldozers-3CONS Vintage bulldozers-3
CONS Vintage bulldozers-3
 
Biodivercidadkaren
BiodivercidadkarenBiodivercidadkaren
Biodivercidadkaren
 
Školice programiranja
Školice programiranjaŠkolice programiranja
Školice programiranja
 
Wordpress - Sistem za upravljanje sadržajem na webu
Wordpress - Sistem za upravljanje sadržajem na webuWordpress - Sistem za upravljanje sadržajem na webu
Wordpress - Sistem za upravljanje sadržajem na webu
 
Javascript #3 - StartIt centar Indjija
Javascript #3 - StartIt centar IndjijaJavascript #3 - StartIt centar Indjija
Javascript #3 - StartIt centar Indjija
 
May The Nodejs Be With You
May The Nodejs Be With YouMay The Nodejs Be With You
May The Nodejs Be With You
 
Javascript #2 - StartIt centar Indjija
Javascript #2 - StartIt centar IndjijaJavascript #2 - StartIt centar Indjija
Javascript #2 - StartIt centar Indjija
 
Javascript #4 - Startit Centar Indjija
Javascript #4 - Startit Centar IndjijaJavascript #4 - Startit Centar Indjija
Javascript #4 - Startit Centar Indjija
 
Profiling php5 to php7
Profiling php5 to php7Profiling php5 to php7
Profiling php5 to php7
 
Responsive Web Design tehnike u WordPress-u
Responsive Web Design tehnike u WordPress-uResponsive Web Design tehnike u WordPress-u
Responsive Web Design tehnike u WordPress-u
 

Uvod u objektno orijentisano programiranje i C++

  • 1. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev 1 Glava 2: Uvod u OOP Zašto OOP? Šta nudi OOP kao rešenje? Šta se menja prelaskom na OOP?
  • 2. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev2/26 Zašto OOP? Problemi u razvoju softvera:  Zahtevi korisnika su složeni i stalno se povećavaju. Softverski sistemi su složeni  Uvek je potrebno povećati produktivnost proizvodnje softvera. Kako? Povećanjem broja programera u timu? Problemi – interakcija između delova softvera!  Način povećanja produktivnosti – ponovna upotreba softvera (software reuse). Kako obezbediti?  Problemi održavanja softvera: ispravljanje grešaka, promena zahteva i dodavanje zahteva. Kako postići? Kako odgovoriti na izazove? Unapređenjem koncepata!
  • 3. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev3/26 Šta nudi OOP? OOP je deo objektne paradigme koja obuhvata osnovne objektne koncepte, od kojih su neki:  apstraktni tipovi podataka (abstract data types): tip koji je definisao programer, za koji se mogu kreirati primerci (instance) i koji je predstavljen strukturom i ponašanjem  enkapsulacija (encapsulation): deo softvera ima jasno definisan interfejs i implementaciju; interfejs je svima dostupan, implementacija je nedostupna  nasleđivanje (inheritance): jedan tip može da nasledi drugi, sa značenjem da su njegove instance jedna vrsta instanci osnovnog tipa  polimorfizam (polymorphism)
  • 4. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev4/26 Šta se menja prelaskom na OOP? Prelazak sa proceduralnog programiranja na OOP je promena paradigme! OO paradigma sadrži koncepte višeg nivoa apstrakcije, bliže domenima problema Menja se način razmišljanja Težište se prebacuje sa implementacije na interfejse i veze između delova softvera – cilj je oslabiti veze između delova i učiniti ih lakšim za kontrolu i modifikaciju Umesto isključivo algoritamske dekompozicije koristi se objektna dekompozicija
  • 5. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev 5 Glava 3: Pregled osnovnih koncepata OOP na jeziku C++ Klase, atributi i objekti Konstruktori i destruktori Nasleđivanje Polimorfizam
  • 6. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev6/26 Klase, atributi i objekti Klasa (class) je osnovna organizaciona jedinica programa u OOP jezicima, pa i u jeziku C++. Klasa predstavlja strukturu u koju su grupisani podaci i funkcije: /* Deklaracija klase: */ class Osoba { public: void koSi(); // funkcija: predstavi se! // ... i još nešto private: char* ime; // podatak: ime i prezime int god; // podatak: koliko ima godina }; // Svaka funkcija se mora i definisati: void Osoba::koSi () { cout<<"Ja sam "<<ime<<" i imam "<<god<<" godina.n"; }
  • 7. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev7/26 Klase, atributi i objekti Klasom se definiše novi, korisnički tip za koji se mogu kreirati instance (primerci, promenljive). Klasa može da predstavlja realizaciju apstrakcije iz domena problema Instance klase nazivaju se objekti (objects). Svaki objekat ima sopstvene elemente koji su navedeni u deklaraciji klase. Ovi elementi klase nazivaju se članovi klase (class members). Članovima se pristupa pomoću operatora .: /* Korišćenje klase Osoba: negde u programu se definišu objekti tipa Osoba, */ Osoba Pera, mojOtac, direktor; /* a onda se oni koriste: */ Pera.koSi(); // poziv funkcije koSi objekta Pera mojOtac.koSi(); // poziv funkcije koSi objekta mojOtac direktor.koSi(); // poziv funkcije koSi objekta direktor
  • 8. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev8/26 Klase, atributi i objekti Ako pretpostavimo da su ranije, na neki način, postavljene vrednosti članova svakog od navedenih objekata, ovaj segment programa daje: Ja sam Petar Markovic i imam 25 godina. Ja sam Slobodan Milicev i imam 58 godina. Ja sam Aleksandar Simic i imam 40 godina.
  • 9. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev9/26 Klase, atributi i objekti Specifikator public: govori prevodiocu da su samo članovi koji se nalaze iza njega dostupni spolja. Ovi članovi nazivaju se javnim Članovi iza specifikatora private: su nedostupni korisnicima klase (ali ne i članovima klase) i nazivaju se privatnim: /* Izvan članova klase nije moguće: */ Pera.ime="Petar Markovic"; /* nedozvoljeno */ mojOtac.god=55; /* takođe nedozvoljeno */ /* Šta bi tek bilo da je ovo dozvoljeno: */ direktor.ime="bu...., kr...., ..."; direktor.god=1000; /* a onda ga neko pita (što je dozvoljeno): */ direktor.koSi();
  • 10. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev10/26 Konstruktori i destruktori Da bi se omogućila inicijalizacija objekta, u klasi se definiše posebna funkcija koja se implicitno (automatski) poziva kada objekat nastaje. Ova funkcija se naziva konstruktor (constructor) i nosi isto ime kao i klasa: class Osoba { public: Osoba(char *ime, int godine); // konstruktor void koSi(); // funkcija: predstavi se! private: char *ime; // podatak: ime i prezime int god; // podatak: koliko ima god }; Osoba::Osoba (char *i, int g) { if (proveriIme(i)) // proveri ime ime=i; else ime="necu da ti kazem ko"; god=((g>=0 && g<=100)?g:0); // proveri godine }
  • 11. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev11/26 Konstruktori i destruktori Kreiranje objekata sada izgleda ovako: Osoba Pera("Petar Markovic",25), mojOtac("Slobodan Milicev",58); Pera.koSi(); mojOtac.koSi(); Moguće je definisati i funkciju koja se poziva uvek kada objekat prestaje da živi. Ova funkcija naziva se destruktor (destructor)
  • 12. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev12/26 Nasleđivanje Pretpostavimo da nam je potreban novi tip, Maloletnik. Maloletnik je "jedna vrsta" osobe, koja "poseduje sve što i osoba, samo ima još nešto", tj. ima staratelja. Ovakva relacija između klasa naziva se nasleđivanje: class Maloletnik : public Osoba { public: Maloletnik (char* ime, char* staratelj, int godine); void koJeOdgovoran(); private: char *staratelj; }; void Maloletnik::koJeOdgovoran (){ cout<<"Za mene odgovara "<<staratelj<<".n"; } Maloletnik::Maloletnik (char *i, char *s, int g) : Osoba(i,g), staratelj(s) {}
  • 13. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev13/26 Nasleđivanje Sada se mogu koristiti i nasleđene osobine objekata klase Maloletnik, a na raspolaganju su i njihova posebna svojstva kojih nije bilo u klasi Osoba: Osoba otac("Petar Petrovic",40); Maloletnik dete("Milan Petrovic","Petar Petrovic",12); otac.koSi(); dete.koSi(); dete.koJeOdgovoran(); otac.koJeOdgovoran(); // ovo, naravno, ne može!
  • 14. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev14/26 Polimorfizam Pretpostavimo da nam je potrebna nova klasa žena, koja je "jedna vrsta" osobe, samo što još ima i devojačko prezime. Klasa Zena biće izvedena iz klase Osoba I objekti klase Zena treba da se "odazivaju" na funkciju koSi, ali je teško pretpostaviti da će jedna dama otvoreno priznati svoje godine. Zato objekat klase Zena treba da ima funkciju koSi, samo što će ona izgledati malo drugačije, svojstveno izvedenoj klasi Zena: class Osoba { public: Osoba(char* ime, int godine); // konstruktor virtual void koSi(); // virtuelna funkcija protected: // dostupno naslednicima char* ime; // podatak: ime i prezime int god; // podatak: koliko ima god }; Osoba::Osoba (char* i, int g) : ime(i), god(g) {}
  • 15. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev15/26 Polimorfizam class Zena : public Osoba { public: Zena(char* ime, char* devojacko, int godine); virtual void koSi(); // nova verzija funkcije koSi private: char* devojacko; }; Zena::Zena (char* i, char* d, int g) : Osoba(i,g), devojacko(d) {} void Zena::koSi () { cout<<"Ja sam "<<ime<<", devojacko prezime "<< devojacko<<".n"; }
  • 16. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev16/26 Polimorfizam Funkcija članica koja će u izvedenim klasama imati nove verzije deklariše se u osnovnoj klasi kao virtuelna funkcija (virtual). Izvedena klasa može da dâ svoju definiciju virtuelne funkcije, ali i ne mora. U izvedenoj klasi ne mora se navoditi reč virtual Drugi delovi programa, korisnici klase Osoba, ako su dobro projektovani, ne vide nikakvu promenu zbog uvođenja izvedene klase. Oni uopšte ne moraju da se menjaju: // Funkcija ispitaj propituje osobe i // ne mora da se menja: void ispitaj (Osoba* hejTi) { hejTi->koSi(); }
  • 17. Oktobar 2009. Copyright (C) 2009 by Dragan Milićev17/26 Polimorfizam Svojstvo da se odaziva prava verzija funkcije klase čiji su naslednici dali nove verzije naziva se polimorfizam (polymorphism): Osoba otac("Petar Petrovic",40); Zena majka("Milka Petrovic","Mitrovic",35); Maloletnik dete("Milan Petrovic","Petar Petrovic",12); ispitaj(&otac); // pozvaće se Osoba::koSi() ispitaj(&majka); // pozvaće se Zena::koSi() ispitaj(&dete); // pozvaće se Osoba::koSi() /* Izlaz će biti: Ja sam Petar Petrovic i imam 40 godina. Ja sam Milka Petrovic, devojacko prezime Mitrovic. Ja sam Milan Petrovic i imam 12 godina. */