Upload
dejan-marinkovic
View
54
Download
0
Embed Size (px)
DESCRIPTION
Sam programski jezik je uređen konačan skup znakova za formulisanje programa. Njegova definicija data u ISO standardu glasi: programski jezik je veštački jezik koji se koristi za predstavljanje programa. Sam program predstavlja sistem oznaka za opis algoritama i struktura podataka pomoću kojih ljudi komuniciraju sa računarom. Jednostavnije korišćenje mašinskog jezika dobija se uvođenjem simboličkih imena za naredbe i adreseme morijskih lokacija, a to omogućava asemblerski ili simbolički mašinski jezik. Asemblerski jezik je niskog nivoa, zbog toga što je korespodencija između asemblerskog i mašinskog jezika jedan prema jedan. Programer koristi naredbe računara na kome radi, pa stoga program nije prenosiv - ne može se izvršiti na drugom računaru bez reprogramiranja.
Citation preview
Delegati
Bezbedan mehanizam za prosleđivanje parametara-referenci na metod
–prosleđivanje pokazivača na metod i poziv metoda preko pokazivača ne bi bili bezbedni
Koriste se primarno za obradu događaja i asinhrone povratne pozive (callback)
Instance delegata sadrže reference na jedan ili više metoda
–formira se lista poziva (invocation list)
–metodi se stavljaju na listu poziva
u konstruktoru delegata ili
operatorima +,-,+=,-=
–metodi sa liste pozivajuse preko delegata
Deklaracija
Deklaracija:
[<atributi>][<modifikatori>]delegate<tip><identifikator>
(<parametri>);
Tip i parametri definišu povratni tip i potpis za metode sa liste poziva
Delegati se mogu deklarisati
– kao tip najvišeg nivoa ili
– kao ugnežđeni u klasu/strukturu
Primeri delegata
Primerci delegata se prave navođenjem imena metoda koji odgovara deklaraciji
– bilo koji statički ili metod instance koji odgovara deklaraciji može da se koristi
Dodela jednog delegata drugom kopira listu poziva iz izvorišnog u odredišni
Operatori + i += rezultuju u kombinovanim listama poziva
– reference na metode se ređaju redosledom dodavanja
– dodavanje jednog metoda na listu dva puta rezultuje u dupliranimreferencama na metod
Operatori – i -= rezultuju u uklanjanju referenci na metode sa liste poziva delegata
– u slučaju višestrukih referenci na metod – uklanja se poslednja referenca sa liste
– pokušaj uklanjanja reference na metod koji nije na listi ne izaziva grešku
Poziv delegata
Delegat se poziva po imenu sa parametrima
kao da je metod koji odgovara deklaraciji
– poziv izaziva izvršavanje svih metoda sa liste poziva redom, prosleđujući im parametre
– ako je parametar objekat ili ref parametar, promene iz jednog metoda vidi naredni metod
– povratna vrednost je ona koju vrati poslednji metod sa liste
Primer delegata
//neka su: int MetodX(int i, string s){} gde je X{1,2,3}//MetodX je statički ili metod objekta klasepublic delegate int MojDelegat(int i, string s);... Instance delegata sadrže reference na jedan ili više
metoda MojDelegat d1 = new MojDelegat(Metod1);MojDelegat d2 = new MojDelegat(Metod2);MojDelegat d3= d1+d2;//lista: Metod1, Metod2d3 += new MojDelegat(Metod3);//lista: Metod1, Metod2,
Metod3d3 -= d1;//lista: Metod2, Metod3d3 -= new MojDelegat(Metod3);//lista: Metod2int i = d3(5, "Proba");
Tip delegate
Tip delegate pravi neku vrstu objektne funkcije.
Tip delegate je slican deklaraciji funkcije, ali umesto toga on definise tip koji moze da pokazuje na jednu ili vise funkcija odredenog potpisa i povratnog tipa.
osnovne karakteristike:
1. Objekat tipa delegate moze umesto adresiranja jednog metoda u vremenu adresirati vise metoda. Kada pozovemo delegata koji adresira vise metoda, metodi se pozivaju u redosledu kako su dodeljeni objektu tipa delegate.
2. Metodi koje adresira delegat ne moraju biti clanovi iste klase. Svi metodi koje adresira delegat moraju deliti isti prototip i potpis. Ipak, ovi metodi mogu biti kombinacije i statickih i nestatickih metoda i mogu biti clanovi jedne ili vise razlicitih klasa
3. Deklaracija tipa delegate interno pravi novi podtip instance apstraktne klase Delegate ili MulticastDelegate. Ove klase su apstraktne bazne klase iz biblioteke .NET okruzenja i imaju kolekciju javnih metoda za upite nad objektom delegata i metodom(ima) na koje on pokazuje.
Deklaracija tipa delegate
(1) nivoa pristupa,
(2) kljucne red delegate,
(3) povratnog tipa i potpisa metoda koji tip delegate adresira i
(4) imena tipa delegata koje je smesteno izmedu po vratnog tipa i potpisa metoda.
public delegate void Action ();
Ovaj primer deklarise da Action bude delegat tipa public koji adresira metode bez parametara i sa povratnim tipom void:
Ako se tip delegate koristi za adresiranje samo jednog metoda u jednom trenutku, on moze adresirati funkciju clanicu bilo kog povratnog tipa i potpisa. Ipak, ako tip delegate istovremeno adresira dva ili vise metoda, povratni tip mora biti void.
U jeziku C# tip delegate je referentni tip. Zbog toga, njegova deklaracija - na primer,
Action theAction;
predstavlja rukovalac objektom delegata tipa Action delegate, ali ona sama nije objekat tipa delegate. Podrazumevana vrednost ovog rukovaoca je null. Ako pokusamo da ga upotrebimo pre nego sto mu dodelimo vrednost. generisace se greska za vreme kompajliranja
Da bi objekat theAction adresirao funkciju clanicu klase, prvo moramo pomocu izraza new napraviti tip Action delegate.
Za staticki metod argument konstruktora je ime klase kojoj metod pripada i ime samog metoda spojeni operatorom tacka (.):
theAction = new Action( Announce.announceDate );
Za nestaticki metod parametar konstruktora je objekat klase, pomocu kojeg zelimo da pozovemo metod, spojen sa imenom metoda - opet spojen pomocu operatora tacka.
Announce an = new Announce(); theAction = new Action( an.announceTime ); Statička funkcija članica announceDate () klase Announce
štampa trenutni datum na standardni izlaz u obliku long,Monday, February 26, 2001
Operator += i -=.
Da bismo delegatu dodelili adresu vise od jednog metoda, uglavnom koristimo operatore += i -=.
Na primer, zamislite da ste definisali klasu testHashtable. U njenom statičkom konstruktoru svaki dodeljeni test smo dodali objektu testHarness:
primer
public class testHashtable {public void test0(); public void test1(); static testHashtable() {testHarness.Tester += new testHarness.Action( test0 ); testHarness.Tester += new testHarness.Action( test1 );}//. . .}
Operator -=
Metod se može ukloniti pomoću operatora -=. Na primer, sledeci lokalni blok prvo postavlja, nakon toga izvršava i onda uklanja announceTime () iz objekta tipa delegate:{Announce an = new Announce();Action act = new testHarness.Action(an.announceTime );
testHarness.Tester += act; testHarness.run(); testHarness.Tester -= act;}