Unidad 5
Diseño modular
En la programación modular, el problemacomplejo es dividido en subproblemas máspequeños o más fáciles de resolver.
Cada problema se resuelve por una función omodulo. Una vez que cada modulo resuelvesu tarea, el problema complejo ha sidoresuelto en su totalidad.
Si algún subproblema, aún es demasiadocomplejo, éste es dividido a su vez, ensubproblemas, y así sucesivamente
Conceptos de módulo
Es un conjunto de instrucciones o sentencias que resuelvenuna tarea especifica, al cual se hace referencia por medio deun nombre. Éste puede invocarse varias veces en unprograma.
Es un proceso con cierto grado de independencias delmodulo principal (programa principal).
Es un subprograma que resuelve una parte del problema.
El concepto de modulo tiene varias acepciones, dependiendodel lenguaje de programación: subrutinas (Basic y Fortran),procedimientos y funciones (Pascal y Delphi, Ada, etc.),funciones o métodos (C++, Java y C#)
Declaración de un módulo
Tiene un tipo de retorno
Tiene un nombre o identificador.
Puede tener o no lista de parámetros (elementos de
comunicación con el modulo principal)
Tiene un cuerpo o conjunto de instrucciones que
resuelven una tarea especifica.
Pueden o no devolver un valor del algún tipo de
dato básico, estructurado o definido por el usuario.
Sintaxis
[ Tipo ] Nombre del modulo (tipo param1, tipo param2,…, tipo paramn)
Inicio
Sentencia 1;
Sentencia 2;
…
Sentencia n;
[ Devolver ( expresión ) ]
FinModulo
Opcional: procedimiento
Obligatorio: función
Opcional: procedimiento
Obligatorio: función
Ventajas de la modularidad
Disminuye la complejidad del problema a
resolver.
Aumenta la legibilidad y confiabilidad
Disminuye costos computacionales.
Se obtiene un mejor control del proyecto.
Se pueden agregar nuevos módulos.
Facilita el mantenimiento
Fases para la modularización
1) Se realiza un análisis del problema considerando las
especificaciones del mismo (comprensión del problema)
2) Se forma un primer modulo enunciando el problema en términos
de la solución a éste.
3) Se toma este módulo y se busca la forma de dividirlo en otro
módulos más pequeños que ejecuten tareas o funciones
especificas.
4) Se repite el paso 3) para cada módulo nuevo definido, hasta llegar
a un nivel de detalle adecuado, es decir, hasta que cada módulo
ejecute una tarea especifica, que este claramente definida y que el
diseño de la lógica del mismo resulte fácil (utilizando
pseudocódigo).
4) Se realizan pruebas de escritorio parciales a cada
módulo, para asegurarse que éstos realizan
correctamente su tarea especifica.
5) Se realiza una prueba de integración en la que se
consideran todos los módulos, así como el módulo
principal.
6) Si es el caso, se codifican los módulos en un lenguaje
de programación, iniciando desde los módulos del nivel
más inferior en la estructura jerárquica de la solución.
Variables globales, locales y
parámetros Las variables globales son aquellas que se definen o declaran
fuera del módulo principal y tienen efecto en todos los módulos.
Esto es, una variable global puede ser modificada en cualquier
módulo incluido el principal.
Las variables locales son las que se definen dentro de un módulo,
y son distintas a las que se definen en otros módulos, a pesar de
que pueden tener el mismo nombre. El contexto de estas variables
es el módulo donde se declaran, fuera de éstos no son reconocidas
o válidas.
Los parámetros son un mecanismo de comunicación o intercambio
de información entre los módulos, inclusive el módulo principal. Se
relacionan de acuerdo a su posición y el tipo de dato asociado.
Algoritmo: Nombre
/* Descripción del algoritmo
Var de Entrada
Var de Salida
*/
Var Globales
/*Módulos*/
[ Tipo ] Nombre del modulo (tipo param1, tipo param2,…, tipo paramn)
Inicio
Var locales
Sentencia 1;
…
Sentencia n;
[ Devolver ( expresión ) ]
FinModulo
NombreAlgoritmo(Principal)
Inicio
Var locales
Sentencia 1;
…
Sentencia n;
FinModulo
Módulos predefinidos por el sistema
(funciones) Existen algunos módulos definidos por defecto en el
sistema, los cuales se pueden clasificar dependiendo de
la función de éstos.
Para el uso de estos módulos, solamente debemos
invocarlos mediante su nombre y parámetros,
agregando previamente la librería donde se encuentran
definidos.
La librería contiene a un conjunto de módulos que se
pueden utilizar.
Estos módulos pueden ser: matemáticos, carácter,
cadena, etc.
Ejemplo: la librería matemática contiene los
siguientes módulos entre otros:Función Descripción
exp(x) exponencial de x, x es entero o real
ln(x) logaritmo neperiano de x, x es
entero o real
raiz2(x) raíz cuadrada de x, x es entero o
real
seno(x) Seno de x, x es entero o real
redondeo(x) redondea x, x es real
Ejemplo
Elaborar un algoritmo modular para calcular el área,
perímetro y diámetro de una circunferencia de radio R.
Paso 1. Se consideran los datos de entrada, salida y
procesos para realizar los cálculos que resuelven el
problema.
Datos de entrada: Radio R
Datos de salida:
Area = Pi*R*R
Perímetro= 2*Pi*R
Diámetro = 2*R
Paso 2.
Circunferencia
(Principal)
Área Perímetro Diámetro
Circunferencia
(Principal)
Paso 3.
Real Area (real R)// declaración del módulo
Inicio
Real a
a=Pi*R*R
Regresar( a)
FinModulo
Real Perimetro(real R)
Inicio
Real p
p=2*Pi*R
Regresar( p)
FinModulo
Real Diametro(real R)
Inicio
Real d
d=2*R
Regresar( d)
FinModulo
Circunferencia (Principal)
Inicio
Real radio, A,P,D
Escribir “Ingrese radio:”
Leer radio
A= Area( radio) /* llamada del modulo */
P= Perimetro( radio)
D= Diametro( radio)
Escribir “ El area es = “, A
Escribir “ El perimetro es = “, P
Escribir “ El Diametro es = “, D
FinModulo
Paso 4: Diseñar la lógica de programación
de cada modulo, iniciando desde los módulos
de nivel más inferior.
Ejercicio
Algoritmo modular para calcular el coeficiente
binomial definido como:
C(n, k ) = n! / k! * (n – k )!
Coeficiente
Binomial (Principal)
CoefBin
Factorial
Real Factorial (real n)
Inicio
Real f=1;
Entero i
Para i= 1 hasta n incrementos 1 hacer
f = f *i
finpara
regresar(f)
FinModulo
Real CoefBin( real n, real k)
Inicio
Regresar( factorial(n) / (factorial(k)* factorial (n-k))
FinModulo
CoeficienteBinomial( Principal )
Inicio
Real n, k
Leer n, k
Escribir “ Coeficiente Binomial =“, CoefBin(n, k )
FinModulo
Variables locales
Son las que se declaran dentro de un módulo
(son locales a dicho modulo) y sólo se
pueden utilizar en el módulo en el que se han
declarado.
Se pueden declarar variables con el mismo
nombre en distintos módulos, a la hora de
ser utilizadas cada módulo podrá utilizar su
variable local, nunca una variable declarada
en otro módulo, aunque se llame igual.
Ejemplo
Variables globales
Se declaran de forma que puedan ser utilizadas por
todos los módulos.
La forma de declarar variables globales depende del
lenguaje de programación utilizado; en algunos casos
las variables globales se declaran fuera de cualquiera de
los módulos del programa, en otros se declaran dentro
de un módulo indicando de forma explícita que son
globales.
En cualquier caso, una variable global puede ser
utilizada (consultada y/o modificada) desde cualquier
módulo del programa.
Una variable global puede tener el mismo nombre que alguna de las
variables locales de alguno de los módulos (variable „A‟).
En los módulos donde no se ha declarado una variable A, siempre que se
haga referencia a dicha variable se estará accediendo a la variable global.
En el módulo 1, donde existe una variable local „A‟ si se hace referencia a
dicha variable, lo habitual, es que se acceda a la variable local.
Para acceder a la variable global dentro del módulo 1 habrá que utilizar un
mecanismo que indique de forma explícita que lo que se desea es acceder
a la variable global, este mecanismo dependerá del lenguaje de
programación empleado.
En cualquier caso y para evitar confusiones es recomendable que cuando
se empleen variables globales, sus nombres no coincidan con los nombres
de las variables locales de ninguno de los módulos.
Acoplamiento común, se da cuando varios módulos
pueden acceder a una misma área de datos.
En el primer caso los tres módulos acceden a la misma
área de memoria global donde se encuentra la variable
„A‟, el inconveniente de esto podría estar en que si por
ejemplo el módulo 2 modifica la variable „A‟ dejando en
ella un valor erróneo, el módulo 3 podría no funcionar
correctamente.
En el segundo caso, el módulo 1 (modulo principal) tiene
el control sobre la variable „A‟, y es este módulo el que
pasa al resto dicha variable como argumento, de esta
forma al módulo 3 no le afecta en nada lo que el módulo
2 pueda hacer con la variable „A‟ (eliminación de
acoplamiento común).
Tipos de parámetros
Por Valor. Cuando se llama a un módulo pasándole un argumento por
valor el módulo llamado recibe una copia del valor del argumento, de forma
que si dicha copia es modificada, el argumento original del módulo llamador
no sufre ningún cambio.
Una característica de los paramentos por valor es que éstos copian sus valores en los
argumentos de los módulos. Al finalizar la llamada del módulo, los parámetros no se ven
modificados; no alteran su valor.
Por referencia: son variables; es copia de la referencia o localidad de
memoria donde se encuentran los datos que se envían como argumentos
en la invocación. La característica de estos parámetros es que son
modificados dentro del módulo en el cual fueron invocados. Con el uso de
parámetros por referencia, un módulo puede devolver más de un valor al
módulo principal o a los módulos que lo invoquen.
EjemploPor valor Por referencia
Ejemplo (Entero x por valor)
Inicio
x = x +1
FinModulo
Modulo(Principal)
…
Entero a
a = 2
…
/*Llamada a „Ejemplo‟ */
Ejemplo(a)
/* en este punto la variable ‘a‟
vale „2‟ */
…
FinModulo
Ejemplo (Entero x por referencia)
Inicio
x = x +1
FinModulo
Modulo(Principal)
…
Entero a
a = 2
…
/*Llamada a „Ejemplo‟ */
Ejemplo(a)
/* en este punto la variable „a‟
vale ‘3’ */
…
FinModulo
Bibliografía
Jesús Javier Rodríguez Sala. Introducción a
la programación: teoría y práctica
www.cmonkeys.net/blog/?p=14396