35
Odsek za računarsku tehniku i računarske komunikacije Projektovanje namenskih ra čunarskih struktura 1 Uvod u Javu

Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Odsek za računarsku tehniku i računarske komunikacije

Projektovanje namenskihračunarskih struktura 1

Uvod u Javu

Page 2: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Razvoja aplikacija za Android

Inicijalno odabrani jezik za razvoj Android aplikacija je Java

Usled slojevite arhitekture, izbor jezika utiče najviše na gornja dva sloja Androida

Od 2017 moguće je koristiti i Kotlin za razvoj aplikacija, koji je kompatibilan sa Javom, uz neke promene u sintaksi jezika

U ovom predmetu, koristićemo Javu

2020 2

App0 App1 App2 App3 App4

Application layer

Activity manager

Frameworks layerWindow manager

Content providers

View systemNotification

manager

Package manager

Resource manager

XMPP service

Surface manager

Runtime layer

OpenGL/ES

SGL

Media framework

Freetype

SSL

SQLite

Webkit

libc

Libraries Android runtime

CoreLibraries

Dalvik Virtual Machine (DVM)

Kernel layer

Display driver

USB driver

Mouse driver

Keyboard driver

Ethernet driver

WiFi driver

Flash memory driver

Audio drivers

Binder (IPC) driver

Power management

Hardware

Java

C, C

++, n

ativ

e co

de

Ass

emb

ler,

C

Graphics Audio Camera GPS ...

Hardware Abstraction Layer (HAL)

Page 3: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

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

o „Write once, run everywhere“

Java procesori

2020 3

Page 4: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Tok razvoja Java programa

Java je ujedno i programski jezik i platforma

Programski jezik poseduje svoju sintaksu, semantiku, jezičke konstrukcije i pravila

o jezik opšte namene

o konkurentno, objektno-orijentisano programiranje

o sintaksa slična C++ jeziku

Platforma za izvršavanje programa sa virtuelnom mašinom, osnovnim bibliotekama za rad, konvencijom

2020 4

Page 5: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Generički alati razvoja softvera

2020 5

Page 6: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Java kao platforma

Bajt-kod

o rezultat prevođenja izvornog koda – mašinski jezik nepostojećeg procesora

o specifikacija je dostupna – više implementacija kompajlera

Interpretirani jezik, ali nije script jezik

o interpretira se bajt kod na konkretnoj platformi

o JIT - Just In Time Compiler

Java virtuelna mašina (JVM)

o interpreter bajt koda

o specifikacija je dostupna – više implementacija JVM

2020 6

Page 7: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Primer bajtkoda

2020 7

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

Liči na običan asembler

Page 8: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Izvršavanje programa

metoda main()

Hello.java

class Hello {

public static void main(String args[]) {

System.out.println(“Hello world!”);

}

}

Prevođenje programa iz komandne linije:

javac Hello.java

Izvršavanje programa iz komandne linije:

java Hello

2020 8

Page 9: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Osnovni koncepti

Sintaksa: podseća na C++, može se puno znanja preslikati

Objektno-orijentisana paradigma je mnogo prisutnija nego u C++

Programski blok je ograđen vitličastim zagradama:{ ... }

Tipovi podatakao primitivni tipovi

kao lokalne promenljive i parametri metoda, čuvaju se na steku

kao parametri, uvek se prenose po vrednosti!

o objekti, kao instance klasa

čuvaju se na heap-u

postoje samo reference na objekte, nikada se ne može pristupiti samom objektu

kao lokalne promenljive i parametri metoda, reference se čuvaju na steku

2020 9

Page 10: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Primitivni tipovi podataka Jave

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

2020 10

Page 11: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Deklaracija promenljive primitivnog tipa

Promenljiva se može deklarisati u bilo kom bloku – ne mora na početku metode.

o Dobra je praksa smanjiti oblast važenja promenljive na minimum!

int a;

int a = 0;

int a, b;

int a = 0, b = 3;

2020 11

Ovo je ujedno i alokacija prostora za promenljivu

Page 12: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

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.

Primeri:

long a;

int i = 5;

a = i;

Sa “šireg” na “uži” tip podatka – posledica je gubljenje informacije (odsecanje)

Primer:

long a = 5L;

int b = a;

2020 12

Greška pri prevođenju!

Page 13: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Eksplicitna konverzija tipova

Pravilna eksplicitna konverzija – upotreba cast operatora

o programer preuzima odgovornost za potencijalno gubljenje informacije (odsecanje)

Primer:

long a = 5L;

int b = (int)a;

U Androidu, često se koristi i kastovanje na izvedene tipove!

Na primer View u Button

2020 13

Page 14: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

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;

Mnogo je deskriptivnije koristiti enumeraciju od brojčanih konstanti!

2020 14

Page 15: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

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

2020 15

Page 16: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

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

}

2020 16

Page 17: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

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:

o str.length()

o str.charAt(i)

o str.indexOf(s)

o str.substring(a,b), str.substring(a)

o str.equals(s), str. equalsIgnoreCase(s)

o str.startsWith(s)

Ako je jedan od operanada klase String, ceo izraz je string!

String a = “Vrednost i je: “ + i;

2020 17

Page 18: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Metode

Opšta sintaksa:

povratni_tip ime_metode(parametri) {

...

}

Povratni tip je bilo koji tip podatka ili void ako funkcija ne vraća vrednost.o metoda vraća najviše jednu vrednost!

Parametri se deklarišu na isti način kao i promenljive.o Ako metoda nema parametara ostave se prazne zagrade.

Ako metoda vraća vrednost, to se postiže return naredbom:o return a;o return (a);

2020 18

Page 19: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Parametri i rezultat metoda

Parametri mogu biti:o primitivni tipovio reference na objekte

Rezultat može biti:o primitivni tipo referenca na objekat

Metoda vraća vrednost naredbom:return vrednostilireturn (vrednost)

2020 19

Page 20: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

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

}

2020 20

Page 21: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Prenos parametara

Parametri metoda se u nekim programskim jezicima prenose po vrednosti ili po referenci

U programskom jeziku Java, prenos je isključivo po vrednosti

Prenos parametara po vrednosti:

o prave se kopije parametara i te kopije se prosleđuju metodi

o posledica: nije moguće promeniti prosleđenu promenljivu iz metode

2020 21

Page 22: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

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!

2020 22

Page 23: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Opseg vidljivosti promenljivih

Promenljive deklarisane unutar metode se “vide” samo u metodi

o to su lokalne promenljive

Pomenljive deklarisane izvan metode se “vide” i u ostalim funkcijama

o to su atributi

Težiti smanjenju opsega vidljivosti zbog potencijalnih nuspojava i grešaka

2020 23

Page 24: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Rezime

Java je programski jezik opšte namene korišćen u Androidu

Po sintaksi i po konceptima veoma podseća na C++

Generički koncepti su univerzalni, dok je programski jezik samo alat

o Bitno je savladati koncepte kroz alat!

Potrebno je dobro poznavati alat za efikasan razvoj i dizajn

Alat se upoznaje kroz rad i vežbu na realnim problemima (razvoj => iskustvo => dizajn)

2020 24

Page 25: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

DodatakDodatni detalji programskog jezika Java

2020 25

Page 26: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Konstante

Celobrojne konstante:

o 2

o 2000000L

Razlomljene konstante: 3.14

Heksadecimalne konstante: 0xF, 0xFF

Znakovne konstante:

o ‘a’

o ‘\n’

o ‘\xxx’, gde je xxx oktalni ASCII kod karaktera

String konstante: ”ovo je tekst”

2020 26

Page 27: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Operatori

aritmetički operatori

relacioni i logički

bit-operatori

operator dodele

2020 27

Page 28: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Aritmetički operatori

Osnovne operacije:

+, -, *, /, %

Umesto x = x + 1;

x += 1;

Automatski inkrement: ++x odn. x++

2020 28

Page 29: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Relacioni i logički operatori

Relacioni: < > <= >= == !=

Logički: && (I), || (ILI), ! (NE)

2020 29

Page 30: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

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

&= |= ^=

2020 30

Page 31: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

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 1

a<<b – pomera bitove u levo i ubacuje 0

a>>>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)!

2020 31

Page 32: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

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!

2020 32

Page 33: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Kontrola toka

if else

switch

for

while

do while

break

continue

2020 33

Page 34: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

Rekurzija: metoda poziva samu sebe

Svaka rekurzivna metoda mora da ima uslov za izlaz iz rekurzije!

Pozitivno:

o razumljivije

o ponekad i jedino moguće (Akermanova funkcija)

Mana:

o opterećuje stek

o brzina

2020 34

Rekurzivne metode

Page 35: Projektovanje namenskih računarskih struktura 1 · Osnovni koncepti Sintaksa: podsećana C++, može se puno znanja preslikati Objektno-orijentisana paradigma je mnogo prisutnija

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

}

2020 35