Вы находитесь на странице: 1из 7

3 Tipos de Datos Abstractos

http://www.desy.de/gna/html/cc/Tutorial/Spanish/node4.html

Siguiente: 4 Conceptos de Orientacin a Objetos Arriba: Introduccin a la Programacin Orientada a Objetos Anterior: 2 Una Revisin a Subsecciones 3.1 Manejando los Problemas 3.2 Propiedades de los Tipos de Datos Abstractos Importancia del Encapsulamiento de la Estructura de los Datos 3.3 Tipos Genricos de Datos Abstractos 3.4 Notacin 3.5 Tipos de Datos Abstractos y Orientacin a Objetos 3.6 Ejercicios

Peter Mller Globewide Network Academy (GNA) pmueller@uu-gna.mit.edu

Algunos autores describen la programacin orientada a objetos como programacin de tipos de datos abstractos y sus relaciones. Dentro de esta seccin presentamos los tipos de datos abstractos como un concepto bsico de orientacin a objetos y exploramos conceptos usados en el ejemplo de la lista de la seccin anterior con ms detalle.

La primera cosa con la que uno se enfrenta cuando se escriben programas es el problema. Tpicamente, t te enfrentas a problemas "de la vida real" y te quieres facilitar la existencia por medio de un programa para dichos problemas. Sin embargo, los problemas de la vida real son nebulosos y la primera cosa que tienes que hacer es tratar de entender el problema para separar los detalles esenciales de los no esenciales : Tratas de obtener tu propia perspectiva abstracta, o modelo, del problema. Este proceso de modelado se llama abstraccin y se ilustra en la Figura 3.1.

1 de 7

31/08/2013 10:28 p.m.

3 Tipos de Datos Abstractos

http://www.desy.de/gna/html/cc/Tutorial/Spanish/node4.html

Figure 3.1: Crear un modelo de un problema por abstraccin.

El modelo define una perspectiva abstracta del problema. Esto implica que el modelo se enfoca solamente en aspectos relacionados con el problema y que t tratas de definir propiedades del problema. Estas propiedades incluyen los datos que son afectados las operaciones que son identificadas por el problema. Como ejemplo considera la administracin de empleados en una institucin. Tu superior viene y te pide que elabores un programa que permita administrar a los empleados. Bueno, sto no es muy especfico. Por ejemplo, Qu informacin de los empleados necesita la administracin ?, Qu tareas deberan ser permitidas ? Los empleados son personas caracterizadas por muchas propiedades, unas pocas son : nombre, tamao, fecha de nacimiento, forma, nmero social, nmero de cuarto, color de pelo, pasatiempos. Ciertamente que no todas estas propiedades son esenciales para resolver el problema de la administracin. Solamente algunas de ellas son especficas del problema. En consecuencia, tu creas un modelo de un empleado para el problema. Este modelo solo implica propiedades que son necesarias para cumplir con los requerimientos de la administracin, por ejemplo el nombre, fecha de nacimiento y el nmero social. A estas propiedades se les llama los datos del modelo (de empleado). Ahora ya se tienen descritas a las personas reales por medio de un empleado abstracto. Desde luego, la pura descripcin no es suficiente. Debe haber algunas operaciones definidas con las cules la administracin sea capaz de manejar los empleados abstractos. Por ejemplo, debe haber una operacin que te permita crear un empleado nuevo una vez que una persona ingrese a la institucin. Consecuentemente, tienes

2 de 7

31/08/2013 10:28 p.m.

3 Tipos de Datos Abstractos

http://www.desy.de/gna/html/cc/Tutorial/Spanish/node4.html

que identificar las operaciones que deberan ser posibles de ser ejecutadas en un empleado abstracto. Decides tambin permitir el acceso a los datos del empleado solamente por medio de operaciones asociadas. Esto te permite asegurarte que los elementos de datos siempre estn en un estado apropiado. Por ejemplo, poder checar si una fecha provista es vlida. Para resumir, la abstraccin es la estructuracin de un problema nebuloso en entidades bien definidas por medio de la definicin de sus datos y operaciones. Consecuentemente, estas entidades combinan datos y operaciones. No estn desacoplados unos de otras.

El ejemplo de la seccin anterior muestra que por medio de la abstraccin tu creas una entidad bien definida que puede ser adecuadamente manejada. Estas entidades definen la estructura de datos de un conjunto de elementos. Por ejemplo, cada empleado administrado tiene un nombre, fecha de nacimiento y nmero social. La estructura de los datos puede ser accesada solamente por medio de operaciones definidas. Este conjunto de operaciones es llamada interface y es exportada por la entidad. Una entidad con las propiedades recin descritas se conoce como un tipo de datos abstracto (TDA). La Figura 3.2 muestra un TDA que consiste en una estructura de datos abstracta y operaciones. Solamente las operaciones son visibles desde afuera y definen la interface.

Figura 3.2: Un tipo de datos abstracto (TDA).

Una vez que un nuevo empleado es "creado", la estructura de datos es llenada con los valores reales : Ahora t tienes una instancia de un empleado abstracto. T puedes crear tantas instancias de un empleado abstracto como sea necesario para describir cada una de las personas empleadas. Tratemos de poner las caractersticas de un TDA en un modo ms formal : Definicin (Tipo de Datos Abstracto) Un tipo de datos abstracto (TDA) se caracteriza por las siguientes propiedades : 1. Exporta un tipo. 2. Exporta un conjunto de operaciones. Este conjunto es llamado interface. 3. Las operaciones de la interface son el nico y exclusivo mecanismo de acceso a la estructura de

3 de 7

31/08/2013 10:28 p.m.

3 Tipos de Datos Abstractos

http://www.desy.de/gna/html/cc/Tutorial/Spanish/node4.html

datos del TDA. 4. Axiomas y precondiciones definen el mbito de aplicacin del TDA. Con la primera propiedad es posible crear ms de una instancia de un TDA como se pudo ver con el ejemplo de la administracin de empleados. Podras recordar tambin el ejemplo de la lista del captulo 2. En la primera versin hemos implementado una lista como un mdulo y solo podamos usar una lista a la vez. La segunda versin presenta un "manejador" como una referencia a un "objeto-lista". De lo que hemos aprendido ahora, el manejador en conjuncin con las operaciones definidas en un mdulo de lista, definen un TDA Lista: 1. Cuando usamos el manejador definimos la correspondiente variable para que sea del tipo Lista. 2. La interface para instancias del tipo Lista se define por medio del archivo de definicin de la interface. 3. Dado que el archivo de definicion de la interface no incluye la representacin actual del manejador, ste no puede ser modificado directamente. 4. El mbito de aplicacin est definido por el significado semntico de las operaciones provistas. Axiomas y precondiciones incluyen enunciados tales como ``Una lista vaca es una lista.'' ``Siendo l=(d1, d2, d3, ..., dN) una lista. Entonces l.append(dM) produce el siguiente resultado : l=(d1, d2, d3, ..., dN, dM).'' ``El primer elemento de una lista solamente puede ser borrado si la lista no est vaca.'' Sin embargo, todas estas propiedades son vlidas solamente debido a nuestra comprensin y disciplina al usar el mdulo de la lista. Es nuestra responsabilidad usar instancias de Lista de acuerdo a estas reglas.

El principio de esconder la estructura de los datos usada y solamente proveer una bien definida interface se conoce como encapsulamiento. Por qu es tan importante encapsular la estructura de los datos ? Para contestar a esta pregunta, considera el siguiente ejemplo matemtico donde queremos definir un TDA para nmeros complejos. Para sto, es suficiente saber que los nmeros complejos constan de dos partes: la parte real y la parte imaginaria. Ambas partes estn representadas por nmeros reales. Los nmeros complejos definen varias operaciones : suma, resta, multiplicacin o divisin por nombrar algunas. Los axiomas y precondiciones son vlidos tal y como estn definidos por la definicin matemtica de los nmeros complejos. Por ejemplo, existe un elemento neutral para la adicin. Para representar un nmero complejo es necesario definir la estructura de datos que va a ser usada por su TDA. Uno puede pensar en al menos dos posibilidades para hacer sto : Ambas partes son almacenadas en un arreglo doble, donde el primer valor indica la parte real y el segundo valor la parte imaginaria del nmero complejo. Si x detenta la parte real mientras que y la parte imaginaria, t podras pensar en accesarlos va subndices de arreglos : x=c[0] y y=c[1]. Ambas partes son almacenadas en un registro doble. Si el nombre del elemento de la parte real es r y el de la parte imaginaria es i, x y y pueden ser obtenidos con: x=c.r y y=c.i. El Punto 3 de la definicin del TDA dice que para cada acceso a la estructura de los datos debe haber una

4 de 7

31/08/2013 10:28 p.m.

3 Tipos de Datos Abstractos

http://www.desy.de/gna/html/cc/Tutorial/Spanish/node4.html

operacin definida. Los ejemplos de acceso de arriba parecen contradecir este requisito. Es sto realmente cierto ? Veamos otra vez las dos posibilidades para representar nmeros complejos. Pensemos nicamente en la parte real. En la primera versin, x es igual a c[0]. En la segunda versin, x es igual a c.r. En ambos casos x es igual a "algo". Es este "algo" el que difiere en la estructura de datos actual que se est usando. Pero en ambos casos, la operacin ejecutada "igual a" tiene el mismo significado para declarar que x es igual a la parte real del nmero complejo c: ambos casos logran la misma semntica. Si t piensas en operaciones ms complejas, el impacto de desacoplar esctructura de datos y operaciones se hace an ms evidente. Por ejemplo la suma de dos nmeros complejos requiere que ejecutes una suma para cada parte. Por consecuencia, t debes accesar el valor de cada parte, el cul es diferente para cada versin. Al proveer una operacin "suma" tu puedes encapsular estos detalles aparte de su uso actual. En el contexto de una aplicacin t simplemente "sumas dos nmeros complejos" sin importar cmo se logra en la prctica esta funcionalidad. Una vez que has creado un TDA para nmeros complejos, digamos Complex, tu puedes usarlo de la misma manera que se usan los tipos de datos conocidos tales como los enteros (integers). Resumamos sto : La separacin de las estructuras de los datos y las operaciones por una parte y la restriccin de solamente accesar la estructura de los datos va una bien definida interface por la otra, te permite escoger estructuras de datos apropiadas para el ambiente de la aplicacin.

Los TDAs se usan para definir un nuevo tipo a partir del cul se pueden crear instancias. Como se mostr en el ejemplo de la lista, algunas veces estas instancias deberan operar del mismo modo sobre otros tipos de datos. Por ejemplo, uno puede pensar en listas de manzanas, carros o an listas. La definicin semntica de una lista siempre es la misma. Solamente el tipo de los elementos de datos cambia de acuerdo al tipo sobre el cul deba operar la lista.. Esta informacin adicional podra ser especificada por un parmetro genrico que es especificado al momento de la creacin de la instancia. As, una instancia de un TDA genrico es en la prctica una instancia de una variante particular del TDA. Una lista de manzanas puede ser por lo tanto declarada como sigue :
List<Apple> listOfApples;

Los corchetes angulares encierran ahora el tipo de datos para el cul una variante del TDA genrico List sera creada. listOfApples ofrece la misma interface que cualquiera otra lista, pero opera en instancias del tipo Apple.

Debido a que los TDAs proveen una perspectiva abstracta para describir propiedades de conjuntos de entidades, su uso es independiente de un lenguaje de programacin en particular. Presentamos aqu por lo tanto una notacin que es adoptada de [3]. Toda descripcin de un TDA consiste en dos partes : Datos: Esta parte describe la estructua de los datos usada en el TDA de una manera informal. Operaciones: Esta parte describe las operaciones vlidas para este TDA, por lo tanto, describe su interface. Usamos la operacin especial constructor para describir las acciones que se van a ejecutar
5 de 7

31/08/2013 10:28 p.m.

3 Tipos de Datos Abstractos

http://www.desy.de/gna/html/cc/Tutorial/Spanish/node4.html

una vez que una entidad de este TDA es creada y destructor para describir las acciones que se van a efectuar cuando una entidad es destruda. Son dados para cada operacin, los argumentos provistos as como precondiciones y postcondiciones. Se presenta como ejemplo la descripcin del TDA Integer. Sea k una expresin integer: TDA Integer es Datos Una secuencia de dgitos que opcionalmente presentan como prefijo un signo ms o un signo menos. Nos referimos a este nmero entero con signo como N. Operaciones constructor Crea un nuevo integer. add(k) Crea un nuevo integer, suma de N y k. Por consecuencia, la postcondicin de esta operacin es sum = N+k. No confundir sto con los enunciados de asignacin tal como se usan en los lenguajes de programacin ! Es ms bien una ecuacin matemtica que da "verdadero" por cada valor sum, N y k despus que add ha sido ejecutada. sub(k) Similar a add, esta operacin crea un nuevo integer de la diferencia de ambos valores integer. Por lo tanto la postcondicin para esta operacin es sum = N-k. set(k) Pone a N lo que vale k. La postcondicin para esta operacin es N = k. ... end La descripcin de arriba es una especificacin para el TDA Integer. Ntese por favor, que usamos palabras para nombres de operaciones tales como "add". Podramos haber usado el signo "+", que es ms intuitivo, pero sto podra llevar a alguna confusin : T debes distinguir la operacin "+" de el uso matemtico de "+" en la postcondicin. El nombre de la operacin es solamente sintaxis ah donde la semntica se describe por las pre- y postcondiciones asociadas. Sin embargo, siempre constituye una buena idea el combinar ambos para hacer que la lectura de las especificaciones del TDA sea ms fcil. Los lenguajes de programacin reales son libres de escoger una implementacin arbitraria para un TDA. Por ejemplo, podran implementar la operacin add con el operador infijo "+" que condujera a una lectura ms intuitiva para la suma de enteros.

Los TDAs permiten la creacin de instancias con propiedades bien definidas y comportamiento bien definido. En orientacin a objetos, nos referimos a los TDAs como clases. Por lo tanto, una clase define las propiedades de objetos instancia en un ambiente orientado a objetos.

6 de 7

31/08/2013 10:28 p.m.

3 Tipos de Datos Abstractos

http://www.desy.de/gna/html/cc/Tutorial/Spanish/node4.html

Los TDAs definen la funcionalidad al poner especial nfasis en los datos involucrados, su estructura, operaciones, as como en axiomas y precondiciones. Consecuentemente, la programacin orientada a objetos es "programacin con TDAs" : al combinar la funcionalidad de distintos TDAs para resolver un problema. Por lo tanto, instancias (objetos) de TDAs (clases) son creados dinmicamente, usados y destrudos.

1. TDA Integer . (a) Por qu no hay precondiciones para las operaciones add y sub? (b) Obviamente, la descripcin TDA de Integer est incompleta. Agrega los mtodos mul, div y otros cualesquiera. Describe sus impactos especificando pre- y postcondiciones. 2. Disea un TDA Fraction que describa propiedades de las fracciones. (a) Qu estructuras de datos se pueden usar? Cules son sus elementos? (b) Cul es el aspecto de la interface? (c) Menciona unos cuantos axiomas y precondiciones. 3. Describe con tus propias palabras las propiedades de tipos de datos abstractos. 4. Por qu es necesario incluir axiomas y precondiciones a la definicin de un tipo de datos abstracto? 5. Describe con tus propias palabras la relacin entre instancia y tipo de datos abstracto, tipo genrico de datos abstracto y su correspondiente tipo de datos abstracto, instancias de un tipo genrico de datos abstracto.

Siguiente: 4 Conceptos de Orientacin a Objetos Arriba: Introduccin a la Programacin Orientada a Objetos Anterior : 2 Una Revisin a P. Mueller 8/31/1997

7 de 7

31/08/2013 10:28 p.m.

Вам также может понравиться