776.57K
Category: programmingprogramming

Паттерн «Интерпретатор»

1.

Паттерн «Интерпретатор»
Презентацию подготовили студенты:
МГТУ «Станкин»
Группы АДБ-21-08
Шилов Д.Ю., Герасимов Д.С., Куимов А.К.
Руководитель: старший преподаватель Евстафиева С.В.

2.

Контрольные точки
1. Классификация и назначение
2. Решаемая проблема (мотивация к использованию)
3. Диаграмма классов, классы-участники
4. Применимость
5. Пример реализации паттерна
6. Достоинства и недостатки при использовании

3.

Общие понятия

4.

Классификация и назначение
Классификация
Интерпретатор - паттерн
поведения классов
Назначение
• Для заданного языка определяет
представление его грамматики, а
также интерпретатор
предложений этого языка.
• Отображает проблемную область
в язык, язык – в грамматику, а
грамматику – в иерархии
объектно-ориентированного
проектирования.

5.

Решаемая проблема
1. Если некоторая задача встречается
достаточно часто, то имеет смысл
представить ее конкретные
проявления в виде предложений на
простом языке. После этого можно
создать интерпретатор, который
решает задачу, анализируя
предложения этого языка
2. Пусть в некоторой, хорошо
определенной области
периодически случается некоторая
проблема. Если эта область может
быть описана некоторым “языком“,
то проблема может быть легко
решена с помощью
“интерпретирующей машины“

6.

Применимость
Паттерн интерпретатор используется в ситуациях, когда имеется
интерпретируемый язык, конструкции которого можно представить
в виде абстрактных синтаксических деревьев. Этот паттерн лучше
всего работает в следующих случаях:
Грамматика
проста
Эффективность не
является главным
критерием

7.

Диаграмма классов и
реализация

8.

Диаграмма классов (общий случай)

9.

Участники
1.
AbstractExpression: определяет интерфейс
выражения, объявляет метод Interpret()
2.
TerminalExpression: терминальное выражение,
реализует метод Interpret() для терминальных
символов грамматики. Для каждого символа
грамматики создается свой объект TerminalExpression
3.
NonterminalExpression: нетерминальное выражение,
представляет правило грамматики. Для каждого
отдельного правила грамматики создается свой
объект NonterminalExpression
4.
Context: содержит общую для интерпретатора
информацию. Может использоваться объектами
терминальных и нетерминальных выражений для
сохранения состояния операций и последующего
доступа к сохраненному состоянию
5.
Client: строит предложения языка с данной
грамматикой в виде абстрактного синтаксического
дерева, узлами которого являются объекты
TerminalExpression и NonterminalExpression

10.

Тестовая задача
Условие
Создать консольное приложение на языке C# для вывода числа
с помощью арабских цифр.
Первоначально число записано с помощью римский цифр.
Решение
1. Создать диаграмму классов для визуализации структуры
приложения
2. Реализовать требуемую функциональность с помощью языка C#

11.

Диаграмма классов

12.

Реализация
Клиент
Контекст
Абстрактный класс выражения

13.

Реализация
Классы наследники

14.

Результат работы программы

15.

Достоинства и недостатки паттерна
Простота изменения
и расширения
грамматики
Сложность
сопровождения
сложных грамматик
Спасибо за внимание!
Простая реализация
грамматики
Добавление новых
способов
интерпретации
выражений
English     Русский Rules