18.04.2013 Views

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 ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!