Reflesija: Upravljanje Poljima

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

Reflesija

Refleksija nam omogućava da upravljamo arhikteturom same klase prilikom izvršenja programa.
Neka imamo metodu koja prima dva cijela broja a kao povratnu vrijednost neka vraća njihov zbir:
Int saberi(int x, int y) {return x+y}
Primjenom refleksimo, možemo da izmijenimo tijelo metod, tako da nam kao rezultat vraća
proizvod brojeva. Da bi smo mogli manipulisati arhitekturom klase, prvo je moramo identifikovati
u glavnom programu. Neka imamo klasu „KlasaA“ koja ima dva polja, polja „a“ tipa string i polja
„b“ tipa int. Klasu možemo identifikovati tako što koristimo klasu Class (koja sestavni dio paketa
mypackage) kao i njenu statički metodu forName:
Class kA = Class.forName("mojprojekat.KlasaA");
Na taj način smo kreirali objekat „kA“ koji predstavlja klasu „KlasaA“. U slučaju da napišemo klasu
koja ne postoji, editor bi prijavio izuzetak ClassNotFoundException, te je potrebno main metodi
dodati throws oznaku.

Upravljanje poljima
Nakon što smo identifikovali klasu, otvara nam se pristup njezinim poljima i metodama.
Primjenom foreach petlje možemo prikazati nazive polja pomoću metode getName i tipove polja
pomoću metode: getType:
for(Field f: kA.getFields()){
System.out.println("Polje "+f.getName()+" je tipa "+f.getType());
}
U kodu koji ispisali, reflektovanu klasu smo dobili korišćenjem naziva klase. Reflektovanu
klasu, odnosno objekat klase Class možemo dobiti i nad instancom konkretne klase. Često se u
praktičnim uslovima refleksija koristi za otkrivanje polja klase i za postavljanje njihovih
vrijednosti. U sljedećem primjeru, ćemo svakom polju klase, u zavisnosti od tipa podatka dodijeliti
odgovarajuću vrijedost:
KlasaA klasa1=new KlasaA();
Class kA = klasa1.getClass(); //Instanciranje klase
Field[] FKlasaA = kA.getFields(); //Kreiranje niza objekata koji sadrži polja klase
for(Field f: FKlasaA) {
if(f.getType().equals(String.class)) {
f.set(klasa1,"Ovo je tekst");
} else if(f.getType().equals(int.class)){
f.set(klasa1,23);
} else if(f.getType().equals(float.class)){
f.set(klasa1,12.4);
}
}
Vrijednosti polja postavljaju se metodom set, koja kao parametre prima instancu klase i
vrijednost koju želimo da postavimo. Metoda set izbacuje IllegalArgumentException i
IllegalAccessException tako da treba dodamo throws oznake.

Upravljanje metodama
Upravljanje metodama je veoma slično upravljanju poljima. Da bi smo demonstrirali tehniku
upravljanja metodama, kreiraćemo u klasi „KlasaA“ dvije metode:

System.out.println("Ovo je metoda 1");


}
public void metoda2(String ime){
System.out.println("Ime ove metode "+ime);
}

Nakon što smo kreirali metode, uz pomoć refleksije može da ih identifikujemo:

Class k1 = Class.forName("mojprojekat.KalsaA");
Method[] m1 = k1.getMethods();
for(Method m: m1){
System.out.println(m.getName());
}

Nakon što pokrenemo program, pored naše dvije metode na izlazu ćemo dobiti i metode koje je
klasa KlasaA naslijedila. Da bi na izlazu dobili samo metode koje smo mi kreirali, potrebno je da
umjesto metode getMethods koristimo metodu getDeclaredMethods.
Da bi smo pozvali određenu metodu na izvršavanje, koristićemo metodu invoke:

Class k1 = Class.forName("mojprojekat.KlasaA");
KlasaA ka = new KlasaA();
Method m1 = k1.getMethod("metoda1");
m1.invoke(ka);

Ukoliko pozivamo metodu koja zahtijeva ulazni parametrar, to možemo uraditi na sljedeći način:

Method m1 = k1.getMethod("metoda2", String.class);


m1.invoke(ka,"Ana");
Događaji

Praćenje i obrada događaja prilikom izvršavanja aplikacije predstavlja , i koristi se u svim


aplikacijama koji sadrže korisničke kontrole (komandna dugmad, tekstualna polja i slično).

Kreiranje klase događaja


Osnovna klasa koja predstavlja određeni događaj naziva Event Object. Nalazi se u paketu
java.util i svi događaji u javi sadrže ovu klasu.Da bi kreirali jedan događaj, neophodno je da prvo
kreiramo Event klasu.
Pretpostaimo da želimo da napravimo koji događaju koji će na sprilikom voženje
automobila obavijestiti kada je nivo goriva u rezervoaru pri kraju. Prvo treba da kreiramo objekat
koji će da predstavlja taj događaj, i unutar njega jedan događaj koji izaziva takav događaj.
Drugi korak je kreiranje interfejsa, koji će sadržavati interfejs za praćenje stanja goriva u
rezervoaru:
(izrada klase)
Simuliranje trajanje vršenja radnje postižemo dodavanjem Thread.sleep metode, koja
pauzira izvršavanje trenutne niti na vrijeme definisano u metodi. Na taj način simuliramo da je
ovoj metodi potrebno 5 sekundi da obavi posao. Ono što sada želimo je da napravimo događaj
koji će da se okine u trenutku završetka ove metode i koji će biti distribuiran svim zainteresovanim
objektima koji slušaju.
Objekat koji kreira događaj, odnosno u kojem dolazi do okidanja naziva se generator
događaja. Potrebno je da on posjeduje listu svih objekata koji su zainteresovani za događaj. To je
kolekcija određenih objekata. U trenutku okidanja događaja generator događaja prolazi kroz
kolekciju objekata koji slušaju i aktivira metode koje su definisane u okviru ovih objekata. Slušač
sa druge strane, mora da implementira određeni interfejs koji ga obavezuje da implementira
metodu koju će generator događaja pozvati.
Zbog sve ovoga, mi ćemo prvo kreirati interfejs koji će definisati tu opisanu metod. 3:59
(izrada interfejsa)
Kao parametar, ova metoda prima objekat koji još nismo kreirali. Ovaj objekat predstavlja
argument koji će biti proslijeđen prilikom slanja događaja. Potpuno je logično da se prilikom
okidanja zainteresovani slušači , ne samo obavještavaju o događaju, nego da im se tom prilikom
i proslijeđuje određeni objekat sa vrijednostima. Upravo sada ćemo kreirati klasu koja će
predstavljati objekte događaja. 5:21:
Ova klasa naslijeđivaće klasu EventObject i to je klasa koja prestavlja objekat događaja u
javi
Uvod u mrežne protokole
Mrežni protokol predstavlja set pravila koji omogućava komunikaciju između dva povezana
računara. Postoje razdvojeni slojevi u ostvarenju mrežne komunikacije. Takođe, postoje različite
podjele ovih slojeva. Možemo ih čak i sami kreirati. Jedna od najpoznatijih je OSI (Open System
Interconnection) podjela na sedam slojeva:
- Physical
- Data Link
- Network
- Transport
- Session
- Presentation
- Application
Takođe, postoji i internet podjela na slojeve koji podrazumijeva četiri sloja:
- Link – najniži sloj u internet komunikaciji. Podrazumijeva modulaciju i demodulaciju
signala, fizičku konekciju i slično.
- Internet – u ovom sloju se obrađuju paketi, provjeravaju greške, vrši kompresija i
dekompresija
- Transport – unutar ovog sloja vrši se konekcija između krajnjih tačaka komunikacije. Šalju
se i primaju podaci i provjerava njihov integritet. Ovo predstavlja sistem po koje
- Application
Ovo predstavlja sistem

You might also like