Թարգմանիչ (նախագծման ձևանմուշ)

նախագծման ձևանմուշ

Թարգմանիչ (անգլ.՝ Interpreter pattern), վարքագծային նախագծման ձևանմուշ, որը որոշում է թե նախադասությունները ինչ լեզվով պետք է ներկայացվեն։ Հիմնական նպատակն այն է, որ ունենալ դաս յուրաքանչյուր համակարգչային լեզվի համար[1]։

Թարգմանիչ
ՏեսակՎարքագծային
Նշանակությունլուծում է հաճախակի հանդիպող փոփոխման ենթակա խնդիրները
Նկարագրությունը ԳօՖի
"Design Patterns" գրքում
Այո

Նախագծային ձևանմուշը ստեղծում է թարգմանիչներ, որոնք լուծում են հաճախակի հանդիպող և փոփոխման ենթակա խնդիրները։

Կիրառույթուն

խմբագրել
  • Բնորոշում է տվյալների բազայի հերթը այնպիսի լեզուների համար, ինչպիսին օրինակ SQL լեզուն է։
  • Բնորոշում է համակարգչային լեզուները, որն հաճախ օգտագործվում են կոմունիկացիոն պրոտակոլների (անգլ.՝ communication protocols) նկարագրման համար։
  • Ծրագրավորման լեզուներից շատերի գլխավոր խնդիրն է ներառել մի քանի մասնագիտացված լեզուներ։

Առավելություններ

խմբագրել

Հեշտ է ընդլայնել և փոփոխել քերեկանությունը, դասերի իրականացումը։ Կարելի է հեշտությամբ փոփոխել արտահայտությունների հաշվարկման եղանակը։

Թերություններ

խմբագրել

Դժվար է իրականացնել այն քերականությունը, որն ունի բազմաթիվ քերեկանական կանոններ։

Օրինակներ

խմբագրել
//IVSR: Interpreter design pattern
namespace IVSR.DesignPaterns.Interpreter
{
// "Context" 
 class Context 
 {
 }

 // "AbstractExpression" 
 abstract class AbstractExpression 
 {
 public abstract void Interpret(Context context);
 }

 // "TerminalExpression" 
 class TerminalExpression : AbstractExpression
 {
 public override void Interpret(Context context) 
 {
 Console.WriteLine("Called Terminal.Interpret()");
 }
 }

 // "NonterminalExpression" 
 class NonterminalExpression : AbstractExpression
 {
 public override void Interpret(Context context) 
 {
 Console.WriteLine("Called Nonterminal.Interpret()");
 } 
 }
 class MainApp
 {
 static void Main()
 {
 Context context = new Context();

 // Usually a tree 
 ArrayList list = new ArrayList();

 // Populate 'abstract syntax tree' 
 list.Add(new TerminalExpression());
 list.Add(new NonterminalExpression());
 list.Add(new TerminalExpression());
 list.Add(new TerminalExpression());

 // Interpret 
 foreach (AbstractExpression exp in list)
 {
 exp.Interpret(context);
 }

 // Wait for user 
 Console.Read();
 }
 }
}

Ծանոթագրություններ

խմբագրել
  1. Erich Gamma; Richard Helm; Johnson, Ralph; Vlissides, John (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. ISBN 0-201-63361-2.{{cite book}}: CS1 սպաս․ բազմաթիվ անուններ: authors list (link)