You are on page 1of 15

1

Objektno-orijentisano
programiranje
1. O predmetu
2. Tehnike programiranja
3. Objekti i klase
O predmetu
n Fond asova: 2+2+1
n Sadr#aj predmeta:
q Principi objektno-orijentisanog programiranja
q Objektno-orijentisani jezik C++
n Ocenjivanje
q Laboratorijske ve#be: 20 poena
q 2 kolokvijuma ili pismeni deo ispita: 40 poena
q Usmeni deo ispita: 40 poena
2
Problemi u razvoju softvera
q Softverski sistemi postaju sve slo#eniji.
q Slo#eni softverski sistemi su te%ki za
n implementaciju,
n testiranje i
n odr#avanje.
q Problemi odr#avanja softvera:
n ispravljanje gre%aka,
n promena zahteva i
n dodavanje novih funkcionalnosti.
q Kako pove'ati produktivnost
n Ponovnom upotrebom ve' razvijenog softvera
Pregled tehnika programiranja
n Nestrukturno proceduralno programiranje
q Glavni program direktno operie sa globalnimpodacima.
q Dugi i nepregledni programi
q Copy paste - Kod se viestruko koristi kopiranjemdelova
3
Pregled tehnika programiranja
n Strukturno proceduralno programiranje
q Program se mo#e posmatrati kao sekvenca poziva potprograma.
q Strukture podataka se modeliraju odvojeno od koda procedura kojeih obra%uju.
q Viestruko kori&enje koda posti#e se preko biblioteka procedura i funkcija.
Pregled tehnika programiranja
n Modularno programiranje
q Procedure sa zajedni)kom funkcionalno&u su integrisane u jedan modul
q Svaki modul mo#e da ima svoje sopstvene podatke.
q Viestruko kori&enje struktura podataka i procedura
4
Pregled tehnika programiranja
n Objektno orijentisano programiranje
q Strukture podataka i procedure integrisane u klase
q Program mo#e da se posmatra kao mre#a objekata koji su u interakciji pri )emu
svaki objekat zna svoje stanje.
q Ponovno kori&enje klasa
Osnovni koncepti
objektno-orijentisanog programiranja
n Apstrakcija Uvode se korisniki definisani tipovi podatka koji
apstrahuju objekte koji se u programu obradjuju.
n Enkapsulacija delovi softvera se organizuju u manje celine
koje imaju javno dostupan deo (interfejs) i nedostupan deo
(implementaciju).
n Nasledjivanje novi tip mo#e da nasledi postoje'i sa znaenjem
da su njegove instance (objekti) jedna podvrsta objekata
osnovnog tipa.
n Polimorfizam omogu'ava da ista funkcija realizuje na razliite
naine zavisno od toga da li je primenjena nad objektom
osnovnog ili izvedenog tipa.
5
Promena u nainu razmi%ljanja prilikom
razvoja softvera
n Proceduralno
programiranje
q Definisati precizno %ta
program treba da radi.
q Razlo#iti problem na
sitnije podprobleme lak%e
za implementaciju i
testiranje (algoritamska
dekompozicija).
q Izabrati algoritme za
re%avanje podproblema.
n Objektno-orjentisano
programiranje
q Uoiti objekte koji se u
programu obra)uju
(objektna ili strukturna
dekompozicija).
q Definisati karakteristike
objekata.
q Uoiti kakve veze postoje
me)u objektima.
q Uoiti kako objekti
me)usobno interaguju.
Kako OOP re%ava probleme u
razvoju softvera?
n Strukturnom dekompozicijom se dobijaju
labavo povezane manje celine koje se lak%e
q implementiraju
q testiraju,
q odr#avaju.
n Dodavanje nove funkcionalnosti ili izmena
postoje'e se vr%i izvodjenjem novih klasa.
q Prethodni kod se ne menja pa ga ne treba ponovo
testirati.
6
Klase
n Klase su osnovna organizaciona programska
jedinica u objektno-orijentisanim jezicima.
n Klase modeluju (apstrahuju) objekte koji se u
programu obradjuju.
n Klasa je tip podataka koji defini %e korisnik i
koji opisuje osobine i pona%anje objekata.
*lanovi klasa
n Atributi podaci koji modeliraju stanje
objekta,
n Metode funkcije koje menjaju stanje
objekta ili preko kojih objekat interaguje sa
drugim objektima.
7
Odnos klasa ,objekat
n Klasa
q Klasa je opis
(apstrakcija) skupa
objekata koji imaju iste
karakteristike i
pona%anja.
q Klasa je tip.
n Objekat (instanca)
q Objekat je konkretizacija
klase. On ima svoje
karakteristike i mo#e da
izvr%ava skup funkcija
definisanih u klasi.
q Objekat je podatak.
Pristup lanovima klase
*lanovi klase mogu biti:
n Javni (public) mo#e im se pristupiti iz bilo
kog dela programa,
n Privatni (private) mo#e im se pristupiti
samo iz funkija lanica iste klase,
n Zati&eni (protected) mo#e im se pristupiti
iz funkija lanica te klase i funkcija lanica
izvedenih klasa.
8
Definicija klase u programskom
jeziku C++
class <ImeKlase>
{
public:
<niz_javnih_clanova>
[ protected:
<niz_zasticenih_clanova> ]
[ private:
<niz_privatnih_clanova> ]
};
Navodjenje lanova klase u okviru
definicija klase
n Unutar definicije klase navode se:
q Definicije atributa,
q Deklaracije funkcija lanica klase.
n Deklaracija funkcijie u jeziku C++ sadr #i:
q Tip funkcije,
q Ime funkcije,
q Tipove fiktivnih argumenata.
NAPOMENA: Imena argumenata se mogu, ali ne
moraju navoditi u deklaraciji funkcije.
9
class Time
{
public:
void setTime( int, int, int ); // set hour, minute, second
void printUniversal(); // print universal-time format
void printStandard(); // print standard-time format
private:
int hour; // 0 - 23 (24-hour clock format)
int minute; // 0 - 59
int second; // 0 - 59
}; // end class Time
Primer: definicija klase Time
Interface
Razdvajanje interfejsa od implementacije
n Nepisano je pravilo da se za svaku klasu
kreiraju po dva fajla:
q Header fajl:
n U njemu se pi%e definicija klase
n Ima isto ime kao klasa i ekstenziju .h
n Direktivom #include se ukljuuje u sve fajlove u
kojima se klasa koristi.
q Fajl sa kodom:
n U njemu se pi%e implementacija funkcija lanica klase
n Ima isto ime kao klasa i ekstenziju .cpp.
10
Razdvajanje interfejsa od implementacije
q Prednosti
n Kod se lak%e razume
n Lak%e se modifikuju programi
q Nedostaci
n Header fajlovi
q Delovi implementacije
Inline funkcije lanice
q Napomene o ostalim implementacionimim detaljima
private lanovi
Implementacija funkcija lanica klase
<povratni_tip> <ime_klase>::<ime_funkcije>(<argumenti>)
{
...
}
q Funkcija se u programskom jeziku C++ identifikuje:
n Imenom klase kojoj pripada,
n Svojim imenom,
n Povratnim tipom,
n Brojem i tipovima svojih argumenata.
q U dve razliite klase mo#e da postoji funkcija sa istim imenom i istom
listom argumenata.
q U jednoj klasi mo#e da postoji ve'i broj funkcija sa istim imenima, ali
razliitom listom argumenata.
11
Primer: implementacija funkcija klase Time
/* sets new Time value using universal time,
performs validity, checks on the data values and
set invalid values to zero */
void Time::setTime( int h, int m, int s )
{
hour = ( h >= 0 && h < 24 ) ? h : 0;
minute = ( m >= 0 && m < 60 ) ? m : 0;
second = ( s >= 0 && s < 60 ) ? s : 0;
} // end function setTime
Primer: implementacija funkcija klase Time
// prints Time in universal format
void Time::printUniversal()
{
cout << setfill( '0' ) << setw( 2 ) << hour << ":"
<< setw( 2 ) << minute << ":
<< setw( 2 ) << second;
} // end function printUniversal
// prints Time in standard format
void Time::printStandard()
{
cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 )
<< ":" << setfill( '0' ) << setw( 2 ) << minute
<< ":" << setw( 2 ) << second
<< ( hour < 12 ? " AM" : " PM" );
} // end function printStandard
12
Kreiranje objekata
n U statikoj zoni memorije
q Objekat se kreira kada
izvr%enje programa dodje
do take u kojoj je objekat
definisan.
q Definicija objekta:
<ime_klase> <ime_objekta>;
q Primer:
Time t1;
n U dinamikoj zoni memorije
q Objekat se kreira operatorom
new:
<ime_klase>* <pokazivac>;
<pokazivac> = new <ime_klase>;
q Primer:
Time* pt;
pt = new Time;
Brisanje objekata
n Iz statike zone
memorije
q Objekat se automatski
bri%e kada se zavr%i:
n izvr%enje bloka u kojem je
definisan (ukoliko je
definisan na lokalnom
nivou);
n izvr%enje programa
(ukoliko je definisan na
globalnom nivou);
n Iz dinamike zone memorije
q Objekat se bri%e operatorom
delete:
delete <pokazivac>;
q Primer:
delete pt;
13
Referenca na objekat
n Drugo ime za objekat
n Definicija reference:
<ime_tipa>& ref = <ime_objekta>;
NAPOMENA: Referenca se u svojoj definiciji mora
inicijalizovati.
n Primer:
Time t1;
Time& t2 = t1;
Operatori za pristup lanovima klase
q Identini onima kod struktura
q Operator taka (.)
n Objekat
n Referenca
q Operator strelica (->)
n Pokaziva
14
Primer: Kori%'enje objekata klase Time
int main()
{
Time t; // instantiate object t of class Time
t.setTime( 13, 27, 6 ); // change time
// output Time object t's new values
cout << "\n\nUniversal time after setTime is ";
t.printUniversal(); // 13:27:06
cout << "\nStandard time after setTime is ";
t.printStandard(); // 1:27:06 PM
Primer: Kori%'enje objekata klase Time
Time* pt;
//create object
pt = new Time;
pt->setTime(99,99,99); // attempt invalid settings
//output pt's values after specifying invalid values
cout << "\n\nAfter attempting invalid settings:;
cout << \nUniversal time: ";
pt->printUniversal(); // 00:00:00
cout << "\nStandard time: ";
pt->printStandard(); // 12:00:00 AM
//delete object from memory
delete pt;
return 0;
} // end main
15
Primer: Rezultat programa
Universal time after setTime is 13:27:06
Standard time after setTime is 1:27:06 PM
After attempting invalid settings:
Universal time: 00:00:00
Standard time: 12:00:00 AM
Podatak postavljen na 0 nakon
pokuaja postavljanja nevalidne
vrednosti.

You might also like