46
Univerzitet u Novom Sadu Fakultet tehničkih nauka Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih Računarskih Struktura 1 Sistemi zasnovani na Androidu Uvod u programski jezik Java kao osnova za razvoj Android aplikacija

Projektovanje Namenskih Računarskih Struktura 1 Sistemi ... · PDF file3 Java tok razvoja programa 1. Platforma za izvršavanje programa –Java Virtuelna mašina (JVM) 2. Programski

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

Alati razvoja programske podrške

PNRS1 52017

PNRS1 62017

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

Operatori

aritmetički operatori

relacioni i logički

bit-operatori

operator dodele

2017 PNRS1 19

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

Kontrola toka

if else

switch

for

while

do while

break

continue

2017 PNRS1 25

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

Rekurzivne metode

int fakt(int n)

{

int i, f=1;

for (i = 1; i <= n; i++)

{

f *= i;

}

return f;

}

int fakt(int n)

{

if (n < 2)

return 1;

return n * fakt(n-1);

}

2017 PNRS1 46