Abstracción de datos

25
ABSTRACCIÓN DE DATOS

Transcript of Abstracción de datos

ABSTRACCIÓN DE DATOS

INTRODUCCIÓN

En este tema nos ocupamos inicialmente del concepto deabstracción, dedicando la mayor atención a la abstracción dedatos, estudiando aspectos relacionados con su especificación eimplementación. También serán objeto de atención la forma enque los lenguajes de programación soportan la abstracción dedatos y algunas propiedades de los tipos abstractos de datos(TAD).

PALABRAS CLAVES

• Abstracción

• Aislar

• Encapsular

• Datos

• Características esenciales

• Objeto

• Código

• Reutilizar

• Datos relevantes

• Objetivo

• Descomponer

• Partes

• Subpartes

• La abstracción consiste en aislar un elemento de su contexto odel resto de los elementos que lo acompañan.

• En programación, el término se refiere al énfasis en el "¿quéhace?" más que en el "¿cómo lo hace?" .

• La abstracción de datos es la forma de organizar los programasen unidades lógicas que en muchos lenguajes deprogramación pueden compilarse separadamente

• La abstracción encarada desde el punto de vista de laprogramación orientada a objetos expresa las característicasesenciales de un objeto, las cuales distinguen al objeto de losdemás. Además de distinguir entre los objetos provee límitesconceptuales. Entonces se puede decir que la encapsulaciónsepara las características esenciales de las no esencialesdentro de un objeto. Si un objeto tiene más características delas necesarias los mismos resultarán difíciles de usar,modificar, construir y comprender.[1]. Franch Gutiérrez, X.,Estructuras de datos. Especificación, Diseño eimplementación, Barcelona, España.

• A grandes rasgos, la abstracción, permite que dispongamos delas características de un objeto que necesitemos.

• Consiste en visualizar tu objetivo en tu mente, ydescomponerlo en varias partes, y a su vez, descomponerestas partes en otras subpartes, y así sucesivamente, hastatener partes elementales y atómicos que no se puedendescomponer (o que no convienen).

• Por ejemplo: Supongamos que queremos programar una silla. Bueno, pero que es una silla? Como esta compuesta? La silla tiene un respaldo, y patas Bueno, entonces ya tenemos ahora dos objetos separados, Respaldo y Patas, que juntos forman una silla. Bueno, ¿pero que tienen las patas? Bueno, tienen madera. Entonces tenemos un nuevo objeto, Madera, que forma una Pata, que junto a Respaldo, forman una silla. Pero ¿que tiene el Respaldo? bueno, tiene un Almohadón. Y el Almohadón? Bueno, tiene algodón.

• Entonces, hemos descompuesto una silla, en varias partes atómicas, obteniendo el siguiente gráfico:

> Madera > Pata >>>>>>>>>>>>>>>>>>>> SILLA > Algodón > Almohada > Respaldo >>>>>>^

• A la hora de programar, lo ideal es empezar desde lo mas abstracto (partes mas pequeñas) y luego seguir por las partes menos abstractas (mas grandes). Ya que, sin Madera, no se puede obtener una Pata, y sin una Pata, no se puede obtener una Silla. Se comenzarías programando la Madera y el Algodón, luego la Pata y la Almohada, luego el Respaldo y finalmente, la Silla. Por esto es muy importante la abstracción de datos, ya que tener este tipo de mecánica para programar te permite tener un programa mas estable.

• Si quieres que la silla sea de oro, simplemente, modificas elelemento Madera para que sea Oro, y eso afectaría la pata y ala silla. No modificarías el código de TODA la silla entera (queseria tu único elemento si no utilizas la abstracción).

• Esta técnica nos permite diseñar diferentes estructuras dedatos, es decir, nos permite representar bajo determinadoslineamientos de formato las características básicas de unaestructura de datos.

• Es necesario dividir el diseño de un tipo de dato abstracto endos partes: especificación e implementación.[Figura 1.1]

• Especificación: define como se puede utilizar el tipo de dato= sintaxis + semántica.

• Implementación: define una posible realización del tipo dedato = representación (o estructura de datos) + algoritmos delas operaciones (en función de dicha estructura de datos).

Figura 1.1

Nota: TAD=Tipo Abstracto de Dato

PROPIEDADES DE LA ESPECIFICACIÓN • Precisa: dice sólo lo imprescindible .

• General: adaptable a diferentes contextos .

• Legible: debe transmitir el comportamiento del tipo .

• No ambigua: debe evitar dobles interpretaciones .

NOTA: Objetos: son conceptualmente similares a los objetos del mundo real: consisten de estado y comportamiento. Un objeto almacena su estado en campos («variables» en algunos lenguajes de programación) y muestra su comportamiento a través de métodos («funciones» en algunos lenguajes de programación).

ESQUEMA DE ESPECIFICACIÓN • Nombre del tipo de dato .

• Declaración de tipos: tipos de datos que va a utilizar el tipo dedato abstracto (tipos predefinidos de un lenguaje deprogramación u otros TAD).

• Características: descripción de los objetos mediante otros.Indica si los objetos son o no modificables .

• Operaciones: especificación de cada operación, laespecificación de las operaciones permite centrarnos en quéhace una función y no en cómo lo hace .

IMPLEMENTACIÓN

• Se elige una estructura de datos para los objetos y se realizanlos algoritmos correspondientes a las operaciones en funciónde dicha representación.

• La estructura de datos elegida debe permitirnos implementarlas operaciones de forma eficiente, razonablemente y simpleademás de hacer posible que algunas de las operaciones máshabituales se ejecuten más rápidamente.

LENGUAJES DE PROGRAMACIÓN La abstracción de datos es una técnica de diseño de programas.

El uso e implementación de tipos de datos abstractos conlenguajes de programación que no los soportanconvenientemente producen deficiencias en:

• Ocultación de la representación: No ocultan la representaciónde los objetos es decir, no pueden comprobar el buen uso dela abstracción de datos .

• Inicialización de las estructuras de datos: No disponen de unprocedimiento automático de inicialización de las estructurasde datos que se utilizan para representar a los objetos del tipoasí que se tendría que invocar a una acción para inicializarconvenientemente dichas estructuras.

• Compilación independiente .

• Abstracciones polimórficas: Un tipo de dato abstracto puedeser polimórfico con respecto a los tipos de los elementos quecontienen sus objetos.

NOTA Polimórfico: Que puede tener varias formas sin cambiar su naturaleza.

PROPIEDADES DE LOS TIPOS DE DATOS ABSTRACTOS• Modificabilidad: Un tipo de dato abstracto modificable puede

cambiar el estado de los objetos del tipo, además puedencambiar los valores de sus atributos.

• Clases de operaciones[Figura1.2]

• Creadores o constructores: crean nuevos objetos de undeterminado tipo. Un constructor puede recibir un objetocomo argumento, pero no un objeto del tipo que está siendoconstruido.

• Productores: crean nuevos objetos a partir de objetos yaexistentes.

• Mutadores o modificadores: cambian el valor de los objetos.

• Observadores: reciben objetos de un determinado tipoabstracto y devuelven objetos de un tipo distinto.

[Figura 1.2] Este esquema muestra de modo informal el formatode las operaciones en las diversas clases. Cada T es un tipoabstracto por sí sólo; cada t representa a algún otro tipo. Engeneral, cuando un tipo aparece en la parte izquierda, indicaque puede darse más de una vez. Por ejemplo, un productorpuede recibir dos valores de un determinado tipo abstracto. Lasapariciones de t a la izquierda pueden omitirse también; losobservadores no reciben ningún argumento que no sea de tipoabstracto. [2]. Liskov, B. y J. Guttag, Program Development in Java: Abstraction,

Specification, and Object-Oriented Design, Massachusetts Institute of Technology,Cambridge

EJEMPLO

public class Conjunto {

private char recipiente[ ];

private int tam;

public Conjunto(){

recipiente = new char[256];

tam = 0;

}

public Conjunto(Conjunto S){

recipiente = new char[256];

for (int i = 0; i < S.length; i++)

recipiente[i] = S. recipiente[i];

tam = S.tam;

}

CONCLUSIONES

• La programación orientada a objetos es la agregación de variastécnicas de programación que se han desarrollado con elcorrer del tiempo. Su uso se está difundiendo mucho por laimportancia que tiene el desarrollo de interfaces paraprogramas, las que de una manera muy natural puedenimplementarse usando técnicas de abstracción yprogramación por objetos. Aunque usar la abstracción dedatos podría resultar difícil, es más difícil no hacerlo, pues enalgunos casos se dura el doble de tiempo programando, valela pena el esfuerzo, pues la mejora en la modularidad de losprogramas que produce aumenta mucho su calidad.

REFERENCIAS BIBLIOGRÁFICAS • Franch Gutiérrez, X., Estructuras de datos. Especificación,

Diseño e implementación. Ediciones UPC, 1999. Págs. 19-25, 53-65

• Liskov, B. y J. Guttag, Program Development in Java: Abstraction, Specification, and Object-Oriented Design, Addison-Wesley, 2001. Págs. 1-13, 39-56, 77-123

• http://books.google.com.mx/books?id=tR7k9ga5CjoC&pg=PA344&dq=abstraccion+de+datos+en+java&hl=es&sa=X&ei=yMp2U8u7LMSRqga2nIKYCQ&ved=0CCwQ6AEwAA#v=onepage&q=abstraccion%20de%20datos%20en%20java&f=false