You are on page 1of 41

Marino Debeljuh

mdebeljuh@vsite.hr
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
10.10.2012 JAVA
Programiranje u Javi
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Nestrukturirano programiranje:
- Samo glavna main metoda
- Varijable definirane u globalnom podruju
Proceduralno programiranje:
- Grupiranje neredbi u procedure
- Varijable se prosljeuju u procedure
Modularno programiranje:
- Procedure se grupiraju u module
- Svaki modul moe imati svoje varijable
Objektno orijentirano programiranje
JAVA
Pregled tehnika programiranja
Modularno programiranje
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Funkcionalnosti su grupirane u module
Modul moe imati svoje varijable
Modul ima unutarnja stanja koje se mogu
modificirati pozivom procedure
Problem: imamo samo jedno stanje po modulu a
samo jedan modul moe egzistirati u cijelom
programu
PRIMJER:
elimo napraviti strukturu za spremanje podataka
(lista, stablo, polja, ...)
Svaka struktura opisana je sa dvije stvari: struktura i
pristup (funkcijama)
JAVA
Modularno programiranje - primjer
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Za rad definiramo poseban modul:
- definicija suelja (.h): definira to je dostupno
- definicija implementacije (.c): definira kako je
realizirana funkcionalnost;
Implementacija je skrivena u implementacijskoj
datoteci.
Ovo je osnova programiranja: skrivanje imformacija
Lista suelje:
bool list_create();
bool list_append(void* data);
void* list_get_data();
void list_destroy();
JAVA
Modularno programiranje - primjer
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Lista koritenje:
void foo()
{
list_init();
...
list_append(&data);
...
list_destroy();
}
to ako trebamo raditi sa vie lista (vie stanja
modula)?
JAVA
Modularno programiranje - primjer
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Definiramo poseban parametar list_handle_t koji
jednoznano identificira koritenu lista
Svaka procedura prima taj parametar:
list_handle_t list_create();
bool list_append(list_handle_t this, void*
data);
void* list_get_data(list_handle_t this);
void list_destroy(list_handle_t this);
Sve procedure rade na osnovu parametra this umjesto
globalne varijable koja prezentira listu
JAVA
Modularno programiranje - primjer
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Lista koritenje:
void goo()
{
list_handle_t list;
list = list_create();
...
list_append(list, &data);
...
list_destroy(list);
}
JAVA
Modularno programiranje-poblemi
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Problemi modularnog programiranja:
Eksplicitno kreiranje i unitavanje
Objedinjavanje podataka i operacija
- Podaci su odvojeni od operacija nad njima
- Programiranje je bazirano na operacijama
Rjeenje: Objektno orijentirano programiranje:
Nadogradnja modularnog programiranja
Struktura (objekt) je organizirana oko podataka.
Izabiru se podaci koji najbolje zadovoljavaju
potreba. Program je strukturiran prema podacima
umjesto prema funkcijama
Podaci specificiraju operacije koje se mogu izvriti
nad podacima
JAVA
Modularno programiranje-poblemi
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Objekti su sami zadueni za svoje ispravno
kreiranje i unitavanje
Svaki objekt ima svoje stanje
Umjesto poziva procedure sa ispravnim
rukovoditeljem (list_handle_t) alje se poruka
odgovarajuem lista objektu
JAVA
OOP osnovni termini Objekt
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Osnova OOP
Objekti realnog svjeta: bicikla, raunalo, ...
Svi objekti imaju dvije karakteristike:
- Stanje
- Ponaanje
Softverski objekti nastali su kao apstrakcija realnih
objekata
Softverski objekti isto tako imaju:
- Stanje: stanje se dri u varijablama (varijabla
je promjenjiva vrijednost koja ima svoje ime)
- Ponaanje: implementirano je putem metoda
(metoda je funkcija pridruena objektu)
JAVA
OOP osnovni termini Objekt
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Objekt je skup varijabli i pridruenih metoda
Objekti realnog svijeta mogu se predstaviti
softverskim objektima.
Softverski objekti mogu modelirati i apstraktne
koncepte (dogaaj na GUI)
JAVA
OOP osnovni termini Objekt
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Sve to softverski objekt zna (stanje) i sve to moe
initi (ponaanje) predstavljeno je varijablama i
metodama unutar objekta
U OOP odreeni objekt se zove instanca
Varijable objekta (instance varijables): sadravaju
stanje tono odreenog objekta (instance)
Metode objekta (instance methods) mijenjaju
stanje tono odreenog objekta (instance)
JAVA
OOP osnovni termini Objekt
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
pakiranje varijabli unutar zatitnikog poloaja
njegovih metoda naziva se uahiravanje ili
enkapsulacija (encapsulation)
u Javi je mogue definirati jedan od etiri razine
pristupa svakoj varijabli ili metodi objekta
Razina pristupa odreuje koji e objekti i klase
moi pristupiti varijablama ili nekoj metodi
JAVA
OOP osnovni termini Objekt
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Uahiravanje daje dvije osnovne prednosti:
- Modularnost Izvorni kod objekta moe se
pisati i odravati neovisno o izvornom kodu
drugih objekata.
- Skrivanje informacija Objekt ima javno
suelje koje drugi objekti mogu koristiti kako bi
komunicirali s njime. S druge strane, objekt
moe imati privatne informacije i metode koje
se mogu bilo kada promijeniti, a da se time ne
utie na druge objekte koji o njemu ovise.
JAVA
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Objekt sam po sebi nije koristan
Objekt je komponenta u veeg programa ili
aplikacije koja sadri mnogo drugih objekata
Programeri postiu veu funkcionalnost i
kompleksnije ponaanje kroz meudjelovanje
objekata
Softverski objekti komuniciraju uz pomo poruka:
JAVA
OOP osnovni termini Poruka
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Ponekad objekt koji prima poruku treba vie
informacija da bi neto napravio. Te se informacije
prenose s porukama kao parametri (parameters)
Slijedea slika prikazuje tri komponente koje
sainjavaju poruku:
1. Objekt kome je poruka namijenjena
(yourBicycle)
2. Ime metode koju treba izvriti (changeGears)
3. Parametri potrebni metodi (lowerGear)
JAVA
OOP osnovni termini Poruka
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
te tri komponente imaju dovoljno informacija da
primatelj izvri to je traeno
Poruke omoguuju vane prednosti:
- Ponaanje objekta izraeno je preko njegovih
metoda, tako da slanje poruka (osim
direktnog pristupa varijablama) podrava
svaku moguu interakciju izmeu objekata
- Objekti ne trebaju biti u istom procesu, ak ni
na istom raunalu kako bi slali i primali
poruke jedan drugome
JAVA
OOP osnovni termini Poruka
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
U OOP programiranju mogue je imati mnogo
objekata istog tipa
Softverski nacrt po kojem se kreiraju softverski
objekti zove se klasa
Klasa je nacrt ili prototip koji definira varijable
ili metode zajednike svim objektima
odreenog tipa
Definira varijable potrebne za uvanje stanja
Definira i implementira metode koje definiraju
ponaanje
Iz klase se moe kreirati po elji mnogo objekata
(instanci)
JAVA
OOP osnovni termini Klasa
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Kreiranjem instanci klase sistem e alocirati
dovoljno memorije za uvanje objekta i njegovih
varijabli
Svaka instanca dobit e vlastitu kopiju svih varijabli
definiranih u klasi
Uz varijable objekta klase mogu definirati i
varijable klase:
- Sadre informacije koje dijele sve instance
klase
- Ako jedna instanca promjeni vrijednost,
promjenit e je za sve objekte toga tipa
JAVA
OOP osnovni termini Klasa
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Klase mogu definirati i metode klase, poziva se
direktno nad klasom. Metode klase mogu se
pozivati direktno nad klasom dok se pozivi metode
objekta obavlja nad odreenom instancom klase
JAVA
OOP osnovni termini Klasa
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Objekti su definirani pomou klasa
U objektno orijentiranom programiranju
dozvoljeno je definiranje klasa pomou drugih
klasa
Npr: planinski bicikl, trkai bicikl i bicikl dvosjed su
vrste bicikla. U OO terminologiji to zovemo
podklasama (subclasses) klase bicikla
JAVA
OOP osnovni termini Nasljeivanje
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Svaka podklasa nasljeuje (inherits) stanje i
ponaanje
JAVA
OOP osnovni termini Nasljeivanje
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Podklase nisu ograniene stanjima i ponaanjem
svoje nadklase. Podklase mogu:
- Dodati nove varijable i metode (proiriti
stanje i ponaanje)
- Nadvladati (override) nasljeene metode i
omoguiti specijalizirane implementacije
Nasljeivanje nije ogranieno na jednu razinu;
stablo nasljeivanja ili hijerarhija klasa mogu biti
po volji duboko. Metode i varijable nasljeuju se
prema dolje kroz sve razine.
to je klasa nie to je njeno ponaanje
specijaliziranije
JAVA
OOP osnovni termini Nasljeivanje
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
U Javi na vrhu hijerarhije je Klasa Object
Svaka klasa je njezin nasljednik (direktni ili
indirektni)
Object omoguava ponaanja koja su potrebna za
sve objekte koji se izvravaju u JVM (npr. toString())
JAVA
OOP osnovni termini Nasljeivanje
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Nasljeivanje nudi slijedee prednosti:
- Podklase omoguuju specijalizirana ponaanja
zajednikih elemenata nadklase. Kroz upotrebu
nasljeivanja, programeri mogu mnogo puta
ponovo upotrijebiti kd napisan u nadklasi.
- Programeri mogu implementirati nadklase
zvane abstraktne klase (abstract classes) koje
definiraju generika ponaanja. Apstraktna
klasa definira, a moe i djelomino
implementirati ponaanje, ali je veina klase
nedefinirana i neimplementirana. Drugi
programeri popunjavaju detalje u
specijaliziranim podklasam
JAVA
OOP osnovni termini Nasljeivanje
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Osnovni elementi objektnog modela (moraju
postojati da bi model bio objektno orijentiran)
1. Apstrakcija (abstraction)
2. Uahiravanje (encapsulation)
3. Modularnost (modularity)
4. Hijerarhija (hijerarchy)
Sporedni elementi objektnog modela
1. Tipizacija (typing)
2. Istodobnost (concurrency)
3. Postojanost (persistance)
JAVA
OOP osnovni elementi
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Apstrakcija podataka
- Zanemarivanje nebitnih djelova objekta i
koncentriranje na one koji ga razlikuju od
ostalih objekata
- Potrebna je radi lakeg poimanja kompleksnih
sustava
Subjektivnost: razni subjekti na razliit nain vide
pojedini objekt
JAVA
OOP osnovni elementi
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Uahurivnaje (encapsulation):
- Niti jedan dio sloenog sustava ne bi smio
ovisiti o unutranjim detaljima drugog dijela
- Robusnost se postie skrivanjem podataka i
detalja ugradnje
- Komplementarna koncept u odnosu na
apstrakciju:
a) Apstrakcija se fokusira na vidljivo ponaanje
objekta, dok se enkapsulacija fokusira na
ugradnju koja podrava takvo ponaanje
b) Enkapsulacija omoguava eksplicitnu granicu
izmeu razliitih apstrakcija
JAVA
OOPosnovni elementi
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Uahurivnaje (encapsulation):
- Opis klase ima dva dijela: suelje i
implementaciju:
a) Suelje predstavlja vanjski pogled na klasu
(objekt)
b) Implementacija klase predstavlja
mehanizme pomou kojih su ostvareni
postupci opisani u suelju
Modularnost:
- Razlaganje sustava u skup relativno nezavisnih
modula koji objedinjuju klase koji imaju neto
zajedniko
JAVA
OOPosnovni elementi
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Hijerarhija:
- Skup apstrakcija esto formira hijerarhiju
- Hijerarhija predstavlja rangiranje apstrakcije
- Dvije najvanije hijerarhije su:
a) Struktura klasa (je (is a) hijerarhija)
b) Struktura objekata (dio od (part of)
hijerarhija)
JAVA
OOPosnovni elementi
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Hijerarhija:
- Primjer hijerarhije: jednostruko nasljeivanje
a) Nasljeivanje definira odnose meu
klasama, gdje jedna klasa dijeli strukturu
druge klase
b) je (is a) veza izmeu nadreene i
podreene klase
c) Predstavlja hijerarhiju
generalizacija/specijalizacija
JAVA
OOPosnovni elementi
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Definiranje klase:
public class Vozilo{
}
- svaka public klasa mora biti u svojoj zasebnoj
datoteci sa istim imenom Vozilo.java
- U jednoj datoteci moe biti definirana samo
jedna public klasa
- Objektne varijable i metode se definiraju i
imlementiraju unutar vitiastih zagrada
JAVA
OOP primjeri
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Grupiranje klasa u module (pakete):
package hr.vsite.java;
- Package instrukcija mora biti prva naredba u
datoteci (samo komentari mogu biti iznad)
- Datoteka sa kodom mora biti u direktoriju istog
naziva kao i definicija paketa:
hr/vsite/java/Vozilo.java
Koritenje klase:
Vozilo v = new Vozilo();
- Ako je klasa definirana u nekom dugom
paketu moramo definirati iz kojeg paketa
korisimo klasu
JAVA
OOP primjeri
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Definiranje paketa iz kojeg koristimo klasu:
- import hr.vsite.java.Vozilo i nakon
toga moemo koristiti samo naziv klase Vozilo;
import instrukcija mora se navesti nakon
package instrukcije i prije deklaracije klase
- kod koritenja definiramo puni naziv klase:
hr.vsite.java.Vozilo v;
Kotrola pristupa:
- public: varijabla ili metoda koja je vidljiva i
izvana i u nasljeenim klasama
- private: varijabla ili metoda nije vidljiva
izvana niti u nasljeenim klasama
JAVA
OOP primjeri
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Slanje poruke (pozivanje metode):
v.promijeniBrzinu(5);
- Mora biti dozvoljen pristup metodi
Definiranje varijabli klase:
public static int brojKotaca;
Koritenje varijabli klase:
Vozilo.brojKotaca = 4;
Definiranje nasljeivanja:
public class OsobnoVozilo extends Vozilo
- klasa nasljeuje sve varijable i metode koje nisu
private
- mogu se koristiti/pozivati sve naljeene
metode
JAVA
OOP primjeri
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
Override metoda:
@Override
public void promijeniBrzinu(int
novaBrzina);
- Metoda mora imati isti potpis (naziv, parametri,
povratna vrijednost)
JAVA
OOP primjeri
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
package hr.vsite.java;
public class Vozilo {
private int brzina;
private int brojOkretaja;
public static int brojKotaca = 4;
public void promijeniBrzinu(int novaBrzina){
brzina = novaBrzina;
}
public int povecajBrojOkretaja(){
brojOkretaja = brojOkretaja+100;
return brojOkretaja;
}
public int getBrojOkretaja() {
return brojOkretaja;
}
public void setBrojOkretaja(int brojOkretaja) {
this.brojOkretaja = brojOkretaja;
}
public int getBrzina() {
return brzina;
}
public void setBrzina(int brzina) {
this.brzina = brzina;
}
}
JAVA
OOP primjeri
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
package hr.vsite.java;
public class OsobnoVozilo extends Vozilo {
}
JAVA
OOP primjeri
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
package hr.vsite.java;
public class TeratnoVozilo extends Vozilo {
@Override
public void promijeniBrzinu(int novaBrzina) {
if (Math.abs(novaBrzina - getBrzina()) > 2)
return;
super.promijeniBrzinu(novaBrzina);
}
}
JAVA
OOP primjeri
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
package hr.vsite.java;
public class TeretnoVozilo extends Vozilo {
@Override
public void promijeniBrzinu(int novaBrzina) {
if (Math.abs(novaBrzina - getBrzina()) > 2)
return;
super.promijeniBrzinu(novaBrzina);
}
}
JAVA
OOP primjeri
V
i
s
o
k
a

k
o
l
a

z
a

i
n
f
o
r
m
a
c
i
j
s
k
e

t
e
h
n
o
l
o
g
i
j
e
import hr.vsite.java.OsobnoVozilo;
import hr.vsite.java.TeretnoVozilo;
import hr.vsite.java.Vozilo;
public class Test {
public static void main(String[] args) {
System.out.println("Hello World");
OsobnoVozilo v = new OsobnoVozilo();
TeretnoVozilo tv = new TeretnoVozilo();
v.promijeniBrzinu(5);
Vozilo.brojKotaca = 6;
OsobnoVozilo.brojKotaca = 4;
tv.promijeniBrzinu(1);
}
}
JAVA
OOP primjeri

You might also like