Թարգմանիչ (նախագծման ձևանմուշ)
նախագծման ձևանմուշ
Թարգմանիչ (անգլ.՝ Interpreter pattern), վարքագծային նախագծման ձևանմուշ, որը որոշում է թե նախադասությունները ինչ լեզվով պետք է ներկայացվեն։ Հիմնական նպատակն այն է, որ ունենալ դաս յուրաքանչյուր համակարգչային լեզվի համար[1]։
Թարգմանիչ | |
---|---|
Տեսակ | Վարքագծային |
Նշանակություն | լուծում է հաճախակի հանդիպող փոփոխման ենթակա խնդիրները |
Նկարագրությունը ԳօՖի "Design Patterns" գրքում | Այո |
Նախագծային ձևանմուշը ստեղծում է թարգմանիչներ, որոնք լուծում են հաճախակի հանդիպող և փոփոխման ենթակա խնդիրները։
Կիրառույթուն
խմբագրել- Բնորոշում է տվյալների բազայի հերթը այնպիսի լեզուների համար, ինչպիսին օրինակ SQL լեզուն է։
- Բնորոշում է համակարգչային լեզուները, որն հաճախ օգտագործվում են կոմունիկացիոն պրոտակոլների (անգլ.՝ communication protocols) նկարագրման համար։
- Ծրագրավորման լեզուներից շատերի գլխավոր խնդիրն է ներառել մի քանի մասնագիտացված լեզուներ։
Առավելություններ
խմբագրելՀեշտ է ընդլայնել և փոփոխել քերեկանությունը, դասերի իրականացումը։ Կարելի է հեշտությամբ փոփոխել արտահայտությունների հաշվարկման եղանակը։
Թերություններ
խմբագրելԴժվար է իրականացնել այն քերականությունը, որն ունի բազմաթիվ քերեկանական կանոններ։
Օրինակներ
խմբագրելC#
խմբագրել//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();
}
}
}
Ծանոթագրություններ
խմբագրել- ↑ 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)