3 de marzo de 2017

Estructuras de datos (tipos de datos y referencias).

   Probablemente el lector esté familiarizado con el concepto de tipo de dato, ya sea debido a que tenga experiencia previa con algún lenguaje de programación, o simplemente porque ha revisado la entradas correspondientes a Un vistazo a Java (Un vistazo a C++) o las relacionadas a los conceptos de la Programación Orientada a Objetos. En este sentido valdría la pena preguntarse ¿cómo se podría definir lo qué es un tipo de dato?

   Un tipo de dato es un método para interpretar un patrón de bits. Una secuencia de bits determinada podría ser interpretada de una forma u otra y representar algún tipo de información específica en función del tipo de dato.

   En la mayoría de los lenguajes de programación, el programador especifica mediante las declaraciones de variables u objetos, cómo es que el programa va a interpretar el contenido de la memoria de la computadora.

   Las declaraciones también le especifican al compilador exactamente, qué es lo que representan los símbolos de las operaciones que se utilizarán, ya que aunque en apariencia es lo mismo, los mecanismos de implementación de una operación aritmética tan aparentemente simple como la adición, difieren de un tipo de dato a otro.

   Por otro lado, para la mayoría de los lenguajes de programación los nombres de las variables o los identificadores asociados a los objetos, son en realidad referencias, es decir, direcciones de memoria en las que se almacenan físicamente los objetos a los que se refieren.

   El manejo de referencias o direcciones de memoria puede ser explícito como en el caso de los lenguajes C y C++ por ejemplo, donde el manejo de referencias se realiza a través de apuntadores. En algunos otros lenguajes como Java y C# el manejo de referencias es implícito, es decir, se realiza a través del nombre o identificador de los objetos.
 
   Tanto el manejo de referencias explícito como el implícito tienen sus ventajas y desventajas, y las fortalezas de uno son las debilidades del otro y viceversa. No es la intención de esta entrada ni la del blog extenderse en dichos aspectos, ya que para los objetivos específicos que se persiguen, basta con saber que Java hace uso de referencias implícitas, y que el nombre o identificador de los objetos es en realidad una referencia y no los objetos en sí mismos. Por otro lado, C++ utiliza tanto referencias implícitas como explícitas.

   En entradas y secciones posteriores se detallarán y ejemplificarán tanto el concepto de autorreferencia como el manejo de referencias para los objetos, elementos que serán indispensables para la construcción y manipulación de las estructuras de datos que se implementarán.