41
Marino Debeljuh [email protected] Visoka škola za informacijske tehnologije 10.10.2012 JAVA Programiranje u Javi

VsiTe JAVA Uvod Oop

Embed Size (px)

DESCRIPTION

Uvod u Javu

Citation preview

Page 1: VsiTe JAVA Uvod Oop

Marino Debeljuh

[email protected]

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

10.10.2012JAVA

Programiranje u Javi

Page 2: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Nestrukturirano programiranje:- Samo glavna „main” metoda- Varijable definirane u globalnom području

• Proceduralno programiranje:- Grupiranje neredbi u procedure- Varijable se prosljeđuju u procedure

• Modularno programiranje:- Procedure se grupiraju u module- Svaki modul može imati svoje varijable

• Objektno orijentirano programiranje

JAVA Pregled tehnika programiranja

Page 3: VsiTe JAVA Uvod Oop

Modularno programiranje

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Funkcionalnosti su grupirane u module• Modul može imati svoje varijable• Modul ima unutarnja stanja koje se mogu

modificirati pozivom procedure• Problem: imamo samo jedno stanje po modulu a

samo jedan modul može 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

Page 4: VsiTe JAVA Uvod Oop

Modularno programiranje - primjer

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

Za rad definiramo poseban modul:- definicija sučelja (.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 – sučelje:bool list_create();

bool list_append(void* data);

void* list_get_data();

void list_destroy();

JAVA

Page 5: VsiTe JAVA Uvod Oop

Modularno programiranje - primjer

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

Lista korištenje:void foo()

{

list_init();

...

list_append(&data);

...

list_destroy();

}

Što ako trebamo raditi sa više lista (više stanja modula)?

JAVA

Page 6: VsiTe JAVA Uvod Oop

Modularno programiranje - primjer

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

Definiramo poseban parametar list_handle_t koji jednoznačno identificira korištenu listaSvaka 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

Page 7: VsiTe JAVA Uvod Oop

Modularno programiranje - primjer

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

Lista korištenje:void goo()

{

list_handle_t list;

list = list_create();

...

list_append(list, &data);

...

list_destroy(list);

}

JAVA

Page 8: VsiTe JAVA Uvod Oop

Modularno programiranje-poblemi

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

Problemi modularnog programiranja:• Eksplicitno kreiranje i uništavanje• Objedinjavanje podataka i operacija

- Podaci su odvojeni od operacija nad njima- Programiranje je bazirano na operacijama

Rješenje: 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 izvršiti nad podacima

JAVA

Page 9: VsiTe JAVA Uvod Oop

Modularno programiranje-poblemi

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Objekti su sami zaduženi za svoje ispravno kreiranje i uništavanje

• Svaki objekt ima svoje stanje• Umjesto poziva procedure sa ispravnim

rukovoditeljem (list_handle_t) šalje se poruka odgovarajućem lista objektu

JAVA

Page 10: VsiTe JAVA Uvod Oop

OOP – osnovni termini Objekt

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Osnova OOP• Objekti realnog svjeta: bicikla, računalo, ...• Svi objekti imaju dvije karakteristike:

- Stanje - Ponašanje

• Softverski objekti nastali su kao apstrakcija realnih objekata

• Softverski objekti isto tako imaju:- Stanje: stanje se drži u varijablama (varijabla

je promjenjiva vrijednost koja ima svoje ime)- Ponašanje: implementirano je putem metoda

(metoda je funkcija pridružena objektu)

JAVA

Page 11: VsiTe JAVA Uvod Oop

OOP – osnovni termini Objekt

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Objekt je skup varijabli i pridruženih metoda

• Objekti realnog svijeta mogu se predstaviti softverskim objektima.

• Softverski objekti mogu modelirati i apstraktne koncepte (događaj na GUI)

JAVA

Page 12: VsiTe JAVA Uvod Oop

OOP – osnovni termini Objekt

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Sve što softverski objekt zna (stanje) i sve što može činiti (ponašanje) predstavljeno je varijablama i metodama unutar objekta

• U OOP određeni objekt se zove instanca

• Varijable objekta (instance varijables): sadržavaju stanje točno određenog objekta (instance)

• Metode objekta (instance methods) mijenjaju stanje točno određenog objekta (instance)

JAVA

Page 13: VsiTe JAVA Uvod Oop

OOP – osnovni termini Objekt

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• pakiranje varijabli unutar zaštitničkog položaja njegovih metoda naziva se učahiravanje ili

enkapsulacija (encapsulation)

• u Javi je moguće definirati jedan od četiri razine pristupa svakoj varijabli ili metodi objekta

• Razina pristupa određuje koji će objekti i klase moći pristupiti varijablama ili nekoj metodi

JAVA

Page 14: VsiTe JAVA Uvod Oop

OOP – osnovni termini Objekt

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Učahiravanje daje dvije osnovne prednosti:- Modularnost – Izvorni kod objekta može se

pisati i održavati neovisno o izvornom kodu drugih objekata.

- Skrivanje informacija – Objekt ima javno sučelje koje drugi objekti mogu koristiti kako bi komunicirali s njime. S druge strane, objekt može imati privatne informacije i metode koje se mogu bilo kada promijeniti, a da se time ne utiče na druge objekte koji o njemu ovise.

JAVA

Page 15: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Objekt sam po sebi nije koristan• Objekt je komponenta u većeg programa ili

aplikacije koja sadrži mnogo drugih objekata• Programeri postižu veću funkcionalnost i

kompleksnije ponašanje kroz međudjelovanje objekata

• Softverski objekti komuniciraju uz pomoć poruka:

JAVA OOP – osnovni termini Poruka

Page 16: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Ponekad objekt koji prima poruku treba više informacija da bi nešto napravio. Te se informacije prenose s porukama kao parametri (parameters)

• Slijedeća slika prikazuje tri komponente koje sačinjavaju poruku:

1. Objekt kome je poruka namijenjena (yourBicycle)

2. Ime metode koju treba izvršiti (changeGears)3. Parametri potrebni metodi (lowerGear)

JAVA OOP – osnovni termini Poruka

Page 17: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• te tri komponente imaju dovoljno informacija da primatelj izvrši što je traženo

• Poruke omogućuju važne prednosti:- Ponašanje objekta izraženo je preko njegovih

metoda, tako da slanje poruka (osim direktnog pristupa varijablama) podržava svaku moguću interakciju između objekata

- Objekti ne trebaju biti u istom procesu, čak ni na istom računalu kako bi slali i primali poruke jedan drugome

JAVA OOP – osnovni termini Poruka

Page 18: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• U OOP programiranju moguće 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 zajedničke svim objektima

određenog tipa

• Definira varijable potrebne za čuvanje stanja• Definira i implementira metode koje definiraju

ponašanje• Iz klase se može kreirati po želji mnogo objekata

(instanci)

JAVA OOP – osnovni termini Klasa

Page 19: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

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:

- Sadrže informacije koje dijele sve instance klase

- Ako jedna instanca promjeni vrijednost, promjenit će je za sve objekte toga tipa

JAVA OOP – osnovni termini Klasa

Page 20: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

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 određenom instancom klase

JAVA OOP – osnovni termini Klasa

Page 21: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Objekti su definirani pomoću klasa• U objektno orijentiranom programiranju

dozvoljeno je definiranje klasa pomoću drugih klasa

• Npr: planinski bicikl, trkaći bicikl i bicikl dvosjed su vrste bicikla. U OO terminologiji to zovemo podklasama (subclasses) klase bicikla

JAVA OOP – osnovni termini Nasljeđivanje

Page 22: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Svaka podklasa nasljeđuje (inherits) stanje i ponašanje

JAVA OOP – osnovni termini Nasljeđivanje

Page 23: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Podklase nisu ograničene stanjima i ponašanjem svoje nadklase. Podklase mogu:

- Dodati nove varijable i metode (proširiti stanje i ponašanje)

- Nadvladati (override) nasljeđene metode i omogućiti specijalizirane implementacije

• Nasljeđivanje nije ograničeno na jednu razinu; stablo nasljeđivanja ili hijerarhija klasa mogu biti po volji duboko. Metode i varijable nasljeđuju se prema dolje kroz sve razine.

• Što je klasa niže to je njeno ponašanje specijaliziranije

JAVA OOP – osnovni termini Nasljeđivanje

Page 24: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• U Javi na vrhu hijerarhije je Klasa Object

• Svaka klasa je njezin nasljednik (direktni ili indirektni)

• Object omogućava ponašanja koja su potrebna za sve objekte koji se izvršavaju u JVM (npr. toString())

JAVA OOP – osnovni termini Nasljeđivanje

Page 25: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Nasljeđivanje nudi slijedeće prednosti:- Podklase omogućuju specijalizirana ponašanja

zajedničkih elemenata nadklase. Kroz upotrebu nasljeđivanja, programeri mogu mnogo puta ponovo upotrijebiti kôd napisan u nadklasi.

- Programeri mogu implementirati nadklase zvane abstraktne klase (abstract classes) koje definiraju generička ponašanja. Apstraktna klasa definira, a može i djelomično implementirati ponašanje, ali je većina klase nedefinirana i neimplementirana. Drugi programeri popunjavaju detalje u specijaliziranim podklasam

JAVA OOP – osnovni termini Nasljeđivanje

Page 26: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Osnovni elementi objektnog modela (moraju postojati da bi model bio objektno orijentiran)1. Apstrakcija (abstraction)2. Učahiravanje (encapsulation)3. Modularnost (modularity)

4. Hijerarhija (hijerarchy)• Sporedni elementi objektnog modela

1. Tipizacija (typing)2. Istodobnost (concurrency)3. Postojanost (persistance)

JAVA OOP – osnovni elementi

Page 27: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Apstrakcija podataka- Zanemarivanje nebitnih djelova objekta i

koncentriranje na one koji ga razlikuju od ostalih objekata

- Potrebna je radi lakšeg poimanja kompleksnih sustava

• Subjektivnost: razni subjekti na različit način vide pojedini objekt

JAVA OOP – osnovni elementi

Page 28: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Učahurivnaje (encapsulation):- Niti jedan dio složenog sustava ne bi smio

ovisiti o unutrašnjim detaljima drugog dijela- Robusnost se postiže skrivanjem podataka i

detalja ugradnje- Komplementarna koncept u odnosu na

apstrakciju: a) Apstrakcija se fokusira na vidljivo ponašanje

objekta, dok se enkapsulacija fokusira na ugradnju koja podržava takvo ponašanje

b) Enkapsulacija omogućava eksplicitnu granicu između različitih apstrakcija

JAVA OOP–osnovni elementi

Page 29: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Učahurivnaje (encapsulation):- Opis klase ima dva dijela: sučelje i

implementaciju:a) Sučelje predstavlja vanjski pogled na klasu

(objekt)b) Implementacija klase predstavlja

mehanizme pomoću kojih su ostvareni postupci opisani u sučelju

• Modularnost:- Razlaganje sustava u skup relativno nezavisnih

modula koji objedinjuju klase koji imaju nešto zajedničko

JAVA OOP–osnovni elementi

Page 30: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Hijerarhija:- Skup apstrakcija često formira hijerarhiju- Hijerarhija predstavlja rangiranje apstrakcije- Dvije najvažnije hijerarhije su:

a) Struktura klasa („je (is a)” hijerarhija)b) Struktura objekata („dio od (part of)”

hijerarhija)

JAVA OOP–osnovni elementi

Page 31: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Hijerarhija:- Primjer hijerarhije: jednostruko nasljeđivanje

a) Nasljeđivanje definira odnose među klasama, gdje jedna klasa dijeli strukturu druge klase

b) „je (is a)” veza između nadređene i podređene klase

c) Predstavlja hijerarhiju generalizacija/specijalizacija

JAVA OOP–osnovni elementi

Page 32: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Definiranje klase:public class Vozilo{

}

- svaka public klasa mora biti u svojoj zasebnoj datoteci sa istim imenom Vozilo.java

- U jednoj datoteci može biti definirana samo jedna public klasa

- Objektne varijable i metode se definiraju i imlementiraju unutar vitičastih zagrada

JAVA OOP – primjeri

Page 33: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

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

• Korištenje klase:Vozilo v = new Vozilo();

- Ako je klasa definirana u nekom dugom paketu moramo definirati iz kojeg paketa korisimo klasu

JAVA OOP – primjeri

Page 34: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Definiranje paketa iz kojeg koristimo klasu:- import hr.vsite.java.Vozilo i nakon

toga možemo koristiti samo naziv klase Vozilo;

import instrukcija mora se navesti nakon package instrukcije i prije deklaracije klase

- kod korištenja definiramo puni naziv klase:hr.vsite.java.Vozilo v;

• Kotrola pristupa:- public: varijabla ili metoda koja je vidljiva i

izvana i u nasljeđenim klasama- private: varijabla ili metoda nije vidljiva

izvana niti u nasljeđenim klasama

JAVA OOP – primjeri

Page 35: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Slanje poruke (pozivanje metode):v.promijeniBrzinu(5);

- Mora biti dozvoljen pristup metodi• Definiranje varijabli klase:

public static int brojKotaca;

• Korištenje varijabli klase:Vozilo.brojKotaca = 4;

• Definiranje nasljeđivanja:public class OsobnoVozilo extends Vozilo

- klasa nasljeđuje sve varijable i metode koje nisu private

- mogu se koristiti/pozivati sve naljeđene metode

JAVA OOP – primjeri

Page 36: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

• Override metoda:@Override

public void promijeniBrzinu(int

novaBrzina);

- Metoda mora imati isti potpis (naziv, parametri, povratna vrijednost)

JAVA OOP – primjeri

Page 37: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

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

Page 38: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

e

package hr.vsite.java;

public class OsobnoVozilo extends Vozilo {

}

JAVA OOP – primjeri

Page 39: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

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

Page 40: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

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

Page 41: VsiTe JAVA Uvod Oop

Vis

ok

a š

ko

la z

a i

nfo

rma

cijs

ke

te

hn

olo

gij

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