Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Odsek za računarsku tehniku i računarske komunikacije
Projektovanje namenskihračunarskih struktura 1
Uvod u Javu
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)
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
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
Generički alati razvoja softvera
2020 5
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
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
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
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
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
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
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!
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
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
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
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
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
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
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
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
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
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
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
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
DodatakDodatni detalji programskog jezika Java
2020 25
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
Operatori
aritmetički operatori
relacioni i logički
bit-operatori
operator dodele
2020 27
Aritmetički operatori
Osnovne operacije:
+, -, *, /, %
Umesto x = x + 1;
x += 1;
Automatski inkrement: ++x odn. x++
2020 28
Relacioni i logički operatori
Relacioni: < > <= >= == !=
Logički: && (I), || (ILI), ! (NE)
2020 29
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
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
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
Kontrola toka
if else
switch
for
while
do while
break
continue
2020 33
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
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