430 likes | 643 Views
Objektno orijentisano programiranje vežbe – čas 03. Biljana Stojanović Staša Vujičić. Eclipse tutorial.
E N D
Objektno orijentisano programiranjevežbe – čas 03 Biljana Stojanović Staša Vujičić
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.
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 folderuili 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.
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.
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.
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.
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
Eclipse tutorial • Napomena: Prilikom kucanja izvornog Java koda, kada se, npr. ispiše (.), nakon sekunde pauze Eclipse automatskiprikazuje pomoćni meni samogućnostima za kompletiranje koda.
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.
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 delovimaza 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.
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.
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.
Eclipse tutorial- debagovanje • Startovanje debagera: • Postaviti breakpoint na prvu naredbu metoda main(). • Desnim klikom na odgovarajuću klasu u panelusa spiskom projekata dobija se odgovarajući menigde se bira opcija Debug, Java Application. Pojaviće se Confirm Perspective Switch dijalog za potvrdu prelaska u Debug perspektivu.
Eclipse tutorial- debagovanje • Kontrola izvršavanja programa: • Program se zaustavlja na prvoj liniji main()metoda. Ova linija, koja se zove tekuća tačkaizvršavanja (current execution point), obojena je zeleno i označava sledeću liniju koda koja će bitiizvršena od strane debagera. • Zadavanjem odgovarajućih komandi debagerakontroliše se dalje izvršavanje programa. Ujedno se kontrolišu vrednosti promenljivih u programu.
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 programa Suspend – privremeno zaustavlja izvršavanje programa Terminate – završava tekuću sesiju debagovanja. Step Into – izvršava jednu naredbu ili ulazi u metod Step Over – izvršava jednu naredbu. Ako naredba sadrži poziv metoda, ceo metod se izvršava bez detaljnog prelaska kroz njega.
Eclipse tutorial- debagovanje • Step Return – izvršava sve naredbe tekućeg metoda i vraća se u onaj deo gdeje 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.
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 bezrestartovanja programa. • Vrednosti promenljivih se ispisuju u posebnom panelu Variables. Dvostrukim klikokom na odgovarajuću promenljivu otvara se Set Value dijaloški prozorgde je moguće zadati novu vrednost promenljive. • Nakon završetka debagovanja, opcijom Window, Open Perspective, Java, može se preći u Java perspektivu.
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.
Klase u Javi • Definicija klase u sebi sadrži: • atribute – ovo su promenljive kojeobično razlikuju jedan objekat klase od drugog • metode – oni definišu operacije koje možemoda radimo za datu klasu – određuju šta možemoda radimo nad ili sa objektima klase; obično operišu nad atributima klase • Atributi klase mogu biti primitivnog tipa ili moguda referišu na objekte proizvoljnog klasnog tipa, uključujući i onaj koji definišemo.
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.
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čkimatributima ili instancnim promenljivim.
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 nepostoji nijedan objekat klase. Deklarišu se ključnom rečjustatic i nazivamo ih statičkim metodama.
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.
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.
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.
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);
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();
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.
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.
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 .
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!
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. */
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.
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; }
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.
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.
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 */
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.