(oop) razvoj i nastanak programskog jezika java sun

31
(OOP) Razvoj i nastanak programskog jezika Java Proizvod firme: “Sun Microsystems” 1991. OAK - namenjen mrežnom kudnom okruženju(J. Gosling) 1994. Usmerenje ka Internetu (današnja upotreba Jave) 1995. Java se lansira na SunWorld-u Netscape preuzima Javu Javne prezentacije na WEB-u IBM kupuje licencu Korišdenje Jave najavljuje čak i Microsoft 1996. Sun razvija JDK 1.0 1997. Pojavljuje se JDK 1.1, JavaBeans II konferencija o Javi sa 10000 učesnika Razne nagrade za uspešan proizvod 1999. Pojavljuje se JDK 1.2 (Java 2 SDK - Software Development Kit) 2000. Pojavljuje se JDK 1.3. 2002. Pojavljuje se JDK 1.4. 2004. Pojavljuje se JDK 1.5. (OOP) Karakteristike programskog jezika Java C/)C++( -objektno orijentisan jezik; (Smalltalk) Uključuje skupljač otpadaka; Pruža nadu za povezivanje različitih platformi; pogodan za mrežno okruženje Dobar za prelazak na moderan način programiranja; Ne može se očekivati da de zameniti Windows, kao što se pretendovalo; Omogudava Java Beans tehnologiju (Java modula za rešavanje konkretnog zadatka) Služi za kreiranje apleta i aplikacija; Kompajlersko interpretorski jezik (OOP) Mogudnosti jezika Java U ovom delu se ispituju raznovrsne mogudnosti koje obezbeđuje programski jezik Java, na taj način što de se pregledati različite vrste aplikacija razvijenih sa Javom. Naime, pregledademo nekoliko primera Java apleta koji su bili postavljeni na Web-u. Takođe demo ispitati i nekoliko primera Java aplikacije sa grafičkim korisničkim interfejsom (GUI) i Java aplikacije iz komandne linije. Do kraja ovog dela, stedi demo jasnu sliku o načinima korišdenja ovog jezika i načinima na koje Java menja svet računarstva. (OOP) Tipovi Java aplikacija apleti (mini aplikacije) aplikacije - koriste se za razvoj portabilnih GUI aplikacija na svim platformama, isti kod se moze koristit i za app i za aplet aplikacije iz komandne linije - razlikuju se od GUI app jer one koriste paket java.awt a ove ne... biblioteke klasa-ja oformim sopstvenu klasu, pa u razl.projektima kreiram objekte iz svoje biblioteke

Upload: others

Post on 29-Dec-2021

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: (OOP) Razvoj i nastanak programskog jezika Java Sun

(OOP) Razvoj i nastanak programskog jezika Java Proizvod firme: “Sun Microsystems” 1991. OAK - namenjen mrežnom kudnom okruženju(J. Gosling) 1994. Usmerenje ka Internetu (današnja upotreba Jave) 1995. Java se lansira na SunWorld-u Netscape preuzima Javu Javne prezentacije na WEB-u IBM kupuje licencu Korišdenje Jave najavljuje čak i Microsoft 1996. Sun razvija JDK 1.0 1997. Pojavljuje se JDK 1.1, JavaBeans II konferencija o Javi sa 10000 učesnika Razne nagrade za uspešan proizvod 1999. Pojavljuje se JDK 1.2 (Java 2 SDK - Software Development Kit) 2000. Pojavljuje se JDK 1.3. 2002. Pojavljuje se JDK 1.4. 2004. Pojavljuje se JDK 1.5.

(OOP) Karakteristike programskog jezika Java C/)C++( -objektno orijentisan jezik; (Smalltalk)

Uključuje skupljač otpadaka; Pruža nadu za povezivanje različitih platformi; pogodan za mrežno okruženje Dobar za prelazak na moderan način programiranja; Ne može se očekivati da de zameniti Windows, kao što se pretendovalo; Omogudava Java Beans tehnologiju (Java modula za rešavanje konkretnog zadatka) Služi za kreiranje apleta i aplikacija; Kompajlersko interpretorski jezik

(OOP) Mogudnosti jezika Java U ovom delu se ispituju raznovrsne mogudnosti koje obezbeđuje programski jezik Java, na taj način što de se pregledati različite vrste aplikacija razvijenih sa Javom. Naime, pregledademo nekoliko primera Java apleta koji su bili postavljeni na Web-u. Takođe demo ispitati i nekoliko primera Java aplikacije sa grafičkim korisničkim interfejsom (GUI) i Java aplikacije iz komandne linije. Do kraja ovog dela, stedi demo jasnu sliku o načinima korišdenja ovog jezika i načinima na koje Java menja svet računarstva.

(OOP) Tipovi Java aplikacija apleti (mini aplikacije) aplikacije - koriste se za razvoj portabilnih GUI aplikacija na svim platformama, isti kod

se moze koristit i za app i za aplet aplikacije iz komandne linije - razlikuju se od GUI app jer one koriste paket java.awt a

ove ne... biblioteke klasa-ja oformim sopstvenu klasu, pa u razl.projektima kreiram objekte iz

svoje biblioteke

Page 2: (OOP) Razvoj i nastanak programskog jezika Java Sun

Java serverske strane (JSP) - za rad preko interneta izvrsavanje programa se realizuje ne samo na klijentskoj vec i na serverskoj strani

(OOP) Java Development Kit (JDK) Razlog velike popularnosti jezika Java je, pored kvaliteta njenog dizajna, i činjenica da je uz Javu priključen (kao JDK) i bogat set paketa (u drugim jezicima biblioteka klasa). Ovi ved oformljeni objekti omogudavaju brzo pokretanje pri radu sa Javom, iz dva razloga:

programer ne mora ponovo da razvija njihovu funkcionalnost. izvorni kod je svima dostupan, otvoren. znacajniji paketi -klase za razvoj apleta(AWT abstract Windows Toolkit) -klase za GUI dugmici, prozor, tekstfield -klase za mrezu, URLova, klijent serverske sokete -klase za razlicite tipove IO -klase za slike pomocne klase za datum, vektor

(OOP) Java kao kompajliran i interpretiran jezik Java je interpretirani jezik, sto znaci da se Java izvorni kod kompajlira u prenosivi bajt-kod, koji zahteva interpreter da bi se izvršio.

programer prvo kompajlira Java izvorni kod koriscenjem Java kompajlera u tzv.bajt-kod kreiran bajt-kod je binaran i arhitektonski neutralan i nije kompletan sve dok se ne interpretira od strane Java runtime okruzenja.S obzirom na to da java izvrsno okruzenje postoji posebno za svaku specificnu platformu zavrsni proizvod ce raditi na tojspeificnoj platformi Java izvrsni kod ostaja Java kod bez obzira na kojoj se platformi izvrsava Koriscenjem Jave se postize da samo jedan izvorni kod treba da se odrzava a program ce raditi na razlicitim platformama.Gubitak performansi je smanjen koriscenjem Just-in-time kompajlera.JIT kompajler prevodi Java kod u masinski kod za konkretnu platformu na kojoj se koristi pa Java ostaje portabilna. Zasto je kombinacija kompilacije i interpretacije pozitivna osobina? -obezbedjuje sigurnost i stabilnost Java okruzenje sadrzi element linker koji proverava podatke koji dolaze na masinu kako bi se uverila da oni ne sadrze delove koji bi mogli da ostete fajlove ili onesposobe rad sistema -ova kombinacija kompilacije i interpretacije razresava probleme neuklapanja verzija

(OOP) Java kao objektno orjentisan jezik

Page 3: (OOP) Razvoj i nastanak programskog jezika Java Sun

Java je objektno-orjentisan jezik (OOP jezik). Ona je, dakle, član familije jezika koji se fokusiraju na definisanje podataka kao objekata i metoda koji mogu biti primenjeni na te objekte.

Java i C++ dele mnoge od principa na kojima se zasnivaju – najvedi broj njihovih razlika se odnosi na stil i na strukturu. Java (kao i drugi OOP jezici) opisuju interakciju između objekata.

Mnogi OOP jezici podržavaju višestruko nasleđivanje. Java je dizajnirana tako da podržava samo jednostruko nasleđivanje. Ovo znači da data klasa može naslediti samo jednu klasu.

Java dopušta i kreiranje totalno apstraktnih klasa, koje su poznate kao interfejsi. Interfejsi dopuštaju kreiranje metoda koji mogu biti podeljeni između različitih klasa, bez obzira na to kako ostale klase realizuju metode. Mada Java isključivo podržava jednostruko nasleđivanje, ona ipak dopušta da klasa implementira više od jednog interfejsa.

Svaka klasa, bilo apstraktna ili ne, definiše ponašanje objekta (objekat je elemenat, član, instanca klase) kroz skup metoda. Sav Java kod je podeljen u klase. Metodi mogu biti nasleđeni sa jedne klase u drugu, a na vrhu klasne hijerarhije se nalazi klasa nazvana Object. Klasa Object pripada paketu java.lang iz Java API-a.

Objekti mogu implementirati vedi broj interfejsa. Java interfejsi umnogome liče na IDL (Interface Definition Language) interfejse.

Ovo dalje omogudava korišdenje CORBA (Common Object Request Broker Architecture) sistema objekata za građenje distribuisanog sistema objekata, tj. distribuisanih aplikacija.

U cilju održavanje jednostavnosti (a samim tim i efikasnosti) Jave, nisu baš svi elementi realizovani kao objekti. Logičke veličine (istina i laž), brojevi i drugi prosti tipovi nisu realizovani kao objekti.

Važno je zapamtiti da je Java striktno objektno orjentisana - ona jednostavno ne dopušta da se deklariše bilo šta što nije enkapsulirano (učaureno) u objekat.

Objektno-orjentisani dizajn je istovremeno i mehanizam koji omogudava lako i jednostavno uklapanje modula.

(OOP) Java virtuelna mašina Srce Jave je JVM (Java Virtual Machine). JVM je virtualni računar koji postoji samo u

memoriji. JVM dopušta da Java programi budu izvršavani na raznovrsnim platformama. Da bi Java programi mogli da rade na određenoj platformi, mora JVM da bude implementirana na toj platformi.

JVM je glavni razlog prenosivosti (portabilnosti) Jave, koji obezbeđuje dodatni nivo apstrakcije između kompajliranog Java programa i hardverske platforme i operativnog sistema koji se nalaze ispod.

JVM je vrlo mala kada se implementira u RAM-u. Takva mala veličina JVM omogudava da se Java koristi u raznovrsnim elektronskim uređajima. Ceo jezik Java je originalno razvijan tako da se na umu ima i kudna elektronika.

JVM se sastoji iz:java steka,java registara i java prostora Java stek-adresna duzina kod JVM je 32-bitna pa JVM moze adresirati do 4Gb.Svaki registar je

Page 4: (OOP) Razvoj i nastanak programskog jezika Java Sun

duzina 32 bita pa moze cuvati 32bitnu adresu.Stek,heap i prostor za metode su smestene u tih 4Gb Java registri -brojac(counter)-vodi racuna gde je stalo sa izvrsenjem programa vrh(optop)-pokazivac na vrh steka okvir(frame)-pokazivac na tekuce okruzenje promenjive(vars)-pokazivac na prvu lokalnu promenljivu u tekucem okruzenju -stek radi po principu FIFO,sirok je 32 bita Promenljive su niz 32bitnih promenljivih na koje pokazuje registar vars prostor je deo memorije iz koga se vrsi instanciranje i alokacija memorije Okruzenje u kojem se java program izvrsava sadrzi informacije o referencama na svaki objekat iz prostora i automatski oslobadja onaj deo memorije koji su zauzeli objekti na koje niko vise ne referise Sakupljac djubreta radi kao pozadinska nit i vrsi rasciscavanje tokom neaktivnosti

(OOP) Java API. Java Core API i drugi API-ji Java Application Programming Interface, ili Java API, je skup klasa koje je razvio Sun, za

korišdenje u jeziku Java. Java API je dizajniran da bi se pomoglo programeru u razvoju sopstvenih klasa, apleta i aplikacija.

Klase unutar Java API-ja su grupisane u pakete, pri čemu svaki paket može sadržavati više klasa i interfejsa. Nadalje, svaka od klasa može imati više osobina (eng. properties), više polja (eng. fields) i/ili metoda.

Iako je mogude programirati u Javi bez velikog znanja API-ja, treba naglasiti da svaka novorazvijena klasa zavisi od bar jedne klase iz API-ja (sa izuzetkom java.lang.Object koja je nadklasa svih ostalih klasa). Nadalje, pri razvoju sve složenijih programa, koji rade sa niskama, soketima i grafičkim interfejsom, postaje veoma značajno poznavanje objekata koje je Sun obezbedio.

Centralni (eng. core) API sadrži pakete sa objektima za koje se garantuje da su dostupni bez obzira na Java implementaciju: java.lang Paket java.lang se sastoji oid klasa koje su centralne za jezik Java. On obezbeđuje ne samo osnovne tipove podataka, kao što su Character i Integer, ved takođe i obradu grešaka uz korišdenje klasa Throwable i Error. Nadalje, klase SecurityManager i System omoguduju programeru nivo kontrole nad Java sistemom za izvršavanje. java.io Paket java.io služi kao standardna ulazno/izlazna biblioteka za jezik Java. Ovaj paket obezbeđuje programeru mogudnost kreiranja i rukovanja sa tokovima (eng. streams) podataka na različite načine. Tu su obezbeđeni i jednostavni tipovi kao što je String i složeni kao što je StreamTokenizer. java.util Paket java.util sadrži vedi broj korisnih klasa koje nisu mogle biti uklopljene u druge pakete. Među takvim klasama su: · klase koje omogudavaju rad sa datumima · klase koje omogudavaju strukturisanje podataka, kao što su Stack i Vector. java.net

Page 5: (OOP) Razvoj i nastanak programskog jezika Java Sun

Paket java.net čini jezik Java mrežno zasnovanim jezikom. On obezbeđuje sposobnost komunikacije sa udaljenim čvorovima, bilo preko soketa, bilo korišdenjem URL-ova. Na primer, korišdenjem ovog paketa programer može kreirati svoje sopstvene Telnet, Chat ili FTP klijente i/ili servere. java.awt Paket java.awt je još poznat pod imenom Java Abstract Window Toolkit (AWT). AWT sadrži ne samo klase, kao što je GridBagLayout, ved i nekoliko konkretnih interaktivnih alata, kao što su Button i TextField. Još važnije je da klasa Graphics obezbeđuje bogatstvo grafičkih mogudnosti, uključujudi i mogudnost crtanja raznih oblika i mogudnost prikaza slika. java.awt.image Paket java.awt.image je blisko povezan sa paketom java.awt. Ovaj paket se sastoji od alata koji su dizajnirani za rukovanje i manipulaciju slikama koje dolaze kroz mrežu. java.awt.peer Paket java.awt.peer je paket sa interfejsima koji služe kao posrednici između Java koda i računara na kome se taj kod izvršava java.applet Paket java.applet je najmanji paket u API-ju, ali je zbog Applet klase koja je definisana u njemu vrlo značajan. Klasa Applet sadrži mnogo korisnih metoda i ona je temeljna za sve aplete i istovremeno je u mogudnosti da obezbedi informacije o apletovom okruženju (kroz interfejs AppletContext). Java Enterprise API, Java Commerce API , Java Server API, Java Media API, Java Security API, Java Beans API, Java Embedded API (OOP) Osnovni pojmovi objektno-orjentisanog programiranja

Objekat - integralna celina podataka i procedura za rad sa njima. Zbog prisustva procedura u objektima, objekti imaju mogudnost da samostalno deluju, tj. postaju dinamički.

Objektno-orijentisano programiranje - programska paradigma zasnovana na skupu objekata koji dejstvuju međusobno. Glavne obrade zasnivaju se na manipulisanju objektima.

Metod - funkcija koja je sastavni deo objekta, tj. postupak kojim se realizuje poruka upudena objektu.

Poruka - skup informacija koji se šalje objektu. Sastoji se iz adrese (objekta primaoca poruke) i saopštenja (kazuje ,ta treba da se uradi).

Klasa - Skup objekata sa zajedničkim svojstvima (koji se ponašaju na isti način). Definiše šablon za kreiranje instanci .

Primerak (instanca) - konkretan objekat iz klase. Skup instanci sa skupom metoda kreira jednu klasu.

Klasa B je potklasa klase A ako su svi primerci klase B istovremeno i primerci klase A. Za klasu kažemo da je natklasa klase B. Potklase nastaju dodavanjem novih svojstava (metoda) postoje}oj klasi.

Nasleđivanje - mehanizam za kreiranje novih klasa iz postojedih. Nasleđivanjem se formiraju relacije između jedne i više drugih klasa.

Page 6: (OOP) Razvoj i nastanak programskog jezika Java Sun

Polimorfizam - Mogudnost primene istog metoda (operatora) na primerke različitih klasa.

(OOP) Primeri nasleđivanja

(OOP) Zašto je objektno-orijentisan koncept doživeo uspeh?

Ponovna iskoristivost softvera. Pogodan za: analizu, projektovanje i programiranje. Najpogodniji za simuliranje događaja. Objašnjenje se delimično može nadi kroz pogled istorijskog razvoja OOP.

1967: Dall i Simula 67. 70-tih godina: A. Kay i Smalltalk. Razvoj ostalih OO jezika.

(OOP) Java kao OO jezik Objektno-orijentisan sa HIJERARHIJSKOM strukturom klasa.

(OOP) Interfejsi

INTERFEJS - skup imenovanih metoda i konstanti , koji nisu nasleđeni od natklasa, niti definisani u samoj klasi, a koji određuju neka dodatna svojstva klase. (slika) -Definise samo prototip metoda. -metode u interfejsu su uvek public i abstract -definise se kao klasa umesto class interface -implementiraju se u klasama -smesta u pakete

Page 7: (OOP) Razvoj i nastanak programskog jezika Java Sun

-nakon implemen.interfejsa u nekoj klasi njena potklasa nasledjuje sve metode i moze ih predefinisati

(OOP) Objekti u Javi Objekat je potpuno određen svojim atributima i ponašanjem. Atributi objekta - instancne promenljive. Klasom je definisan njihov tip, a za svaki primerak, tj. instancu, instancna promenljiva ima konkretnu vrednost. Primeri: tacka (x,y, boja) automobil(broj sasije, broj motora, boja, broj sedi{ta) Ponašanje objekta određeno je metodima u klasi koji mogu dejstvovati na taj objekat. Primeri: Uzeti x-koordinatu, pomeriti tačku za dx, dy, … Startovati motor, promeniti brzinu, zaustaviti motor, … (OOP) Tipovi podataka u Javi

Tip podataka predstavlja jedan od osnovnih pojmova u programskim jezicima. Tipom podataka je određen skup entiteta i skup operacija nad tim entitetima. (Entitet je podatak ili neka celina podataka). U Javi se mogu razlikovati dve klase tipa podataka:

• primitivni i • referencni (objekat)

(OOP) Primitivni tip podataka • Primitivni tip može biti: aritmetički i logički. • Aritmetički tip može biti: celi i realni (floating point) • Celi tipovi su: byte, short, int, long i char. Operatori nad celim tipom su: poređenja,

aritmetički, uvedanja/smanjenja za 1, logički po bitovima. • Realni tip može biti: float i double. Zapisuju se prema standardu IEEE 754. (32-bitni i 64-

bitni). Sledede operacije su definisane nad ovim tipom: poređenja, aritmetičke, uvedanja/umanjenja za 1.

• Logički tip (u oznaci: boolean) ima 2 vrednosti (true i false) i operacije: jednakosti i nejednakosti i logi~ke operacije.

(OOP) Referentni (objektni) tip podataka • Objekt - celina koju čine promenljive i metodi definisani u klasi objekta. Svaki objekat je

primerak (konkretizacija) neke klase. Tip objekta je određen klasom. Primer:

class Figura , ……- class Trougao extends Figura , …..- ………. Figura s; Figura f; Trougao t; ……..

• Specijalnu vrstu objekata čine stringovi. String-objekat ne sadrži NULL na kraju (kao u C-u).

(OOP) Elementarne konstrukcije jezika Java.

Page 8: (OOP) Razvoj i nastanak programskog jezika Java Sun

U elementarne konstrukcije (tokene) ubrajamo elemente jezika koje kompajler izdvaja kao nedeljive celine prilikom prevođenja programa. U elementarne konstrukcije spadaju:

• Identifikatori • Literali • Separatori • Operatori • Ključne reči • Komentari • Beline

(OOP) Identifikatori • Služe sa imenovanje stvari i programa. Nekoliko identifikatora se koristi u specijalne

svrhe - to su ključne reči. • Identifikator je niz jednog ili više Unicode znakova. Prvi mora biti slovo, _ (crta za

podvlačenje) ili $ (znak za dolar). Ostali mogu biti: slova, cifre, _ ili $. • Dužina nije ograničena. • Java kompajler može razlikovati identifikatore koje čovek ne može. Primeri: x, _prvi, az123, $i_ovo_je identifikator, janko, Petar, Prvi1_3.

(OOP) Ključne reči • To su identifikatori koji imaju specifično značenje u Javi. Ne mogu se koristiti kao imena

u programima. • To su engleske reči i ma ih 50. Primeri: boolean, break, do, return, while, …

(OOP) Literali • Termovi koji predstavljaju same sebe • Literal može biti: konstantna vrednost primitivnog tipa ili String-objekat. • Znači, može biti: celobrojni, realni, logički, znakovni i stringovni (niska-literal). • Celobrojni literali

o Mogu biti dekadni, oktalni i heksadekadni. o Dekadni ne počinju cifrom 0. o Oktalni počinje cifrom 0. o Heksadekadni počinje znacima: 0x ili 0X. o Celobrojni literal koji se završava slovom L ili l je tipa long. (Ako se želi potencirati

da je int, može iza stajati I ili i.) o PRIMERI: 123, 0, 063, 0XED123, 0L, 13242442422662l, 03535353L, 0x6da533l.

• Realni literali - konstantne vrednosti tipa float ili double. Mora sadržati jednu cifru i decimalnu tačku ili eksponent.

Realan broj je tipa float ako sadrži na kraju slovo F ili f. Ako nema slova (ili sadži slova d, tj. D), on je tipa double. Primeri: 25e4f, 1. E2f, .8373e+9f, 2.75f 23e4, 1.E2, .54544e3D, 24.5444, 24.2d

Page 9: (OOP) Razvoj i nastanak programskog jezika Java Sun

• Logički literali Postoje 2 logička literala: true i false.

• Znakovni literal (karakter-literal) - konstantna vrednost tipa char, tj. neoznačena 16-bitna veličina. Sastoji se od konkretnog znaka li kontrolne sekvence između apostrofa.

PRIMERI: ‘t’, ‘\n’, ‘\\’, ‘\u142’ • String literal - sadrži znake između navodnika.

PRIMERI: “Zdravo Cedo”, “i ovo \n”, “Promenljiva 1 2 3 “ (OOP) Separatori. Beline. Operatori. Komentari.

Separatori Kao separatori javljaju se slededi znaci: ( ) { } [ ] ; , .

Beline Beline čine specijalni znaci: space, tab, form feed… Ne vide se, a izazivaju neke efekte.

Operatori • Operator je token koji određuje operaciju nad podacima. U Javi se razlikuju

operatori za dodeljivanja i ostali. • Operatori dodeljivanja: = -= *= /= |= &= ^= += %= <<= >>= >>>= • Ostali: + - <= ^ ++ < * >= % - / != ? >> ! & = = : >> ~ | && >>> • Nema operator , (kao u C-u). Nema i nekih drugih koji postoje u C-u (za pristup

memoriji). Komentari • Java podržava 3 stila komentara u programu.

– C-stil: / * Sve između ovih vrsta zagrada je komentar */ – jednolinijske komentare:

//sve iza ovog u jednoj liniji je komentar PRIMER: i = 1; // Inicijalizacija brojača

– dokumentacioni komentar, koji počinje sa: /** a završava se sa */. Može da se iskoristi za automatsko generisanje dokumentacije, tj za pretvaranje u HTML-tekst..

PRIMERI: /** Ovde počinje Malo konfuzije Ovde se završava */

(OOP) Kompilacione jedinice -nju cini izvorni kod sastavljen od jedne ili vise klasa ili interfejsa. -kao komp.jedinice javljaju se app i apleti -paket je kolekcija odgovarajucih kompl.jedinica

U sastav kompilacione jedinice mogu udi: • package-direktiva (paketne direktive), • import-direktiva (uvozne direktive) i • deklaracije klasa ili interfejsa.

Svaka od navedenih komponenti može biti izostavljena!

Page 10: (OOP) Razvoj i nastanak programskog jezika Java Sun

Bar jedna od navedenih komponenti mora se nadi u kompilacionoj jedinici. (OOP) Deklaracija klase

U deklaraciji klase pojavljuju se: • Promenljive • Izrazi • Naredbe • Metodi • Objekti • …

To su gradivni elementi programskog jezika Java od kojih se kreiraju programi. (OOP) Promenljive

• lokacija u memoriji za zapis neke vrednosti ili pokazivač na objekat. U Javi postoje 3 vrste promenljivih: instancne, klasne i lokalne. Svaku promenljivu karakterišu: ime, tip i vrednost. Ime promenljive je identifikator. Tip promenljive je jedan od nabrojanih tipova. Promenljiva sadrži vrednost ili je pokazivač na objekat. Ako sadrži vrednost, ta vrednost je literal primitivnog tipa.

Svaka promenljiva mora biti deklarisana pomodu naredbe za deklaraciju promenljivih. Prilikom deklarisanja određuje se tip promenljive. Pored određivanja tipa, naredbom za deklaraciju mogu biti zadate i početne vrednosti promenljivih. Lokalne promenljive moraju imati početnu vrednost (inače se javlja greška pri prevođenju). Instancne i klasne - ne moraju. Ako nemaju, podrazumevane vrednosti su: null -instancna, 0-numerička, ‘\0’ - znakovna, false – logička

(OOP) Izrazi Izraz - se koristi da: donese (iz memorije) izračuna smesti (u memoriju) vrednost. Izraz čine operandi razdvojeni operatorima i separatorima. Kao operandi u izrazu, pojavljuju se: literali, promenljive, ključne reči i drugi izrazi. Operatori su niske sastavljene od specijalnih znaka ili slova. Separatori su specijalni znaci koji se koriste za razdvajanje pojedinih komponenti izraza.

(OOP) Naredbe • Naredba - konstrukcija pomodu koje se kontroli,e tok programa i odvijanje operacija u

Javi. Naredbe se međusobno odvajaju ; (tačkom-zapetom). • Naredba deklarisanja promenljivih sastoji se iz navođenja tipa i spiska promenljivih

razdvojenih zapetama. Primer:

Page 11: (OOP) Razvoj i nastanak programskog jezika Java Sun

int n; double x, y, z; • Naredba dodele se zasniva na operatorima dodele. Primeri: x=y; a=b=c=3.0; x += 2; a *= 2+y; • Naredba prikazivanja (štampanja) stringa na standardnoj izlaznoj jedinici ima jedan od

oblika : System.out.print(string); /* Bez prelaska u novi red */ System.out.println(string); /* Sa prelaskom u novi red nakon stampanja stringa */ • Blok (sastavna naredba) -skup naredbi između velikih zagrada. Može stajati svuda gde

stoji prosta naredba. Primer: int a=20; { x.boja = “crvena”; n++; System.out.println(“Vrednost za n je”+n); }

(OOP) Metodi Metodi se pojavljuju telu klase. Oni sadrže deklaracije lokalnih promenljivih i druge Java-naredbe koje se izvršavaju pri pozivu metoda. Broj argumenata u metodu je uvek je fiksiran i navodi se u zagradama iza imena metoda. (Broj argumenata može biti 0.) Prilikom deklaracije metoda u klasi, navodi se tip argumenata. Pri pozivu metoda navode se stvarni argumenti. PRIMER: class Prva { ……… int duzinaVektora(int x, int y) { …….. } …………………… primerak.duzinaVektora(10, 20); ………………..

(OOP) Instancne promenljive i metodi Komponente objekta su: instancne promenljive i metodi. Komponentama objekta pristupa se preko svemodne tačka-notacije (a) Pristup promenljivim primerka: prviObjekt.prom; prviObjekt.prom.stanje; prviObjekat.prom.stanje = true; (b) Pristup metodima:

Page 12: (OOP) Razvoj i nastanak programskog jezika Java Sun

prviObjekat.stampajMe(); prviObjekat.uzmiIme(); prvi objekat.postaviVelicinu(20); prviObjekat.prom.metod3(arg1, arg2, arg3); // pozvan preko promen. prviObjekat.getClass().getName(); // metod iz metoda

(OOP) Klasne promenljive i metodi class ClanPorodice { static String prezime=“Smoric”; // klasna promenljiva int uzrast; // Instancna promenljiva. String ime; // Instancna promenljiva ………………… ClanPorodice otac = new ClanPorodice(); ClanPorodice sin = new ClanPorodice(); ………………… } Za pristup klasnoj promenljivoj može se koristiti ime klase ili ime neke instance klase. Klasni metodi

Odnose se na celu klasu, a ne na instance. Prepoznaju se po ključnoj reči static. Pozivanje klasnih metoda vrši se pomodu tačka-notacije i to na 2 načina: (a) pomodu imena klase; (b) pomodu instanci te klase;

(OOP) Reference na objekte

Kada se kreira objekat, promenljiva kojoj se dodeljuje predstavlja pokazivač (referencu) na taj objekat. Pri prenosu u metod, prenose se reference, a ne sam objekat. (Obrnuto važi za primitivni tip. Tu promenljiva sadrži podatak i prenos u metod se vrši po vrednosti.)

(OOP) Konvertovanje objekata i primitivnih tipova Može se govoriti o: (a) konvertovanju primitivnih tipova u primitivne (imetipa) vrednost (int)(x/y); (b) konvertovanju objekata u objekte Mogude je samo kod klasa povezanih nasleđivanjem. (imeklase) objekat Primer: Vozilo x; Kamion y; y = new Kamion(); x= (Vozilo) y; (c ) konvertovanju primitivnih tipova u objekte i obrnuto. U principu, nije mogude. U paketu java.lang postoje klase: Integer, Float, Boolean, … Integer ceoObj= new Integer(45);

Page 13: (OOP) Razvoj i nastanak programskog jezika Java Sun

int ceo = ceoObj.intValue(); (OOP) Poređenje objekata. Određivanje klase objekta i pripadnosti objekta datoj klasi.

Poređenje objekata Mogude je primenjivati 2 operatora za poređenje: = = != Ne postoji mogudnost preopteredenja operatora u Javi. Određivanje klase objekta String ime = objekat.getClass().getName(); Pripadnost objekta klasi “bilo sta” instanceof String // true Point tacka = new Point(10,10); tacka instanceof String // false

(OOP) Definicija klase class NovaKlasa { ……….. } ili class NovaKlasa extends NadKlasa { ………….. }

(OOP) Definicija promenljivih (polja) Promenljive mogu biti: instancne, klasne, finalne (konstante), … Definicija i uloga instancnih promenljivih class Knjiga extends PrimerakBibloteke { String naslov; int brojStrana; String izdavac; ……………….. }

Definicija i uloga klasne promenljive Karakteriše ih ključna reč static u deklaraciji.

static int kolicina; static final float PI = 3.141592; static String naziv= “Desno”;

Definicija i uloga konstante Konstanta je promenljiva čija vrednost se ne može menjati. Definiše se pomodu ključne reči: final. Primeri: final float STOPA = 2.3; final boolean NETACNO = false; final int brojStrana = 200;

(OOP) Promenljiva this

Page 14: (OOP) Razvoj i nastanak programskog jezika Java Sun

Ključna reč this koristi se u metodima da označi objekat na koji se metod primenjuje. Dakle, this je referenca na objekat koji prima poruku. Primer1: public void brisi(){ this.x =0; this.y=0; } Ovde se ključna reč this može izostaviti. Primer2: public void pomerii(double x, double y){ this.x =x; this.y=y; } Ovde je ključna reč this neophodna da podvuče razliku između instancnih promenljivih i parametara metoda. Primeri u kojima se koristi ključna reč this: t = this.a; // a -instancna promenljiva tekudeg objekta this.prvimetod(this); // poziva se metod return this; //vrada se tekudi objekt iz metoda U nekim od navedenih slučajeva može se izostaviti: t = a; prviMetod(this); U nekima ne može: return this;

(OOP) Opseg važenja promenljivih Opseg važenja promenljive je deo programa u kojem ime promenljive može da se koristi. U načelu, opseg važnosti promenljive je u blok u kojem je definisana od mesta gde je definisana. Primer: { int a=1; //ovde se može pozivati a, ali ne i b! { //ovde se može pozivati a, ali ne jos b! int b=2; // ovde se mogu pozivati a i b! } // ovde se može pozivati a, ali ne i b! } // ovde se ne mogu koristiti niti a, niti b!

Page 15: (OOP) Razvoj i nastanak programskog jezika Java Sun

Međutim, isto ime se može upotrebiti i u nekom unutrašnjem bloku. Primer: class Opseg { int n, probna = 10; void stampaProbnu() { int probna = 30; System.out.println(“Lokalna probna = “+probna); } n=probna; } Da bismo u metodu stampProbnu() pristupili instancnoj promenljivoj probna, treba da napišemo: this.probna (OOP) Definicija i upotreba metoda

Metod, u definiciji klase, je imenovani samostalni blok koda koji obično operiše nad promenljivima koje se pojavljuju u definiciji klase. Metodi mogu biti instancni (metod primerka) i klasni (statički). Klasni metodi se ne mogu odnositi na instancne promenljive. (Ne mora postojati ni jedna instanca, a metod se može koristiti!) Metod main(String args[]), koji je neophodan u aplikacijama, je uvek klasni. (Pre njegovog startovanja ne postoji ni jedna instanca!) Ne pravi se kopija metoda za svaku instancu, ved se instancni metod jedanput definiše u klasi za sve instance. Metod je samostalni blok koda koji ima ime i svojstvo višestruke upotrebljivosti. Metodi omogudavaju da se dugačak kod razbije u manje celine i na taj način doprinose preglednosti koda. Manje celine u programima često se nazivaju moduli. Kažemo da metodi omogudavaju modularno programiranje. Metod može, ali ne mora vratiti vrednost. Ako vrada vrednost, metod se obično poziva u izrazu. Ako metod ne vrada vrednost, njegov povratni tip je void. Osnovna struktura metoda: povratni- tip imeMetoda(arg1, arg2,…,argn) { //kod metoda } Da bi metod vratio vrednost, mora imati bar jednu naredbu oblika return izraz Ime metoda zajedno sa tipom i redosledom parametara čini potpis metoda. Potpis dva metoda u klasi mora biti različit, kako bi kompajler mogao da odredi koji metod se poziva. povratni-tip imeMetoda(arg1, arg2,…,argn) { // Kod metoda

Page 16: (OOP) Razvoj i nastanak programskog jezika Java Sun

} Prilikom poziva metoda, na mesto formalnih argumenata (parametara), navode se stvarni argumenti. Kod navođenja formalnih argumenata, za svaki argumnet mora se navesti tip, dok se prilikom poziva metoda, navode samo stvarni argumenti, bez navođenja njihovog tipa.

U metodu se mogu koristiti 4 potencijalna izvora podataka: • Argumenti prosleđeni metodu, • Instancne i klasne promenljive, • Lokalne promenljive, definisane u telu metoda i • Vrednosti drugih metoda koji su pozvani u tekudem.

(OOP) Preopteredenje metoda Definisanje metoda sa istim imenom, ali različitim parametrima (sa različitim potpisom!) naziva se preopteredenje metoda Primer: class Pravougaonik { int x1=0; int x2 = 0 int y1 = 0; int y2 = 0; Pravougaonik gradi(int x1, int y1, int x2, int y2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; return this; } Pravougaonik gradi (Point goreLevo, Point doleDesno) { x1 = goreLevo.x; y1= goreLevo.y; x2 = doleDesno.x; y2 = doleDesno.y; return this; } Pravougaonik gradi (Point goreLevo, int l, int h){ x1 = goreLevo.x; y1 = goreLevo.y; x2 = goreLevo.x + l; y2 = goreLevo.y + h; return this; } ///

Page 17: (OOP) Razvoj i nastanak programskog jezika Java Sun

void printPrav() { System.out.println(“Pravougaonik :*“(+x1+”,”+y1+ ”) , (”+x2+”,”+y2+”)+”); } public static void main (String args[]){ Pravougaonik p = new Pravougaonik(); p.gradi(10,20, 30,40); p.printPrav(); p.gradi(new Point(10,10), new Point(30,30)); p.printPrav(); p.gradi (new Point (10,10), 20, 30); p.printPrav(); } }

(OOP) Konstruktori Prilikom kreiranja konkretne instance neke klase (preko operatora new), uvek se poziva konstruktor te klase. Konstruktor metod sami definišemo. Ukoliko ga nismo definisali, kompajler poziva podrazumevani konstruktor, koji inicijalizuje instancne i klasne promenljive na podrazumevane vrednosti. Konstruktor

• nikad ne vrada vrednost (za njega se nikad ne navodi povratni tip) • uvek ima isto ime kao i klasa.

• Konstruktori mogu biti preopteredeni, isto kao i ostali metodi. • Ako postoji dodatni konstruktor (koji ima neke nove osobine),u njemu se može pozvati

ved postojedi sa: • this(arg1, arg2, …);

Primer: class Knjiga { String autor; String maslov; int brojStrana; Knjiga(String a, String n, int bs) { autor = a; naslov = n; brojStrana = bs; } void stampaPod(){ System.out.println(“Autor: ”+autor); System.out.println(“Naslov: ”+naslov); System.out.println(“Bro strana: ”+brojStrana);

Page 18: (OOP) Razvoj i nastanak programskog jezika Java Sun

} public static void main(String args[]){ Knjiga jedina; jedina = new Knjiga(“Gospodjica”,”Ivo Andric”, 257); jedina.stampPod(); } } (OOP) Prevazilaženje metoda

Proces definisanja metoda u potklasi koji ima isto ime kao i metod u natklasi naziva se prevazilaženje metoda. Pozivanje metoda iz natklase (koji je predefinisan u potklasi) realizuje se korišdenje ključne reči super. Primer: void mojMetod( int x, int y){ // neka naredbe super.mojMetod(x,y); // jos naredbi }

(OOP) Prevazilaženje konstruktora U principu ne može biti izvršeno prevazilaženje konstruktor-metoda jer ima isto ime kao klasa u kojoj se nalazi. Konstruktor iz natklase može se pozvati samo preko ključne reči super. super(arg1, arg2, …) Primer: import java.awt.Point; class MojaTacka extends Point { String ime; MojaTacka (int x, int y, String ime){ super(x,y); this.ime = ime; } }

(OOP) Finalizator Ovaj metod se poziva pri oslobađanju memorije. Ne,to suprotno konstruktor metodu. Pomaže skupljaču otpadaka. Poziva se sa: finalize(). Može se prevazidi u sopstvenoj klasi sa: protected void finalize() { …… } Nije neophodno njegovo korišdenje.

Page 19: (OOP) Razvoj i nastanak programskog jezika Java Sun

(OOP) Rekurzija u metodima Java omogudava rekurzivne pozive. Realizuju se tako što metod poziva samoga sebe.

(OOP) Prevođenje objekta u string Ponekad je pogodno napraviti string reprezentaciju objekta, zbog jednostavnog tekstualnog prikaza. Za te svrhe treba prevazidi metod public String toString(){ …. }

(OOP) Modifikatori public, package, protected i private 1. public - omogudava vidljivost promenljive (ili metoda u svim klasama (čak iz različitih

paketa). 2. package -služi za sužavanje vidljivosti promenljivih i metoda. Karakteriše ga

nepotrebnost navođenja modifajera. To je podrazumevani nivo zaštite. Ako se poku{a pristup elementima iz drugih paketa, nastaje gre{ka pri kompajliranju.

3. protected - slededi nivo vidljivosti. Reguliše odnsos između klasa i njenih potklasa (trenutnih i bududih). Ovim se saopštava da je dozvoljeno korišdenje metoda i promenljivih samo od strane klasa istog paketa ili potklasa izvan paketa (ako klasa u paketu ima potklase izvan paketa).

4. private - najviši nivo zaštite. Metodi i promenljive sa ovim modifajerom ne mogu biti vidjeni ni iz jedne druge klase osim one u kojoj su definisani (čak ni iz potklasa).

(OOP) Modifikatori static, final i abstract Ovi modifajeri utiču na promenljive i metode modifikujudi njihovo značenje.

staitic modifajer i njegovo korišdenje kod klasnih promenljivih i metoda. final - modifajer kada se primeni na klase, ona ne može imati potklase; kada se primeni na promenljive, one su konstante; kada se primenina metod, on ne može biti predefinisan u potklasi. abstract -modifajer. Koristi se za definisanje apstraktnih klasa i metoda. Klasa je apstraktna ako nema konkretnih objekata, ve} slu`i za obezbe|ivanje informacija za potklase (koje mogu imati objekte).

(OOP) Apstraktne klase i metodi Apstraktne klase i metode karakterise ključna reč: abstract. Klasa mora biti apstraktna ako sadrži bar jedan apstraktni metod. Klasa može biti apstraktna ako ne sadrži ni jedan apstraktni metod. Apstraktne klase služe za objedinjavanje svojstva nekih konkretnih klasa. Instanca konkretne klase može da koristi neapstraktne metode apstraktne nadklase, koji nisu predefinisina u konkretnim klasama. Ona može biti deklarisana kao instanca apstraktne klase. Međutim, ona može biti kreirana samo pomodu konstruktora konkretne klase.

(OOP) Aplikacija i main-metod Svaka aplikacija se sastoji iz određenog broja klasa i obaveznog metoda main. Telo main-metoda ima oblik: Ime Ima niz argumenta tipa String

Page 20: (OOP) Razvoj i nastanak programskog jezika Java Sun

public static void main (String args*+) , ….- javni klasni ne vrada vrednost U Java-aplikaciju se mogu uneti argumenti sa komandne linije.Svi argumenti su tipa String i prihvataju se preko niza args! C:> java MojaAplikacija prvi 3 5.34 C:> java Prvi Ovo su argumenti C:> java Prvi “Ovo su argumenti” Primer nekorektnog korišdenja argumenata class SrednjaVred{ public static void main (String args[]){ int suma; for (int i=0; i<args.lenghth; i++){ sum += args[i]; } System.out.println(“Suma je: “, suma); System.out.println (“srednja vrednost je: “+ (float) suma/args.length); } } Ovo ne može ovako da funkcioniše zbog toga što su argumenti tipa String. Mora se izmeniti naredba za sabiranje u: sum += Integer.parseInt(args[i]);

(OOP) Nizovi Niz - celina koju čini kolekcija podataka istog tipa. To je objekat sa kojim se operiše kao i sa drugim objektima. Sastoji se iz elemenata istog tipa (primitivnog ili referentnog). Deklarisanje nizova (postoje 2 načina): Primeri: int pozicija[]; String niska[]; Knjiga naslov[]; // Iste deklaracije na drugi način int [] pozicija; String [] niska; Knjiga [] naslov Kreiranje nizova Postoje 2 načina: (1) pomodu operatora new, (2) nabrajanjem članova Primeri: Point [] tacke = new Point[20]; // prvi nacin int [] brojac = new int[100]; // prvi nacin

Page 21: (OOP) Razvoj i nastanak programskog jezika Java Sun

// Sledi 2. nacin kreiranja String [] godDoba; godDoba =,“prolece”, “leto”, “jesen”, “zima”-; int celi[] = { 23, 46, -123, 17, 36, -12}; Pristup članovima niza Numerisanje članova niza uvek počinje od 0. Članovima niza pristupamo pomodu: ImeNiza[indeks] ImeNiza - ime koje se pojavljuje u deklaraciji indeks – celobrojni literal ili izraz

(OOP) Višedimenzionalni nizovi Višedimenzionalni nizovi su nizovi nizova. Rad sa višedimenzionalnim nizovima Deklaracija se vrši slično kao kod jednodimenzionalnih nizova: int dvo [][] ={{1,2,5}, {6,7,8}}; float tro [][][]; Vozilo[] yugo= new Vozilo[10]; int [][] mat; Kreiranje se vrši pomodu operatora new ili navođenjem članova niza kao u prvoj naredbi. int mat = new int[10][20]; float tro = new float[10][8][20]; Pristup članovima višedimenzionalnih nizova se vrši isto kao članovima jednodimenzionalnih. mat[0][3] = 5; x= mat[7][15]; tro[0][0][0] =1; yugo[4] = new Vozilo();

(OOP) Blok Blok je niz naredbi ograđen vitičastim zagradama. Primer: void metod1() { int k=30; { int n =10; System.out.println(“k = “+k); System.out.println(“n = “+n); } } Promenljiva n je lokalna i nije vidljiva izvan unutrašnjeg bloka. (OOP) Upravljačke strukture grananja

if-naredba Ima jedan od oblika:

• if (uslov) naredba ; • if (uslov) naredba; else naredba; • Umesto if-naredbe može se upotrebiti operator ? : • (uslov) ? then-grana : else-grana

switch-naredba

Page 22: (OOP) Razvoj i nastanak programskog jezika Java Sun

Umesto: if (oper = =‘+’) sabrati(arg1, arg2); else if (oper = = ‘-’) oduzeti (arg1, arg2); else if (oper = = ‘*’) pomnoziti(arg1,arg2); …………………… preglednije je koristiti slededu naredbu: switch(test) { case vrednost1: Rezultat1; break; case vrednost2: Rezultat2; break; …… default: PodrazumevaniRezultat; // opciono }

(OOP) Cikličke upravljačke strukture for-petlja Ima oblik: for (inicijalizacija; test; izmena) naredba Bilo koja komponenta for-naredbe može biti izostavljena, ali simbol ; ne može biti izostavljen. Primeri: for (i=0; i<niz.length; i++) niz[i]=0; for (int i=0; i<100; i += 2) { a[i]=i+1; b[i]=3; } while-petlja (petlja sa preduslovom) Ima oblik: while (uslov) naredba Primer: int brojac = 0; while (brojac < 10) { f = x-brojac; brojac++; }

Page 23: (OOP) Razvoj i nastanak programskog jezika Java Sun

do-while petlja (petlja sa postuslovom) Ima oblik: do {Naredbe} while (uslov); Primer: int k = 0; do { System.out.println (“k = “+k); k++; } while (k<=10);

(OOP) Upravljačke naredbe break i continue break-naredba Služi za izlaz iz ciklusa (prekid toka) Primeri: int brojac =0; while (brojac <niz.length) { if(niz[brojac]= =0) { break; } vektor[brojac] = niz[brojac++]; } continue-naredba Služi za nastavljanje ciklusa (toka programa) br1 = 0; br2 = 0; while (br1 < niz.length) { if (niz[br1] = = 0) continue; vektor[br2++]=niz[br1++]; } Obe naredbe (break i continue) mogu imati labele (identifikator koji mora postojati negde u programu iza kojeg sledi simbol: “:” pocetak: for (int i = 0; i < 10; i++) { while ( k < 40) { if (i*k= =100) break pocetak; ……………. } }

Page 24: (OOP) Razvoj i nastanak programskog jezika Java Sun

(OOP) Neki pojmovi u vezi sa WWW

Server - program na nekom računaru mreže koji čeka da se web-čitač spoji sa njim i napravi neki zahtev (obično za nekom datotekom).

HTTP (Hyper Text Transfer Protocol) - specijalni “jezik” za prenos hipertekst dokumenata.

CGI (Common Gateway Interface) - načina za pokretanje programa na WEB-serveru preko čitača korisnika. Omogu-ava interaktivnost izme|u korisnika i servera.

CGI-skript -Program pokrenut preko web-čitača, a koji se izvršava na serveru. Omogudava: pretraživanje baza podataka na serveru, prihvatanje komentara korisnika, anketiranje, kupovinu ...

Dinamički HTML - jezik za opis prezentacija koje omogudavaju nekakav vid interaktivnosti. Podršku dinamičkom HTML-u pružaju: Client pull, Server push, JavaScript, Java (preko apleta), VB Script, ActiveX, …

JavaScript - uveden od strane Netscape-a (verzija 2.0). (Prihvaden u MS Explorer-u 3.0). Služi za pisanje skriptova. Skriptovi se uključuju u HTML-dokument i interpretiraju se od strane Web-čitača. Skriptovi se uključuju pomodu oznake: <SCRIPT Language = ‘jezik’, SRC=URL> ….</SCRIPT> Umesto ‘jezik’, piše se: “JavaScript”

(OOP) Poređenje jezika Java i JavaScript Java 1.Prevodi se na serveru. Aplet se izvršava na klijentu 2.OO-jezik. 3. Podržava: objekte, klase, nasledjivanje. 4. Aplet odvojen od HTML-dokumenta. 5. Promenljive se moraju deklarisati. 6. Statičko vezivanje (reference objekata moraju postojati za vreme prevođenja) 7.Siguran. Ne može da piše na hard-disk korisnika.

JavaScript 1. Interpretira se od strane klijenta web-čitača 2. OO-jezik. 3. Postoje ugrađeni objekti. 4. Integrisan u HTML-dokument 5. Promenljive se ne moraju deklarisati. 6. Dinamičko vezivanje referenci (objekti se povezuju u vreme izvršavanja) 7. Siguran. Ne može da piše na hard-disk korisnika.

(OOP) Rad sa apletima u Javi Omogudavaju da Web postane dinamički. Web-čitač obezbeđuje: prozor, rukovanje događajem, grafičku podršku, interfejs. Sigurnost za korisnika. Ne mogu: pisati u korisnički sistem datoteka, komunicirati sa drugim serverima, izvršavati programe na korisničkom sistemu, koristiti programe sa lokalne platforme (dll).

(OOP) Klasa Applet i HTML tag za aplete Aplet se dovlači sa Web-servera i izvršava na lokalnom sistemu. Svaki aplet je potklasa klase Applet paketa java.applet.* Počinje sa: public class MojaKlasa extends java.applet.Applet{

Page 25: (OOP) Razvoj i nastanak programskog jezika Java Sun

…….. } ili sa: import java.applet.*; public class MojaKlasa extends Applet{ ……. } Svaki konkretan aplet (koji napiše korisnik) je potklasa klase Applet i niz metoda iz ove klase je primenjiv na novokreiranu potklasu. Aktivnost apleta određuje se pomodu ovih metoda. (Aplet-klasa obezbeđuje interfejs između apleta i njegove okoline.) Vedina metoda klase Applet treba da bude predefinisana u apletu. Pet najčešde korišdenih metoda su:

public void init(){ …. } public void start() { ….. } public void stop() { ….

} public void destroy(){ …. } import java.awt.Graphics; public void paint (Graphics g){ ….. }

APPLET-tag: <APPLET ALIGN = LEFT | CENTER | RIGHT CODE = apletfajl CODEBASE = URL-apleta HEIGHT = visina WIDTH = sirina VSPACE = prostor HSPACE = prostor > <PARAM NAME= ime VALUE = vrednost> …………………………………………… </APPLET>

(OOP) Grafika u apletima Apleti su grafički orijentisani i skoro redovno je potrebno predefinisati paint-metod. Potrebno je napisati: import java.awt.Graphics; public class MojAplet extends java.applet.Applet{ …. } Ili: import java.applet.*; import java.awt.*; public class MojAplet extends Applet { ……..

Page 26: (OOP) Razvoj i nastanak programskog jezika Java Sun

} (OOP) Osnovi metodi za crtanje u apletima

1. Crtanje prave: g.drawLine(xp, yp, xk, yk) 2. Crtanje pravougaonika: Postoje 3 vrste pravougaonika pravilan zaobljen 3D-pravougaonik Za svaki od njih postoje po 2 metoda: jedan za crtanje konture, drugi za popunjavanje. Za pravilan pravougaonik koriste se metodi: g.drawRect(xp,yp, duzina, visina) g.fillRect(xp, yp, duzina, visina). Zaobljen pravougaonik ima zaobljene uglove. Koriste se metodi: g.drawRoundRect(xp,yp, duzina, visina, dl, hl) g.fillRoundRect(xp,yp, duzina, visina, dl, hl) Za crtanje 3D-pravogaonika: g.draw3DRect(xp,yp,duzina, visina, ind) g.fill3DRect(xp, yp, duzina visina, ind) gde je ind = false , za spušteni ind = true , za podignuti. 3. Crtanje poligona Poligon je niz linija. Može se definisati objekat poligon ili zadati: - niz x-koordinata - niz y-koordinata - ukupan broj tačaka i koristiti metodi: g.drawPolygon(xniz, yniz, brojTacaka) g.fillPolygon(xniz, yniz, brojTacaka) ili g.drawPolygon(poligonObjekt) g.fillPolygon(poligonObjekt) 4. Crtanje elipse: Crta se slično kao pravougaonik: g.drawOval(xp, yp, duzina, visina) g.fillOval(xp, yp, duzina, visina) 5. Crtanje lukova g. drawArc(xp,yp, duzina, visina, pocUgao, velicinaugla) g.fillArc(xp,yp, duzina, visina, pocUgao, velicinaugla) 6. Kopiranje povšine (pravougaonika) g.copyArea(xp, yp, duzina, visina, xpomak, ypomak) 7. Brisanje pravougaonika

Page 27: (OOP) Razvoj i nastanak programskog jezika Java Sun

g.clearRect(xp, yp, duzina, visina) Da se izbriše ceo pravougaonik za aplet: g.clearRect(0,0, size().width, size().height)

(OOP) Rad sa fontovima u apletima Fontovi su primerci klase java.awt.Font. Font-objekat je određen: nazivom, stilom i veličinom. 1. Naziv fonta može biti neki od uobičajenih (Arial, Garamond, Bodoni, …) i koristide se ako postoji na platformi na kojoj je Java aktivna. Pored ovih, mogu se koristiti ved ugrađeni Java fontovi: TimesRoman, Courier, Helevetica, Dialog i DialogInput. 2. Postoje 3 stila Fonta definisana preko slededih konstanti: Font.BOLD, Font.ITALIC i Font.PLAIN. Stilovi se mogu kombinovati međusobno. 3. Veličina fonta zadaje se u tačkama (points). Font se kreira pomodu konstruktora: Font naziv = new Font(Ime, tip, Velicina); Metodi za rad sa fontovima su: setFont(imeFonta) drawString (String, x,y) i koriste se u klasi Graphics. Fontovi se crtaju. Postoji niz metoda za dobijanje informacija o fontovima. Oni se nalaze u posebnoj klasi FontMetrics. Objekti ove klase kreiraju se preko metoda getFontMetrics() koji ima samo jedan argumnet: font-objekat. Neki od metoda ove klase su: stingWidth(string) - širina stringa u pikselima charWidth(znak) - širina znaka u pikselima getHeight() - vrade ukupnu visinu fonta

(OOP) Rad sa bojama u apletima Java koristi 24-bitni kolor model. Boja se izražava preko kombinacije: (crvena, zelena, plava - RGB model). Svaka od ovih komponenti može imati vrednosti od 0 do 255. Ovaj model se preslikava na platformu korisnika. Konkretna boja je instanca klase Color. Metodi za rad sa bojama: setColor(Color.boja) setBackground(Color.boja) setForeground(Cokor.boja)

Nova boja se može kreirati na slededi način: Color novaBoja= new Color(R,G,B); Umesto celih brojeva, u Color-konstruktoru, mogu se koristiti i realni brojevi iz intervala

[0,1]. Za nalaženje aktuelne boje mogu se koristiti metodi: getColor() (u klasi Garphics), getBackgroubd() i getBackground().

(OOP) Swing - događaji niskog nivoa

Page 28: (OOP) Razvoj i nastanak programskog jezika Java Sun

(OOP) Swing - događaji visokog nivoa Razlike izmedju obrade u proceduralnim programiranju i GUI. GUI zahteva pristup preko događaja. Događaji se registruju j jednom redu (queue) kao strukturi podataka i povezani su sa operativnim sistemom. (Red može biti vezan za OS ili samo konkretnu aplikaciju.) Svaki događaj je primerak klase: java.awt.event.*. Razlikujemo: događaje nižeg nivoa (odnose se na direktnu interakciju korisnika i uređaja) To su potklase java.awt.event: KeyEvent, MouseEvent, WindowEvent, … događaje višeg nivoa (kombinacija nekoliko događaja nižeg nivo) To su potklase java.awt.event: ActionEvent, TextEvent, ItemEvent, ... Za rukovanje događajima najvažniji si metodi koji su definisani u odgovarajudim klasama. (Ovde de biti opisano korišdenje nekih od tih metoda.) Glavni metod (u prvim verzijama Jave) je HendleEvent() koji je definisan u klasi Component. Kada je registrovan događaj u ovom metodu, on se prosleđuje specijalizovanim metodima za obradu kao što su: mouseDown(), MouseUp(), …

(OOP) Swing - 2D grafika Od 1.2. verzije Jave, može se koristiti 2D-grafika koja pruža znatno vede mogudnosti pri crtanju. Oslanja se na java.awt-paket. Mora se importovati java.awt.geom.* Mogu se crtati sve figure, kao i ranije, ali sa argumentima koji su tipa float. Uvek se mora naglasiti da se se operiše sa klasom Float. Mora se kreirati metod za crtanje, pa se onda poziva draw() ili fill()-metod za taj objekati Metodi za crtanje: Line2D.Float (xpf, ypf, xkf, ykf) Rectangle2D.Float(xpf, ypf, duzianf, sirinaf) Ellipse2D.Float(xpf,ypf, duzinaf, sirinaf) Arc2D.Float(xpf,ypf, df,sf, pugaof, ugaof, tip) tip može biti: Arc2D.OPEN, Arc2D.CHORD, Arc2D.PIE Za biranje načina popunjavanja bojom (senčenjem), koristi se klasa: GradientPaint. Konstruktor ima oblik: GradientPaint(xpf, ypf, pocetbaBoja, xkf,ykf, KrajnjaBoja) Može imati i sedmi argument: true (false je podrazumevano) Poziva se preko metoda setPaint(objekat) , gde je objekat iz klase GradientPaint. Za podešavanje linije za crtanje koristi se metod setStroke(…) On ima argument koji je objekat klase BasicStroke u kojoj se navodi: - debljina linije (Float) - završni oblik linije (krunica) tipa Int i može biti: CAP_BUTT CAP_ROUND CAP_SQUARE - Stil spajanja dve linije tipa Int i može biti: JOIN_MITER JOIN_ROUND JOIN_BRVEL.

Page 29: (OOP) Razvoj i nastanak programskog jezika Java Sun

Kao {to se koristi klasa Float, na isti na~in mo`e biti iskori{}ena klasa Double. Svuda u metodima i pozivima klase, treba re~ Float zameniti sa Double. Konstante. takodje treba prilagoditi. U slede}em primeru upotrebljen je metod RoundRectangle2D.Double(…)

(OOP) Izuzetci U raznim programskim jezicima pokušava se sa kontrolom grešaka još u fazi prevođenja programa. Međutim, mnoge greške nastaju u fazi izvršavanja. Problem se često rešava vradanjem nekih vrednosti (return-naredba u C-u) ili postavljanjem nekih flegova. U proceduralnim programskim jezicima nema posebnih mehanizama za kontrolu grešaka. To može da uradi sam programer anlizirajudi svaku sistuaciju u kojoj može da se pojavi grešaka. Ovo je nepraktično jer tada (često) kontrola grešaka zauzima najvedi deo programa pa se od toga ne može videti glavna ideje programa (svrha). U Javi se posebna pažnja poklanja rukovanju greškama, tj. izuzecima. (Prilikom izvršavanja programa ako se pojavi greška, nastaje izuztena situacija, tj. izuzetak.) U skladu sa tim fraza:”Izbačen je izuztatk u programu” odgovara frazi: “Pojavila se grešaka u programu”. U samom jeziku vrši se kontrola grešaka, ali to može da radi i korisnik (da obradjuje izuzetke, da upravlja njima, da saopšti korisniku metda da je moguda pojava greške, da sam generiše izuzetak). Svaki izuzetak u Javi predstavlja primerak klase Throwable ili neke njene potkalse.

(OOP) Kontrolisanje izuzetaka Korisnik može rukovati izuzecima preko try-catch konstrukcije Java-jezika: try {

// Kod koji moze generisati izuzetak

} catch (Tip1 id1) {

//Rukovanje izuztkom tipa 1

} catch (Tip2 id2) {

//Rukovanje izuzetkom tipa 2

} catch (Tip3 id3) {

//Rukovanje izuzetkom tipa 3

……………

finally {

// Obrada koja se uvek relizuje

}

(OOP) Klase sa izuzetcima Postoje 2 velike potklase klase Throwable. To su: Error i Exception. Svaka od njih ima svoje potklase. Primerci klase Error i RunTimeException i njihovih potklasa mogu nastati bilo gde u programu i obično ih programer ne generiše direktno. Tipičan primer je greška OutOfMemoryError. Ove vrste grešaka su najčešde fatalne i nema svrhe “hvatati ih”. (I ako se takva greška otkrije, ne može se nesto mnogo uraditi.) Ove greške se retko javljaju, ali Java i njih kontroliše i saoptava kada se pojave. Izuzeci iz klasa Error i RunTimeException ne treba da budu deklarisani jer se mogu pojaviti bilo gde u programu. Delimična struktura klasa sa izuzecima prikazana je na slici.

Page 30: (OOP) Razvoj i nastanak programskog jezika Java Sun

Interesantni su primerci klase Exeption. Oni se mogu svrstati u tri vrste klasa (kao što se vidi sa slike). Najiteresantniji su izizeci iz klase IOExeption. U klasu Exeption svrstaju se i izuzeci koje sami generišemo.

(OOP) Deklarisanje izuzetaka u metodu Ako progamer u nekom metodu očekuje pojavu grešaka (izuzetaka), onda na poseban način treba da deklariše taj metod. Na taj način saopštava klijentu (korisniku metoda) koje greške su mogude. To se postiže preko throws-deklaracije. public metodSaIzuzetkom() throws DeljeneNulom { …………….. } Ako metod može izbaciti više tipova izuzetaka, treba ih sve navesti. public boolean moMetod(int x) throws PrviIzuzetak, DrugiIzuz, TreciIzuz { //………. }

(OOP) Kreiranje sopstvenih izuzetaka Izuzetke možemo i sami generisati preko throw-naredbe. Na primer: if (t = = null) throw new MojPrviIzuzetak(); throw new Exception(“Glavni”); Tada se kreira primerak odgovarajude klase kojem možemo da pristupimo preko raznih metoda. Zašto je potrebno da kreiramo sopstvene izuzetke? Postoje 2 situacije kada to može biti od koristi: 1. Želimo da dobijemo dodtane informacije kada se pojavi standardni izuzetak. To postižemo izbacivanjem svog izuzetka. 2. Želimo da se pojavi posebna klasa izuzetaka kada se pojvljuje neka vrsta greške u kodu. Svaka klasa izuzetaka koju kreiramo mora imati klasu Throwable kao natklasu. Najbolje je koristiti njenu potklasu Excepttion. Klasa izuzetaka se može ovako definisati: public class MojIzuzetak extentds Exception {

Page 31: (OOP) Razvoj i nastanak programskog jezika Java Sun

public MojIzuzetak() {} // podrazumevani konstruktor public MojIzuzetak (String s) { super(s) // pozivanje osnovnog konstruktora } } Za{to je potrebno da kreiramo sopstvene izuzetke? Postoje 2 situacije kada to mo`e biti od koristi: 1. @elimo da dobijemo dodtane informacije kada se pojavi standardni izuzetak. To posti`emo izbacivanjem svog izuzetka. 2. @elimo da se pojavi posebna klasa izuzetaka kada se pojvljuje neka vrsta gre{ke u kodu. Svaka klasa izuzetaka koju kreiramo mora imati klasu Throwable kao natklasu. Najbolje je koristiti njenu potklasu Excepttion. Klasa izuzetaka se mo`e ovako definisati: public class MojIzuzetak extentds Exception { public MojIzuzetak() {} // podrazumevani konstruktor public MojIzuzetak (String s) { super(s) // pozivanje osnovnog konstruktora } } Za{to je potrebno da kreiramo sopstvene izuzetke? Postoje 2 situacije kada to mo`e biti od koristi: 1. @elimo da dobijemo dodtane informacije kada se pojavi standardni izuzetak. To posti`emo izbacivanjem svog izuzetka. 2. @elimo da se pojavi posebna klasa izuzetaka kada se pojvljuje neka vrsta gre{ke u kodu. Svaka klasa izuzetaka koju kreiramo mora imati klasu Throwable kao natklasu. Najbolje je koristiti njenu potklasu Excepttion. Klasa izuzetaka se mo`e ovako definisati: public class MojIzuzetak extentds Exception { public MojIzuzetak() {} // podrazumevani konstruktor public MojIzuzetak (String s) { super(s) // pozivanje osnovnog konstruktora } }

(OOP) Unutrašnje klase

Klasa definisana unutar druge klase naziva se unutrašnjom klasom. (Unutrašnje klase se mogu koristiti počev od Java vezije 1.1.). Šta se postiže unutrašnjim klasama? 1. Nevidljiva je za sve ostale klase ( ne mora se brinuti o knfliktu imena klasa) 2. U unutrašnjoj klasi može se pristupati promenljivima i metodama klase koja je obuhvata (što ne mora biti ako je posebna klasa). Prilikom prevođenja, ispred naziva unutrašnje klase, navodi se naziv spoljašnje, a razdvajaju se znakom za dolar. Na primer, prevedena unutrašnja klasa može imati naziv: Spoljasnja$Unutrasnja.class