Todos los lenguajes prevén la manipulación de datos de ciertos tipos y definen no sólo la forma en que éste los almacena en la memoria sino las operaciones por defecto que una aplicación puede hacer sobre ellos. Sin embargo, para que un programa sea robusto en su significado, fácil de comprender y eficaz en su ejecución, usualmente es necesario crear tipos de datos propios. A continuación describo cómo se crean tipos de datos nuevos en Scheme y muestro algunos ejemplos de su uso en DrRacket. Disfrútenlo.


¿Qué es abstracción de datos?

La abstracción de datos en programación usualmente se refiere a la creación de tipos de datos compuestos, es decir, a la declaración de una estructura que almacena datos relacionados con alguna entidad física o imaginaria, por ejemplo: un automóvil, se puede declarar en un programa como una estructura cuyos datos específicos serán marca, tipo, modelo, potencia y cualquier dato de un automóvil que sea relevante para lo que debe hacer la aplicación. El anterior ejemplo es de una entidad física tangible, pero también (y especialmente) aplica para cosas no tangibles, por ejemplo una venta o un contrato, que son cosas específicas que existen con sus datos y consecuencias pero que no son necesariamente tangibles, por ejemplo: un programa necesita registrar las visitas que ocurren en un punto de venta, el programador decide crear un nuevo tipo de dato llamado visita, compuesto por fecha, hora, consulta y cantidad de personas. En todos los casos, se crea un nuevo tipo de dato que agrupa una serie de datos de tipos primitivos (definidos nativamente en el lenguaje) en una sola entidad.

Antes de continuar, vamos a aclarar algo muy importante: en una variable se conjugan tres conceptos muy importantes: el tipo de dato que contiene, el dato en sí mismo y el identificador de la variable o el nombre que tendrá ese dato específico en la memoria. Por ejemplo, si declaramos una variable llamada edad, que almacenará la edad de un usuario, el nombre edad es la forma en que el programa accede y manipula el contenido de la memoria, cosa que el programador no conoce previamente pero que puede preveer sus posibles valores y más importante aún, las implicaciones de ciertos valores o rangos de valores. Por otro lado, el dato en mención es (de tipo) numérico y representa la edad del usuario como tal. Con tipos de datos primitivos éstas distinciones son muy fáciles de hacer, porque el significado (cómo almacenar y qué operaciones soporta) para un programa son fáciles de entender para los seres humanos, es decir, el significado para la computadora es tan similar al del humano que se entiende fácilmente, por ejemplo, si se declara una variable llamada edad y se sabe de alguna manera que es un número, un humano concibe perfectamente operaciones como ¿cuántos años de diferencia hay entre la edad de cierto usuario (impredecible) y la mayoría de edad (valor concreto)?, conociendo el año en curso (valor concreto), ¿en qué año nació el usuario (valor incierto)?, etc.. Saber que una variable es de tipo numérico implica que sabemos mucho de sus posibles contenidos, pero cuando se define un tipo de dato abstracto los significados tanto para el programa como para el programador se deben definir y comunicar claramente. Por ejemplo, ¿cómo se incrementaría el precio de un automóvil, dado que éste es de un tipo de dato definido por el programador?, la forma de hacerlo y el resultado hay que definirlos, ya que el lenguaje no los trae por defecto como para los datos primitivos, a pesar de que trae herramientas genéricas para construir éstas operaciones.

¿Qué son estructuras?

Las estructuras son entonces un tipo de dato abstracto, que define el programador para manipular los datos relacionados con una entidad que resulta importante para la aplicación que se desarrolla. Por ejemplo, en el caso de una aplicación para inventario en una carpintería, las estructuras serían por ejemplo: tabla, familia de datos compuestos por la longitud, ancho, espesor, color y terminado, entonces una vez definido el tipo de dato, se podrían crear variables de tipo tabla, que almacenen los 5 datos de una tabla específica, por ejemplo, una variable roble1 (variable) podría contener una tabla de 200x20cm (largo y ancho), de 5cm de espesor, color «claro», terminado «rústico veteado», otra podría llamarse fresno, de 80x15cm, 1.5cm de espesor, color «negro marmolizado» y terminado «fino», etc.

Usando estructuras en un programa

Conclusiones