Tutoring System for Distance Learning of Java Programming

Download Report

Transcript Tutoring System for Distance Learning of Java Programming

Petak:
I čas: 15:50 - 16:35
II čas: 16:45 - 17:30
III čas: 17:40 - 18:25
Primenjeno programiranje
mr Boban Vesin
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
2
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
3
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/

4
Tehnologije

Programski jezik: Java

Razvojni alat: NetBeans 6.5

Sistem za upravljanje bazama
podataka: MySql 5.0
5
NetBeans 6.5
6
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)
7
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
8
Programski jezici

Imperativni ili proceduralni
programski jezici


Objektno-orijentisani programski jezici


SIMULA, Smaltalk, C++, Java, C#
Deklarativni (logički) programski jezici


FORTRAN, COBOL, Basic, Pascal, Ada
Prolog
Funkcionalni programski jezici

LISP, Scheme, ML
9
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 objektnoorijentisan.
10
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)
11
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 objektnoorijentisanog 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
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
13
Programski jezik Java

Opšta sintaksa samostalne aplikacije
u Javi:
class <classname> {
public static void main(String args[]){
izrazi;
————————;
————————;
}
}
14
Primer Java programa

Program koji ispisuje “Hello World”
class HelloWorldApp {
public static void main(String[] args) {
// ispis stringa.
System.out.println("Hello World!");
}
}
15
Programski jezik Java

Kompajliranje:
javac HelloWorldApp.java

Kompajler generiše fajl:
HelloWorldApp.class

Pokretanje programa:
java HelloWorldApp
16
Osnovni elementi

Osnovni elementi Jave pomoću kojih
se komponuju složenije konstrukcije
jezika:
Identifikatori
 Literali
 Specijalni simboli
 Rezervisane reči

17
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:

ime_i_prezime, temp, var2sp, upisiBroj18
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

19
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
20 >>
&
konjunkcija i konjunkcija nad bitovima
>>>=
dodela sa prethodnom primenom >>>
Rezervisane reči

Koriste se za opis naredbi programa i
imaju tačno određeno značenje
abstract
default
if
package
this
boolean
do
implements
private
throw
break
double
import
protected
throws
byte
else
instanceof
public
transient
case
extends
int
return
null
try
const
for
new
switch
strictfp
continue
while
goto
synchronized
super
catch
final
interface
short
void
char
finally
long
static
volatile
class
float
native
assert
21
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: Font.BOLD, Font.ITALIC
22
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
23
Prosti tipovi podataka

Celobrojni





Realni brojevi



float
double
Znakovni


int
short
long
byte
char
Logički

boolean
24
Prosti tipovi podataka
Prosti 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
25
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
Java inicijalno postavlja vrednosti prostih
promenjivih na nulu ili na false u slučaju
promenjive tipa boolean

26
Deklaracija promenjivih
Deklaracija promenjivih:
<tip podataka> <naziv promenjive>
Primer:
int num1;
Inicijalizacija promenjivih:
< tip podataka > < naziv promenjive > = vrednost
Primer: double num2 = 3.1419;
float initVal;
int pom, index = 2;
double gamma = 1.2, brightness;
boolean valueOk = false;
27
Deklaracija promenjivih
int index = 1.2;
boolean retOk = 1;
double fiveFourths = 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
naziv tipa
naziv promenjive
vrednost
Boolean prekinut = false;
28
Deklaracija promenjivih
int index = 1.2;
//
boolean retOk = 1;
//
double fiveFourths = 5 / 4;
//
float ratio = 5.8f;
//
double fiveFourths = 5.0 / 4.0;


greška
greška
nema greške
ispravno
// 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
29
Konstante
U Javi promenljiva se može učiniti
konstantnom pomoću ključne riječi
final
 Na primer:

final int X = 3;
final int MAX = 9;
final float PI = 3.14;
30
Naredba dodele
x = 1;
// promenjivoj x dodeljujemo
vrednost 1
++a;
// a = a + 1
b--;
// b = b + 1
Pom = a + b;
d*=5;
// d = d * 5
31
Razlika između i++ i ++i
class PrePostDemo {
public static void main(String[] args){
int i = 3;
i++;
System.out.println(i); // "4"
++i;
System.out.println(i); // "5"
System.out.println(++i); // "6"
System.out.println(i++); // "6"
System.out.println(i); // "7"
}
}
32
Naredba dodele
int 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);
33
Naredba dodele
public class Demo {
public static void main (String[] arg) {
boolean b;
b = (2 + 2 == 4);
System.out.println(b);
}
}
34
Razlika između i++ i ++i
public class AutoInc {
public static void main(String[] args) {
int i = 1;
prt("i : " + i);
prt("++i : " + ++i); // Pre-increment
prt("i++ : " + i++); // Post-increment
prt("i : " + i);
prt("--i : " + --i); // Pre-decrement
prt("i-- : " + i--); // Post-decrement
prt("i : " + i);
}
static void prt(String s) {
System.out.println(s);
}
}
Rezultat izvođenja programa je:
i : 1
++i : 2
i++ : 2
i : 3
--i : 2
35
Naredba dodele
class ArithmeticDemo {
public static void main (String[] args){
int result = 1 + 2; // rezultat je 3
System.out.println(result);
result = result - 1; // rezultat je 2
System.out.println(result);
result = result * 2; // rezultat je 4
System.out.println(result);
result = result / 2; // rezultat je 2
System.out.println(result);
result = result + 8; // rezultat je 10
result = result % 7; // rezultat je 3
System.out.println(result);
}
}
36
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());
}
}
37
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
38
Primer 1
public class KonverzijaDaljina {
public static void main(String[] args) {
float duzinaMilje; // vrednost duzine u miljama
float duzinaKilometri; // vrednost duzine u kilometrima
// 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 rezultata
duzinaMilje = 5.0;
duzinaKilometri = duzinaMilje * 1.609;
System.out.println("5 milja = " + duzinaKilometri + " km");
}
}
39
Primer 2
import java.util.Scanner; // programu je potrebna Scanner klasa
public 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);
}
}
40
2. čas
Grananje, petlje
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
42
Kontrola toka programa
Kontrola toka programa:
if – else
switch – case
return
while
do – while
for
break
continue
• Naredbe:
try – catch – finally
throw
43
If – naredba grananja

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
Moguće je zapisati i:
if ( x < 10 )
x = 10;

Ili:
if ( x < 10 ) { x = 10; }
44
Relacioni operatori
==
!=
>=
<=
>
<
jednakost
nejednakost
veće ili jednako
manje ili jednako
veće
manje
45
If naredba

If...else izraz sintaksa:
if(uslov){
izrazi;
} else{
izrazi;
}
46
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 != oldx) {
System.out.print(“x je promenjena”);
}
else {
System.out.print(“x nije promenjena”);
}
47
Ugnježdeni if … else
if ( myVal > 100 ) {
if ( remainderOn == true) {
myVal = mVal % 100;
}
else {
myVal = myVal / 100.0;
}
}else{
System.out.print(“myVal is in range”);
}
48
else if

Koristan za izbor između više mogućnosti:
if ( n == 1 ) {
// izvršavanje prvog bloka naredbi
}
else if ( j == 2 ) {
// izvršavanje drugog bloka naredbi
}
else {
//ako ni jedan od predhodnih uslova nije
//zadovoljen vrši se izvršavanje trećeg
//bloka naredbi
}
49
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”);
}
50
Primer if naredbe
if (prodaja > 75000){
bonus = 1000;
System.out.println(“Bonus iznosi $1000");
}
System.out.println(“cilj za naredni mesec
iznosi: $75000");
51
Primer 2 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);
}
52
Primer 3 if naredbe
double 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");
}
53
Primer 4 if naredbe
if( grade > 90 ){
System.out.println(“Odlicno!");
}else if( grade > 60 ){
System.out.println(“Vrlo dobro!");
}else{
System.out.println(“Zao nam je, pali ste");
}
54
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
55
switch naredba

Sintaksa switch naredbe:
switch(promenjiva){
// promenjiva ima celobrojnu ili logicku
//vrednost
case(vrednost1):
izrazi;
break;
case(vrednost2):
izrazi;
break;
...
default:
izrazi;
break;
}
56
switch naredba
switch ( n ) {
case 1:
// izvršavanje prvog bloka naredbi
break;
case 2:
// izvršavanje drugog bloka naredbi
break;
default:
// ako ni jedan od predhodnih uslova
//nije zadovoljen vrši se izvršavanje
//trećeg bloka naredbi
break;
}
57
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: 1
za 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.
58
for petlja

Sintaksa for petlje:
for(inicijalizacija; uslov; inkrement){
izrazi;
}
59
for petlja

Izvršavanje n puta
for ( i = 0; i < n; i++ ) {
// ovaj deo petlje će se izvršiti n puta
// i ide od 0 do n-1
}

Ugnježdeni for:
for ( j = 0; j < 10; j++ ) {
for ( i = 0; i < 20; i++ ){
// ovaj deo petlje će se izvršiti 200 puta
}
}
60
Primer 1. for petlja
int i;
for( i = 0; i < 10; i++ ){
System.out.println(i);
}
61
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);
}
}
}
62
while petlja

Sintaksa while petlje
while(uslov){
izrazi;
}
63
while petlja
while(response == 1) {
System.out.print( “ID =” + userID[n]);
n++;
response = readInt( “Enter“);
}
Moguće je da se telo petlje ni jednom ne izvrši!
64
Primer while naredbe
int x = 0;
while (x<10) {
System.out.println(x);
x++;
}
65
do while petlja

Sintaksa do...while petlje
do{
izrazi;
}while(uslov);

Primer:
int x = 1;
do {
System.out.println(x);
x++;
}while (x<10);
66
do while petlja
do {
System.out.print( “ID =” + userID[n] );
n++;
response = readInt( “Enter ” );
}while (response == 1);
Telo petlje će se bar jednom izvršiti!
67
break naredba

break naredba izvršava bezuslovni
izlazak iz while, do, for ili switch
petlje
for ( int i = 0; i < maxID, i++ ) {
if ( userID[i] == targetID ) {
index = i;
break;
}
} // program jumps here after break
68
continue

Može se koristiti samo uz while, do ili for.

Uzrokuje da petlja bezuslovno pokrene narednu
iteraciju
for ( int i = 0; i < maxID; i++ ) {
if ( userID[i] != -1 ) continue;
System.out.print( “UserID ” + i + “ :” +
userID);
}
69
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;
}
}
}
70
Treći čas
Metodi i nizovi
Primer switch
class 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;
}
}
}
72
Primer while
class WhileDemo {
public static void main(String[] args){
int count = 1;
while (count < 11) {
System.out.println(count);
count++;
}
}
}
73
Primer do while
class DoWhileDemo {
public static void main(String[] args){
int count = 1;
do {
System.out.println(count);
count++;
} while (count <= 11);
}
}
74
Primer for
class ForDemo {
public static void main(String[] args){
for(int i=1; i<11; i++){
System.out.println(i);
}
}
}
1
2
3
4
5
6
7
8
9
10
75
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 deo izraza
public float convertCelsius(float tempC) {
return( ((tempC * 9.0f) / 5.0f) + 32.0 );
}
76
Metodi
 Deklaracija metoda:
<kvantifikator pristupa> <static/final>
<povratni tip> <naziv metoda> <lista
argumenata>
{
telo metoda;
}
 Primer:
public static void main(String args[]){
//telo metoda
}
77
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 (){
}
78
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
79
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 convertCelsius (float tCelsius ) {}
public boolean postavi(int i, int j, String
name) throws IndexOutOfBoundsException {}
80
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
81
Definisanje metoda
Svaki se metod definiše unutar definicije klase:
public class Film {
public 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);
}
public static void prikaziOcenu(int s, int g, int r){
System.out.print(“Ocena filma je: ”);
System.out.println(Film.ocenaFilma(s, g, r));
}
}
82
Primer klase i metoda
Class voce{
int grami;
int kalorijePoGramu;
int ukupnoKalorija() {
return(grami* kalorijePoGramu);
}
}
83
Primer 2
class 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: "+StepenPrenosa);
}
}
84
Primer 3.
// definicija metoda
public int mult(int x, int y)
{
return x * y;
}
// deo koda sa pozivom metoda
int duzina = 10;
int sirina = 5;
int area = mult(duzina, sirina);
85
Primer 4.
public static void tryPrimitives(int i,
double f, char c, boolean test)
{
i = i + 10;
c = 'z';
if(test)
test = false;
else
test = true;
f = 1.5;
}
86
Primer 5.
public static int stepen(int a, int b){
int i;
int total = 1;
for(i = 0; 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);
87
Primer 6.
public class calculation{
int first, answer;
public void paint (){
first = 34;
calculation();
}
public void calculation (){
answer = first * 2;
}
}
88
Primer 7.
public class Area{
public static void main(String[] args){
int duzina = 10;
int sirina = 5;
// poziv metoda
int povrsina = izracunajPovrsinu();
System.out.println(povrsina);
}
public static int izracunajPovrsinu(){
int p = duzina * sirina;
return p;
}
}
}
89
Zadatak
Dat je metod:
public int tryPrimitives(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 = tryPrimitives(p, q);
1,2,11
90
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
91
Nizovi
mojNiz =
3
6
3
1
6
3
4
1
0
1
2
3
4
5
6
7
mojNiz ima mesta za 8 elemenata
 Elementima se pristupa uz pomoć indeksa
niza
 U Javi, prvi element niza je na nultoj poziciji
92
Deklaracija nizova
int 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];
93
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};
94
Iteracije kroz nizove

for petlja je korisna pri radu sa nizovima:
for (int i = 0; i < mojNiz.length; i++) {
mojNiz [i] = getsomevalue();
}
95
Primer niza
class ArrayDemo {
public static void main(String[] args) {
int[] niz; // deklarise niz integera
niz = new int[10]; // zauzima memoriju duzine 10
niz[0] = 100;
…
niz[9] = 1000;
System.out.println("Nulti element niza je: " + niz[0]);
System.out.println("1. element niza je: " + niz[1]);
System.out.println("2. element niza je: " + niz[2]);
System.out.println("3. element niza je: " + niz[3]);
System.out.println("4. element niza je: " + niz[4]);
System.out.println("5. element niza je: " + niz[6]);
System.out.println("6. element niza je: " + niz[7]);
System.out.println("7. element niza je: " + niz[8]);
System.out.println("8. element niza je: " + niz[9]);
System.out.println("5. element niza je: " + niz[5]);
}
}
96
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
97
Definisanje nizova objekata
1. 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ć");
98
4. čas
Java klase i Stringovi
Primer nizova
public class PrimerNiza{
public static void main ( String args[] ){
int [] ocene; // deklaracija niza
ocene = 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;
}
}
100
Primer nizova 2
public 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 + ".");
}
}
101
Primer 3
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;
}
}
102
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
103
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
104
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
105
Primer klase i metoda 1
Class Voce{
int grami;
int kalorijePoGramu;
int ukupnoKalorija() {
return(grami* kalorijePoGramu);
}
}
106
Upotreba objekata

Primer: kreiranje nove instance klase Fruit i
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
107
Primer klase i metoda 2
Class 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+”)”;
}
}
108
Primer kreiranja instance klase
Class Program{
public static void main (String[] args)
Tacka A;
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)
}
109
Primer klase i objekata
class 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: "+StepenPrenosa);
}
}
110
Klasa koja koristi klasu Bicikl
class BicycleDemo {
public static void main(String[] args) {
// kreiramo dva nova objekta tipa bicikl
Bicikl 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();
}
}
111
Klase
class Employee
Deklaracija klase
{
public Employee (String n, double s)
Konstruktor
{
name = n;
salary = s;
}
public Employee (String n)
Overloaded konstruktor
{
name = n;
salary = 0;
}
public void raiseSalary(double byPercent)
{
salary *= 1 + byPercent / 100;
}
public double getSalary()
Metod
{
return salary;
}
private String name;
Definicija promenjivih
private double salary;
}
112
Tri proncipa OOP-a

Enkapsulacija


Nasleđivanje


Objekti skrivaju svoje
funkcije (metode) i
podatke (promenjive
klase)
Svaka podklasa
nasleđuje sve
promenjive svoje
nadklase
vozilo
Polimorfizam

motor
Nadklasa
auto
podklasa
Isti interfejs bez obzira
na tipove podataka
nacrtaj()
nacrtaj()
113
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, semstar, prosečna
ocena, itd. , kao i funkcije za pristup i
obradu tih atributa koje su
karakteristične za objekte te klase

114
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
115
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
116
Primer overloadinga
public 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);
}
}
117
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) ...
118
Šta su klase i objekti?
Klase su šabloni za kreiranje objekata
(instanci klasa)
 promenjive



Promenjive instance
Statičke promenjive
Metodi


instance
statički
119
Primer
class 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
120
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

121
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);
122
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();
123
Stringovi
 Konkatenacija (spajanje)
String string1=“prvi ”;
String string2=“drugi”;
stringova:
string1.concat(string2);
ili:
String spoj = string1 + string2;
Rezultat je isti:
System.out.println(string1);
System.out.println(spoj);
124
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”
125
Primer 1
int godiste = 1985;
String prefiks = “Moje godiste je: ";
String godine = prefiks + godiste;
System.out.println(godine);
Rezultat izvođenja je:
Moje godiste je: 1985
126
Primer 2
Primer:
public class StringDemo {
public static void main(String[] args) {
String palindrom = "Dot saw I was Tod";
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);
}
}
127
5. čas
Primeri, obrada izuzetaka, ostali elementi
Primer 1

program koji pronalazi najmanji od tri uneta
prirodna broja
import java.util.Scanner;
public class Min {
public static void main (String[] args) {
int a, b, c;
System.out.print ("Uneite tri prirodna broja: ");
Scanner consoleIn = new Scanner(System.in);
a = consoleIn.nextInt();
b = consoleIn.nextInt();
c = consoleIn.nextInt();
int min = a;
if (b < min) min = b;
if (c < min) min = c;
System.out.println ("Najmanji je :
" + min);
}
}
129
Primer 2.

Program koji učitava tri broja i zatim ih ispisuje u
rastućem rasporedu
import java.util.Scanner;
public class Uredi {
public static void main (String[] args) {
int a, b, c, pom;
System.out.print ("Uneite tri broja: ");
Scanner consoleIn = new Scanner(System.in);
a = consoleIn.nextInt();
b = consoleIn.nextInt();
c = consoleIn.nextInt();
if (a > b) { pom = a; a = b; b = pom; }
if (a > c) { pom = a; a = c; c = pom; }
if (b > c) { pom = b; b = c; c = pom; }
System.out.println ("Uredjeno: " + a + " " +
b + " " + c);
}
130
Primer 2.

Drugo rešenje:
if ( a < b ) {
if ( c < a )
System.out.println(
else if ( c > b )
System.out.println(
else
System.out.println(
}
else {
if ( c < b )
System.out.println(
else if ( c > a )
System.out.println(
else
System.out.println(
}
c + " " + a + " " + b);
a + " " + b + " " + c);
a + " " + c + " " + b);
c + " " + b + " " + a);
b + " " + a + " " + c);
b + " " + c + " " + a);
131
Primer 3.

Deklarisati niz koji će čuvati kvadrate prvih deset
brojeva. Koristiti petlju za inicijalizaciju
public class InicijalizacijaNiza {
public static void main(String[] args) {
System.out.print ("Inicijalizacija niza: ");
int niz[] = new int[10];
for (int i=0; i<10; i++){
niz[i]= (i+1)*(i+1);
}
System.out.println("niz je:");
for (int i=0; i<10; i++) {
System.out.print(niz[i]+" ");
}
}
}
132
Primer 4

Napisati program koji učitava niz realnih brojeva i zatim u nizu
pronalazi najmanji broj
import java.util.Scanner;
public class Min2 {
public static void main (String[] vpar) {
int i, dim;
Scanner consoleIn = new Scanner(System.in);
System.out.print ("Unesite dimenziju niza: ");
dim = consoleIn.nextInt ();
double[] niz = new double [dim];
for (i=0; i<dim; i++){
System.out.print ("unesite "+(i+1)+" element: ");
niz[i]= consoleIn.nextDouble();
}
double min = niz[0];
for (i=1; i<dim; i++) {
if (niz[i] < min) min = niz[i];
}
System.out.println ("min element je: " + min);
}
}
133
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

134
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 - konstante
135
Ključna reč this
Koristi se samo unutar metode
 Vraća referencu na objekat za koji je
metoda pozvana

136
Ključne reči final i this
final class Pravougaonik {
public static void main(String[] args) {
// klasa za prikaz pravougaonika
// stranice paralelne sa x osom
// koordinate stranica
private float gore, dole, levo, desno;
// konstruktor
Pravougaonik(float gore, float dole, float levo, float
desno){
this.gore = gore;
this.dole = dole;
this.levo = levo;
this.desno = desno;
}
float povrsina(){
return (gore - dole)*(desno - levo);
}
...
}
}
137
primer
Class Autoput{
private int brojTraka = 3;
final void postaviBrojTraka(int noviBrojTraka){
brojTraka = noviBrojTraka;
}
final int citajBrojTraka(){
return brojTraka;
}
}
138
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 naredbe

139
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
}
...
140
Primer try-catch naredbe
int i = 30;
try {
int niz[] = new int[10];
niz[i]=7;
catch ( ArrayIndexOutOfBoundsException e ) {
System.out.println(“los index niza “);
e.printStackTrace();
}
141
Primer
import 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()
}
}
}
142
Primer throw naredbe
if(t == null)
throw new NullPointerException("t = null");
Primer 2:
public double korenFunkcije( double A, double B, double 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);
}
}
143
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)
144
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
145
6. čas
Korisnički interfejs
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

Basic Controls

Jednostavne komponente koje se
prvenstveno koriste za unos od strane
korisnika
148
Basic controls
149
Basic controls
150
Basic controls
151
Basic controls
152
Interactive Displays of Highly
Formatted Information

Komponente za prikazivanje
interakcije koju može korisnik izmeniti
153
Interactive Displays of Highly
Formatted Information
154
Interactive Displays of Highly
Formatted Information
155
Interactive Displays of Highly
Formatted Information
156
Interactive Displays of Highly
Formatted Information
157
Uneditable Information Displays

Postoje samo da bi ponudile korisniku
informacije
158
Uneditable Information Displays
159
Top-Level Containers

Bar jedna od ovih komponenti mora
biti prisutna u aplikaciji
160
Top-Level Containers
161
General-Purpose Containers
Kontejneri opšte namene
 Koriste se u većini sving aplikacija

162
General-Purpose Containers
163
General-Purpose Containers
164
Special-Purpose Containers

Kontejneri sa posebnim ulogama
165
Special-Purpose Containers
166
Special-Purpose Containers
167
Look and feel

Java look and feel
168
Look and feel

Windows look and feel
169
Look and feel

CDE/Motif look and feel
170
Look and feel

Default Alloy look and feel
171
7. čas
Grafički korisnički interfejs (gui)
Program koji pronalazi prirodan broj
manji od 10000 koji ima najviše delilaca
public class NajviseDelilaca {
public static void main(String[] args) {
int N;
// trenutni broj za koji ispitujemo
int maxDivisors; // trenutni najveci broj delilaca
int numWithMax; // broj sa najvecim brojem delilaca
maxDivisors = 1;
numWithMax = 1;
for ( N = 2; N <= 10000; N++ ) {
int D; // broj koji ispitujemo da li je delilac
int divisorCount; // broj delitelja broja
divisorCount = 0;
for ( D = 1; D <= N/2; D++ ) {
if ( N % D == 0 )
divisorCount++;
}
if (divisorCount > maxDivisors) {
maxDivisors = divisorCount;
numWithMax = N;
}
}
System.out.println("Najveci broj delilaca je " + maxDivisors);
System.out.println("Broj sa " + maxDivisors + " delilaca je " + numWithMax);
}
}
173
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 zasniva
na korišćenju komponenti korisničkog interfejsa koje su
dostupne na platformi na kojoj se program pokreće
Implementacija AWT komponenti – različita za svaki
operativni sistem
Izgled aplikacija – kao da su pisane u bilo kom drugom
jeziku na datoj platformi
Od verzije 1.2 standard je Swing biblioteka
174
Abstract Window Toolkit



AWT: biblioteka koja obezbjeđuje upotrebu
minimalnog skupa komponenti grafičkog interfejsa, a
kojeg posjeduju sve platforme koje podržavaju Javu
izgleda “podjednako osrednje” na svim platformama
paketi:
 java.awt
 java.awt.event
 java.awt.image
 java.awt.datatransfer
175
Swing









napisan “od nule”, u Javi
ne oslanja se na operativni sistem, komponente se
samostalno iscrtavaju na ekranu
jednako izgleda i radi na svim platformama
veliki broj komponenti, tj. nema ograničenja na broj i
tip 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
176
Event Driven model




korisnički interfejs kod GUI aplikacija je upravljan
događajima
pišu se metode (obrađivači događaja) koje se izvršavaju
po pojavi nekog događaja korisničkog interfejsa - klik
mišem, pritisak tastera i sl.
program ima inicijalizacioni blok i blokove koda koji
reaguju na događaje korisničkog interfejsa (obrađivače
događ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)
177
Event Driven model (2)
inicijalizacioni blok se u Java GUI
programima izvršava počevši od metode
main()
 događaji se opisuju xxxEvent klasama –
za svaku vrstu događaja definisana je
posebna klasa
 pritisak tastera – KeyEvent klasa
 pomeranje miša – MouseEvent klasa
 sve xxxEvent klase nasleđuju klasu Event

178
Event Driven model (3)



svaka akcija nad komponentama korisničkog
interfejsa izaziva generisanje objekata klasa
naslednica Event klase
ti objekti se prosleđuju objektima klasa
naslednica
EventListener
klase,
koje
“osluškuju” događaje
“osluškivači” – instance neke od xxxListener
klasa, npr.:


KeyListener – “osluškivač” za KeyEvent događaj
EventListener-i uvedeni od verzije 1.1.
179
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 inicijalizuje
i glavni prozor aplikacije, koji se potom i
prikaže na ekranu
 Primer: GUI aplikacija koja otvara prozor

180
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);
}
}
181
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 elementa
korisničkog interfejsa
ovakav opis se može kreirati u tekstualnoj datoteci
odgovarajućeg formata ili nacrtati primenom
odgovarajućeg alata
“vizelna okruženja” za razvoj softvera – programer crta
izgled svoje aplikacije
u Javi se izgled korisničkog interfejsa ne definiše
deklarativno, pomoću resursa
Java aplikacije svoj korisnički interfejs grade
programski, najčešće u toku inicijalizacije prozora
182
Dodavanje komponenti na prozor

prilikom konstrukcije objekta klase naslednice JFrame dodaju se
komponente 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
//klase
private JButton bOK = new JButton("OK");
private JButton bCancel = new JButton("Cancel");
}
183
Dodavanje komponenti na prozor
184
Prostorni raspored komponenti





koriste se layout manager-i
instanca neke od xxxLayout klasa
različiti layout manager-i iste komponente
raspoređuju na različit način
svaki kontejner ima sebi asociran layout
manager
standardni layout manager-i:


BorderLayout,
GridLayout,
SpringLayout
CardLayout,
GridBagLayout,
FlowLayout,
BoxLayout,
korisnički definisani layout manager-i
185
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
NORTH
EAST CENTER WEST
SOUTH
186
Prostorni raspored komponenti

BoxLayout:
 Horizontalno u jednoj vrsti ili vertikalno u jednoj
koloni
187
Prostorni raspored komponenti
FlowLayout:

Ređa komponente na način na koji se
prelama tekst
188
Prostorni raspored komponenti

GridLayout:

Tabela međusobno jednakih komponenti
189
Prostorni raspored komponenti
 GridBagLayout:
 Formira
se tabela međusobno
različitih kolona i vrsti
190
Prostorni raspored komponenti
Apsolutno pozicioniranje
 Raspoređivač kontejnera se uklanja:
setLayout(null)


Zatim se komponente postavljaju sa
metodom:
setBounds(int x, int y, int width int heigh)
191
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 biti
instanca neke klase koja implementira odgovarajući
interfejs
import java.awt.*;
import java.awt.event.*;
public class MyListener implements ActionListener {
public void actionPerformed(ActionEvent ev) {
System.exit(0);
}
}
192
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 dugmadima
bOK.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");
}
193
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 netBeans
JButton b = new JButton("Pritisni me");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
...
});
194
Komponente
JButton
Dugme
JTextField
Jednolinijsko Edit polje
JTextArea
Višelinisjko Edit polje (Memo)
JLabel
Labela
JCheckBox
CheckBox
ButtonGroup
Kontejner za Radio Button-e, nije vidljiva komponenta
JRadioButton
Radio Button
JComboBox
ComboBox
JList
JTabbedPane
JOptionPane
ListBox
Kartice
MessageBox
JMenu
Meniji
JMenuItem
Stavka menija
JDialog
DialogBox
JFrame
Prozor
195
Reakcije na događaje
Tip događaja
ActionEvent
AdjustmentEvent
AncestorEvent
ComponentEvent
ContainerEvent
FocusEvent
KeyEvent
HierarchyEvent
MouseEvent
WindowEvent
ItemEvent
TextEvent
Dodeljeni Listener
ActionListener
AdjustmentListener
AncestorListener
ComponentListener
ContainerListener
FocusListener
KeyListener
HierarchyListener
MouseListener
WindowListener
ItemListener
TextListener
196
8. čas
Apleti
Apleti




Popularnost jave je najviše posledica Java apletima
Apleti su posebna vrsta Javinih programa koji se
koriste kao delovi Internet prezentacija
Zajedno sa ostalim sadržajem HTML stranice
(slike, tekst, linkovi, multi-medijalni sadržaj), Java
apleti se transportuju preko mreže i izvršavaju na
Internet pretraživačima korisnika
Dok se prozori koriste za kreiranje grafičkih
interfejsa koji podržavaju samostalne aplikacije,
aplet se od običnog Java programa razlikuje po
tome što se on ne može izvršavati samostalno, već
mu je za to potreban neki drugi program, kao što
je Internet pretraživač
198
Apleti

ograničenja:





apleti ne mogu pristupati fajl sistemu računara na kome se
izvršavaju
apleti ne mogu uspostaviti mrežnu konekciju sa bilo kojim
računarom, osim sa Web serverom sa koga su preuzeti
aplet je klasa koja nasljeđuje klasu Applet (AWT) ili
JApplet (Swing)
pisanje apleta – nasleđivanje klase JApplet i
redefinisanje odgovarajućih metoda
Najvažnije metode:
 init()
 start()
 stop()
 paint()
 destroy()
199
Primer apleta
AppletTest.java
import javax.swing.*;
import java.awt.*;
public class AppletTest extends
JApplet {
public void init() {
getContentPane().add(new
JLabel("Applet!"));
}
}
200
HTML stranica sa apletom
AppletTest.html
...
<applet code = "AppletTest”
width = 200 height = 200>
</applet>
...
index.html
...
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E900805F499D93“
codebase =
"http://java.sun.com/update/1.5.0/jinstall-1_5windows-i586.cab#Version=1,5,0,0"
WIDTH = 400 HEIGHT = 400 >
...
</OBJECT>
201
Primer apleta sa dugmetom
JButtonTest.java
import java.awt.*;
import javax.swing.*;
public class JButtonTest extends JApplet {
JButton b;
public void init() {
b = new JButton("Pritisni me");
Container cp = getContentPane();
cp.add(b);
}
}
 postavljanje komponenti na površinu apleta ne razlikuje se ni po
čemu od postavljanja komponenti na prozor klasične aplikacije
202
Aplet i aplikacija zajedno
aplet – osnovna klasa mora naslediti
Japplet klasu
 aplikacija – mora imati main()
 2 in 1:


osnovna klasa nasleđuje JApplet klasu i
sadrži main() metodu
203
Korisnički definisane komponente




koriste se u situacijama kada standardne
komponente ne mogu da obezbede
zadovoljavajuću funkcionalnost
konstruišu se nasleđivanjem neke od
standardnih komponenti korisničkog interfejsa
za vizuelne komponente potrebno je
redefinisati paint() metodu za iscrtavanje
ako nijedna komponenta nije adekvatna za
nasleđivanje, može se koristiti generička
komponenta JComponent
204
JavaBeans



standard za kreiranje softverskih komponenti
koje imaju svoje osobine i ponašanje i koje se
mogu koristiti u okviru RAD alata
svaka JavaBean komponenta ima svojstva
(properties) i događaje (events)
JavaBean je svaka Java klasa za koju važi:



da ima podrazumevani konstruktor
za svaki property xxx moraju da postoje public
metode setXxx() i getXxx();
Za svaki event xxxEvent moraju da postoje public
metode
addXxxListener(XxxListener)
i
removeXxxListener(XxxListener)
205
9. čas
Konekcija sa bazom podataka
Napisati program koji ispisuje prvih n
članova fibonačijevog niza
import java.util.Scanner;
public class Fibonacci{
public static int fib(int n) {
int f1=1, f2=2, temp=0;
if (n==1){
return 1;
}else if (n==2){
return 2;
}else {
for(int i=3; i<=n; i++) {
temp = f1;
f1 = f2;
f2 = temp + f2;
}
return f2;
}
}
public static void main(String[] args) {
System.out.println("Do kojeg elementa ispisujemo
fibonacijev niz:");
Scanner consoleIn = new Scanner(System.in);
int n = consoleIn.nextInt();
for (int i=1; i<=n; i++)
System.out.print(fib(i)+", ");
}
}
207
Napisati program koji trazi od korisnika da unese rečenicu a
zatim je ispisuje u obliku gde su sva početna slova reči velika
slova a sva ostala mala.
import java.util.Scanner;
public class UpperCase {
public static void main(String[] args) {
String line; // recenica koju unosi korisnik
Scanner consoleIn = new Scanner(System.in);
System.out.println("Unesite recenicu:");
line= consoleIn.nextLine();
printCapitalized( line );
}
static void printCapitalized( String str ) {
char ch;
// trenutni karakter u stringu.
char prevCh; // karakter koji prethodi trenutnom.
int i;
// pozicija u stringu, od 0 to str.length()-1.
prevCh = '.'; // pocetna vrednost za prethodni karakter
// treba da je bilo sta sto nije slovo
for ( i = 0; i < str.length(); i++ ) {
ch = str.charAt(i);
if ( Character.isLetter(ch) && ! Character.isLetter(prevCh) )
System.out.print( Character.toUpperCase(ch) );
else
System.out.print(Character.toLowerCase(ch) );
}
prevCh = ch; // trenutni postaje prethodni
}
System.out.println();
}
208
Konekcija
209
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
210
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();
}
211
Java SQL pristup bazama

Za zatvaranje konekcije:
try{
conn.close();
}catch(Exception ex){
ex.printStackTrace();
}
212
Java SQL pristup bazama

Postavljanje upita:
String sql="INSERT INTO slonovi (ime, prezime)" + "VALUES
('"+jTextField1.getText()+"', '"+jTextField2.getText()+"')";
try{
if ((jTextField1.getText()!=null)&&(jTextField2.getText()!=null)) {
int rowsAffected = stmt.executeUpdate(sql);
}
}catch(Exception ex){
ex.printStackTrace();
}
213
Podešavanje izgleda aplikacije:

U main klasi za XP look:
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
ex.printStackTrace();
}
214
EXTRA
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 i
smeštanje istih u HTML fajl
Oznake za dokumentaciju koje počinju sa
@ nazivaju se samostalne (stand-alone) i
moraju stajati u zasebnom redu, npr.
@author Boban
Oznake koje počinju vitičastim zagradama
nazivaju se unutrašnje (in-line) i mogu se
stavljati unutar većih opisa, npr. {@code}
216
Č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 is
koristi kao izvor podataka.
 Sledeći iskaz pravi objekat tipa Scanner koji
podatke čita sa standardnog ulaza, što je
podrazumevano tastatura:
Scanner consoleIn = new Scanner(System.in);
Napomena: System.in je objekat tipa InputStream.
217
Primer
import 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);
}
}
218
Interfejsi





Ključna riječ interface u Javi koristi se za
potpuno apstrahovanje načina pristupa
klasi – tj. možemo reći klasi šta da radi, ali
ne i kako.
Interfejsi nemaju promjenljive instanci, a
njihove metode nemaju telo.
Klasa može implementirati više interfejsa
(ključna riječ implements).
Koriste se za implementaciju višestrukog
nasleđivanja.
Interfejsi se mogu proširiti, tj. jedan
interfejs može da nasledi drugi pomoću
ključne riječi extends
219