pnrs1-03-oo programiranje u javi
TRANSCRIPT
-
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