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 { 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: 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 promenjive naziv tipa
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
Primenjeno programiranje Drugi deo
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
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 slova: Z za zbir, R za razliku, P za proizvod, K za količnik. Potrebno je koristiti promenjivu tipa char 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. 56
switch naredba
Sintaksa switch naredbe:
switch(promenjiva){ case(vrednost1): izrazi; break; case(vrednost2): izrazi; break; ... default: izrazi; break; }
57
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; }
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
Java metode i klase
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 72
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; } 73
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
motor
Polimorfizam
Nadklasa auto
podklasa
Isti interfejs bez obzira na tipove podataka
nacrtaj()
nacrtaj() 74
Primer klase i metoda Class voce{ int grami; int kalorijePoGramu; int ukupnoKalorija() { return(grami* kalorijePoGramu); } }
75