Concepto de módulo
Un modulo es un fragmento de programa independiente utilizado en algún momento para la construcción del programa completo.
Un modulo debería ser compilado por separado. La razón se debe a la necesidad de limitar la complejidad de aquello que esta siendo elaborado por una persona en un momento dado.
El concepto de modula esta ligado a la idea de abstracción. Un modulo debe definir un elemento abstracto y debe ser usado desde fuera con solo saber que hace el modulo pero sin saber como lo hace.
Especificación y realización
La especificación de un modulo que contenga la definición de una serie de elementos abstractos consiste en el conjunto de las
especificaciones de cada uno de ellos mas una indicación de los posibles efectos de unos sobre otros cuando se usan en forma combinada.
Es todo lo necesario para poder usar los elementos definidos en el. Constituye el interface entre el modulo y el programa que lo usa.
La realización del modulo consiste en la realización de cada
uno de los elementos abstractos contenidos en dicho modulo.
La independencia entre la realización de un modulo y el programa
que lo usa se incrementa si la realización de un elemento abstracto no es visible desde donde se usa. Esta característica se denomina ocultación (mecanismo de visibilidad de los bloques)
Técnicas empleadas por lenguajes de programación reales
Descomposición modular
Esta descomposición permite trabajar a distintos programadores en el mismo programa.
El objetivo de la ingeniería de software es facilitar el desarrollo de la aplicación en forma organizada. Para que la descomposición en módulos sea adecuada, los módulos tienen que ser completamente independientes. Esta independencia se analiza según el acoplamiento y cohesión.
Módulos en Modula-2
Modulo principal
La ejecución del programa equivale a ejecutar este modulo.
A partir de este, se pueden importar los demás módulos.
Módulos de definición
La especificación de un modulo se escribe como modulo de definición:
DEFINITION MODULE Nombre;
...lista de importaciones...
...definiciones...
END Nombre.
Las listas de importaciones se escriben igual que para el modulo principal.
Las definiciones pueden incluir definiciones de constantes, tipos y variables, también pueden incluir especificaciones de subprogramas.
Una especificación de subprograma consistirá en la cabecera de la función o procedimiento.
La lista de exportación solo se emplea en versión antiguas de Modula-2, en las versiones actuales, todos los elementos del modulo de definición se exportan implícitamente.
Módulos de implementación
Contienen la realización del modulo.
IMPLEMENTATION MODULE Nombre;
...lista de importaciones...
...definiciones...
BEGIN
...sentencias de inicializacion...
END Nombre.
Las sentencias ejecutables que figuran al final del modulo son opcionales. Estas sentencias se ejecutan automáticamente al comienzo de la aplicación, antes de que se ejecute el programa principal, y antes de que se ejecute la inicialización de cualquier otro modulo que utilice este modulo.
Según la jerarquía de módulos reflejada en el diagrama de estructura de una aplicación, comprobamos que se ejecutan estrictamente de abajo a arriba, empleando por inicializar los módulos que no usan a ningún otro, luego los que usan estos, y terminando por ejecutar el modulo principal.
Uso de módulos
Los elementos definido en un modulo se pueden usar desde otro. Para ello hay que importarlos. La importación se realiza al comienzo del programa o modulo que desea usarlos.
Formas para importar
Tipos abstractos de datos
Un enfoque mas moderno de la programación trata de asociar la idea de tipo de datos con la clase de valores, abstractos, que
pueden tomar los datos.
Los valores de los tipos enumerados no son valores numéricos, ni ristras de caracteres, aunque pueden transformarse en esas otras formas.
En este enfoque, llegamos a la idea de tipos abstractos, esto quiere decir que un programa que use ese tipo de datos no debería necesitar ningún cambio por el hecho de modificar la representación o codificación de los valores de ese tipo. Si analizamos con cuidado que necesita un programa para poder usar datos de un tipo, encontraremos que hace falta:
El conjunto de todos estos elementos constituye el tipo abstracto de datos (Agrupación de una colección de valores y una colección de operaciones de manipulación)
Desarrollo modular basado en abstracciones
Abstracciones para desarrollo modular
Las abstracciones se llaman abstracciones funcionales, con independencia de que sean una función propiamente dicha o bien un procedimiento que realiza una acción.
El mecanismo de módulos permite ampliar el repertorio de abstracciones, a las que se les denominan abstracciones de datos y por demos distinguir, los tipos abstractos de datos y los datos abstractos (encapsulados)
Desarrollo por refinamiento basado en abstracciones
La única novedad que se introducen ara son las abstracciones
de datos y la posibilidad de desarrollar también las abstracciones funcionales como módulos separados.
Reutilización de módulos
Se suele considerar que la descomposición modular basada en abstracciones es una buena metodología para desarrollar módulos
que van a ser reutilizados en el futuro.
Los módulos que definen abstracciones relacionadas entre si pueden agruparse en una biblioteca que se pone a disposición de quienes desarrollan aplicaciones en un campo determinado.