Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske...
Transcript of Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske...
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
Objektno orijentisani elementi
programiranja u programskom jeziku Java
Default vrednosti promenljivih
primitivni tipovi kao atributi klasePrimitivni tip Defaultboolean falsechar ‘\u0000’byte (byte)0short (short)0int 0long 0Lfloat 0.0fdouble 0.0d
reference kao atributi klase null
lokalne promenljive nemaju default vrednost – upotreba pre
inicijalizacije izaziva grešku kod kompajliranja!
2019 PNRS1 2
Inicijalizacija objekata
Ako želimo posebnu akciju prilikom kreiranja objekta neke klase, napravićemo konstruktor
Konstruktor se automatski poziva prilikom kreiranja objekta
Automobil a = new Automobil();
Ako ne napravimo konstruktor, kompajler će sam napraviti default konstruktor, koji ništa ne radi
2019 PNRS1 3
Method overloading
U klasi može da postoji više metoda sa istim imenom
Razlikuju se po parametrima
Metode se nikada ne razlikuju po povratnoj vrednosti
2019 PNRS1 4
Ključna reč final
final atributi: konstante
final int a = 5;
2019 PNRS1 5
Ono što je prirodno da bude final, deklarisati tako
Doprinosi čitljivosti i performansama!
Ključna reč static
Definiše statičke atribute i metode
Statički atributi i metode postoje i bez kreiranje objekta zato im se može pristupiti preko imena klase
StaticTest.i++;
Statički atributi imaju istu vrednost u svim objektima ako se promeni statički atribut u jednom objektu, on će se
promeniti i kod svih ostalih objekata
Namena statičkih metoda: pristup i rad sa statičkim atributima
opšte metode za koje nije potrebno da se kreira objekatMath.sin(x)
2019 PNRS1 6
Nasleđivanje
class Avion {
String oznaka;
float tezina;
Rezervoar rezervoar;
Krilo levo, desno;
Proizvodjac proizvodjac;
void poleti() { ... }
void sleti() { ... }
}
class BorbeniAvion extends Avion {
Top top;
Collection bombe;
void sleti() { ... }
int pucaj() { ... }
}
postoji samo jednostruko nasleđivanje2019 PNRS1 7
Modifikatori pristupa
public – vidljiv za sve klase
protected – vidljiv samo za klase naslednice i klase iz
istog paketa
private – vidljiv samo unutar svoje klase
nespecificiran (friendly) – vidljiv samo za klase iz istog paketa
2019 PNRS1 8
Method overriding
Pojava da u klasi naslednici postoji metoda istog imena i parametara kao i u baznoj klasi
Primer:
klasa A ima metodu metoda1()
klasa B nasleđuje klasu A i takođe ima metodu metoda1()
2019 PNRS1 9
Apstraktne klase
Klase koje ne mogu imati svoje objekteobično sadrže jednu ili više apstraktnih metoda –
metoda bez definicije (tela)
abstract class A {int i;public void metoda1() { ... }public abstract void metoda2();...
}
class B extends A {public void metoda2() { ... }
}
Ako klasa ima makar jednu apstraktnu metodu, mora da se deklariše kao apstraktna.
2019 PNRS1 10
Polimorfizam
Koncept po kojem se za neku varijablu (ili parametar metode ili povratnu vrednost) definiše tip bazne klase, a da se zapravo koristi klasa naslednica
2019 PNRS1 11
Polimorfizamabstract class Instrument {
abstract void sviraj();
}
class Violina extends Instrument {
void sviraj() { ... }
}
class Klarinet extends Instrument {
void sviraj() { ... }
}
class Muzicar {
Instrument i;
Muzicar(Instrument i) {
this.i = i;
}
sviraj() {
i.sviraj();
}
}
...
Muzicar m = new Muzicar(new Klarinet());
m.sviraj();2019 PNRS1 12
Interfejsi
Omogućavaju definisanje samo apstraktnih metoda, konstanti i
statičkih atributa
Interfejs nije klasa! On je spisak metoda i atributa koje klasa koja implementira interfejs mora da poseduje
Sve metode su implicitno public, a svi atributi su implicitno publicstatic final
Interfejsi se ne nasleđuju, već implementiraju
Da bi klasa implementirala interfejs, mora da redefiniše sve
njegove metode
Jedan interfejs može da nasledi drugog
Jedna klasa može da implementira jedan ili više
interfejsa
2019 PNRS1 13
Interfejsi
interface Instrument {int sviraj(Nota nota);int nastimaj(Nota nota);
}
class Klarinet implements Instrument {public int sviraj(Nota nota) { ... }public int nastimaj(Nota nota) { ... }
}
class Muzicar {
Instrument instrument;
int sviraj(Nota nota) {
return instrument.sviraj(nota);
}
}
2019 PNRS1 14
Izuzeci
Mehanizam za prijavu greške
da ne moramo da za to koristimo povratnu vrednost metode ili globalne promenljive
Dve vrste izuzetaka:
checked (Exception)
moraju se obuhvatiti try-catch blokom
unchecked (RuntimeException)
ne moraju se obuhvatiti try-catch blokom, pošto se mogu programski sprečiti: NullPointerException
ArrayIndexOutOfBoundsException
ArithmeticException
...
2019 PNRS1 15
try {
// kod koji može da izazove
// izuzetak
}
catch (java.io.EOFException ex) {
System.out.println("Kraj datoteke pre vremena!");
}
catch (ArrayIndexOutOfBoundsException ex) {
System.out.println("Pristup van granica niza");
}
catch (Exception ex) {
System.out.println("Svi ostali izuzeci");
}
finally {
// kod koji se izvršava u svakom slučaju
}
Izuzeci
2019 PNRS1 16
Izuzeci
Programsko izazivanje izuzetkathrow new Exception("Ovo je jedan izuzetak");
Korisnički definisani izuzeciclass MojException extends Exception {
MojException(String s) {
super(s);
}
}
2019 PNRS1 17
Izuzeci
Ključna reč throws
void f(int i) throws MojException { ... }
Propagacija izuzetaka
ne moramo da obuhvatimo try-catch blokom, već da deklarišemo da i pozivajuća metoda takođe baca izuzetak
tako možemo da prebacujemo odgovornost hvatanja izuzetka na gore
2019 PNRS1 18
Rukovanje greškama:izuzeci vs. strukturnog
Dva pristupa
Vraćanje koda greške iz svake funkcije
Može biti naporno
Izuzetak
Može biti fatalno
Neobrađeni izuzetak (pogrešna sintaksa konfiguracionog fajla) je iz dubine koda srušio ceo server
Dizajn odluka, u Java se koriste izuzeci
2019 PNRS1 19
Paketi
Način za hijerarhijsko organizovanje programa u module
ekvivalent foldera
tačka u nazivu paketa odgovara separatoru foldera u punoj putanji
Implicitni paket – kada ne definišemo paket
Upotreba
import java.io.*;
import java.util.Vector;
2019 PNRS1 20
Paketi
Kreiranje paketapackage imePaketa;
...
public class MojaKlasa { ... }
Korišćenje paketa
import imePaketa.MojaKlasa;
...
MojaKlasa m = new MojaKlasa();
ili
imePaketa.MojaKlasa m = new imePaketa.MojaKlasa();
2019 PNRS1 21
Paketi
Folderi (direktorijumi)
hijerarhija paketa se poklapa sa hijerarhijom foldera:
moj.paket.Lib -> moj\paket\Lib.class
2019 PNRS1 22
JAR arhive
Klasičan ZIP format
Sadrži i folder META-INF u kojem je najbitnija datoteka manifest.mf
Sadržaj manifest.mf datoteke:
Manifest-Version: 1.0
Created-By: 1.4.2_02 (Sun Microsystems Inc.)
Main-Class: moj.paket.Klasa
Class-Path: biblioteka.jar druga_biblioteka.jar
2019 PNRS1 23
Inner classes (unutrašnje klase)
public class Spoljasnja {
Spoljasnja() { ... }
void metoda1() { ... }
public class Unutrasnja {
void metoda2() { ... }
/* moze da pristupa spoljnoj klasi */
}
}
2019 PNRS1 24
Često se koristi u Android!
Lokalne klase (Local classes)
public class LocalClassExample {
public static void validatePhoneNumber(
String phoneNumber1, String phoneNumber2) {
final int numberLength = 10;
class PhoneNumber {
String formattedPhoneNumber = null;
PhoneNumber(String phoneNumber) {
}
public String getNumber() {
return formattedPhoneNumber;
}
}
PhoneNumber myNumber1 = new PhoneNumber(phoneNumber1);
PhoneNumber myNumber2 = new PhoneNumber(phoneNumber2);
}
}
PNRS1 252019
Često se koristi u Android!
Anonimne klase
public class HelloWorldAnonymousClasses {
interface HelloWorld {
public void greet();
public void greetSomeone(String someone);
}
public void sayHello() {
HelloWorld frenchGreeting = new HelloWorld() {
String name = "tout le monde";
public void greet() {
greetSomeone("tout le monde");
}
public void greetSomeone(String someone) {
name = someone;
System.out.println("Salut " + name);
}
};
frenchGreeting.greetSomeone("Fred");
}
}
2019 PNRS1 26
Često se koristi u Android!
Listeneri - osluškivači
//An example of using an anonymous inner class.
public class MyClass extends Applet {
...
someObject.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
...//Event listener implementation goes here...
}
});
...
}
}
2019 PNRS1 27
Generičke klase
/**
* Generic version of the Box class.
* @param <T> the type of the value being boxed
*/
public class Box<T> {
// T stands for "Type"
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
}
2019 PNRS1 28
Bolje koristiti nego praviti!
javadoc
Alat za automatsko generisanje programske dokumentacije na osnovu komentara u programskom kodu
Ulaz je izvorni kod
Specijalni komentari u izvornom kodu
Izlaz je dokumentacija u HTML formatu
Kompletna dokumentacija Jave je generisana javadocalatom
Sličan alat za Javu i druge programske jezike
doxygen
2019 PNRS1 29