1 # Guía 4: Tipos de Datos Abstractos 2 3 Algoritmos y Estructuras de Datos (CB100) - 1C2024 - FIUBA 4 Martin J. Klöckner - [mklockner@fi.uba.ar](mailto:mklockner@fi.uba.ar) 5 6 \vspace{1em} 7 > 1. ¿Qué es un TDA? 8 9 Los tipos de datos abstractos son tipos ajenos al lenguaje de programación, se 10 definen de acuerdo a un comportamiento especifico el cual se espera que tenga el 11 tipo de dato, y desde el punto de vista del usuario no importa la manera en la 12 que esté implementado. 13 14 > 3. ¿Qué paradigmas de programación se utilizaron antes de TDA? 15 16 El principal paradigma de programación utilizado previamente es el paradigma 17 procedural, en el cual se separa la ejecución del código en funciones o 18 "subrutinas". 19 20 > 4. ¿Cuáles eran sus principales problemas? 21 22 Uno de los mayores problemas es que se debe invocar a cada función pasando como 23 parámetros los recursos a los cuales se pretende que la función acceda, a menos 24 que se utilicen variables globales, lo cual soluciona en parte este 25 inconveniente pero es una mala práctica, ya que se permite el acceso a esas 26 variables globales a cualquier función que esté en el mismo alcance que la 27 variable definida. 28 29 > 5. ¿Qué es una clase? 30 31 Las clases se utilizan como plantilla o molde, para definir un tipo de dato 32 abstracto u objeto. Una clase combina una serie de atributos a los cuales 33 caracterizan un tipo de dato. 34 35 > 6. ¿Qué es un objeto? 36 37 Un objeto es un tipo de dato que tiene un conjunto de atributos y un 38 comportamiento determinado. 39 40 > 7. ¿Cuáles son las principales características de TDA? 41 42 Las principales características de los TDAs son sus propiedades y atributos ya 43 que el valor de estos define el estado del mismo en un determinado momento. 44 45 Dentro de los atributos principela se encuentra el nombre del TDA, las 46 invariantes del mismo y sus operaciones y axiomas. 47 48 * El nombre nos indica al tipo que nos referimos, es el nombre del tipo de dato 49 y debe ser único en el espacio del nombre. 50 * Las invariantes son condiciones que deben cumplir los atributos que 51 pertenezcan al TDA. 52 * Las operaciones (o métodos) del TDA definen el comportamiento del mismo, se 53 indican con su nombre (o signo), los parámetros que recibe y su valor de 54 retorno, también se indica las Pre- y Post-condiciones, los cuales son los 55 axiomas. 56 57 > 8. ¿Cómo se debe encarar un problema en TDA? 58 59 Se debe arrancar definiendo las características que debe tener el TDA, su 60 nombre, sus atributos y sus funciones u operaciones, independientemente del 61 lenguaje de programación a utilizar. 62 63 > 9. ¿Qué significa `public` y `private`? 64 65 Las palabras reservadas `public` y `private` se utilizan para definir el alcance 66 de los atributos cuando se define una clase. `public` como hace referencia su 67 nombre, permite que los atributos puedan ser accedidos y modificados, en caso de 68 ser variables, luego de definida la clase, mientras que `private` no 69 permite al usuario acceder ni modificar los atributos definidos como tal, solo 70 pueden ser modificados dentro de la definición de la clase. 71 72 > 10. ¿Qué significa `static`? ¿Desde dónde conviene acceder a un atributo de 73 > tipo `static`? Dar un ejemplo de su uso. 74 75 La palabra reservada `static` permite que una variable permanezca en memoria 76 durante toda la ejecución del programa, incluso si la variable se define dentro 77 de una función, por dar un ejemplo, y la función termina su ejecución, en ese 78 caso, si se vuelve a invocar la función, esa variable contendrá el valor que 79 contenía al finalizar la ejecución anterior. 80 81 En el caso de definirlas dentro de una clase, conviene accederlas utilizando 82 métodos. 83 84 > 11. ¿Qué es un constructor? 85 86 Un constructor es un método u operación de un TDA cuya misión es inicializar un 87 objeto de una clase. En el constructor se asignan los valores iniciales del 88 nuevo objeto. 89 90 En el caso de C++, los constructores poseen el mismo nombre de la clase a la 91 cual pertenece y no puede devolver ningún valor (tampoco se puede especificar la 92 palabra reservada `void`). 93 94 > 12. ¿Qué es un destructor? ¿Cuándo se debe programar uno? 95 96 Un destructor es un método de un objeto, al igual que el constructor, solo que 97 en lugar de asignar memoria e inicializar variables, libera recursos, como 98 cerrar archivos, liberar memoria dinámica utilizada, etc. 99 100 Los destructores no deben ser llamados en forma explícita, se llaman 101 automáticamente cuando se termina el ámbito en donde el objeto fue definido o, 102 cuando se ejecuta la instrucción `delete`, en el caso de haber sido creado el 103 objeto con el operador `new`, utilizando memoria dinámica. 104 105 > 13. ¿Qué es la sobrecarga de métodos? 106 107 La sobrecarga de métodos permite definir múltiples métodos con el mismo nombre 108 pero que difieren en los argumentos, esto resulta útil, por ejemplo, para 109 definir múltiples métodos con igual nombre y distinto tipo de argumentos. 110 111 > 14. ¿Qué es el objeto `this`? 112 113 El objeto `this` en C++ es una referencia (puntero) que poseen todos los objetos 114 la cual apunto a sí mismo, se genera de manera automática al invocar un método y 115 se utiliza para resolver ambigüedades en los nombres del alcance del método. 116 117 > 15. ¿Qué son las Pre y Post condiciones? ¿Para qué sirven? 118 119 Las Pre y Post son comentarios que se indican ante cada método y permiten al 120 programador detectar la condición previa y posterior que tendrá el objeto, al 121 cual pertenece el método, luego de ejecutar el mismo. 122 123 No son necesarios para la ejecución de la aplicación pero es una buena práctica.
