Вопрос

Я создаю программу семейного дерева в Java или, по крайней мере, пытаюсь. Я разработал несколько классов:

  • Человек - Getters и Setter для имени гендерного возраста и т. Д.
  • Член семьи - продлевает и сеттеры, чтобы установить родителей и детей
  • Семья - которая состоит из нескольких членов семьи и методов для добавления удаления членов
  • FamilyTree, который является основным классом для установления отношений.

У меня две основные проблемы:

1) Мне нужно установить отношения между людьми. В настоящее время я делаю:

FamilyMember A, FamilyMember B
B.setMother(A);
A.setChild(B);

Приведенный выше пример для установления отношений с мать -ребенком.

Это кажется очень неуклюжим. Он становится очень длинным, чтобы внедрить все отношения. Есть идеи о том, как внедрить несколько отношений менее процедурным образом?

2) Я должен иметь возможность показать семейное древо. Как я могу это сделать? Есть ли какие -нибудь пользовательские занятия, чтобы облегчить жизнь?

Спасибо за ваше время...

Это было полезно?

Решение

Что касается рисования структуры, трудно избежать столкновений (пересечение линий), если у вас отобразилось более 2 поколений. Поэтому, если ваше приложение позволяет вам оставить его до двух, это здорово. Я написал ряд программ, которые используют этот вид представления, любой по вертикали:

alt text

или горизонтально:

alt text

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

Что касается того, как представлять отношения как структуры данных - ну, это грязно. Самая простая и чистая вещь - это то, что любые два человека, которые являются соответственно мать и отец того же человека, «женаты». Но как вы хотите представлять нескольких партнеров, ущерб и тому подобное? На это трудно ответить, не зная больше о том, что должна делать ваша программа. Может быть, ваш набор данных не имеет этих осложнений. Если это так, то лучше сначала продумать сложные случаи - простые представления не поддаются легкому расширению, чтобы покрыть сложные случаи.

Нарисуйте (вручную) несколько самых сложных случаев, которые вы ожидаете; Это предполагает, какие данные вам нужны для записи и как их организовать. Выбор, который вы делаете при рисовании (кто на первом месте, какие символы и текст используют в каждом узле и т. Д.), Будет сообщать ваши решения по структуре данных.

Установка матери Б. и ребенок А кажется избыточным - и избыточность приводит к ошибкам - выберите один. Который из? Что ж, есть больше информации, когда вы устанавливаете мать B (пол), и мы знаем, что любому человеку понадобятся ровно два родителя, по сравнению с количеством детей 0-или более. Так что я бы склонен идти с просто установить мать Б; Вы всегда можете узнать детей любого человека, итерация по всему всем, чтобы выбрать набор, чей родитель равен рассматриваемому человеку. И на самом деле хранение отношений матери и отца (в отличие от отношения между родителями) может уменьшить дублирование (при условии, что вы храните пол с людьми).

Другие советы

Есть идеи о том, как внедрить несколько отношений менее процедурным образом?

Да, вы можете представлять отношения сами как объекты. Любые два человека могут иметь ноль или более отношений.

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

Отношения могут быть направлены. Мать --- Материал-> Ребенок.

Отношения могут быть иерархическими. Мать Иса родитель.

2) Я должен иметь возможность показать семейное древо. Как я могу это сделать? Есть ли какие -нибудь пользовательские занятия, чтобы облегчить жизнь?

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

Вы можете найти предварительное дерево интереса; Попробуйте нажать на узлы в этот пример. Анкет (Однако, если вы намереваете свое программное обеспечение для использования семьями, кроме вашего собственного, дерево может быть недостаточным.)

что -то вроде класса ниже (это псевдод, а не настоящий класс Java)

class Node
{

     public Node Parent { get;set;}

     public List<Node> Childs {get;set;}

}

Использование

     Node ultimateGrandParent = new Node();
     ultimateGrandParent.Parent = null;
     ultimateGrandParent.Childs = new List<Node>();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top