Programación modular
Enviado por oscar8831 • 16 de Abril de 2015 • 2.274 Palabras (10 Páginas) • 172 Visitas
Programación modular
Una vez que los programas se fueron haciendo todavía más complejos y, por lo tanto, mayores, aún fue necesario crear un nivel más de división. Así, ahora era necesario organizar todos los procedimientos y funciones de alguna forma. Los módulos agrupan, precisamente, procedimentos y funciones afines, y también los datos que manipulan, de manera que aquellos que no son empleados por el resto de módulos quedan ocultos la ellos. Modula-2 (desarrollado a finales de los 70, también por Niklaus Wirth, es el sucesor directo de Pascal) es un buen ejemplo de lenguaje de programación basado en módulos. Otro lenguaje que la soporta es Ada. 13
La meta de la programación modular es obtener una organización de la arquitectura del software, con un diseño no orientado a la simple obtención del programa final, sino también a su mantenimiento, a su reutilización y a poder probarlo y entenderlo de forma fácil.
Para ello, los algoritmos complejos y los programas se estructuran en módulos y éstos se estructuran en funciones y procedimientos. Al fin y al cabo, recordemos que las funciones y procedimientos, son porciones de código diseñadas para realizar tareas muy específicas.
Los módulos deben agrupar funcionalidades del software a desarrollar, de tal forma que, en el desarrollo de una aplicación de hoja de cálculo, por poner un ejemplo, todo el manejo de operaciones matemáticas resida en mismo módulo. También todas las funciones que tienen que ver con el manejo de fórmulas definidas por el usuario, deben estar en otro módulo aparte (que probablemente necesite el módulo de matemáticas para funcionar), y así sucesivamente. El objetivo final sería poder reutilizar estos módulos en otras aplicaciones.
La programación modular persigue que cada módulo y función o procedimiento, cumpla las siguientes características:
Pequeño tamaño: de esta forma el impacto de un cambio puede ser perfectamente aislado.
Independencia modular: cuanto mayor es la independencia de los módulos y los procedimientos y funciones, más sencillo es trabajar con él. El diseño debe reducir la necesidad de compartir ficheros, datos, dispositivos y llamadas desde o hacia otros módulos y procedimientos y funciones.
Características de caja negra: visión exclusiva de la funcionalidad de un módulo o procedimiento/función en base a sus entradas y salidas sin tener en cuenta como se realiza el proceso.
Modelo conceptual: un diseño es más fácil de mantener si el modelo de diseño empleado se ha basado en conceptos lógicos de organización, los cuales sean más familiares y comprensibles para el personal de mantenimiento.
Aislamiento de los detalles (encapsulación): en un sistema existen partes que reflejan la filosofía y otras que reflejan los detalles. Ambas partes deben diseñarse por separado para evitar que una variación en los detalles afecte a la filosofía del sistema.
Para conseguir los objetivos marcados se necesitan estrategias de diseño. Una de las principales se basa en la disposición de tareas, es decir, descomponer una tarea en otras más sencillas que se hayan identificado en la tarea de partida.
Una vez descompuesto el software en tareas, normalmente cada una de ellas será un procedimiento. Estos procedimientos se agruparán en módulos distintos, conformando grupos que representen las distintas categorías basadas en el tipo de problema que resuelven conceptualmente.
La descomposición en tareas persigue la reducción del tamaño de los procedimientos hasta conseguir un sistema más fácil de entender y modificar, minimizando la duplicidad del código, así como la creación de módulos y procedimientos o funciones útiles y reutilizables. De hecho, si se desarrolla un módulo con varios procedimientos y funciones para, por ejemplo, funciones matemáticas, este podrá ser reutilizado en aplicaciones futuras.
Para medir la calidad de un diseño modular se emplean las medidas de cohesión y acoplamiento que se pueden aplicar sobre módulos y procedimientos o funciones.
Cohesión: es la medida de la fuerza o relación funcional de los elementos de un módulo (entendiendo por elementos, los procedimientos o funciones que lo componen, las definiciones de los datos y las llamadas a otros módulos). Un módulo coherente se encarga de una tarea relativamente sencilla en un programa
y requiere de poca interacción con el resto de módulos y/o procedimientos y funciones. Por ejemplo, en un módulo de matemáticas, las funciones contenidas deben estar todas relacionadas con cálculos matemáticos, exclusivamente.
Acoplamiento: grado de interdependencia entre los distintos módulos. En general, dos módulos no deben compartir estructuras de datos o variables. Por otro lado, cada módulo debe definir las funciones y procedimientos, estructuras de datos y variables que le resulten necesarias para la realización de su función específica. Así, el módulo de matemáticas ya comentado no debe necesitar en absoluto de otros módulos para trabajar. Otros módulos más complejos pueden necesitar a su vez de módulos que le sirvan para proveer de más funcionalidad, pero siempre de la manera más independiente posible.
Como ya se ha establecido, con respecto a las funciones y procedimientos, cada uno de ellos debe depender exclusivamente de los parámetros que intercambia con las demás procedimientos y funciones.
Mejorar la calidad implica aumentar la cohesión y disminuir el acoplamiento, debido a las siguientes razones:
Cuantas menos conexiones existan entre los módulos, menos oportunidades habrá de que el efecto de un módulo sea contraproducente para otro.
Si se desea tener la posibilidad de cambiar un módulo por otro (con la misma funcionalidad) con el mínimo riesgo, es decir, que el cambio afecte lo menos posible a otros módulos entonces el acoplamiento debe ser mínimo y la cohesión máxima.
Mientras se está manteniendo un módulo, es deseable que no sea necesario preocuparse en los detalles internos de otros módulos.
Módulos de mayor nivel
Los lenguajes de programación actuales permiten la creación de módulos y procedimientos o funciones. Modula-2 (sucesor de Pascal), fue el primero en soportar 15 los módulos completamente usando unidades de compilación independiente, conocidas como Module (estas encontrarían su lugar en Turbo Pascal de Borland, como Units).
Estos módulos se componen de funciones o procedimientos que permiten la realización de tareas específicas.
Se pueden entender los módulos, que agrupan procedimientos y funciones
...