Objektno Programiranje 

Predavanja 

 

 

 

 

 

background image

 

Problemi strukturirane metodologije 

 

Strukturirano programiranje je imalo takoreći  „ugrađenu naprslinu“. Ovakav način dekompozicije je u 

stvari dekompozicija alogoritma, ali se onda postavlja pitanje šta je sa strukturama podataka? Ova metodologija 
to ne rešava. To je u stvari osnovni problem ove metodologije, to što se bavi samo dekompozicijom 

alogoritama. Iz toga proističe poblem 

kompaktibilnosti. To je problem koji nastaje kada neki tim radi na 

rešavanju problema i jedan programer pravi ulazni potprogram ( npr. unos matrice i mora da je sažme da bi 
stala u memoriju ), a neki drugi programer koji radi sa drugim potprogramom ne koristi istu strukturu podataka 
( npr. inverziju kompletne a ne sažete matrice ) i tu nastaje problem. Ovaj problem se vidi tek kod velikih 
projekata kada i mali problem može da ima katastrofalne posledice. Tj 

u opštem slučaju nema garancije da će se 

za različite potprograme koristiti iste strukture podataka.

 

Drugi problem jeste problem kontinuiteta ( proširivosti ). Svaki softver se vremenom proširuje i 

nadograđuje 

da bi opstao 

na tržištu. Strukturirano programiranjene garantuje da će softver biti proširiv tj. ne 

rešava ga uopšte jer je vrlo teško raditi izmene kod alogoritamsko orijentisanih programa, za razliku od unosa 
izmena u strukturu podataka. 

Treći problem je problem mogućnosti višestruke upotrebe. On nastaje kada hoćemo neke potprograme 

da koristimo uvek kada nam zatrebaju tj. hoćemo da oni budu univerzalni. Načini na koji su organizovane 
biblioteke potprograma je postao ograničenje u radu sa potprogramima. Zahtev za višekratnom upotrebom je 

zahte

vao i određene izmene i proširenja potprograma kada hoćemo da ih koristimo. Ovo dvoje se jednim 

imenom naziva modularnost

. Ona se pojavljuje na svakom koraku programiranja. Naročito se to primećuje kod 

korisničkog interfejsa jer sva dugmad su 99% ista po i

zgledu koda, tj. suštinski se razlikuje samo njihova funkcija. 

Zato mi samo kod dugmadi u stvari menjamo njihovu funkciju jer bi njihovo pravljenje piksel po piksel bilo 
veoma teško. Ovaj problem dugmadi je nerešiv sistemom biblioteka. 

Objektno programiranje 

 
Zbog predhodnih problema 

moralo je doći do izmena u metodologiji 

i to u obliku objektne metodologije i 

objektnog programiranja. Ono je mnogo savršenije od predhodne dve vrste i bazira se na logoco ljudskog uma. 

Neki smatraju da je ono počelo 1967. sa člankom Dahla u knjizi „Strukturirano programiranje“. Stvarni početak 

je odložen do kraja 70-

ih godina kada ne njegovo uvođenje bilo neminovno.

 

Objektni programer počinje sa softverskim modelovanjem. Prvo se ustanovi domen problema kome 

pripada naš problem i pravi se njegov model. Problem sata koji uvek radi je karakteristika objektnog 

programiranja i samo ono nudi rešenje tog problema. O programer uočava 

entitete i povezuje ih u klase 

entiteta 

i tek onda ih softverski modeluje. U problemu Ax=b uočavamo tri 

entiteta: A,b,x. Sada se modeluju ove 

klase entiteta ( primer je dat na  ad-hok jeziku ): 

 

Naziv: Matrica 
Podaci: m,n,P 
Operacije: 
    

Učitati

 

    Invertovati 
    Prikazati 
    Transponovati 
    Pomnožiti SL ( vektorom ) 
    Pomnožiti SD ( vektorom

 ) 

Naziv: Vektor 
Podaci: k,V 
Operacije: 
    

Učitati

 

    Prikazati 
    Moduo 
    . 
    . 
    . 

Matrica A; 
Vektor x,b; 

A.Učitati

 

b.Učitati

 

A.Invertovati 
X=A.Pomnožiti SD ( b ) 
x.Prikazati 

 

Ključni deo objektnog programiranja je da u podacima ne stoje samo osobine entiteta već i operacije nad 

tim entitetom. Kada se završi rad sa jednom k

lasom počinje rad na drugoj klasi i tek kada ovo sve završi 

programer se vraća na početni proble

m. Ova krat

koća glavnog programa ( treća kolona u primeru ) je u stvari 

karakteristična za objektno programiranje. Znači ovde osim podataka uviđamo i operacije. Objektno 
programiranje je podešeno tako da više nikada ove klase nećemo pisati već ih možemo uvek koristit

i. 

 

Nasleđivanje

 

je mehanizam C++ kojim omogućava dopunjavanje i prilagođavanje klasa našim potrebama tj. 

možemo klase da prilagodimo našim potrebama bez da remetimo izvorni kod te klase. Kod objektnog 

programiranja objekti međusobno vrše interakciju. Deo 

klase naziva se objekat ili instanca klase. U 

predhodnom primeru objekti su A i x,b. Klasa i objekat stoje u istom odnosu kao i tip i promenljiva. 

Temelji objektnog programiranja 

 

Objektna metodologija kao i svaka druga metodologija stoji na određenim principima tj. ima određene 

osnove. Ona se zasniva na nekoliko osnovnih principa koji su bili poznati čak i pre objektnog programiranja 

rudimentalnom obliku, samo što tada nisu igrali bitnu ulogu u izradi softvera. Osnovni elementi objektnog 
programiranja su: apstrakcija i skrivanje informacija, inkapsulacija i modularnost

, polimorfizam, veze između 

klasa a posebno nasleđivanje.

 

Apstrakcija ili apstrahovanje je veoma opšti postupak, na kome je zasnovana naša logika, poznat i 

hiljadama godina pre nastanka objektne metodologije i predstavlja izdvajanje odnosno uočavanje 

bitnog i 

zanemarivanje nebitnog

.  Postoji i u strukturnom programiranju gde svaki obučen programer vidi potprograme 

kao apstraktne elemente.  

Skrivanje informacija 

je odavno jedan od ključnih principa objektnog programiranja. On podrazumeva da 

klijentu ne treba da budu poznati detalji realizacije programa jer on može tada da zloupotrebi naš kod u neke 
svrhe da bi, kada iza

đe novija verzija, nastao veliki problem. Npr. kod starije verzije nekih programskih 

prevodioca mogli su se upotrebiti neki trikovi koji će olakšati prevođenje programa. I programeri koji su navikli 

na korištenje tih trikova bili su u teškoj poziciji kada 

je nadograđen softver koji je onemogućavao te trikove.

 

Inkapsulacija 

je tehnika kojom se pri realizaciji objedinjavaju deskriptivne i dinamičke osobine modela 

entiteta ( u našem slučaju objekata ) poštujući pri tome princip skrivanja informacija.

 

Modularnost je tehnika razlaganja složenog softverskog sistema u domenu implementacije na 

jednostavnije elemente koje imaju unutrašnju logku. Ona je bila poznata i kod procedurnog programiranja kao 
skup servisa namenjenih korisnicima ( biblioteke ). Sama modularnos

t predstavlja mogućnost proširivosti i 

višekratne upotrebe i to je ključna stvar u objektnom programiranju.

 

Polimorfizam poli – više, morfe – oblik ) 

je osobina, ili pak mogućnost, da se softverska komponenta 

ponaša zavisno od konteksta ili okolnosti. Tako se polimorfno mogu ponašati objekti, promenljive pa i funkcije. 
Tako se na primer ponaša C-ova znakovna promenljiva kada se pojavljuje u kontekstu ’a’+1 i tada se ponaša kao 

celobrojna promenljiva. Za ostvarenje polimorfizma uvek mora postojati određen 

preduslov koji je u 

prethodnom slučaju ugrađen u C, tj. znakovna promenljiva je podtip celobrojnog tipa. 

  

Veze između klasa 

su u okviru problema gde postoji više klasa veoma bitna komponenta jer egzistira 

veliki broj međuzavisnih klasa. Vezama se ostvaruje uređenje apstrakcija. Najveću važnost ima nasleđivanje

 tj. 

izvođenje klase iz klase. Nasleđivanje predstavlja prenošenje osobina jedne klase na drugu uz mogućnost 
dopune i modifikacije bez izmene izvornog koda prve klase. Ono omogućuje npr. da osnovnoj f

unkciji tastera, 

koja je ista za sve, dodamo i novu, nama potrebnu, funkciju bez menjanja njegovog koda. 

Objekat i klasa 

 

Postoji mnogo de

finicija i klasa i objekata ali jedno što im je zajedničko jeste da kažu da su klasa i objekat 

u stvari pojmovi. Pojam je po svojoj prirodi misao o bitnim karakteristikama predmeta kojih mi u realnosti 
prepoznajemo. To je ono što mi u stvari modelujemo. Najbitniji pojmovi u programiranju jesu pojam za stvar, 

proces, osobinu i na kraju pojam za odnos. Takođe veoma bitna stvar jesu i odnosi među pojmovima. Pojam 

može biti individualni ili opšti ( klasni ) pojam.  

Logika se bavi opštim, bitnim osobinama problema, ali mi sa stanovišta programiranja ih možemo 

posmatrati konkretnije jer ih vezujemo samo za pitanje problema i ne idemo ka univerzalijama. Od problema do 
problema mi posmatramo druge karakteristike koje su nam u tom trenutku relevantne. Tako se svi autori slažu 
da su najbitnije osobine objekta: indentitet, stanje i ponašanje. 

background image

 

3.

 

Svaki objekat poseduje sopstvenu memoriju sastavljenu od drugih objekata ( i drugih 

promenljivih u hibridnim jezicima ). Objekti ne smeju deliti memoriju. Pokazivači npr. utič

u na 

deljenje memorije od strane objekata. 

4.

 

Svaki objekat pripada nekoj klasi. 

5.

 

Svi objekti iste klase primaju iste poruke. Ovaj princip potiče iz definicionog zahteva da svi objekti 

iste klase imaju isto ponašanje. 

Programski jezik C++ 

 
Programski jezik C++ 

se pojavio u periodu između 1980 i 1984 godine, kao o

bjedinjeno proširenje, ili kako 

neki kažu 

pojačanje programskog jezika C. Bjarne Stroustrup je u stvari tvorac C++. Stvaranje ovog programskog 

jezika imalo je i retroaktivno dejstvo na C, tako da C i C++ fakt

ički predstavljaju jedan jezik.

 

Definisanje klase u C++ 

 
Kada je u pitanju objektno programiranje najvažniji pojam oko koga se sve vrti jeste pojam klase i njihova 

izgradnja. C++ za stvaranje klase ima posebnu naredbu 

class

 koja je 

slična 

struct

 naredbi. Ovaj primer 

pokazuje                           uopšten prikaz izgleda definicije klase: 

D

efinicija se deli na dva dela, sastoji se od zaglavlja i tela modula tako 

da se deklaracija funkcija-

članova nalazi u zaglavlju, a definicija u 

telu.

 

Bitno je napomenuti da po završetku deklarisanja klase mora 

da stoji

 

„;“ 

inače nam kompajler neće prijaviti grešku vezanu za

 tu 

liniju 

već

 

spisak grešaka u linijama koje slede. Takođe postoji i jedno 

pravilo da se imena funkcija, klasa i objekata pišu takozvanom kamel 

notacijom tj da se ime svake nove reči u nazivu piše velikim slovom 
pazeći pri tome

 

da je početno slovo za sva imena malo 

osim za ime 

klase koje počinje                                                     velikim početnim 

slovom. Ova notacija je u Javi obavezna dok je u C++ stvar navike. 

Definisanje klase pokazaćemo sada na 

primeru dekartove tačke. Pravimo klasu Point i tokom

 

njenog definisanja mi tražimo način da je napravimo što 

univerzalnijom da bi je i posle nas programeri mogli koristiti ukoliko im zatreba. 

Kao prvo osobine tačke jesu njene koordinate pa njih definišemo kao prodatak

-

član. Ali pored ovog 

deskriptivnog dela 

objektni programer definiše i operacije nad tom tačkom. Pri pisanju metoda mi imamo 

potpunu slobodu ali moramo da pazimo da repertoar bude dovoljan tj ni premali ni preveliki. Jer ako je metoda 

premalo naićićemo na

 

problem da će nam neka operaci

ja u sklop

u rada sa tačkom zatreba

 

a mi je nećemo imati 

tada na raspolaganju. Ovo shvatanje koliko metoda nam je potrebno dolazi sa iskustvom. Prvo zadajemo 
vrednost za x i y tj objekat 

dovodimo u neko početno stanje. Objekat je sintaksno vrlo sličan promenljivoj

. Kada 

naredba u programu Point a,b počne da se izvršava zauzimaju se memorijske lokacije za objekte a i b sa po dve 
double promenljive. Metoda setPoint se vrši nad objektom i postavlja određene vrednosti za promenljive x i y. 
Sledeća metoda getX služi da se očita abscisa. Ona vraća kao rezultat x koordinatu. Analogno tome funkcioniše i 

funkcija getY. Sada sledi metoda distance koja je u stvari prototip funkcije koja je definisana van klase.  

Takođe 

dodela objekta objektu kao b=a je moguća između objekata iste

 klase. 

 

class ImeKlase { 
 

//podaci-

članovi

 

 

//objekti-

članovi

 

 

//funkcije-

članovi

 

};   
ImeKlase::imeFunkcije { 

//telo funkcije 

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

Prijavi se i preuzmi ceo dokument.

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

Slični dokumenti