(abstracción de datos v1)

11
PROGRAMACIÓN - ABSTRACCIÓN Preparado por Guillermo Módica 1/11 Abstracción de datos _ Qué es abstracción Se puede definir abstracción como “... una idea general que se concentra en las cualidades esenciales de algo, en lugar de sus realizaciones en casos concretos”. En informática, podría explicarse la abstracción señalando la diferencia entre fechas y números. Las fechas son ejemplos discretos en el tiempo que se pueden comparar, confrontar en años bisiestos o manipular de diversas formas. Implementadas en un ordenador, se convierten en números pero muchas operaciones con estos números no tienen ningún significado (raíz cuadrada, producto, etc.). Las posibles operaciones que se pueden realizar dependen de la abstracción y no de la forma elegida para su representación. El trabajo de las personas se reduce en dos sentidos cuando se concentran en las cualidades reales de los objetos que manejan, a saber: 1. Se puede pensar y trabajar con la terminología familiar del objeto en lugar de hacerlo con la jerga de una implementación concreta. Por ejemplo, manejando fechas, es más sencillo poder preguntar ¿Cae tal fecha en año bisiesto? que ¿ es el año correspondiente a tal fecha divisible por 4.... etc.? 2. No hay que preocuparse por los detalles reales de la implementación Esto redunda en reducción de la complejidad y de lo que debe conocerse en cada etapa de la resolución de un problema. . _ Abstracción de un programa Ya en los albores de la construcción de Software, se utilizaban subrutinas como mecanismos de abstracción. La subrutina separa Lo abstracto : qué hay que hacer de Lo concreto : cómo se consigue El usuario de la subrutina (funciones o procedimientos en los lenguajes procedurales) no necesita conocer (o recordar) cómo ella resuelve el problema sino cuál es la reacción de la misma a los diferentes estímulos para los que fue creada. Esto es, existe ocultación de información: los detalles que se especifican en ella están ocultos a los restantes componentes del programa. ¿Es esto deseable? ¿No deben los programadores conocer todo el programa? No, necesariamente. Ésta es una situación en la que una cierta dosis de ignorancia es buena: la ocultación de la información previene al programador de ser dependiente de los detalles de la subrutina (lo que puede distraer su atención) y no concentrarse en la solución en el nivel correspondiente. A su vez, al diseñar la subrutina, el programador se concentra en los detalles específicos de ella, aislándose de los diversos entornos desde donde puede ser invocada. Los conceptos de abstracción y de ocultación de la información son principios fundamentales en la ingeniería en software.

Upload: jonathan-wilson

Post on 17-Dec-2015

214 views

Category:

Documents


0 download

DESCRIPTION

abstraccion de datos

TRANSCRIPT

  • PROGRAMACIN - ABSTRACCIN

    Preparado por Guillermo Mdica 1/11

    Abstraccin de datos

    _ Qu es abstraccin

    Se puede definir abstraccin como ... una idea general que se concentra en las cualidades esenciales de algo, en lugar de sus realizaciones en casos concretos.

    En informtica, podra explicarse la abstraccin sealando la diferencia entre fechas y nmeros. Las fechas son ejemplos discretos en el tiempo que se pueden comparar, confrontar en aos bisiestos o manipular de diversas formas. Implementadas en un ordenador, se convierten en nmeros pero muchas operaciones con estos nmeros no tienen ningn significado (raz cuadrada, producto, etc.).

    Las posibles operaciones que se pueden realizar dependen de la abstraccin y no de la forma elegida para su representacin.

    El trabajo de las personas se reduce en dos sentidos cuando se concentran en las cualidades reales de los objetos que manejan, a saber:

    1. Se puede pensar y trabajar con la terminologa familiar del objeto en lugar de hacerlo con la jerga de una implementacin concreta. Por ejemplo, manejando fechas, es ms sencillo poder preguntar Cae tal fecha en ao bisiesto? que es el ao correspondiente a tal fecha divisible por 4.... etc.?

    2. No hay que preocuparse por los detalles reales de la implementacin

    Esto redunda en reduccin de la complejidad y de lo que debe conocerse en cada etapa de la resolucin de un problema.

    .

    _ Abstraccin de un programa

    Ya en los albores de la construccin de Software, se utilizaban subrutinas como mecanismos de abstraccin.

    La subrutina separa Lo abstracto : qu hay que hacer

    de Lo concreto : cmo se consigue

    El usuario de la subrutina (funciones o procedimientos en los lenguajes procedurales) no necesita conocer (o recordar) cmo ella resuelve el problema sino cul es la reaccin de la misma a los diferentes estmulos para los que fue creada. Esto es, existe ocultacin de informacin: los detalles que se especifican en ella estn ocultos a los restantes componentes del programa. Es esto deseable? No deben los programadores conocer todo el programa? No, necesariamente. sta es una situacin en la que una cierta dosis de ignorancia es buena: la ocultacin de la informacin previene al programador de ser dependiente de los detalles de la subrutina (lo que puede distraer su atencin) y no concentrarse en la solucin en el nivel correspondiente.

    A su vez, al disear la subrutina, el programador se concentra en los detalles especficos de ella, aislndose de los diversos entornos desde donde puede ser invocada.

    Los conceptos de abstraccin y de ocultacin de la informacin son principios fundamentales en la ingeniera en software.

  • PROGRAMACIN - ABSTRACCIN

    Preparado por Guillermo Mdica 2/11

    _ Abstraccin de Datos

    Naturalmente la gente se siente ms tranquila y segura con las cosas que percibe como reales que con las cosas que piensa como abstractas. Por lo tanto, la abstraccin de datos parece ms inaccesible que una entidad ms concreta como entero. Sin embargo, aproximmonos ms a ese entero que estamos usando desde que comenzamos a programar.

    Los enteros se presentan fsicamente de forma muy diferente sobre diferentes computadoras. En la memoria de una mquina, un entero puede ser un decimal codificado binario; en otras, puede ser un binario con magnitud y signo; en otras, puede representarse en notacin de complemento a 1 complemento a 2. En muchos casos, no sabemos cmo estn representados ni en qu consiste dicha representacin; sin embargo, nos basta con conocer la idea abstracta de un entero y cules son las operaciones que podemos realizar con ellos.

    Ahora bien: las diferentes representaciones (implementaciones) de un entero marcan diferencias en su manipulacin bsica, realizada por un ordenador? Por supuesto que s. Los mecanismos realizados por la unidad aritmtico lgica son muy distintos. Ms complicada an es la implementacin de nmeros reales que suele hacerse en punto flotante.

    No todos los programadores o estudiantes de programacin conocen o recuerdan la estructura en que se representa un nmero real y mucho menos cmo se resuelven las operaciones con dichos tipos de datos.

    Sin embargo, el programador ms novato puede usar enteros y reales sin inconvenientes dado que el lenguaje de programacin que usa se ha encargado de proveer la estructura de representacin y el cdigo necesario para su manipulacin, ocultando dichos detalles; lo nico que necesita saber el programador es el concepto de entero y las operaciones que el lenguaje le permite realizar con ellos: asignacin, suma, resta, multiplicacin, etc.

    La ocultacin de datos, es decir, de la forma como se representan, se conoce usualmente con el nombre de Encapsulamiento de datos: la separacin de la representacin de los datos de las aplicaciones que los utilizan a nivel lgico.

    Pero, si el dato est encapsulado (no lo vemos) Cmo podemos manipularlo? Las operaciones definidas son las que nos permiten acceder al dato ( usarlo, modificarlo, etc.).

    Los enteros y los reales son en muchos lenguajes en programacin TIPOS DE DATOS; un tipo de dato define no slo la naturaleza de la informacin que es capaz de representar sino tambin la estructura de representacin, el rango de valores posibles de representar y las operaciones que pueden realizarse con ellos. Tanto estas ltimas como el rango de representacin son propios de cada lenguaje y arquitectura de hardware donde se implementan.

  • PROGRAMACIN - ABSTRACCIN

    Preparado por Guillermo Mdica 3/11

    TIPOS DE DATOS ABSTRACTOS

    Llamamos tipos de datos abstractos a la representacin lgica de una estructura de datos junto con las operaciones de acceso y manipulacin de los mismos. Un TDA es, fundamentalmente, una coleccin de valores y un conjunto de operaciones con esos valores.

    Al definir un TDA, no nos importa la eficiencia de tiempo o espacio. Estos son aspectos de la implementacin que se tendrn en cuenta al implantarlo en una pieza especfica de hardware o software. S es muy importante la especificacin del TDA, a la que llamaremos interface, que define qu informacin contiene (conceptualmente), cules son las operaciones (funciones) de acceso y cmo se utilizan, tanto para quien debe realizar la implantacin como para los programadores que necesiten utilizar correctamente el TDA. La especificacin debe ser lo suficientemente precisa para permitir tanto al implementador la construccin del TDA sin necesidad de conocer su utilizacin en las aplicaciones como a los programadores su utilizacin sin conocer los detalles de la implementacin. La especificacin de un TDA, consiste en la descripcin de cada una de las operaciones en trminos de:

    Nombre de la operacin. Entradas: Parmetros de entrada: datos de la operacin. Precondiciones: requisitos que deben cumplir las entradas para que pueda realizarse la

    operacin. Salidas: Parmetros de Salida: resultados. Poscondiciones: Descripcin concisa del procedimiento de obtencin de las salidas en funcin

    de las entradas.

    Veamos un ejemplo: tipo de dato abstracto FECHA. Definamos el rango de representacin entre el 1 / 1 / 1601 y 31 / 12 / 9999 (bastante arbitrario pero probablemente ms que suficiente para representar las fechas que habitualmente necesitaremos manejar)

    Especificacin del tipo Fecha

    Operaciones (slo algunas)

    La representacin de una fecha puede efectuarse de varias formas: 1. Representar separadamente da, mes, ao con sendos enteros. 2. Usar un entero para el ao y otro para el da (da relativo dentro del ao). 3. Un entero que representa el da relativo a una cierta fecha (esto lo usan las planillas de

    clculo, por ejemplo) 4. Da y ao como enteros y mes como cadena de caracteres. 5. Etc.

    Independientemente de la representacin elegida, la forma ms natural con que expresamos una fecha es en trminos de da, mes y ao como nmeros. Luego parece natural que al obtener o fabricar una fecha se parta de 3 enteros por lo que podramos pensar en la operacin Construir_fecha especificndola como sigue:

  • PROGRAMACIN - ABSTRACCIN

    Preparado por Guillermo Mdica 4/11

    construir_fecha (d, m, a, fecha, fecha_valida) Funcin : Construir una fecha a partir de da, mes y ao, verificando la validez

    Entrada : da, mes, ao: enteros Precondiciones : ninguna Salida : fecha: Fecha ;

    fecha_vlida: booleano. Poscondiciones : Si los datos son vlidos, fecha_vlida = verdadero y Fecha

    correspondiente a : d como da, m como mes y a como ao. Si no, fecha_vlida = falso

    sumar_ das_a_fecha ( fecha, n) Funcin: calcula la fecha resultante de agregar n das a fecha

    Entrada: fecha, n Precondiciones: fecha es vlida; n >= 0 Salida: fecha Poscondicin: fecha = fecha original incrementada en n das

    dias_entre_fechas ( fecha_1, fecha_2)

    Funcin: calcula la cantidad de das que hay entre 2 fechas.

    Entrada: fecha_1, fecha_2 Precondiciones: Fecha_1 y Fecha_2 son vlidas. Salida: cant_dias (Cantidad de das de diferencia) Poscondiciones: Si fecha_1 es posterior a fecha_2 , cant_dias>0;

    Si fecha_1 es anterior a fecha 2, cant_dias < 0; Si fecha 1 = fecha 2, cant_dias = 0;

    Existen operaciones, que podramos llamar utilitarias, que no reciben ni generan el TDA en cuestin pero tienen relacin directa con el mismo. Un ejemplo para nuestro TDA es una funcin que determine la validez de una terna de enteros como correspondientes a da, mes y ao de una determinada fecha.

    fecha_vlida ( fecha) Funcin: verifica la validez de d, m, y a (componentes de fecha) como da, mes y ao, respectivamente.

    Entrada: tres enteros (d, m, a) Precondicin : ninguna Salida: indicador booleano (fecha_valida) Postcondiciones: fecha_vlida es verdadero si d, m, a configuran una fecha

    definida en el entorno predeterminado.

    Con estas especificaciones cualquier programador podra manipular fechas an desconociendo la implementacin en TAD. El conjunto de operaciones presentado est lejos de ser completo. El lector puede plantear las operaciones que considere necesarias para obtener un TAD consistente, entre las que pueden estar restar_dias_a_fecha, dia_juliano, fecha_editada, etc.

  • PROGRAMACIN - ABSTRACCIN

    Preparado por Guillermo Mdica 5/11

    LISTAS, PILAS y COLAS como TAD.

    Las Listas, Pilas y Colas son estructuras muy utilizadas en la construccin de software de base y constituyen un muy buen ejemplo de Tipos de Datos Abstractos dada la diversidad de formas en que pueden implementarse y la complejidad de sus operaciones.

    LISTAS

    Definicin: Es un conjunto ordenado de elementos homogneos (todos del mismo tipo) con una relacin lineal entre ellos o sea que cada elemento de la lista tiene un nico predecesor (excepto el primero, que no tiene) y un nico sucesor (excepto el ltimo, que no tiene).

    El orden de los elementos dentro del conjunto condiciona a sus funciones de acceso: si la lista est ordenada por una cierta clave, por ejemplo, la funcin de incorporar un nuevo elemento implica una bsqueda de la ubicacin adecuada y la insercin del mismo en esa ubicacin; en cambio, si el orden es cronolgico la insercin siempre se realiza por un extremo del conjunto.

    Operaciones sobre listas.

    Definiremos algunas operaciones comunes sin pretender agotar todas las posibilidades. Como vimos, el ordenamiento de la lista influye en las funciones de acceso por lo que al definir el TAD Lista definiremos cul es su ordenamiento (*).

    Las operaciones bsicas son las de insertar y suprimir elementos, enumerar (recorrer) la lista con el objeto de recuperar secuencialmente sus elementos, crear la lista, vaciarla, determinar si est vaca, si est llena, etc. Podemos construir un acceso similar al de los archivos secuenciales (que no son otra cosa que listas almacenadas en dispositivos de memoria secundaria) donde con una funcin (generalmente READ) recuperamos el siguiente elemento y dejamos el subsiguiente disponible para el prximo acceso. La recorrida secuencial implica la consulta por el fin de la secuencia.

    (*) Un orden posible es el desorden , o sea, orden aleatorio. En este caso podran definirse varias funciones de insercin (antes de, al principio, al

    final, etc), as como funciones de ordenamiento.

  • PROGRAMACIN - ABSTRACCIN

    Preparado por Guillermo Mdica 6/11

    TAD Lista Ordenada.

    Funcin de acceso: Los elementos se aaden y quitan manteniendo el orden de la lista .

    Operaciones (Funciones primitivas)

    Crear Lista (Lista)

    Funcin: Crear una nueva lista en estado de lista vaca.

    Entrada: Ninguna.

    Precondiciones: Ninguna.

    Salida: Lista.

    Postcondiciones: Lista est vaca.

    Vaciar Lista(Lista)

    Funcin: Elimina los elementos que eventualmente tenga la lista.

    Entrada: Lista a vaciar.

    Precondiciones: Ninguna.

    Salida: Lista.

    Postcondiciones: Lista est vaca.

    Lista Vaca (Lista)

    Funcin: Determina si la lista est vaca.

    Entrada: Lista a controlar.

    Precondiciones: Ninguna.

    Salida: Indicador booleano.

    Postcondiciones: Indicador es falso si la lista tiene elementos y cierto en otro caso.

    Lista Llena (Lista) (**)

    Funcin: Determina si la lista est llena.

    Entrada: Lista a controlar.

    Precondiciones: Ninguna.

    Salida: Indicador booleano.

    Postcondiciones: Indicador es falso si existe espacio en la lista para almacenar un nuevo elemento y cierto en otro caso.

  • PROGRAMACIN - ABSTRACCIN

    Preparado por Guillermo Mdica 7/11

    Insertar (Lista, Elemento)

    Funcin: Aade el nuevo elemento a la lista, manteniendo el orden de sta.

    Entrada: Lista, Elemento.

    Precondiciones: La lista no est llena. (**)

    Salida: Lista (cambiada).

    Postcondiciones: Lista = Lista original con el nuevo elemento aadido respetando el orden de la lista.

    Suprimir Elemento (Lista, Clave, Indicador )

    Funcin: Elimina de la lista el elemento correspondiente a Clave.

    Entrada: Lista, Clave .

    Precondiciones: La lista no est vaca

    Salida: Lista (cambiada); Indicador booleano.

    Postcondiciones: Lista = Lista original sin el elemento igual a Clave. Indicador = verdadero si se elimin un elemento o falso si no existe ninguno con clave = Clave

    Primer elemento (Lista )

    Funcin: Acomoda la estructura para que apunte al primer elemento de la lista.

    Entrada: Lista

    Precondiciones: Ninguna.

    Salida: Lista (cambiada).

    Postcondiciones: Lista = Lista original apuntando al primer elemento (Actual).

    Siguiente elemento (Lista )

    Funcin: Acomoda la estructura para que apunte al siguiente elemento de la lista.

    Entrada: Lista

    Precondiciones: Ninguna.

    Salida: Lista (cambiada).

    Postcondiciones: Lista = Lista original apuntando al siguiente elemento (el sucesor del que hasta ahora era Actual).

  • PROGRAMACIN - ABSTRACCIN

    Preparado por Guillermo Mdica 8/11

    Recuperar elemento (Lista, Elemento )

    Funcin: Recupera el elemento Actual.

    Entrada: Lista

    Precondiciones: La lista no est vaca.

    Salida: Elemento.

    Postcondiciones: Elemento devuelto es el Actual.

    Fin Lista (Lista)

    Funcin: Determina el elemento Actual.

    Entrada: Lista

    Precondiciones: La lista no est vaca.

    Salida: Elemento.

    Postcondiciones: Elemento devuelto es el Actual.

  • PROGRAMACIN - ABSTRACCIN

    Preparado por Guillermo Mdica 9/11

    PILAS.

    Definicin: Es un grupo ordenado de elementos homogneos (todos del mismo tipo) al cual se accede por un slo extremo. Se considera un grupo ordenado porque los elementos estn ordenados de acuerdo a cunto tiempo llevan en la pila. Debido a que los elementos se aaden y quitan slo por la cabeza, el ltimo elemento en ser aadido es el primero en ser quitado. Hay un mnemotcnico para recordar este tipo de acceso: LIFO (acrnimo en ingls de Last In, Firsth Out: el ltimo que entr ser el primero en salir.).

    Operaciones sobre pilas.

    Las operaciones bsicas que se realizan sobre una pila son las de meter y sacar elementos de ella; tambin suele consultarse el elemento que est en la cabeza de la pila (tope). Adems es necesario crear una pila vaca (sin elementos), eventualmente vaciarla, averiguar si tiene o no elementos y, si bien como estructura lgica una pila no tiene lmites en cuanto a su capacidad, por caractersticas de implementacin puede ser necesario controlar si la misma est llena antes de introducir un nuevo elemento. En resumen, las operaciones Meter, Sacar, Ver Tope, Crear, Vaciar, Pilan Vaca y Pila Llena conforman el conjunto de funciones primitivas del tipo abstracto de datos Pila al que llamaremos Paquete Pila.

    TAD Pila.

    Funcin de acceso: Los elementos se aaden y quitan por la cabeza de la pila.

    Operaciones (Funciones primitivas)

    Crear Pila (Pila)

    Funcin: Crear una nueva Pila en estado de pila vaca.

    Entrada: Ninguna.

    Precondiciones: Ninguna.

    Salida: Pila vaca.

    Postcondiciones: Pila est vaca.

    Vaciar Pila (Pila)

    Funcin: Elimina los elementos que eventualmente tenga la pila.

    Entrada: Pila a vaciar.

    Precondiciones: Ninguna.

    Salida: Pila vaca.

    Postcondiciones: Pila est vaca.

  • PROGRAMACIN - ABSTRACCIN

    Preparado por Guillermo Mdica 10/11

    Pila Vaca (Pila)

    Funcin: Determina si la pila est vaca.

    Entrada: Pila a controlar.

    Precondiciones: Ninguna.

    Salida: Indicador booleano.

    Postcondiciones: Indicador es falso si la pila tiene elementos y cierto en otro caso.

    Pila Llena (Pila)

    Funcin: Determina si la pila est llena.

    Entrada: Pila a controlar.

    Precondiciones: Ninguna.

    Salida: Indicador booleano.

    Postcondiciones: Indicador es falso si existe espacio en la pila para almacenar un nuevo elemento y cierto en otro caso.

    Meter en Pila (Pila, Elemento)

    Funcin: Aade el nuevo elemento a la cabeza de la pila.

    Entrada: Pila, Elemento.

    Precondiciones: Pila no est llena. (*)

    Salida: Pila cambiada.

    Postcondiciones: Pila = Pila original con el nuevo elemento como tope.

    (*) Desde el punto de vista lgico, una pila nunca est llena pero siempre habr un lmite fsico en cualquier implementacin. El hecho de que una pila se llene obedece normalmente a un error en la estimacin de su tamao (en el caso de estructuras estticas, como veremos luego) o a circunstancias excepcionales de utilizacin de memoria (en caso de estructuras dinmicas) lo que lleva a considerar esta situacin como una excepcin no manejable por la aplicacin en cuyo caso puede no tomarse pila no llena como precondicin.

  • PROGRAMACIN - ABSTRACCIN

    Preparado por Guillermo Mdica 11/11

    Sacar de Pila (Pila)

    Funcin: Quita el elemento tope de la pila y lo devuelve.

    Entrada: Pila.

    Precondiciones: Pila no est vaca.

    Salida: Pila cambiada. Elemento sacado.

    Postcondiciones: Pila = pila original sin el elemento tope. Elemento sacado = elemento tope de la pila original.

    Tope de Pila (Pila)

    Funcin: Devuelve el elemento tope de la pila sin sacarlo de la misma.

    Entrada: Pila.

    Precondiciones: Pila no est vaca.

    Salida: Elemento sacado.

    Postcondiciones: Pila = pila original. Elemento sacado = elemento tope de la pila.