Professional Documents
Culture Documents
Introduccin
experiencia).
Minimizar el acoplamiento (sentido comn, experiencia y
soporte).
Ocultacin como soporte para minimizar el acoplamiento. Separacin entre parte pblica y parte privada (oculta). Necesidad de aadir documentacin a la parte pblica: qu Las especicaciones formales son una magnca opcin para
Mdulos
El mdulo es un mecanismo lingstico que permite:
1. Separar fsicamente los componentes software de un programa. 2. dividir cdigo en unidades compilables por separado. 3. Permite encapsulacin y ocultacin de datos y cdigo.
Los mdulos pueden encapsular:
la implementacin.
Ocultar la denicin de los tipos. Ocultar la implementacin de sus operaciones. Ocultar las operaciones privadas.
Ocultar la denicin de los tipos. Ocultar la implementacin de sus operaciones. Ocultar las operaciones privadas.
Ventajas:
Facilita la tarea del programador: abstraccin de los detalles. Permite controlar el acoplamiento y facilita la reusabilidad del cdigo. Permite el desarrollo independiente y paralelo de aplicaciones. Permite el desarrollo de versiones mejoradas de bibliotecas sin afectar al cdigo que las utiliza. Permite distribuir implementaciones empaquetadas.
Mecanismos de ocultacin
No todos los lenguajes dan las mismas facilidades (C vs. Ada). Qu hacen los programadores ante un lenguaje sin soporte
explcitos de ocultacin.
La ocultacin puede tener lugar a varios niveles:
Restriccin de acceso a nombres. Restriccin de acceso a funciones y estructuras de datos (aun conociendo su nombre y componentes). Imposibilidad de inspeccin visual del cdigo (ej., cdigo precompilado).
necesarios. Nombres de tipos (y quiz denicin de las estructuras de datos como en Ada).
Nombres de las
de dichas operaciones.
Parte Privada
Solicitud de mdulos
necesarios. Nombres de tipos (y quiz denicin de las estructuras de datos como en Ada).
Nombres de las
necesarios en la implementacin.
Implementacin de las
operaciones pblicas.
Declaracin e implementacin
de dichas operaciones.
Mdulos en Ada 95
Interfaz (.ads): declaracin de tipos, constantes y operaciones que ofrece el mdulo (tb. la denicin de tipos en determinadas circunstancias). Implementacin (.adb): denicin (implementacin) de tipos y operaciones.
Nos centraremos en la escritura y uso de mdulos de biblioteca
Interfaz (.ads): declaracin de tipos, constantes y operaciones que ofrece el mdulo (tb. la denicin de tipos en determinadas circunstancias). Implementacin (.adb): denicin (implementacin) de tipos y operaciones.
Nos centraremos en la escritura y uso de mdulos de biblioteca
puntos.adb
gnatgcc c
puntos.o
puntos.ads
gnatlink
test_puntos
gnatgcc c
test_puntos.o
test_puntos.adb
Fichero de interfaz
Deben aparecer declarados los tipos, procedimientos, etc,
para declarar las operaciones y tipos que exporte el mdulo (ej., with Puntos; para implementar el mdulo Rectas).
Se pueden exportar variables (pero normalmente no usaremos
esta capacidad).
Tambin se pueden denir y exportar constantes Las declaraciones ms tiles sern las de tipos y operaciones. Se nombra con el nombre del mdulo seguido del sujo .ads El chero con el interfaz puede compilarse, lo que permite
Ejemplo
package Puntos is type Punto is private; function Crear (Coordx, Coordy : Float) return Punto; function Valor_X (P : Punto) return Float; function Valor_Y (P : Punto) return Float; function Distancia (P1, P2 : Punto) return Float; function Es_Origen (P : Punto) return Boolean; private type Punto is record X, Y : Float; end record; end Puntos;
Fichero de implementacin
Ofrece la implementacin de los tipos y operaciones del mdulo. Completa la denicin de los tipos opacos (en caso de haberlos,
.adb.
Lo importado (with) por el .ads es importado automticamente
por el .adb
Las constantes, tipos, variables y procedimientos que aparezcan
Ejemplo
with Ada.Numerics.Elementary_Functions; use Ada.Numerics.Elementary_Functions; package body Puntos is function Crear (Coordx, Coordy : Float) return Punto is P : Punto; begin P := (X => Coordx, Y => Coordy); return P; end Crear; function Valor_X (P : Punto) return Float is begin return P.X; end Valor_X; etc. end Puntos;
Ejemplos/Ada/Modulos
Puntos en el espacio de dos dimensiones (ver LEEME). Versin monoltica: test_puntos0.adb Versin modular, primer intento: puntos1.{ads,adb} +
test_puntos1.adb
Versin modular, segundo intento: puntos2.{ads,adb} +
test_puntos2.adb
Versin modular, tercer intento: puntos3.{ads,adb} +
test_puntos3.adb
Exportacin e importacin
Para usar las operaciones y componentes de un mdulo hay que
Calicar o no
Qu importacin usar?
Calicar o no
Qu importacin usar? Como regla general:
Posiblemente no calicada para mdulos estndar del sistema (ej. Ada.Text_IO, Ada.Numerics.Elementary_Functions). Calicada para los mdulos de usuario.
Calicar o no
Qu importacin usar? Como regla general:
Posiblemente no calicada para mdulos estndar del sistema (ej. Ada.Text_IO, Ada.Numerics.Elementary_Functions). Calicada para los mdulos de usuario.
Ventajas:
Facilita distinguir rpidamente a qu mdulo pertenece cada operacin. Permite usar varios mdulos que tengan operaciones con el mismo nombre. (ej. Rectas.Crear() y Puntos.Crear()).
Calicar o no
Qu importacin usar? Como regla general:
Posiblemente no calicada para mdulos estndar del sistema (ej. Ada.Text_IO, Ada.Numerics.Elementary_Functions). Calicada para los mdulos de usuario.
Ventajas:
Facilita distinguir rpidamente a qu mdulo pertenece cada operacin. Permite usar varios mdulos que tengan operaciones con el mismo nombre. (ej. Rectas.Crear() y Puntos.Crear()).
De todas formas, en ada es posible que dos mdulos exporten
operaciones con el mismo nombre si trabajan con tipos diferentes: sobrecarga (overloading ).
exclusivamente: declarar variables de ese tipo, acceder al tipo mediante las operaciones del interfaz y utilizar los operadores de asignacin (:=) e igualdad (=) limited. Por tanto tenemos muy controlado el acoplamiento.
Ejercicios propuestos
Modicar la implementacin del TAD de los puntos pasando a
operaciones que pueden considerarse esenciales (entre ellas estarn los constructores, las operaciones observadoras y una operacin que decida si un punto pertenece a una recta).
Genricos ADA
software. Ada proporciona una herramienta muy potente para disear componentes reusables.
Ada permite escribir una solucin general (template) y luego
dejar que el compilador modique dicha solucin para cada problema particular.
El mecanismo que ofrece Ada se denomina unidades genricas
(o smplemente genricos).
La solucin especca creada por el compilador se denomina
instancia. Cualquiera de los libros sobre Ada (por ejemplo [Fel97, DLM96]) contiene una descripcin de los genricos en detalle.
formales genricos.
Dichos parmetros ofrecern la informacin que el compilador
Declaracin de genricos
El esquema sintctico para declarar (no implementar) una unidad
genrica es el siguiente:
generic Aqui aparecen las decls. de parametros genericos Los que son operaciones empiezan por with Aqui sigue la especicacion del paquete o declaracion de procedimiento/funcion
aparecen entre la palabra reservada generic y el comienzo de la especicacin del paquete o de la declaracin del procedimiento.
Posibles parmetros genricos:
Tipos: type identicador . . . Valores: X : tipo Procedimientos: with procedure identicador (. . . ) Funciones: with function identicador (. . . )
modular p. 23/28 Programacion
Intercambiar_Natural que reciben dos datos in out e intercambian sus valores y un programa que pruebe dichas operaciones (test_intercambiar_nat_y_bool.adb).
Abstraer los esquemas anteriores mediante una operacin
que suma 10, suma 25 y resta 10, respectivamente, al argumento de tipo entero.
Abstraer los esquemas anteriores mediante una operacin
dos valores dados. Abstraer los esquemas anteriores mediante una operacin genrica que denominaremos Maximo_Generico (maximo_generico.{ads,adb}).
Implementar un programa de prueba que instancie la operacin
genrica para obtener las anteriores, en particular para denir las operaciones Maximo y Minimo sobre Float, Maximo sobre un tipo que representa cartas de la baraja francesa y Maximo en los booleanos con True > False (test_maximo_generico.adb).
type identicador is (<>) type identicador is range <> type identicador is digits <> type identicador is private type identicador is limited private type identicador dec. de tipo array
Cada una de esas declaraciones impone restricciones a los
range <>
digits <>
Referencias
[DLM96] Nell Dale, Susan C. Lilly, and John McCormick. Ada plus data structures. An object oriented approach. D. C. Health and Company, 1996. [Fel97] Michael B. Feldman. Software Construction and Data Structures with Ada 95. Addison Wesley, 1997.
28-1