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 

kompatibilnosti. 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 o

pš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 programiranje 

ne 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 

mo

guć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 

zahtevao 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 izgledu 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.  

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 logici 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 kratkoć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 uve

k koristiti. 

 

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 interakc

iju. 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 nast

anka 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 klj

učnih principa objektnog programiranja. 

Razlog skrivanja 

informacija je smanjivanje kompleksnosti koju programer mora da razume.

 

Takođe ovaj princip podrazumeva 

da klijentu ne moraju biti poznati detalji realizacije programa i time smanjuje kolicinu informacija koju programer-
klijent mora da drzi u glavi. 

 

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 modularnost p

redstavlja 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 pre

duslov koji je u 

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

  

Veze između klasa su jedan od bitnih elemenata, jer vrlo retko klase postoje kao izolovane, već su veoma 

česte veze sa drugim klasama

. Vezama se ostvaru

je 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 

funkciji 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 

sklopu 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