Читаем Объектно-ориентированный анализ и проектирование с примерами приложений на С++ полностью

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

Действуя таким образом мы выявили тринадцать источников знаний, относящихся к нашей проблеме:  

∙ Префиксы  Наиболее часто используемые начала слов (например, re, anti, un). 

∙ Суффиксы  Наиболее часто используемые окончания слов (ly, ing, es, ed). 

∙ Согласные  Буквы, не являющиеся гласными. 

∙ Непосредственно известные подстановки  Подстановки, известные нам априори, до решения задачи. 

∙ Двойные буквы  Наиболее часто сдваиваемые буквы (tt, ll, ss). 

∙ Частота букв  Вероятность появления букв в тексте. 

∙ Правильные строки  Допустимые и недопустимые сочетания букв (например, qu и zg). 

∙ Сравнение с шаблоном  Слова, соответствующие шаблону. 

∙ Структура фраз  Грамматика, включая знания об именных и глагольных оборотах. 

∙ Короткие слова  Одно-, двух-, трех- и четырехбуквенные слова. 

∙ Решение  Найдено ли решение или мы зашли в тупик. 

∙ Гласные  Буквы, не являющиеся согласными. 

∙ Структура слова  Расположение гласных и типичная структура существительных, глаголов, прилагательных, наречий, предлогов, союзов и т.д. 

  Исходя из объектно-ориентированного подхода, все эти источники знаний являются потенциальными кандидатами на роль классов, на основе которых создаются объекты, обладающие состоянием (знания), поведением (источник знаний о суффиксах может среагировать на слово с характерным окончанием) и индивидуальностью (знания о коротких словах не зависят от умения сравнивать с шаблоном).

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

11.2. Проектирование

Архитектура информационной доски

Теперь у нас есть все, чтобы приступить к решению поставленной задачи с использованием метафоры информационной доски. Это классический пример повторного использования "в большом": мы повторно применяем испытанный архитектурный шаблон как основу проекта. Метод информационной доски предполагает следующие объекты верхнего уровня: информационная доска, несколько источников знаний и контроллер. Остается только определить классы и объекты предметной области, которые специализируют эти общие абстракции.

Объекты информационной доски. Объекты на доске образуют иерархию, отражающую иерархичность различных уровней абстракции источников знаний. Таким образом, у нас есть три следующих класса:

Sentence - Полная криптограмма.

Word - Отдельное слово в криптограмме.

CipherLetter - Отдельная буква в слове.

Источники знаний должны пользоваться общей информацией о сделанных в процессе решения предположениях, поэтому в число объектов информационной доски включается следующий класс:

Assumption - Предположение, сделанное источником знаний.

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

Alphabet - Алфавит исходного текста, алфавит криптограммы и соответствие между ними.

Есть ли между этими пятью классами что-либо общее? Ответ однозначно утвердительный: все они соответствуют объектам информационной доски и этим существенно отличаются от других объектов, например, источников знаний и контроллера. Поэтому вводится следующий суперкласс для всех ранее перечисленных объектов:

class BlackboardObject ...

С точки зрения внешнего поведения определим для этого класса две операции:

register - Добавить объект на доску.

resign -Удалить объект с доски.

Почему мы определили эти две операции над объектами класса BlackboardObject, а не над самой доской? Это похоже на ситуацию, когда объект должен сам нарисовать себя в некотором окне. "Лакмусовый" тест в таких случаях, это вопрос: "Имеет ли сам объект достаточно знаний и умений, чтобы выполнять такие операции?". Объекты информационной доски как раз лучше всех понимают, как им правильно появляться на доске или удаляться с нее (конечно, они нуждаются при этом в помощи самой доски). Мы уже установили ранее, что объекты, взаимодействующие с доской, по своей сути должны самостоятельно включаться в процесс решения задачи.

Перейти на страницу:

Похожие книги