Professional Documents
Culture Documents
ObjekntnoProgramiranje Fizika2010 2011
ObjekntnoProgramiranje Fizika2010 2011
ObjekntnoProgramiranje Fizika2010 2011
UVOD
Just Another Vague Acronim - JAVA
1991. tvorac Jave James Gosling, Sun Microsystems
Stvorio jednostavan, platformski nezavistan jezik
Namenjen pokretanju elektronskih ureaja (Interaktivna TV,
inteligentne rerne, telefoni,..)
1994. Java se ugrauje u web browser WebRunner
1995. obavljuje se kod i dokumentacija Jave na Internetu
OSNOVNE KARAKTERISTIKE
Objektna orijentacija
podrava sve koncepte objektno orijentisanog programiranja
sintaksa slina C++ ali su izbaeni sloeni koncepti (pointeri)
Prenosivost
Java programi se prevode u byte kod koji nije mainski jezik
nijednog konkretnog raunara, ve se izvrava na JVM
Java Virtuelna Maina - je virtuelni raunar koji moe biti
simuliran na bilo kom raunaru
Prirodna prilagoenost Internetu
Java programi mogu da se izvravaju u Web browserima
Poseduju sigurnosne mehanizme
Mogu da se distribuiraju i izvravaju na razliitim mainama
Podrava konkurentno programiranje
Omoguene klase za korisniki interfejs (API) koji omoguuje
jedinstven izgled i korienje aplikacija
JAVA KAO PLATFORMA
Dizajniran da to manje zavisi od specifinih karakteristika
konkretnog raunarskog sistema
Jednom napisan i preveden program se izvrava na bilo kojoj
platformi koja podrava Javu
Interpretirani jezik, bajt-kod
Java virtuelna maina (JVM)
Dve vrste Java programa
Apleti
izvravaju se u okviru WWW itaa
automatska distribucija i instalacija
ograniene mogunosti apleta iz razloga bezbednosti
Aplikacije
JAVA 2 PLATFORMA
2
Prog.class
Java bajt kod
JVM za
Macintosh
JVM za
Windows
JVM za
Linux
ECLIPSE
http://www.eclipse.org/downloads/
case sensitive
vodite rauna o
velikim i malim
slovima
System.out.println("Hello, World");
Klasa System nalazi se u paketu java.lang. Njeno puno ime je
java.lang.System. Meutim, java.lang je jedini paket za koji se ne
mora navesti puno ime klase. Out je statika varijabla lanica klase
System tipa PrintStream; println je jedna od metoda klase
5
REZERVISANE REI
The words goto and const are reserved to the extent that programmers
cannot use them, but they have no specific meaning in the Java language.
abstract assert
boolean
break byte
case
catch char
class const
continue default
do double
else
enum
extends
false final finally
float for
goto
if implements
import
instanceof
int
interface
long
native
new
null
package
private
protected public
return
short static
true
strictfp super switch
synchronized
this
throw throws
transient
try
void
volatile
while
Opis
Bitova
Oznaen
Opseg
boolean
Logicki tip
NA
char
Karakter
(Unicode)
16
Unsigned
\u0000 \uFFFF
0 215-1
byte
Ceo broj
Signed
-128 127
-27 27 -1
short
Ceo broj
16
Signed
-32768 - 32767
-215 215 -1
int
Ceo broj
32
Signed
-2147483648 2147483647
-231 231 -1
long
Ceo broj
64
Signed
-263 263 -1
float
Pokretni zarez
32
Signed
-3.4E38 +3.4E38
double
Eksponencijalni
zapis
64
Signed
-1.7E308 +1.7E308
Tip
Podataka
Default
vrednost
boolean
False
char
\u0000
byte
short
int
long
0L
float
0.0f
double
0.0d
boolean finished = 0;
if (finished == 0) if (finished)
true and false are the only two valid values
for a boolean type.
INICIJALIZACIJA
LITERALS
Karakteri
char question = '\u4567';
\n: Used to denote new line
\r: Used to denote a return
\t: Used to denote a tab
\b: Used to denote a backspace
\f: Used to denote a form feed
\': Used to denote a single quote
\": Used to denote a double quote
\\: Used to denote a backslash
Celi brojevi 43, O53, Ox2b, Ox2B, OX2b, 0X2B
(43 u dekadnom, oktalnom i heksadekadnom zapisu)
Realni brojevi: 12.33, 1.25E+8, 1.2534f, 156d
(The suffix f or F indicating a floating-point number; The suffix d or D
indicating double number)
If the suffix f or d is not used, the literal is interpreted as of type double.
PRIMER 1:
public class IntegerDemo {
public static void main(String [] args)
{
int x = 250;
System.out.println("x is "+ x);
short a, b, c;
c = 21;
b = 9;
a = (short) (b + c); //why cast to a byte?
System.out.println("a is " + a);
long y = 12345678987654321L; //notice the "L"
System.out.println("y is " + y);
y = x;
byte s;
s = (byte) c;
System.out.println("y is now " + y + \n and s is "+ s);
}
}
8
OPERATORI
Tip
operatora
Operator
Opis
Aritmetiki
operatori
++, -+, -, *, /, %
Operatori
poreenje
Logiki
operatori
&&, II, ^, !
Operatori za
rad sa
bitovima
Operatori
dodele
vrednosti
=
+=, -=, *=, /=,
%=
Dodela vrednosti
Dodela vrednosti sa primenom aritmetike
operacije
Spec.
operatori
+
Instanceof
?:
Konkatenacija stringova
Operator za proveru pripadnosti nekog
objekta klasi
PRIMER 2:
public class tipovi {
public static void main(String[] args) {
String first="Objektno", last="programiranje";
String name= first + " " + last;
System.out.println(" name je " + name);
String p= "Java " + first;
System.out.println(" p je " + p);
System.out.println(first + a + p);
int m=20;
System.out.println(" m << 2 = " + (m>>2));
int q = 5, y = 6, z = -3;
boolean k = ((q + 3 > y) ^ (z >= y)) && !(q == 5 | ++q == y);
System.out.println("b je " + k)
System.out.println("Ternary: " + (m==5 ? "yes" : "no"));
}
}
if (uslov)
{ uslovne_naredbe_1
}
else
{ uslovne_naredbe_2
}
if,else - kljune rei
uslov - moe biti taan ili netaan
uslovne_naredbe_1 - izvravaju se ako je izraz taan
uslovne_naredbe_2 - izvravaju se ako je izraz netaan
PRIMER 3:
public class StudentGrade {
public static void main(String [] args)
{
int score = 67;
char grade;
if(score >= 90)
{
grade = 'A';
System.out.println("Way to go!");
}
else if(score >= 80)
10
{
grade = 'B';
System.out.println("Good job");
}
else if(score >= 70 && score < 80)
{
grade = 'C';
}
else if(score >= 60)
{
grade = 'D';
}
else
{
grade = 'F';
System.out.println("Try again");
}
System.out.println("Your grade is a " + grade);
}
}
11
switch (promenljiva)
{ case(vrednost1):
uslovne_naredbe_1
break;
case(vrednost2):
uslovne_naredbe_2
break;
...
default: uslovne_naredbe
}
switch - identifikuje promenljivu na osnovu koje program odluuje
gde dalje da ide
case - poetak svake grane
break - obeleava kraj svake grane
default - ako nijedna promenljiva (char, int, short, byte) naredbe
switch ne odgovara ni jednoj vrednosti case
PRIMER 4:
public class ConStud {
public static void main(String [] args)
{
char grade ='A';
switch(grade)
{
case 'A' :
System.out.println("Excellent!");
break;
case 'B' :
System.out.println("Very good!");
break;
case 'C' :
System.out.println("Well done");
break;
case 'D' :
System.out.println("You passed");
break;
case 'F' :
12
13
PRIMER 6:
public class Factorijal {
public static void main(String[] args) {
long limit = 20L; // Calculate factorials of integers up to this value
long factorial = 1L; // A factorial will be stored in this variable
// Loop from 1 to the value of limit
for (long i = 1L; i <= limit; i++) {
factorial = 1L; // Initialize factorial
for (long factor = 2; factor <= i; factor++) {
factorial *= factor;
}
System.out.println(i + "! is " + factorial);
}
}
}
14
while( uslov )
{
naredbe_petlje;
}
izraz - testira se na poetku svakog prolaza u petlju
naredbe_petlje izvravaju se ako je uslov taan.
PRIMER 7:
public class WhileP {
public static void main(String[] args) {
int x = 1;
while(x <= 10)
{
System.out.println(x);
x++;
}
}
15
}
PRIMER 8:
public class BreakDemo
{
public static void main(String [] args)
{
int k = 1;
while(k <= 10)
{
System.out.println(k);
if(k == 6)
{
break;
}
k++;
}
System.out.println("The final value of k is " + k);
}
}
16
do
{
naredbe_petlje;
} while (uslov)
naredbe_petlje izvravaju se sigurno jedanput i svaki
sledei put za koji je uslov zadovoljen.
izraz - testira se posle prvog a pre svakog novog ulaska u petlju
PRIMER 9:
public class DoWhileP {
public static void main(String[] args) {
int y = 10;
do
{
if (y%3==0)System.out.println(y);
y += 10;
}while(y <= 100);
}
}
17
try/catch/finaly
try {
// izvrne_naredbe_1;
} catch (Neki_izuzetak e)
{
// naredbe_za_obradu;
}
finally {
// izvrne_naredbe_2;
}
try grupa naredbi u kojima se moe pojaviti izuzetak ili
abnormalni prekid (break, continue)
catch - Oznaava poetak obrade izuzetaka koji je tipa
Neki_izuzetak ili podklase tog tipa
finally Naredbe koje se izvravaju bez obzira na to da li je
dolo do pojave izuzetaka ili je normalno izvrena grupa naredbi u try
PRIMER 10:
package vezbe;
public class LeterCheck {
public static void main(String[] args) {
char symbol = 'A';
symbol = (char)(128.0*Math.random()); // Generate a random
character
if(symbol >= 'A') { // Is it A or greater?
if(symbol <= 'Z') {
// yes, and is it Z or less?
// Then it is a capital letter
System.out.println("You have the capital letter " + symbol);
} else {
// It is not Z or less
if(symbol >= 'a') {
// So is it a or greater?
if(symbol <= 'z') { // Yes, so is it z or less?
// Then it is a small letter
System.out.println("You have the small letter " + symbol);
} else {
// It is not less than z
System.out.println(
"The code is greater than a but it's not a letter");
}
} else {
System.out.println(
18
OBJEKTI I KLASE
Standardno, proceduralno programiranje (npr. C):
19
20
OBJEKTI
Klasom se opisuju objekti sa istim
karakteristikama (podaci lanovi)
ponaanjem (funkcionalnostima metode)
Podaci lanovi (atributi)
svaki objekat ima sopstvene vrednosti podataka lanova
trenutne vrednosti podataka objekta ine trenutno stanje
objekta
Funkcije lanice (metodi)
njima su definisana ponaanja objekta
poziv metoda jednog objekta slanje poruke
obrada zahteva tj. odgovaranje na poruku
PRIMER.
lt objekat klase Light
lt.on(); - slanje poruke, tj.
poziv metoda on objekta lt
METODI, OVERLOADING
skup metoda - interface
Povratni tip i ime metoda su obavezni, kao i ()
<modifikator> <povratni tip> <ime metoda> (<argumenti>) {
// Telo metoda. Ovde su date naredbe koda.
}
Metodi se definiu samo kao deo klase. Pozivi pogrenih metoda
za neki objekat se registruju pri kompajliranju.
int x = a.f(); // a je objekat odgovarajuce klase
Poseban tretman imaju static metodi, kao i static podaci (o tome
malo kasnije).
float naturalLogBase() { return 2.718f; }
void nothing() { return; }
Vraanje sa bilo koje take, ali sa odgovarajuim tipom.
OVERLOADING
U jednoj klasi (ili pri nasleivanju) se moe definisati vie metoda sa
istim imenom ali se oni moraju razlikovati po broju ili bar po
tipu argumenata. Dozvoljeno je i da
vraaju razliite tipove
(ali pod uslovom da se razlikuju po argumentima).
21
KREIRANJE OBJEKTA
Sve ime se manipulie je objekat neke klase (ak i sama
aplikacija/applet, naravno ne raunajui primitivne tipove), odnosno
referenca na objekat.
Objekat TV
Referenca daljinski
Sa sobom nosite daljinski, a ne televizor. Moete kupiti daljinski i bez
televizora.
Light lt; // kreirana je samo referenca
Light lt = new Light(); // kreiran je i objekat
PRIMER 12 - IZRAUNAVANJE ZAPREMINE
public class zapremina {
public static void main(String[ ] args)
{
int r=3;
float z=zapremina(r);
System.out.println("Zapremina lopte poluprecnika " + r+ " je "
+ z);
}
public static float zapremina(int r)
{
return (4.0f/3)*r*r*r*3.14f;
}
}
PRIMER 13:
Definisati klasu Robot (bez modifikatora) na sledei nain
Robot bez modifikatora
rbr
}
}
KONSTRUKTORI
class Tacka{
private double x;
private double y;
public Tacka() { x=0.0; y=0.0; }
public Tacka(double a, double b) { x=a; y=b; }
public double getX() { return x; }
public double getY() { return y; }
}
Konstruktor je metod ima isto ime kao i klasa, pozivase iskljuivo pri
instanciranju objekata (dakle, operatorom new),
nema povratne vrednosti
Klasa moe imati vie konstruktora (overloading na delu)
Konstruktor bez parametara je default konstruktor i on postoji
kada klasa nema posebno implementiran (naveden) ni jedan
konstuktor videti Primer 14., u suprotnom nee postojati
PRIMER 14:
public class Testovi {
public static void main(String[ ] args){
Tacka a = new Tacka();
Tacka b = new Tacka(1,1);
System.out.println("A(" + a.getX() + "," + a.getY() + ")\n");
System.out.println("B(" + b.getX() + "," + b.getY() + ")\n");
}
}
class Tacka {
private double x;
private double y;
public Tacka() { x=0.0; y=0.0; }
public Tacka(double a, double b) { x=a; y=b; }
public double getX() { return x; }
public double getY() { return y; }
}
Tacka(0,0)
double z = A.getX(); // greska, objekat ne postoji
double w = B.getX(); // OK
A = new Tacka(12,3);
Tacka(12,3)
Tacka(12,3)
Oblast vaenja
Oblast vaenja (scope) podrazumeva vidljivost i ivotni vek imena
i Java je definie slino C-u i C++-u
{ int x = 12;
/* samo je x dostupno*/
{ int q = 96;
/* x i q su dostupni */
}
/* samo x je dostupno a q ne postoji */
}
Za razliku od C-a u Javi nije dozvoljeno sledee
{ int x = 12;
{
25
26
27
INIZIJALIZACIJA NIZOVA
int[] primes = {2, 3, 5, 7, 11, 13, 17}; // An array of 7 elements
int[] primes = new int[100];
primes[0] = 2;
primes[1] = 3;
double[] data = new double[50];
for(int i = 0 ; i<data.length ; i++){
data[i] = 1.0;
}
PRIMER 15:
package vezbe;
import static java.lang.Math.sqrt;
public class Primes {
public static void main(String[] args) {
28
Arrays of Arrays
float[][] temperature = new float[10][365];
PRIMER 16:
public class weather {
public static void main(String[] args) {
float[][] temperature = new float[10][365]; //
Temperature array
// Generate random temperatures
for(int i = 0; i<temperature.length; i++) {
29
30