CB100

Notas, resueltos y tps de la materia Algoritmos y Estructuras de Datos
Index Commits Files Refs README
guias/4/respuestas.md (5506B)
   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.