ttema1

17
Ampliación de Estructuras de Datos y de la Información E.S.E. Informática Tema 1. Introducción a los TAD Objetivos En este tema nos ocupamos inicialmente del concepto de abstracción, dedicando la mayor atención a la abstracción de datos, estudiando aspectos relacionados con su especificación e implementación. También serán objeto de atención la forma en que los lenguajes de programación soportan la abstracción de datos y algunas propiedades de los tipos abstractos de datos (TAD). Además, veremos algunos ejemplos de TAD, presentando tanto su especificación como su implementación usando el lenguaje de programación Java. Planificación Se estiman 4 horas. Contenidos 1. Abstracción de datos 1.1. Especificación 1.2. Implementación 1.3. Lenguajes de programación 1.4. Propiedades de los TAD Modificabilidad Clases de operaciones 2. Ejemplo Bibliografía Básica 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 Departamento de Informática 1 Reyes Pavón

Upload: roberdrum

Post on 08-Nov-2015

5 views

Category:

Documents


4 download

DESCRIPTION

TAD

TRANSCRIPT

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Tema 1. Introduccin a los TAD

    Objetivos En este tema nos ocupamos inicialmente del concepto de abstraccin, dedicando la mayor atencin a la abstraccin de datos, estudiando aspectos relacionados con su especificacin e implementacin. Tambin sern objeto de atencin la forma en que los lenguajes de programacin soportan la abstraccin de datos y algunas propiedades de los tipos abstractos de datos (TAD). Adems, veremos algunos ejemplos de TAD, presentando tanto su especificacin como su implementacin usando el lenguaje de programacin Java.

    Planificacin Se estiman 4 horas.

    Contenidos 1. Abstraccin de datos

    1.1. Especificacin 1.2. Implementacin 1.3. Lenguajes de programacin 1.4. Propiedades de los TAD

    Modificabilidad Clases de operaciones

    2. Ejemplo

    Bibliografa

    Bsica Franch Gutirrez, X., Estructuras de datos. Especificacin, Diseo e implementacin. Ediciones UPC, 1999. Pgs. 19-25, 53-65

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

    Departamento de Informtica 1 Reyes Pavn

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Complementaria Liskov, B. y J. Guttag, Program Development in Java: Abstraction, Specification, and Object-Oriented Design, Addison-Wesley, 2001. Pgs. 57-75, 125-146, 189-205 Pea Mar, R., Diseo de Programas: Formalismo y Abstraccin, 2 ed., Prentice Hall, 1998. Pgs. 155-226

    Departamento de Informtica 2 Reyes Pavn

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Tema 1. Introduccin a los TAD

    1. Abstraccin de datos

    Abstraccin de datos o tipo abstracto de datos (TAD): nuevo tipo de dato ms un conjunto de operaciones que permiten manipular los objetos de dicho tipo

    Abstracto los objetos del tipo deben ser manipulados mediante sus operaciones, sin necesidad de ninguna nocin adicional sobre el tipo

    Objeto (no variable)

    Los TAD permiten: Aadir nuevos tipos de datos: permiten definir y utilizar

    tipos de datos distintos a los predefinidos en el lenguaje de programacin

    Encapsular informacin:

    Es posible localizar la definicin del tipo y el cdigo de todas las operaciones sobre ese tipo en una determinada seccin del programa

    Un cambio en el TAD revisar una pequea seccin del programa (no hay detalles en otras partes que puedan ocasionar errores relacionados con ese tipo de datos)

    Forma de organizar los programas en unidades lgicas que en muchos lenguajes de programacin pueden compilarse separadamente

    Ocultar la representacin:

    Los TAD se estructuran en dos partes: interfaz e implementacin

    Interfaz: lista de operaciones junto con sus argumentos (tipo de los parmetros de entrada y el

    Departamento de Informtica 3 Reyes Pavn

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Departamento de Informtica 4 Reyes Pavn

    tipo del resultado). Es la nica parte visible al usuario del TAD

    Implementacin: lugar en donde se define cmo realizar las operaciones del TAD. Esta parte slo es visible al programador basta con preservar la integridad de la informacin en esta seccin, donde los posibles errores estarn controlados

    Para poder utilizar un TAD es necesario disponer de su especificacin: caractersticas del tipo de dato + significado de las operaciones (especificacin de funcin)

    El cdigo de las unidades de programa que usan el tipo no dependen de su implementacin

    La implementacin puede cambiar sin afectar a las unidades de programa que usan el tipo

    Se garantiza la fiabilidad de las unidades de programa que usan un TAD y la integridad de los objetos de ese tipo

    Programa

    Interfaz

    Caractersticas

    + Operaciones

    Implementacin

    Estructura de datos

    + algoritmos

    Solicita operacin

    Resultado operacin

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Objetivo: separar el uso del tipo de dato de su implementacin dividir el diseo de un TAD en dos partes: especificacin e implementacin

    Especificacin: define como se puede utilizar el tipo de dato = sintaxis + semntica

    Implementacin: define una posible realizacin del tipo de dato = representacin (o estructura de datos) + algoritmos de las operaciones (en funcin de dicha estructura de datos)

    TAD

    Especificacin Implementacin

    Representacin Algoritmos Sintaxis Semntica

    1.1. Especificacin

    Especificacin de un TAD = descripcin de los objetos del tipo de dato + operaciones realizables sobre ellos

    Propiedades de la especificacin: Precisa: dice slo lo imprescindible

    General: adaptable a diferentes contextos

    Legible: debe transmitir el comportamiento del tipo

    No ambigua: debe evitar dobles interpretaciones

    Departamento de Informtica 5 Reyes Pavn

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Formas de realizar la especificacin: Formal: mediante axiomas algebraicos

    Informal: usando el lenguaje natural. Para conseguir mayor precisin se utilizan un conjunto de clusulas especificacin cuasi-formal

    Especificacin cuasi-formal del TAD

    Esquema de especificacin Nombre del tipo de dato

    Declaracin de tipos: tipos de datos que va a utilizar el TAD (tipos predefinidos de un lenguaje de programacin u otros TAD)

    Caractersticas: descripcin de los objetos mediante otros previsiblemente comprensibles para el lector de la especificacin. Indica si los objetos son o no modificables

    Operaciones: especificacin de cada operacin siguiendo una notacin cuasi-formal

    Departamento de Informtica 6 Reyes Pavn

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Especificacin de cada operacin

    Permite centrarnos en qu hace una funcin y no en cmo lo hace.

    Tipos: Formal: mediante asertos de entrada y salida

    (precondicin y postcondicin)

    Informal usando lenguaje natural ambigedad. Para conseguir mayor precisin se puede realizar una cierta formalizacin mediante clusulas especificacin cuasi-formal

    Clusulas de la especificacin cuasi-formal: Necesita: Conjunto de condiciones suficientes para asegurar

    la ejecucin adecuada de la funcin restricciones bajo las cuales se define la abstraccin. Ejs:

    funcin raizCuadrada (x: real) devuelve real; { Necesita: x 0 Produce: Devuelve la raz cuadrada de x }

    funcin buscaEnOrden (a: vector de entero; x: entero) devuelve entero; { Necesita: a est ordenado en orden ascendente Produce: Si x est en a, devuelve el ndice del vector donde est almacenada. En caso contrario, devuelve 1. }

    Modifica: Nombres de las entradas (argumentos o variables no locales) que se modifican en la invocacin a la funcin identificacin de efectos laterales.

    Produce: Comportamiento de la funcin para todas las entradas que cumplen la clusula necesita: qu salidas produce y qu modificaciones se realizan sobre las variables indicadas en la clusula modifica. Se asume que la clusula necesita se satisface y no se dice nada sobre el comportamiento de la funcin en caso contrario.

    Abstraccin parcial vs. total:

    Departamento de Informtica 7 Reyes Pavn

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Parcial: presenta una clusula necesita

    Desventaja: queda en manos del usuario comprobar si se cumplen las restricciones de la clusula necesita

    Ventaja: en ocasiones pueden implementarse ms eficientemente que las totales (ej: buscaEnOrden) o de manera ms simple (con menos comprobaciones)

    Total: caso contrario son ms seguras

    Clusula necesita vs. excepciones Clusula necesita:

    Cuando la funcin va a utilizarse slo en un contexto muy limitado, en el que es fcil verificar que se satisfacen las restricciones, y si esto supone una implementacin ms eficiente o ms simple

    Excepciones:

    Siempre que sea posible, la implementacin debera comprobar las restricciones de la clusula necesita y lanzar una excepcin en caso de que no se satisfagan. Puede no tener sentido como en buscaEnOrden

    La clusula produce debe identificar las condiciones que provocan la excepcin

    Si una excepcin se produce para un cierto subconjunto de valores de los argumentos, este subconjunto no debera aparecer en la clusula necesita

    Ejemplo de conversin de una abstraccin parcial en total:

    funcin raizCuadrada (x: real) devuelve real lanza ExcepcionNegativo { Produce: Si x < 0 lanza ExcepcionNegativo, sino devuelve la raz cuadrada de x }

    Departamento de Informtica 8 Reyes Pavn

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Ejemplo: especificacin cuasi-formal del tipo racional Tipo Racional

    Declaracin de tipos Racional, Entero

    Caractersticas El valor abstracto de un objeto del tipo ser un nmero racional Los objetos no son modificables

    Operaciones funcin ConstruirRacional (n, d: Entero) devuelve Racional lanza ExcepcinDenominadorCero { Produce: Si d = 0 lanza ExcepcinDenominadorCero, sino devuelve el nmero racional n/d }

    funcin Numerador (r: Racional) devuelve Entero { Produce: el numerador de r. }

    funcin Denominador (r:Racional) devuelve Entero { Produce: el denominador de r. } funcin Suma (r1, r2:Racional) devuelve Racional { Produce: el racional r1+ r2. } funcin Simplifica (r: Racional) devuelve Racional { Produce: un racional equivalente a r e irreducible. } fin Racional

    Conocida la especificacin de un tipo, y slo sta, puede realizarse cualquier algoritmo que utilice el TAD

    Ej: producto de dos nmeros racionales

    funcin Multiplica (r1, r2: Racional) devuelve Racional { Produce: el racional r1 * r2. } inicio retorna Simplifica(ConstruirRacional (Numerador(r1) * Numerador(r2), Denominador(r1) * Denominador(r2))) ffuncin;

    1.2. Implementacin

    Se elige una representacin, o estructura de datos, para los objetos y se realizan los algoritmos correspondientes a las operaciones en funcin de dicha representacin

    Departamento de Informtica 9 Reyes Pavn

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    La representacin elegida debe permitirnos implementar las operaciones de forma eficiente, razonablemente simple y hacer posible que algunas de las operaciones ms habituales se ejecuten ms rpidamente

    Como unas representaciones hacen ms eficientes unas operaciones que otras estudiar las distintas posibilidades

    Ej: implementacin del TAD Racional en Java public class Racional { private int num, den; public Racional (int n, int d) throws ExcepcionDenominadorCero { if (d == 0) throw new ExcepcionDenominadorCero("Racional: denominador cero"); num = n; den = d; } public int numerador() { return num; } public int denominador() { return den; } public Racional suma(Racional r) { return new Racional(num * r.den + den * r.num, den * r.den); } public Racional simplifica() { int mcd = OpEnteros.mcd(num, den); return new Racional(num / mcd, den / mcd); } }

    Normalmente existirn varias implementaciones para una misma especificacin

    Departamento de Informtica 10 Reyes Pavn

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    1.3. Lenguajes de programacin

    La abstraccin de datos es una tcnica de diseo de programas su utilizacin independiente del lenguaje de programacin

    El uso e implementacin de TAD con lenguajes de programacin que no los soportan convenientemente deficiencias en: Ocultacin de la representacin: No ocultan la

    representacin de los objetos no pueden comprobar el buen uso de la abstraccin de datos

    Inicializacin de las estructuras de datos: No disponen de un procedimiento automtico de inicializacin de las estructuras de datos que se utilizan para representar a los objetos del tipo invocar a una accin para inicializar convenientemente dichas estructuras

    Compilacin independiente

    Abstracciones polimrficas: Un TAD puede ser polimrfico con respecto a los tipos de los elementos que contienen sus objetos. Un procedimiento o iterador puede ser tambin polimrfico con respecto a los tipos de uno o ms de sus argumentos

    Ej. de LP con deficiencias: Pascal units de Turbo Pascal permiten:

    Ocultar la representacin de un tipo de dato (o al menos se puede dejar inaccesible)

    Inicializar las estructuras de datos Compilar de forma independiente

    Abstraccin de datos en Java Lenguaje orientado a objetos basado en clases

    Departamento de Informtica 11 Reyes Pavn

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Facilita la ocultacin de la representacin mediante la visibilidad de los atributos (private)

    Permite la inicializacin de las estructuras de datos mediante los mtodos constructor

    Cada clase se puede compilar independientemente.

    Posee mecanismos para realizar abstracciones polimrficas

    Permite el polimorfismo funcional como de tipos Una superclase comn a todas: Object Parmetros de tipo (generics, a partir de Java 1.5)

    La abstraccin de datos es una tcnica de diseo de programas el desarrollo de programas en un LP que no soporte convenientemente la abstraccin de datos no impide el utilizar sta en el diseo de los mismos

    El usuario de la abstraccin es el responsable de mantener el paradigma de programacin (el compilador no aporta ningn mecanismo de control del buen uso de la misma)

    1.4. Propiedades de los TAD

    Modificabilidad

    TAD modificable = puede cambiar el estado de los objetos del tipo pueden cambiar los valores de sus atributos

    Disear un TAD modificable o no modificable? No modificable: los objetos deben mantener de forma natural

    sus valores (ej.: racionales, complejos)

    Departamento de Informtica 12 Reyes Pavn

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Departamento de Informtica 13 Reyes Pavn

    Ms fiables, pero Con objetos que se crean y rechazan frecuentemente

    recuperacin de espacios de memoria debe realizarse a menudo (por ej., empleando tcnicas de recogida de basura)

    Modificable (ej.: colas de clientes en sistemas de simulacin)

    TAD Racional no modificable: Todas las operaciones devuelven objetos nuevos consumo

    de memoria

    No existen operaciones que puedan modificar los objetos

    Ej:

    Racional r1 = new Racional(10, 5); Racional r2 = new Racional(2, 3); Racional r3 = r1.suma(r2).simplifica();

    En las abstracciones modificables el consumo de memoria no es un factor crtico operaciones que modifican objetos en lugar de crear nuevos

    Ej.: Si la operacin Simplifica fuera una operacin modificadora:

    Racional r3 = r1.suma(r2); r3.simplifica();

    10

    5 2

    3

    40

    15 8

    3

    r1

    r2

    r3

    Heap

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Departamento de Informtica 14 Reyes Pavn

    Pueden los objetos compartir espacio de memoria? Inters: aprovechar al mximo el espacio de memoria

    disponible (tanto TAD modificables, como no modificables)

    Ej.: TAD Lista cuyos elementos son caracteres. A partir de la lista l1=('a' 'b' 'c') se crea la lista l2=('b' 'c'). Posibilidades:

    El espacio de memoria ocupado por cada uno de los elementos de ambas listas sea distinto objetos no compartidos

    'a' 'b' 'c'l1

    'b' 'c'l2

    Espacio de memoria ocupado por los elementos comunes 'b' y 'c'

    sea el mismo, en cuyo caso los objetos estn compartidos y se ahorra el espacio correspondiente a dos caracteres

    'a' 'b' 'c'l1

    l2

    10

    5 2

    3

    8

    3

    r1

    r2

    r3

    Heap

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Las modificaciones en una de las listas pueden afectar a la otra. Ej.: insertar un elemento al final de una de ellas (l2.insertaFinal('d')) modificara ambas

    'a' 'b' 'c' l1

    l2

    'd'

    Este problema slo se produce si las abstracciones de datos son modificables

    Clases de operaciones

    Creadores: crean objetos de su tipo de dato sin tomar ningn objeto del mismo tipo como entrada. Todos los creadores son constructores, aunque no ocurre lo contrario

    Productores: crean objetos del tipo de dato tomando algn objeto del mismo tipo como entrada

    Modificadores: modifican los objetos del tipo de dato slo se dan en las abstracciones modificables

    Observadores: toman como entrada objetos del tipo de dato y devuelven resultados de otros tipos

    Ej.: TAD Racional Creadores: Racional

    Productores: suma y simplifica

    Modificadores: ninguno

    Observadores: numerador y denominador

    Departamento de Informtica 15 Reyes Pavn

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    2. Ejemplo

    Especificacin public class Conjunto { // Declaracin de tipos: Conjunto, // Caractersticas: // Conjunto ilimitado de elementos de tipo . Un Conjunto tpico es

    // {x1, , xn} siendo xi de tipo // Los objetos son modificables // Constructores public Conjunto() // Produce: Inicializa this al vaco // Mtodos public void inserta(E x) // Modifica: this // Produce: Aade x a los elementos de this, esto es, // this_post = this { x } public void elimina(E x) // Modifica: this // Produce: Elimina x de this, esto es, this_post = this { x } public boolean pertenece(E x) // Produce: Si x est en this devuelve cierto; falso en caso contrario public int cardinal() // Produce: Devuelve el nmero de elementos de this public E elige() throws ExcepcionConjuntoVacio // Produce: Si this est vaco lanza la excepcin // ExcepcionConjuntoVacio. En caso contrario, devuelve un // elemento cualquiera de this. }

    Departamento de Informtica 16 Reyes Pavn

  • Ampliacin de Estructuras de Datos y de la Informacin E.S.E. Informtica

    Departamento de Informtica 17 Reyes Pavn

    Implementacin public class Conjunto { private Vector elementos; // la representacin del tipo // Constructores public Conjunto() { elementos = new Vector(); } // Mtodos public void inserta(E x) { if (elementos.indexOf(x) < 0) elementos.addElement(x); } public void elimina(E x) { int i = elementos.indexOf(x); if (i >= 0) { elementos.setElementAt(elementos.lastElement(), i); elementos.removeElementAt(elementos.size()-1); } } public boolean pertenece(E x) { return elementos.indexOf(x) >= 0; } public int cardinal() { return elementos. size(); } public E elige() throws ExcepcionConjuntoVacio { if (elementos. size() == 0) throw new ExcepcionConjuntoVacio("Conjunto.elige: Conjunto vaco."); return elementos.lastElement(); } }

    Tema 1. Introduccin a los TADObjetivosPlanificacinContenidos1. Abstraccin de datos1.1. Especificacin1.2. Implementacin1.3. Lenguajes de programacin1.4. Propiedades de los TAD Modificabilidad Clases de operaciones

    2. EjemploBibliografaBsicaComplementaria

    Tema 1. Introduccin a los TAD1. Abstraccin de datos1.1. EspecificacinEspecificacin cuasi-formal del TADEspecificacin de cada operacin

    1.2. Implementacin1.3. Lenguajes de programacin1.4. Propiedades de los TADModificabilidadClases de operaciones

    2. Ejemplo