projektovanje namenskih računarskih struktura 1 …...odsek za računarsku tehniku i računarske...

29
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 Objektno orijentisani elementi programiranja u programskom jeziku Java

Upload: others

Post on 02-Feb-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 2: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 3: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 4: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 5: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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!

Page 6: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 7: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 8: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 9: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 10: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 11: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 12: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 13: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 14: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 15: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 16: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 17: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 18: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 19: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 20: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 21: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 22: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

Paketi

Folderi (direktorijumi)

hijerarhija paketa se poklapa sa hijerarhijom foldera:

moj.paket.Lib -> moj\paket\Lib.class

2019 PNRS1 22

Page 23: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 24: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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!

Page 25: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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!

Page 26: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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!

Page 27: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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

Page 28: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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!

Page 29: Projektovanje Namenskih Računarskih Struktura 1 …...Odsek za računarsku tehniku i računarske komunikacije Projektovanje Namenskih RačunarskihStruktura 1 Sistemi zasnovani na

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