Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación...

29
Unidad 5 Diseño modular

Transcript of Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación...

Page 1: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

Unidad 5

Diseño modular

Page 2: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles
Page 3: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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

Page 4: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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

Page 5: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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.

Page 6: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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

Page 7: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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

Page 8: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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

Page 9: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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.

Page 10: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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.

Page 11: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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

Page 12: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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.

Page 13: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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

Page 14: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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

Page 15: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

Paso 2.

Circunferencia

(Principal)

Área Perímetro Diámetro

Circunferencia

(Principal)

Paso 3.

Page 16: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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.

Page 17: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

Ejercicio

Algoritmo modular para calcular el coeficiente

binomial definido como:

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

Page 18: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

Coeficiente

Binomial (Principal)

CoefBin

Factorial

Page 19: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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

Page 20: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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.

Page 21: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

Ejemplo

Page 22: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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.

Page 23: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles
Page 24: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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.

Page 25: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

Acoplamiento común, se da cuando varios módulos

pueden acceder a una misma área de datos.

Page 26: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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

Page 27: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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.

Page 28: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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

Page 29: Unidad 5 - cs.buap.mxmtovar/doc/Unidad5.pdf · Unidad 5 Diseño modular En la programación modular, el problema complejo es dividido en subproblemas más pequeños o más fáciles

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