Objektno orijentisano programiranje Java 2 as Eclipse Postoji
Objektno orijentisano programiranje Java, 2. čas
Eclipse ● Postoji mnoštvo Java razvojnih alata: ● Borland Jbuilder Net. Beans Eclipse. . . Ovi alati podržavaju integrated development environment (IDE) za brzi razvoj Java programa. Editovanje, kompajliranje, build-ovanje, debuggovanje i online help su integrisani u jedan GUI.
Eclipse ● ● Eclipse se može pokrenuti na proizvoljnoj platformi sa Java VM. Može se download-ovati sa www. eclipse. org Pre ”instaliranja” Eclipse, mora se instalirati JDK http: //java. sun. com
Eclipse, perspektiva ● ● ● Nakon pokretanja, otvara se Workspace Launcher prozor workspace je zapravo direktorijum u koji se smeštaju fajlovi našeg projekta Perspektiva sadrži editore i poglede (views) U jednom prozoru može postojati jedna ili više perspektiva Otvaranje perspektive : Window → Open Perspective Java
Eclipse, editori ● ● ● Na površini predviđenoj za editor može biti otvoren veći broj editora, a oni se mogu razmestiti tako da se vidi sadržaj svakog od njih Sa jednog na drugi otvoreni editor može se preći npr. pomoću prečice Ctrl+F 6 ili strelicama iz toolbar-a. Window → Reset Perspective uređuje layout kao u prvobitnom stanju
Eclipse, pogledi ● ● Određeni pogled se može prikazati izborom iz Window → Show View menija Perspektivom je određeno koji pogledi se mogu videti i oni su ponuđeni u Show View podmeniju
Eclipse ● Editovanje fajlova izvan Eclipse smešta sve svoje resurse na lokalni fajlsistem. Resursi se mogu kopirati u workspace direktorijum i kada Eclipse nije pokrenut, a fajlovi se mogu menjati nekim od eksternih alata. Koristiti Refresh za ažuriranje Eclipse-a promenama načinjenim izvan njega. Refresh se može izabrati iz File ili odgovarajućeg popup menija
Eclipse, kreiranje projekta ● ● ● File → New → Project Java project , Next Ukucati ime projekta u polje Project name Create project in workspace Use project folder as root for sources and class files Finish
Kreiranje novog paketa ● ● U Package Explorer pogledu izabrati projekat U toolbar-u kliknuti na dugme New Java Package ili izabrati New → Package iz kontekst menija U polje Name ukucati ime novog paketa Finish
Kreiranje nove klase ● ● ● ● U Package Explorer pogledu izabrati novi paket Kliknuti na dugme New Java Class u toolbar-u Proveriti da se u polju Source Folder nalazi ime projekta i u polju Package ime našeg paketa U polje Name uneti ime klase public static void main(String[] args) Finish Automatski se otvara editor za dodavanje koda nove klase
Eclipse, kompajliranje i izvršavanje programa ● ● ● Naš kod se dinamički kompajlira dok kucamo Crvene vijugave linije u editoru ukazuju na eventualne greške Za pokretanje programa : sačuvamo promene odemo u Package Explorer pogled desnim klikom na klasu projekta koja implementira main() metod (. . java) pozivamo kontekst meni izaberemo Run As → Java Application izlaz je prikazan u Console pane
Java, izvršavanje programa ● ● Pokretanje klase iz Package Explorer-a kao Java aplikacije koristi default podešavanja za pokretanje odabrane klase i ne dozvoljava navođenje argumenata komandne linije. Za navođenje ovih argumenata, koristiti padajući meni Run iz toolbar-a i izabrati Run. . . Otvara se dijalog u kome se izabere tab Arguments i ukucaju argumenti u polje Program arguments (argumente razdvojiti belinama) Run
Eclipse, debugger ● ● ● Omogućuje postavljanje breakpoint-a i izvršavanje programa liniju po liniju. Mogu se pratiti i menjati vrednosti promenljivih kao i posmatrati koji metodi se pozivaju za vreme izvršavanja programa Breakpoint se može postaviti na neku liniju duplim klikom na vertikalni ruler duž leve ivice editora, ispred te linije Pojavljuje se puna plava tačka na tom mestu
Eclipse, debugger ● ● ● Debugger se zaustavlja kada dođe do breakpoint-a Pokrećemo debugger desnim klikom na klasu, a zatim izaberemo Debug As → Java Application Pojavljuje se prozor koji nas pita da li da otvori Debug perspektivu. Kliknuti na Yes. Naredna linija koju debugger treba da izvrši naznačena je zelenom bojom Kako nastaviti? resume, suspend, terminate, step into, step over, step return, run to line iz Run menija ili toolbar-a
Eclipse, debugger ● ● ● Vrednosti promenljivih prikazane su u Variables pane Da bismo promenili vrednost promenljive, desnim klikom na nju, pa izborom Change Value otvara se dijalog u kome možemo da unesemo novu vrednost promenljive Kada završimo rad sa debugger-om, možemo otvoriti Java perspektivu sa Window → Open Perspective → Java
Java, klasa Character ● ● Klasa Character je automatski dostupna našim programima Statički metodi: is. Digit() is. Letter. Or. Digit() is. White. Space() is. Lower. Case() is. Upper. Case() ● Svi kao argument uzimaju jedan char
Klasa Character ● Da bismo mogli da pišemo: char symbol='a'; if(is. Upper. Case(symbol)) is. Lower. Case(symbol) na početku treba navesti: import static java. lang. Character. *; ● Bez toga, morali bismo da pišemo i ime klase ispred imena metoda, npr. Character. is. Lower. Case(symbol);
Nizovi ● ● ● Nizovska promenljiva i niz na koji se ona odnosi su odvojeni entiteti Memorija koja se alocira za nizovsku promenljivu čuva referencu na niz, ne sam niz. Sam niz je poseban entitet koji će biti negde drugde u memoriji Nismo u obavezi da kreiramo niz kada deklarišemo nizovsku promenljivu. Možemo najpre kreirati nizovsku promenljivu i kasnije u nju smestiti referencu na određeni niz
Deklaracija nizovske promenljive ● ● ● int[] niz; int niz[]; Niz tek treba da se definiše. Na ovom mestu nije alocirana memorija za sam niz Ova promenljiva je prosto lokacija u memoriji koja može da čuva referencu/pokazivač na niz Za kreiranje samog niza mora se zadati njegov tip i koliko će elemenata sadržati int [] niz; ”kaže” da je tip nizovske promenljive int []
Definisanje niza ● ● ● Nakon što smo deklarisali nizovsku promenljivu, možemo definisati niz na koji će ona referisati: niz = new int[10]; // Definise niz od 10 integer-a Ova naredba kreira niz koji će sadržati 10 vrednosti tipa int, i smešta referencu na niz u promenljivu niz Moguće je i jednom naredbom deklarisati nizovsku promenljivu i definisati niz tipa int koji će sadržati 10 celih brojeva: int[] niz = new int[10];
Definisanje niza ● ● Ključna reč new ukazuje na to da se alocira nova memorija za niz, a int[10] određuje da kapacitet te memorije treba da bude dovoljan za 10 promenljivih tipa int Kada se niz kreira ovako, elementi niza se automatski inicijalizuju na podrazumevane vrednosti, a to su: 0 za numeričke vrednosti false za boolean 'u 0000' za char null za objekte
Dužina niza ● to je broj elemenata koje niz sadrži length – atribut ( a ne metod! ) objekta koji predstavlja niz Npr. niz. length ● ( za naš niz imaće vrednost 10 ) Ovaj atribut se može koristiti za kontrolisanje for ● ● ● petlje koja obrađuje elemente niza Ukoliko promenimo broj elemenata niza ovo polje se automatski ažurira
Pristup elementima niza ● ● ● Indeks mora biti tipa int ( ukoliko je long mora se izvršiti eksplicitno kastovanje u int ) niz[0] - prvi element niza niz Java proverava da li su vrednosti indeksa koje koristimo validne. Ako nisu, izbacuje izuzetak tipa Index. Out. Of. Bounds. Exception
Nizovska promenljiva ● Nizovska promenljiva je odvojena od niza koji referiše. Na raznim mestima u programu možemo koristiti nizovsku promenljivu za čuvanje referenci na različite nizove. Npr. int[] niz = new int[10]; . . . niz = new int[50]; ● To je sada novi niz, potpuno odvojen od prethodnog. Prethodni niz od 10 elemenata se odbacuje.
Inicijalizacija nizova int[] niz={2, 3, 5, 7, 11, 13, 17}; int[] niz=new int[100]; // automatska inicij. na 0 niz[0]=2; niz[1]=3; double[] data = new double[50]; for(int i=0; i<data. length; i++) data[i]=1. 0;
Korišćenje Utility metoda za inicijalizaciju nizova ● ● ● Metod fill() definisan u klasi Arrays iz paketa java. util može se koristiti za inicijalizaciju niza import java. util. Arrays; Arrays. fill(data, 1. 0); // popunjava sve elemente niza data jedinicom Prvi argument – ime niza koji treba popuniti Drugi argument – vrednost Ovaj metod ”radi” za sve vrednosti primitivnih tipova
fill() metod ● Pošto je fill() statički metod klase Arrays, može i ovako: import static java. util. Arrays. fill; pa onda možemo zvati metod bez navođenja klase fill(data, 1. 0);
Inicijalizacija nizovske promenljive ● Nizovska promenljiva se može inicijalizovati i referencom na postojeći niz: long[] even = {2 L, 4 L, 6 L, 8 L, 10 L}; long[] value = even; ● Onda nizovske promenljive even i value referišu na isti niz
Obrada nizova double average = 0. 0; double[] uzorci = new double[50]; for(int i=0; i<uzorci. length; i++){ uzorci[i]=100. 0*Math. random(); average += uzorci[i]; } average /= uzorci. length;
Obrada nizova – collection-based for-petlja double average = 0. 0; for( double value: uzorci ){ average += value; } average /= uzorci. length; Petlja iterira kroz vrednosti svih elemenata tipa double niza uzorci. Promenljivoj value se pridružuje jedna po jedna vrednost elemenata niza
Collection-based for petlja ● ● Ovakva for-petlja služi za obradu celog niza Za obradu dela niza i dalje se mora koristiti standardna for-petlja Collection-based for petlja ne obezbeđuje pristup elementima u svrhu postavljanja njihovih vrednosti Za promene vrednosti elemenata niza koristi se standardna for-petlja
Nizovi nizova ● ● float[][] temperatura = new float[10][365]; Ovo je dvodimenzioni niz: – ● postoji 10 jednodimenzionih nizova i svaki od njih ima 365 elemenata Primer obrade: for(int i=0; i<temperatura. length; i++) for(int j=0; j<temperatura[i]. length; j++) temperatura[i][j]=(float)(45. 0*Math. random()-10. 0);
Nizovi nizova različitih dužina Nizovi u nizu ne moraju biti iste dužine: ● float[][] uzorci; // deklarise nizova uzorci = new float[6][]; // definise 6 elemenata, svaki je niz // promenljiva uzorci sada referencira niz sa 6 // elemenata, od kojih svaki moze primiti // referencu na jednodimenzioni niz uzorci[2] = new float[3]; uzorci[5] = new float[101]; // uzorci. length ima vrednost 6 // uzorci[5]. length ima vrednost 101 ●
String-ovi ● ● U Javi, stringovi su objekti klase String, koja se nalazi u paketu java. lang String literal je niz karaktera pod dvostrukim navodnicima ”Ovo je String literal” - konstantan objekat klase String-ovi se interno čuvaju kao Unicode karakteri
Kreiranje String objekata ● ● ● String promenljiva je promenljiva koja čuva referencu na objekat klase String promenljiva se deklariše na isti način kao i promenljive primitivnih tipova. Takođe, može se inicijalizovati pri deklarisanju, što je generalno dobra ideja. String moj. String = ”Moj string”; moj. String = ”Drugi string”; Sam String objekat je različit od promenljive koju koristimo da na njega referišemo
String ● ● String objekti su nepromenljivi. To znači da se ne može menjati string koga taj objekat predstavlja. String string; // deklaracija, bez inicijalizacije Ukoliko program pokuša da koristi promenljivu koja nije inicijalizovana, dobićemo grešku pri kompajliranju String string = null; // String promenljiva koja // ne referise na string
Nizovi String-ova String[] imena=new String[5]; String[] boje={”crvena”, ”zuta”, ”plava”};
Operacije nad String-ovima ● ● Konkatenacija ( operator + ) kao rezultat se generiše potpuno nov String objekat, različit od String objekata koji su operandi Operator + se takođe koristi i za sabiranje, ali ako je bar jedan od operanada String objekat ili String literal, kompajler će interpretirati operaciju kao konkatenaciju stringova i konvertovaće objekat koji nije String objekat u String
Stringovi – operacije ● ● Ako npr. String promenljiva koja se koristi kao 1 od operanada za + sadrži null , ona se automatski konvertuje u string ”null” Može se koristiti i operator += // kombinovanje stringa i integer-a moj. String = ”pedeset pet je ” + 5 ; System. out. println(moj. String); // pedeset pet je 55
String-ovi // kombinovanje integer-a i stringa moj. String = 5 + ” je deset”; System. out. println(moj. String); // 10 je deset ZAŠTO? Asocijativnost + je sleva nadesno i to je razlog što je 5+5 55 u prvom primeru, a 10 u drugom
to. String() ● ● Konverzija primitivnih tipova u tip String zapravo se vrši korišćenjem statičkog metoda to. String() standardne klase koja odgovara tom primitivnom tipu Svaki od primitivnih tipova ima definisanu ekvivalentnu, tzv. wrapper, klasu: byte – Byte, short – Short, int – Integer, long – Long, float – Float, double – Double, boolean – Boolean, char – Character
to. String() ● Kadgod se vrednost nekog od primitivnih tipova pojavi kao operand za +, a drugi operand je String objekat, kompajler prosleđuje vrednost primitivnog tipa metodu to. String() definisanom u odgovarajućoj wrapper klasi. Metod to. String() vraća String ekvivalentan vrednosti. Sve se to dešava automatski pri konkatenaciji stringova operatorom +.
value. Of() ● ● ● Metod klase String Kreira String objekat od vrednosti proizvoljnog primitivnog tipa String double. String = String. value. Of(3. 14159); value. Of() je statički metod klase String Zato se poziva sa String. value. Of() Kao argument može primiti literal ili promenljivu proizvoljnog primitivnog tipa
Poređenje stringova ● ● ● String promenljiva i string koji ona referiše se razlikuju Izraz string 1 == string 2 ne poredi same stringove, već reference na stringove Za takvo poređenje, može se koristiti metod equals(), koji je definisan za objekte tipa String Npr. string 1. equals(string 2) equals() vrši case-sensitive poređenje Postoji i equals. Ignore. Case() metod
Stringovi, operacije ● Metodima starts. With() / ends. With() koji kao argument primaju String, možemo izvršiti casesensitive proveru da li string počinje / završava se stringom koji je dat kao argument metoda. String string 1 = ”Ovo je string”; string 1. starts. With(”Ovo”) // true string 1. ends. With(”string”) // true
compare. To(String) ● ● ● Analogon strcmp() iz C-a Poredi objekat String za koji je pozvan, sa String argumentom koji mu prosleđujemo i vraća int koji je negativan, ako je String objekat manji od argumenta, 0 ako su jednaki, a pozitivan inače. Zapravo, vrši se poređenje Unicode reprezentacija odgovarajućih karaktera stringova
String-ovi, operacije ● ● char. At() - prima int argument, indeks traženog karaktera. Ukoliko pokušamo da koristimo indeks manji od 0 ili veći od indeksa poslednjeg karaktera stringa, biće izbačen izuzetak tipa String. Index. Out. Of. Bounds. Exception Za određivanje dužine stringa poziva se metod length() nad String objektom. Primetimo da se kod nizova pristupa atributu length.
Konvertovanje ● ● to. Lower. Case(), to. Upper. Case() konvertuju String u mala, odnosno velika slova i vraćaju referencu na konvertovani String text = text. to. Lower. Case();
Pretraga Stringova ● ● index. Of(), last. Index. Of() metodi Postoji nekoliko verzija ovih metoda koje omogućuju traženje pojedinačnog karaktera ili podstringa koji se zadaje kao (prvi) argument index. Of() traži od početka stringa, unapred, dok last. Index. Of() traži unatrag, počev od kraja stringa Vraćaju odgovarajući indeks, ako je traženje uspelo, a -1 inače
Pretraga Stringa ● ● ● Postoji varijacija prethodna 2 metoda koja ima i drugi argument. Njime se određuje pozicija od koje treba početi pretraživanje Ako se kao drugi argument prosledi negativna vrednost, metod index. Of() pretražuje ceo string, od početka Važno je proveriti da li je vraćena vrednost indeksa -1 pre njegovog korišćenja za indeksiranje Stringa!
Pretraga Stringa – rezime ● ● ● index. Of(int ch) index. Of(int ch, int index) index. Of(String str, int index) I analogno za metod last. Index. Of() Metod starts. With() takođe ima verziju sa drugim argumentom, koji predstavlja poziciju od koje počinje potraga za datom sekvencom karaktera
Izdvajanje podstringova ● ● Metod substring() izdvaja podstring iz stringa Postoje 2 verzije ovog metoda – Prva izdvaja podstring koji se sastoji od svih karaktera počev od datog indeksa, pa do kraja stringa String place = ”Palm Springs”; last. Word = place. sub. String(5); // ”Springs” – Druga omogućuje da izdvojimo podstring zadavanjem indeksa prvog karaktera podstringa i prvog karaktera iza poslednjeg karaktera podstringa String segment = place. substring(7, 11); // ”ring” ● Ako indeks nije validan izbacuje se izuzetak
Metodi replace() i trim() ● ● Metod replace() koristi se za zamenu određenog karaktera drugim kroz string. Prima dva argumenta: – – ● Prvi je karakter koji se menja Drugi je karakter kojim se menja Metod trim() služi za uklanjanje belina sa početka i kraja stringa
Kreiranje nizova karaktera od String objekata ● ● ● Metod to. Char. Array() Kreira niz tipa char i vraća referencu na njega String text = ”To be or not to be” ; char[] text. Array = text. to. Char. Array(); Moguće je izdvojiti i podstring kao niz karaktera metodom get. Chars(). Potrebno je kreirati dovoljno veliki niz u koji će se upisati rezultat i on se prosleđuje kao jedan od argumenata metoda. Metod zahteva 4 argumenta
Kreiranje String objekata od nizova karaktera Statički metod copy. Value. Of() klase String ● Kreira String objekat od niza tipa char[] Char[] text. Array = { 'T', 'o', 'b', 'e' }; String text = String. copy. Value. Of(text. Array); String text = new String(text. Array); // poziv konstruktora ● U Javi stringovi se ne završavaju sa '