Transcript File

Glava 3
Koristenje klasa
i objekata
Koristenje klasa i objekata
• Mozemo kreirati neke interesantne programe
koristeci predefinisane klase i objekte
• Razmatramo:
 Kreiranje objekata i referenciranje objekata








Klasa String i njene metode
Standardna biblioteka Java klasa
Klase Random i Math
Formatiranje izlaza
Enumerativni tipovi
Klase omotaci
Graficke komponente i kontejneri
Labele i slike
© 2004 Pearson Addison-Wesley. All rights reserved
3-2
Pregled
Kreiranje objekata
Klasa String
Paketi
Formatiranje izlaza
Enumerativni tipovi
Klase omotaci
Komponente i kontejneri
Slike
© 2004 Pearson Addison-Wesley. All rights reserved
3-3
Kreiranje objekata
• Varijabla sadrzi ili prost tip ili reference na objekat
• Ime klase moze se koristiti kao tip da se deklarise
varijabla koja referencira objekat (object reference
variable)
String naslov;
• Ovom deklaracijom se ne kreira objekat
• Varijabla koja referencira objekat sadrzi adresu
objekta
• Sam objekat mora biti kreiran posebno
© 2004 Pearson Addison-Wesley. All rights reserved
3-4
Kreiranje objekata
• Uopste govoreci, koristi se operator new za
kreiranje objekta
naslov = new String ("Java Software Solutions");
Poziv String konstruktora, koji je poseban
metod koji postavlja objekat
• Kreiranje objekta naziva se instanciranje
• Objekat je instanca (primjerak) neke partikularne
klase
© 2004 Pearson Addison-Wesley. All rights reserved
3-5
Pozivanje metoda
• Kada je objekat kreiran, koristi se operator tacka
(dot operator) za poziv metode
brojac = naslov.length()
• Metoda moze vratiti vrijednost, koja moze biti
koristena za dodjelu ili u izrazu
• Poziv metode moze se shvatiti kao zahtjev da se
izvrsi neki servis
© 2004 Pearson Addison-Wesley. All rights reserved
3-6
Reference
• Primijetimo da prosta varijabla sadrzi neku
vrijednost, ali objekt varijabla sadrzi samo adresu
objekta
• Referenca na objekt moze se shvatiti kao pointer
na lokaciju objekta
• Umjesto da radimo sa proizvoljnim adresama, mi
cesto predstavljamo reference graficki
num1
38
ime1
© 2004 Pearson Addison-Wesley. All rights reserved
"Steve Jobs"
3-7
Ponovo o operatoru dodjele
• Dodjela uzima kopiju neke vrijednosti i postavlja je
na varijablu
• Za proste tipove:
Prije:
num1
38
num2
96
num2 = num1;
Poslije:
© 2004 Pearson Addison-Wesley. All rights reserved
num1
38
num2
38
3-8
Dodjela reference
• Za reference objekta, dodjela kopira adresu:
Prije:
ime1
"Steve Jobs"
ime2
"Steve Wozniak"
ime2 = ime1;
ime1
Poslije:
"Steve Jobs"
ime2
© 2004 Pearson Addison-Wesley. All rights reserved
3-9
Pseudonimi (aliasing)
• Dvije reference koje referenciraju isti objekat
nazivaju se pseudonimi (aliases) u odnosu jedna
na drugu
• To stvara zanimljivu situaciju: istom objektu
mozemo pristupiti koristeci vise raznih referencnih
varijabli
• Pseudonimi mogu biti korisni, ali treba biti pazljiv
u radu sa njima
• Ako se objekat mijenja preko jedne reference tada
se on mijenja i za sve njene pseudonome, jer
realno postoji samo jedan objekat
© 2004 Pearson Addison-Wesley. All rights reserved
3-10
Garbage Collection (Ciscenje)
• Kada objekat ostane bez reference, tada se tom
objektu ne moze pristupiti iz programa
• Takav objekat je beskorisan i naziva se smece
(garbage)
• Java periodicki vrsi ciscenje i vraca sistemu
memoriju za upotrebu
• Drugim rijecima, programer nije odgovoran za
ciscenje
© 2004 Pearson Addison-Wesley. All rights reserved
3-11
Pregled
Kreiranje objekata
Klasa String
Paketi
Formatiranje izlaza
Enumerativni tipovi
Klasa omotac
Komponente i kontejneri
© 2004 Pearson Addison-Wesley. All rights reserved
3-12
Klasa String
• Posto je string tako uobicajen, u Javi ne moramo
koristiti operator new za kreiranje String objekta
naslov = “Softverska rjesenja Jave";
• Ova specijalna sintaksa vazi samo za stringove
• Svaki string literal (pod znacima navodnika)
predstavlja jedan String objekat
© 2004 Pearson Addison-Wesley. All rights reserved
3-13
Metode klase string
• Nakon sto je objekat tipa String kreiran, njegova
vrijednost ili duzina ne mogu se mijenjati
• Kazemo da je objekat klase String nepromjenljiv
(immutable)
• Ipak, nekoliko metoda klase String vracaju novi
String objekat koji je modifikovana verzija
originala
• Lista metoda klase string String bice data
naknadno
© 2004 Pearson Addison-Wesley. All rights reserved
3-14
Indeksi stringa
• Ponekad je korisno referisati na partikularni
karakter u stringu
• Ovo moze biti ostvareno navodjenjem broja indeks
na kojem se nalazi dati karakter
• Indeks u svakom stringu pocinje od nule
• U stringu “Zdravo", karakter ‘Z' ima indeks 0 a
karakter 'o' ima indeks 5
• Vidi StringMutation.java (str 120)
© 2004 Pearson Addison-Wesley. All rights reserved
3-15
Pregled
Kreiranje objekata
Klasa String
Paketi
Formatiranje izlaza
Enumerativni tipovi
Klase omotaci
Komponente I kontejneri
Slike
© 2004 Pearson Addison-Wesley. All rights reserved
3-16
Biblioteke klasa
• Biblioteka klasa je kolekcija klasa koje mogu biti
koristene kod razvoja programa
•
Java standard class library je dio razvojne okoline
Jave
• Njene klase nisu po sebi dio jezika Java, ali se
veoma cesto koriste
• Razne klase koje smo vec koristili (System ,
Scanner, String) su dio standardne biblioteke
klasa Jave
• Dodatne klase mozemo dobiti od programera koji
ih razvijaju ili ih mozemo i sami kreirati
© 2004 Pearson Addison-Wesley. All rights reserved
3-17
Paketi
• Klase standardne biblioteke klasa Jave su
organizovane u pakete
• Neki od paketa u standardnoj biblioteci klasa su:
Paket
Namjena
java.lang
java.applet
java.awt
javax.swing
java.net
java.util
javax.xml.parsers
Opsta podrska
Kreiranje apleta za web
Grafika i graficki interfejs korisnika (GUI)
Dodatne graficke mogucnosti
Komunikacija u mrezama
Utiliti
XML procesiranje dokumenata
© 2004 Pearson Addison-Wesley. All rights reserved
3-18
Deklaracija import
• Kada se koristi klasa iz nekog paketa, moze se
koristiti potpuno ime
java.util.Scanner
• Ili import klasu i tada koristiti samo ime klase
import java.util.Scanner;
• Za importovanje klase nekog partikularnog paketa,
moze se koristiti * kao dzoker karakter
import java.util.*;
© 2004 Pearson Addison-Wesley. All rights reserved
3-19
Deklaracija import
• Sve klase iz java.lang paketa se importuju
automatski u sve programe
• To je kao da svaki program sadrzi slijedecu liniju:
import java.lang.*;
• To je razlog da se ne mora eksplicitno importovati
System ili String klasa u dosadasnjim
programima
• Klasa Scanner, sa druge strane, je dio java.util
paketa, pa dakle mora biti importovana
© 2004 Pearson Addison-Wesley. All rights reserved
3-20
Klasa Random
• Klasa Random je dio paketa java.util
• To daje metode za generisanje pseudoslucajnih
brojeva
•
Random objekat izvrsava komplikovana racunanja
na osnovu seed value (vrijednosti sjemena) da bi
proizveo strim od naizgled slucajnih vrijednosti
• Vidi RandomNumbers.java (strana 126)
© 2004 Pearson Addison-Wesley. All rights reserved
3-21
Klasa Math
• Klasa Math je dio paketa java.lang
• Klasa Math sadrzi metode koje izvrsavaju razne
matematicke funkcije
• To ukljucuje:
 absolutnu vrijednost
 kvadratni korijen
 stepenovanje
 trigonometrijske funkcije
© 2004 Pearson Addison-Wesley. All rights reserved
3-22
Klasa Math
• Metode klase Math su staticke metode (static
methods) (takodje nazivane class methods)
• Staticke metode mogu biti pozvane preko imena
klase – objekti klase Math nisu potrebni
value = Math.cos(90) + Math.sqrt(delta);
• Vidi Quadratic.java (str 129)
• Staticke metode obradicemo kasnije
(predavanje 6)
© 2004 Pearson Addison-Wesley. All rights reserved
3-23
Pregled
Kreiranje Objekata
Klasa String
Paketi
Formatiranje izlaza
Enumerativni tipovi
Klase omotaci
Komponente i kontejneri
Slike
© 2004 Pearson Addison-Wesley. All rights reserved
3-24
Formatiranje izlaza
• Cesto je potrebno formatirati varijable na odredjeni
nacin tako da mogu biti ispravno predstavljene
•
Standardna biblioteka klasa sadrzi klase koje
daju mogucnosti formatiranja
• Klasa NumberFormat dozvoljava formatiranje
vrijednosti kao takvih ili kao procenata od neke
velicine
• Klasa DecimalFormat formatira vrijednosti
bazirane na nekom uzorku
• Obje klase su iz paketa java.text
© 2004 Pearson Addison-Wesley. All rights reserved
3-25
Formatiranje izlaza
• Klasa NumberFormat ima staticke metode koje
vracaju formatirani objekat
getCurrencyInstance()
getPercentInstance()
• Svaki objekt koji formatira ima metodu zvanu
format koja vraca jedan string sa specificiranom
informacijom u pravom formatu
• Vid Purchase.java (strana 131)
© 2004 Pearson Addison-Wesley. All rights reserved
3-26
Formatiranje Izlaza
• Klasa DecimalFormat moze se koristiti za
formatiranje vrijednosti u pokretnom zarezu na
razlicite nacine
• Na primjer, moze se traziti da u broju budu
odbacena sva decimalna mjesta iza treceg
• Konstruktor klase DecimalFormat uzima string
koji predstavlja sablon za formatiranje broja
• Vidi CircleStats.java (strana 134)
© 2004 Pearson Addison-Wesley. All rights reserved
3-27
Pregled
Kreiranje objekata
Klasa String
Paketi
Formatiranje izlaza
Enumerativni tipovi
Klase omotaci
Komponente i kontejneri
Slike
© 2004 Pearson Addison-Wesley. All rights reserved
3-28
Enumerativni tipovi
• Java dozvoljava definisanje enumerativnih tipova
koji zatim mogu biti koristeni za deklaraciu
varijabli
• Jedan enumerativni tip odredjuje sve moguce
vrijednosti za varijablu toga tipa
• Vrijednosti su identifikatori koje bira programer
• Slijedeca deklaracija kreira enumerativni tip zvani
Sezona
enum Sezona {zima, proljece, ljeto, jesen};
• Proizvoljan broj vrijednosti moze biti prihvacen
© 2004 Pearson Addison-Wesley. All rights reserved
3-29
Enumerativni tipovi
• Nakon sto je tip definisan, varijabla tog tipa moze
biti deklarisana
Sezona vrijeme;
i moze joj se dodijeliti vrijednost
vrijeme = Season.jesen;
• Vrijednosti su navedene pomocu imena tipa
• Enumerativni tipovi su zasticeni tipovi (type-safe)
– ne moze im biti dodijeljena neka vrijednost, osim
onih koje su nabrojane u listi
© 2004 Pearson Addison-Wesley. All rights reserved
3-30
Ordinalne vrijednosti
• Interno je vrijednost svakog enumerativnog tipa
zapisana kao cio broj, zvani ordinalna vrijednost
• Prva vrijednost u enumerativnom tipu ima
ordinalnu vrijednost nula, druga jedan i tako dalje
• Ipak, numericke vrijednosti ne mogu biti
dodijeljene jednom tipu, cak ako on odgovara
ispravnoj ordinalnoj vrijednosti (indeksu)
© 2004 Pearson Addison-Wesley. All rights reserved
3-31
Enumerativni tipovi
• Deklaracija enumerativnog tipa je specijalan tip
klase, a svaka varijabla tog tipa predstavlja neki
objekat
• Metod ordinal vraca ordinalnu vrijednost objekta
• Metod name vraca ime identifikatora koji odgovara
vrijednosti objekta
• Vidi IceCream.java (strana 137)
© 2004 Pearson Addison-Wesley. All rights reserved
3-32
Pregled
Kreiranje objekata
Klasa string
Paketi
Formatiranje objekata
Enumerativni tipovi
Klase omotaci
Komponente i kontejneri
Slike
© 2004 Pearson Addison-Wesley. All rights reserved
3-33
Klase omotaci
• Paket java.lang sadrzi klase omotace koje
odgovaraju prostim tipovima:
Prost tip
Klasa omotac
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean
void
Void
© 2004 Pearson Addison-Wesley. All rights reserved
3-34
Klase omotaci
• Slijedeca deklaracija kreira jedan Integer objekat
koji predstavlja broj 40 kao objekat
Integer age = new Integer(40);
• Objekat tipa klase omotaca moze biti koristen u
svakoj situaciji u kojoj proste vrijednosti nisu
dovoljne
• Na primjer, neki objekti sluze kao kontejneri drugih
objekata
• Proste vrijednosti ne mogu biti stavljene u
kontejnere, ali inkapsulirane vrijednosti mogu
© 2004 Pearson Addison-Wesley. All rights reserved
3-35
Klase omotaci
• Klase omotaci takodje sadrze staticke metode koje
pomazu upravljanje asocijativnim tipovima
• Na primjer, klasa Integer sadrzi metod za
konvertovanje cijelog broja koji se cuva kao
String u int vrijednost:
num = Integer.parseInt(str);
• Klase omotaci cesto sadrze i korisne konstantne
vrijednosti
• Na primjer, klasa Integer sadrzi MIN_VALUE i
MAX_VALUE koje imaju vrijednosti najmanju i
najvecu int vrijednost
© 2004 Pearson Addison-Wesley. All rights reserved
3-36
Autoboxing
• Autoboxing je automatska konverzija proste
vrijednosti u odgovarajuci objekt omotac:
Integer obj;
int num = 42;
obj = int;
• Dodjela kreira odgovarajuci objekat tipa Integer
• Obratna konverzija (zvana unboxing) takodje se
izvodi automatski ako je potrebno
© 2004 Pearson Addison-Wesley. All rights reserved
3-37
Pregled
Kreiranje objekata
Klasa string
Paketi
Formatiranje izlaza
Enumerativni tipovi
Klase omotaci
Komponente i kontejneri
Slike
© 2004 Pearson Addison-Wesley. All rights reserved
3-38
Graficke aplikacije
• Osim apleta, primjeri programa koje smo
objasnjavali su bazirani na tekstu
• Oni se nazivaju aplikacije sa komandnom linijom
(command-line applications), koje komuniciraju sa
korisnikom koristeci jednostavne tekstualne
promptove
• Pregledamo neke Java aplikacije koje imaju
graficke komponente
• Ove komponente ce sluziti kao osnova programa
sa pravim grafickim interfejsom korisnika (GUI)
© 2004 Pearson Addison-Wesley. All rights reserved
3-39
GUI komponente
• GUI component je objekat koji predstavlja neki
elemenat ekrana, kao na primjer dugme (button)
ili tekstualno polje
• Klase koje se odnose na GUI su uglavnom
definisane u java.awt i javax.swing paketima
• Abstract Windowing Toolkit (AWT) bio je u pocetku
Java GUI paket
• Swing paket omogucuje dodatne i visestruko
iskoristive komponente
• Oba paketa su potrebna za kreiranje Java
programa zasnovanih na GUI
© 2004 Pearson Addison-Wesley. All rights reserved
3-40
GUI kontejneri
• GUI container je komponenta koja se koristi za nosenje i
organizovanje drugih komponenti
• frame je kontejner koji se koristi za prikazivanje Java
aplikacija zasnovanih na GUI
• Neki frejm se prikazuje kao poseban prozor sa naslovnom
linijom (title bar) – on moze biti premjesten i mijenjati
velicinu na skrinu ako je to potrebno
• panel je kontejner koji ne moze biti prikazan sam po sebi ali
se koristi za organizaciju komponenti
• Panel mora biti dodat drugom kontejneru da bi mogao biti
prikazan
© 2004 Pearson Addison-Wesley. All rights reserved
3-41
GUI kontejneri
• GUI kontejner moze biti klasifikovan kao
heavyweight ili lightweight
• heavyweight container–om se upravlja iz
aktuelnog operacionog sistema
• lightweight container-om se upravlja iz samog
Java programa
• Ponekad je ova razlika bitna
• Frejm je heavyweight kontejner, a panel je
lightweight kontejner
© 2004 Pearson Addison-Wesley. All rights reserved
3-42
Labele
• label je GUI komponenta koja prikazuje jednu liniju
teksta
• Labele se obicno koriste za prikazivanje
informacije ili identifikuju neke druge komponente
u interfejsu
• Pogledajmo program koji organizuje dvije labele u
jednom panelu i prikazuje taj panel u frejmu
• Vidi Authority.java (strana 144)
• Ovaj program nije interaktivan, ali frejm moze biti
repozicioniran i mijenjati velicinu
© 2004 Pearson Addison-Wesley. All rights reserved
3-43
Ugnijezdeni paneli
• Kontejneri koji sadrze druge komponente cine
containment hierarchy jednog interfejsa
• Ova hijerarhija moze dati vise oblika i tezina kada
je potrebno kreirati zeljene vizualne efekte
• Razmatrani primjer ugnjezdjuje dva panela unutar
treceg panela – obratiti paznju na efekte koje se
dobivaju kada se mijenja velicina okvira
• Vidi NestedPanels.java (strana 146)
© 2004 Pearson Addison-Wesley. All rights reserved
3-44
Pregled
Kreiranje objekata
Klasa String
Paketi
Formatiranje Izlaza
Enumerativni tipovi
Klase omotaci
Komponente i kontejneri
Slike
© 2004 Pearson Addison-Wesley. All rights reserved
3-45
Slike
• Slike se cesto koriste u programima sa grafickim
interfejsom korisnika
• Java moze upravljati slikama u oba JPEG i GIF
formata
• Kao sto smo vidjeli, JLabel objekat moze biti
koristen za prikaz linije teksta
• On takodje moze biti koristen za prikaz slike
• Znaci, labela moze biti komponovana od teksta,
slike, ili oboje u isto vrijeme
© 2004 Pearson Addison-Wesley. All rights reserved
3-46
Slike
• Klasa ImageIcon se koristi za predstavljanje
slike koja se cuva u labeli
• pozicija teksta u odnosu na sliku moze se
eksplicitno odrediti
• Razmak izmedju teksta i slike u labeli moze se
takodje podesiti
• Vidi LabelDemo.java (strana 149)
© 2004 Pearson Addison-Wesley. All rights reserved
3-47
Sazetak
• U glavi 3 razmatrana je:
 Kreacija objekata i referenci na objekte
 Klasa String i njene metode
 Standardna biblioteka Java
 Klase Random i Math





Formatiranje izlaza
Enumerativni tipovi
Klase omotaci
Graficke komponente i kontejneri
Labele i slike
© 2004 Pearson Addison-Wesley. All rights reserved
3-48