Unidad 5

Unidad 5. Diseño Modular

 

5.1 Introducción

 

Para comprender la programación modular, es importante describir la siguiente analogía:

 

Suponga que la señora Juanita  prepara memelas en un lugar cercano al zócalo de la Ciudad. Ella sola realiza el conjunto de tareas que implican preparar  memelas, es decir, pica cebollas, muele la salsa en la licuadora, fríe las tortillas, vierte salsa sobre las tortillas, revisa que estén en su punto, además cobra y devuelve cambio. Todas estas actividades las realiza una sola persona.

 

Si hablamos de programación, los programas que sólo tienen la función principal, son como la señora Juanita, que realizan un conjunto de tareas secuencialmente, lo cual hace más complicada su legibilidad y mantenimiento.

 

Regresando a la analogía, la señora ahora contrata un cierto número de personas para ayudarle en el proceso de elaboración de memelas. A cada señora le es encomendada una tarea o función. Cuando alguna de las señoras contratadas termina su tarea, ésta informa a la señora Juanita que ha terminado y le devuelve  el resultado de su tarea. Cuando todas las señoras han terminado su tarea, el problema complejo de elaborar memelas ha concluido. El problema fue dividido entre varias señoras, para su realización, éstas fueron coordinadas por la señora Juanita que  indica el orden de realización de las tareas.

 

En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles de resolver. Cada problema se resuelve por una función o modulo. Una vez que cada modulo resuelve su tarea, el problema complejo ha sido resuelto en su totalidad [2].

 

Si algún subproblema, aún es demasiado complejo, éste es dividido a su vez, en subproblemas, y así sucesivamente. Observemos el siguiente diagrama para ilustrar lo anterior.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Figura 5.1 División de problemas en subproblemas

5.2  Conceptos de módulo

a)    Es un conjunto de instrucciones o sentencias que resuelven una tarea especifica, al cual se hace referencia por medio de un nombre. Éste puede invocarse varias veces en un programa.

b)    Es un  proceso con cierto grado de independencias del modulo principal (programa principal).

c)    Es un subprograma que resuelve una parte del problema.

d)    El concepto de modulo tiene varias acepciones, dependiendo del 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

 

Los módulos tienen un formato bien definido para su utilización:

 

  • 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.

 

Esquemáticamente podemos observar el formato de un módulo como el siguiente:

 

 

 [ Tipo ] Nombre del modulo (tipo param1, tipo param2,… tipo paramn)

Inicio

Sentencia 1;

Sentencia 2;

Sentencia n;

[ Devolver ( expresión ) ]

FinModulo

 

 

 

 

 

 

 

 

 


Esquema  5.2 Sintaxis de la declaración de un módulo en pseudocódigo [2]

 

 

Los elementos del formato de un módulo que se encuentran entre corchetes indican  que son opcionales, es decir, podemos prescindir de ellos. La lista de parámetros aparece después de nombrar al módulo y siempre  se encuentra delimitada por los paréntesis, el número de parámetros van desde 0 hasta n.

 

Estos parámetros se les denominan parámetros formales, mientras que cuando se realiza el llamado del módulo desde cualquier otro, a estos parámetros se les llama actuales y se enlazan con cada uno de los formales para llevar a cabo la ejecución.

 

En particular un módulo puede ser de dos tipos: funciones o procedimientos, las funciones se caracterizan porque siempre devuelven un valor mientras  que los procedimientos pueden devolver 0,1 o n valores en forma de lista de parámetros.

Características que deben tener los módulos

 

a)    Deben esta jerarquizados

b)    Deben  ser pequeños y sencillos

c)    Deben ocultar los detalles poco importantes a módulos superiores en jerarquía.

d)    Debe usar tantos módulos de más baja jerarquía como sea necesario para cumplir con el modo b)

e)    Deben usar estructuras de datos y control adecuados para cumplir con el punto b)

f)     Deben ser legibles, es decir que no solo el autor pueda entenderlos, sino cualquiera que tenga acceso a ellos con un conocimiento fundamental de programación

 

 

5.3  Ventajas de la modularidad

 

El uso de modularidad para diseñar programas tiene varias ventajas:

a)    Disminuye la complejidad del problema a resolver.

b)    Aumenta la legibilidad y confiabilidad

c)    Disminuye costos computacionales.

d)    Se obtiene un mejor control del proyecto.

e)    Se pueden agregar nuevos módulos.

f)     Facilita el mantenimiento

 

La programación modular se representa por medio de bloques donde cada uno hace referencia a un modulo. En la representación esquemática, se manifiesta la comunicación entre el módulo principal y los módulos secundarios.

 

El modulo principal coordina a todos los demás módulos. Debe ser claro y conciso, y reflejar los elementos fundamentales del problema.

 

5.4 Proceso de modularización (“divide y vencerás”)

 

El proceso de subdivisión del problema complejo en subproblemas más fáciles de resolver consiste en la comprensión total del problema y posteriormente se procede a la subdivisión de éste en partes más pequeñas.

 

Se llevan a cabo las siguientes 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).

5)    Se realizan pruebas de escritorio parciales a cada módulo, para asegurarse  que éstos realizan correctamente su tarea especifica.

6)    Se realiza una prueba de integración en la que se consideran todos los módulos, así como el módulo principal.

7)    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.

 

5.5 Llamada a los módulos

Variables globales, locales y parámetros

 

En el diseño modular participan tres tipos de variables que reciben su nombre dependiendo de su  ámbito de operación.

 

  • 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.

 

Existen dos tipos de parámetros:

 

Por Valor. Son constantes, el valor en sí mismo de los datos que se envían como argumentos en la invocación o llamada al módulo, la cual se realiza, escribiendo únicamente el dato del módulo y sus parámetros en el caso de que tenga.

 

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.

 

 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.

 

 

Por ejemplo la librería matemática contiene los módulos entre otros [2]:

 

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

 

Tabla 5.1 División de problemas en subproblemas

 

 

Ejemplo 5.1

 

Si deseas calcular la raíz cuadrada de un número, podemos realizar las siguientes operaciones:

 

 

Leer x;

Real  r = raiz2( x )  // calcula la raíz cuadrada de x

Escribir  r

 

 

 

 

 

 

 

 


Esquema  5.1 Sintaxis de la declaración de un módulo en pseudocódigo

 

 

5.5 Ejemplos de programación modular

 

Ejemplo 5.1 Circunferencia

 

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)

 

 

 

 

 


Paso 3. El problema puede ser dividido en los siguientes módulos

 

Circunferencia

(Principal)

Área

Perímetro

Diámetro

 

 

 

 

 

 

 

 

 


En este caso no es necesario seguir dividiendo los módulos en submódulos.

 

Paso 4: Diseñar la lógica de programación de cada modulo, iniciando desde los módulos de nivel mas inferior.

 

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 = “, A

FinModulo

 

Paso 5. Realizar pruebas de escritorio a cada modulo individualmente

Paso 6. Realizar pruebas de escritorio  integrando todos los modulo.

 

 

Ejemplo 5.2

 

Coeficiente Binomial.  Algoritmo modular para calcular el coeficiente binomial definido como:

 

C(n, k ) =  n! / k! * (n – k )!

 

Análisis:    

Datos:   n, k

Procesos:   Factorial de un número y  C(n,k).

 

 

 

 

 

 

 

 

 

 

Coeficiente

Binomial (Principal)

CoefBin

Factorial

Coeficiente

Binomial

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Real Factorial (real n)

Inicio

Real f=1;

Entero i

            Para i= 1 hasta n hacer

                          f = f *i

            finpara

            regresar(f)

FinModulo

 

Real CoefBin( real n, real k)

Inicio

Regresar( factorial(n) / (factorial(k)* factorial (n-k))

FinModulo

 

Nada CoeficienteBinomial( Principal )

Inicio

            Real n, k

            Leer n, k

            Escribir  “ Coeficiente Binomial =“,  CoefBin(n, k )

FinModulo (Principal)

Tu hora
 
Utilidades
 
Utilidad para programar

PSeInt

Busca descargas en el menu
Creadores
 
Eduardo Siliceo Mejia
Pablo Leon Morales
Bernardo Mateo Camacho
Soporte
 
Tienes dudas mandanos
un mensaje en la
pestaña de contacto
 
Hoy habia 3 visitantes (4 clics a subpáginas) ¡Aqui en esta página!
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis