PNRS1-03-OO Programiranje u Javi

download PNRS1-03-OO Programiranje u Javi

of 43

Transcript of PNRS1-03-OO Programiranje u Javi

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    1/43

    Univerzitet u Novom Sadu

    Fakultet tehnikih nauka

    Odsek za raunarsku tehniku iraunarske komunikacije

    Projektovanje NamenskihRaunarskih Struktura 1

    Sistemi zasnovani na Androidu

    Objektno orijentisani elementi

    programiranja u programskom jeziku Java

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    2/43

    Klase i objekti

    Klasa: model objekta

    ukljuuje:

    atribute

    metode

    Objekat: instanca klase

    2015 PNRS1 2

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    3/43

    Primer klase

    class Automobil {boolean radi;void upali() {

    radi = true;

    }void ugasi() {

    radi = false;

    }}

    2015 PNRS1 3

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    4/43

    Kako se instancira i koristi?

    ...

    Automobil a = new Automobil();

    Automobil b = new Automobil();...

    a.upali();

    b.ugasi();

    2015 PNRS1 4

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    5/43

    Sve je objekat

    Nije mogue definisati funkcije i promenljive izvan

    neke klase

    Deklaracija klase ne postoji, ve samo njena

    definicija

    2015 PNRS1 5

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    6/43

    Program sa dve klase

    Automobil.java

    class Automobil {boolean radi;void upali() { radi = true; }void ugasi() { radi = false; }

    }

    Test.java

    class Test {

    public static void main(String args[]) {Automobil a;a = new Automobil();a.upali();

    }}

    2015 PNRS1 6

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    7/43

    Reference na objekte

    Automobil a;

    a = new Automobil();

    lokalna promenljiva a nije objekat, ve referenca na objekat

    2015 PNRS1 7

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    8/43

    Reference na objekte

    heap

    objekat klaseAutomobil

    stek

    a

    2015 PNRS1 8

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    9/43

    Operator dodele vrednosti

    Automobil a = new Automobil();

    Automobil b = new Automobil();b = a;

    Vri se kopiranjevrednosti reference!

    2015 PNRS1 9

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    10/43

    Default vrednosti promenljivih

    primitivni tipovi kao atributi klasePrimitivni tip Defaultboolean falsechar \u0000byte (byte)0

    short (short)0int 0long 0Lfloat 0.0fdouble 0.0d

    reference kao atributi klase null

    lokalne promenljive nemaju default vrednost upotreba pre

    inicijalizacije izaziva greku kod kompajliranja!

    2015 PNRS1 10

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    11/43

    Inicijalizacija objekata

    Ako elimo posebnu akciju prilikom kreiranja objekta nekeklase, napraviemo konstruktor

    Konstruktor se automatski poziva prilikom kreiranjaobjekta

    Automobil a = new Automobil();Ako ne napravimo konstruktor, kompajler e sam

    napraviti default konstruktor, koji nita ne radi

    2015 PNRS1 11

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    12/43

    Inicijalizacija objekata

    konstruktorclass A {A() {

    System.out.println("konstruktor");}

    }...A varA = new A();

    na konzoli e pisati:konstruktor

    2015 PNRS1 12

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    13/43

    Inicijalizacija objekata

    Moe da se napravi i konstruktor sa parametrimaclass A {A(String s) {

    System.out.println(s);}

    }

    ...

    A varA = new A("blabla");

    na konzoli e pisati:blabla

    2015 PNRS1 13

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    14/43

    Unitavanje objekata Garbage collector

    Ne postoji destruktor

    Radi kao poseban proces u pozadini

    Automatska dealokacija memorije

    Automatska defragmentacija memorije

    2015 PNRS1 14

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    15/43

    Method overloading

    U klasi moe da postoji vie metoda sa istim imenom

    Razlikuju se po parametrima

    Metode se nikada ne razlikuju po povratnoj vrednosti

    2015 PNRS1 15

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    16/43

    Kljuna re final

    final atributi: konstante

    final int a = 5;

    2015 PNRS1 16

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    17/43

    Kljuna re static

    Definie statike atribute i metode

    Statiki atributi i metode postoje i bez kreiranje objekta zato im se moe pristupiti preko imena klase

    StaticTest.i++;

    Statiki atributi imaju istu vrednost u svim objektima ako promenim statiki atribut u jednom objektu, on e se

    promeniti i kod svih ostalih objekata

    Namena statikih metoda: pristup i rad sa statikim atributima

    opte metode za koje nije potrebno da se kreira objekatMath.sin(x)

    2015 PNRS1 17

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    18/43

    for bez indeksiranja(poznat i kao foreach)

    Omoguuje prolazak kroz niz ili kolekciju. Opta sintaksa:for (varijabla : niz) {

    ... // telo

    }

    Primer:for (int i : niz) {System.out.println(i);

    }

    for (Auto a : kolekcija) {

    System.out.println(a.radi);}

    2015 PNRS1 18

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    19/43

    Nasleivanje

    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 nasleivanje2015 PNRS1 19

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    20/43

    Modifikatori pristupa

    public vidljiv za sve klase

    protected vidljiv samo za klase naslednice i klase izistog paketa

    private vidljiv samo unutar svoje klase

    nespecificiran (friendly) vidljiv samo za klase iz istogpaketa

    2015 PNRS1 20

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    21/43

    Method overriding

    Pojava da u klasi naslednici postoji metoda istogimena i parametara kao i u baznoj klasi

    Primer:

    klasa A ima metodu metoda1()

    klasa B nasleuje klasu A i takoe ima metodumetoda1()

    2015 PNRS1 21

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    22/43

    Apstraktne klase

    Klase koje ne mogu imati svoje objekteobino sadre jednu ili vie 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, morada se deklarie kao apstraktna.

    2015 PNRS1 22

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    23/43

    Polimorfizam

    Koncept po kojem se za neku varijablu (ili parametarmetode ili povratnu vrednost) definie tip bazne klase, ada se zapravo koristi klasa naslednica

    2015 PNRS1 23

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    24/43

    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();2015 PNRS1 24

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    25/43

    Interfejsi

    Omoguavaju definisanje samo apstraktnih metoda, konstanti i

    statikih atributa

    Interfejs nije klasa! On je spisak metoda i atributa koje klasakoja implementira interfejs mora da poseduje

    Sve metode su implicitno public, a svi atributi su implicitno publicstatic final

    Interfejsi se ne nasleuju, ve implementiraju

    Da bi klasa implementirala interfejs, mora da redefinie sve

    njegove metode Jedan interfejs moe da nasledi drugog

    Jedna klasa moe da implementira jedan ili vie

    interfejsa

    2015 PNRS1 25

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    26/43

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

    }

    }

    2015 PNRS1 26

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    27/43

    Izuzeci

    Mehanizam za prijavu greke

    da ne moramo da za to koristimo povratnu vrednost metodeili globalne promenljive

    Dve vrste izuzetaka:

    checked (Exception)

    moraju se obuhvatiti try-catch blokom

    unchecked (RuntimeException)

    ne moraju se obuhvatiti try-catch blokom, poto se mogu

    programski spreiti:NullPointerException

    ArrayIndexOutOfBoundsException

    ArithmeticException

    ...

    2015 PNRS1 27

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    28/43

    try {// kod koji moe 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 izvrava u svakom sluaju

    }

    Izuzeci

    2015 PNRS1 28

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    29/43

    Izuzeci

    Programsko izazivanje izuzetkathrow new Exception("Ovo je jedan izuzetak");

    Korisniki definisani izuzeciclass MojException extends Exception {

    MojException(String s) {

    super(s);

    }

    }

    2015 PNRS1 29

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    30/43

    Izuzeci

    Kljuna re throwsvoid f(int i) throws MojException { ... }

    Propagacija izuzetaka

    ne moramo da obuhvatimo try-catch blokom, ve dadeklariemo da i pozivajua metoda takoe baca izuzetak

    tako moemo da prebacujemo odgovornost hvatanja izuzetkana gore

    2015 PNRS1 30

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    31/43

    Wrapper klase i autoboxing

    Za sve primitivne tipove postoje odgovarajue klase: int Integer long Long boolean Boolean

    Imaju korisnu statiku metodu Xxxx.parseXxxx() Integer.parseInt(10) Long.parseLong(10)

    Imaju korisnu statiku metodu Xxxx.valueOf() Integer.valueOf(100)

    Autoboxing/unboxing: ako metoda prima Integer kao parametar, moe da se prosledi i

    int, odn. promenljivoj tipa Integer moe da se dodeli vrednostpromenljive tipa int

    radi i u obrnutom pravcu promenljivoj tipa int moe da se dodelivrednost promenljive tipa Integer

    2015 PNRS1 31

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    32/43

    Paketi

    Nain za hijerarhijsko organizovanje programa u module

    ekvivalent foldera

    taka u nazivu paketa odgovara separatoru foldera u punojputanji

    Implicitni paket kada ne definiemo paket

    Upotreba

    import java.io.*;

    import java.util.Vector;

    2015 PNRS1 32

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    33/43

    Paketi

    Kreiranje paketapackage imePaketa;...public class MojaKlasa { ... }

    Korienje paketa

    import imePaketa.MojaKlasa;

    ...MojaKlasa m = new MojaKlasa();

    ili

    imePaketa.MojaKlasa m = new imePaketa.MojaKlasa();

    2015 PNRS1 33

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    34/43

    Paketi

    Folderi (direktorijumi)

    hijerarhija paketa se poklapa sa hijerarhijomfoldera:

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

    2015 PNRS1 34

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    35/43

    JAR arhive

    Klasian ZIP format

    Sadri i folderMETA-INF u kojem je najbitnija datotekamanifest.mf

    Sadrajmanifest.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

    2015 PNRS1 35

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    36/43

    Inner classes(unutranje klase)

    public class Spoljasnja {

    Spoljasnja() { ... }

    void metoda1() { ... }

    public class Unutrasnja {void metoda2() { ... }

    /* moze da pristupa spoljanjoj klasi */

    }

    }

    2015 PNRS1 36

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    37/43

    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 372015

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    38/43

    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");}2015 PNRS1 38

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    39/43

    Listeneri - oslukivai

    //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...}

    });

    ...

    }

    }

    2015 PNRS1 39

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    40/43

    Generike klase

    /**

    * Generic version of the Box class.

    * @param the type of the value being boxed

    */

    public class Box {

    // T stands for "Type"private T t;

    public void set(T t) { this.t = t; }

    public T get() { return t; }

    }

    2015 PNRS1 40

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    41/43

    Klasa Object

    Sve Java klase implicitno nasleuju klasu Object

    Reprezentativne metode:

    getClass()

    equals(o)

    hashCode()

    toString()

    2015 PNRS1 41

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    42/43

    Konvencije imenovanja

    Nazivi klasa (MojaKlasa)

    Nazivi metoda (mojaMetoda)

    Nazivi atributa (mojAtribut)

    Nazivi paketa (mojpaket.drugipaket)

    set/get metode (setAtribut/getAtribut)

    Konstante (MAX_INTEGER)

    2015 PNRS1 42

  • 7/23/2019 PNRS1-03-OO Programiranje u Javi

    43/43

    javadoc

    Alat za automatsko generisanje programskedokumentacije na osnovu komentara u programskomkodu

    Ulaz je izvorni kod

    Specijalni komentari u izvornom kodu

    Izlaz je dokumentacija u HTML formatu

    Kompletna dokumentacija Jave je generisana javadocalatom

    Slian alat za Javu i druge programske jezike

    doxygen