План выступления:
1. Зачем?
1. Проектированием хранилищ данных занимается почти каждый.
2. В начале проекта сложно представить, какие новые требования появятся через месяц. (КО напоминает)
3. "Много думать" - бессмысленно, все равно все поменяется.
4. Нужна схема, которую можно будет легко расширять и перетасовывать.
5. Дерево объектов - искомая структура.
2. Примеры деревьев (иерархических структур):
1. Организационная диаграмма.
2. Файлы и папки на диске
3. Файлы и папки - отличная метафора, от которой мы и будем плясать. На диске успешно хранится все, что нужно. Аналогично любые данные хорошо укладываются в дерево.
4. Пример №1
1. Традиционное проектирование. Рисуем UML-диаграмму: новость, каталог новостей, иерархия разделов каталога, страны, к которым принадлежат разделы, описания стран.
2. Выражаем то же самое в виде дерева объектов "статья", "папка", "страна".
3. Такое дерево реализуется примитивнейшей структурой классов - класс Node и его наследники.
1. Как следствие, для моделирования иерархической структуры диаграмма классов не подходит.
5. Полезные операции в дереве объектов:
1. Найти объект по пути. Путь - это последовательность ребер. Полный аналог пути к файлу.
1. Объект может иметь осмысленный путь - это удобно для пользователя.
2. Выбрать все объекты заданных типов, находящиеся в указанной ветви дерева.
1. Одна и та же операция позволяет выбрать все новости про заданную страну или все новости из указанной категории.
3. Наследование свойств вниз по дереву:
1. Конфигурационные настройки.
2. Роли пользователей.
6. Переход от дерева к ориентированному графу
1. Дерева (один родительский узел) не всегда достаточно.
2. Пример - новость может принадлежать нескольким разделам сразу.
3. Надо позволить узлу иметь нескольких родителей - получаем ориентированный граф.
4. Не должно быть циклов
1. Циклы создают проблемы.
2. В них нет никакого смысла для целей хранения данных.
7. Объект Relation - на диаграмму классов, моделирующих дерево добавляем новый класс: parent, child, name.
1. name - имя отношения, которое можно использовать при по
50. Спасибо за вниманиеАндрей МайоровBYTE-forcexor@byte-force.comtwitter.com/xoretsЕсли вам нужна эта презентация – напишите мне
Editor's Notes
Объект Relation - на диаграму классов, моделирующих дерево добавляем новый класс: parent, child, name. name - имя отношения, которое можно использовать при построении пути объекта. Другое название - путевое имя объекта (в контексте родительского объекта).
Есть всего три категории типов связи. Все остальные типы укладываются в эти три.
Специальные связи - обычные ассоциации между классами. Их тоже никто не отменял, но они не участвуют в формировании дерева.
Отличие только одно – по связям parent-child происходит наследование свойств.Если работать с полным путем объекта, то можно наследовать по пути.