2.1 Los
tipos de datos abstractos.
Uno de los
puntos más cruciales asociados con el diseño de un nuevo sistema involucra la
gestión de la complejidad del proceso de diseño.
Habitualmente
los buenos diseñadores emplean alguna forma de abstracción como herramienta
para tratar esta complejidad.
¿Abstracción?
Capacidad
intelectual de considerar una entidad aislándola de cualquier ejemplar
específico de esa entidad. Ejemplo: los diseñadores de hardware que pretenden
diseñar una computadora, se preocupan de la funcionalidad de los circuitos
integrados que piensan usar, no del funcionamiento de los transistores que se
encuentran en esos circuitos integrados.
El
desarrollo de un sistema informático también se ve simplificado en gran medida
mediante el uso de abstracciones en el proceso de diseño.
¿Abstracción en un sistema informático?
Supone
especificar la funcionalidad de un sistema informático en términos generales de
alto nivel.
Una vez que
puede ser demostrado que esta especificación abstracta del sistema es correcta
es posible añadir más detalles, para finalmente conducir a una descripción
detallada de ¨bajo nivel¨ del sistema informático en términos que son
directamente implementados usando la sintaxis de un lenguaje de programación
dado. En cada paso de este proceso el diseñador debe verificar que el detalle
adicional añadido al diseño del sistema es correcto. La ventaja de este enfoque
está en que limita la complejidad con la que se debe tratar en cualquier paso
del proceso de diseño. Esto permite al diseñador concentrarse en el conjunto
del diseño del sistema sin tener que enfrascarse en detalles de implementación.
Mientras
avanza el proceso de diseño los distintos tipos de datos necesarios, así como
las operaciones que deben ser ejecutados con estos datos se van revelando.
En este
momento puede ser utilizado un tipo especial de abstracción conocido como abstracción
de datos. Esto implica una descripción abstracta o lógica, tanto de los
datos requeridos por el sistema informático como de las operaciones que pueden
ser ejecutadas con esos datos.
El uso de la
abstracción de datos durante el desarrollo del software permite al diseñador
concentrase en cómo son usados los datos en el sistema para resolver el
problema que le ocupa, sin tener que preocuparse de cómo los datos son
representados y tratados en la memoria del computador.
Las clases
representan abstracciones de entidades que son utilizadas en la solución de problemas
concretos. A ellas se llega mediante el proceso de abstracción del problema a
resolver, identificando atributos y responsabilidades mediante los métodos de
análisis y diseño orientado a objetos que deben ser conocidos.
Cuando se presentó el modelo de programación orientada a objetos se
habló de clases, objetos, encapsulamiento, y generalización, es necesario que
recuerdes todo ello pues son conceptos que seguiremos utilizando a lo largo de
este semestre, para ello puedes utilizar el libro “Thinking in C++” de Bruce Eckel, lee los capítulos del 1 al 5, en ellos podrás ampliar tus
conocimientos acerca de la POO y el lenguaje C++. Este libro será utilizado
como bibliografía auxiliar durante este tema.
Al crear
clases que pueden ser instanciadas estamos concretando determinada abstracción
que nos es necesaria para dar solución a determinado problema, esto está
relacionado con el concepto de Tipo de Dato
Abstracto, así como con el de Estructura
de Datos, estos conceptos serán vistos más adelante, primero
el de Tipo de Dato Abstracto y luego el de Estructura de Datos.
Definición 1. Tipo de Dato Abstracto (TAD).
Un tipo de dato abstracto (TAD) es un modelo matemático compuesto por una colección de operaciones definidas sobre un conjunto de datos para el modelo.
Si nos remontamos a las primeras clases del semestre anterior veremos que esto es en cierta forma similar a la definición de clases, de hecho las clases se utilizan para representar a los TADs en los lenguajes de programación orientados a objetos.
Un TAD se
caracteriza por:
1. Exportar un tipo (una clase lo
es)
2. Definir un conjunto de
operaciones para la manipulación (la interfase, el conjunto de métodos tanto
públicos como protegidos que pueden ser utilizados)
3. Utilizar la interfase como único
mecanismo de acceso a la estructura de datos (encapsular, esconder el cómo)
Ejemplos de
tipos de datos abstractos son los números enteros, los números complejos, las
matrices, etc. En la asignatura nos encargaremos de definir las propiedades de
determinados TAD como las listas (y sus variantes), árboles, grafos y otros muy
utilizados en la solución de problemas y con un comportamiento conocido.
Veamos como
se puede definir el TAD entero:
TAD Entero es
Una secuencia de dígitos que opcionalmente
presentan
como prefijo un signo + o -. A esta
secuencia le damos el
nombre de n.
Suma( Entero k )
Crea un nuevo entero resultado de la suma de
n y k.
Resta( Entero k )
Crea un nuevo entero resultado de la resta de n y k.
Multiplicar( Entero k )
Crea un nuevo entero resultado de la multiplicación n y k
Dividir( Entero k )
Crea un nuevo entero resultado de la división
de n y k
Resto( Entero k )
Crea un nuevo entero resultado, el resto la
división de n y k
Obtener(
)
Devuelve a n
Poner( Entero k )
Pone en n el valor de k.
FIN
Figura 1. El TAD Número Entero.

Una clase es
una representación real o concreta de un TAD, por lo tanto puede proporcionar
los detalles de implementación para la estructura de datos y las operaciones
que definimos. En una clase los atributos representan a la estructura de
datos utilizada y los métodos a las operaciones.
El término tipo de datos se refiere a la
implementación del modelo matemático especificado por un TAD. Un tipo de dato es
la representación informática de un TAD.
El término Estructura de Datos se refiere a una
colección de variables en memoria que están relacionadas de alguna forma
específica.
Recordemos
también la existencia de clases abstractas que nos proporcionan la forma de
escribir determinada interfase sin proporcionar la forma en que esta será
implementada en su totalidad. Estas clases abstractas pueden ser utilizadas
para representar también a TADs, aunque el grado de completitud nos impedirá
utilizarlas, recuerde que no se pueden crear instancias de las clases
abstractas.
Otro ejemplo
de TAD es el TAD Conjunto, con las operaciones de intersección, unión,
diferencia y pertenencia al conjunto.
TDA
Conjunto es
Datos
Una colección de elementos
del mismo tipo. La llamaremos A
Operaciones
Constructor
Crea un nuevo conjunto, lo crea vacío.
Conjunto
Unión( Conjunto B )
Crea un nuevo
conjunto. Coloca en el conjunto a los elementos de A y de B, sin repetir
elementos.
Conjunto Intersección( Conjunto B )
Crea un nuevo
conjunto. Coloca en el conjunto a los elementos de A que pertenecen a B.
Lógico Pertenece( Tipo x )
Devuelve verdadero
si x esta en la colección.
...
FIN
Figura 2. El TAD Conjunto.
En la Definición 1
de TAD no se menciona cómo ni dónde son almacenados los datos, ni el tipo a
que estos pertenecen, sólo nos da un modelo para la manipulación que se
llevara a cabo con ellos. Un elemento importante a incluir con las operaciones
son las precondiciones que estas necesitan y las poscondiciones que generan la
ejecución de determinada operación. En una notación más formal de un TAD se
representan mediante axiomas.
Para
describir el comportamiento de un tipo de datos se necesita que las
descripciones no tengan ambigüedades ni sobre-especificaciones, y tengan un
alto nivel de completitud y precisión, como es el caso de los TADs presentados.
Una
implementación del TAD es una traducción a un lenguaje de programación de las
operaciones definidas para él, en el caso que nos ocupa escribimos una clase,
en esta se escoge una estructura de datos para la representación del TAD, por
lo que para un mismo TAD podemos tener varias implementaciones. En este curso
por ejemplo tendremos versiones del TAD Lista utilizando arreglos y listas
enlazadas.
Otro elemento a destacar en la definición de
un TAD es que esta contiene un conjunto de operaciones que es mínimo, pero que
puede no ser el único. Existen operaciones que pueden ser representadas
mediante otras y algunas que no pueden ser descompuestas, que se pueden
considerar “atómicas”.
Podemos
proporcionar una implementación del TAD Conjunto donde almacenemos los
elementos que pertenecen al conjunto en un arreglo, esta implementación utiliza
a una estructura de datos,
esta no es más que una colección de variables sobre la que se han implementado
las operaciones definidas para el TAD y que permite finalmente la
implementación de un tipo de dato (a través de una clase).
La
utilización de una estructura de datos en particular puede generar algunas
operaciones nuevas. Por ejemplo si la implementación del conjunto se realiza
utilizando un arreglo tiene sentido las operaciones Lleno y Vacío, para verificar que se pueden poner más elementos en el conjunto, pues la
cantidad de elementos en este estará determinado por tamaño del arreglo al ser
declarado o creado.
Para saber mas:
No hay comentarios.:
Publicar un comentario