You are on page 1of 14

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

FACULTAD DE CIENCIAS MATEMATICAS


E.A.P. COMPUTACION CIENTIFICA

ARBOL GENEALOGICO
ALUMNA: PERALES APAICO, FLOR AMALIA
OBJETIVOS
Proporcionar un caso de estudio de ejemplo,
analizando el proceso completo, desde el
enunciado del problema hasta la implementacin.
Ilustrar la forma en que puede utilizarse un rbol
binario para resolver un problema.
Qu es?

Es un rbol que representa la herencia biolgica de una


persona, comenzando con sus padres y retrocediendo
a travs de las generaciones, pasando por sus abuelos,
bisabuelos, etc.
DISEO INICIAL
Nuestro sistema esta formado de 4 componentes de alto nivel: el controlador(el
controlador carga el modelo de datos e invoca a la vista), la interfaz grafica de
usuario(GUI), la clase que utilizaremos para representar a una persona y la propia
implementacin del rbol genealgico.
El problema que ahora nos ocupa se presta a un tercer modelo de desarrollo
basado en la reutilizacin ( accin que permite volver a utilizar los bienes o
productos desechados y darles un uso igual o diferente a aquel para el que fueron
concebidos), la cual es una tcnica que ya hemos mencionado anteriormente en
el capitulo 5(abajo-arriba) y capitulo 9(arriba-abajo) . En este caso, nuestro rbol
genealgico(AncestorTree) constituye un refinamiento obvio de un rbol binario.
Vamos a utilizar una de las implementaciones de rbol binario, expuestas en los
anteriores captulos, como base de la implementacin.
La siguiente figura presenta el diagrama UML de la interfaz BinaryTreeADT. Se
puede observar las implementaciones de rbol binario que proporcionan
mtodos para eliminar el subrbol izquierdo, eliminar el subrbol derecho,
eliminar todos los elementos, comprobar si el rbol esta vaco, devolver el
tamao del rbol, comprobar si el rbol contiene un cierto elemento y localizar
un elemento determinado dentro del rbol. Los cuatro iteradores situados al
final de la lista se proporcionan para poder realizar los diversos tipos de
recorridos a travs del rbol binario.
Varios de estos mtodos se corresponden exactamente con la funcionalidad
que hemos descrito para nuestro rbol genealgico.
Observe que la interfaz BinaryTreeADT no proporciona ningn mtodo para
aadir elementos al rbol. Este es un ejemplo clsico de herencia; nuestro rbol
genealgico ser una extensin de muestra implementacin de rbol binario (
bien la implementacin enlazada o la implementacin basada en matriz) y
luego proporcionara la funcionalidad adicional necesaria para completar la
implementacin
La interfaz BinaryTreeADT

<<interface>>
BinaryTreeADT

removeLeftSubtree()
removeRightSubtree()
removeAllElements()
isEmpty()
size()
contains()
find()
iteratorInOrder()
iteratorPreOrder()
iteratorPostOrder()
iteratorLevelOrder()
Sin embargo, uno de los requisitos de nuestro problema es la
capacidad de guardar nuestro trabajo en un archivo y luego
volver a cargar los datos en un momento posterior. Este
requisito sugiere que la mejor solucin puede ser extender la
implementacin basada en matriz.
Las implementaciones basadas en matriz suelen ser mas
fciles de guardar en un archivo y de recargarlas
posteriormente en la memoria.
Suponiendo entonces, que vamos a extender la implementacin
basada en matriz de un rbol binario, con el fin de crear el rbol
genealgico, Qu vamos a almacenar en cada nodo del rbol ?.
Podramos simplemente almacenar un objeto para representar
cada persona dentro del rbol genealgico. Sin embargo de
forma similar a lo que hemos hecho con las anteriores colecciones,
lo mejor ser que creemos un objeto que actu como contenedor
para cada nodo del rbol. De esta forma, podemos crear una
clase Person para representar a cada persona que incluyamos en
el rbol y crear una clase AncestorNode que sirva como
contenedor para esa persona dentro del contexto del rbol. La
ventaja de esta tcnica es que podremos entonces crear una
representacin genrica de AncestorTree (rbol genealgico) que
podr instanciarse para representar personas, mascotas, ganado o
cualquier otro animal.
CLASE Person: Debe almacenar la representacin bsica acerca de una
persona que pueda resultar til en el estudio de los antepasados de un
individuo cualquiera; en este sentido, puede almacenarse el nombre, el
apellido, la fecha de nacimiento, la fecha de defuncin, la profesin y la
direccin, esta clase necesitar proporcionar un constructor, un mtodo
compareTo (El mtodo compareTo se usa para comparar dos cadenas) y
un mtodo toString (mtodos toString() que devuelve un tipo String)
CLASE AncestorNode: Proporcionar una lista doblemente ordenada para
representar los hermanos correspondientes a un nodo dado, as como una
variable para almacenar la persona (o el animal) representado por cada
nodo. Adems la clase AncestorNode proporcionara un constructor, un
mtodo para aadir un hermano y un mtodo toString.
Las clases restantes son AncestorGui para GUI y AncestorDemo para el
controlador. La clase AncestorGui permite un par de posibilidades distintas.
La interfaz podra estar basada simplemente en formularios con una
imagen grafica que mostrara el rbol resultante.
IMPLEMENTACION DE UN ARBOL GENEALOGICO
Como hemos indicado en la seccin anterior, vamos a implementar
cuatro componentes principales: el controlador, la interfaz, el rbol
genealgico (AncestorTree) y la clase Person. A lo largo de este
proceso, crearemos una clase AncestorNode para dar soporte a
AncestorNode y reutilizaremos las siguientes clases de nuestras
explicaciones anteriores:
ArrayBinaryTree
BinaryTreeADT
ListADT
OrderedListADT
DoubleList
DoubleNode
DoubleOrderedList
ArrayList
ArrayUnorderedList
UnorderedListADT

You might also like