Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: LadyWin en 12 Octubre 2021, 18:01 pm



Título: TAD - Tipos de datos Abstractos
Publicado por: LadyWin en 12 Octubre 2021, 18:01 pm
Buenos días gente, como están? Tengo dos dudas en este tema:
 
1) Como podría ser la mejor manera de saber cuales serian las funcionalidades publicas correctas para que pueda utilizar el usuario? por ejemplo, tengo un TAD de listas, en ella estarían las operaciones comunes como agregar al final, mostrar, eliminar, etc y tengo una funcionalidad que se llamaría crear donde crearía un nodo que la utilizaría dentro de la funcionalidad agregar al final, esta operación de crear seria una funcionalidad para que también la pueda usar el usuario? Esta duda me surge porque al modularizar una operación no se si esas funcionalidades serian publicas también, o debo dejarlas como privadas, tendría utilidad para el usuario crear un nodo sin el dato?

2) Si tengo un TAD de listas, las funcionalidades se verían comprometidas dependiendo de la estructura que utilice para almacenar los datos no?, aunque en una lista con enlace o un vector se puedan ver como listas (verlo abstractamente) no creo que se puedan reutilizar las funcionalidades con una estructura de datos de tipo, por ejemplo lista enlazada con la de un vector, mi duda surge porque se dice que el usuario no debe conocer que estructura de datos se utiliza, y si es un vector, las funcionalidades deberían recibir, además del vector, también una posición y en esa situación el usuario estaría sabiendo la estructura que se esta utilizando en la implementación del TAD

Disculpa si fui muy extensa pero quería hacerme entender, si me pueden ayudar estaría agradecida, saludos! :laugh:


Título: Re: TAD - Tipos de datos Abstractos
Publicado por: Locura_23 en 12 Octubre 2021, 19:51 pm
Hola @LadyWin, bueno estas cuestiones de diseño muchas veces varian pero

1) pienso que el cliente solo necesitaria las funciones (o metodos) basicas de la lista tal como mencionaste insertar, mostrar, eliminar, buscar... Todas las funciones que sean intrinsecas a la forma en que las funciones hacen esas tareas deberian estar ocultas.
El usuario deberia ingresar el dato que quiere guardar, y en todo caso una bandera de cómo quiere hacerlo, (principio, final o en orden). Esto se podria hacer con un subprograma.
La funcion de crear nodo no es necesaria que la sepa el usuario o tampoco la de buscar ultimo nodo (si decide insertar al final)...

2) efectivamente la forma interna en que trabajan cambia segun la estructura, por ejemplo: puedes implementar el TDA pila con una lista enlazada simple o lista enlazada doble. Sin embargo en ambos casos, el cliente solo quiere las funciones basicas, apilar, desapilar, mostrar, y una funcion predicado pilavacia tal vez...

Para mucha más información del tema, te recomiendo:

"Programación en C" de Luis Joyanes Aguilar, capitulo sobre TDA.