Upload
trandieu
View
225
Download
1
Embed Size (px)
Citation preview
Univerzitet u Novom Sadu
Fakultet tehničkih nauka
Odsek za računarsku tehniku i računarske komunikacije
Projektovanje NamenskihRačunarskih Struktura 1
Sistemi zasnovani na Androidu
Uvod u programski jezik Java
kao osnova za razvoj Android aplikacija
Java kao platforma
Dizajniran da što manje zavisi od specifičnih karakteristika konkretnog računarskog sistema
Jednom napisan i preveden program se izvršava na bilo kojoj platformi koja podržava Javu
„Write once, run everywhere“
Java procesori
2017 PNRS1 2
3
Java tok razvoja programa
1. Platforma zaizvršavanjeprograma – Java Virtuelna mašina(JVM)
2. Programski jezik
2017 PNRS1
Primer bajtkoda
2017 PNRS1 4
for (int i = 2; i < 1000; i++) {
for (int j = 2; j < i; j++) {
if (i % j == 0)
continue outer;
}
System.out.println (i);
}
0: iconst_21: istore_12: iload_13: sipush 10006: if_icmpge 449: iconst_210: istore_211: iload_212: iload_113: if_icmpge 3116: iload_117: iload_218: irem19: ifne 2522: goto 3825: iinc 2, 128: goto 1131: getstatic #84; // Field java/lang/System.out:Ljava/io/PrintStream;34: iload_135: invokevirtual #85; // Method java/io/PrintStream.println:(I)V38: iinc 1, 141: goto 244: return
Java kao platforma
Bajt-kod
rezultat prevođenja izvornog koda – mašinski jezik nepostojećeg procesora
specifikacija je dostupna – više implementacija kompajlera
Interpretirani jezik
interpretira se bajt kod na konkretnoj platformi
JIT - Just In Time Compiler
Java virtuelna mašina (JVM)
interpreter bajt koda
specifikacija je dostupna – više implementacija JVM
2017 PNRS1 7
Java kao programski jezik
Jezik opšte namene
Konkurentno, objektno-orijentisano programiranje
Sintaksa slična C++ jeziku
2017 PNRS1 8
Izvršavanje programa
metoda main()
Hello.java
class Hello {
public static void main(String args[]) {
System.out.println(“Hello world!”);
}
}
2017 PNRS1 9
Prevođenje i pokretanje
prevođenje:
javac Hello.java
Izvršavanje programa:
java Hello
ovo važi sa standardni razvojni paket JDK (Java Development Kit)
2017 PNRS1 10
Osnovni koncepti
Sintaksa: podseća na C++ Programski blok je ograđen vitličastim zagradama:
{ ... }
Tipovi podataka primitivni tipovi
kao lokalne promenljive i parametri metoda, čuvaju se na stekukao parametri, uvek se prenose po vrednosti!
objekti, kao instance klasačuvaju se na heap-upostoje samo reference na objekte, nikada se ne može pristupiti
samom objektukao lokalne promenljive i parametri metoda, reference se čuvaju na
steku
Metode: povratna_vrednost naziv(parametri) { }
2017 PNRS1 11
Osnovni koncepti
Primitivni tipovi podataka
Primitivni tip Veličina Minimum Maksimum
boolean 1-bit – –
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 – – –
2017 PNRS1 12
Konstante
Celobrojne konstante: 2
2000000L
Razlomljene konstante: 3.14
Heksadecimalne konstante: 0xF, 0xFF
Znakovne konstante: ‘a’
‘\n’
‘\xxx’, gde je xxx oktalni ASCII kod karaktera
String konstante: ”ovo je tekst”
2017 PNRS1 13
Deklaracija promenljive primitivnog tipa
Promenljiva se može deklarisati u bilo kom bloku – ne mora na početku metode.
int a;
int a = 0;
int a, b;
int a = 0, b = 3;
2017 PNRS1 14
Implicitna konverzija tipova
Sa “užeg” ili “manjeg” tipa na “širi” ili “veći” tip.
Nema gubitka informacije jer “uži” tip podatka staje u “širi” tip podatka.
Primer:
long a;
int i = 5;
a = i;
2017 PNRS1 15
Eksplicitna konverzija tipova
Sa “šireg” na “uži” tip podatka – posledica je gubljenje informacije (odsecanje)
Primer:
long a = 5L;
int b = a; Greška pri prevođenju!
2017 PNRS1 16
Eksplicitna konverzija tipova
Pravilna eksplicitna konverzija – upotreba cast operatora
programer preuzima odgovornost za potencijalno gubljenje informacije (odsecanje)
Primer:
long a = 5L;
int b = (int)a;
2017 PNRS1 17
Enumeracije
Nabrojivi tipovi podataka (celobrojni)
Primer:
enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE};
Size s = Size.MEDIUM;
enum Days {MON, TUE, WEN, THU, FRI, SAT, SUN};
Days d = Days.MON;
2017 PNRS1 18
Aritmetički operatori
Osnovne operacije:
+, -, *, /, %
Umesto x = x + 1;
x += 1;
Automatski inkrement: ++x odn. x++
2017 PNRS1 20
Relacioni i logički operatori
Relacioni: < > <= >= == !=
Logički: && (I), || (ILI), ! (NE)
2017 PNRS1 21
Bit operatori
Logičko I nad bitovima: &
Logičko ILI nad bitovima: |
Ekskluzivno ILI (XOR) nad bitovima: ^
Logička negacija nad bitovima -unarni operator: ~
Kombinacija sa =:
&= |= ^=
2017 PNRS1 22
Bit operatori
Shift-ovanje (pomeranje):a>>b – pomera bitove u a za b mesta- ako je a pozitivan, ubacuje 0- ako je a negativan, ubacuje 1a<<b – pomera bitove u levo i ubacuje 0a>>>b – pomera bitove u a u desno za b mesta i
ubacuje 0 bez obzira na znak a.Rezultat pomeranja je 32-bitan, osim ako
promenljiva koja prihvata rezultat nije long (tada je 64-bitan)!
2017 PNRS1 23
Operator dodele
Ako su operandi primitivni tipovi, kopira se sadržaj:
int i = 3, j = 6;
i = j; // u i ubačeno 6
Ako su operandi reference, kopira se sadržaj reference, a ne kompletni objekti na koje ukazuju!
2017 PNRS1 24
Nizovi
int a[]; // još uvek nije napravljen niz!
a = new int[5]; // niz od 5 nula
ili
int a[] = new int[5]; // niz od 5 nula
ili
int a[] = { 1, 2, 3, 4, 5 };
2017 PNRS1 26
Višedimenzionalni nizovi
int a[][] = { {1, 2, 3 }, {4, 5,
6 } };
int a[][] = new int[2][3];
int a[][] = new int[2][];
for(int i = 0; i < a.length; i++)
{
a[i] = new int[3];
}
2017 PNRS1 27
Klasa String
Niz karaktera je podržan klasom String. String nije samo niz karaktera – on je klasa!
Objekti klase String se ne mogu menjati (immutable)!
Reprezentativne metode: str.length()
str.charAt(i)
str.indexOf(s)
str.substring(a,b), str.substring(a)
str.equals(s), str. equalsIgnoreCase(s) – ne koristiti ==
str.startsWith(s)
2017 PNRS1 28
Klasa String
class StringTest {
public static void main(String args[]) {
String s1 = "Ovo je";
String s2 = "je string";
System.out.println(s1.substring(2));
// karakter na zadatoj poziciji
System.out.println(s2.charAt(3));
// poređenje po jednakosti
System.out.println(s1.equals(s2));
// pozicija zadatog podstringa
System.out.println(s1.indexOf("je"));
// dužina stringa
System.out.println(s2.length());
// skidanje whitespace-ova sa poč. i kraja
System.out.println(s1.trim());
// provera da li string počinje podstringom
System.out.println(s2.startsWith("je"));
}}
Ispis na konzoli:
o je
s
false
4
9
Ovo je
true
2017 PNRS1 29
Redefinisan + operator sa stringovima
Ako je jedan od operanada klase String, ceo izraz je string!
String a = “Vrednost i je: “ + i;
2017 PNRS1 30
Kolekcije
Nizovi imaju jednu manu – kada se jednom naprave nije moguće promeniti veličinu.
Kolekcije rešavaju taj problem.
Zajedničke metode:
Dodavanje elemenata,
Uklanjanje elemenata,
Iteracija kroz kolekciju elemenata
Slično STL u C++
2017 PNRS1 31
Tipizirane kolekcije -Generics
U kolekcijama mogu da se smeste bilo koji objekti Mana: prilikom pristupa elementu iz kolekcije, obavezno se kastuje
u konkretan tip:
ArrayList kolekcija = new ArrayList();
kolekcija.add("tekst");
String s = (String)kolekcija.get(0);
Tipizirane kolekcije omogućavaju smeštaj samo jednog tipa podatka u kolekciju.
Primer:ArrayList<String> kolekcija = new ArrayList<String>();
kolekcija.add("tekst");
String s = kolekcija.get(0);
Potencijalan problem prilikom pogrešnog
kastovanja
2017 PNRS1 32
Klasa ArrayList
Predstavlja kolekciju, odn. dinamički niz
Elementi se u ArrayList dodaju metodom add()
Elementi se iz ArrayList uklanjaju metodom remove()
Elementi se iz ArrayList dobijaju (ne uklanjaju se, već se samo čitaju) metodom get()
2017 PNRS1 33
Klasa ArrayList
import java.util.ArrayList;
class ArrayListTest {
public static void main(String args[]) {
ArrayList<String> v = new ArrayList<String>();
v.add("Ovo");
v.add("je");
v.add("probni");
v.add("tekst");
for (int i = 0; i < v.size(); i++)
String s = v.get(i);
System.out.println(s);
}
}2017 PNRS1 34
Asocijativne mape
Memorijske strukture koje omogućuju brzu pretragu sadržaja po ključu
Element se ubacuje u paru sa svojim ključem, koji mora da bude jedinstven
2017 PNRS1 35
Klasa HashMap
Predstavlja asocijativnu mapu
U HashMap se stavljaju dva podatka:
ključ po kojem će se pretraživati
vrednost koja se skladišti u HashMap i koja se pretražuje po ključu
Metodom put() se ključ i vrednost smeštaju u HashMap
Metodom get() se na osnovu ključa dobavlja (samo čita) vrednost iz HashMap
2017 PNRS1 36
Klasa HashMap
import java.util.HashMap;
public class HashMapTest {
public static void main(String args[]) {
HashMap<String, String> ht =
new HashMap<String, String>();
ht.put("E10020", "Marko Markovic");
ht.put("E10045", "Petar Petrovic");
ht.put("E10093", "Jovan Jovanovic");
String indeks = "E10045";
System.out.println("Student sa brojem indeksa " +
indeks + " je " + ht.get(indeks));
indeks = "E10093";
System.out.println("Student sa brojem indeksa " +
indeks + " je " + ht.get(indeks));
}
2017 PNRS1 37
Metode
Opšta sintaksa:povratni_tip ime_metode(parametri) {
...
}
Povratni tip je bilo koji tip podatka ili void ako funkcija ne vraća vrednost. metoda vraća najviše jednu vrednost!
Parametri se deklarišu na isti način kao i promenljive. Ako metoda nema parametara ostave se prazne zagrade.
Ako metoda vraća vrednost, to se postiže return naredbom: return a; return (a);
2017 PNRS1 38
Parametri i rezultat metoda
parametri mogu biti: primitivni tipovi reference na objekte
rezultat može biti: primitivni tip referenca na objekat
Metoda vraća vrednost naredbom:return vrednostilireturn (vrednost)
2017 PNRS1 39
Primeri definicije
int max(int a, int b) {
if (a > b)
return a;
else
return b;
}
void printInt(int i) {
System.out.printf("%d", i);
}
2017 PNRS1 40
Parametri metoda
Parametri metoda se u nekim programskim jezicima prenose po vrednosti ili po referenci
u programskom jeziku Java, prenos je isključivo po vrednosti
2017 PNRS1 41
Prenos parametara po vrednosti
Prenos parametara po vrednosti:
prave se kopije parametara i te kopije se prosleđuju metodi
posledica: nije moguće promeniti prosleđenu promenljivu iz metode
2017 PNRS1 42
Nizovi kao parametri metoda
U listi parametara metode ne navode se dimenzije.
Primer:void f(int a[]) {
...
a[3] = 5;
}
Ako je potrebna veličina niza, ona se može saznati iz atributa length:a.length
Ovo će promeniti a[3] u pozivajućoj funkciji!
• Nizovi se ne prosleđuju po vrednosti, tj. ne pravi se kopija niza!
• Element niza se može promeniti iz funkcije!
2017 PNRS1 43
Opseg vidljivosti promenljivih
Promenljive deklarisane unutar metode se “vide” samo u metodi
to su lokalne promenljive
Pomenljive deklarisane izvan metode se “vide” i u ostalim funkcijama
to su atributi
2017 PNRS1 44
Rekurzivne metode
Rekurzija: metoda poziva samu sebe
Svaka rekurzivna metoda mora da ima uslov za izlaz iz rekurzije!
Pozitivno: razumljivije
ponekad i jedino moguće(Akermanova funkcija)
Mana: opterećuje stek
brzina
2017 PNRS1 45