utorak (v): l3 primenjeno programiranje · programiranje grafičkog korisničkog interfejsa veza...
TRANSCRIPT
12/9/2013
1
Primenjeno programiranjemr Boban Vesin
Četvrtak (P): I čas: 16:45 - 17:30II čas: 17:40 - 18:25III čas: 18:35 - 19:20Učionica U9 ili L3
Utorak (V):I grupa: 14:55 – 16:35II grupa: 16:45 – 18:25L3
2
Primenjeno programiranje� Fond časova: 3+2� Broj ESPB: 6� Ocena znanja (max. broj poena je 100)� Minimum bodova za prolaz: 28+23
Predispitne obaveze 55 poena
Prisustvo na predavanjima i vežbama 5
Provera znanja u toku nastave 30
Ostale aktivnosti i učešće studenata u radu na predavanjima i vežbama 10
Praktičan rad 10
Završni ispit 45 poena
Pismeni ispit 45
3
Sadržaj predmeta� Razvoj i podele programskih jezika� Metode projektovanja programa� Klasifikacija tipova podataka� Osnovni koncepti sintakse programskog
jezika� Tipovi podataka programskog jezika� Kontrola programskog toka� Objektni koncepti programskog jezika� Programiranje grafičkog korisničkog
interfejsa� Veza programskog jezika i baze podataka� Kreiranje poslovnih programa
4
Literatura
� Materijal sa predavanja i vežbi za predmet Primenjeno programiranje na sajtu Škole
� Lemay L., Cadenhead R., Java Naučite za 21 dan, Kompjuter biblioteka
� Eckel B., Mislite na Javi, Mikro knjiga� Dokumentacija sa sajta
http://www.netbeans.org/
5
Tehnologije
� Programski jezik: Java
� Razvojni alat: NetBeans 7.0.1
� Sistem za upravljanje bazama
podataka: MySql 5.0 (integrisan u
sistemu xampp 3.3.1)
6
NetBeans 7.0.1
12/9/2013
2
7
Programski jezici i programiranje
� Algoritmi i programiranje� Algoritam je konačan, uređen skup,
nedvosmislenih izvršnih koraka za rešavanje određenog problema u konačnom vremenskom periodu sa konačnom količinom podataka
� Programski jezici definišu skup instrukcija, njihovu sintaksu (format instrukcije i pravila kombinovanja instrukcija u veće celine) i semantiku instrukcija (značenje instrukcije i akciju u programu koju izvršava)
� Program predstavlja sekvencu instrukcija napisanih u nekom programskom jeziku koje se mogu prevesti u instrukcije koje računar može direktno izvršiti (mašinske instrukcije)
8
Programski jezici� Generacije programskih jezika
� Mašinski jezik (u binarnom obliku)� Asemblerski (simbolički) jezik i
makroasemblerski jezici – simbolične oznake� Proceduralni programski jezici (jezici visokog
nivoa, treće generacije): Pascal, c, c++, Java, Basic, C#
� Neproceduralni programski jezici (deklarativni programski jezici, jezici vrlo visokog nivoa, 4. generacije): Prolog, SQL, generatori programa, itd
� Jezici veštačke inteligencije i prirodni programski jezici
9
Programski jezici
� Imperativni ili proceduralni programski jezici� FORTRAN, COBOL, Basic, Pascal, Ada
� Objektno-orijentisani programski jezici� SIMULA, Smaltalk, C++, Java, C#
� Deklarativni (logički) programski jezici� Prolog
� Funkcionalni programski jezici� LISP, Scheme, ML
10
Programski jezik Java� U jesen 1995. godine Sun Microsystems
prvi put je predstavio programski jezik Java� Java je objektno-orijentisani, nezavistan od
platforme, bezbedan programski jezik, � • Objektno-orijentisano programiranje
(OOP) je metodologija razvoja softvera u kojoj se program:� konceptualizuje pomoću grupe objekata koji
zajedno funkcionišu� objekti se kreiraju korišćenjem šablona - koji se
nazivaju klase.� programski jezik Java je u potpunosti objektno-
orijentisan.
11
Programski jezik Java
� Platformska nezavisnost je mogućnost programa da se izvršava bez modifikacija u okviru različitih radnih okruženja.� java programi se prevode u format koji se
naziva bajtkod.� bajtkod - u okviru bilo kog operativnog sistema
može da izvrši bilo koji softver ili uređaj koji sadrži interpreter programskog jezika Java
� Nekoliko popularnih razvojnih okruženja: JBuilder, Eclipse, NetBeans
� Java Development Kit - besplatan (http://java.sun.com) 12
Programski jezik Java� Objektno-orijentisano programiranje je
pristup razvoju račuarskih programa koji modeluje objekte iz realnog sveta.
� Neophodno je prvo naučiti na koji način Java implementira principe objektno-orijentisanog programiranja:� organizovanje programa pomoću elemenata
koji se nazivaju klase i postupak kojim se kreiraju objekti na osnovu klasa
� definisanje klase: način na koji treba da se ponaša i atribute koje treba da sadrži.
� međusobno povezivanje klasa - nasleđivanje i povezivanje klasa korišćenjem paketa i interfejsa
12/9/2013
3
13
Programski jezik Java� Sav izvorni kod je pisan u tekstualnim
fajlovima sa ekstenizijom: .java� Izvorni fajlovi se kompajliranjem pretvaraju
u fajlove sa extenzijom .class� .class fajl ne sadrži kod razumljiv
procesoru, on sadrži bajtkod� Bajtkod: mašinski jezik Javine virtuelne
mašine (Java Virtual Machine JVM)� Java programi se pokreću uz pomoć JVM-e
14
Programski jezik Java
� Opšta sintaksa samostalne aplikacije u Javi:
class <classname> {
public static void main(String args[]){izrazi;————————;————————;
}
}
� Program koji ispisuje “Hello World”
15
Primer Java programa
class NazivPrograma {
public static void main(String[] args) {
// ispis stringa.System.out.println(“Pozdrav!");
}
}
16
Primer programa
import java.util.*;
public class HelloDate {
public static void main(String[] args) {
System.out.println(“Pozdrav, sad je: ");System.out.println(new Date());
}
}
17
Programski jezik Java
� Kompajliranje:javac NazivPrograma.java
� Kompajler generiše fajl:NazivPrograma.class
� Pokretanje programa:java NazivPrograma
18
Osnovni elementi
� Osnovni elementi Jave pomoću kojih se komponuju složenije konstrukcije jezika:� Identifikatori� Literali� Specijalni simboli� Rezervisane reči
12/9/2013
4
19
Identifikatori
� Koriste se za označavanje različitih konstrukcija programa: promenjivih, metoda, klasa, interfejsa, metoda,...
� Niz slova i/ili cifara koji počinje slovom i razlikuje se od svake rezervisane reči� Slova su sva slova, “$” i “_” � Cifre su 0,1,2,...,9
� Primeri:� temp, var2sp, upisiBroj, pomnoziBrojeve,
i, x, x1, x2, zbir, ime_i_prezime,…20
Literali
� Literale u Javi čine:� Brojevi
� 234� 3.14� 4.0E-74
� znakovne konstante� ‘h’
� stringovske konstante� “Novi Sad”
� logičke konstante true i false
� konstanta null
21
Specijalni simboli> veće | disjunkcija i disjunkcija nad bitovima
< manje ^ eksluzivna disjunkcija
! negacija % ostatak pri deljenju
~ negacija nad bitovima << pomeranje bitova u levo
? uslovni operator >> pomeranje bitova u desno
== jednako >>> pomeranje bitova u desno
<= manje ili jednako = operator dodele
>= veće ili jednako += dodela sa prethodnim sabiranjem
!= nejednako -= dodela sa prethodnim oduzimanjem
&& uslovna konjukcija *= dodela sa prethodnim množenjem
|| uslovna disjunkcija /= dodela sa prethodnim deljenjem
++ povećanje vrednosti za jedan &= dodela sa prethodnom primenom &
-- smanjenje vrednosti za jedan |= dodela sa prethodnom primenom |
+ sabiranje ili predznak ^= dodela sa prethodnom primenom ^
- oduzimanje ili predznak %= dodela sa prethodnom primenom %
* množenje <<= dodela sa prethodnom primenom <<
/ deljenje >>= dodela sa prethodnom primenom >>
& konjunkcija i konjunkcija nad bitovima >>>= dodela sa prethodnom primenom >>>
22
Rezervisane reči
� Koriste se za opis naredbi programa i imaju tačno određeno značenje
abstract default if package thisboolean do implements private throwbreak double import protected throwsbyte else instanceof public transientcase extends int return nulltry const for new switch strictfpcontinue while goto synchronized supercatch final interface short voidchar finally long static volatileclass float native assert
23
Pravila imenovanja:
� Nazivi promenjivih: sadrže slova, brojeve, ‘$’ (simbolom dolara), ili ‘_’ (donjom crtom); ne smeju početi sa cifrom
� Nazivi metoda: glagoli zapisani sa malim početnim slovom, svaka naredna reč naziva se piše velikim početnim slovom� Primer: promeniBojuOkvira()
� Nazivi klasa i interfejsa: Opisni nazivi sa velikim početnim slovom
� Nazivi konstanti: Velikim slovim� Primer: PI, MAX, Font.BOLD, Font.ITALIC
24
Komentari
� Delovi programa koji ne utiču na smisao i suštinu programa i zenemaruju se prilikom prevođenja
Simboli Upotreba
// Od simbola do kraja reda pretvara u komentar
/* ————— */ komentar na proizvoljnom mestu u kodu
/** —————*/ Komentar za automatsko generisanje dokumentacije programa
12/9/2013
5
25
Prosti tipovi podataka� Celobrojni
� int� short� long� byte
� Realni brojevi� float � double
� Znakovni� char
� Logički� boolean
26
Prosti tipovi podatakaProsti tip Veličina Minimum Maximum
boolean — — —
char 16-bit Unicode 0 Unicode 216- 1
byte 8-bit -128 +127
short 16-bit -215 +215—1
int 32-bit - 231 +231—1
long 64-bit -263 +263—1
float 32-bit IEEE754 IEEE754
double 64-bit IEEE754 IEEE754
void — — —
27
Prosti tipovi i promenjive
� Jedini tipovi podataka koji nisu objekti� Nije potrebno kreirati novu promenjivu sa
operatorom new
� Ostali objekti se moraju kreirati uz pomoć operatora new
� Ako promenjivoj nije dodeljena vrednost pre njene upotrebe, kompajler će javiti grešku
28
Deklaracija promenjivih
Deklaracija promenjivih:<tip podataka> <naziv promenjive>Primer: int num1;
Inicijalizacija promenjivih:< tip podataka > < naziv promenjive > = vrednost
Primeri: double num2 = 3.1419;
float initVal ;
int pom, index = 2;
double gamma = 1.2, brightness ;
boolean valueOk = false;
29
Deklaracija promenjivih
Primeri:int i ;
int i , x, y;
double br1 = 4.9, br2 ;
int prva , druga = 2, treca = 5;
float gamma = 1.2, brightness = 3;
boolean uspesanUlaz = false ;
int a = 0, b = 4, c = prva + 9;
double det = ( b* b – 4* a* c);
30
Deklaracija promenjivihint index = 1.2;
boolean retOk = 1;double petCetvrtina = 5 / 4;
float ratio = 5.8f;
double fiveFourths = 5.0 / 4.0;
� 1.2f predstavlja float vrednost sa tačnošću od 7 decimala� 1.2 predstavlja double vrednost sa tačnošću od 15 decimala
Boolean prekinut = false;
naziv tipanaziv promenjive
vrednost
12/9/2013
6
31
Deklaracija promenjivihint index = 1.2; // greška
boolean ok = 1; // greškadouble petCetvrtina = 5 / 4; // ispravno
float odnos= 5.8f; // ispravno
double fiveFourths = 5.0 / 4.0; // ispravno
� 1.2f predstavlja float vrednost sa tačnošću od 7 decimala� 1.2 predstavlja double vrednost sa tačnošću od 15 decimala
32
Naredba dodelex = 1; // promenjivoj x dodeljujemo
vrednost 1
x = 7 + 5;
x = x + 1;
pom = x – y + z;
det = b* b - 4* a* c;
++a; // a = a + 1
b--; // b = b + 1
pom = a + b;
d*=5; // d = d * 5
33
Naredba dodeleint x = 5;
int y = 2;
int z = 4;
z = z/ y;
x = x* y + z;
y = x*( y + z);
System.out.println( z);
System.out.println( x);
System.out.println( y);
34
Naredbe dodele
class primerNaredbeDodele{public static void main(String[] args){
int i = 3;System.out.println(i);i = i + 1;System.out.println(i); i++;System.out.println(i);i = i + 7;System.out.println(i); int k = i + 2;System.out.println(k);System.out.println(i);
}}
35
Naredbe dodele
class primerNaredbeDodele2{
public static void main(String[] args){int i = 3, x = 3, y;System.out.println(i);System.out.println(x); y = x + i;System.out.println(y);x = x – y - i;System.out.println(x);
}}
36
Naredba dodelepublic class Demo {
public static void main (String[] arg) {
boolean b;
b = (2 + 2 == 4);
System.out.println(b);
}
}
12/9/2013
7
37
Naredba dodele
class ArithmeticDemo {public static void main (String[] args){
int result = 1 + 2; // rezultat je 3System.out.println(result);result = result - 1; // rezultat je 2System.out.println(result);result = result * 2; // rezultat je 4System.out.println(result);result = result / 2; // rezultat je 2System.out.println(result);result = result + 8; // rezultat je 10result = result % 7; // rezultat je 3System.out.println(result);
}}
38
Konstante
� U Javi promenljiva se može učiniti konstantnom pomoću ključne rečifinal
� Na primer: final int X = 3;
final int MAX = 9;
final float PI = 3.14;
39
Razlika između i++ i ++i
class PrePostDemo {public static void main(String[] args){
final int MAX = 3;int i = MAX – 2;i++;System.out.println(i); // “1"++i;System.out.println(i); // “3"System.out.println(++i); // “4"System.out.println(i++); // “4"System.out.println(i); // “5“System.out.println(MAX); // “3“
}}
40
Primer 1public class Operacije{
public static void main(String[] args) {int i = 1;System.out.println(“Vrednost promenjive i je: " + i );i++;System.out.println("Vrednost promenjive i je: " + i) ;i = i * 4;System.out.println("Vrednost promenjive i je: " + i) ;i = i / 2;System.out.println("Vrednost promenjive i je: " + i) ;i = i – 1;System.out.println(“Krajnja vrednost i je: " + i + “! ”);
}
Rezultat izvođenja programa je:
Vrednost promenjive i je: 1Vrednost promenjive i je: 2Vrednost promenjive i je: 8Vrednost promenjive i je: 4Krajnja vrednost i je: 3!
41
Primer 2
public class KonverzijaDaljina {
public static void main(String[] args) {
float duzinaMilje; // vrednost duzine u miljamafloat duzinaKilometri; // vrednost duzine u kilometri ma
// konverzija 5 km u milje i stampanje rezultata
duzinaKilometri = 5.0;duzinaMilje = duzinaKilometri * 0.6214;System.out.println("5 km = " + duzinaMilje + " milja" );
// Konverzija 5 milja u kilometre i stampanje rezultat a
duzinaMilje = 5.0;duzinaKilometri = duzinaMilje * 1.609;System.out.println("5 milja = " + duzinaKilometri + " km");
}
}
42
Izrazi & Blokovi� Izraz je komanda koja se završava sa “;”:
ime = “Fred”;
� Blok je niz izraza koji se nalaze između vitičastih zagrada:{
ime1 = “Fred”;
ime2 = “Rale”;
}
� Blokovi mogu sadržati druge blokove
12/9/2013
8
43
Primer 3import java.util.Scanner; // programu je potrebna Sc anner klasapublic class AddTwoInts {
public static void main(String[] args) {
int prviBroj;int drugiBroj;int suma;
Scanner consoleIn;consoleIn = new Scanner( System.in );
System.out.print(“Unesite prvi broj: ");prviBroj = consoleIn.nextInt();
System.out.print(“Unesite drugi broj: ");drugiBroj = consoleIn.nextInt();
sum = prviBroj + drugiBroj;System.out.println(“Zbri je: " + suma);
}}
44
Primer 4program koji će od korisnika tražiti da unese vrednosti stranica pravougaonika i zatimizračunava i štampa vrednost površine tog pravougaonika.
import java.util.Scanner;
public class Zadatak5 {
public static void main(String[] args) {
double stranicaA, stranicaB, povrsina;
Scanner ulaz = new Scanner(System.in);
System.out.print("Unesite stranicu a pravougaonika: ");
stranicaA = ulaz.nextDouble();
System.out.print("Unesite stranicu B pravougaonika: ");
stranicaB = ulaz.nextDouble();
povrsina = stranicaA * stranicaB;
System.out.println("POvrsina iznosi: "+povrsina);
}
}
Grananje i petlje
46
Kontrola toka programa
� Java izvršava izraz za izrazom u redu u kojem su zapisani
� Postoji više Java naredbi koje služe sa kontrolu toka programa:
Naredbe grananja: if, if else, switch
Petlje: for, while, do while
Naredbe prekida: break, continue, return
47
If – naredba grananja� Forma if naredbe:
if ( boolean uslov ){
izraz i ;
}
� Ili:if (boolean uslov )
izraz;
� if naredba utvrđuje istinitost izraza u zagradi i ako je tačna izvršavaju se zadate akcije
if ( x < 10 ) {
x = 10;
}
� Ako je vrednost promenjive x manja od deset tada se promenjivoj dodeljuje vrednost 10 48
Relacioni operatori== jednakost!= nejednakost>= veće ili jednako<= manje ili jednako> veće< manje
12/9/2013
9
49
Primer 1 if naredbe
if (prodaja > 75000){
bonus = 1000;
System.out.println(“Bonus iznosi $1000");
}
System.out.println(“cilj za naredni mesec iznosi: $75000");
50
Primer 2 if naredbeint x = 5;
int y = 7;
if ( x > y){
y = 4;
System.out.println(“x je vece");
}
if ( y > x){
x = 4;
System.out.println(“y je vece");
}
System.out.println(“Vrednost x je: “ + x);
System.out.println(“Vrednost y je: “ + y);
51
Primer 3 if naredbedouble vrednostProdaje = 0.0;
int brojProdaja = 0;
if (vrednostProdaje >= 85000 || brojProdaja > 10){
System.out.println(“Vas bonus je: $2,000.");
}
if (brGodina < 19 && ocena >= 3.0 ){
System.out.println(“primljeni ste");
}
52
If..else naredba
� If...else izraz sintaksa:
if(uslov){
izrazi;
} else{
izrazi;
}
53
if… else
� if … else izraz ispituje tačnost izraza. Izvršava se jedan niz naredbi ako je vrednost true ili drugi niz naredbi ako je vrednost false .if (x != 100) {
System.out.print(“x je promenjena”);
}else {
System.out.print(“x nije promenjena”);
}
54
Primer 3 if naredbe
int x = 5;
int y = 7;
if (x > y){
System.out.println(x + " je veci od " + y);
}else{
System.out.println(x + " nije veci od " + y);}
12/9/2013
10
55
Sintaksa else if
� Koristan za izbor između više mogućnosti:if ( uslov1 ) {
// izvršavanje prvog bloka naredbi
}else if ( uslov2 ) {
// izvršavanje drugog bloka naredbi
} else if ( uslov3 ) {
// izvršavanje treceg bloka naredbi
} else if ( uslov4 ) {// izvršavanje cetvrtog bloka naredbi
} else {
//ako ni jedan od predhodnih uslova nije //zadovoljen vrši se izvršavanje tre ćeg //bloka naredbi
}
56
else if
� Koristan za izbor između više mogućnosti:if ( n == 1 ) {
System.out.println(“ n je jednako 1 ");
}else if ( n == 2 ) {
System.out.println(“ n je jednako 2 ");
} else if ( n > 1 ) {
System.out.println(“ n je vece od 2 ");
} else if ( n < 5 ) {System.out.println(“ n je manje od 5 ");
} else {
System.out.println(“ n je manje od 5 ");
n = 1;
}
System.out.println(“kraj primera! ");
57
Primer 4 if naredbeboolean polozio;
String opis;
if( grade > 90 ){
polozio = true;
opis = “Odlicno!“;
System.out.println(opis);
}else if( grade > 60 ){
polozio = true;
opis = “Vrlo dobro!“;
System.out.println(opis);
}else{
polozio = false;
System.out.println(“Pali ste ispit!");
}
Primer 5 if naredbeif( bod >= 51 && bod <= 60 ){
ocena = 6;
}else if(bod >= 61 && bod <= 70 ){
ocena = 7;
}else if(bod >= 71 && bod <= 80 ){
ocena = 8;
}else if(bod >= 81 && bod <= 90 ){
ocena = 9;
}else if(bod >= 91 && bod <= 100 ){
ocena = 10;
}else if(bod <= 50 && bod >= 0 ){
ocena = 5;
}else{
System.out.println(“Greska!!");
}
58
59
Primer ugnježdene if … else
double x = 200;boolean ok = false;if ( x > 100 ) {
if ( ok == true) {x = x + 100.0; // 1
}else {x = x / 100.0; // 2
}}else{
x = 300.0; // 3}System.out.print(“x = ” + x); // 4
60
Upozorenje…Neispravno!if( i == j )
if ( j == k )System.out.print(“i je jednako k”);
else
System.out.print( “i nije jednako j”);
Ispravno!if( i == j ) {
if ( j == k ){System.out.print(“i jednako k”);
}}else{
System.out.print(“i nije jednako j”);}
12/9/2013
11
61
Zadaci if� Napisati program koji traži od korisnika da unese
iznos svoje mesečne plate. Ako je plata veća od 75000, program treba da ispiše poruku o bonusu u iznosu od 1000 dinara. Ako je plata manja od 75000, program treba da ispiše poruku o bonusu od 2000 dinara
� Napisati program koji traži od korisnika da unese dva broja i kao rezultat ispisuje manji od ta dva.
� Napisati program koji traži od korisnika da unese ime i godine starosti deteta kao i rezultat testa. Ako je ili broj godina veće od šest ili rezultat testa veći ili jednak od 85, program treba da ispiše poruku da je dete spremno za prvi razred. Inače, treba ispisati poruku da dete treba da pokusa naredne godine 62
switch naredba� Sintaksa switch naredbe:
switch(promenjiva){// promenjiva ima celobrojnu ili logicku //vrednostcase(vrednost1):
izrazi;break;
case(vrednost2):izrazi;break;
...default:
izrazi;break;
}
63
switch naredbaswitch ( n ) {
case 1: // izvršavanje prvog bloka naredbibreak;
case 2:// izvršavanje drugog bloka naredbibreak;
default:// ako ni jedan od predhodnih uslova //nije zadovoljen vrši se izvršavanje //tre ćeg bloka naredbi
break;}
64
switch naredbaint dan= 5;switch (dan) {
case 1: System.out.println(“Ponedeljak"); break;case 2: System.out.println(“Utorak"); break;case 3: System.out.println(“Sreda"); break;case 4: System.out.println(“Cetvrtak"); break;case 5: System.out.println(“Petak"); break;case 6: System.out.println(“Subota"); break;case 7: System.out.println(“Nedelja"); break;default: System.out.println(“Neispavan dan");break;
}
65
Primer switchclass SwitchDemo {
public static void main(String[] args) { int month = 8; switch (month) {
case 1: System.out.println("January"); break; case 2: System.out.println("February"); break; case 3: System.out.println("March"); break; case 4: System.out.println("April"); break; case 5: System.out.println("May"); break; case 6: System.out.println("June"); break; case 7: System.out.println("July"); break; case 8: System.out.println("August"); break; case 9: System.out.println("September"); break; case 10: System.out.println("October"); break; case 11: System.out.println("November"); break; case 12: System.out.println("December"); break; default:
System.out.println("Invalid month.");break; }
} }
66
Zadaci Switch� Napisati program koji od korisnika traži unos dva
realna broja a zatim obavlja operaciju u zavisnosti od izbora korisnika. Od korisnika se traži izbor jedne od narednih opcija: zbir, razlika, proizvod, količnik. Pomoć: od korisnika se traži unos broja: 1za zbir, 2 za razliku, 3 za proizvod, 4 za količnik. Potrebno je koristiti promenjivu tipa int koja će primiti odgovarajuću vrednost
� Napisati program koji učitava godinu studija studenta u obliku celog broja i zatim štampa da li je student brucoš, student druge godine, student treće godine ili apsolvent u zavisnosti da li je unet broj 1, 2, 3 ili 4. ponuditi rešenje uz pomoć if naredbe kao i uz switch.
12/9/2013
12
67
for petlja
� Sintaksa for petlje:
for(inicijalizacija; uslov; inkrement){
izrazi;
}
68
for petlja� Izvršavanje n puta
int i;
for ( i = 0; i < n; i++ ) {
// ovaj deo petlje će se izvršiti n puta
// i ide od 0 do n-1
}
� Bolji nacin:
for (int i = 1; i < = n; i++ ) {
// ovaj deo petlje će se izvršiti n puta
// i ide od 1 do N
}
69
Primer 1. for petlja
int i;
for( i = 0; i < 10; i++ ){
System.out.println(i);
}
ili:
for(int i = 0; i < 10; i++ ){
System.out.println(i);
}
70
Primer 2 for petlja
� Napisati program u koji ispisuje sve parne brojeve od 1 do 30
public class parniDo30{
public static void main(String[] args){
System.out.println("parni od 1 do 30 su:");
for (int i = 2 ; i <= 30 ; i += 2){
System.out.println(i);
}
}
}
71
Primer 3 for petlja
� Prikaz parnih brojeva do 100:
int broj = 0;
for (int i = 1 ; i < 50 ; i++) {
broj = broj + 2;
System.out.println(„Redni broj petlje: " + i);
System.out.println(" Parni broj: " + broj );
}
72
Primer 4 for petlja
� Izračunavanje sume brojeva do nekog prethodno definisanog:
n = ulaz.nextInt();
int suma = 0;
for(int i = 2; i <= n; i++){
suma = suma + i;
}
System.out.println(“Suma brojeva do “+ n + “ iznosi:
“ + suma)
12/9/2013
13
73
Primer 5 for petlja
� Izračunavanje faktorijela:
n! = 1*2*3*...*(n-1)*n
n = ulaz.nextInt();
int result = 1;
for(int i = 2; i <= n; i++){
result *= i;
}
System.out.println(n + “! iznosi“+ result)
74
while petlja
� Sintaksa while petlje
while(uslov){
izrazi;
}
75
Primer while naredbe
int x = 0;
while (x<10) {
System.out.println(x);
x++;
}
Primer 1 whileint brojac = 0;
while (brojac < 100) {
System.out.println(„Trenutno:" + brojac );
brojac = brojac + 1;
}
System.out.println(„Gotovo!");
76
Primer 2 while
� Proverava koliko određeni broj puta možemo podeliti sa dva
� / je celobrojno deljenje
int brojac = 0, broj;
while (broj >= 1) {
broj = broj / 2;
brojac ++;
}
System.out.print(„Delili smo ukupno");
System.out.println(brojac + „puta“); 77
Primer 3 while
� Izračunavanje sume brojeva do nekog prethodno definisanog:
n = ulaz.nextInt();
int suma = 0;
int i = 1;
while(i <= n){
suma = suma + i;
i++;
}
System.out.println(“Suma brojeva do “+ n + “
iznosi: “ + suma)
78
12/9/2013
14
79
do while petlja
� Sintaksa do...while petljedo{
izrazi;
}while(uslov);
� Primer:int x = 1;
do {
System.out.println(x);
x++;
}while (x<10);
80
Razlika while i do while petljaint odgovor = 2;while(odgovor == 1) {
System.out.print(„ispravno“);i++;odgovor = odgovor + 1;
}
int odgovor = 2;do{
System.out.print(„ispravno“);i++;odgovor = odgovor + 1;
} while(odgovor == 1)
Primer uporedni FORpublic class Test {
public static void main(String args[]) {
for(int x = 10; x < 20; x = x+1) {
System.out.print("value of x : " + x );
System.out.println("");
}
}
}
81
Primer uporedni whilepublic class Test {
public static void main(String args[]) {
int x = 10;
while( x < 20 ) {
System.out.print(“Vrednost x : " + x );
x++;
System.out.println("");
}
}
}
82
Primer uporedni do whilepublic class Test {
public static void main(String args[]) {
int x = 10;
do{
System.out.print(„Vrednost x : " + x );
x++;
System.out.println("");
}while( x < 20 );
}
}
83 84
break naredba� break naredba izvršava bezuslovni izlazak iz
while , do, for ili switch petlje
� Program proverava da li je broj prostint i, broj = 12;
for ( i = 2; i < broj; i++ ) {
if ( broj % i == 0) {
System.out.println("broj nije prost");
break;
}
}
if (i > broj / 2) {
System.out.println("broj je prost");
}
12/9/2013
15
85
continue
� Može se koristiti samo uz while , do ili for .
� Uzrokuje da petlja bezuslovno pokrene narednu iteraciju
� Primer štampa brojeve koji nisu deljivi sa 3
int maxId = 50;
for ( int i = 0; i < maxId ; i++ ) {
if ( i % 3 == 0 ){
continue;
}
System.out.println(i);
}
86
Primer while naredbe
Fibonacci:class Fibonacci {
public static void main(String[] arg) {
int lo = 1;
int hi = 1;
System.out.println(lo);
while (hi < 50) {
System.out.println(hi);
hi = lo + hi;
lo = hi – lo;
}
}
}
87
Uporedni primerint count = 1;
while (count < 11) {
System.out.println(count);
count++;
}
/////////////////////////////////////////////
int count = 1;
do {
System.out.println(count);
count++;
} while (count < 11);
///////////////////////////////////////////
for(int count = 1; count < 11; count++){
System.out.println(count);
}
Nizovi i metodi
89
Nizovi - array � Niz je lista sličnih elemenata� Niz ima fiksirani:
� naziv� tip� dužinu
� Ove tri stvari se deklarišu prilikom kreiranja niza� Veličina nizova se ne može menjati tokom
izvođenja koda
90
mojNiz ima mesta za 8 elemenata� Elementima se pristupa uz pomoć indeksa
niza� U Javi, prvi element niza je na nultoj poziciji
3 6 3 1 6 3 4 1mojNiz =
0 1 2 3 4 5 6 7
Nizovi
12/9/2013
16
91
Deklaracija nizovaint mojNiz[];
Deklaracija niza: mojNiz kao niza celih brojeva
mojNiz = new int[8];
Rezerviše u memoriji 8 mesta za cele brojeve kojima pristupamo sa:
mojNiz[0] do mojNiz[7]
Moguće je i kombinovati prethodna dva izraza u jednom:int mojNiz[] = new int[8];
92
Dodeljivanje vrednosti� Pristupamo elementima niza uz pomoć indeksa da bi
im dodelili vrednosti:mojNiz[0] = 3;
mojNiz[1] = 6;
mojNiz[2] = 3; ...
� Moguće je kreirati niz i stovremeno mu dodeliti vrednosti:
int mojNiz [] = {3, 6, 3, 1, 6, 3, 4, 1};
Različiti nizovidouble realni[] = new double[5];
realni[0] = 0.5;
realni[2] = 2.1;
realni[4] = realni[0] + realni[2] ;
realni[7] = 2.1; // greška
String reci[] = new String[5];
reci[4]= “kupus”;
reci[2]= reci[4] + “ salata”;
int celiBrojevi[] = new int[10];
celiBrojevi[0] = 13;
celiBrojevi[7] = celiBrojevi[0] + 35;
int velicina = celiBrojevi.lenght();93 94
Primer nizaclass ArrayDemo {
public static void main(String[] args) {
int[] niz; // deklarise niz integeraniz = new int[10]; // zauzima memoriju duzine 10niz[0] = 100;niz[1] = 312;…niz[9] = 459;
System.out.println("Nulti element niza je: " + niz[ 0]);System.out.println("1. element niza je: " + niz[0]) ;System.out.println("2. element niza je: " + niz[1]) ;System.out.println("3. element niza je: " + niz[2]) ;System.out.println("4. element niza je: " + niz[3]) ;System.out.println("5. element niza je: " + niz[4]) ;System.out.println("6. element niza je: " + niz[5]) ;System.out.println("7. element niza je: " + niz[6]) ;System.out.println("8. element niza je: " + niz[7]) ;System.out.println(“9. element niza je: " + niz[8]) ;
}
}
95
Iteracije kroz nizove� for petlja se koristi pri radu sa nizovima:
int mojNiz[] = new int[10];
for (int i = 0; i < mojNiz.length; i++) {
mojNiz [i] = i;
}
int kvadrati[] = new int[7];
for (int i = 0; i < kvadrati.length; i++) {
kvadrati [i] = (i+1)*(i+1);
}
96
Primer nizovapublic class PrimerNiza{
public static void main ( String args[] ){
int [] ocene; // deklaracija nizaocene = new int[4];
ocene[0] = 90;ocene[1] = ocene[0] - 12;ocene[2] = 86;ocene[3] = 99;ocene[3]++;
double average = (ocene[0] + ocene [1]+ ocene [2] + ocene [3] ) / 4.0;
}}
12/9/2013
17
97
Primer nizova 2public class ProsekDvadeset{
public static void main ( String args[] ){
double brojevi[] = new double[20];
for ( int i = 0; i < brojevi.length(); i++ ){brojevi[i] = Math.random();
}double suma = 0;for ( int i = 0; i < brojevi.length(); i++ ){
suma += brojevi[i];}double prosek = suma / brojevi.length;
System.out.println(“Prosek je " + prosek + ".");}
}98
Metodi� Metod predstavlja imenovani segment koda koji se
može pokrenuti u drugom delu koda.� Metod preuzima neke parametre, izvršava neka
izračunavanja ili akcije i opciono vraća neku povratnu vrednost
� Pozivi metoda se mogu koristiti kao deo izraza
� poziv:
double v = izracunajZapreminuKvadra(a,b,c);
99
Obavezni delovi metode
� Jedini obavezni delovi deklaracije metoda su:� Povratni tip� Naziv metode� Par običnih zagrada� Telo metode oukvireno vitičastim
zagradama
primer:void prikazi (){
}
Povratni tip
� void – ako metod ne vraća ni jednu vrednost
� int, double, boolean,... - ako vraća neku konkretnu vrednost
� Povratni tip može biti i niz, instanca klase, itd
100
Primer void povratnog tipametoda:
void stampajPoruke(){
System.out.println(“Greska”);
System.out.println(“Tip greske: 0222”);
System.out.println(“Probajte ponovo”);
}
Poziv metode:
stampajPoruke();
101
Primer void sa argumentimametoda:
void stampajPoruke(int kod){
System.out.println(“Greska”);
System.out.println(“Tip greske: ” + kod);
System.out.println(“Probajte ponovo”);
}
Poziv metode:
stampajPoruke(0222);
if (n>100){
stampajPoruke(0222);
}else{
stampajPoruke(0341);
}102
12/9/2013
18
Primer int povratnog tipaMetod:
int saberi(int a, int b){
return a + b;
}
Poziv:
int x = 7, y = 16, z;
Z = saberi (x,y);
int rezultat = saberi(8,9);
103
Primer 2 metodaMetod:int max(int num1, int num2) {
int result;if (num1 > num2){
result = num1;}else{
result = num2;}return result;
}
Poziv metoda:
int maximum = max(7,26);int x = 56, y = 32;maximum = max(x,y);
104
Primer double povratnog tipaMetod:
double diskriminanta(double a, double b, double c){
double dis = b*b – 4*a*c;
if (dis < 0){
return -dis;
}else {
return dis;
}
}
Poziv:
double d = diskriminanta(3.2, 2.5, 3);
105 106
Metodi – komplet struktura
� Deklaracija metoda:<kvantifikator pristupa> <static/final>
<povratni tip> <naziv metoda> <lista argumenata>
{telo metoda;
}
� Primer:public static void main(String args[]){
//telo metoda
}
107
Svih šest komponenata:� Modifikatori - public, private� Povratni tip – tip vrednosti koju metod vraća kao
svoj rezultat ili void ako ne vraća nikakvu vrednost� Naziv metoda – koje će jasno objasniti funkciju
metoda� Lista parametara u običnim zagradama,
razdvojenih zarezom, predsavljenih tipom i imenom. Ako metod nema parametara ostavljaju se prazne zagrade
� Lista izuzetaka� Telo metode, ograničeno vitičastim zagradama.
Sadrži kod metoda zajedno sa deklaracijom lokalnih promenjivih
108
Zaglavlje metoda� Zaglavlje metoda sadrži:
� Naziv metoda.� Tip i naziv svakog argumenta.� Tip promenjive (ili objekta) koju metod vraća kao povratnu
vrednost.� Izuzetke koje metod obrađuje.� Modifikatore za određivanje vidljivosti metoda.
public float prebaciEure (float euri) {}
public boolean postavi(int i, int j, String name) throws IndexOutOfBoundsException {}
12/9/2013
19
109
Public/private� Metode možemo deklarisati kao public ili
private u zavisnosti da li želimo da omogućimo njihovo pozivanje u drugim klasama.
� Preporuka je:� Da su podaci privatni� Da su metode privatne
� Dobro definisana komunikacija između klasa pomaže da se eliminišu greške
110
Primer 1.// definicija metoda
public int mult(int x, int y){
return x * y;}
// deo koda sa pozivom metodaint duzina = 10;
int sirina = 5;int area = mult(duzina, sirina);
111
Primer 2.int stepen(int a, int b){
int i;int total = 1;for(i = 1; i <= b; i++){
total = total * a;}return total;
}
int number = 2;int exponent = 4;number = stepen(number, exponent);System.out.println(“nova vrednost je " +
number);
112
Primer 3.class Area{
int duzina = 10;int sirina = 5;
public static void main(String[] args){int povrsina = izracunajPovrsinu();System.out.println(povrsina);
}
public static int izracunajPovrsinu(){int p = duzina * sirina;return p;
}}
113
Primer 4.� Primer metoda koji sabira dva broja:
public class MethodsExample1{
public static void main ( String args[] ){int x = 5;int y = 3;int z = addTwoNumbers(x,y);System.out.println(x+ " + " +y+ " = " +z);
}
public int addTwoNumbers(int num1, int num2){int sum;sum = num1 + num2;return sum;
}} 114
Primer 5.
class voce{int grami, kalorije;
int kalorijePoGramu;
int ukupnoKalorija() {
return(grami* kalorijePoGramu);
}void ucitajVrednosti(){
}
public static void main (String argv[]) {
ucitajVrednosti();
kalorije = ukupnoKalorija();
}
}
12/9/2013
20
115
ZadatakDat je metod: public int izracunaj(int x, int y) {
x = x + 10;y = y + 10;return x;
}Koje su vrednosti promenjivih of p, q i r nakon
izvođenja narednog koda? int p = 1;int q = 2;int r = 5;r = izracunaj(p, q);
1,2,11
116
Zadaci� Napisati program u koji ispisuje sve parne
brojeve od 1 do 30 � Napisati program koji zatraži od korisnika
da unese koliko brojeva želi da sabere, zatim dozvoli njihov unos i na kraju ispiše poruku o njihovoj sumi
� Napisati program koji pronalazi aritmetičku sredinu od proizvoljnog broja unetih brojeva. Pretpostavimo da se unos brojeva završava kad se unese nula.
� Napisati program koji izračunava faktorijel unetog broja
n!= n*(n-1)*(n-2)*...*3*2*1
117
Zadaci� Napisati program koji izračunava zbir prvih
n prirodnih brojeva � Napisati program koji pronalazi najmanji od
tri uneta prirodna broja� Deklarisati niz koji će čuvati brojeve od
jedan do deset. Koristiti petlju za inicijalizaciju
� Napisati program koji učitava niz realnih brojeva i zatim u nizu pronalazi najmanji broj
� Napisati program koji pronalazi prirodan broj manji od 10000 koji ima najviše delilaca
4. časStringovi i Java klase
119
Stringovi
� Nizovi karaktera� U javi, stringovi su objekti� Direktan način deklaracije stringa:String pozdrav = "Hello world!";
� Moguće je kreirati Sting objekat uz pomoć kvantifikatora new i konstruktora:
char[] pomNiz = {'h', 'e', 'l', 'l', 'o', '.'};
String helloString = new String(pomNiz);
System.out.println(helloString);
120
Stringovi
� Dužina stringova:
String palindrome = “Ana voli milovana";
int duzina = palindrome.length();
� Učitavanje stringa:
Scanner consoleIn = new Scanner(System.in);
System.out.println(“Unesite string: ");
string1 = consoleIn.nextLine();
12/9/2013
21
121
Stringovi
� Konkatenacija (spajanje) stringova:String string1=“prvi ”;
String string2=“drugi”;
string1.concat(string2);
ili:String spoj = string1 + string2;
Rezultat je isti:System.out.println(string1);
System.out.println(spoj);
122
Stringovi
� Pronalaženje pozicije podstringa:String quote = "All the world’s a stage";
int pos = quote.indexOf("the");
pos dobija vrednost 4
� Određivanje podstringa po poziciji
String sub1 = quote.substring(8,12);
sub1 dobija vrednost “world”
123
Primer 1int godiste = 1985;
String prefiks = “Moje godiste je: ";
String godine = prefiks + godiste;
System.out.println(godine);
Rezultat izvođenja je:Moje godiste je: 1985
124
Primer 2Primer:public class StringDemo {
public static void main(String[] args) { String palindrom = “Ana voli Milovana"; int duz = palindrom.length();
char[] tempNiz = new char[duz]; char[] niz = new char[duz];
for (int i = 0; i < len; i++) { tempNiz[i] = palindrom.charAt(i);
} for (int j = 0; j < len; j++) {
niz[j] = tempniz[duz - 1 - j]; } String obrnutiPalindrom = new String(niz); System.out.println(obrnutiPalindrom);
} }
125
Klase su definicije objekata
� OOP – objektno orijentisano programiranje
� Kod se formira u obliku definicija klasa
� Java ih naziva klasama class
� Svaka definicija klase se nalazi u posebnom .java fajlu
� Naziv objekta mora biti isti kao i naziv fajla
126
package klasnipregled;public class Radnik {
String ime,prezime;float plata;
public Radnik(String ime, String prezime, float pla ta) {this.ime = ime;this.prezime = prezime;this.plata = plata;
}
public void povecajPlatu(float procenat){plata = plata * (1 + procenat/100);
}
public void stampaj(){System.out.println("Ime radnika: " + ime);System.out.println("Prezime radnika: " + prezime);System.out.println("plata radnika: " + plata);
}
public void anuliraj(){ime=null;prezime=null;plata = 0;
}}
Deklaracija klase
Definicija promenjivih
Konstruktor
Metod
Metod
12/9/2013
22
127
Upotreba klase Radnikpackage klasnipregled;
public class MejnKlasa {
public static void main(String[] args) {
String ime="Marko";String prezime = "Markovic";float plata = 50000;
Radnik noviRadnik = new Radnik(ime, prezime, plata) ;
noviRadnik.stampaj();noviRadnik.povecajPlatu(10);noviRadnik.stampaj();noviRadnik.anuliraj();noviRadnik.stampaj();
}}
128
Definisanje metodaSvaki se metod definiše unutar definicije klase:
public class Film {
static int ocenaFilma(int s, int g, int r) {
return s+g+r;
}
}
public class Demo {
public static void main (String argv[]) {
int scenario = 6, gluma = 9, rezija = 8;
prikaziOcenu(scenario, gluma, rezija);
}
void prikaziOcenu(int s, int g, int r){
System.out.print(“Ocena filma je: ”);
System.out.println(Film.ocenaFilma(s, g, r));
}
}
129
Primer 2class Bicikl {
int godiste = 0; int brzina = 0; int stepenPrenosa = 1;
void postaviGodiste(int novaVrednost) { godiste = novaVrednost;
} void promenaStepenaprenosa(int novaVrednost) {
stepenPrenosa = novaVrednost; } void povecajBrzinu(int increment) {
brzina = brzina + increment; } void smanjiBrzinu(int decrement) {
brzina = brzina - decrement; } void stampajStanja() {
System.out.println("godiste: “ + godiste);System.out.println("brzina je: “ + brzina);System.out.println("stepen prenosa je: “ + StepenPr enosa);
} }
130
Klasa koja koristi klasu Biciklclass BicycleDemo {
public static void main(String[] args) {
// kreiramo dva nova objekta tipa biciklBicikl bike1 = new Bicikl(); Bicikl bike2 = new Bicikl();
// poziv metoda za te objekte bike1.postaviGodiste(2004); bike1.povecajBrzinu(10); bike1.promenaStepenaPrenosa(2); bike1.stampajStanja(); bike2.postaviGodiste(2006); bike2.povecajBrzinu(10); bike2.promenaStepenaPrenosa(2); bike2.povecajBrzinu(10); bike2.promenaStepenaPrenosa(3); bike2.stampajStanja();
} }
131
Upotreba objekata
� Primer: kreiranje nove instance klase Vocei pokretanje nekih metoda iz nje
Voce sljiva = new Voce();
int kalorije;
kalorije = sljiva.ukupneKalorije();
� Tačka (Dot operator) pruža mogućnost pristupa javnim metodama i podacima iz klase Voce
132
Primer klase i metoda 2Class Tacka{
float x,y;
Tacka(float X, float Y){
x = X;
y = Y
}
void transliraj(float promenaX, float promenaY){
x = x + promenaX;
y = y + promenaY;
}
String opis(){
return “Tacka sa koordinatama (”+x+”,”+y+”)”;
}
}
12/9/2013
23
133
Primer kreiranja instance klaseClass Program{
public static void main (String[] args)Tacka A = new Tacka(1,3);
System.out.println(A.opis());
//(1.0, 3.0)
A.transliraj(1,2);
System.out.println(A.opis());
//(2.0, 5.0)A.x = 0;
A.y = 0;
System.out.println(A.opis());
//(0.0, 0.0)
}
134
Tri proncipa OOP-a� Enkapsulacija
� Objekti skrivaju svoje funkcije (metode) i podatke (promenjive klase)
� Nasleđivanje� Svaka podklasa
nasleđuje sve promenjive svoje nadklase
� Polimorfizam� Isti interfejs bez obzira
na tipove podataka
vozilo
automotor
Nadklasa
podklasa
nacrtaj() nacrtaj()
135
Nasleđivanje (inheritance)
� Definicija klase koja nasleđuje sve atribute i funkcije osnovne klase i definiše specifične atribute i funkcije
� Na primer: klasa student nasleđuje klasu osoba i definiše svoje atribute: broj indeksa, semestar, prosečna ocena, itd. , kao i funkcije za pristup i obradu tih atributa koje su karakteristične za objekte te klase
136
Polimorfizam
� Karakteristika objektno-orijentisanih programskih jezika da se u okviru klasa definišu funkcije sa istim nazivom i listom parametara, a da se u isto vreme izvršenja programa određuje koja će funkcija biti pozvana u zavisnosti od tipa objekta za koji je pozvana
� Polimorfizam i nasleđivanje omogućuju programeru da razvije hijerarhiju klasa koja se može upotrebiti u različitim aplikacijama
137
Overloading
� Moguće je imati više verzija metode u klasi sa različitim tipovima i brojem argumenata:
Fruit() {
grami=50;
}
Fruit(a,b) {
grami=a;
cals_per_gram=b;
}
� Java bira koji će od metoda pokrenuti u zavisnosti od argumenata 138
Primer overloadingapublic class Overload{
int saberi ( int br1, int br2 ){return br1 + br2;
}
double saberi( double numbr1, double br2 ){return num1 + num2;
}
public static void main ( String args[] ){int x = saberi(2,3);
System.out.println("2 + 3 = " + x);
double y = saberi(2.5,3.1);System.out.println("2.5 + 3.1 = " + y);
}
}
12/9/2013
24
139
Konstruktori
� Kod:sljiva = new Fruit();
� Pokreće metod konstruktor sa kojim se mogu postaviti neke početne vrednosti
� Moguće je i definisati više konstruktora sa različitim listama argumenata:
Primer:Fruit(), Fruit(a) ...
140
Šta su klase i objekti?Klase su šabloni za kreiranje objekata
(instanci klasa)� promenjive
� Promenjive instance� Statičke promenjive
� Metodi� instance� statički
141
Primerclass Point {
public double x, y;
}Point lowerleft = new Point();Point upperRight = new Point();
Point middlePoint = new Point();lowerLeft.x = 0.0;
lowerLeft.y = 0.0;upperRight.x = 1280.0; upperRight.y = 1024.0
middlePoint.x = 640.0;middlePoint.y = 512.0
142
Zadaci
� Napisati metod max() koji prima dva integera i vraća vrednost većeg
� Koristiti overloading definisati metod max() koji ima za argumente dva broja tipa float i kao rezultat vraća pvrednost float
143
Nizovi objekata� Elementi nizova ne moraju biti samo prosti tipovi
� Integer, double, float, char� Moguće je definisati i nizove objekata:
� studenata, knjiga, iznajmljivanja� Potrebno je uraditi tri koraka
144
Definisanje nizova objekata1. Deklarisanje nizova
private Student listaStudenata[];
� Ovim se definiše se lista studenata
2 .Kreira se niz:listaStudenata = new Student[10];
� Ovim se obezbeđuje 10 mesta u memoriji koji će čuvati reference ka objektima tipa Student
3. Kreiraju se objekti klase Student i dodele se nizu:
listaStudenata[0] = new Student(“Maja", “Peri ć");
12/9/2013
25
5. časGrafički korisnički interfejsGraphical user interface GUI
146
Swing komponente
� Za kreiranje Java programa sa grafičkim korisničkim interfejsom
� Swing sadrži skup komponenti za izgradnju korisničkog intefejsa i dodavanje interaktivnosti u Java aplikacije. Swing uključuje sve komponente koje su potrebne: tabele, liste, stabla, dugmad i oznake
� Swing se isporučuje kao deo Java platforme
147
Uvod
� Korisnički interfejs je upravljan događajima (Event
Driven)
� U verzijama 1.0 i 1.1 standard je AWT biblioteka(Abstract Window Toolkit) – biblioteka koja se zasnivana korišćenju komponenti korisničkog interfejsa koje sudostupne na platformi na kojoj se program pokreće
� Implementacija AWT komponenti – različita za svakioperativni sistem
� Izgled aplikacija – kao da su pisane u bilo kom drugomjeziku na datoj platformi
� Od verzije 1.2 standard je Swing biblioteka
148
Abstract Window Toolkit
� AWT: biblioteka koja obezbeđuje upotrebu minimalnogskupa komponenti grafičkog interfejsa, a kojegposeduju sve platforme koje podržavaju Javu
� izgleda “podjednako osrednje” na svim platformama
� paketi:
� java.awt
� java.awt.event
� java.awt.image
� java.awt.datatransfer
149
Swing� napisan “od nule”, u Javi
� ne oslanja se na operativni sistem, komponente sesamostalno iscrtavaju na ekranu
� jednako izgleda i radi na svim platformama
� veliki broj komponenti, tj. nema ograničenja na broj itip GUI komponenti koje će ući u biblioteku
� Look-and-feel: Windows, Motif, Metal, Mac
� Drag&Drop, rad sa clipboard-om
� kompletna podrška za Unicode kodnu stranu
� paketi javax.swing.*
� nazivi klasa počinju sa Jxxx
150
Basic Controls
� Jednostavne komponente koje se prvenstveno koriste za unos od strane korisnika
12/9/2013
26
151
Basic controls
152
Basic controls
153
Basic controls
154
Basic controls
155
Interactive Displays of Highly Formatted Information � Komponente za prikazivanje
interakcije koju može korisnik izmeniti
156
Interactive Displays of Highly Formatted Information
12/9/2013
27
157
Interactive Displays of Highly Formatted Information
158
Interactive Displays of Highly Formatted Information
159
Interactive Displays of Highly Formatted Information
160
Uneditable Information Displays
� Postoje samo da bi ponudile korisniku informacije
161
Uneditable Information Displays
162
Top-Level Containers
� Bar jedna od ovih komponenti mora biti prisutna u aplikaciji
12/9/2013
28
163
Top-Level Containers
164
General-Purpose Containers
� Kontejneri opšte namene� Koriste se u većini sving aplikacija
165
General-Purpose Containers
166
General-Purpose Containers
167
Special-Purpose Containers
� Kontejneri sa posebnim ulogama
168
Special-Purpose Containers
12/9/2013
29
169
Special-Purpose Containers
170
Look and feel
� Java look and feel
171
Look and feel
� Windows look and feel
172
Look and feel
� CDE/Motif look and feel
173
Look and feel
� Default Alloy look and feel
174
Osnovna struktura GUI aplikacije
� izvršavanje programa počinje sa main()
funkcijom, kao i svaki drugi Java program
� najčešće se u main() funkciji inicijalizujei glavni prozor aplikacije, koji se potom iprikaže na ekranu
� Primer: GUI aplikacija koja otvara prozor
12/9/2013
30
175
Osnovna struktura GUI aplikacije
import javax.swing.*;public class MainFrame extends JFrame {
public MainFrame() {setSize (300, 200);setTitle (“Hello GUI world!”);
}}
public class MyApp {public static void main(String[] args) {
MainFrame mf = new MainFrame();mf. setVisible (true);
}}
176
Razlika u konstrukciji GUI-ja za Windows i Java aplikacije� Windows aplikacije koriste tzv. resurse za definisanje
izgleda korisničkog interfejsa
� resurs je deklarativni opis izgleda nekog elementakorisničkog interfejsa
� ovakav opis se može kreirati u tekstualnoj datoteciodgovarajućeg formata ili nacrtati primenomodgovarajućeg alata
� “vizelna okruženja” za razvoj softvera – programer crtaizgled svoje aplikacije
� u Javi se izgled korisničkog interfejsa ne definišedeklarativno, pomoću resursa
� Java aplikacije svoj korisnički interfejs gradeprogramski, najčešće u toku inicijalizacije prozora
177
Dodavanje komponenti na prozor
� prilikom konstrukcije objekta klase naslednice JFrame dodaju sekomponente na formu u određenom redosledu
import javax.swing.*;Import java.awt.*;public class MainFrame extends JFrame {
public MainFrame() {setSize(300, 200);setTitle(“Hello GUI world”);// dodajemo komponente na formu:getContentPane().add(bOK, BorderLayout.NORTH);getContentPane().add(bCancel, BorderLayout.SOUTH);
}// Elementi na formi su naj češće privatni atributi
//klaseprivate JButton bOK = new JButton("OK");private JButton bCancel = new JButton("Cancel");
}
178
Dodavanje komponenti na prozor
179
Prostorni raspored komponenti
� koriste se layout manager-i
� instanca neke od xxxLayout klasa
� različiti layout manager-i iste komponenteraspoređuju na različit način
� svaki kontejner ima sebi asociran layoutmanager
� standardni layout manager-i:� BorderLayout, CardLayout, FlowLayout,
GridLayout, GridBagLayout, BoxLayout,SpringLayout
� korisnički definisani layout manager-i
180
Prostorni raspored komponenti
� Layout manager-i se koriste kako u Swing tako i u AWT biblioteci (zato imamo import java.awt.*)
� BorderLayout:
� Komponente se postavljaju na centru i bivaju razvučene do samih ivica
EAST WESTCENTER
NORTH
SOUTH
12/9/2013
31
181
Prostorni raspored komponenti
� BoxLayout:
� Horizontalno u jednoj vrsti ili vertikalno u jednoj koloni
182
Prostorni raspored komponenti
FlowLayout:
� Ređa komponente na način na koji se prelama tekst
183
Prostorni raspored komponenti
� GridLayout:
� Tabela međusobno jednakih komponenti
184
Prostorni raspored komponenti
� GridBagLayout:
�Formira se tabela međusobno različitih kolona i vrsti
185
Prostorni raspored komponenti
� Apsolutno pozicioniranje� Raspoređivač kontejnera se uklanja:
setLayout(null)
� Zatim se komponente postavljaju sametodom:
setBounds(int x, int y, int width int heigh)6. čas
Event Driven model
12/9/2013
32
187
Event Driven model
� korisnički interfejs kod GUI aplikacija je upravljandogađajima
� pišu se metode (obrađivači događaja) koje se izvršavajupo pojavi nekog događaja korisničkog interfejsa - klikmišem, pritisak tastera i sl.
� program ima inicijalizacioni blok i blokove koda kojireaguju na događaje korisničkog interfejsa (obrađivačedogađaja)
� program se ne izvršava linearno (od gore prema dole),nego u određenim vremenskim intervalima:� kada se vrši pokretanje aplikacije (inicijalizacija)
� reakcije na događaje (kada se vrši obrada događaja)
188
Event Driven model (2)
� inicijalizacioni blok se u Java GUIprogramima izvršava počevši od metodemain()
� događaji se opisuju xxxEvent klasama –za svaku vrstu događaja definisana jeposebna klasa
� pritisak tastera – KeyEvent klasa
� pomeranje miša – MouseEvent klasa
� sve xxxEvent klase nasleđuju klasu Event
189
Event Driven model (3)
� svaka akcija nad komponentama korisničkoginterfejsa izaziva generisanje objekata klasanaslednica Event klase
� ti objekti se prosleđuju objektima klasanaslednica EventListener klase, koje“osluškuju” događaje
� “osluškivači” – instance neke od xxxListenerklasa, npr.:� KeyListener – “osluškivač” za KeyEvent događaj
� EventListener-i uvedeni od verzije 1.1.
190
Rukovanje događajima� događaji su predstavljeni objektima xxxEvent klasa, a
osluškivači su odgovarajući xxxListener objekti
� xxxListener-i su interfejsi => “osluškivač” mora bitiinstanca neke klase koja implementira odgovarajućiinterfejs
import java.awt.*;
import java.awt.event.*;
public class MyListener implements ActionListener {
public void actionPerformed ( ActionEvent ev) {
System.exit(0);
}
}
191
Dodavanje Listener-a
� komponenta koja obrađuje neki događaj se prijavljuje pozivom addxxxListener
public class MainFrame extends JFrame {public MainFrame() {
...getContentPane().add(bOK);getContentPane().add(bCancel);// dodajemo reakcije na doga đaje dugmadimabOK.addActionListener(new MyListener());bCancel.addActionListener(new MyListener());
}
// Elementi na formi su naj češće privatni //atributi klase
private JButton bOK = new JButton("OK");private JButton bCancel = new JButton("Cancel");
}192
Osluškivači kao unutrašnje klase
� prozori mogu biti pretrpani komponentama koje obrađuju više događaja – definicija velikog broja Listener klasa – nepregledan program
� Varijanta 2:JButton b = new JButton("Pritisni me");ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {...
}b.addActionListener(al);
� Varijanta 3: // najčešća – koristi je i netBeansJButton b = new JButton("Pritisni me");b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {...
});
12/9/2013
33
193
Reakcije na događaje
Tip događaja Dodeljeni ListenerActionEvent ActionListener
AdjustmentEvent AdjustmentListenerAncestorEvent AncestorListenerComponentEvent ComponentListener
ContainerEvent ContainerListenerFocusEvent FocusListener
KeyEvent KeyListenerHierarchyEvent HierarchyListenerMouseEvent MouseListener
WindowEvent WindowListenerItemEvent ItemListener
TextEvent TextListener
8. časKonekcija sa bazom podataka
195
Konekcija
196
Java SQL pristup bazama� Java nudi standardni interfejs za pristup bazama,
JDBC� Većina sistema za upravljanje bazama podataka
imaju implementaciju JDBC za svoje baze� Oracle, mySQL,... nude odgovarajući JDBC
driver (nema potrebe za instalacijom dodatnih programa).
� Omogućeno je pisanje programa koji koriste bazu podataka koji su nezavisni od same baze
197
Java SQL pristup bazama� U main klasi za konekciju:
try{Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/ime baze","root","lozinka");stmt = conn.createStatement();
}catch(Exception ex){ex.printStackTrace();
}
198
Java SQL pristup bazama
� Za zatvaranje konekcije:
try{
conn.close();
}catch(Exception ex){
ex.printStackTrace();
}
12/9/2013
34
199
Java SQL pristup bazama
� Postavljanje upita:
String sql="INSERT INTO slonovi (ime, prezime)" + " VALUES ('"+jTextField1.getText()+"', '"+jTextField2.getTex t()+"')";
try{
if ((jTextField1.getText()!=null)&&(jTextField2.get Text()!=null)) {
int rowsAffected = stmt.executeUpdate(sql);
}
}catch(Exception ex){
ex.printStackTrace();
}
200
Podešavanje izgleda aplikacije:
� U main klasi za XP look:
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
ex.printStackTrace();
}
7. časPrimeri, obrada izuzetaka, ostali elementi
202
Statička polja i metodi
� Deklarisana pomoću ključne reči static
� Mogu se koristiti i bez prethodnog kreiranja instanci klase
� Statički metodi ne smeju pristupati poljima koja nisu statička niti smeju pozivati metode koji nisu statički
203
Ključna reč final
� Modifikator final se može koristiti na sledećim mestima� U zaglavlju deklaracije klase� U zaglavlju deklaracije metoda i � Prilikom deklaracije promenjive
� U zavisnosti gde se koristi ima različitu ulogu:� Ako hoćemo da zabranimo nasleđivanje neke
klase tada je definišemo sa final� Uz metodu se koristi ako želimo da dozvolimo
nasleđivanje neke klase ali da sprečimo redefinisanje nekog njenog metoda u podklasama
� Promenjive koje se neće menjati - konstante204
Ključna reč this
� Koristi se samo unutar metode� Vraća referencu na objekat za koji je
metoda pozvana
12/9/2013
35
205
Ključne reči final i thisfinal class Pravougaonik {
public static void main(String[] args) {// klasa za prikaz pravougaonika// stranice paralelne sa x osom// koordinate stranicaprivate float gore, dole, levo, desno;
// konstruktorPravougaonik(float gore, float dole, float levo, fl oat
desno){this.gore = gore;this.dole = dole;this.levo = levo;this.desno = desno;
}
float povrsina(){return (gore - dole)*(desno - levo);
}...
}}
206
primerClass Autoput{
private int brojTraka = 3;
final void postaviBrojTraka(int noviBrojTraka){
brojTraka = noviBrojTraka;
}
final int citajBrojTraka(){
return brojTraka;
}
}
207
Obrada izuzetaka
� Obrada neželjenih sutacija� Deljenje nulom� Iznenadni prekid mrežne komunikacije� Pristup nepostojećem elementu niza� Nemoguća ekplicitna konverzija� ...
� Greške koje se ne mogu prepoznati prilikom prevođenja
� try-catch i throw naredbe208
Sintaksa try-catch naredbe
try {
// kod gde je mogu će da do đe do izuzetka
} catch(NazivKlaseIzuzetka NazivPromenjive) {
// obrada prvog izuetka
} catch(NazivKlaseIzuzetka NazivPromenjive) {
// obrada drugog izuzetka
} catch(NazivKlaseIzuzetka NazivPromenjive) {
// obrada tre ćeg izuzetka
}
...
209
Primer try-catch naredbeint i = 30;
try {
int niz[] = new int[10];
niz[i]=7;
catch ( ArrayIndexOutOfBoundsException e ) {
System.out.println(“los index niza “);e.printStackTrace();
}
210
Primerimport java.util.Scanner;public class Deljenje {
public static void main(String[] args) {int brojilac, imenilac, kolicnik;Scanner consoleIn = new Scanner(System.in);System.out.println("Unesite brojilac: ");brojilac = consoleIn.nextInt();System.out.println("Unesite imenilac: ");imenilac = consoleIn.nextInt();try {
kolicnik = brojilac/imenilac;System.out.print("kolicnik je: "+kolicnik);
} catch (ArithmeticException e) {System.out.println("Nastupilo deljenje nulom");e.printStackTrace()
}
}}
12/9/2013
36
211
Primer throw naredbeif(t == null)
throw new NullPointerException("t = null");
Primer 2:public double korenFunkcije( double A, double B, do uble C )
throws IllegalArgumentException {
if (A == 0) {
throw new IllegalArgumentException(“A ne sme biti 0 ");
}
else {
double disc = B*B − 4*A*C;
if (disc < 0)
throw new IllegalArgumentException(" Disc < nule ") ;
return (−B + Math.sqrt(disc)) / (2A);
}
}
212
Paketi� Napravljene klase i interfejsi se mogu
grupisati u zasebne celine koje se u javi nazivaju paketi
� Svaka klasa pripada tačno jednom paketu� Sve klase i interfejsi u jednom paketu
(osim privatnih ugnježdenih klasa i interfejsa) su vidljivi i u svim delovima paketa
� Postoje i standardni paketi koji se isporučuju zajedno sa Java prevodiocem
� Ti standardni paketi čine Java API (Application Programming Inteface)
213
Paketi
� Definicija paketa:
package nazivPaketa;
package MojiPaketi.DiplomskiRad.PrviDeo
� Može i bez definicije paketa, tada će sve klase i interfejsi biti pripadati anonimnom paketu
214
Dokumentacioni komentari - javadoc
� Počinju sekvencom /**, a završavaju sa */� Omogućavaju da informacije o programu
ugradimo u sam program� Pomoću komande javadoc vrši se
prikupljanje informacija o programu ismeštanje istih u HTML fajl
� Oznake za dokumentaciju koje počinju sa@ nazivaju se samostalne (stand-alone) imoraju stajati u zasebnom redu, npr.@author Boban
� Oznake koje počinju vitičastim zagradamanazivaju se unutrašnje (in-line) i mogu sestavljati unutar većih opisa, npr. {@code}
215
Čitanje podataka sa konzole � Jednostavnije čitanje podataka sa konzole
može se obaviti korišćenjem klase Scanner� Konstruktor klase Scanner koji se koristi u
ovu svrhu ima opšti oblik:� Scanner(InputStream is)
Kojim se pravi objekat tipa Scanner koji tok iskoristi kao izvor podataka.
� Sledeći iskaz pravi objekat tipa Scanner kojipodatke čita sa standardnog ulaza, što jepodrazumevano tastatura:
Scanner consoleIn = new Scanner(System.in);
Napomena: System.in je objekat tipa InputStream.216
Primerimport java.util.*;
class UnosBroja{
public static void main(String args[]){
Scanner konzUlaz=new Scanner(System.in);
int broj=0;
System.out.println("Unesite broj: ");
broj = konzUlaz.nextInt();
System.out.println(“Unet je broj: "+ broj);
}
}
12/9/2013
37
217
Interfejsi� Ključna riječ interface u Javi koristi se za
potpuno apstrahovanje načina pristupaklasi – tj. možemo reći klasi šta da radi, aline i kako.
� Interfejsi nemaju promjenljive instanci, anjihove metode nemaju telo.
� Klasa može implementirati više interfejsa(ključna riječ implements).
� Koriste se za implementaciju višestrukognasleđivanja.
� Interfejsi se mogu proširiti, tj. jedaninterfejs može da nasledi drugi pomoćuključne riječi extends