Projektovanje Namenskih Ra¤†unarskih Struktura 1 ... Odsek za ra¤†unarsku tehniku i ra¤†unarske komunikacije

  • View
    0

  • Download
    0

Embed Size (px)

Text of Projektovanje Namenskih Ra¤†unarskih Struktura 1 ... Odsek za...

  • 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

  • Default vrednosti promenljivih

     primitivni tipovi kao atributi klase Primitivni tip Default boolean false char ‘\u0000’ byte (byte)0 short (short)0 int 0 long 0L float 0.0f double 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 objekat Math.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đivanje 2019 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 objekte obič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

  • Polimorfizam abstract 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 public static 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 izuzetka throw new Exception("Ovo je jedan izuzetak");

     Korisnički definisani izuzeci class 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 paketa package 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 formattedP

Related documents