Objektno orijentisano programiranje 

u realnom vremenu 

na jeziku C++ 

 

 

 

                     by   KuNc 

 

 

 

 

 

 

Zavidovići 2010

 

 

.

 

Objektno orijentisano programiranje u realnom vremenu na jeziku C++ 1

 

D

i

o I 

Objektno orijentisano 

programiranje i 

modelovanje 

background image

Objektno orijentisano programiranje u realnom vremenu na jeziku C++ 3

 

 

Sve navedene osobine mogu se pojedinaèno na ovaj ili onaj naèin realizovati i u tradicionalnom jeziku (kakav 

je i C), ali je realizacija svih koncepata zajedno ili teška, ili sasvim nemoguæa. U svakom sluèaju, realizacija nekog od 
ovih principa u tradicionalnom jeziku drastièno poveæava režije i smanjuje èitljivost programa. 

 

Jezik C++ prirodno podržava sve navedene koncepte, oni su ugraðeni u sâm jezik. 

Šta se menja uvoðenjem OOP? 

 

Jezik C++ nije "èisti" objektno orijentisani programski jezik (

Object-Oriented Programming Language

OOPL) koji bi korisnika "naterao" da ga koristi na objektno orijentisani (OO) naèin. C++ može da se koristi i kao 
"malo bolji C", ali se time ništa ne dobija (èak se i gubi). C++ treba koristiti kao sretstvo za OOP i kao smernicu za 
razmišljanje. C++ ne spreèava da se pišu loši programi, veæ samo omoguæava da se pišu mnogo bolji programi. 

 OOP 

uvodi 

drugaèiji naèin razmišljanja

 u programiranje! 

 U 

OOP, 

mnogo

 više vremena troši se na 

projektovanje

, a mnogo manje na samu implementaciju (kodovanje). 

 

U OOP, razmišlja se najpre o 

problemu

, ne direktno o programskom rešenju. 

 

U OOP, razmišlja se o delovima sistema (objektima) koji nešto rade, a ne o tome kako se nešto radi 

(algoritmima). 

 

U OOP, pažnja se prebacuje sa realizacije na meðusobne veze izmeðu delova. Težnja je da se te veze što više 

redukuju i strogo kontrolišu. Cilj OOP je da smanji interakciju izmeðu softverskih delova. 

Objektno orijentisano programiranje u realnom vremenu na jeziku C++ 4

 

Pregled osnovnih koncepata OOP u jeziku C++ 

 

U ovoj glavi biæe dât kratak i sasvim površan pregled osnovnih koncepata OOP koje podržava C++. Potpuna i 

precizna objašnjenja koncepata biæe data kasnije, u posebnim glavama. 

 

Primeri koji se koriste u ovoj glavi nisu usmereni da budu upotrebljivi, veæ samo pokazni. Iz realizacije 

primera izbaèeno je sve što bi smanjivalo preglednost osnovnih ideja. Zato su primeri èesto i nekompletni. 

 

Èitalac ne treba da se trudi da posle èitanja ove glave strogo zapamti sintaksu rešenja, niti da otkrije sve 

pojedinosti koje se kriju iza njih. Cilj je da èitalac samo stekne oseæaj o osnovnim idejama OOP-a i jezika C++, da vidi 
šta je to novo i šta se sve može uraditi, kao i da proba da sebe "natera" da razmišlja na novi, objektni naèin. 

Klase 

 

Klasa

  (

class

) je osnovna organizaciona jedinica programa u OOPL, pa i u jeziku C++. Klasa predstavlja 

strukturu u koju su grupisani podaci i funkcije: 

 

 

Klasom se definiše novi, korisnièki tip za koji se mogu kreirati instance (primerci, promenljive). 

 

Instance klase nazivaju se 

objekti

 (

objects

). Svaki objekat ima one svoje sopstvene elemente koji su navedeni 

u deklaraciji klase. Ovi elementi klase nazivaju se 

èlanovi

 klase (

class members

). Èlanovima se pristupa pomoæu 

operatora "

.

" (taèka): 

 

 

Ako pretpostavimo da su ranije, na neki naèin, postavljene vrednosti èlanova svakog od navedenih objekata, 

ovaj segment programa dâje: 

 

/* 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. "; 

/* Korišæenje klase Osoba: */ 

/* negde u programu se definišu promenljive 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 ko_si objekta direktor */ 

Ja sam Petar Markovic i imam 25 godina. 

Ja sam Slobodan Milicev i imam 58 godina. 

Ja sam Aleksandar Simic i imam 40 godina. 

background image

Objektno orijentisano programiranje u realnom vremenu na jeziku C++ 6

 

Nasleðivanje 

 

Pretpostavimo da nam je potreban novi tip, 

Maloletnik

. Maloletnik je "jedna vrsta" osobe, odnosno 

"poseduje sve što i osoba, samo ima još nešto", ima staratelja. Ovakva relacija izmeðu klasa naziva se 

nasleðivanje

 

Kada nova klasa predstavlja "jednu vrstu" druge klase (

a-kind-of

), kaže se da je ona izvedena iz osnovne 

klase: 

 

 Izvedena 

klasa 

Maloletnik

 ima 

sve

 èlanove kao i osnovna klasa 

Osoba

, ali ima još i èlanove 

staratelj

 

koJeOdgovoran

. Konstruktor klase 

Maloletnik

 definiše da se objekat ove klase kreira zadavanjem imena, 

staratelja i godina, i to tako da se konstruktor osnovne klase 

Osoba

 (koji inicijalizuje ime i godine) poziva sa 

odgovarajuæim argumentima. Sâm konstruktor klase 

Maloletnik

 samo inicijalizuje staratelja. 

 

Sada se mogu koristiti i nasleðene osobine objekata klase 

Maloletnik

, ali su na raspolaganju i njihova 

posebna svojstva kojih nije bilo u klasi 

Osoba

 

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

 Maloletnik : 

public

 Osoba { 

public

  Maloletnik (

char

*,

char

*,

int

);  /* konstruktor */ 

  

void

 koJeOdgovoran(); 

private:

 

  

char

 *staratelj; 

}; 

 

 

void

 Maloletnik::koJeOdgovoran (){ 

  cout<<"Za mene odgovara "<<staratelj<<". "; 

 

 

Maloletnik::Maloletnik (

char

 *i, 

char

 *s, 

int

 g) : Osoba(i,g), staratelj(s) {} 

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! */ 

/* Izlaz æe biti: 

Ja sam Petar Petrovic i imam 40 godina. 

Ja sam Milan Petrovic i imam 12 godina. 

Za mene odgovara Petar Petrovic. 

*/ 

Želiš da pročitaš svih 158 strana?

Prijavi se i preuzmi ceo dokument.

Ovaj materijal je namenjen za učenje i pripremu, ne za predaju.

Slični dokumenti