Objektno-orijentisano Programiranje: Predmet: čas I Nedelja: 4 Nedelja

  • Uploaded by: Ed In
  • 0
  • 0
  • February 2021
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Objektno-orijentisano Programiranje: Predmet: čas I Nedelja: 4 Nedelja as PDF for free.

More details

  • Words: 1,782
  • Pages: 45
Loading documents preview...
PREDMET: ČAS I NEDELJA:

OBJEKTNO-ORIJENTISANO PROGRAMIRANJE 4 NEDELJA

 Paketi

su fundamentalni za Java programe  Paketi su implicitno u organizaciji standardnih klasa i naših programa i oni određuju koja imena možemo koristiti za klase, kao i atribute i metode koje one sadrže,  Paket predstavlja jedinstveno imenovanu kolekciju klasa.

 Imena

klasa jednog paketa neće se mešati sa imenima klasa nekog drugog paketa jer se imena klasa paketa kvalifikuju imenom tog paketa. 

Npr. puno ime klase String iz paketa java.lang je java.lang.String

 Ako

bismo definisali svoju klasu sa istim imenom, String, korišćenje imena String odnosilo bi se na tu našu klasu, dok bismo se standardnoj klasi String morali obraćati sa java.lang.String

 Svaka

klasa u Javi je sadržana u nekom paketu  Standardne Java klase su sadržane u paketima tako što se u jednom paketu nalaze klase koje su na neki način povezane

 Stavljanje

klase u imenovani paket je jednostavno,  Samo je potrebno dodati package deklaraciju kao prvu liniju fajla koji sadrži definiciju klase,  package

deklaracija je oblika package ;

Način grupisanja međusobno vezanih klasa i interfejsa 



Način organizovanja klasa u grupe

Paketi sadrže klase povezane zajedničkom svrhom 

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 mogu sadržati druge pakete  Svaki nivo predstavlja malo određenije grupisanje klasa  Biblioteka klasa u Javi sadržana je u paketu nazvanom java  io, net, util, swing i awt 



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)



Da bi se pozvala klasa iz drugog paketa mora se koristiti pun naziv klase naziv_paketa.naziv_klase npr:



java.awt.Font

Korisno je za klase koje se koriste jednom ili dva puta u celom programu



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

 Ako

želimo da klasa paketa bude dostupna i izvan njega, potrebno je deklarisati klasu koristeći ključnu reč public u prvoj liniji definicije klase

 Ukoliko

ispred definicije klase ne postoji ključna reč public, definicija te klase je dostupna samo metodama klasa koje se nalaze u istom paketu

 Svaka

klasa koju hoćemo da uključimo u paket Geometry mora sadržati istu package deklaraciju na početku i svi fajlovi koji sadrže definicije klasa tog paketa moraju se sačuvati u direktorijumu koji ima isto ime kao i paket, dakle Geometry.

 Takođe,

metode i konstruktore unutar public klase treba definisati kao public ako hoćemo da budu dostupni izvan paketa.

 Paketi

su usko povezani sa strukturom direktorijuma u kojoj se čuvaju.  Možemo generisati .class fajl za neku klasu iz paketa u drugom direktorijumu, ali taj direktorijum takođe mora imati isto ime kao i paket.  Ime paketa može biti složeno, npr. Geometry.Shapes3D, što znači da je Shapes3D poddirektorijum direktorijuma Geometry.  Ime može biti proizvoljne složenosti, ali treba da odražava strukturu direktorijuma u koju je paket smešten.

 Korišćenjem

JDK pod Windows-om.  Putanja do direktorijuma paketa mora biti eksplicitno naznačena kompajleru pomoću vrednosti koja se postavlja za CLASSPATH čak i kada tekući direktorijum sadrži paket.  Najjednostavniji način za postavljanje CLASSPATH-a je navođenjem opcije -classpath pri pozivu kompajlera.



Putanja do direktorijuma paketa je putanja do direktorijuma koji sadrži direktorijum paketa, i prema tome, ne uključuje sam taj direktorijum, npr. ako smo izvorne fajlove za klase paketa Geometry smestili u direktorijum sa putanjom C:\Java Prog\Geometry, putanja do direktorijuma Geometry je C:\Java Prog, a NE C:\Java Prog\Geometry javac -classpath "C:\Java Prog" Line.java putanju je neophodno smestiti među dvostruke navodnike jer sadrži beline javac -classpath "C:\Java Prog" *.java // svi izvorni fajlovi

 Ako

su nam .class fajlovi u originalnom direktorijumu paketa postoje 2 opcije: 



putanja do paketa se mora pojaviti u stringu kojim se postavlja CLASSPATH environment promenljiva koristiti -classpath opciju u komandnoj liniji kada se poziva kompajler ili interpreter

 Ako

se odlučimo za CLASSPATH promenljivu, ona treba da sadrži putanje samo do naših, ne i do standardnih paketa

 -classpath

primer:

javac -classpath ".; C:\MySource; C:\MyPackages" MyProgram.java  "."

označava tekući direktorijum (potrebno je navesti je i kod kompajliranja – inače neće biti pronađen izvorni fajl, i kod izvršavanja – inače ćemo dobiti poruku da main() metod nije nađen

 Kontrola

pristupa članovima klase izvan te klase, tj. iz metoda neke druge klase  Znamo da možemo referisati proizvoljan statički član klase u okviru kôda statičkog metoda te iste klase, dok nestatički metod klase može referisati proizvoljni član te iste klase  Što se tiče dostupnosti članova klase drugim klasama, stvari su malo komplikovanije. Tu u igru ulaze "pristupni atributi“.

 Razmotrimo

najpre klase koje se nalaze u istom paketu.  Unutar datog paketa, svaka klasa ima direktan pristup imenima klasa iz tog paketa, za deklarisanje promenljivih i zadavanje tipova parametara metoda, ali atributi i metodi članovi te druge klase ne moraju nužno biti dostupni.  Njihova dostupnost kontroliše se pristupnim atributima.

 Imenu

klase iz jednog paketa može se pristupiti iz klase drugog paketa, jedino ako je klasa kojoj se želi pristupiti deklarisana kao public.  Klasama koje nisu deklarisane kao public može se pristupati samo iz klasa koje se nalaze u istom paketu

 Postoje

4 mogućnosti:

bez pristupnog atributa – dopušten pristup iz metoda proizvoljne klase iz istog paketa public – dopušten pristup iz metoda proizvoljne klase (ne nužno iz istog paketa ), sve dok je klasa čiji je to član deklarisana kao public private – dostupan samo iz metoda unutar klase. Nikakav pristup izvan klase protected – dopušten pristup iz metoda proizvoljne klase istog paketa i iz proizvoljne potklase ( ne nužno iz istog paketa )

 Odgovarajuća

ključna reč (public, private, protected) se doda na početak deklaracije člana  Radi lakšeg praćenja kôda, dobro je grupisati deklaracije članova sa istim pristupnim atributom

 Uobičajeno

je da instancne promenljive ( nestatički atributi ) budu private tako da im se ne može direktno pristupati, niti se mogu direktno menjati izvan klase.  Jedini način da im se pristupi ili da se njihove vrednosti promene jeste pomoću metoda iste klase  Ukoliko je potrebno pristupiti vrednostima private atributa izvan klase, to se postiže tzv. pristupnom (accessor) metodom klase



Najčešće, atributi u public klasi treba da budu private, a metodi koji će se pozivati izvan klase public.



Izuzeci: za klase paketa koje nisu public, a time nisu dostupne izvan paketa, konvencija je dozvoliti drugim klasama paketa direktan pristup atributima metode klase koje će interno koristiti samo drugi metodi iste klase treba definisati kao private u klasama poput Math koja je samo kontejner za korisne funkcije i standardne vrednosti podataka, sve treba da bude public



Nakon uvođenja potklasa, još neke stvari se moraju uzeti u obzir

 Da

bi važile označene strelice, klasa Class1mora biti definisana kao public.  Ako klasa nije definisana kao public, nijedna klasa iz drugog paketa neće biti u mogućnosti da joj pristupi  Iz potklase SubClass1, koja je u drugom paketu nije moguće pristupiti članovima bez pristupnog atributa, a takođe ni private članovima – njima ni pod kojim okolnostima nije moguće pristupiti izvan klase u kojoj su definisani

 Drugi

način da učinimo svoje pakete dostupnim nakon što smo ih kompajlirali jeste korišćenjem ekstenzija  Ekstenzije su .jar fajlovi smešteni u ext direktorijumu koji se kreirao prilikom instalacije JDK-a







Klase i paketi iz .jar arhiva koje smo smestili u ext direktorijum biće automatski dostupni pri kompajliranju Java programa. Kada kreiramo .jar fajl za paket moramo dodati .class fajlove zajedno sa strukturom direktorijuma koja odgovara imenu paketa – ne možemo dodati samo .class fajlove arhivi Primer: želimo da arhiviramo paket Geometry. Pod pretpostavkom da smo kompajlirali paket i da tekući direktorijum sadrži direktorijum paketa, arhiva se može kreirati sledećom komandom: jar cvf Geometry.jar Geometry\*.class

• •

kreiraće arhivu Geometry.jar i u nju dodati sve .class fajlove iz direktorijuma Geometry Potrebno je još samo iskopirati ovu .jar arhivu u ext direktorijum i paket će postati dostupan svakom programu

 Ako

su definisane sa ključnom rečju public, možemo dodati proizvoljnu ili sve klase iz imenovanog paketa kodu našeg programa korišćenjem import deklaracija  U programu zatim možemo referisati klase koje smo učinili dostupnim import deklaracijama samo navođenjem njihovih imena  import deklaracije se navode na početku fajla







import Geometry.Shapes3D.*; uključuje sve klase paketa Geometry.Shapes3D Sada možemo referisati proizvoljnu public klasu iz paketa navođenjem samo njenog imena Obično je bolje "importovati" samo klase paketa koje naš kôd koristi, npr. za klasu Sphere import Geometry.Shapes3D.Sphere;

 Unutar

jednog paketa možemo davati imena klasama bez brige da li ta imena već postoje negde izvan paketa  Java tretira ime paketa kao deo imena klase, zapravo kao njegov prefiks.







Mogu se importovati imena statičkih članova klase iz imenovanog paketa u naš program Ti statički članovi se zatim mogu koristiti prosto navođenjem njihovih nekvalifikovanih imena npr. import static java.lang.Math.PI; ... return 4.0/3.0*PI;



importovanje svih statičkih članova klase Math: import static java.lang.Math.*;



BITNO: import statičkih članova klase nije moguć za klase koje se nalaze u default – bezimenom paketu. Paket mora imati ime!

 Npr.

public double getX(){ return x; }

• Na ovaj način vrednost atributa postaje dostupna svuda, ali se može menjati samo unutar klase • Accessor metodi se obično zovu get*()

 Tako

se nazivaju metode koje dopuštaju menjanje vrednosti private atributa  Njihova imena su obično oblika set*()  Nova vrednost atributa se prosleđuje kao argument  Npr. public void setX(double inputX){ x = inputX; }

 Zašto

koristiti public metod da bismo menjali vrednost private atributa kada možemo jednostavno da ga učinimo public?  Glavna prednost korišćenja mutator metoda jeste što je moguće vršiti proveru nove vrednosti i sprečiti pridruživanje neodgovarajućih vrednosti atributima



Svaka od ovih klasa ima statički metod toString() za konvertovanje vrednosti odgovarajućeg primitivnog tipa u String objekat



Takođe, postoji ne-statički toString() metod u svakoj klasi koji vraća String reprezentaciju objekta klase



Postoje i metode za konvertovanje iz String objekta u primitivni tip Npr. statički parseInt() član klase Integer prihvata String reprezentaciju celog broja kao argument i vraća ekvivalentnu vrednost tipa int. U slučaju da konverzija nije moguća, izbacuje se izuzetak tipa NumberFormatException





 AUTOBOXING

vrednosti primitivnih tipova:

automatske konverzije iz primitivnog u odgovarajući klasni tip (vrši ih kompajler kada okolnosti to dopuštaju)

• UNBOXING kompajler će takođe raditi i inverzne konverzije (referencu na objekat wrapper klase primitivnog tipa u vrednost koju on enkapsulira)

Related Documents


More Documents from "Nikola Curcic"

Java Programiranje
February 2021 1
Java Programiranje 2
February 2021 3
1-nedelja.pdf
February 2021 0
February 2021 0
Spc For Non-normal Data
January 2021 1