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.
3.3. Formalizarea anomaliilor <strong>de</strong> mostenire<br />
În [CRN98] a fost propus un <strong>si</strong>stem formal <strong>de</strong> cla<strong>si</strong>ficare a mecanismelor <strong>de</strong><br />
mostenire <strong>în</strong> programarea orientata-obiect concurenta. Acest <strong>si</strong>stem formal reprezinta<br />
o varianta a semanticilor <strong>de</strong>notationale pentru mostenire introduse <strong>de</strong> Cook <strong>si</strong><br />
Palsberg <strong>în</strong> [COO89] <strong>si</strong> porneste <strong>de</strong> la mo<strong>de</strong>larea unei ierarhii <strong>de</strong> mostenire<br />
incrementale. Modul <strong>în</strong> care este mo<strong>de</strong>lata mostenirea <strong>în</strong> acest <strong>si</strong>stem formal permite<br />
tratarea oricarei abordari particulare <strong>de</strong> proiectare a unui limbaj <strong>de</strong> programare<br />
orientat-obiect concurent.<br />
În ierarhia <strong>de</strong> clase din figura 3.1. superclasa Coada este complet reutilizata <strong>de</strong><br />
subclasele sale Coada2, HCoada <strong>si</strong> BCoada, <strong>de</strong>oarece nici una dintre operatiile ei nu<br />
este re<strong>de</strong>finita <strong>în</strong> aceste subclase. Prin urmare volumul <strong>de</strong> cod reutilizat este maxim.<br />
O astfel <strong>de</strong> ierarhie <strong>de</strong> mostenire, <strong>în</strong> care nici o subclasa nu re<strong>de</strong>fineste operatii ale<br />
claselor parinte poarta numele <strong>de</strong> ierarhie <strong>de</strong> mostenire incrementala.<br />
Mostenirea induce <strong>si</strong> alta relatie <strong>în</strong>tre clase: relatia <strong>de</strong> subtipizare. Am <strong>de</strong>finit<br />
tipul ca fiind o multime <strong>de</strong> instante care au aceea<strong>si</strong> interfata (sau comportament extern<br />
observabil). Vom spune ca o clasa implementeaza un tip daca fiecare instanta a clasei<br />
apartine tipului respectiv.<br />
O clasa B <strong>de</strong>rivata dintr-o clasa A va avea <strong>în</strong> componenta sa cel putin<br />
proprietatile <strong>si</strong> operatiile clasei A. Deci, o instanta a clasei B poate fi utilizata <strong>în</strong> orice<br />
context <strong>în</strong> care poate fi utilizata o instanta a clasei A, adica interfata unei instante a<br />
clasei B va inclu<strong>de</strong> operatiile ce compun interfata oricarei instante a clasei A. Aceasta<br />
relatie <strong>de</strong> incluziune <strong>în</strong>tre interfetele a doua obiecte poarta numele <strong>de</strong> relatie <strong>de</strong><br />
subtipizare (<strong>în</strong> particular, instantele clasei B reprezinta subtipuri ale instantelor clasei<br />
A). Relatia <strong>de</strong> subtipizare este o relatie <strong>în</strong>tre comportamentele externe ale instantelor,<br />
<strong>si</strong> ea nu <strong>de</strong>pin<strong>de</strong> <strong>de</strong> structura interna a unei clase cum este cazul relatiei <strong>de</strong> mostenire.<br />
Notând cu ? un tip implementat <strong>de</strong> clasa A <strong>si</strong> cu ? un tip implementat <strong>de</strong> clasa<br />
B vom nota prin ? ? ? faptul ca tipul ? este subtip al lui ?. Prin urmare o instanta<br />
care apartine unui tip ? apartine <strong>de</strong> asemenea tipului ?, iar o clasa care implementeaza<br />
tipul ? implementeaza <strong>de</strong> asemenea <strong>si</strong> tipul ?.<br />
Definitia urmatoare <strong>si</strong> cele doua afirmatii care o preced introduc o legatura<br />
<strong>în</strong>tre relatia <strong>de</strong> subtipizare <strong>si</strong> ierarhia <strong>de</strong> mostenire incrementala.<br />
Definitie 1. Un lant <strong>de</strong> tipuri reprezinta o secventa finita <strong>de</strong> tipuri ? 1 ? ... ? ? n.<br />
67