Está en la página 1de 15

Abstracción de Datos

Capítulo 1: Abstracción de Datos


OBJETIVOS
 Entender en qué consiste el proceso de abstracción.
 Describir la técnica de la abstracción de datos para el diseño de estructuras
de datos.
 Comprender qué es una estructura de datos.
 Entender el diseño de una estructura de datos a través de una
especificación lógica.
 Ubicar los niveles de abstracción al programar.
 Identificar los beneficios de utilizar la abstracción de datos como estrategia
de trabajo en el desarrollo de software.
Página 2  |  Inicio del artículo
¿QUÉ ES UNA ABSTRACCIÓN?
En términos simples, una abstracción es un proceso mental, mediante el cual se
extraen los rasgos esenciales de algo para representarlos por medio de un
lenguaje gráfico o escrito. Puesto que es un proceso mental, la abstracción es una
acción subjetiva y creativa, esto es, depende del contexto psicológico de la
persona que la realiza.

Por ejemplo, se dice que algunas de las pinturas de Picasso son abstractas, no
porque sean difíciles de entender, sino porque a través de ciertos trazos simples, y
de acuerdo con su criterio mental, el pintor plasmó los rasgos esenciales de ese
algo real que trataba de representar por medio de un lenguaje gráfico.

En la vida cotidiana, continuamente se hacen abstracciones, por ejemplo cuando


describimos a una persona: “Reconocerán al profesor Garay por su enorme nariz,
su barba y sus anteojos; además, es muy alto, y tiene un carácter muy amigable”.
Cuando hacemos un mapa para describir cómo se llega al rancho donde será el
día de campo, extraemos los rasgos importantes del camino: “Al llegar al cruce
donde está una piedra gigantesca, das vuelta a la derecha y verás un árbol lleno
de flores rojas; ahí encontrarás la entrada al rancho.”

¿POR QUÉ ES IMPORTANTE LA ABSTRACCIÓN?


Aunque la gente realiza cotidianamente el proceso de abstracción, debe
convertirse en una habilidad para quien estudie una carrera relacionada con la
computación. La capacidad de modelar una realidad por medio de herramientas

computacionales requiere necesariamente de hacer continuas abstracciones, por


lo que es vital conocer metodologías que desarrollen esta habilidad.

¿QUÉ ES LA ABSTRACCIÓN DE DATOS?


La abstracción de datos es una técnica o metodología que
permite diseñar estructuras de datos. Consiste, básicamente, en representar bajo
ciertos lincamientos de formato las características esenciales de una estructura de
datos. Este proceso de diseño se olvida de los detalles específicos de
implementación de los datos razón por la cual se trata de una abstracción.

Página 3  |  Inicio del artículo


¿QUÉ ES UNA ESTRUCTURA DE DATOS?
Cualquier colección o grupo de datos organizados de tal forma que tengan
asociados un conjunto de operaciones para poder manipularlos, se dice que
conforma una estructura de datos.

Por ejemplo, cualquier lenguaje de alto nivel provee típicamente de tipos de datos
estructurados o estructuras de datos predefinidas, como los arreglos o los
registros. Un arreglo es un conjunto de datos, todos del mismo tipo, con una
organización lineal y con métodos claros de acceso a través de sus subíndices.
Las operaciones tradicionales sobre los arreglos incluyen la comparación, la
asignación, la escritura, etc. En un nivel más bajo, podría verse a los números
enteros como estructuras de datos: se componen de un grupo de dígitos y tienen
asociadas operaciones como sumar, restar y multiplicar, entre otras.

¿QUÉ ES UN TIPO DE DATO ABSTRACTO (TDA)?


La técnica de la abstracción de datos establece que al diseñar una nueva
estructura de datos, ésta pasa a ser un Tipo de Dato Abstracto (TDA), que podrá
implementarse en cualquier lenguaje y aplicarse en cualquier concepto.

Por lo tanto, al usar la metodología de la abstracción de datos se diseñarán TDA,


siguiendo los lincamientos para hacer una especificación lógica o abstracta del
mismo TDA.

¿EN QUÉ CONSISTE LA ESPECIFICACIÓN LÓGICA DE UN


TDA?
La especificación lógica de un TDA es un documento en el que se plasma la
abstracción realizada al diseñar una estructura de datos. Dicho documento pasará
a ser el mapa o plano mediante el cual se construirá (implementará) la estructura
de datos y en el que se definirán claramente las reglas en las que podrá usarse
(aplicarse) el TDA.

Aunque existe una fundamentación matemática para esta técnica, no es el objetivo


de este libro profundizar en ella, por lo que se utilizará el lenguaje natural para
describir la especificación de un TDA.

El documento de la especificación lógica de un TDA consiste de los siguientes


cuatro puntos:

Página 4  |  Inicio del artículo


1. Elementos que conformarán la estructura de datos.
En este punto se describe el tipo de los datos individuales que guardará la
estructura. Por ejemplo, números enteros, caracteres, fechas, registros con los
datos de un empleado, etcétera.
2. Tipo de organización en que se guardarán los elementos.
Existen solamente cuatro tipos de organización para los datos en la estructura, la
cual deberá tener alguna de las siguientes organizaciones:
o Lineal: Si hay una relación de uno a uno entre los elementos.
o Jerárquica: Si hay una relación de uno a muchos entre los
elementos.
o Red: Si hay una relación de muchos a muchos entre los elementos.
o Sin relación: Si no hay relaciones entre los elementos.
Las relaciones entre los elementos se dan, por ejemplo, cuando existe algún
motivo para que un elemento esté antes o después que otro (figura 1.1).
o

1. Figura 1.1, Tipos de estructuras u organizaciones de datos.


2. Dominio de la estructura.
Este punto es opcional, y en él se describirá la capacidad de la estructura en
cuanto al rango posible de datos por guardar.
3. Descripción de las operaciones de la estructura.
Cada operación relacionada con la estructura debe describirse con los siguientes
puntos:
o Nombre de la operación.
o Descripción breve de su utilidad.
o Datos de entrada a la operación.Página 5  |  Inicio del artículo
o Datos que genera como salida la operación.
o Precondicion: Condición que deberá cumplirse antes de utilizar la
operación para que se realice sin problemas.
o Postcondición Condición en que queda el TDA después de ejecutar
la operación.
EJEMPLO
ESPECIFICACIÓN LÓGICA DEL TIPO DE DATO ABSTRACTO (TDA) CADENA

Elementos: todos los caracteres alfabéticos (letras mayúsculas y minúsculas),


caracteres numéricos y caracteres especiales.

Estructura: hay una relación lineal entre los caracteres.

Dominio: existen entre 0 y 80 caracteres en cada valor del TDA CADENA. El


dominio serán todas aquellas secuencias de caracteres que cumplan con las
reglas.

OPERACIONES

BORRAINICIO

UTILIDAD: Sirve para eliminar el primer carácter de una cadena.

ENTRADA: Cadena S sobre la que se desea eliminar el primer carácter.

SALIDA: El carácter más a la izquierda de la cadena S y la cadena S modificada.

PRECONDICION: La cantidad de caracteres es mayor que cero.

POSTCONDICIÓN
: La cadena S tiene todos los caracteres, menos el primero.

AGREGAFINAL
OPERACIONES

BORRAINICIO

UTILIDAD: Sirve para agregar un carácter al final de una cadena.

ENTRADA: Cadena S y el carácter L, que se añadirá a la cadena S.

SALIDA: Cadena S modificada.

PRECONDICION: La cantidad de caracteres en S es menor que 80.

POSTCONDICIÓN
: La cadena S tiene el carácter L que queda al extremo derecho de la cadena.

VACÍA

UTILIDAD: Sirve para verificar si una cadena está vacía o no.

ENTRADA: Cadena S que se verificará.

SALIDA: VERDADERO si la cadena S no tiene caracteres, FALSO en caso contrario.

PRECONDICIÓN: Ninguna

POSTCONDICIÓN
: Ninguna (pues la cadena S no se modifica).

LLENA

UTILIDAD: Sirve para verificar si una cadena está llena o no.

ENTRADA: cadena S que será verificada.

SALIDA: VERDADERO si la cadena S contiene ya 80 caracteres, FALSO en caso contrario.

PRECONDICIÓN: Ninguna

POSTCONDICIÓN
: Ninguna (pues la cadena S no se modifica).

INVIERTE

UTILIDAD: Sirve para invertir el orden de los caracteres en una cadena.


OPERACIONES

BORRAINICIO

ENTRADA: Cadena S a la que se desea invertir el orden de los caracteres.

SALIDA: Cadena S modificada.

PRECONDICIÓN: Ninguna

La secuencia de caracteres en la cadena S se invierte, de forma que el primer


POSTCONDICIÓN carácter toma el lugar del último, el segundo el del penúltimo y así
: sucesivamente.
Definir claramente la especificación lógica del TDA facilita posteriormente la
construcción y aplicación de la estructura de datos.

¿CUÁLES SON LOS NIVELES DE ABSTRACCIÓN DE


DATOS?
Al aplicar la abstracción de datos se pueden definir tres niveles de trabajo:

1. El nivel lógico o abstracto, que correspondería a la especificación lógica


del TDA que se describió anteriormente. En este nivel se define abstractamente la
estructura de datos y las operaciones relacionadas con ella. La descripción que se
obtenga en este nivel debe serPágina 7  |  Inicio del artículoindependiente del
lenguaje de programación en el que se implementará o usará la estructura.
2. El nivel físico o de implementación. En este nivel se decide el lenguaje
de programación en que se implementará la estructura, qué tipos de datos ya
definidos servirán para representarla y, finalmente, bajo estas consideraciones, se
implementa como un módulo a cada una de las operaciones del TDA. Este nivel
toma el diseño que se ha realizado a nivel lógico y, siguiendo al pie de la letra las
especificaciones de cada operación, construye la estructura que posteriormente se
usará en el nivel aplicación.
3. En el nivel aplicación o de uso el programador usará el TDA para resolver
determinada aplicación. El uso del TDA se limita a llamar las operaciones sobre la
estructura que se requiera cuidando siempre de cumplir con las reglas de cada
operación especificadas en el nivel lógico.
¿QUÉ ES LA INDEPENDENCIA DE DATOS Y EL
OCULTAMIENTO DE INFORMACIÓN?
De lo descrito en la sección anterior se observa que hay una independencia bien
marcada entre el nivel físico y el nivel de aplicación del TDA, con el nivel lógico
como intermediario (figura 1.2). Esto significa que quien implementa el
TDA no debe estar influenciado por la aplicación que tendrá la estructura y quien
use la estructura no tiene porqué saber cómo se implementaron sus operaciones.

Entonces, se dice que la forma en que se almacenan los datos en la estructura es


independiente de su aplicación y que para el usuario programador permanece
oculto cómo se implementaron las operaciones del TDA. Esto, sin lugar a dudas,
simplifica la labor del usuario del TDA, pues se olvida de detalles de programación
al basar su trabajo sólo del diseño lógico del propio TDA. Adicionalmente, el
implementador del TDA, podrá hacer cambios o mejoras a su implementación,
respetando la especificación lógica y sin afectar en lo más mínimo las aplicaciones
desarrolladas.

Página 8  |  Inicio del artículo


¿CÓMO DISTINGUIR LOS NIVELES DE ABSTRACCIÓN?
Una analogía podría hacerse al comparar este proceso con el que se realiza al
construir una casa (figura 1.2). Primero se trabaja en el nivel lógico al pedirle a un
arquitecto que diseñe el plano; el arquitecto hace una abstracción y plasma en el
papel los rasgos principales de la casa por construir. Además, especifica
claramente medidas y condiciones de construcción y de uso. Una vez aprobado el
diseño, se procede en el nivel físico, que correspondería a la construcción. Los
albañiles seguirán paso a paso las especificaciones dadas en el plano (diseño en
nivel lógico) y no tienen por que preguntar para qué se utilizará cada uno de los
espacios construidos. Además, utilizarán el material más apropiado para cada
situación. Una vez que la construcción esté terminada, llegará su dueño para
habitarla dándole el uso correspondiente a cada espacio (nivel aplicación) El
dueño al utilizar la casa no necesita saber cómo se hizo, con qué materiales o
quiénes la construyeron- sin embargo, le será útil conocer algunas medidas o
condiciones de construcción que se representan en el plano (nivel lógico)
Figura 1.2 Relación entre los niveles de abstracción.

De la misma forma, cuando se desea aplicar la abstracción de datos en el


desarrollo de software que requiere de una estructura de datos, se debe comenzar
con el diseño a nivel lógico del TDA, continuar con su implementación y finalmente
con su uso en el desarrollo de la aplicación correspondiente. En este proceso
podrán intervenir tres personas: el diseñador del TDA, un programador a nivel
físico y un programador a nivel aplicación. Cuando el mismo programador trabaje
en los niveles

Página 9  |  Inicio del artículo

físico y de aplicación, debe tener en cuenta la regla de no invadir los niveles,


respetando el nivel lógico que es intermediario.

¿QUÉ VENTAJAS OFRECE UTILIZAR LA TÉCNICA DE


ABSTRACCIÓN DE DATOS?
Seguir la regla de los tres niveles de abstracción redunda en un mejor desarrollo
de software. La técnica obliga a diseñar modularmente y, como consecuencia, se
tiene una implementación más clara, documentada y es fácil darle mantenimiento.
Adicionalmente, gracias a la independencia de datos y al ocultamiento de
información, se pueden crear paquetes como unidades de software reutilizable,
con lo que se obtienen estructuras de datos genéricas.

Quien utiliza un TDA se limita a llamar las operaciones, cuidando solamente de


cumplir con las especificaciones del diseño lógico, loque facilita y hace más rápido
el desarrollo de aplicaciones, pues no esnecesario manejar los detalles físicos de
la estructura.
La abstracción de datos es uno de los principios que fundamentan la
programación orientada a objetos, y se describirá en el siguiente capítulo.

EJEMPLO
En cierta aplicación científica se requiere calcular el factorial de unnúmero entero
positivo. La función factorial aplicada sobre un número es la multiplicación de
todos los números, desde el 1 hasta el valor del número correspondiente ( n! = 1 *
2 * 3 *… * (n-1) * n ).

Solución obvia en C+ +:
           int factorial = 1;
           for(intj = n;j>0;j--)
              factorial = factorial* j;

Sin embargo, es importante notar que:

 El factorial de un número crece en forma exponencial:


1! = I, 2! = 2, 3! = 6. 4! = 24, 5! = 120, 6! = 720, 7! = 5040, 8! = 40320 …
Página 10  |  Inicio del artículo
 La capacidad de los tipos de dato enteros en C++ está limitada.

El tipo unsigned long, en cuatro bytes, soporta como valor máximo 4,294,967,295
lo cual permitiría obtener sólo hasta el factorial de 12.

Por lo tanto, se requiere de un tipo de dato con una capacidad para almacenar a
cualquier número entero, sin importar qué tan grande sea; ya que C++ no provee
de un tipo estándar para este caso, se puede disenar un TDA para utilizar
números enteros grandes, el cual a su vez será una estructura de datos.

Diseño del TDA numeróte (nivel lógico)

ESPECIFICACIÓN LÓGICA:

 Elementos: un numeróte se compone de dígitos.


 Tipo de organización: los dígitos se organizan de manera lineal.
 Dominio: se pretende que un numeróte pueda contener cualquier cantidad
de dígitos bajo cualquier combinación. Sin embargo, se puede limitar a una
capacidad máxima de mil dígitos.
 Operaciones: las mismas que posee el tipo de dato entero.

OPERACIONES

SUMA

UTILIDAD: sirve para sumar dos numerotes.

ENTRADAS: dos numerotes

SALIDAS: un numeróte que guarda la suma de los dos numerotes de entrada.

PRECONDICIÓN: Ninguna

El numeróte de salida contiene la suma aritmética de los dos numerotes de


POSTCONDICIÓN: entrada.

DESPLIEGA

UTILIDAD: Sirve para desplegar en pantalla un numeróte.

ENTRADAS: Numeróte a desplegar.

SALIDAS: Ninguna (observa en pantalla)

PRECONDICIÓN: Ninguna

POSTCONDICIÓN:
V Ninguna
Con base en este diseño lógico, se puede pasar a la implementación del TDA
(nivel físico) para posteriormente utilizarlo (nivel de aplicación) y resolver el
problema factorial eficientemente.

Este ejemplo será retomado en el siguiente capítulo para analizar los niveles físico
y de aplicación.

CONCLUSIONES
En la evolución del desarrollo de software, se han descubierto una gran cantidad
de estructuras de datos, con propósitos firmes y claros, que no pierden actualidad
y forman parte de las bases para cualquier futuro desarrollador de software. El
propósito de este material, es mostrar cada una de estas estructuras en sus tres
niveles de abstracción, por lo que los capítulos posteriores, se vuelven el mejor
ejemplo de las ideas mostradas en este capítulo. Deben ser de especial interés los
capítulos de strings, pilas y filas.

Sin embargo, la metodología aquí presentada puede ser utilizada para el diseño
de nuevas estructuras de acuerdo con las necesidades de aplicaciones y
ajustando el punto de referencia de los niveles de abstracción. Además, la
comprensión de estas ideas facilitará el entendimiento de la filosofía de la
programación orientada a objetos.

EJERCICIOS
1. Defina los siguientes conceptos:
o Abstracción
o Abstracción de datos
o Especificación lógica
o Nivel de abstracción
o Independencia de niveles
o Precondición
o Postcondición
o Módulo
o Abstracción modularPágina 12  |  Inicio del artículo
2. Describa situaciones de la vida cotidiana en las que se realicen
abstracciones.
3. Recuerde cómo comprendió el concepto de una matriz (arreglo bi-
dimensional) en un lenguaje de programación. Si se considera la matriz como un
TDA, defina su especificación lógica y comente las características de su nivel
físico y algunas de sus posibles aplicaciones.
4. Explique cómo es que un registro en Pascal (o struct en C), cumple con las
características de una estructura de datos.
5. El tipo de dato string, puede verse como un tipo de dato abstracto (TDA),
para el cual pudiéramos diseñar su especificación lógica. Sin embargo, el propio
lenguaje C o C++, provee este tipo de dato a través de las bibliotecas string.h y/o
cstring.h.
o ¿Cuál es la principal diferencia entre el manejo de los strings como
objetos y el manejo de los strings como arreglos? Explique
brevemente las diferencias e indique en qué nivel de abstracción se
encuentran esas diferencias. Justifique su respuesta.
o Las siguientes tres operaciones típicas se pueden realizar sobre un
TDA string:

Copiar un string en otro (o asignar un string a otro).


Concatenar o unir dos strings.
Comparar dos strings verificando si son iguales o diferentes.
 Describa cada operación bajo el formato de la especificación
lógica de una operación, según el funcionamiento de las funciones predefinidas
que provee el lenguaje para los strings como arreglos. Indique, además, el nombre
de la función.
 Analice si las funciones predefinidas en el lenguaje,
correspondientes a estas operaciones para los strings como objetos, tienen alguna
diferencia con respecto a la especificación lógica que obtuvo en el punto anterior.
En caso de que haya alguna diferencia, explíquela indicando claramente en qué
operación y cuál es el cambio en la especificación lógica. Indique, además, cuál es
el nombre de la función (método).
o A continuación se muestran tres secciones de código en lenguaje C+
+, que al ejecutarse realizan exactamente la misma
función:Página 13  |  Inicio del artículo

1.
1.
 Identifique cuál es la función que se está realizando con estos
códigos.
 Clasifique los códigos de mayor a menor abstracción.
 Identifique en qué nivel de abstracción se está trabajando en
cada uno de los códigos.
2. Diseñe las operaciones aritméticas y relaciónales para el TDA numeróte
descrito en este capítulo.
AUTOEVALUACIÓN
Conteste: verdadero o falso

1. La abstracción de datos es una metodología para diseñar sistemas


computacionales.__________
2. La especificación lógica de un TDA determina qué tipo de herramientas de
un lenguaje computacional se utilizarán para implementar el TDA.__________
3. Si una operación de un TDA no tiene precondiciones, significa que quien
use la operación en el nivel de aplicación no tendrá que preocuparse por hacer
validaciones especiales, antes de llamar a la operación, para que ésta funcione
correctamente.__________Página 14  |  Inicio del artículo
4. La postcondición en la definición lógica de una operación de un TDA, le
dará información a quien la implementa en el nivel físico de lo que debe
codificar.__________
5. La implementación de un TDA puede modificarse sin afectar los programas
de aplicación que ya se hayan implementado.__________
Texto completo: COPYRIGHT 2002 Cengage Learning Editores, S.A. de C.V.

También podría gustarte