Presentation is loading. Please wait.

Presentation is loading. Please wait.

Primenjeno programiranje

Similar presentations


Presentation on theme: "Primenjeno programiranje"— Presentation transcript:

1 Primenjeno programiranje
Petak: I čas: 15: :35 II čas: 16: :30 III čas: 17: :25 Primenjeno programiranje mr Boban Vesin

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 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

5 Tehnologije Programski jezik: Java Razvojni alat: NetBeans 6.5
Sistem za upravljanje bazama podataka: MySql 5.0

6 NetBeans 6.5

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 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 (

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

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; ————————; }

15 Primer Java programa Program koji ispisuje “Hello World”
class HelloWorldApp { public static void main(String[] args) { // ispis stringa. System.out.println("Hello World!"); }

16 Programski jezik Java Kompajliranje: javac HelloWorldApp.java
Kompajler generiše fajl: HelloWorldApp.class Pokretanje programa: java HelloWorldApp

17 Osnovni elementi Osnovni elementi Jave pomoću kojih se komponuju složenije konstrukcije jezika: Identifikatori Literali Specijalni simboli Rezervisane reči

18 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, upisiBroj

19 Literali Literale u Javi čine: Brojevi znakovne konstante
234 3.14 4.0E-74 znakovne konstante ‘h’ stringovske konstante “Novi Sad” logičke konstante true i false konstanta null

20 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 >>> <= 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 >>>

21 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

22 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

23 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

24 Prosti tipovi podataka
Celobrojni int short long byte Realni brojevi float double Znakovni char Logički boolean

25 Prosti tipovi podataka
Veličina Minimum Maximum boolean char 16-bit Unicode 0 Unicode byte 8-bit -128 +127 short -215 +215—1 int 32-bit - 231 +231—1 long 64-bit -263 +263—1 float IEEE754 double void

26 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

27 Deklaracija promenjivih
<tip podataka> <naziv promenjive> Primer: int num1; Inicijalizacija promenjivih: < tip podataka > < naziv promenjive > = vrednost Primer: double num2 = ; float initVal; int pom, index = 2; double gamma = 1.2, brightness; boolean valueOk = 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; 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 tipa naziv promenjive vrednost

29 Deklaracija promenjivih
int index = 1.2; // greška boolean retOk = 1; // greška double fiveFourths = 5 / 4; // nema greške float ratio = 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

30 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;

31 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

32 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" }

33 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);

34 Naredba dodele public class Demo {
public static void main (String[] arg) { boolean b; b = (2 + 2 == 4); System.out.println(b); }

35 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); // Pre-decrement prt("i-- : " + i--); // Post-decrement } static void prt(String s) { System.out.println(s); Rezultat izvođenja programa je: i : 1 ++i : 2 i++ : 2 i : 3 --i : 2

36 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 result = result * 2; // rezultat je 4 result = result / 2; // rezultat je 2 result = result + 8; // rezultat je 10 result = result % 7; // rezultat je 3 }

37 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()); }

38 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

39 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 * ; 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"); }

40 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); }

41 2. čas Grananje, petlje

42 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

43 Kontrola toka programa
if – else switch – case return while do – while for break continue • Naredbe: try – catch – finally throw

44 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; }

45 Relacioni operatori == jednakost != nejednakost >= veće ili jednako
<= manje ili jednako > veće < manje

46 If naredba If...else izraz sintaksa: if(uslov){ izrazi; } else{ }

47 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”);

48 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”);

49 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

50 Upozorenje… Neispravno! Ispravno! 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”);

51 Primer if naredbe if (prodaja > 75000){ bonus = 1000;
System.out.println(“Bonus iznosi $1000"); } System.out.println(“cilj za naredni mesec iznosi: $75000");

52 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); }

53 Primer 3 if naredbe if ( brGodina < 19 && ocena >= 3.0 ){
double vrednostProdaje = 0.0; int brojProdaja = 0; if (vrednostProdaje >= || brojProdaja > 10){ System.out.println(“Vas bonus je: $2,000."); } if ( brGodina < 19 && ocena >= 3.0 ){ System.out.println(“primljeni ste");

54 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"); }

55 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

56 switch naredba Sintaksa switch naredbe: switch(promenjiva){
// promenjiva ima celobrojnu ili logicku //vrednost case(vrednost1): izrazi; break; case(vrednost2): ... default: }

57 switch naredba switch ( n ) { case 1:
// izvršavanje prvog bloka naredbi break; case 2: // izvršavanje drugog bloka naredbi default: // ako ni jedan od predhodnih uslova //nije zadovoljen vrši se izvršavanje //trećeg bloka naredbi }

58 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.

59 for petlja Sintaksa for petlje:
for(inicijalizacija; uslov; inkrement){ izrazi; }

60 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

61 Primer 1. for petlja int i; for( i = 0; i < 10; i++ ){
System.out.println(i); }

62 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); }

63 while petlja Sintaksa while petlje while(uslov){ izrazi; }

64 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!

65 Primer while naredbe int x = 0; while (x<10) {
System.out.println(x); x++; }

66 do while petlja Sintaksa do...while petlje do{ izrazi; }while(uslov);
Primer: int x = 1; do { System.out.println(x); x++; }while (x<10);

67 do while petlja Telo petlje će se bar jednom izvršiti! do {
System.out.print( “ID =” + userID[n] ); n++; response = readInt( “Enter ” ); }while (response == 1); Telo petlje će se bar jednom izvršiti!

68 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

69 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); }

70 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; }

71 Treći čas Metodi i nizovi

72 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; }

73 Primer while class WhileDemo { public static void main(String[] args){
int count = 1; while (count < 11) { System.out.println(count); count++; }

74 Primer do while class DoWhileDemo {
public static void main(String[] args){ int count = 1; do { System.out.println(count); count++; } while (count <= 11); }

75 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

76 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) ); }

77 Metodi Deklaracija metoda: Primer:
<kvantifikator pristupa> <static/final> <povratni tip> <naziv metoda> <lista argumenata> { telo metoda; } Primer: public static void main(String args[]){ //telo metoda

78 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 (){ }

79 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

80 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 {}

81 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

82 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));

83 Primer klase i metoda Class voce{ int grami; int kalorijePoGramu;
int ukupnoKalorija() { return(grami* kalorijePoGramu); }

84 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);

85 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);

86 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; }

87 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);

88 Primer 6. public class calculation{ int first, answer;
public void paint (){ first = 34; calculation(); } public void calculation (){ answer = first * 2;

89 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;

90 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

91 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

92 Nizovi 3 6 1 4 mojNiz ima mesta za 8 elemenata
2 5 7 mojNiz ima mesta za 8 elemenata Elementima se pristupa uz pomoć indeksa niza U Javi, prvi element niza je na nultoj poziciji

93 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];

94 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};

95 Iteracije kroz nizove for petlja je korisna pri radu sa nizovima:
for (int i = 0; i < mojNiz.length; i++) { mojNiz [i] = getsomevalue(); }

96 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]); }

97 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

98 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ć");

99 4. čas Java klase i Stringovi

100 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; }

101 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; suma += brojevi[i]; double prosek = suma / brojevi.length; System.out.println(“Prosek je " + prosek + "."); }

102 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;

103 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

104 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 koji ima najviše delilaca

105 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

106 Primer klase i metoda 1 Class Voce{ int grami; int kalorijePoGramu;
int ukupnoKalorija() { return(grami* kalorijePoGramu); }

107 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

108 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+”)”;

109 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); //(2.0, 5.0) A.x = 0; A.y = 0; //(0.0, 0.0) }

110 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);

111 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.promenaStepenaPrenosa(3); bike2.stampajStanja(); }

112 Klase Deklaracija klase Konstruktor Overloaded konstruktor Metod
class Employee { public Employee (String n, double s) name = n; salary = s; } public Employee (String n) salary = 0; public void raiseSalary(double byPercent) salary *= 1 + byPercent / 100; public double getSalary() return salary; private String name; private double salary; Konstruktor Overloaded konstruktor Metod Definicija promenjivih

113 Tri proncipa OOP-a Enkapsulacija Nasleđivanje Polimorfizam Nadklasa
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 Nadklasa motor auto podklasa nacrtaj() nacrtaj()

114 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

115 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

116 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

117 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(" = " + y);

118 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) ...

119 Šta su klase i objekti? Klase su šabloni za kreiranje objekata (instanci klasa) promenjive Promenjive instance Statičke promenjive Metodi instance statički

120 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 = ; upperRight.y = middlePoint.x = 640.0; middlePoint.y = 512.0

121 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

122 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);

123 Stringovi Dužina stringova: Učitavanje stringa:
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();

124 Stringovi Konkatenacija (spajanje) stringova: ili: Rezultat je isti:
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);

125 Stringovi Pronalaženje pozicije podstringa: pos dobija vrednost 4
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”

126 Primer 1 Rezultat izvođenja je: int godiste = 1985;
String prefiks = “Moje godiste je: "; String godine = prefiks + godiste; System.out.println(godine); Rezultat izvođenja je: Moje godiste je: 1985

127 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 j]; String obrnutiPalindrom = new String(niz); System.out.println(obrnutiPalindrom);

128 Primeri, obrada izuzetaka, ostali elementi
5. čas Primeri, obrada izuzetaka, ostali elementi

129 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); }

130 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); }

131 Primer 2. Drugo rešenje: if ( a < b ) { if ( c < a )
System.out.println( c + " " + a + " " + b); else if ( c > b ) System.out.println( a + " " + b + " " + c); else System.out.println( a + " " + c + " " + b); } else { if ( c < b ) System.out.println( c + " " + b + " " + a); else if ( c > a ) System.out.println( b + " " + a + " " + c); System.out.println( b + " " + c + " " + a);

132 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]+" ");

133 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);

134 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

135 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

136 Ključna reč this Koristi se samo unutar metode
Vraća referencu na objekat za koji je metoda pozvana

137 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); ...

138 primer Class Autoput{ private int brojTraka = 3;
final void postaviBrojTraka(int noviBrojTraka){ brojTraka = noviBrojTraka; } final int citajBrojTraka(){ return brojTraka;

139 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

140 Sintaksa try-catch naredbe
// kod gde je moguće da dođe do izuzetka } catch(NazivKlaseIzuzetka NazivPromenjive) { // obrada prvog izuetka // obrada drugog izuzetka // obrada trećeg izuzetka } ...

141 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(); }

142 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() }

143 Primer throw naredbe Primer 2: 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);

144 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)

145 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

146 6. čas Korisnički interfejs

147 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

148 Basic Controls Jednostavne komponente koje se prvenstveno koriste za unos od strane korisnika

149 Basic controls

150 Basic controls

151 Basic controls

152 Basic controls

153 Interactive Displays of Highly Formatted Information
Komponente za prikazivanje interakcije koju može korisnik izmeniti

154 Interactive Displays of Highly Formatted Information

155 Interactive Displays of Highly Formatted Information

156 Interactive Displays of Highly Formatted Information

157 Interactive Displays of Highly Formatted Information

158 Uneditable Information Displays
Postoje samo da bi ponudile korisniku informacije

159 Uneditable Information Displays

160 Top-Level Containers Bar jedna od ovih komponenti mora biti prisutna u aplikaciji

161 Top-Level Containers

162 General-Purpose Containers
Kontejneri opšte namene Koriste se u većini sving aplikacija

163 General-Purpose Containers

164 General-Purpose Containers

165 Special-Purpose Containers
Kontejneri sa posebnim ulogama

166 Special-Purpose Containers

167 Special-Purpose Containers

168 Look and feel Java look and feel

169 Look and feel Windows look and feel

170 Look and feel CDE/Motif look and feel

171 Look and feel Default Alloy look and feel

172 Grafički korisnički interfejs (gui)
7. čas Grafički korisnički interfejs (gui)

173 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);

174 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

175 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

176 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

177 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)

178 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

179 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.

180 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

181 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);

182 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

183 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");

184 Dodavanje komponenti na prozor

185 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, CardLayout, FlowLayout, GridLayout, GridBagLayout, BoxLayout, SpringLayout korisnički definisani layout manager-i

186 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 WEST CENTER NORTH SOUTH

187 Prostorni raspored komponenti
BoxLayout: Horizontalno u jednoj vrsti ili vertikalno u jednoj koloni

188 Prostorni raspored komponenti
FlowLayout: Ređa komponente na način na koji se prelama tekst

189 Prostorni raspored komponenti
GridLayout: Tabela međusobno jednakih komponenti

190 Prostorni raspored komponenti
GridBagLayout: Formira se tabela međusobno različitih kolona i vrsti

191 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)

192 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); }

193 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");

194 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 b.addActionListener(new ActionListener() { });

195 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 ListBox JTabbedPane Kartice JOptionPane MessageBox JMenu Meniji JMenuItem Stavka menija JDialog DialogBox JFrame Prozor

196 Reakcije na događaje Tip događaja Dodeljeni Listener
ActionEvent ActionListener AdjustmentEvent AdjustmentListener AncestorEvent AncestorListener ComponentEvent ComponentListener ContainerEvent ContainerListener FocusEvent FocusListener KeyEvent KeyListener HierarchyEvent HierarchyListener MouseEvent MouseListener WindowEvent WindowListener ItemEvent ItemListener TextEvent TextListener

197 8. čas Apleti

198 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č

199 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()

200 Primer apleta AppletTest.java import javax.swing.*; import java.awt.*;
public class AppletTest extends JApplet { public void init() { getContentPane().add(new JLabel("Applet!")); }

201 HTML stranica sa apletom
AppletTest.html ... <applet code = "AppletTest” width = 200 height = 200> </applet> index.html <OBJECT classid="clsid:8AD9C E-11D1-B3E F499D93“ codebase = " WIDTH = 400 HEIGHT = 400 > </OBJECT>

202 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

203 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

204 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

205 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)

206 Konekcija sa bazom podataka

207 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)+", ");

208 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();

209 Konekcija

210 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

211 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(); }

212 Java SQL pristup bazama
Za zatvaranje konekcije: try{ conn.close(); }catch(Exception ex){ ex.printStackTrace(); }

213 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();

214 Podešavanje izgleda aplikacije:
U main klasi za XP look: try { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { ex.printStackTrace(); }

215 EXTRA

216 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 nazivaju se samostalne (stand-alone) i moraju stajati u zasebnom redu, Boban Oznake koje počinju vitičastim zagradama nazivaju se unutrašnje (in-line) i mogu se stavljati unutar većih opisa, npr.

217 Č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.

218 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); }

219 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


Download ppt "Primenjeno programiranje"

Similar presentations


Ads by Google