Loading documents preview...
KLASE I OBJEKTI Dr Nenad Jovanovid FTN, 2010. godina
Java je objektno orijentisan jezik Program napisan u Javi se sastoji od objekata Objekti su primerci klasa koje predstavljaju osnovne projektne elemente Java programa Klase su logička apstrakcija, a objekti su fizička realnost
Definicija klase Klasa predstavlja osnovnu organizacionu jedinicu koja omugudava implementaciju koncepata OOP Klasa predstavlja šablon koji omogudava kreiranje višestrukih objekata sa sličnim karakteristikama
Klase predstavljaju sve karakteristike jednog posebnog niza objekata odnosno, skup objekata sa istim svojstvima Klasa objekata predstavlja model klase entiteta koji obuhvata objekte sa istom strukturom i ponašanjem
Klase mogu biti: • Nezavisne jedna od druge • Prema odnosu nasleđivanja: podklasa/nadklasa • Prema tipu (interfejs) Klase su grupisane u pakete: • Paket sadrži kolekciju logički povezanih klasa
Deklarisanje klase Klasa se deklariše korišdenjem ključne reči class, davanjem imena klasi i navođenjem članova klase između vitičastih zagrada Deklaracija klase određuje kog je tipa: • Identifikator u deklaraciji klase određuje ime klase • Opciono extends ukazuje na nadklasu. • Opciono implements lista nazive svih interfejsa koje klasa implementira
Ime klase Imena klase počinju velikim slovom i svaka naredna reč u imenu klase počinje velikim slovom. Imena primeraka klase (objekata) počinju malim slovom, a svaka nova reč u imenu objekta počinje velikim slovom
Ključna reč class Ime klase
Ovde se definišu Članovi klase
Članovi klase Klasa može da sadrži tri vrste članova • Polja • čine strukturu podataka objekta • definišu stanje objekta
• Metode • sadrže izvršni kod • definišu ponašanje objekta
• Ugnežđene klase i intefejse
Modifikatori klasa Deklaraciji klase mogu prethoditi modifikatori klasa koji daju određena svojstva nekoj klasi • public, njoj može pristupiti bilo koji Java kod koji može da pristupi njenom paketu. • abstarct, klasa se smatra apstraktnom ukoliko je barem jedan metod deklarisan kao apstraktan. • final, ne dozvoljava nasleđivanje, tj. podklase
Komentari // Komentar
Zanemaruju se znakovi do kraja reda.
/* Komentar */
Zanemaruju se svi znakovi između oznaka /* i */.
/** Komentar */
Dokumentacioni komentari.
class Osoba{ // Ovde treba definisati clanove klase /* Clanovi klase mogu biti polja i metode */ }
Polja Klasne promenljive se zovu polja Deklaracija polja se satoji od imena tipa iza koga sledi ime polja i, opciono, inicijalna vrednost za polje Deklaraciji polja mogu prethoditi modifikatori: • Modifikatori pristupa (public, private, protected) • static • final
PROMENLJIVE Promenljive su osnovna jedinica za čuvanje vrednosti u Javi. Promenljiva se definiše kombinacijom identifikatora, tipa i po želji početne vrednosti. U Javi se sve promenljive moraju pre upotrebe deklarisati. Evo osnovnog oblika deklarisanja promenljive:
tip identifikator [=vrednost],[,identifikator[=vrednost] …]; Tip je jedan od Javinih jednostavnih tipova ili ime klase, odnosno interfejsa. Identifikator je ime promenljive. Identifikatori su tekstualni stringovi koji predstavljaju promenljive, metode, klase ili labele. Identifikatori ne mogu počinjati sa ciframa i ne mogu nositi isti naziv kao rezervisane reči.
case-sensitive Java je osetljiva na mala i velika slova: • imeprezime, imePrezime, Imeprezime, ImePrezime su četiri različita identifikatora.
Konvencije: • Paketi: sva mala slova • ziroracun
• Klase: početna slova reči su velika • ZiroRacun
• Metod/polje: početno slovo je malo, a naredne reči počinju sa velikim slovima • ziroRacun
• Konstante: sva su velika slova • ZIRO_RACUN
TIPOVI PODATAKA Svaka promenljiva mora da ima tip podataka. Java operiše sa dve vrste tipova podataka: • primitivnim tipovima i • objektima.
U Javi je definisano osam primitivnih tipova podataka, koji se mogu svrstati u četiri grupe: • Celi brojevi (integer) –byte, short, int i long; • Brojevi u pokretnom zarezu (floating point) –float i double; • Znakovi (character) –char - namenjen simbolima u skupu znakova, na primer slovima i ciframa; • Logičke vrednosti –tip boolean - specijalni tip za predstavljanje vrednosti tačno/netačno (true/false).
Svi tipovi podataka imaju strogo definisan opseg. Na primer, tip int je uvek dužine 32 bita, bez obzira na platformu.
Tip
Opseg vrednosti
Opis
boolean
True ili false
logički podatak
char
16-bitni Unicode znak
byte
-128 do 127
8-bitni označen ceo broj
short
-32768 do 32767
16-bitni označen ceo broj
int
-2147483648 do 2147483647
32-bitni označen ceo broj
long
- 9223372036854775808 do 9223372036854775807
64-bitni označen ceo broj
float
1,7 e –308 do 1,7 e + 308
32-bitni brojevi u pokretnom zarezu
double
3,4 e -038 do 3,4 e + 038
64-bitni brojevi u pokretnom zarezu
Celi brojevi Tipovi: Celi brojevi Brojevi u pokretnom zarezu Znakovi Logičke vrednosti
1. byte
Veličina: 1 bajt opseg: -27 do 27-1
2. short
Veličina: 2 bajta opseg: -215 do 215-1
3. int
Veličina: 4 bajta opseg: -231 do 231-1
4. long
Veličina: 8 bajtova opseg: -263 do 263-1
Brojevi u pokretnom zarezu Tipovi: Celi brojevi Brojevi u pokretnom zarezu
1. float
Veličina: 4 bajta opseg: ±1.4x10-45 do ±3.4x1038
2. double
Veličina: 8 bajtova opseg: ±4.9x10-324 do ±1.8x10308
Znakovi Logičke vrednosti
Znakovni tip Tipovi: Celi brojevi Brojevi u pokretnom zarezu Znakovi Logičke vrednosti
1. char
Veličina: 2 bajta Opseg: \u0000 - \uFFFF
Tipovi: Celi brojevi Brojevi u pokretnom zarezu Znakovi Logičke vrednosti
1. boolean
Veličina: 1 bajt Opseg: true/false
Konverzija tipova Konverzija tipova (casting) podrazumeva dodeljivanje vrednosti jednog tipa, promenljivoj drugog tipa. Na primer, vrednost tipa int može se dodeliti promenljivoj tipa long. Do automatske konverzije tipova de dodi samo ukoliko su ispunjena slededa dva uslova: • tipovi su međusobno kompatibilni; • odredišni tip je vedi od polaznog. Ukoliko treba vrednosti tipa int dodeliti promenljivoj tipa byte, onda se ova konverzija nede obaviti automatski, jer je tip byte manji od tipa int. Ova vrsta konverzije se naziva konverzija skradivanjem, pošto forsira skradivanje promenljive da bi stala u odredišni tip. Za konverziju međusobno nekompatibilnih tipova mora se upotrebiti izričito konvertovanje, čiji je opšti oblik slededi: (ciljni tip) vrednost
byte a=20; byte b=40; byte c=100; int d =a*b/c;
S obzirom da rezultat a*b prelazi opseg prvobitnih operanada tipa byte, Java automatski unapređuje operande tipa byte ili short u tip int. byte b=50; b=b*2;
Rezultat izračunavanja izraza je sada tipa int i ne može se dodeliti promenljivoj tipa byte bez izričite konverzije tipova.
Kada možete da predvidite posledice prekoračenja opsega, trebalo bi da tipove izričito konvertujete, npr: byte b=20; b=(byte)(b*2);
Deklarisanje i inicijalizacija Promenljive se moraju deklarisati i inicijalizovati pre njihove prve upotrebe u izrazu. Promenljiva se može inicijalizovati dodavanjem znaka jednakosti i vrednosti, kao na primer: int a, b, c; int d=5, e, f=7; byte z=33; char x='x'. Primer:
Aritmetički operatori
+
Sabiranje
3+5=8
* / %
Oduzimanje Množenje Delenje Modul
9–7=2 3 * 5 = 15 15 / 5 = 3 17 % 5 = 2
Dodeljivanje vrednosti
x=x+y x=x-y
x += y x -= y
x=x*y x=x/y
x *= y x /= y
Operatori poređenja ==
Jednako
!=
Nije jednako
>
Veće
<
Manje
>=
Veće ili jednako
<=
Manje ili jednako
Logički operatori ! & |
Negacija Konjukcija (AND) Disjunkcija (OR)
&& ||
Uslovna konjukcija Uslovna disjunkcija
A
B
A|B
A&B
!A
False
False
False
False
True
True
False
True
False
False
False
True
True
False
True
True
True
True
True
False
class Osoba { String ime; String prezime; }
Deklaracija klase stvara ime tipa Reference na objekte tog tipa mogu da se deklarišu jednostavno: Osoba petar; Važno!!! Deklaracija ne pravi objekat, ona samo deklariše referencu koja se odnosi na objekat datog tipa. Objekat MORA eksplicitno da se napravi.
Pravljenje objekata Objekti se prave podu konstrukcionog elementa new Osoba petar; petar = new Osoba (); Date danasnjiDatum; danasnjiDatum = new Date();
Primer referenfce Osoba a = new Osoba(); Osoba b = new Osoba();
• Ako se sada izvrši naredba: b = a; u memoriji de biti slededa situacija:
Pristup poljima Osoba petar; petar = new Osoba (); petar.ime = “Patar”; petar.prezime = “Petrovic”;
class Krug { int poluPrecnik; ... }
Krug prsten; prsten = new Krug(); prsten.poluPrecnik = 5;
Referenca this Specijalna referenca na objekat kojem se upravo pristupa Može se koristiti unutar ne-statičkih metoda Način da se prosledi referenca na tekudi objekat kao parametar drugim metodima: lista.dodaj(this)
Statička polja Su polja koja dele svi objekti klase. class Osoba { Strring ime; String prezime; static int redniBroj = 1; }
Osoba pera, laza, mika; pera = new Osoba (); Osoba.redniBroj= Osoba . redniBroj ++; // redniBroj = 1 laza = new Osoba (); laza. redniBroj = laza. redniBroj + 1; // redniBroj = 2 mika = new Osoba (); mika. redniBroj = mika. redniBroj + 1; // redniBroj = 3
Konstantna polja class Krug { public int x1,y1, r; public final float pi = 3.141592653; }
Metode Klasa bez metoda ne može ništa da uradi osim da čuva podatke Deklaracija metode sastoji se od: • zaglavlja metode • tela metode
Metode
Modifikatori metode
Modifikatori pristupa abstract static final ...
Apstraktne metode Apstraktna metoda se opisuje rezervisanom rečju abstract Apstraktna metoda je metoda sa definicijom, ali bez realizacije Apstraktna metoda može biti napravljena samo unutar apstraktne klase
Apstraktna klasa
Klasa sa barem jednom apstraktnom metodom je apstraktna Ne mogu se kreirati objekti apstraktne klase Apstraktne klase su način da se definišu tipovi sa delimičnom implementacijom Apstraktne klase namedu određene principe u radu
Statičke metode Statička metoda može obavljati opšti zadatak za sve objekte klase Statička metoda može pristupati samo statičkim poljima i statičkim metodima klase Ne postoji this referenca (nema specifičnog objekta nad kojim se radi) Izvan klase – statičkom članu se pristupa koristedi ime klase i .
Metoda main Uvek se mora specificirati ime klase koja pokrede aplikaciju Sistem locira i izvršava metod main iz te klase main mora biti public, static i void i imati jedan argument tipa String[] Aplikacija može imati više main metoda Svaka klasa može imati jedan main metod Stvarno korišdeni main je specificiran imenom klase pri pokretanju programa Preporuka: svaka klasa treba da ima main metod za potrebe testiranja
Primer: DanasnjiDatum
Import – uvozi sve potrebne dodatne klase java.lang – Java biblioteka koja se automatski uvozi Klasa Date nije deo paketa java.lang Ona se nalazi u paketu java.util
Klasa System
Out je statički objekat klase PrintStream pa ga nije potrebno praviti
java.util
Klasa Date
Prosleđivanje argumenata Pozivanje po vrednosti Pozivanje po referenci
Prosleđivanje argumenata Ukoliko se kao argumenti prosleđuju promenljive primitivnog tipa, onda se prosleđuju samo vrednosti tih promenljivih. Bilo kakva promena ovih vrednosti unutar metode ne izaziva promenu originalnih promenljivih. Ukoliko prosleđujete promenljivu koja sadrži objekat, prosleđuje se njena referenca. To znači da de bilo kakva promena nad objektom imati uticaja na originalan objekat.
Primer: Poziv argumenata