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.
pentru o clasa. Conditiile care joaca rol <strong>de</strong> garzi <strong>de</strong> meto<strong>de</strong> pot face apel doar la un<br />
tip <strong>de</strong> proprietati, ceea ce conduce la izolarea codului <strong>de</strong> coordonare concurenta <strong>în</strong><br />
a<strong>de</strong>varatul sens al cuvântului.<br />
Un mare avantaj al meto<strong>de</strong>lor cu garzi consta <strong>în</strong> faptul ca operatiile <strong>si</strong><br />
conditiile lor pot fi mostenite sau rescrise separat (este respectat principiul separarii).<br />
Totu<strong>si</strong>, <strong>si</strong> acest mecanism genereaza un anumit tip <strong>de</strong> anomalii <strong>de</strong> mostenire <strong>de</strong>oarece<br />
<strong>în</strong> anumite cazuri, trebuie ca la rescrierea unei conditii sa se cunoasca <strong>implementare</strong>a<br />
acesteia <strong>în</strong> clasa parinte, lucru care <strong>de</strong>termina distrugerea modularitatii ierarhiei <strong>de</strong><br />
clase.<br />
În varianta originala meto<strong>de</strong>le cu garzi nu pot exprima interactiuni concurente<br />
<strong>de</strong>pen<strong>de</strong>nte <strong>de</strong> istoricul apelurilor <strong>de</strong> operatii. Exista <strong>în</strong>sa exten<strong>si</strong>i care permit<br />
introducerea <strong>în</strong> garzile operatiilor a unor expre<strong>si</strong>i <strong>de</strong> logica temporala [FER95].<br />
Meto<strong>de</strong>le cu garzi reprezinta unul dintre mecanismele cele mai populare <strong>si</strong><br />
elegante folo<strong>si</strong>te la <strong>implementare</strong>a interactiunilor activitatilor concurente. De<br />
asemenea, luând <strong>în</strong> con<strong>si</strong><strong>de</strong>rare <strong>si</strong> exten<strong>si</strong>ile amintite mai sus, acest mecanism<br />
respecta toate principiile enuntate la <strong>în</strong>ceputul acestei sectiuni.<br />
Multimi <strong>de</strong> acceptare. Una dintre problemele care apar <strong>în</strong> cadrul<br />
mecanismului <strong>de</strong> abstractizare a comportamentului este aceea ca <strong>de</strong>terminarea<br />
urmatoarei stari este po<strong>si</strong>bil sa se realizeze <strong>în</strong> urma unei analize <strong>de</strong>stul <strong>de</strong> complexe.<br />
Acest fapt poate implica nece<strong>si</strong>tatea rescrierii nejustificate a unor operatii <strong>în</strong> cadrul<br />
claselor <strong>de</strong>rivate.<br />
În aceste mecanisme multimile <strong>de</strong> acceptare ([TOM89]) sunt con<strong>si</strong><strong>de</strong>rate ca<br />
fiind concepte <strong>de</strong> prima-clasa, adica ele pot fi transmise ca parametru <strong>de</strong> operatie sau<br />
pot fi returnate ca <strong>si</strong> rezultat al unor functii. Astfel, instructiunea become poate fi<br />
utilizata <strong>în</strong> acest caz alaturi <strong>de</strong> un nume <strong>de</strong> operatie care returneaza o multime <strong>de</strong><br />
acceptare. Analiza complexa este efectuata <strong>în</strong> cadrul unei astfel <strong>de</strong> operatii. Pentru<br />
clasele <strong>de</strong>rivate modificarea comportamentului are ca efect doar modificarea acestor<br />
operatii.<br />
Implementarea clasei Coada folo<strong>si</strong>nd multimi <strong>de</strong> acceptare va fi realizata pe<br />
baza starilor <strong>de</strong>terminate la exemplul <strong>de</strong> folo<strong>si</strong>re a abstractizarii comportamentului.<br />
class Coada{<br />
protected:<br />
Element listaElemente[]; //tablou cu elementele cozii<br />
46