260 likes | 558 Views
Paketi. Paketi. Način grupisanja međusobno vezanih klasa i interfejsa Način organizovanja klasa u grupe Paketi sadrže klase povezane zajedničkom svrhom. Paketi. Paketi su korisni iz sledećih razloga: Omogućavaju organizaciju klasa u jedinice (units) Smanjuju problem konflikta naziva
E N D
Paketi • Način grupisanja međusobno vezanih klasa i interfejsa • Način organizovanja klasa u grupe • Paketi sadrže klase povezane zajedničkom svrhom
Paketi • Paketi su korisni iz sledećih razloga: • Omogućavaju organizaciju klasa u jedinice (units) • Smanjuju problem konflikta naziva • Omogućavaju bolju zaštitu • Mogu se koristiti za identifikaciju klasa
Paketi • Paketi mogu sadržati druge pakete • Svaki nivo predstavlja malo određenije grupisanje klasa • Biblioteka klasa u Javi sadržana je u paketu nazvanom java • Sledeći nivo uključuje io, net, util i awt • Java.lang
Korišćenje paketa • Mehanizmi korišćenja klase koja je u nekom paketu: • Klase iz java.lang paketa su automatski dostupne • Korišćenje klase iz drugog paketa • Korišćenje klasa iz uvezenih paketa (komanda import) • Bezimeni, default paket
Korišćenje paketa • Da bi se pozvala klasa iz drugog paketa mora se koristiti pun naziv klase naziv_paketa.naziv_klase npr:java.awt.Font f = newjava.awt.Font(); • Korisno je za klase koje se koriste jednom ili dva puta u celom programu
Korišćenje paketa • Komandom import se uvoze klase iz paketa • Uvoz individualne klase (import java.awt.Font) • Uvoz celog paketa klasa (import java.awt.*) • Neophodno je navesti svaki nivo hijerarhije (import java.awt.image.*) • import se nalazi na vrhu datoteke pre definicije klase
Konflikti naziva • Nakon uvoza klase ona se može koristiti bez naziva paketa import java.awt.* //kod Font f = new Font(); • Slučaj više klasa sa istim nazivom iz različitih paketa import java.awt.*; (sadrži klasu Font) import fon.graphics.*; (sadrži klasu Font)
Konflikti naziva • Java prevodilac neće prevesti sledeći kod Fontfont = newFont(); • Rešenje je u eksplicitnom navođenju punog naziva klase java.awt.FontjFont = newjava.awt.Font(); fon.graphics.FontfFont= newfon.graphics.Font();
Kreiranje paketa • Odabiranje naziva paketa java.lang.String • Kreiranje strukture foldera IMT.alati.alatiZaKopanje • Dodavanje klase u paket package IMT.alati.alatiZaKopanje
Primer package kolekcija; publicclass Lista { private ElementListe koren; publicvoid Dodaj(Object o) { koren = new ElementListe(o, koren); } //kod }
Primer package kolekcija; class ElementListe { privateObject sadrzaj; private ElementListe sledeci; ElementListe (Object o, ElementListe el){ sadrzaj = o; sledeci = el; } //kod }
IKlijent.java package klijent; publicinterface IKlijent { String PrikaziKlijenta(); }
FizickoLice.java package klijent; publicclass FizickoLice implements IKlijent { private String mIme; private String mPrezime; public FizickoLice() {} public FizickoLice(String aIme, String aPrezime){ mIme = aIme; mPrezime = aPrezime; } public String PrikaziKlijenta() { return mIme + " " + mPrezime; } }
PravnoLice.java package klijent; publicclass PravnoLice implements IKlijent { private String mNaziv; public PravnoLice(){} public PravnoLice(String aNaziv){ mNaziv = aNaziv; } public String PrikaziKlijenta() { return mNaziv; } }
Racun.java package racun; import klijent.*; publicabstractclass Racun { protecteddouble mStanje; protected IKlijent mKlijent; public Racun(){} public Racun(IKlijent aKlijent) { mKlijent = aKlijent; } public Racun(IKlijent aKlijent, doubleaStanje){ mKlijent = aKlijent; mStanje = aStanje; }
publicdouble Uplata(doubleaIznos){ mStanje += aIznos; return mStanje; } publicdouble Stanje() { return mStanje; } publicabstractdouble Isplata(double aIznos); public String PrikaziKlijenta() { return mKlijent.PrikaziKlijenta(); } }
TekuciRacun.java package racun; import klijent.*; publicclass TekuciRacun extends Racun { privatedouble mDozvoljeniMinus; public TekuciRacun() {} public TekuciRacun(IKlijent aKlijent) { super(aKlijent); } public TekuciRacun(IKlijent aKlijent, doubleaStanje) { super(aKlijent, aStanje); } public TekuciRacun(IKlijent aKlijent, doubleaStanje, doubleaDozvoljeniMinus){ super(aKlijent, aStanje); mDozvoljeniMinus = aDozvoljeniMinus; }
publicdoubleIsplata(doubleaIznos) throws SecurityException { if (mStanje - aIznos < mDozvoljeniMinus) thrownew SecurityException("Prekoracen je dozvoljeni minus."); mStanje -= aIznos; return mStanje; } }
ZiroRacun.java package racun; import klijent.*; publicclass ZiroRacun extends Racun{ public ZiroRacun(){} public ZiroRacun(IKlijent pKlijent){ super(pKlijent);} public ZiroRacun(IKlijent pKlijent, double pStanje) { super(pKlijent, pStanje); }
publicdoubleIsplata(double pIznos) throws SecurityException{ if (mStanje < pIznos) thrownew SecurityException("Nema dovoljno sredstava na racunu."); mStanje -= pIznos; return mStanje; } }
MainClass.java import klijent.FizickoLice; import klijent.IKlijent; import klijent.PravnoLice; import racun.*; publicclass MainClass { publicstaticvoid main(String[] args) { IKlijent pravLice = new PravnoLice("FON"); Racun racunPravLica = new ZiroRacun(pravLice, 1000); System.out.println("Klijent: " + racunPravLica.PrikaziKlijenta()); System.out.println("Stanje: " + racunPravLica.Stanje());
System.out.println("\nUplata: 500"); racunPravLica.Uplata(500); System.out.println("Stanje posle uplate: " + racunPravLica.Stanje()); try{ System.out.println("\nIsplata: 1200"); racunPravLica.Isplata(1200); System.out.println("Stanje posle isplate: " + racunPravLica.Stanje()); } catch(Exception e){ System.out.println(e.getMessage()); }
IKlijent fizLice = new FizickoLice(“Nikola", “Krivokuca"); Racun racunFizLica = new TekuciRacun(fizLice, 100, 50); System.out.println("Klijent: " + racunFizLica.PrikaziKlijenta()); System.out.println("Stanje: " + racunFizLica.Stanje()); System.out.println("\nUplata: 500"); racunFizLica.Uplata(500); System.out.println("Stanje posle uplate: " + racunFizLica.Stanje()); try{ System.out.println("\nIsplata: 1000"); racunFizLica.Isplata(1000); System.out.println("Stanje posle isplate: " + racunFizLica.Stanje()); } catch(Exception e){System.out.println(e.getMessage());} }}
Izlaz Klijent: FON Stanje: 1000.0 Uplata: 500 Stanje posle uplate: 1500.0 Isplata: 1200 Stanje posle isplate: 300.0 Klijent: Nikola Krivokuca Stanje: 100.0 Uplata: 500 Stanje posle uplate: 600.0 Isplata: 1000 Prekoracen je dozvoljeni minus.