Professional Documents
Culture Documents
Objektno orijentisano programiranje – Pri učenju novog jezika uvek se najveća pažnja
posvećuje učenju sintakse tog jezika i specifičnostima vezanim za taj jezik. Međutim, jako je
bitno razumeti principe i metodologiju koji stoje iza tog jezika. Pošto je tema ovog teksta
objektno orjentisano programiranje, podrazumeva se da govorimo o jezicima koji su ili
potpuno objektno orjentisani ili to nisu, ali podržavaju OOP pristup programiranju. Ovde
ćemo konketno pisati o c# programskom jeziku, ali treba naglasiti da je sve napisano, u stvari
uopšteni OOP princip, koji je nezavisan od programskog jezika.
U OOP-u se teži pisanju delova koda koji su laki za održavanje i ponovno upotrebljivi (code
reuse), a sa druge strane omogućavaju izvršavanje kompleksnih zadataka. Kompletna
struktura objektno orjentisanih programa veoma se razlikuje od strukture programa napisanih
u nekom proceduralnom jeziku i daje programu intuitivnu, prirodnu stukturu.
Televizor, ulica, drvo, kuća, knjiga su samo neki od objekata koje susrećemo u
svakodnevnom životu. Ideja objektnog programiranja je da se taj model objekata iz realnog
života prenese i na programiranje. Tako je u programiranju objekat svaki element koga treba
predstaviti programu, podrazumevajući pod tim i „žive“ objekte odnosno ljude i životinje.
Uopšte OOP i njegova analogija sa objektima i događajima iz svakodnevnog života, nam
omogućava drugačiji pristup programiranju – nama lakše razumljivi i prirodniji način, kao i
mogućnost razbijanja programa na manje celine, čime obezbeđujemo lakše upravljanje. OOP
principi su zasnovani na primeni koncepta crne kutije. Koncept crne kutije podrazumeva
korišćenje nekog objekta, bez konkretnog znanja o načinu funkcionisanja tog objekta. Kao
primer možemo navesti televizor. Svako od nas zna šta je i kako da ga koristi, ali se ne
zamaramo time kako on radi. Takođe zamena televizora drugim modelom podrazumeva neke
razlike između modela, ali suština i osnovna namena televizora ostaje ista, kao i standardi
kako ga priključujemo na električnu struju, gde priključiti antentu itd.
U programiranju klasa predstavlja definiciju ili šablon na osnovu koje kreiramo objekat. Klasa
se sastoji iz članova klase. Članovi klase su svi elementi koji sačinjavaju tu klasu i koristeći
c# terminologiju to su najčešće metode i polja. Često korišćen sinonim za metode u drugim
jezicima je funkcija. Pričajući o objektima, pravili smo analogiju sa televizorom, i rekli da svi
znamo „kako se koristi“, ali ne ne znamo „kako radi“. Najčešće nam metode obezbeđuju
funkcionalnost „kako se koristi“, a celokupna klasa sa svim njenim članovima nam
obezbeđuje „kako radi“.
Na slici 1 možete videti definiciju klase Imenik. Dodavanje, brisanje i pretraživanje
predstavljaju metode klase. Korišćenjem datih metoda korisnici mogu da manipulišu sa
poslovnim imenikom, a polje kontakti (List<string> kontakti) sadrži potrebne podatke sa
kojima se radi. Kao što možete primetiti ispred definicije svakog člana klase stoji, u našem
slučaju private ili public i to je takoznani modifikator pristupa. Modifikatori pristupa služe da
odrede koji će članovi klase biti vidljivi ostatku sveta, a koji će biti vidljivi samo u datoj klasi
i biti njeni interni članovi. Modifikator private uz polje kontakti označava da će ovo polje biti
vidljivo samo u klasi imenik, dok su public metode dodavanje, brisanje i pretraživanje biti
vidljive i van klase.
Klasa predstavlja šablon na osnovu koga ćemo kreirati objekat. Uobičajeni naziv za kreiranje
objekta je instanciranje.
Objekat objectImenik smo kreirali na osnovu klase Imenik. U sledećem redu smo startovali
metodu dodavnje, objekta objectImenik.
Metode i promenjive
Jedna od objektno orjenitsanih mogućnosti koju implementiraju c++, c#, java itd je takozvano
preopterećenje metoda (overload), odnosno situacija da nekoliko metoda nazovemo istim
imenom, a da imaju drugačije potpise.
Preopterećenje metoda često koristimo u situaciji kada trebamo da izvršimo istu operaciju,
sabiranje u našem slučaju, ali broj ulaznih parametara varira. Tako prva metoda kao ulazne
parametre uzima dve celobrojne (int – integer) vrednosti, a kao rezultat vraća celobrojnu
vrednost zbira ulaznih vrednosti. Druga metoda prima tri celobrojna broja kao argumente i
vraća njihov zbir, a treća metoda prima četiri celobrojne vrednosti kao ulazne parametre, a
povratni tip je njihov zbir.
Apstrakcija
Enkapsulacija
Modularanost
Polimorfizam
Nasleđivanje
OOP je način pristupa realizaciji softvera kao modelu realnog sveta. Objektno orijentisano
programiranje predstavlja sasvim nov način razmišljanja u odnosu na tzv. tradicionalno algoritamsko
programiranje. Problemi se identifikuju kao objekti koji nešto rade i apstrakcije koje predstavljaju
skupove objekata istih svojstava. Kod ovakvog načina programiranja mnogo više vremena se troši na
projektovanje, a manje na samo programiranje, što je bio slučaj kod običnog (tradicionalnog)
programiranja. OOP u centar rada postavlja problem koji rešava, a ne pitanje konkretnog
programskog rešenja. Akcenat je na objektima (delovima sistema) koji nešto rade, a ne na
algoritmima tj. na tome kako nešto radi. OOP pruža nekoliko bitnih koncepata, a to su: klase, objekti,
enkapsulacija, metode i svojstva, kontruktori i destruktori, nasleđivanje i polimorfizam
2.Objekat. Objekat je predstavljanje nečega što postoji. Kako je klasa tip, objekat predstavlja
promeljivu toga tipa u programu. Svaki objekat ima sopstvene elemente koji su navedeni u deklaraciji
klase, a takođe ima i svoje karakteristike: identitet, stanje i ponašanje.
Kako to funkcioniše? Setimo se programa za video klub koji bi sada trebalo da ištampa račun za
izdate filmove članu kluba. Za ovo su nam potrebni objekat pod nazivom 'Račun' i objekat pod
nazivom 'Izdanje'. Objekat Izdanje predstavlja osnovnu delatnost kluba, tačnije samo izdavanje
filmova članu. Ovaj objekat će konsultovati objekat Član koji će mu dati podatke o samom članu koji
je došao da iznajmi filmove, ali će konsultovati i objekat Film koji će mu dati podatke o izdatom filmu.
Objekatu Izdanje je potrebna i mogućnost da generiše račun. Objekat Račun bi predstavljao primerak
računa za člana u kome bi bili upisani detalji računa, a takođe bi mogao i da se odštampa. Veoma je
bitno zapaziti da objekat ima inteligenciju da proizvede aktivnosti koje se na njega odnose (objekat
Izdanje može da generiše račun). Tada objektu Izdanje možemo jednostavno reći 'Napravi račun.', a
objektu Račun možemo reći 'Odštampaj se'. Ovo su primeri ponašanja objekta. Veliki je značaj
objekta u tome što ih može koristiti i neko ko ne razume kako su oni sastavljeni.
4. Metode i svojstva. Na objekte utičemo kroz metode i svojstva. Metode predstavljaju nešto što
zadamo objektu da radi. U tom smislu, pokretanje metoda je analogno pozivanju funkcija. Svojstvo je
nešto što opisuje osobinu i stanje objekta. Ako bi trebalo da štampamo račun, trebalo bi da nađemo
metod koji ovo radi. Kada pokrenemo metod, pretpostavlja se da sam objekt razume šta treba da
uradi da bi zadovoljio zahtev. Nas ne zanima šta on zapravo radi, mi samo kažemo 'Štampaj račun'. Sa
druge strane, ako bi trebalo da štampamo neki drugi račun, možemo podesiti svojstvo računa. Ako
želimo da štampamo račun broj 5 a ne 7, podesićemo svojstvo broja računa na vrednost 5. Takođe
moguće je menjati svojstvo tip ili veličinu fonta, kao i mnoga druga. Objekat je odgovoran za
reagovanje na ovaj zahtev i mi ne treba da brinemo o tehničkim stvarima kroz koje objekat prolazi da
bi ispunio naš zahtev.
5.Kontruktori. Objekat predstavlja složeni sistem koji ima neko svoje unutrašnje stanje. To stanje
treba uspostaviti na određen način na početku života objekta. Zato u programu treba obezbediti
mehanizam da se objekat automatski po nastanku dovede u ispravno početno stanje što se postiže
procesom inicijalizacije. Da bi se to obezbedilo, u klasi se definiše posebna funkcija članica koja se
poziva automatski pri kreiranju objekta. Ova funkcija se naziva konstruktorom i nosi isto ime kao i
sama klasa. Izgled samog konstruktora je stvar interne realizacije klase. Kada se definišu objekti neke
klase, potrebno je navesti stvarne argumente poziva konstruktora. Kada se u toku izvršavanja
programa naiđe na definiciju objekta, poziva se konstruktor sa navedenim argumentima. Tada se
izvršava telo konstruktora, čime je objekat doveden u početno stanje onakvo kakvo je predvideo
projektant klase.
U Visual Basic .NET-u konstruktori predstavljaju funkcije članice koji se pozivaju sa New.
6.Destruktori. Moguće je definisati funkciju članicu klase (metodu) koja će se automatski pozvati
kada objekat prestaje da živi. Ova funkcija se naziva destruktor. Njena sintaksa je sledeća:
tacka(); // konstruktor
∼tacka(); // destruktor
Jedna od dobrih stvari koje je jeste prikupljanje đubreta (Garbage Collection, GC) koje se odvija u
pozadini i prikuplja reference objekta koji se ne koriste, što nas oslobađa potrebe da ih sami
uništavamo. Međutim, kako je ovo proces koji se odvija u pozadini, mi ne možemo tačno znati kada
je proces pozvan.
7.Nasleđivanje je najvažniji koncept OOP-a. To je relacija između klasa: Ako je klasa B jedna vrsta
klase A, tj. ako objekti klase B imaju sve osobine klase A i još neke, onda je klasa B naslednik klase A.
Nasleđivanje se realizuje izvođenjem klasa. Kada jedna klasa predstavlja jednu vrstu druge klase, kaže
se da je ona izvedena klasa iz te druge klase, koja se naziva osnovnom klasom. Pri kreiranju objekta
izvedene ili nasleđene klase, najpre se izvršava kostruktor osnovne klase koji inicijalizuje podobjekat
osnovne klase, zatim konstruktor članova izvedene klase, i najzad telo konstruktora izvedene klase.
Kada se kreira objekat izvedene klase koji u sebi sadrži i članove nasleđene iz osnovne klase,
potrebno je inicijalizovati i taj nasleđeni deo. To se vrši automatski, pozivom konstruktora osnovne
klase pre nego što se izvrši telo konstruktora izvedene klase.