www.devbg.org/patterns course / Васил Бакалов mail[at]vassil.info mail[at]vassil.info Американски Университет в България Американски Университет в България http://www.aubg.bg/ http://www.aubg.bg/ Interpreter Interpreter Pattern Pattern Design Patterns Design Patterns in C# in C#
Design Patterns in C#. Interpreter Pattern. www.devbg.org/patterns course /. Васил Бакалов. mail[at]vassil.info Американски Университет в България http://www.aubg.bg/. Съдържание. Накратко за шаблона Проблем Структура на шаблона Примерна реализация Въпроси при реализацията - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Васил Бакаловmail[at]vassil.infomail[at]vassil.infoАмерикански Университет в БългарияАмерикански Университет в Българияhttp://www.aubg.bg/http://www.aubg.bg/
• Въпроси при реализациятаВъпроси при реализацията
• За и против шаблонаЗа и против шаблона
• УпражненияУпражнения
• Накратко за шаблонаНакратко за шаблона
• ПроблемПроблем
• Структура на шаблонаСтруктура на шаблона
• Примерна реализацияПримерна реализация
• Въпроси при реализациятаВъпроси при реализацията
• За и против шаблонаЗа и против шаблона
• УпражненияУпражнения
Накратко за шаблонаНакратко за шаблонаНакратко за шаблонаНакратко за шаблона
• Схема, коСхема, кояято решава различни задачи то решава различни задачи по тяхното описаниепо тяхното описание
• Създаване на :Създаване на :
- език, чрез който се описва една задачаезик, чрез който се описва една задача
- схемата за нейното решаванесхемата за нейното решаване
• Вместо решение на конкретен вариант Вместо решение на конкретен вариант на задачата, чрез описателен на задачата, чрез описателен механизъм съставяме общо решениемеханизъм съставяме общо решение
• Схема, коСхема, кояято решава различни задачи то решава различни задачи по тяхното описаниепо тяхното описание
• Създаване на :Създаване на :
- език, чрез който се описва една задачаезик, чрез който се описва една задача
- схемата за нейното решаванесхемата за нейното решаване
• Вместо решение на конкретен вариант Вместо решение на конкретен вариант на задачата, чрез описателен на задачата, чрез описателен механизъм съставяме общо решениемеханизъм съставяме общо решение
Накратко за шаблонаНакратко за шаблонаНакратко за шаблонаНакратко за шаблона
• РРазпределение на задачата на азпределение на задачата на съставящите я подзадачисъставящите я подзадачи
• Дефинира се език, който описва всяка Дефинира се език, който описва всяка подобна задача. На този език подобна задача. На този език съответстват класове, косъответстват класове, коиито то извършват решаването на извършват решаването на задачатазадачата..
• РРазпределение на задачата на азпределение на задачата на съставящите я подзадачисъставящите я подзадачи
• Дефинира се език, който описва всяка Дефинира се език, който описва всяка подобна задача. На този език подобна задача. На този език съответстват класове, косъответстват класове, коиито то извършват решаването на извършват решаването на задачатазадачата..
ПроблемПроблемПроблемПроблем
Често срещан тип задача, на която е Често срещан тип задача, на която е възможно да се състави общо възможно да се състави общо решениерешение
Опростяване на логиката при Опростяване на логиката при извършване на задача с повтарящи се извършване на задача с повтарящи се подзадачиподзадачи
Често срещан тип задача, на която е Често срещан тип задача, на която е възможно да се състави общо възможно да се състави общо решениерешение
Опростяване на логиката при Опростяване на логиката при извършване на задача с повтарящи се извършване на задача с повтарящи се подзадачиподзадачи
Структура на шаблонаСтруктура на шаблонаСтруктура на шаблонаСтруктура на шаблона
Граматиката на езика се изгражда въз основа на Граматиката на езика се изгражда въз основа на следните класове:следните класове:
AbstractExpressionAbstractExpressionДекларира абстрактният метод Декларира абстрактният метод InterpretInterpret, който е общ за , който е общ за
всички възли в абстрактното синтактично дървовсички възли в абстрактното синтактично дърво. .
TerminalExpressionTerminalExpressionИмплементира действието наИмплементира действието на Interpret Interpret операцията за операцията за
крайните символи в граматиката.крайните символи в граматиката.
Необходима е инстанция на такъв обект за всеки краен Необходима е инстанция на такъв обект за всеки краен символ в изречението.символ в изречението.
NonterminalExpressionNonterminalExpressionТакъв клас е необходим за всяко едно правило Такъв клас е необходим за всяко едно правило RR ::= ::= RR1 1 RR2 ... 2 ... RRn n в граматикатав граматиката. .
Съдържа инстанции от тип Съдържа инстанции от тип AbstractExpression AbstractExpression за всеки от за всеки от символите от символите от RR1 1 до до RRn.n.
Граматиката на езика се изгражда въз основа на Граматиката на езика се изгражда въз основа на следните класове:следните класове:
AbstractExpressionAbstractExpressionДекларира абстрактният метод Декларира абстрактният метод InterpretInterpret, който е общ за , който е общ за
всички възли в абстрактното синтактично дървовсички възли в абстрактното синтактично дърво. .
TerminalExpressionTerminalExpressionИмплементира действието наИмплементира действието на Interpret Interpret операцията за операцията за
крайните символи в граматиката.крайните символи в граматиката.
Необходима е инстанция на такъв обект за всеки краен Необходима е инстанция на такъв обект за всеки краен символ в изречението.символ в изречението.
NonterminalExpressionNonterminalExpressionТакъв клас е необходим за всяко едно правило Такъв клас е необходим за всяко едно правило RR ::= ::= RR1 1 RR2 ... 2 ... RRn n в граматикатав граматиката. .
Съдържа инстанции от тип Съдържа инстанции от тип AbstractExpression AbstractExpression за всеки от за всеки от символите от символите от RR1 1 до до RRn.n.
Структура на шаблонаСтруктура на шаблонаСтруктура на шаблонаСтруктура на шаблона
Имплементира операцията Имплементира операцията Interpret Interpret за не крайните за не крайните символи в граматиката.символи в граматиката. Interpret Interpret обикновено се извиква обикновено се извиква рекурсивно за променливите представляващи рекурсивно за променливите представляващи символите символите RR1 1 додо RRn.n.
Context Context Съдържа информация глобална за интерпретатора.Съдържа информация глобална за интерпретатора.
Client Client Построява (или приема) абстрактно синтактично дърво Построява (или приема) абстрактно синтактично дърво
представляващо конкретно изречение в езика, представляващо конкретно изречение в езика, дефиниран от граматиката.дефиниран от граматиката. Абстрактното синтактично Абстрактното синтактично дърво се съставя от инстанции надърво се съставя от инстанции на NonterminalExpression NonterminalExpression и и TerminalExpression TerminalExpression класовекласове..
Имплементира операцията Имплементира операцията Interpret Interpret за не крайните за не крайните символи в граматиката.символи в граматиката. Interpret Interpret обикновено се извиква обикновено се извиква рекурсивно за променливите представляващи рекурсивно за променливите представляващи символите символите RR1 1 додо RRn.n.
Context Context Съдържа информация глобална за интерпретатора.Съдържа информация глобална за интерпретатора.
Client Client Построява (или приема) абстрактно синтактично дърво Построява (или приема) абстрактно синтактично дърво
представляващо конкретно изречение в езика, представляващо конкретно изречение в езика, дефиниран от граматиката.дефиниран от граматиката. Абстрактното синтактично Абстрактното синтактично дърво се съставя от инстанции надърво се съставя от инстанции на NonterminalExpression NonterminalExpression и и TerminalExpression TerminalExpression класовекласове..
Структура на шаблонаСтруктура на шаблонаСтруктура на шаблонаСтруктура на шаблона
Структура на шаблонаСтруктура на шаблонаСтруктура на шаблонаСтруктура на шаблона
Конкретните класове зависят от решавания Конкретните класове зависят от решавания проблем. Нека разгледаме конкретните проблем. Нека разгледаме конкретните класове в два примеракласове в два примера
Конкретните класове зависят от решавания Конкретните класове зависят от решавания проблем. Нека разгледаме конкретните проблем. Нека разгледаме конкретните класове в два примеракласове в два примера
Булева алгебра, реализирана чрез Булева алгебра, реализирана чрез шаблона Интерпретаторшаблона Интерпретатор
Булева алгебра, реализирана чрез Булева алгебра, реализирана чрез шаблона Интерпретаторшаблона Интерпретатор
Въпроси при Въпроси при реализациятареализациятаВъпроси при Въпроси при реализациятареализацията
Създаване на абстрактното синтактично дървоСъздаване на абстрактното синтактично дървоРазпознаването (парсване) не е дефинирано конкретно. Разпознаването (парсване) не е дефинирано конкретно. Възможни са различни подходи, като табличен парсер или Възможни са различни подходи, като табличен парсер или други (например рекурсивно спускане).други (например рекурсивно спускане).
Дефиниране на Дефиниране на Interpret Interpret операциятаоперациятаВместо всеки израз да имплементира Вместо всеки израз да имплементира Interpret Interpret операцията операцията може да се използва шаблона може да се използва шаблона VisitorVisitor. Решение ако се . Решение ако се налага да ползваме различни интерпретатори.налага да ползваме различни интерпретатори.
Споделяне на крайните символи чрез шаблона Споделяне на крайните символи чрез шаблона FlyWeightFlyWeight
Граматики, чийто изречения съдържат множество Граматики, чийто изречения съдържат множество срещания на даден краен символ, ще спечелят ако срещания на даден краен символ, ще спечелят ако използват единствена инстанция на дадения символ.използват единствена инстанция на дадения символ.
Създаване на абстрактното синтактично дървоСъздаване на абстрактното синтактично дървоРазпознаването (парсване) не е дефинирано конкретно. Разпознаването (парсване) не е дефинирано конкретно. Възможни са различни подходи, като табличен парсер или Възможни са различни подходи, като табличен парсер или други (например рекурсивно спускане).други (например рекурсивно спускане).
Дефиниране на Дефиниране на Interpret Interpret операциятаоперациятаВместо всеки израз да имплементира Вместо всеки израз да имплементира Interpret Interpret операцията операцията може да се използва шаблона може да се използва шаблона VisitorVisitor. Решение ако се . Решение ако се налага да ползваме различни интерпретатори.налага да ползваме различни интерпретатори.
Споделяне на крайните символи чрез шаблона Споделяне на крайните символи чрез шаблона FlyWeightFlyWeight
Граматики, чийто изречения съдържат множество Граматики, чийто изречения съдържат множество срещания на даден краен символ, ще спечелят ако срещания на даден краен символ, ще спечелят ако използват единствена инстанция на дадения символ.използват единствена инстанция на дадения символ.
За и против шаблонаЗа и против шаблонаЗа и против шаблонаЗа и против шаблона
Предимства:Предимства:
• Граматиката се променя и разширява лесно Граматиката се променя и разширява лесно Тъй като се използват класове, чрез наследяване лесно Тъй като се използват класове, чрез наследяване лесно
можем да променим или допълним граматикатаможем да променим или допълним граматиката
• Подобност на класоветеПодобност на класоветеКласовете се имплементират по много сходен начин, което Класовете се имплементират по много сходен начин, което
улеснява реализирането на шаблона и автоматизираното улеснява реализирането на шаблона и автоматизираното генериране на класовегенериране на класове
• Добавяне на нови начини за Добавяне на нови начини за интерпретиране на изразиинтерпретиране на изразиЛесно, чрез добавяне на нови операции на съществуващите Лесно, чрез добавяне на нови операции на съществуващите
класовекласове
Предимства:Предимства:
• Граматиката се променя и разширява лесно Граматиката се променя и разширява лесно Тъй като се използват класове, чрез наследяване лесно Тъй като се използват класове, чрез наследяване лесно
можем да променим или допълним граматикатаможем да променим или допълним граматиката
• Подобност на класоветеПодобност на класоветеКласовете се имплементират по много сходен начин, което Класовете се имплементират по много сходен начин, което
улеснява реализирането на шаблона и автоматизираното улеснява реализирането на шаблона и автоматизираното генериране на класовегенериране на класове
• Добавяне на нови начини за Добавяне на нови начини за интерпретиране на изразиинтерпретиране на изразиЛесно, чрез добавяне на нови операции на съществуващите Лесно, чрез добавяне на нови операции на съществуващите
класовекласове
За и против шаблонаЗа и против шаблонаЗа и против шаблонаЗа и против шаблона
Недостатъци:Недостатъци:
• Сложните граматики се поддържат Сложните граматики се поддържат труднотрудноТъй като за всяко правило в граматиката се дефинира поне Тъй като за всяко правило в граматиката се дефинира поне
един клас, при граматики с много правила броят на един клас, при граматики с много правила броят на класовете се увеличава и кода става труден за класовете се увеличава и кода става труден за поддръжка.поддръжка.
Недостатъци:Недостатъци:
• Сложните граматики се поддържат Сложните граматики се поддържат труднотрудноТъй като за всяко правило в граматиката се дефинира поне Тъй като за всяко правило в граматиката се дефинира поне
един клас, при граматики с много правила броят на един клас, при граматики с много правила броят на класовете се увеличава и кода става труден за класовете се увеличава и кода става труден за поддръжка.поддръжка.
InterpreterInterpreterInterpreterInterpreter
Въпроси?Въпроси?
УпражненияУпражненияУпражненияУпражнения
1.1. Да се напише програма, която чрез Да се напише програма, която чрез използване на шаблона използване на шаблона Интерпретатор да изчислява Интерпретатор да изчислява десетичната стойност на дадено десетичната стойност на дадено римско числоримско число
1.1. Да се напише програма, която чрез Да се напише програма, която чрез използване на шаблона използване на шаблона Интерпретатор да изчислява Интерпретатор да изчислява десетичната стойност на дадено десетичната стойност на дадено римско числоримско число
Използвана литератураИзползвана литератураИзползвана литератураИзползвана литература
• Ерик Гама, Ричард Хелм, Ралф Ерик Гама, Ричард Хелм, Ралф Джонсън, Джон Влисидес, Шаблони за Джонсън, Джон Влисидес, Шаблони за дизайн, СофтПрес, 2005, дизайн, СофтПрес, 2005, ISBN 954-685-ISBN 954-685-352-6352-6
• Ерик Гама, Ричард Хелм, Ралф Ерик Гама, Ричард Хелм, Ралф Джонсън, Джон Влисидес, Шаблони за Джонсън, Джон Влисидес, Шаблони за дизайн, СофтПрес, 2005, дизайн, СофтПрес, 2005, ISBN 954-685-ISBN 954-685-352-6352-6