Algunas dudas generales de Disenio de TADs

Algunas dudas generales de Disenio de TADs

de Rafael Agustin Castelli Ottati -
Número de respuestas: 1

Buenas, me surgieron algunas consultas de este tema :

1) Como decido si al momento de borrar datos de un TAD de elementos de un tipo T cualquiera, o al insertarlos el manejo de memoria es responsabilidad del TAD o no. Por ejemplo en el ejercicio 6.a que se pide especificar la pila de K elementos de un tipo T. Como decido si al eliminar un elemento (porque inserto un K + 1esimo o porque borro) debo liberar la memoria asociada a ese elemento o no (en caso de ser memoria dinamica). Ademas, supongamos que el tipo T es un puntero a una estructura, por ejemplo un arbol, como decido si la insercion hace una copia solo del puntero o de toda la estructura (crea un arbol nuevo)?

2) Cuando especifico un TAD, es correcto ponerle ordenes a las operaciones o deberia quedar por fuera?

3) Deberia aclarar si los borrados en un TAD son fisicos o logicos para asi quien use el TAD puede optimizar su uso de memoria o debe quedar por fuera porque es algo mas relacionado a la implementacion?

4) Los casos en que tengo un TAD con una cota , y mi operacion de insercion devuelve un booleano indicando si se inserto o no el elemento, son considerados acotados o no acotados? Y los casos como el ejercicio 6a en que no puede haber mas de K elementos, pero puedo insertar borrando los mas viejas?

5) Como funciona bien esas predirectivas que ponen antes de la especificacion en una tarea?  Hablo de :

#ifndef _PILA_H
#define _PILA_H

#endif

En respuesta a Rafael Agustin Castelli Ottati

Re: Algunas dudas generales de Disenio de TADs

de Carlos Luna -

Hola Rafeal.

Interesantes preguntas; voy en orden:

1) Debería decirlo la especificación del TAD o debería existir una política general de cómo manejarse en estos casos. Es una mala política dejar memoria colgada (sin liberar) salvo que la especificación indique que no debe liberarse. Respecto a realizar una copia superficial (solo el puntero) o en profundidad (toda la estructura) cuando se recibe un parámetro, también la especificación debería aclararlo o ser nuevamente una política general de trabajo, para que el uso de las operaciones de los tads sea precisa (sin ambiguedades).

2) Los ordenes se establecen sobre las implementaciones, no sobre las especificaciones.

3) La especificación o una política general de trabajo con el TAD deberÍa aclarar si los borrados en el TAD son físicos o lógicos.

4) Cuando se especifica un TAD se establece si éste es acotado o no acotado. En general, en un TAD acotado las operaciones de inserción tienen como precondición que el TAD no esté lleno, se agrega un predicado para chequear esta condición y la operación que crea la estructura vacía recibe la cota (tamaño máximo) como parámetro. El ejercicio 6a referido es un híbrido entre acotado y no acotado, ya que siempre se puede insertar (no hay precondición) pero solo cierta cantidad máxima se considera. Por lo primero parece no acotado pero por lo segundo se limita la cantidad de elementos y en tal sentido se comporta como acotado.

5) En lenguaje coloquial, estas directivas evitan que al incluirse más de una vez lo limitado por las declaraciones se produzca el error de redefinición. Esto es, se define algo la primera vez y se ignoran las posteriores.

Saludos, Carlos