Tehnici de proiectare software - Tipografia
Tehnici de proiectare software - Tipografia
Tehnici de proiectare software - Tipografia
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
• Implementare<br />
Diagrama <strong>de</strong> clase a şablonului Interpretei" este următoarea:<br />
Client<br />
Context<br />
Şablonul Interpretei" necesită:<br />
interface Exprcssion<br />
+void interpreUContext c)<br />
TerminalExpression NonterminalExpression<br />
+void interpret(Context c) +void interpret(Context c)<br />
- Expression - interfaŃa prin intermediul căreia utilizatorul interacŃionează cu<br />
expresiile<br />
- TerminalExpression - clasa care implementează interfaŃa Expression,<br />
utilizată pentru nodurile terminale ale arborelui <strong>de</strong> sintaxă<br />
- NonterminalExpression - cealaltă implementare a interfeŃei Expression.<br />
utilizată pentru nodurile neterminale ale arborelui <strong>de</strong> sintaxă. ConŃine o referinŃă către<br />
următoarea expresie şi apelează metoda <strong>de</strong> interpretare pentru fiecare dintre copiii săi<br />
- Context - conŃine informaŃiile necesare în mai multe locuri ale<br />
interpretorului. Serveşte drept un canal <strong>de</strong> comunicare între instanŃele mai multor<br />
expresii<br />
- Client - construieşte sau primeşte o instanŃă a unui arbore <strong>de</strong> sintaxă abstract.<br />
Acest arbore <strong>de</strong> sintaxă este compus din instanŃe ale obiectelor <strong>de</strong> tip<br />
TerminalExpressions şi NonterminalExpressions<br />
• Beneficii şi inconveniente<br />
Şablonul Interpreter poate fi uşor modificat pentru a reflecta schimbările<br />
produse în gramatică. Pentru adăugarea unei noi reguli se creează o altă clasă care<br />
implementează interfaŃa Expression. O regulă se poate modifica uşor prin extin<strong>de</strong>rea<br />
clasei vechi şi suprascrierea meto<strong>de</strong>i <strong>de</strong> interpretare.<br />
Şablonul Interpreter nu este potrivit atunci când gramatica este mare. El poate<br />
conduce la un număr mare <strong>de</strong> clase în cazul în care limbajul conŃine multe reguli.<br />
Fiecare regulă adăugata limbajului necesită crearea unei noi clase în interpretor. Acest<br />
lucru poate duce în final la probleme <strong>de</strong> testare şi mentenanŃă.<br />
Se pot adăuga meto<strong>de</strong> interfeŃei Expression pentru a mari funcŃionalitatea<br />
expresiilor. Pentru o mai mare flexibilitate, se foloseşte şablonul Visitor care permite<br />
schimbarea dinamică a meto<strong>de</strong>i <strong>de</strong> interpretare.<br />
29