Tehnici de implementare a concurentei în analiza si proiectarea ...
Tehnici de implementare a concurentei în analiza si proiectarea ...
Tehnici de implementare a concurentei în analiza si proiectarea ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
momentul <strong>în</strong> care obiectul trece dintr-o clasa <strong>în</strong> alta. De asemenea, constructor<br />
implicit este <strong>de</strong>finit doar pentru clasa Coada_Goala pentru <strong>si</strong>mplitate. Se poate<br />
observa din aceasta <strong>implementare</strong> ca pentru clasa Coada_Plina nu este <strong>de</strong>finita<br />
operatia Adauga(), respectiv pentru clasa Coada_Goala operatia Extrage(). Pentru a<br />
realiza schimbarea clasei pentru un actor am folo<strong>si</strong>t, ca <strong>si</strong> <strong>în</strong> cazul mecanismului <strong>de</strong><br />
interactiune concurenta prin abstractizarea comportamentului, intructiunea become.<br />
Privite <strong>în</strong> context orientat-obiect mecanismele bazate pe mo<strong>de</strong>lul Actor au<br />
doua mari neajunsuri. În primul rând mostenirea este dificil <strong>de</strong> implementat, <strong>de</strong>oarece<br />
<strong>în</strong> momentul <strong>în</strong> care se doreste <strong>de</strong>finirea unei subclase cu un comportament<br />
specializat, este necesara re<strong>de</strong>finirea fiecarui actor ce corespun<strong>de</strong> unei stari <strong>în</strong> parte.<br />
Mai mult, <strong>în</strong> timpul executiei un actor se poate transforma <strong>în</strong>tr-un altul cu un<br />
comportament total diferit. Aceste neajunsuri au <strong>de</strong>terminat ca majoritatea limbajelor<br />
<strong>de</strong> programare bazate pe actori sa nu implementeze conceptul <strong>de</strong> mostenire.<br />
În al doilea rând, asa cum se poate observa <strong>si</strong> din exemplul cu <strong>implementare</strong>a<br />
unei cozi limitate, nu este clar ce se <strong>în</strong>tâmpla <strong>în</strong> momentul <strong>în</strong> care un actor se afla <strong>în</strong><br />
starea Coada_Plina <strong>si</strong> receptioneaza mesaj Adauga(). În general nu se ofera nici o<br />
indicatie <strong>în</strong> ceea ce priveste faptul ca <strong>în</strong>tr-o alta stare actorul respectiv ar putea<br />
raspun<strong>de</strong> acestui mesaj. Prin urmare majoritatea limbajelor cu actori nu realizeaza<br />
introducerea mesajelor <strong>în</strong>tr-o coada <strong>de</strong> asteptare.<br />
Si pentru acest mecanism principiul orientarii pe obiectul apelat al codului <strong>de</strong><br />
interactiune este respectat, iar principiile izolarii <strong>si</strong> separarii acestui cod nu. De<br />
asemenea, mo<strong>de</strong>lul Actor este un mo<strong>de</strong>l bazat pe principiul "o <strong>si</strong>ngura activitate<br />
executata la un moment dat". Totu<strong>si</strong> o concurenta intra-obiect mai restrânsa poate fi<br />
mo<strong>de</strong>lata folo<strong>si</strong>nd post-procesarea discutata <strong>în</strong> sectiunea 2.3. Astfel, imediat dupa<br />
executarea unei instructiuni become poate fi acceptat apelul unei alte operatii, <strong>în</strong> timp<br />
ce operatia curenta î<strong>si</strong> continua executia. Din pacate, pentru a fi pastrata con<strong>si</strong>stenta<br />
starii actorului, operatia care eventual se va executa <strong>în</strong> paralel cu cea curenta trebuie<br />
sa fie o operatie ce nu modifica <strong>în</strong> nici un mod starea obiectului (<strong>în</strong> acest context prin<br />
starea obiectului am <strong>în</strong>teles un tuplu <strong>de</strong> valori corespunzatoare tuturor proprietatilor<br />
actorului, asa cum a fost ea <strong>de</strong>finita <strong>în</strong> sectiunea 2.2, <strong>si</strong> nu starea abstracta <strong>de</strong>finita mai<br />
<strong>de</strong>vreme <strong>în</strong> cadrul mecanismului <strong>de</strong> abstractizare a comportamentului).<br />
44