42
Objektno orijentisano programiranje vežbe – čas 03 Biljana Stojanović Staša Vujičić

Objektno orijentisano programiranje vežbe – čas 03

  • Upload
    gustav

  • View
    123

  • Download
    3

Embed Size (px)

DESCRIPTION

Objektno orijentisano programiranje vežbe – čas 03. Biljana Stojanović Staša Vujičić. Eclipse tutorial. - PowerPoint PPT Presentation

Citation preview

Page 1: Objektno orijentisano programiranje vežbe – čas 03

Objektno orijentisano programiranjevežbe – čas 03

Biljana Stojanović

Staša Vujičić

Page 2: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial

Java programi se mogu pokrenuti kako iz komandne linije, tako i pomoću velikog broja Java razvojnih alata, kao što su Borland JBuilder, Net Beans, Sun ONE Studio (komercijalna verzija NetBeans-a), Eclipse, Web Gain Visual Cafe i drugi.

Oni podržavaju tzv. IDE (Integrated Development Environment) za brz razvoj Java programa.

Editovanje, kompajliranje, debagovanje, online-pomoć su integrisani u grafičko korisničko okruženje. Upotrebom ovih alata u velikoj meri se povećava produktivnost programa.

Page 3: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial

Eclipse može da se pokreće na bilo kojoj platformi koja ima podršku za JVM.

Pre instalacije Eclipse neophodno je instalirati odgoravajuću verziju JDK-a.

Eclipse se pokreće dvoklikom na ikonu eclipse.exe u odgovarajućem folderu ili dvoklikom na odgovarajuću prečicu na radnoj površini.

Najpre se pojavljuje prozor Workspace Launcher koji nudi izbor direktorijuma u kome će se raditi.

Potom se otvara glavni prozor (Eclipse UI) sa inicijalno otvorenim pozdravnim prozorom.

Page 4: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial - izbor perspektive

Perspektiva predstavlja inicijalni skup i raspored komponenti u prozoru. Perspektive kontrolišu šta se pojavljuje u određenim menijima i toolbar-ovima. Npr. Java perspektiva se koristi za editovanje Java izvornog koda, dok Debug perspektiva omogućava pregled debagovanja programa. Moguće je prelaziti iz jedne u drugu perspektivu.

Za kreiranje Java programa opcijom Window, Open Perspective, Java iz glavnog menija otvara se Java perspektiva.

Page 5: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial- kreiranje projekta

Projekat se kreira izborom opcije File, New, Project čime se prikazuje Project wizard.

Treba selektovati Java project i kliknuti Next čime se otvara New Java Project wizard.

U polje Project name unosi se ime projekta. Treba čekirati opcije Create project in workspace

i Use project folder as root for project and sources and class files.

Klikom na Finish projekat biva kreiran.

Page 6: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial- kreiranje programa

Kreiranje programa u postojećem projektu vrši se opcijom File, New, Class, čime se otvara New Java Class wizard.

U polje Name unosi se ime klase (počinje velikim slovom) bez ekstenzije .java.

U delu Modifiers moguće je čekirati neku od opcija – svaka predstavlja neku vrstu modifikatora klasa.

U polje Package može se uneti ime paketa kome klasa pripada.

U polje Superclass se navodi ime klase koja se nasleđuje.

Page 7: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial- kreiranje programa

U polje Interfaces se navode imena interfejsa koje klasa implementira.

Poslednji deo se odnosi na izbor metoda koje su sastavni deo klase:

- public static void main(String[] args) - konstruktori natklase - nasledjeni apstraktni metodi

Page 8: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial

Napomena: Prilikom kucanja izvornog Java koda, kada se, npr. ispiše (.), nakon sekunde pauze Eclipse automatski prikazuje pomoćni meni sa mogućnostima za kompletiranje koda.

Page 9: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial- kompilacija i pokretanje programa

Podrazumevano, izvorni Java kod se dinamički kompajlira za vreme kucanja. Npr. ako se ne otkuca ; za kraj naredbe, editor prikazuje crvenu krivudavu liniju koja ukazuje na grešku.

Pokretanje – desnim klikom mišem na klasu u projektu dobija se meni gde treba izabrati Run, Java Application ili izabrati opciju Run, Run As, Java Application iz glavnog menija ili kliknuti na odgovarajuću ikonu u toolbar-u koja se koristi za pokretanje.

Izlaz je prikazan u panelu Console u dnu prozora.

Page 10: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial- debagovanje

Eclipse debugger omogućuje postavljanje breakpoint-a i izvršavanje programa liniju po liniju.

Kako se program izvršava, mogu se posmatrati vrednosti promenljivih, uočiti koji je metod bio i znati koji događaji su se pojavili u programu.

Obično se breakpoint-i postavljaju u onim delovima za koje postoji mogućnost da sadrže grešku. Nema svrhe da se traga za greškom liniju po liniju kroz delove programa za koje se pouzdano zna da dobro rade.

Page 11: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial- debagovanje

Breakpoint je zaustavna zastavica (znak) postavljena na liniju izvornog koda koja govori debageru da se zaustavi kada na nju naiđe.

Debager izvršava svaku liniju dok ne dođe do breakpoint-a, tako da je moguće tragati kroz deo programa gde je breakpoint postavljen.

Upotrebom breakpoint-a moguće je brzo prelaziti preko delova koji korektno rade i koncentrisati se na delove koji prouzrokuju probleme.

Page 12: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial- debagovanje

Postavljanje breakpoint-a može da se izvrši na više načina: - Najjednostavnije je dvostrukim klikom na levu

marginu linije na koju želimo da postavimo breakpoint. Pojaviće se plavi kružić u levoj margini.

- Desnim klikom u područje leve margine pojavljuje se meni iz koga se bira opcija Toggle Breakpoint.

- U meniju Run izabrati opciju Toggle Breakpoint. Uklanjanje breakpoint-a vrši se dvoklikom na levu

marginu, ili izborom opcije Disable Breakpoint iz odgovarajućeg menija.

Kada se napusti projekat zadržavaju se postavljeni breakpoint-i.

Page 13: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial- debagovanje

Startovanje debagera:– Postaviti breakpoint na prvu naredbu metoda

main().– Desnim klikom na odgovarajuću klasu u panelu

sa spiskom projekata dobija se odgovarajući meni gde se bira opcija Debug, Java Application. Pojaviće se Confirm Perspective Switch dijalog za potvrdu prelaska u Debug perspektivu.

Page 14: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial- debagovanje

Kontrola izvršavanja programa: Program se zaustavlja na prvoj liniji main()

metoda. Ova linija, koja se zove tekuća tačka izvršavanja (current execution point), obojena je zeleno i označava sledeću liniju koda koja će biti izvršena od strane debagera.

Zadavanjem odgovarajućih komandi debagera kontroliše se dalje izvršavanje programa. Ujedno se kontrolišu vrednosti promenljivih u programu.

Page 15: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial- debagovanje

Kada je aktivan Debugging mode, u Debug prozoru vidljiva su dugmad koja se koriste za debagovanje.

Takodje, meni Run sadrži komande za debagovanje:Resume – nastavlja izvršavanje pauziranog programaSuspend – privremeno zaustavlja izvršavanje programaTerminate – završava tekuću sesiju debagovanja.Step Into – izvršava jednu naredbu ili ulazi u metodStep Over – izvršava jednu naredbu. Ako naredba sadrži poziv metoda, ceo metod se izvršava bez detaljnog prelaska kroz njega.

Page 16: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial- debagovanje

Step Return – izvršava sve naredbe tekućeg metoda i vraća se u onaj deo gde je pozvan metod.

Run to Line – izvršava program, počevši od tekuće tačke izvršavanja, zaustavlja se i postavlja izvršnu tačku na liniju koda koja sadrži kursor ili na breakpoint.

Page 17: Objektno orijentisano programiranje vežbe – čas 03

Eclipse tutorial- debagovanje

Pored toga što je prilikom debagovanja moguće videti vrednosti promenljivih, moguće je i promeniti vrednosti promenljivih kako bi se nastavilo debagovanje sa novom vrednošću bez restartovanja programa.

Vrednosti promenljivih se ispisuju u posebnom panelu Variables. Dvostrukim klikokom na odgovarajuću promenljivu otvara se Set Value dijaloški prozor gde je moguće zadati novu vrednost promenljive.

Nakon završetka debagovanja, opcijom Window, Open Perspective, Java, može se preći u Java perspektivu.

Page 18: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Kao što je ranije rečeno, klasa je specifikacija svojstava odredjene vrste objekata – ona definiše novi tip.

Definicija klase se koristi da se kreiraju objekti tog klasnog tipa, tj. da se kreiraju objekti koji sadrže sve komponente koje su specifikovane u klasi.

Npr. klasa String predstavlja definiciju ili specifikaciju za String objekte sa svim operacijama koje se mogu izvršavati nad objektima te klase. Kad god se kreira novi objekat klase String, zapravo se kreira novi objekat sa svim karakteristikama i operacijama koje su specificirane u definiciji klase.

Page 19: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi Definicija klase u sebi sadrži: atribute – ovo su promenljive koje obično

razlikuju jedan objekat klase od drugog metode – oni definišu operacije koje

možemo da radimo za datu klasu – određuju šta možemo da radimo nad ili sa objektima klase; obično operišu nad atributima klase

Atributi klase mogu biti primitivnog tipa ili mogu da referišu na objekte proizvoljnog klasnog tipa, uključujući i onaj koji definišemo.

Page 20: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Kada kreiramo objekat, on će sadržati sve atribute koji se nalaze u definiciji klase.

Razlikujemo dve vrste atributa: Prvi su vezani za klasu i dele ih svi objekti klase.

Postoji samo jedna kopija bez obzira koliko je objekata te klase kreirano i oni postoje čak i kad nijedan objekat klase nije kreiran. Njih nazivamo klasnim promenljivim ili statičkim atributima. Deklarišu se ključnom rečju static.

Oni obično opisuju neko svojstvo koje je zajedničko za sve objekte te klase.

Page 21: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Drugi su vezani sa svaki pojedinačni objekat – svaka instanca klase ima svoju kopiju ovog atributa, svaki ima svoju posebnu vrednost. Ovi atributi razlikuju objekte međusobno. Njih nazivamo nestatičkim atributima ili instancnim promenljivim.

Page 22: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Page 23: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Analogno atributima, postoje dve vrste metoda: Instancne metode – mogu se izvršavati samo u

odnosu na objekat Klasne metode – mogu da se izvršavaju i kada

ne postoji nijedan objekat klase. Deklarišu se ključnom rečju static i nazivamo ih statičkim metodama.

Page 24: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Napomena: Još jedna primena statičkih atributa je za čuvanje vrednosti koje su zajedničke svim objektima te klase.

Npr: ako želimo da brojimo koliko je objekata neke klase kreirano u programu, najbolje rešenje je da se za to iskoristi statička promenljiva, zato što ona može da se koristi i kada nijedan objekat klase nije kreiran.

Page 25: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Pošto statički metodi mogu da se izvršavaju i kada ne postoje objekti, oni ne mogu da referišu na instancne promenljive, jer u suprotnom može da dodje do toga da se operiše nad promenljivim koje ne postoje. U tom slučaju, kod se neće prevesti, dobiće se poruka o grešci.

Metod main() je, kao što smo videli ranije, uvek deklarisan kao statički. Pre nego što neka aplikacija počne da se izvršava, ne postoji ni jedan objekat. Da bismo startovali izvršavanje, neophodan nam je metod koji može da se izvrši čak i kada nema objekata, dakle, statički metod.

Page 26: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Napomena! Iako se instancni metodi vezuju za objekat, u memoriji postoji samo jedna kopija svakog instancnog metoda koju dele svi objekti odgovarajuće klase, jer bilo bi jako skupo da se za svaki novi objekat kreira i nova kopija instancnog metoda. Poseban mehanizam omogućava da svaki put kada se pozove metod, njegov kod se izvršava na način specifičan za konkretan objekat.

Page 27: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Pored main() metoda, verovatno najčešća situacija kada koristimo statičke metode je kada se klasa koristi kao kontejner za gomilu korisnih metoda (npr. matematičke funkcije implementirane kao klasne metode u standardnoj klasi Math – ove metode nemaju nikakve veze sa objektima, već samo operišu nad primitivnim tipovima, a sadrže i neke klasne promenljive koje su zapravo korisne matematičke konstante – pi, e, itd. )

Obično promenljivim i metodama koje su definisane u klasi pristupamo izvan nje.

Statičkom članu klase pristupamo koristeći ime klase . ime članice

Double koren = Math.sqrt(Math.PI);

Page 28: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Naravno, može se pristupiti i preko promenljive koja referiše na konkretan objekat klase.

Takođe, mogu se import naredbom uključiti imena statičkih članova klase (atributa i metoda) i može se kasnije referisati na njih bez kvalifikovanja njihovih imena.

Instancnim promenljivim i metodima se pristupa navođenjem promenljive koja referiše na objekat, potom tačka, pa ime članice.

Double povrsinaKupe = kupa.povrsina();

Page 29: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Za definisanje klase koristimo ključnu reč class koju prati ime klase i u okviru vitičastih zagrada detalji definicije.

Po konvenciji, imena klasa u Javi počinju velikim slovima.

Kada hoćemo da fiksiramo inicijalnu vrednost specificiranu za promenljivu, tj. da je napravimo konstantom, treba da deklarišemo promenljivu ključnom rečju final. Ako ne stoji final, inicijalna vrednost može biti promenjena.

Page 30: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Metodima se u Javi svi argumenati prenose po vrednosti.

Dakle, za svaki argument koji se prenosi, pravi se njegova kopija i kopija se prenosi metodu preko imena parametra, a ne originalna vrednost.

Ako su argumenti metoda primitivnog tipa, metod ne može promeniti njihovu vrednost u programu.

Page 31: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Page 32: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Međutim, kada je argument metoda promenljiva klasnog tipa, ono što se prosleđuje metodu jeste kopija reference na objekat, a ne kopija samog objekta.

Pošto kopija reference takođe ukazuje na isti objekat, ime parametra koji se koristi u telu metoda će referisati na originalni objekat koji je prosleđen kao argument. Stoga, moguće je da objekat čija se referenca prenosi kao argment metodu, bude promenjen od strane metoda .

Page 33: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Svaki od parametara metoda može se specificirati kao final, što ima efekat sprečavanja promene vrednosti argumenta koji se prenosi kao parametar pri pozivu metoda.

Pošto mehanizam prenosa po vrednosti pravi kopije vrednosti primitivnog tipa, ima smisla koristiti final samo kada se primenjuje na parametre koji su reference na klasne objekte.

Final sprečava slučajnu promenu reference na objekat koja se prosleđuje metodu, ali ne sprečava promenu samog objekta!

Page 34: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Svaki instancni metod ima promenljivu this koja referiše na trenutni objekat za koji je pozvan metod. Kompajler koristi this implicitno kada metod referiše na neku instancnu promenljivu. Npr. ako neki metod koristi promenljivu pom, kompajler umeće this objektnu referencu, tako da se promenljivoj zapravo pristupa pomoću this.pom.

Generalno, svaka referenca na instancnu promenljivu zapravo sadrži prefiks this.Double ballVolume = ball.volume();/* ball je objekat klase Sphere; promenljiva this u metodu

volume() referiše na objekat ball, tako da će upravo instancna promenljiva radius iz objekta ball biti iskorišćena u izračunavanju. */

Page 35: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Činjenica da postoji samo jedna kopija svakog instancnog metoda u memoriji, čak i kad postoji veći broj objekata klase, omogućena je zahvaljujući promenljivoj this, jer upravo ona omogućuje da metod radi korektno za svaku klasu.

Svaki put kad se pozove instancni metod, promenljiva this se postavlja da referiše na konkretan objekat klase nad kojim je sam metod pozvan. Kod unutar metoda će se onda odnositi upravo na članove objekta na koji referiše this.

Page 36: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Za lokalnu promenljivu ili parametar metoda može se koristiti isto ime kao i ime neke instancne promenljive. Promenljiva sama po sebi referiše na promenljivu koja je lokalna za metod, pa onda mora da se koristi this da bi se referisalo na instancnu promenljivu.

void promeniRadijus(double radius) { this.radius = radius; }

Page 37: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Na isti način kao i statičke, mogu se inicijalizovati i nestatičke članice. Ako inicijalizacija podrazumeva više izraza, često se inicijalizacija radi blokom inicijalizacije. Postoje dve vrste blokova za inicijalizaciju:

Statički blok za inicijalizaciju – blok definisan ključnom rečju static i izvršava se samo jednom kada se klasa učitava. On može da inicijalizuje samo statičke članice klase.

Nestatički blok za inicijalizaciju – izvršava se za svaki objekat koji se kreira i stoga može da inicijalizuje instancne promenljive u klasi.

Page 38: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Page 39: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Kada se kreira objekat klase, posebna vrsta metoda, tzv. konstruktor se uvek poziva. Ako se za klasu ne definiše konstruktor, kompajler obezbeđuje podrazumevani (default) konstruktor koji ne radi ništa i nema nijedan argument.

Primarna svrha konstruktora je da izvrši inicijalizaciju instancnih promenljivih koje su jedinstvene za objekat koji se kreira.

Konstruktor nikada ne vraća vrednost i ne piše se ništa, čak ni void.

Ima isto ime kao i klasa. Može imati proizvoljan broj argumenata, uključujući i null.

Page 40: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Uvek kada kreiramo novi objekat neke klase, poziva se konstruktor te klase. Ako je definisan neki konstruktor u klasi, kompajler neće obezbediti podrazumevani konstruktor i on se po potrebi mora eksplicitno definisati.

Sphere lopta; /* ovde se ne poziva konstruktor jer nikakav objekat još uvek nije kreiran, već je samo kreirana promenljiva koja može da čuva referencu na objekat tipa Sphere */

lopta = new Sphere(1, 2, 1.0, 1.0); /* kreira se objekat klase pozivom konstruktora */

Page 41: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Page 42: Objektno orijentisano programiranje vežbe – čas 03

Klase u Javi

Trajanje objekta je određeno promenljivom koja sadrži referencu na njega, ako postoji samo jedna. Ako više promenljivih referiše na jedan isti objekat, objekat “živi” sve dok negde postoji promenljiva koja referiše na objekat.

Proces oslobađanja od “mrtvih” objekata radi Garbage Collector” i ovaj proces je automatizovan. Objekti ne nestaju odmah nako što postanu nedostupni, već može proći neko vreme, ali to ne utiče na naš program.