
- •Задание
- •Реферат
- •Содержание
- •1.1.Обоснование и выбор методов решения
- •1.2.Описание программы
- •1.2.1.Общие сведения
- •1.2.2.Функциональное назначение
- •1.2.3.Описание структур данных, используемых в программе
- •1.2.4.Описание логической структуры программы
- •1.2.4.1.Отношения между классами
- •1 Лошадь .2.4.2.Описание классов
- •1.2.5.Описание физической структуры программы
- •1.2.6.Описание основных алгоритмов программы
- •1.3.Руководство пользователя
- •1.4.Список использованных источников
- •1.5.Приложения
1.2.3.Описание структур данных, используемых в программе
Для реализации функций самообучающейся системы выбрана структура «дерева решений», т.к. она удобна для последовательного и логичного отображения вопросов, на который должен ответить пользователь. Вопросы должны извлекаться из информационных полей левого или правого потомка узла, в зависимости от ответа «да» или «нет». При этом если в ходе работы с самообучающейся системой мы добрались до листьевой вершины дерева, это означает, что программа «угадала» задуманный пользователем объект или нам следует добавить в структуру новый узел, если программа «проиграла». Таким образом, данная структура удобна тем, что ее можно динамически изменять во время работы программы.
Рассмотрим подробнее структуру классов «дерево решений» SolutionTree и «узел дерева решений» TreeNode.
Класс TreeNode содержит три поля: информационное поле узла question, в котором содержатся вопросы или ответы, ссылку на левого и правого потомка узла yes и no. Кроме того, здесь имеется три соответствующих полям свойства:Yes, No, Question. Для удобства доступа к объектам данного класса используется три конструктора: без параметров, с одним параметроминформационным полем и с тремя параметрамиинформационным полем и ссылками на левую и правую дочь узла.
Класс SolutionTree содержит три поля: ссылки на корень дерева решений, на текущий узел и на предыдущий узел, расположенный уровнем выше. В классе содержатся свойство Root, конструктор по умолчанию. Кроме того, здесь описаны методы для записи и чтения информации в XML-файл:Save и Open соответственно, а также методы рисования структуры дерева решений P, R и L.
В данной программе для хранения дерева решений используется XML-файл, поскольку эта структура наглядно отражает иерархическую структуру данных и реализует принцип вложенности, что удобно для извлечения информации, размещенной в узлах дерева. В отличие от бинарных форматов, XML содержит метаданные об именах, типах и классах описываемых объектов, по которым приложение может обработать документ неизвестной структуры. Иерархическая структура XML подходит для описания практически любых типов документов, кроме аудио и видео мультимедийных потоков, растровых изображений, сетевых структур данных и двоичных данных. Для того чтобы в файле не дублировались значения полей и свойств, используется объект класса XmlIgnoreAttribute, который инструктирует метод Serialize, принадлежащий XmlSerializer, не сериализовывать значение открытого поля или открытого свойства чтения/записи. Для создания корневого элемента иерархии вызывается конструктор класса XmlRootAttribute с двумя параметрами – именем корневого элемента и проинициализованным значением false свойством IsNullable, указывающим, что XmlSerializer не должен выполнять сериализацию члена со значением Nothing в атрибут xsi:nil.
Структура дерева решений изображена на рис.1.
Рис.1.Структура дерева решений