Upload
nathan-mimsy
View
62
Download
3
Tags:
Embed Size (px)
DESCRIPTION
Uvod u Javu
Citation preview
Marino Debeljuh
Vis
ok
a š
ko
la z
a i
nfo
rma
cijs
ke
te
hn
olo
gij
e
10.10.2012JAVA
Programiranje u Javi
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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