Debe introducir al menos 3 caracteres en el buscador.
Inicio / Wikis / Cursos gratis / Curso de Ada - Tipos abstractos de datos

Curso de Ada - Tipos abstractos de datos

 ****- (10 opiniones)
GNU Free Documentation License Curso gratis de José Alfonso Malo Romero - 16 de Marzo de 2006
Temas Relacionados: Programación estructurada
46. Tipos abstractos de datos
Una de las principales contribuciones de los lenguajes de alto nivel es que el programador no tiene que preocuparse de cómo se representan físicamente los datos en el computador. De esta idea surge el concepto de tipo de datos. Una extensión del mismo es el tipo abstracto de datos. Su implementación es de nuevo desconocida para el programador, esta vez no porque desconozca la arquitectura del computador subyacente, sino porque es encapsulado en un módulo que no permite el acceso directo a los detalles de su implementación. En su lugar, se proporciona al programador operaciones sobre el tipo que son invocaciones a entradas del módulo que lo encapsula.

Por ejemplo, consideremos la utilización de un tipo abstracto de datos que represente a un número complejo:

package Números_complejos is type TComplejo is record Real, Imag: Float; end record; I: constant TComplejo := (0.0, 1.0); function "+" (X, Y: TComplejo) return TComplejo; function "-" (X, Y: TComplejo) return TComplejo; function "*" (X, Y: TComplejo) return TComplejo; function "/" (X, Y: TComplejo) return TComplejo; end Números_complejos;

De este modo, el usuario debe conocer los detalles de la implementación y sabe que se utiliza una representación cartesiana. Además, el usuario está obligado a hacer uso de la representación.

Para impedir el uso del conocimiento de la representación con vistas, por ejemplo, a poder cambiar ésta posteriormente, se puede hacer uso de los tipos privados definiéndolos mediante la palabra reservada private:

package Números_complejos is -- Parte visible. type TComplejo is private; -- Tipo privado. I: constant TComplejo; -- No se puede asignar valor todavía. function "+" (X, Y: TComplejo) return TComplejo; function "-" (X, Y: TComplejo) return TComplejo; function "*" (X, Y: TComplejo) return TComplejo; function "/" (X, Y: TComplejo) return TComplejo; function Construir_complejo (R, I: Float) return TComplejo; function Parte_imaginaria (X: TComplejo) return Float; function Parte_real (X: TComplejo) return Float; private -- Parte oculta. type TComplejo is record Real, Imag: Float; end record; I: constant TComplejo := (0.0, 1.0); end Números_complejos;

Ahora, se ha definido TComplejo como tipo privado y se resguardan los detalles de su implementación en la parte no visible del paquete después de la palabra reservada private y hasta el fin de la especificación del paquete. En la parte visible (desde el comienzo de la especificación hasta private), se da la información disponible fuera del paquete.

Las únicas operaciones disponibles son la asignación, la igualdad y la desigualdad, aparte de las añadidas en el paquete.

Nótese que el valor de I no se puede dar pues no se conocen todavía los detalles de la implementación, se declara como constante y se le asigna después un valor en la parte privada.

Las funciones Construir_complejo, Parte_imaginaria y Parte_real son ahora necesarias pues el usuario ya no conoce la estructura del tipo TComplejo y se necesita realizar dicha interfaz para poder manejar objetos del tipo privado.

El cuerpo se podría implementar de la siguiente manera:

package body Números_complejos is function "+" (X, Y: Tcomplejo) return TComplejo is begin return (X.Real + Y.Real, X.Imag + Y.Imag); end "+"; -- ... "-", "* y "/" similarmente. function Construir_complejo (R, I: Float) return TComplejo is begin return (R, I); end Construir_complejo; function Parte_real (X: TComplejo) return Real is begin return X.Real; end Parte_real; -- ... Parte_imaginaria análogamente. end Números_complejos;

Y podría ser utilizado transparentemente, por ejemplo, dentro de un bloque como:

declare use Números_complejos; C1, C2: TComplejo; R1, R2: Float; begin C1 := Construir_complejo (1.5, -6.0); C2 := C1 + I; R := Parte_real (C2) + 8.0; end;

Si ahora se quisiera cambiar la implementación del tipo TComplejo y representarlo en forma polar, no sería necesario cambiar la parte visible de la especificación, por lo que todas las unidades que utilicen dicho paquete no tienen la necesidad de actualizarse. La interfaz exportada no ha cambiado y, por tanto, los programas que la utilizarán pueden seguir haciéndolo. Por ejemplo, ahora se podría representar en la parte privada de la especificación del paquete como:

-- ... private Pi: constant := 3.1416; type TComplejo is record R: Float; Theta: Float range 0.0 .. 2*Pi; end recod; I: constant TComplejo := (1.0, 0.5*Pi); end Números_complejos;

Lo único que se necesitaría sería reescribir el cuerpo del paquete y recompilarlo.

Enlaces externos


Tabla de contenidos
  1. 1 - Introducción
  2. 2 - Historia
  3. 3 - Manual de referencia
  4. 4 - Instalación
  5. 5 - Hola Mundo
  6. 6 - Elementos del lenguaje
  7. 7 - Tipos
  8. 8 - Enteros
  9. 9 - Enumeraciones
  10. 10 - Coma flotante
  11. 11 - Coma fija
  12. 12 - Arrays
  13. 13 - Strings
  14. 14 - Registros
  15. 15 - Registros discriminados
  16. 16 - Registros variantes
  17. 17 - Punteros a objetos
  18. 18 - Punteros a subprogramas
  19. 19 - Tipos derivados
  20. 20 - Tipos etiquetados (orientación a objetos)
  21. 21 - Subtipos
  22. 22 - Objetos (variables y constantes)
  23. 23 - Atributos
  24. 24 - Expresiones
  25. 25 - Operadores
  26. 26 - Sentencias y estructuras de control
  27. 27 - Subprogramas
  28. 28 - Sobrecarga
  29. 29 - Entrada/salida
  30. 30 - Pragmas
  31. 31 - Interfaz con otros lenguajes
  32. 32 - Diseño y programación de sistemas grandes
  33. 33 - Paquetes
  34. 34 - Clausula use
  35. 35 - Clausula with
  36. 36 - Paquete Standard
  1. 37 - Declaraciones
  2. 38 - Ámbito
  3. 39 - Visibilidad
  4. 40 - Renombrado
  5. 41 - La biblioteca Ada (unidades y subunidades)
  6. 42 - Unidades de biblioteca
  7. 43 - Unidades hijas
  8. 44 - Subunidades
  9. 45 - Compilación separada y dependiente
  10. 46 - Tipos abstractos de datos
  11. 47 - Tipos limitados
  12. 48 - Unidades genéricas
  13. 49 - Excepciones
  14. 50 - Paquete Ada.Exceptions
  15. 51 - Concurrencia
  16. 52 - Tareas
  17. 53 - Sincronización de tareas mediante puntos de entrada o citas (entry)
  18. 54 - Aceptación de citas (accept)
  19. 55 - Selección de citas (select)
  20. 56 - Llamadas a punto de entrada complejas
  21. 57 - Tareas dinamicas: creación dinamica de tareas (tipos t
  22. 58 - Dependencia de tareas
  23. 59 - Ejemplos de tareas
  24. 60 - Programación distribuida con GLADE
  25. 61 - Novedades de Ada 2005
  26. 62 - Unidades predefinidas
  27. 63 - Paquete Ada.Strings.Fixed
  28. 64 - Paquete Ada.Strings.Unbounded
  29. 65 - Paquete Ada.Text_IO
  30. 66 - Paquete Ada.Text_IO.Editing
  31. 67 - Paquete Ada.Float_Text_IO
  32. 68 - Paquete Ada.Sequential_IO
  33. 69 - Paquete Ada.Command_Line
  34. 70 - Paquete Interfaces
  35. 71 - Recursos en la Web
Autor y licencia de 'Curso de Ada - Tipos abstractos de datos'
José Alfonso Malo Romero Extraído de: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_Ada_/_Introducci%C3%B3n GNU Free Documentation License
El contenido está disponible bajo los términos de GNU Free Documentation License
Licencia GNU Free Documentation License: http://www.gnu.org/copyleft/fdl.html
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Wikis relacionados con 'Curso de Ada - Tipos abstractos de datos'

PHP es un lenguaje en que usualmente el tipo de dato de una variable no... Más »
Este curso contiene cuatro actividades. Publico la primera actividad.
Un sistema informático utiliza ordenadores para almacenar datos, procesarlos y ponerlos a disposición de quien... Más »
Por medio de la interpretación de los datos presentados en los estados financieros los administradores,... Más »
En la actualidad, no existe un formato común generalmente aceptado para los datos contenidos en... Más »
Gente Wiki
Jorge Róger Méndez Benavides
Profesor de la uned [universidad estatal a distancia de costa rica] y del itcr [instituto tecnológico de costa rica].
Marketing internacional, Medios de pago,...
Eduardo
Fundador y director del departamento de investigación periodística del circulo de la prensa y jefe de redacción de la revista...
Benito Juarez
Profesional proactivo responsable, emprendedor con capacidad analítica, con experiencia en el campo laboral, con estudios de nivel superior, dispuesto...
Mauricio Molina
Consultor de Sistemas con experiencia en Gerencia de Proyectos de gran alcance, Líder de QA, Gerencia Comercial de Cuentas Corporativas...
Guillermo Vega Zaragoza
Soy escritor, periodista y maestro. Me he especializado en comunicación organizacional, redacción, escritura creativa, periodismo, relaciones humanas y marketing. Me...
Corrección, Editoriales,...
Blancas Campos Gilberto
Soy abogado y licenciado en administración, con estudios de post grado en maestría con mención en derecho constitucional, y el...
Suscribirse
¿Estás seguro de que deseas eliminar este capítulo?