Objektno programiranje

1. Problemi kompatibilnosti, kontinuiteta i ponovnog koriscenja

 

 

Problem KOMPATIBILNOSTI je direktna posledica algoritamske orjentisanosti 
izrade programa. Primera radi, ako razliciti timovi realizuju razlicite potprograme 
jednog programa, oni jednu vrstu podataka mogu definisati kao razlicite strukture i 
tada se svi potprogrami ne bi mogli implementirati u jedinstven program. Dakle, 
postoji potreba da se na pocetku definisu i naprave sve strukture podataka i tek 
onda pristupi izradi algoritama.

Problem KONTINUITETA zahteva da se moraju praviti programi za dugotrajnu 
upotrebu, dakle, da to bude jedan projekat koji ce se vremenom nadogradjivati, jer 
da bi projekat trajao na trzistu, u njega se moraju unositi izmene (tj. da se prave 
verzije). Ove izmene najcesce znace uvodjenje novih funkcija, sto je izuzetno 
nezgodno raditi kod algoritamski orjentisanih programa jer je skoro nemoguce uvek 
menjati algoritam programa, dok je ove izmene dosta lako naciniti ukoliko se one 
unose u strukturu podataka, pri cemu algoritam programa ostaje skoro netaknut.

Problem MOGUCNOSTI VISESTRUKE UPOTREBE (Reusability) zahteva da se 
napisani softver moze koristiti ponovo vise puta, s tim da se dodaju neke izmene. 
Primer: problem izrade prozora – da se prozor napravi jednom i da se svi ostali 
prozori realizuju preko ovog postojeceg ubacivanjem nekih dodataka. Ovaj problem 
je NEMOGUCE ostvariti algoritamski.

2. Odnos algoritma i strukture podataka

 

 

Objektni programer se dugo zadrzava u DOMENU PROBLEMA (deo realnosti gde 
se nalazi ono sto zelimo resiti). Cilj mu je da IDENTIFIKUJE ENTITETE koji 
postoje u tom domenu. Primer: u problemu resavanja sistema jednacina A*x=b 
postoje entiteti matrice A i dva vektora x i b. Sledci korak je da se ENTITETI 
KLASIFIKUJU – u nasem primeru su to klasa entiteta matrica i klasa entiteta 
vektora. Zatim se ide na MODELOVANJE – izdvajanje za nas bitnih osobina klasa 
entiteta i samih entiteta. Tek posle toga ide REALIZACIJA tj. pisanje softvera. 
Potrebno je napomenuti da se u svaki model ukljucuje AKTIVNA 
KOMPONENTA tj. sta se sa modelom moze raditi.

Primer modela klase MATRICA:

-    Naziv klase: Matrica

NIVO DOMENA PROBLEMA

NIVO MODELOVANJA

NIVO REALIZACIJE

ENTITETI

KLASE ENTITETA

OBJEKTI

KLASA OBJEKATA

-

Podaci

 

 : broj_vrsta, broj_kolona, vrenosti_elemenata

-

Operacije

 

 : Upisati, Prikazati, ZadatiElement(i,j), OcitatiElement(i,j), 

Invertovati, Transponovati, ...

Svaka klasa ima PRIVATNU STRUKTURU PODATAKA i time je problem 
kompatibilnosti resen jer NEMA centralne strukture podataka. Takodje, svaka klasa 
ima PRIVATNE ALGORITME, pa je zato svaka klasa SAMODOVOLJNA tj. ona 
je struktura za sebe. Jednom napravljena klasa se vise ne treba menjati, vec se ona 
koristi uz dodavanje nekih novih osobina, sto se postize mehanizmom 
NASLEDJIVANJA. 

Principi objektnog programiranja:

a) Princip APSTRAKCIJE – odabiranje osobina koje su nam bitne za dato 

razmatranje. 

b) Princip SKRIVANJA INFORMACIJA – stavljanje u drugi plan detalja 

realizacije, koji su pri tome klijentu nedostupni.

c) INKAPSULACIJA – mehanizam za ostvarivanje prethodna dva principa
d) MODULARIZACIJA – (C++ koristi C-ove module)
e) POLIMORFIZAM – oznacava kontekstno zavisno ponasanje
f) Objektni program ima sve osobine sistema ciji su delovi povezani relacijama 

(glavna osobina je nasledjivanje).

3. Definicija klase i objekta

 

 

Nasa definicija za objekat ce biti na nivou modelovanja.

Def.

Objekat je MODEL ENTITETA koji ima IDENTITET, STANJE i 
PONASANJE.

STANJE je deo proslosti i sadasnjosti je neophodan za odredjivanje 
buduceg ponasanja objekta. 
IDENTITET je slicno nazivu, nesto po cemu razlikujemo objekte. Moze se 
zadati kao naziv, preko adrese (pokazivacem) ili kljucem (koji bi trebao biti 
drugi po redu posle naziva).
PONASANJE je reakcija objekta na pobudu u vidu izvodjenja operacija.

Sinonim za objekat je INSTANCA KLASE (Instance).

Def.

Klasa objekta predstavlja model klase entiteta koji obuhvata objekte sa 
istom strukturom i ponasanjem. Opisno receno, ono sto je objekat za klasu, 
to je promenjljiva za tip podataka.

Struktura objekta:

background image

class Point{

private:

double x,y;

public:

void SetPoint(double xx, double yy) {x=xx; y=yy;}
double GetX() {return x;}
double GetY() {return y;}
double Distance();

};

//Naziv datoteke: POINT.CPP

#include “point.h”

double Point::Distance()
{

return sqrt(x*x+y*y);

}

Rec “private:” oznacava deo klase koji je zatvoren za klijenta, tj. nije mu dostupan 
direktno. Rec “public:” oznacava deo klase koji je otvoren za klijenta, tj. direktno 
mu je dostupan. Postoji jos i naredba “protected:”, koja oznacava segment dostupan 
samo za privilegovane klijente.

Napomena: ako se u klasi ove labele ne navedu, onda se podrazumeva da vazi 
PRIVATE, sto znaci da bi u klasi sve bilo zatvoreno za klijenta i klasa bi bila 
neupotrebljiva – tako nas programski jezik navodi da razmisljamo o zastiti 
podataka. Zato se “private:” cesto i ne pise jer ono vazi do dela sa labelom 
“public:”.

Za funkcije clanice su podaci clanovi uvek OTVORENI (sto je prirodno, jer inace 
ne bi imali smisla), bez obzira sto se nalaze pod naredbom “private:” i time je 
klijentu omogucen pristup podacima clanovima samo preko funkcija clanica – tako 
se vrsi kontrola pristupa podacima!

Funkcije clanice (metode) se mogu zadati na dva nacina:

a) INLINE funkcije – one se cele pisu u okviru klase i u celosti su zamene za 

makrodirektive (makrodirektive su uvedene jer su brze od potprograma, one se 
u celosti prevode i kao takve ugradjuju u program, dakle, kod njih nema ni 
skokova, ni smestanja podataka na stek). Ovo znaci da se inline funkcije 
prevode i direktno ugradjuju u program (dakle, nisu funkcije vec slozenije 
naredbe), ali posto kod njih NE SME BITI PROGRAMSKOG SKOKA, KAO 
NI STAVLJANJA NA STEK, ne smeju se koristiti slozenije naredbe, kao ni 
naredbe skoka (while, if, switch,...). U nasem primeru, inline funkcije su:

void SetPoint(double xx, double yy) {x=xx; y=yy;}

double GetX() {return x;}
double GetY() {return y;}

b) OUTLINE funkcije – one koje nisu inline, a priradaju klasi, za njih se unutar 

klase navodi samo prototip. U nasem primeru takva funkcija je :  

double Distance();

Ova funkcija se mora cela napisati izvan klase, a da bi se oznacilo da ona 
pripada datoj klasi stavlja se kvalifikator klase: 

Ime_Klase::Naziv_Funkcije(...) {...}

U nasem primeru je to:

double Point::Distance()
{

return sqrt(x*x+y*y);

}

Ove funkcije clanice klase su potpuno ravnopravne sa inline funkcijama.

Primer: instanciranje klase (kreiranje objekta):

//Naziv datoteke: “PROBA.CPP”

#include “point.h”

void main(void)
{

Point a,b;
double r;

a.SetPoint(1,2);
b=a;
r=b.Distance()+3;

}

Neisparavno bi bilo napisati: 

r=a.y;

Ovo ne bi radilo, jer je y u delu pod “private:”, pa je zatvoren za klijenta!

Koji delovi klase se zatvaraju, a koji otvaraju za klijenta?

-

Podaci clanovi

 

  su u najvecem broju slucajeva zatvoreni, da bi se njihova izmena 

vrsila pod kontrolom. Dakle, kontrola promene sadrzaja podataka clanova je 
glavni razlog zatvaranja podataka clanova.

-

Objekti clanovi

 

  se mogu ostaviti otvorenim ili se mogu zatvoriti, sto zavisi od 

opredeljenja. Ako zatvorimo objekat, onda se za njega moraju napraviti 

Napomena:  da  smo  ovde  ispred 
double  stavili  naredbu  “inline” 
(inline double Point::Distance()) , 
funkcija  bi  postala  INLINE  iako 
se fizicki ne nalazi unutar klase!

Postavice  vrednosti  podataka 
clanova  za  tacku  (objekat)  a 
na x=1 i y=2

background image

Primer koriscenja ove klase u slobodnoj funkciji:

Complex Add(Complex z1, Complex z2)
{

Complex w;
w.Create(z1.Re()+z2.Re(), z1.Im()+z2.Im());
return w;

}

5. Definicija i vrste apstrakcije. Princip skrivanja informacija

 

 

Apstrakcija je klucni mehanizam naseg razmisljanja (lat. 

apstrahere

 – izdvojiti 

bitno). Primene apstrakcije:

-

izdvajanje bitnih informacija

-

detalji realizacije se proglasavaju nebitnim

Primer: y = sin(x);  mi ovom naredbom dobijamo rezultat ttrazene funkcije, ali kako 
je to realizovano nas ne interesuje.

U praksi postoje tri vrste apstrakcije:

-

apstrakcija entiteta (materijalna tacka)

-

aps. akcije (u klasu se smestaju logicki srodne funkcije)

-

aps. tipa virtuelne masine (postoje nivoi operacija – jedna operacija na visem 
nivou zamenjuje se skupom operacija na nizem).

Princip skrivanja informacija: (information hiding principle – postavio ga je Parnas) 
Detalji realizacije su razdvojeni od interfejsa i moraju biti nedostupni klijentu (tj. 
skriveni od njega). Interfejs klase je ono sto se nalazi u delu pod “public:”.

6. Pojam inkapsulacije i realizacija u C++. Pravilo inkapsulacije

 

 

Inkapsulacija i modularnost su sredstva za realizaciju klase tako da budu postovane 
sledece stavke:

-

inkapsulacija je objedinjavanje strukture i ponasanja u softversku celinu uz 
ostvarivanje strukture ponasaanja

-

naredba 

class

 sluzi za inkapsuliranje tj. objedinjavanje

-

PRAVILO INKAPSULACIJE: objekat treba koristiti disciplinovano u skladu 
sa dokumentacijom proizvodjaca.

Vidimo  da  se  pristup  podatku  clanu  “r”  vrsi  preko 
metode Re(). Da smo napisali 

z1.r

 ne bi radilo, jer je ovo 

slobodna  funkcija  (ona  nije  clanica  klase  i  za  nju  su 
podaci clanovi zatvoreni!)

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

Prijavi se i preuzmi ceo dokument.

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

Slični dokumenti