Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu

- Kurs objektno orijentisanog programiranja u programskom jeziku JAVA –
www.fonis.rs

Uvod u Objektno orijentisano programiranje i programski jezik JavaTM
Softversko inženjerstvo
Danas se za softversko inženjerstvo najčešće vezuje pojam “programiranje”. Programeri su, u stvari, inženjeri softvera ili, popularnije, software developers. Da bi neko mogao da bude uspešan developer, morao bi biti upoznat sa velikim brojem programskih jezika, pretežno objektno orijentisanih, zatim bazama podataka, osnovnim strukturama i algoritmima za manipulaciju istim. Međutim, na samom početku, budući inženjer softvera mora imati čvrstu osnovu u aktuelnom načinu i stilu programiranja - developmenta.

Objektno orijentisan način mišljenja
Šta podrazumeva pojam objektno orijentisan? Razvoj softverskog inženjerstva u svetu trajao je godinama. Samo programiranje softvera prošlo je kroz nekoliko faza, od kojih su neke faze i dalje u razvoju, tj. razvijaju se paralelno sa aktuelnim. Programiranje koje je “osvojilo svet” svodi se na niz programskih naredbi koje se sekvencijalno izvršavaju (jedna za drugom). Ovo i jeste jedna od suvih definicija programiranja, koja danas nije univerzalno primenjiva. Sekvencijalno programiranje se izvodilo korišćenjem jasno definisanih programskih komandi – sekvenci, koje su se kasnije grupisale u veće module, koji su nazvani procedurama. Samim tim, ovakvo programiranje dobija naziv proceduralno. Veliki broj današnjih programskih jezika je proceduralan i visoko upotrebljiv u tzv. sistemskom programiranju (programiranje modula operativnih sistema oslanja se na podršku brzih proceduralnih jezika poput programskog jezika C). Prilikom proceduralnog programiranja, podaci koje program koristi (obrađuje) su odvojeni od samog koda, tj. programske logike, što je velika mana s obzirom na umanjene mogućnosti kontrole pristupa podacima ili njenog potpunog odsustva. Ovo je veliki sigurnosni rizik u programiranju. U filozofiji proceduralnog programiranja, program se posmatra kao black box (crna kutija), koja, poput procesa, prima ulazne podatke, obrađuje ih i dostavlja izlazne podatke, tj. u slučaju korišćenja personalnih kompjutera, ispisuje na standardnom izlazu ili smešta u memoriju računara. Sami podaci se najčešće čuvaju u nekoj globalnoj bazi podataka ili na udaljenom serveru. Kod, kao izvršni deo programa, kod proceduralnog programiranja smešten je unutar funkcija i procedura, koje su same po sebi black box sistem obrade ulaza i dobijanja izlaza.

Unos ulaznih podataka

Dostavljanje izlaznih podataka

Slika 1. “Black Box” filozofija proceduralnog programiranja

1/16

Objekti “kanta” i “zgužvan papir” Na slici je data skoro verna specifikacija ova dva objekta. odgovorimo na pitanje šta je to stanje jedne kante za otpadke? To su njeni atributi poput dimenzija. dakle. Definisanjem jednog ovakvog entiteta. procentualne popunjenosti i tako dalje. u OO programerskoj filozofiji su sjedinjeni podaci i ponašanje u jednom potpunom paketu (full package). pojava. samo drugačijeg tipa nego što je kanta. Objekat je jednistvena celina koja sadrži podatke i ponašanje. potrebno ju je predstaviti određenim stanjem i ponašanjem. Možemo primetiti da su prečnici baza ove kante približne obliku valjka dati u centimetrima. dodato određeno ponašanje. u stvari. Obezbeđena je jednistvena kontrola pristupa podacima. Za početak. I oni su objekti. filozofija je jednostavna. Objekat U programiranju. koji međusobno komuniciraju. kojima je. i zovemo ih atributi. Slika 2. iako je pojam prečnik u ovom sličaju banalizacija).rs Objektno orijentisano programiranje uvodi jedan poseban termin – objekat. Dakle. po potrebi. nizove karaktera. No. objekti. bio bi sastavljen iz modula različitih funkcija. za objekat je najbolje reći da je jedna od osnovnih gradivnih jedinica OO programiranja. cele brojeve. U programu. Na slci koja sledi možemo primetiti da se u kanti nalaze zgužvani papiri. Primetićemo da svaki atribut ima neku svoju vrednost. druge objekte. orijentisano ka objektu. Da bi bila objekat. Sam po sebi. koji je osnova ovakvog programiranja. poput organa. pomoću objekta ili pomoću više različitih objekata. Ovo su vrednosti koje jedan objekat razlikuju od drugog (neće svaki komad papira biti istog prečnika. kao što ime kaže. sve se predstavlja objektom. svaki entitet koji je potrebno predstaviti pomoću određenih standardom definisanih metoda opisivanja prirodnih ili veštačkih entiteta. ovaj termin ima veoma jasno definisano značenje. Za početak. objekat ima stanje i ponašanje. pošto objekat nije prost tip podatka. poput celog broja ili niza znakova. događaja. može sadržati druge podatke. Podaci iskazuju stanje objekta. koji su. oslonimo se trenutno na definiciju objekta u logičnom smislu. Ako program posmatramo kao organizam. Objekat je.Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. Dakle. ovaj podatak bio bi zapisan kao 2/16 .Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu . Sve je objekat. već skup primitivnijih vrsta podataka. Ovi funkcionalni moduli sačinjeni su iz sopstvenih delova. OO je. boje. Sve ove vrednosti su određenog tipa. Uzmimo kao primer objekta jednu običnu kantu za otpadke. brojeva.fonis.

tako bi za niz otpadaka kao atribut bilo naznačeno da je tipa “Zgužvani papir”. proces ubacivanja otpadka u kantu možemo nazvati ubaci(). postoji više različitih kanti za odpadke.. dok bi ime materijala izrade predstavljao neki niz karaktera. Za početak. a tokom njihovog korišćenja njihova procentualna popunjenost će se prilično dinamično menjati. bića i pojava koje je sretao tokom života. Pre svega je logično da neke pojmove zovemo zajedničkim imenima. tj. sve početne vrednosti i zahtevana ponašanja realizovana metodama.) naziva se kompozicija. Zagrade nam omogućuju da razlikujemo atribute od metoda. osim ako nije podpomognuta dobrom tehnologijom iz sfere robotike.Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. od kojih je svakako najbitniji pojam klasa. Klasa definiše koje će atribute i ponašanja posedovati svaki objekat te klase. životinje i biljke. 3/16 .rs nenegativna celobrojna vrednost. klasa se tretira kao šablon objekta. kao podatak/atribut/pokazivač stanja postojao bi neki niz objekata koji predstavljaju otpadke u kanti. Sve one su kante. obavezujući svaki od njih da poseduju navedene atribute da iskažu njihovo stanje. mobilni telefon IMA bateriju. Samo ponašanje ne mora značiti da sama kanta nešto radi. izvršio neke osnovne klasifikacije stvari. na primer.Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu . čovek je.. U programiranju. Ukoliko bi. Procentualna popunjenost bi bila neki realan broj. Međutim. zahvaljujući svojoj inteligienciji. Sada je potrebno objasniti još neke termine OO koncepta. Dakle. Ono što na slici nije navedeno kao deo specifikacije jedne kante za otpadke jeste njena mogućnost da skladišti objekte poput ovih zgužvanih papira. mi kao programeri možemo ovo pitanje sagledati iz jednog drugačijeg ugla. Uzmimo kao primer našu kantu za otpadke. iako se oni u nekim detaljima razlikuju. kao što bi za atribut procentualne popunjenosti bilo naznačeno da je podatak tipa realan broj. U programu. metode kontrole nad njom. Relacija kompozicije između dva objekta naziva se relacija ima. karakteri i ostali su prosti – primitivni tipovi podataka). Tako je. tako da bi klasa “Kanta” definisala sve objekte tog tipa. klasa u prirodnom poretku definiše neke zajedničke osobine i ponašanja entiteta koje se ubrajaju pod njenu klasifikaciju. baterije. tj. Dakle. U OO konceptu. nastala klasifikacija živih bića na ljude. šematski plan koji se koristi prilikom kreiranja objekata. neki imaju jako male razlike.fonis. Sada je potrebno odgovoriti na pitanje šta je to ponašanje jedne kante za otpadke? Iako nam zdrav razum govori da se jedna kanta za otpadke ne “ponaša”. Tako. klasa je tip podatka višeg nivoa (celobrojne vrednosti. a neki su potpuno različiti. Neki su identični. biće određene boje. a proces izbacivanja svih otpadaka iz kante izbaci(). Dakle. Klasa U prirodi se može sresti veliki broj sličnih entiteta. Upravo smo naveli primer objekta. već i ono što se radi sa kantom može predstavljati ponašanje. jer su ovo zaista metode ponašanja kante. a koji se razlikuju u detaljima vezanih za određene osobine. pomenuta kanta za otpadke mogla da prima samo zgužvani papir kao svoje otpadke. tastaturu. pojam kada objekat sadrži objekte (mobilni telefon sadrži ekran. Sama po sebi. na primer. ovo bi moralo biti implementirano. Svaka od njih imaće neke svoje dimenzije. svaki objekat je jedna instanca svoje klase.

bez kojeg ni jedan softver neće izaći na tržište. Neke metode omogućavaju izmenu vrednosti atributa. Određene detalje. pod imenom “getIme()”. Da bi neki objekat pozvao neku metodu drugog objekta. a ko vodu nosi”. u programu. tj. uvek je bitno “ko kosi. metode koje vrše istu funkciju ili niz funkcija. Komunikacioni mehanizam između objekata su poruke.rs Metode i komunikacija među objektima Kao što je već rečeno. ukoliko bi objekat “Pera” želeo da sazna ime objekta “Milena”. predstavljen u kodu). sam korisnik jedan objekat. koja je zadužena da kao svoju povratnu vrednost vrati niz karaktera koji predstavljaju ime. kao ni među-podatke (pr: vrednost konstante Pi ili konstante e). Enkapsulacija i interfejsi U toku programiranja. Enkapsulacija se obezbeđuje interfejsima. Svi objekti iste klase imaju iste metode.fonis. potrebno je sakriti od ostalih objekata. Na primer. 4/16 . implementacijom samog objekta. što je logično. Enkapsulacija je sposobnost objekta da sakrije svoje podatke ili da ih učini selektivno dostupnim drugim entitetima. Nije potrebno da korisnik poznaje algoritme koji se koriste za samo izračunavanje. on bi pozvao metodu objekta “Milena”. Bilo koje ponašanje objekta mora biti pozvano porukom preko interfejsa. koji mora potpuno da opiše kako korisnik komunicira sa objektom klase. kako oni direktnim pristupom ne bi menjali bitne podatke. metode realizuju zahtevano ponašanje klase. koji nisu važni za korišćenje objekta. ukoliko to nije eksplicitno dozvoljeno ili ne postoji metoda koja je zadužena za to. Ovo je veoma uobičajena praksa u OO programiranju. od velikog je značaja verno kontrolisati pristup podacima nekog objekta. Na primer. U većini slučajeva. tj. ukoliko neki objekat ima mogućnost računanja neke složene matematičke operacije. interfejsi su javni.Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. a odgovor drugog objekta defnisan je povratnom vrednošću koja je vraćena nakon inicijalne poruke. a vratiti samo rezultat. tj. tj. s obzirom da su posrednici u komunikaciji među objektima i sa korisnikom (s tim što je. on mu šalje poruku.Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu . One realizuju aktivnosti objekata i obezbeđuju ponašanje. Svaka metoda se mora definisati. Ovo se najviše izražava prilikom testiranja softvera. U većini slučajeva. Interfejs je osnovno sredstvo komunikacije među objektima. pristup podacima unutar nekog objekta bi trebalo da kontroliše sam objekat – ni jedan objekat ne bi trebalo da može da menja vrednosti atributa drugog objekta. Veliki je propust ukoliko programer u svakom momentu nije svestan ko sve može nehotice promeniti interne podatke nekog objekta. za svaku metodu moraju biti poznati sledeći parametri: ime metode (jedinstveno opisuje određeno ponašanje) argumenti (vrednosti koje joj se prosleđuju) povratna vrednost (tip povratne vrednosti) Metode služe i za komunikaciju među objektima. korisniku je potrebno pružiti interfejs koji će primiti parametre koji su potrebni za računanje.

Naime. mogli bi definisati neke osobine svih živih bića koje su im zajedničke. kao što su i svi ljudi sisari i živa bića. postojalo bi preklapanje atributa. Definisanjem klase “Čovek”.Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu . interfejs je apstrakcija objekta. kada bi definisali klasu “Sisar”. jer i klasa “Živo biće ima ovaj atribut”. Bitno je napomenuti da bi. Takođe. To je relacija je ili jeste. U osnovi. Nasleđivanje se može definisati kao razvrstavanje klasa definisanjem istih osobina različitih klasa (“starost” je osobina svih živih bića.rs Na poznatom portalu Wikipedia stoji: “Interfejs je obično apstrakcija koju za sebe pruža entitet spoljašnjoj sredini. njegov način prezentovanja spoljašnjosti. Ovo omogućava nekoj klasi da nasledi atribute i metode (stanje i ponašanje) neke klase. ukoliko objekat poseduje neki interfejs. trebalo da interno implementira ponašanje koje taj interfejs opisuje (ne bi bilo dobro da objekat svojim interfejsom tvrdi kako može da izračuna integral. svi sisari su živa bića. mogli bi kao osobinu svih sisara navesti atribut “boja očiju” (svi sisari imaju oči i to određene boje).Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. iz ovoga sledi: čovek JE živo biće). Slika 3. Ovde se može primetiti određen odnos između klasa. što omogućava entitetu da bude modifikovan iznutra. gde je klasa koja nasleđuje podklasa. potrebno je pomenuti još jednu relaciju među objektima. On razdvaja metode eksterne komunikacije sa internih operacija.fonis. a da to ne utiče na njegovu komunikaciju sa sredinom. sisar JE živo biće (naravno. preko kojeg će drugi objekti komunicirati sa njime. Naime. poput atributa “starost” (sva živa bića imaju određenu starost). čime se definiše odnos između njih. Ovakve odnose definiše nasleđivanje. Kada bismo definisali klasu “Živo biće”. a klasa od koje nasleđuje superklasa. Međutim. već samo metode. Nasleđivanje i relacija JESTE 5/16 . čovek JE sisar. kada bi u klasi “Sisar” definisali atribut “starost”. Nasleđivanje Prilikom definisanja klase. interfejsi ne sadrže atribute.” Dakle. a time i ljudi). Za početak. a da interno algoritmi za ovaj račun ne postoje). u mogućnosti smo da definišemo atribut “ime” i tako dalje. pa i sisara. pomenuli smo klasifikaciju živih bića.

JavaTM Programski jezik Java je projektovan tako da se omogući maksimalna prenosivost.rs Na slici 3 može se primetiti da je glavna superklasa “OBLIK”. koji su projektovani da rade na Javinoj virtuelnoj mašini (Java Virtual Machine). Iz prethodnog primera se vidi da je stablo nasleđivanja potencijalno veliko. Kombinacija ovakvih svojstava. daje svoj sopstveni odgovor. koji može biti. zavisiće od politike bezbednosti. na primer). njenih objekata razlikuju u lancu hijerarhije nasleđivanja. od koje je interfejs nasleđen (poenta interfejsa jeste da ga svaka klasa implementira na sebi svojstven način). Mnogi programski jezici definicije prepuštaju određenoj implementaciji. Virtuelna mašina omogućava sistem izvršavanja (runtime system). Nivo 6/16 .. tj. koji obezbeđuje da se bajtkodovi ispravno formiraju i zadovolje bezbednosne i sigurnosne garancije. Javin izvorni kod. koji pruža pristup samoj virtuelnoj mašni. Prilikom njihovog učitavanja na virtuelnu mašinu. tj. ali najčešće nije isti kao odgovor koji bi dala superklasa. U programiranju. sve do mašinskog jezika u kojem se Javin izvorni kod kompajlira u Javine bajtkodove. koja je na snazi u vreme pokretanja aplikacije. a da su njene podklase “PRAVOUGAONIK”. naravno i one koje je ona nasledila od klase “OBLIK”. zove se polimorfizam. morali bi proći neki ovakav lanac: Živo biće – Sisar – Čovek – Amerikanac – Čarli. omogućuje Javinom kodu potpunu nezavisnost od platforme. Ova politika podešava se u operativnom sistemu na kojem je instalirana JVM.“TROUGAO” i “VARNICA”.fonis. Šta će tačno biti dozvoljeno aplikaciji da radi. da bi se obezbedio bezbednosni model podesan za izvršavanje koda učitanog preko mreže na različitim nivoima poverenja. Kod može da se izvršava sa određenim nivoom zaštite. gde se načini implementacije određenih ponašanja klase.“KRUG”.Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. tj. klase prvo proverava potvrdilac (bytecode verifier). svaka klasa na svoj način reaguje na pobude iz spoljašnje sredine. krug JESTE oblik i tako dalje. može da radi na svakoj mašini. Potencijal mehanizma nasleđivanja leži u apstrakciji i tehnici organizacije superklasa i podklasa. U jednom hijerarhijskom lancu klasa. Ovo znači da važi relacija jeste. Rukovodilac bezbednosti može da zabrani aplikaciji da čita sa lokalnog diska ili da upisuje na njega (u slučaju Applet-a. korišćenjem rukovodioca bezbednosti (security manager) ili kontrole pristupa (access controler) proverava operacije čija je bezbednost bitna. Ovakva pojava. dok ih Java utvrđuje sasvim određeno. da bi se nepažljivi i zlonamerni pisci klasa sprečili da oštete sistem.Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu . ova relacija govori o tome da je klasa “KVADRAT” nasledila sve atribute i metode od klase “PRAVOUGAONIK”. Takođe. tj. zato što kvadrat JESTE oblik. Kada bi pokušali da hijerarhijski dođemo od žibog bića do konkretne osobe. koji je kompajliran u Javine bajtkodove. ili može da dozvoli mrežne veze samo ka određenim mašinama.. Međutim. na čijem operativnom sistemu je instalirana JVM. svaka klasa za sebe implementira svoje interfejse. svaka podklasa je nasledila atribute i metode svoje superklase. pravougaonik JESTE oblik. nasledila je sve interfejse. Sistem izvršavanja.

koje kompajler “preskače” prilikom kompajliranja. Poput programskog jezika C. Još jedna mala sličnost sa programskim jezikom C jeste kompaktnost koda. dok je C kompajliran jezik. Namena je da se opišu određeni delovi programa. U odnosu na ovog ozbiljnog konkurenta. a Java ne. u Javi postoje opcije dodavanja eksternih paketa klasa. JavaDoc dokumentaciji biće reči u kasnijim delovima kursa. i u Javi postoje komentari unutar koda. Za sve programske jezike bitno je da obrate pažnju na 3 najbitnije stavke: brzina. kako bi programer mogao da ga lako drži u glavi. Kao i u programskom jeziku C.rs poverenja se može podesiti u zavisnosti od izvora bajtkodova. Komponenete su grupisane u biblioteke klasa i interfejsa. pošto se njegov kod izvršava direktno na sistemu. za izvršavanje Javinog koda je potrebno mnogo više vremena. Šta ovo znači? To znači da se Javine klase prvo moraju interpretirati. // komentar u jednom redu /* komentar u više redova */ /** komentar za dokumentaciju */ Dokumentacioni komentari opisuju deklaracije koje za njima slede. koja svoje korene vuče još iz proceduralnih programskih jezika. Na polju prenosivosti je na zadovoljavajućem nivou. bez konstantnog podsećanja. Dakle. Java je odlična na poljima sigurnosti i prenosivosti. Ovi se komentari u programerskim okruženjima mogu izvući pomoću alatke koja ih koristi za pravljenje dokumentacije o klasama. a svakako na C#. koji je nastao na osnovu Jave i C-a. U programskom jeziku Java postoji ogromna kolekcija već spremnih softverskih komponenti za razne namene (Java API). To ne znači da je bolja od na primer C++. jesu komentari. Zašto je Java sporija nego C-oliki jezici? Zato što je to interpretiran jezik. on svakako zaostaje u pogledu sigurnosti. tj. Zato se ovakvi jezici koriste za tzv “sistemsko programiranje”. a na istom nivou je i brzina.Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu . Dok je programski jezik C. Java je zastupljenija u implementaciji web servisa i apsolutno dominira Internetom. sigurnost. O tzv. a da opisi ne smetaju samom kodu. tj.Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. JavaTM i drugi programski jezici Naučili smo neke osnovne podatke vezane za programski jezik Java. s obzirom na njene prednosti u smislu prenosivosti i izgleda i mogućnosti grafičkog korisničkog interfejsa. pa zatim kompajlirati. po pitanju 3 ključne performanse.fonis. Java je najbalansiraniji programski jezik. Ovde se prati dobra filozofija C-olikih jezika koja kaže: neka kod bude što manji i jednostavniji. Ovo nije slučaj kod C-a. Hajde da ga sada uporedimo sa nekoliko aktuelnih programskih jezika. C++ najbrži programski jezik. svaki programsi jezik ima svoje prednosti. 7/16 . prenosivost. Osnovna sintaksa Jave zaista liči na C ili C++. Osnovna sintaksa Jedan od najkorisnijih delova koda.

rs Java. pa se objekti često zovu primerci ili instance klase. Ovo zahteva da u svakom momentu programer zna koliko objekata postoji i kako da do njih dođe. Svaka klasa ima 3 vrste članova: polja. bez obzira koji kalkulator korisitmo za izračunavanje. za razliku od primitivnih tipova u kojima promenljive sadrže vrednost tog tipa. promenljive specifične za klasu. Ipak će ponekad biti potrebna polja koja dele svi objekti iste klase.njegovu adresu). vrednosti referentnih tipova su null. Kada ne referenciraju nijedan objekat. Obično su za svaki objekat potrebna polja i obično je potrebno da polje u jednom objektu bude različito od istoimenog polja u svakom drugom objektu instanciranom od iste klase. U Javi. U toku programiranja. Hajde da damo jedan primer kada je potrebno da klasa ima statičko polje. KLASA POLJA promenljive. članovi klase mogu da imaju različite nivoe vidljivosti ili pristupačnosti. Nereferencirani Java objekti odmah postaju predmet interesovanja sakupljača đubreta (garbage collector). Dakle.Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu . može se doći do pitanja kako se rešiti nepotrebnog objekta koji je napravljen korišćenjem komande new. koje bi delili svi objekti klase. U Javi se polja specifična za klasu deklarišu ključnom rečju static. metode i druge klase. to mora biti polje koje će izražavati ISTO stanje SVIH objekata koji su instancirani od te klase. Garbage Collector automatski rešava problem nereferenciranih objekata. pa se ona obično nazivaju statičkim poljima. Pravljenje objekata na osnovu definicije klase se zove i instanciranje. Na primer. koje su u vezi sa klasom i njenim objektima (čuvaju rezultate izračunavanja koje obavljaju klase. Novonastali objekti se smeštaju u dinamičku oblast sistemske memorije promenljive veličine.Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. Odgovor je jednostavan – prestati referenciranje datog objekta u kodu. nasuprot objektima klase. klasa bi imala jedno statično polje. s obzirom da je Pi uvek iste vrednosti. koji ih uklanja. koja definiše njegove podatke (stanje) i ponašanje. Svim objektima u Javi se pristupa preko referenci objekata (svaka promenljiva koja izgleda kao da sadrži objekat u stvari sadrži referencu na taj objekat . sastoje se iz naredbi (način na koji se pozivaju i naredbe sadržane u metodama usmeravaju izvršavanje programa) KLASE klase i interfejsi mogu biti članovi drugih klasa i interfejsa (tada su to ugnježdene klase ili interfejsi) Objekti se u Javi prave korišćenjem ključne reči new. 8/16 . kao i svi objektno orijentisani programski jezici. Te deljene promenljive su poznate kao klasne promenljive. tj. obezbeđuje alatku za rešavanje programerskih zadataka korišćenjem notacije klasa i objekata.fonis. algoritmi u njihovim metodama) METODE sadrže izvršni kod klase. Tipovi ovih promenljivih su referentni tipovi. a zauzimaju memorijski prostor. U jeziku C++ i sličnim potrebno je samostalno uništavati objekte koji su nepotrebni u daljem radu. bilo bi nam potrebno da definišemo neke konstante. poput konstante Pi. Dakle. koja se zove heap. tako što se u određenim intervalima izvršava njegova funkcija nad memorijskim prostorom koji zauzima i koristi program pisan u Javi. kada bismo pravili klasu “Kalkulator” u Javi i kada bi nam bilo potrebno da s vremena na vreme napravimo objekat ove klase kako bi izvršili određena izračunavanja. Svaki objekat u Javi ima šablon – klasu. Ovo je jedna od velikih prednosti Jave nad ostalim objektno orijentisanim programskim jezicima.

koji su preneti ovoj metodi.ImeMetode(argumenti). tj. U principu. Kada otpočne izvršavanje tela metode. može biti potrebno da primajući objekat samog sebe doda nekom spisku objekata koji se negde nalazi. Da bi vratila više vrednosti. tako da budu razdvojeni tačkom. Kada izvršavanje pozvane metode bude završeno. tj. zatim. vrati taj objekat. njegovu glavnu izvršnu klasu. instrukcija koje se izvršavaju nad podacima objekta da bi se dobili rezultati. 9/16 . ponekad na poziv nekog drugog objekta. public static void main(String[] args) {} Povremeno. Metoda može da vrati samo jednu vrednost kao rezultat. samo u njima nema argumenata. Svaka Java aplikacija mora da poseduje glavnu metodu. tj. Kada metoda bude pozvana.rs Stvarna korist od orijentisanosti na objekte dolazi od sakrivanja implementacije klase iza operacija koje se izvršavaju nad njenim unutrašnjim podacima. zaduženu da pokrene sam program. primajući objekat mora da kako da sam sebe referencira. Argumenti se prenose metodi kao spisak vrednosti razdvojenih zarezima i obuhvaćenih zagradama. Kao što mogu postojati statička polja u klasi. Na primer. postojeća metoda će nastaviti izvršavanje koda koji se nalazi iza pozvane metode. a ne na određenim primercima (objektima) te klase. koja je referenca na postojeći (primajući) objekat.fonis. Klasne metode su obično namenjene obavljanju klasnih operacija specifičnih za samu klasu i obično na statičkim poljima. se pristupa posredstvom parametara deklarisane metode. mora se napraviti objekat čija je svrha da čuva vraćene vrednosti kao svoje podatke. koji su inače sakriveni od drugih objekata (pomenuli smo već sakrivanje kao enkapsulaciju). Metode koje ne uzimaju argumente i dalje imaju zagrade. objekti ne vrše operacije direktno nad podacima drugih objekata. tako da mogu da ih izmene samo metode te klase. potrebno je obezbediti referencu odredišnog objekta i ime metode. operacije klase se deklarišu putem njenih metoda. naziva postojeći ili primajući objekat. objekat koji je bio cilj pozvane metode se.Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu . Dobro projektovane klase obično kriju svoje podatke. ImeObjekta. pa se zato i zovu statičke metode. U Javi. Metode pristupaju internim detaljima implementacije.Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. Deklarišu se takođe preko ključne reči static. telo metode ograničeno je vitičastim zagradama). koje se zovu klasne metode. iako polja klase mogu biti javno dostupna. atribute i da. Metode i pozivanje metoda Da bismo pravilno pozvali metodu. Argumentima. tako mogu postojati i statičke metode. Metodama je na raspolaganju implicitna referenca this. tok izvršenja će napustiti postojeću metodu i pokrenuti izvršavanje tela pozvane metode (u Javi. posmatran iz perspektive ove metode.

I ne samo to. Tada bi statičko polje zamenila statička metoda koja računa konstantu Pi. Ovim postupkom se ne definiše konstanta. U trenutku njihovog deklarisanja ih nije potrebno inicijalizovati. štampa proces izračunavanja na ekran i vraća rezultat izračunavanja kao rezultat izvršavanja metode. međutim. označićemo ga kao static. Primitivni podaci u Javi su: boolean char byte short int long float double true ili false 16-bitni Unicode 2. Da bismo vrednost učinili konstantom. Imenovane konstante se definišu tako što se deklarišu polja odgovarajućeg tipa. gde je Pi konstanta statična zbog redovnog korišćenja. testiranja ili pokazivanja radi. brojeve u pokretnom zarezu (realne). svaki put prilikom korišćenja konstante Pi. Lokalne promenljive su nedefinisane pre inicijalizacije.14. koja su inicijalizovana odgovarajućom vrednošću. već ostaje nepromenjena za vreme trajanja programa.1 znakovi 8-bitni celi brojevi 16-bitni celi brojevi 32-bitni celi brojevi 64-bitni celi brojevi 32-bitni realni brojevi 64-bitni realni brojevi Konstante su vrednosti kao što je 12.Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu . Tip svake promenljive se mora eksplicitno definisati. Konstante su način na koji se navodi vrednost koja se ne izračunava. Zamislimo sada da je potrebno da se. U našem primeru kalkulatora. bila bi deklarisana: static final getPiValue(). za razliku od tipova koje definiše programer. Takva vrednost se više ne može izmeniti.Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. logičke vrednosti i znakove. već ako želimo da to polje ne bude povezano sa instancama klase. Pomenuta metoda. Promenljive i konstante Java ima ugrađene primitivne tipove podataka koji podržavaju cele brojeve. koja vraća vrednost Pi (uz izračunavanja). ako pokušamo da koristimo lokalne promenljive pre dodeljivanja vrednosti. moramo deklarisati polje rezervisanom rečju final. 10/16 . Pi bi bila konstanta deklarisana na sledeći način: static final Pi = 3. Ovi primitivni tipovi čuvaju podatke koje Java direktno prepoznaje.rs Podestimo se primera statičkog polja u klasi “Kalkulator”.9 i “zmaj”.fonis. kompajler će odbiti da kompajlira program. ona izračuna i da prikaz o tome na standardnom izlazu. već polje čija se vrednost može izmeniti naredbom dodele. Imenovana konstanta je konstantna vrednost na koju se upućuje imenom. 17. dok se to ne reši.

za štampanje stringa na standardnom izlazu: System. Dakle.println("Hello!"). ali String objekti nisu samo nizovi znakova. a operanti su dva objekta tipa String.rs Objekti tipa String Klasa String služi isključivo za rad sa nizovima znakova. a vrednosti stringova pod dvostrukim ("zmaj". Vrednosti karaktera pišu se pod jednostrukim navodnicima ('b'. Klasa String nalazi se u standardnom Javinom paketu klasa (Java API) i ima raznovrsne metode za rad sa objektima tipa String. je niz karaktera. ovaj objekat je String i to je. Sabiranje je izvršeno korišćenjem operatora sabiranja (+). od kojih je jedan predstavljen direktno preko vrednosti. može se slobodno reći. niz je prilično sličan običnom nizu znakova. kompajler pravi String objekat inicijalizovan vrednošću navedenog niza karaktera ("Hello!") i prenosi ga kao argument metodi println. U ovom slučaju. koja uzima celobrojni indeks i vraća znak (karakter) na tom indeksnom položaju. U Javi. kao što je navedeno u tabeli. nije potrebno navesti dužinu. U sledećem redu koda pozvana je sistemska metoda za štampanje na standardni izlaz i kao argument prosleđen joj je sabirak dva objekta tipa String. a jedan korišćenjem reference na vrednost! String objekti imaju metodu leinght(). već objekti sa pomoćnim metodama za obradu. System. najbitnija klasa u celom programskom jeziku Java. koja vraća broj znakova u nizu karaktera. Zatim joj je. U Javi. string. karakteri su 16-bitni Unicode znakovi i označavaju se kao char."2009.'7'). Može se napraviti novi String objekat i da se inicijalizuje u jednoj naredbi. oni su read-only (samo za čitanje) ili nepromenljivi.out. Da bi ovi znakovi formirali reč ili rečenicu (literal). potrebno je da se nalaze u jednom konkretnom objektu. gde će se ova oblast veoma detaljno obrađivati. Kada se pravi String objekat. Po načinu pristupa String objektima. 11/16 .Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu . Rezultat izvršavanja ovog dela koda biće ispis sledeće rečenice na standardnom izlazu: Moje ime je Miloš Đekić Objašnjenje koda: Deklarisana je promenljiva tipa String.Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www.").fonis. O klasi String i radu sa objektima te klase biće reči u nekim od narednih delova kursa. Evo primera pozivanja jedne sistemske metode. u istom redu koda. sam po sebi. U ovom slučaju.out. koju smo nazvali ime. kao što je pokazano u sledećem primeru: String ime = "Miloš Đekić". korišćenjem operatora dodela (=) dodeljena vrednost "Miloš Đekić". a na nivou jezika Java pruža podršku za njihovo inicijalizovanje. Znakovi su indeksirani od nula do n-1 (n je dužina niza) i može im se pristupiti pomoću metode charAt(index).println("Moje ime je: " + ime).

klasi “Pixel” dodali smo metodu draw().Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu . nova proširena klasa nasleđuje sva polja i metode superklase! Ako izričito ne prevazilazi ponašanje superklase. koja bi bila zadužena da. moramo joj. čime se proširuje postojeća klasa i menja njeno ponašanje. Pošto tačka sama po sebi nema boju. } } 12/16 . Izvorna klasa se zove superklasa. ali se u primerku podklase i dalje koristi kod koji je napisan za izvornu klasu.fonis. Hajde da definišemo klasu “Point”. pored koordinata. Kada se proširuje klasa da bi se napravila nova klasa. a samim tim i novo ponašanje. Nova klasa će. može mu se dati objekat klase “Pixel” i kod će funkcionisati. Ako neka metoda očekuje parametar tipa “Point”. koja će naslediti.rs Proširivanje klase Kao što je već pomenuto. koristeći određene tehnike u Javi. Ukoliko želimo da definišemo neku tačku koju želimo da nacrtamo na ekranu. karakteristično za objekte samo te klase. podklasa takođe nasleđuje celokupno ponašanje svoje superklase. dodajući metodu za crtanje na ekranu. obezbeđujući nove implementacije jedne ili više nasleđenih metoda. nacrta pixel određene boje na ekranu. Primer ćemo naći u definisanju metode clear() u klasi “Point” i njenom redefinisanju u klasi “Pixel”: class Point { int x. potrebno je definisati novu klasu “Pixel”. Proširena klasa definiše metodu istog potpisa i tipa rezultata kao što je metoda u superklasi. podklasa može da doda nova polja i metode. Proširena klasa često zaobilazi ponašanje svojih superklasa. predstavljenu pomoću dve celobrojne koordinate x i y. pored nasleđenih polja koja označavaju koordinate. koja predstavlja neku tačku u dvodimenzionalnom prostoru. jedna od glavnih koristi objektno orijentisanog programiranja je mogućnost stvaranja podklasa. Pixel proširuje podatke tačke. a proširuje i ponašanje tačke.Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. ako mu je pri ruci neki objekat klase “Pixel” (setimo se priče o polimorfizmu). Objekte klase “Pixel” može da koristi svaki kod koji je napravljen da radi sa objektima klase “Point”. void clear() { x = 0. Osim toga. dodajući podatak o boji. imati i polje koje označava boju: class Pixel extends Point { Color boja. proširiti klasu “Point”. Celokupan kod klase “Point” može da koristi svako. y = 0. void draw() { // algoritam crtanja pixel-a } } Čisto primera radi.y. dodeliti i određenu boju. tj.

clear()? Metoda clear()klase Pixel bi postavila boja na svoju vrednost null. ali očigledno ne može da prepozna ništa što je u vezi sa novim poljem boja deklarisanim u podklasi “Pixel”. Neočišćene vrednosti objekta klase “Pixel”. koju je klasa “Pixel”nasledila od klase “Point”. a this iz postojećeg objekta. kao što bi to uradilo i za objekat superklase. korišćenjem reference super prvo poziva metodu clear() svoje superklase. prepoznaje samo polja klase “Point”. koja se ne odnosi ni na jedan objekat (prazna referenca).clear().rs Sada. runtime system Jave prati hijerarhiju nasleđivanja sve do prve klase koja sadrži neophodnu metodu.fonis. Šta bi se u prethodnom primeru dogodilo da nije pozvan super. da klasa “Point” nije imala metodu clear(). u klasi “Pixel”: class Pixel extends Point { Color boja. obezbeđujemo novu implementaciju te metode koja.clear(). da bi se postiglo pravo ponašanje koje zahteva klasa “Pixel”. uključujući i deo nasleđen od klase “Point”.nekaMetoda(). Pozivanje metode super. point. runtime system bi pregledao superklasu klase “Point” tražeći takvu metodu i nju bi pozvao na izvršenje. verovatno bi bile greška u programu. Zato se opredeljujemo na null. boja = null. Na primer. Referenca super je veoma slična referenci this. void draw() { // algoritam crtanja pixel-a } void clear() { super. } } U navedenom primeru.clear() traži superklasu da bi izvršilo metodu clear(). //Koristi metodu clear() klase “Pixel” 13/16 .clear() da očisti “Point” deo objekta (postavi koordinate na koordinatni pocetak). Kada se pozove super. Da bi se klasa “Pixel” ispravno ponašala u pogledu metode clear(). Za sve druge reference. a ne tip reference objekta. zaobilazi se ponašanje metode clear().Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. Posle pozivanja super. ali promenljive x i y koje je klasa “Pixel” nasledila od klase “Point” ne bi bile postavljene ni na jednu očišćenu vrednost. pozivanje metode koristi samu klasu objekta. dodajemo novu funkcionalnost da bismo postavili boju na razumno praznu vrednost. osim što ona referencira polja ili metode iz superklase. Zato se ona redefiniše unutar klase “Pixel”. Primer referenciranja: Point point = new Pixel(). Metoda clear().Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu .

iako je promenljiva koja čuva pixel deklarisana kao referenca “Point”.Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu .clear() unutar jedne od metoda klase “Pixel”. Zašto? Referencu ime deklarišemo i inicijalizujemo. implicitno proširuju klasu Object. pozivanje bi koristilo implementaciju metode clear() iz klase “Point”. generička klasa u Javi. termin je cast). ako pozovemo super.rs U ovom primeru se poziva verzija metode clear() klase “Pixel”. Promena tipa se izvršava 14/16 .fonis. međutim. tj. svaki objekat u Javi JE Object! On ima svoje predefinisane metode i polja. objekat bilo koje klase. tj. Kada je argument koji prima neka metoda deklarisan kao tipa Object. to znači da joj se kao argument može proslediti bilo šta. Napisan kod deluje prilično logično. Saopštavanje kompajleru da je tip izraza u stvari drugačijeg tipa se naziva promena tipa ili konverzija tipa (na engleskom. ime = objekat. potrebno mu je saopštiti da je objekat koji referencira referenca objekat ustvari String i da može biti dodeljen referenci ime: ime = (String)objekat. zato što je svaki objekat klase “Pixel” takođe i objekat klase “Object”. a Object ne mora uvek biti String. u compile rutini se on ne tretira tako. a zatim je dodeljujemo referenci objekat tipa Object. Kao takva. Object objekat = ime. Svaka klasa koju napravi programer nasleđuje klasu Object. Iako je u ovom slučaju jasno da je Object zaista String. Promena tipa Pogledajmo sledeći kod: String ime = "Miloš". Zašto ovo ne funkcioniše? Zato što je String uvek Object. Dat primer koda je dozvoljen. Object point = new Pixel(). predstavlja šablon svih klasa koje programer pravi tokom programiranja. Zatim pokušavamo da ovu referencu na String ponovo dodelimo referenci ime. po potrebi. Klasa Object Klasa Object je tzv. mogu redefinisati. Ali. Da bi se pomoglo kompajleru. došlo bi do greške u compile rutini.Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. kada bismo pokušali da pokrenemo program koji sadrži ovaj kod. Svi objekti su polimorfno klase Object. Klase koje eksplicitno ne proširuju ni jednu drugu klasu. tako da je Object generički tip za reference koje mogu da referenciraju objekte neke klase. koje u klasama koje ga nasleđuju.

Generalna ideja je da se obezbedi da metode rade jednako dobro. koja bi trebalo da predstavlja crtanje nekog objekta na ekranu. } Interfejs “Drawable” deklariše jednu metodu – draw(). Time se ne zadobija automatsko poverenje kompajlera. Ako provera ne uspe. već on proverava da li je to istina. detalji koji se odnose na implementaciju metoda nisu bitni! Ove deklaracije definišu tip. public void draw() { // implementacija } } Interfejs može takođe da deklariše imenovane konstante koje su static i final. bile one primenjene na listu povezanih vrednosti ili na neku drugu strukturu podataka. Sve dok njihovo ponašanje zadovoljava određene kriterijume. ispred izraza. Pošto je programski jezik Java strogo tipiziran. tako da im se može pristupiti svuda gde se može pristupiti i samom interfejsu. interfejs može da deklariše druge ugnježdene interfejse. Pr: Interfejs Drawable: public interface Drawable { public void draw(). Projektant nekog interfejsa može da deklariše metode koje podržavaju klase koje implementiraju interfejs i deklariše šta metode mogu da rade. U interfejsu se ne može napisati nikakva implementacija metode.Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu . a za svaku klasu koja implementira ove metode kaže se da je tog tipa. Umesto tela metode. u pogledu dodeljivanja tipova postoje veoma stroga pravila. Svi članovi interfejsa su implicitno ili eksplicitno deklarisani kao public. ispaliće izuzetak ClassCastException za vreme izvršavanja koda. bez obzira na činjenicu kako su metode implementirane. već je klasa koja ga implementira odgovorna da obezbedi potrebnu implementaciju. ali mora da implementira sve metode koje interfejs deklariše! class Pixel extends Point implements Drawable { Color boja. ali ima samo deklaraciju svojih metoda. Naime. Pored toga. u interfejsu postoji samo tačka-zarez (.fonis. Ovo je moguće ako se definiše interfejs. što u logičnoj interpretaciji znači “može da se nacrta”. 15/16 . svaka klasa koja implementira interfejs “Drawable” postaje tipa “Drawable”. u obliku prefiksa. Interfejsi Ponekad je u toku programerskog rada potrebno samo deklarisati metode koje neki objekat mora da podrži.Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. Klasa može da implementira neograničen broj interfejsa. On je kao klasa. ali ne i obezbediti implementaciju tih metoda. pa čak i klase.).rs postavljanjem novog tipa u zagrade.

dodavanjem novih konstanti i novih metoda koje mora da implementira svaka klasa koja implementira prošireni interfejs.Kurs objektno orijentisanog programiranja u programskom jeziku JAVA – www. Zadatak napisati kao Word dokument ili PDF dokument na ne više od jedne stranice A4 formata teksta ili slike (dijagrama) i poslati na mail sa attachment-om na adresu: kursevi. moguće su sledeće naredbe u kodu: Drawable d = new Pixel().fonis. metode.com sa subject-om JAVA-ZADATAK-1. izvršiti kod koji se nalazi u implementaciji metode d. Atribute opisati nazivom i tipom podatka. U tekstu mail-a navesti ime. Jedan interfejs može da proširi jedan ili više drugih interfejsa. u ovom slučaju možemo biti sigurni da će se.Udruženje studenata informatike Fakulteta Organizacionih Nauka u Beogradu . metodama navesti ulazne elemente (podatke) i njihove tipove. prezime i broj indeksa.rs Interfejsi mogu da se prošire korišćenjem ključne reči extends. navesti njene atribute. Nakon što je klasa “Pixel” implementirala interfejs “Drawable”. d. uključujući i interfejse. kako sa svojim superklasama tako i sa svojim superinterfejsima.draw(). Kao dodatak.draw() u klasi “Pixel”. uključujući i sve supertipove tih klasa i interfejsa. Supertipovi klase su klase koje ona proširuje i interfejsi koje ona implementira. Iako je referenca d tipa Drawable.fonis@gmail. Zadatak Samostalno definisati jednu klasu koja predstavlja apstraktne objekte iz realnog života. nakon pozivanja metode d. Objekti mogu da se koriste polimorfno. uključujući sve njihove supertipove. 16/16 .draw(). definisati neki interfejs u jednoj od super klasa i objasniti kako bi on bio implementiran u nekoj podklasi. podklase. Zato objekat nije samo primerak sopstvene klase već i svakog od njenih supertipova.

Sign up to vote on this title
UsefulNot useful