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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

acestor proprietati. Prin urmare executia operatiilor scriitor se va realiza <strong>în</strong>tr-o<br />

maniera exclu<strong>si</strong>va.<br />

c) Mecanisme <strong>de</strong> interactiune concurenta cu control reflectiv<br />

Mecanismele <strong>de</strong> interactiune cu control reflectiv se caracterizeaza prin<br />

<strong>de</strong>sprin<strong>de</strong>rea totala a codului <strong>de</strong> interactiune <strong>de</strong> <strong>implementare</strong>a clasei. Spre <strong>de</strong>osebire<br />

<strong>de</strong> mecanismele cu control extern un<strong>de</strong> codul <strong>de</strong> interactiune nu era <strong>de</strong>finit explicit, <strong>în</strong><br />

acest caz se pot formula constrângeri <strong>de</strong> interactiune explicit, iar acest lucru poate fi<br />

realizat <strong>în</strong> cadrul unor asa-numite meta-clase.<br />

Pentru a implementa o coada finita folo<strong>si</strong>nd acest mecanism <strong>de</strong> interactiune va<br />

trebui <strong>de</strong>finita clasa Coada asa cum este a fost ea <strong>de</strong>finita pentru cazul secvential,<br />

împreuna cu o noua clasa (MetaCoada) a carei interfata va contine doua operatii<br />

numite Entry, respectiv Exit:<br />

class Coada{<br />

protected:<br />

Element listaElemente[]; //tablou cu elementele cozii<br />

int maxElem; //nr. maxim <strong>de</strong> elemente din coada<br />

int elemIntroduse; //nr. elementelor introduse <strong>în</strong> coada<br />

int elemExtrase; //nr. elementelor extrase din coada<br />

public:<br />

Coada(){...};<br />

~Coada(){...};<br />

void Adauga(Element elem) {...};<br />

Element Extrage(){...};<br />

}<br />

class MetaCoada{<br />

public:<br />

Entry(){...};<br />

Exit(){...};<br />

}<br />

...<br />

Coada::attach(coada, meta_coada, Entry, Exit);<br />

Ultima linie <strong>de</strong> cod realizeaza practic legatura dinamica dintre obiectul coada<br />

<strong>de</strong> tip Coada <strong>si</strong> obiectul meta_coada <strong>de</strong> tip MetaCoada. În urma acestei legaturi<br />

realizate dinamic orice apel <strong>de</strong> operatie a obiectului coada va avea ca efect executarea<br />

operatiei Entry() din obiectul atasat dinamic meta_coada urmata <strong>de</strong> executia operatiei<br />

apelate <strong>si</strong>, <strong>în</strong> final, lansarea <strong>în</strong> executie a operatiei Exit() apartinând tot obiectului<br />

meta_coada.<br />

Este evi<strong>de</strong>nt faptul ca mecanismele din aceasta subcategorie respecta<br />

principiile codului <strong>de</strong> interactiune orientat pe obiectul apelat <strong>si</strong> principiul izolarii<br />

codului <strong>de</strong> interactiune. De asemenea, aceste mecanisme pot exprima concurenta<br />

52

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

Saved successfully!

Ooh no, something went wrong!