2010-12-26 18 views
6

Estoy creando un programa de árbol genealógico en Java, o al menos intentando hacerlo. He desarrollado varias clases:Lógica para el programa de árbol genealógico

  • persona - getters y setter para el nombre género edad, etc
  • familymember - extiende captadores persona y definidores para los padres de ajuste y niños
  • familiares - que consta de múltiples miembros de la familia y métodos para agregar eliminando miembros
  • FamilyTree que es la clase principal para establecer relaciones.

Tengo dos problemas principales:

1) que necesito para establecer las relaciones entre las personas. Actualmente estoy haciendo:

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

El ejemplo anterior es para establecer una relación de madre-hijo.

Esto parece muy torpe. Se está poniendo muy largo aliento para implementar todas las relaciones. ¿Alguna idea sobre cómo implementar relaciones múltiples de una manera menos procesal?

2) Tengo que poder mostrar el árbol genealógico. ¿Cómo puedo hacer esto? ¿Hay clases personalizadas para facilitar la vida?

Gracias por su tiempo ...

+0

¿Cómo desea visualizarlo? – Roman

Respuesta

4

Con respecto Para dibujar la estructura, es difícil evitar las colisiones (líneas que se entrecruzan) si tiene más de 2 generaciones visualizadas. Entonces, si tu aplicación te permite mantenerlo en dos, es genial. He escrito una serie de programas que utilizan este tipo de representación, ya sea vertical:

alt text

u horizontalmente:

alt text

Si necesita más generaciones que se muestran a la vez, Será necesario que presente otras representaciones, y es posible que comiencen a escasear para que pueda mostrar a todos en la misma generación al mismo nivel.

Con respecto a cómo representar las relaciones como estructuras de datos, bueno, es desordenado. La cosa más simple y más clara es que dos individuos que son, respectivamente, la madre y el padre del mismo individuo están "casados". Pero, ¿cómo quieres representar a varios socios, hijastros y demás? Es difícil de responder sin saber más sobre lo que se supone que debe hacer su programa. Tal vez su conjunto de datos no tenga estas complicaciones. Si lo hace, sin embargo, es mejor pensar primero en los casos difíciles: las representaciones simples no se prestan a una extensión fácil para cubrir los casos difíciles.

Dibuja (a mano) algunos de los estuches más difíciles que esperas; eso sugerirá qué tipo de datos necesita registrar y cómo organizarlos. Las elecciones que realice al dibujar (quién ocupa el primer lugar, qué símbolos y texto usar en cada nodo, etc.) informarán las decisiones de su estructura de datos.

Configurar tanto la madre de B como el hijo de A parece redundante, y la redundancia genera errores, elija uno. ¿Cúal? Bueno, hay más información cuando configuras la madre de B (el sexo de A) y sabemos que cualquier persona necesitará exactamente dos padres, en comparación con una cantidad de 0 o más hijos. Así que tendería a ir con solo configuración de la madre de B; siempre puede averiguar los hijos de cualquier individuo al iterar sobre todos para elegir el conjunto cuyo padre es igual al individuo en cuestión. Y, de hecho, el almacenamiento de la Madre & Las relaciones del padre (versus relaciones simples con los padres) pueden reducir la duplicación (suponiendo que esté almacenando el género con las personas).

0

algo así como inferior a la clase (esto es un pseudo código no es una verdadera clase de Java)

class Node 
{ 

    public Node Parent { get;set;} 

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

} 

utiliza

 Node ultimateGrandParent = new Node(); 
    ultimateGrandParent.Parent = null; 
    ultimateGrandParent.Childs = new List<Node>(); 
+0

Quiero mostrarlo en una estructura de árbol. Mi principal problema es establecer relaciones. Tengo una clase para miembros de la familia que permite que una persona tenga otro padre y muchos hijos. No estoy seguro de cómo implementar matrimonios y también cómo implementar relaciones de configuración para muchos niños con el mismo padre ... ¡Gracias por una respuesta tan rápida! – dr85

0

Cualquier ideas sobre cómo poner en práctica múltiples relaciones de una manera menos procedimental ?

Sí, puede representar las relaciones en sí mismas como objetos. Dos personas pueden tener cero o más relaciones.

Hace años trabajé en un sistema de registros policiales que lo hizo de forma más general para las asociaciones entre dos personas en su índice de nombre maestro.

Las relaciones pueden ser dirigidas. Madre --- es-madre-de -> Niño.

Las relaciones pueden ser jerárquicas. Una madre es un padre.

2) Tengo que poder mostrar el árbol genealógico . ¿Cómo puedo hacer esto? ¿Existen clases personalizadas disponibles en que hacen la vida más fácil?

Sí, existe un código que admite la visualización de gráficos. Personalmente, tuve una buena experiencia trabajando con el prefuse visualization toolkit.

Puede encontrar la vista previa prefigurada de árbol; intente hacer clic en los nodos en this example. (Sin embargo, si tiene la intención de que su software sea utilizado por otras familias que no sean las suyas, un árbol puede ser insuficiente)

Cuestiones relacionadas