Lenguaje de programación. Abstracción de datos

Anuncio
TEMA 7: Abstracción de Datps
7.1
Abstracción de datos
• La abstracción de datos es un arma contra la complejidad del proceso de programación.
• Objetivo : simplificar el proceso de la programación. Lo hace permitiendo al programador
concentrarse sólo en los atributos que son esenciales y le permite ignorar los que son prescindibles.
• Los LP actuales permiten dos tipos de abstracción:
• De procesos
• De Datos
7.2
Encapsulación
• Cuando un programa alcanza unos cuantos miles de lÃ−neas aparecen una serie de problemas:
• El programa no es más que una colección de subprogramas que no tienen un nivel adecuado de
organización que le permitan al programador administrar la complejidad
• Para cualquier pequeño cambio que necesitamos hacer tenderemos que recompilar todo el
programa.
¿Cómo se evita esto? (El problema de la recompilación)
• Organizando los programas en colecciones de subprogramas y datos. Colecciones que puedan
compilarse por separado. Estas unidades se las denomina “unidades de compilación”.
• DifÃ−cil administración de la complejidad
• Recompilación
• Si éstas unidades de compilación permiten al programador la posibilidad de organizar de manera
lógica el programa, reciben el nombre de “encapsulaciónes” (Agrupación de subprogramas y
datos que proporcionan una organización lógica para el programador y puede compilarse por
separado, asÃ− se resuelven los dos problemas)
7.3
Introducción a la abstracción de datos
• Un TDA es una encapsulación que sólo incluye la representación de datos de un solo tipo de datos
particular y los subprogramas que proporcionan las operaciones para objetos de ese tipo.
• Como el TDA tiene un mecanismo de control de acceso, los detallles que son irrelevantes pueden
ocultarse a las unidades que irán a utilizar este TDA.
• La abstracción de datos es también un arma contra la complejidad del proceso de programación.
• La aparición de TDA da lugar a un nuevo paradigma : Orientación a Objetos. (es una extensión
del TDA en el diseño de SW)
• Desde el punto de vista del programador que utiliza los TDA para definir sus propios tipos, un TDA
debe satisfacer dos cosas:
1
• Tanto la definición del tipo como las operaciones sobre los objetos de ese tipo están contenidos en
una sola unidad sintáctica. Otras unidades de programa pueden crear objetos del tipo definido.
• La implementación de los objetos del tipo se oculta a las unidades de programa que lo usan de
manera que las únicas operaciones posibles sobre estos objetos son las que se proporcionan en la
definición del tipo.
¿Qué ventaja aporta el uso del TDA?
• Relativas a la encapsulación :
• Los TDA proporcionan un método de organizar los programas es unidades lógicas que pueden
compilarse separadamente.
• Las modificaciones que deben realizarse tanto en las representaciones como en las operaciones del
tipo solo afectan a un área determinada del programa.
• Relativas a la ocultación de información:
• Al ocultarse los detalles de representación el código de las unidades de programa que utilizan el
tipo no depende de la implementación del tipo.
• Podemos cambiar la implementación del tipo y esto no va a cambiar las unidades del programa que
utiliza el tipo.
• Supone un incremento de la fiabilidad del SW ya que las unidades de programa cliente que usan el
tipo no pueden cambiar directamente el objeto sino que tienen que usar las operaciones que se
proporcionan en la unidad del tipo (garantiza la integridad del objeto)
¿Cómo de implementan los TDA en los LP?
Hay al menos dos implementaciones básicas :
• Cada TDA encapsula un solo TDA y sus operaciones.
(se ajusta a la definición de TDA que usan los lenguajes OO)
Ej. :
Smaltalk , C++
• Son construcciones de encapsulación (no son implementaciones de TDA).
Lenguajes que proporcionan una construcción más general en la que se puede definir cualquier número de
entidades. De forma que el programador puede seleccionar algunas de ellas para que sean visibles fuera de la
unidad.
Permiten simular los TDA (son construcciones de encapsulación)
Ej.- ADA,Módula2
• Aspectos relacionados con la implementación
2
• Restringir los posibles tipos que pueden ser abstractos a punteros: Si el LP restringe el TDA a
puntero el tamaño del tipo es conocido en todo caso.
• Ventajas:
• Cuando restringimos los posibles tipos que pueden ser abstractos a punteros: (evitamos esfuerzos de
recompilación)
• Restricción:
• Utilizar siempre como tipos apuntador
• Utilizar otra estructura (hay que recompilar)
• Posibilidad de parametrizar los TDA
• Yo puedo construir un TDA que sea una pila de enteros.Poder utilizar una pila genérica serÃ−a
mejor, habrÃ−a que pensar en la posibilidad de incluirla.
• Resolución de colisiones entre nombres locales y no locales:
¿Cómo se va a permitir al programador hacer referencia a los dos nombres?
Ej.- ADA:
Las unidades de encapsulación se denominan “packages”
Packages
(partes) specification package (seccion visible, seccion parcialmente visible)
body package (cuerpo)
• En la parte de especificación hay a su vez una sección visible y una sección parcialmente visible
Para las unidades de programa que utilizan los package sólo son visibles las que están en esa parte.
A la parte parcialmente visible puede acceder el programador para calcular el tamaño del objeto.
(Ada no restringe el tipo de los TDA)
Ejemplo:
Package TDA_PILA is
--- Entidades visibles o interface público
type tipo_pila is private;
tam_max: constant:=100;
function vacia (p:in out tipo_pila) return boolean;
3
procedure push (p:in out tipo_pila; elemento: in integer);
procedure pop (p:in out tipo_pila);
function cima (p:in tipo_pila) return integer;
-- Parte Oculta
private
type tipo_lista is array (1..tam_max) of integer;
type tipo_pila is
record
lista:tipo_lista;
punt_cima: integer range 0..tam_max:=0;
end_record
end TDA_PILA;
• Esto pertenece a la parte de especificación. En la parte de “body” se realiza la definición de los
procedimientos.
¿Cómo se usa el TDA_PILA?
With TDA_PILA; // Que importe el package TDA_PILA
Use TDA_PILA
Pricedure usarpila;
Elem:integer;
Pila: tipo_pila;
Begin
Push (pila, 7);
Push (pila,13);
Pop (pila);
Elem:= cima (pila);
7.3
Tipos Parametrizados
TIPOS PARAMETRIZADOS
4
• No hace falta un TDA lista para enteros reales ,...
• En el código final va a haber código para cada tipo diferente )
Tema 7: Abstracción de Datos LPR
1
3
5
Descargar