Objektno orijentisano programiranje u realnom vremenu na jeziku C++
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

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.

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
i
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.
*/
Ovaj materijal je namenjen za učenje i pripremu, ne za predaju.
Slični dokumenti