Fundamentos de Programación I
Fundamentos de Programación I
4 Programación modular
4. Programación modular
Luís Rodríguez Baena (
[email protected])
Universidad Pontificia de Salamanca (campus Madrid)
Escuela Superior de Ingeniería y Arquitectura
Introducción a la programación
modular
odu a
Es más fácil resolver un problema complejo cuando se divide en
partes manejables: técnica de divide y vencerás.
● En un programa monolítico la cantidad de variables utilizadas y caminos
que debe seguir el flujo de control hace imposible su correcta
comprensión.
ió
Se dificulta la corrección de errores y el mantenimiento posterior del
programa.
La programación modular proporciona un método para plasmar el
La programación modular proporciona un método para plasmar el
uso de recursos abstractos y la programación descendente.
Consiste en descomponer un problema complejo en partes más
pequeñas: módulos subalgoritmos o subprogramas
pequeñas: módulos, subalgoritmos o subprogramas.
Cada módulo sería un programa normal pensado para ser integrado
en una aplicación mayor.
Universidad Pontificia de Salamanca (Campus Madrid)
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2011
2
Introducción a la programación
modular (II)
)
odu a (
Un programa modular estaría compuesto de:
● Un programa principal, encargado de coordinar la ejecución.
● Una serie de módulos que resolverían cada una de la tareas concretas del
problema.
Universidad Pontificia de Salamanca (Campus Madrid)
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2011
3
Introducción a la programación
modular (III)
)
odu a (
Ventajas.
j
● Facilidad para aprehender el problema.
● División del trabajo entre un equipo de programadores.
Si los módulos son independientes, cada programador del equipo de
p g
q p
p
,
desarrollo puede encargarse de uno.
El jefe del proyecto integrará los distintos módulos en la aplicación
principal.
● Facilidad de mantenimiento y corrección de errores
● Facilidad de mantenimiento y corrección de errores.
Si cada módulo cumple una tarea completa es más fácil detectar
donde se produce un error.
Si se necesita realizar una mejora, sólo habrá que modificar un
q
,
j
módulo.
● Reutilización del código.
Un módulo que realice una tarea determinada podrá utilizarse en
t
otro programa que precise de la misma tarea.
d l
t
i
i
Universidad Pontificia de Salamanca (Campus Madrid)
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2011
4
Criterios de descomposición modular
Es necesario un compromiso entre el tamaño de los módulos y la
complejidad de la aplicación.
● Si un programa se descompone en demasiadas unidades, decrece la
efectividad.
Cuando el número de módulos se incrementa, decrece el esfuerzo para
realizarlos, pero aumenta el esfuerzo de integración y la carga en memoria.
Algunos criterios de descomposición (no válidos).
Descomposición po tamaño (50 líneas po mód lo)
● Descomposición por tamaño (50 líneas por módulo).
● Complejidad del módulo: niveles de anidamiento (menos de 7 niveles).
Independencia funcional.
● Un módulo debe realizar una única tarea y comunicarse lo menos
ód l d b
ú
l
posible con el resto de módulos.
l
Universidad Pontificia de Salamanca (Campus Madrid)
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2011
5
Criterios de descomposición modular
(II)
(
)
Un módulo se debe dividir hasta que se consiga un nivel
g
mínimo aceptable de independencia funcional.
q
La independencia funcional se puede medir según dos
criterios:
criterios:
● Cohesión.
Mide la relación entre las partes internas de un módulo.
Todas deben estar encaminadas a realizar una única función.
Todas deben estar encaminadas a realizar una única función.
● Acoplamiento.
Mide la relación del módulo con el resto de los módulos.
o Debe comunicarse lo menos posible.
o Pocas veces se conseguirá un acoplamiento nulo.
Un módulo debe tener mucha cohesión y poco
acoplamiento.
p
Universidad Pontificia de Salamanca (Campus Madrid)
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2011
6
Llamadas a módulos
Un programa modular contará con un programa principal y uno o varios
módulos
módulos.
El programa principal llama o invoca a los módulos, cediendo a éstos el
control del flujo del programa.
100
200
300
400
500
600
Universidad Pontificia de Salamanca (Campus Madrid)
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2011
7
Llamadas a módulos (II)
Cuando se hace la llamada a un módulo se transfiere el
control a la primera línea del módulo llamado.
● El programa llamador queda en suspenso hasta que termina el
módulo llamado.
En algunos lenguajes no estructurados (COBOL) es posible entrar
por otra línea.
El módulo llamado carga en memoria su código y un
espacio para sus propias variables y estructuras.
i bl
i
i
Cuando el programa llamado termina, transfiere el
control a la instrucción siguiente a la llamada.
● Se pierde la información generada por el módulo a no se que se
g
produzca un intercambio de información entre el programa
llamador y el llamado.
Universidad Pontificia de Salamanca (Campus Madrid)
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2011
8
Llamadas a módulos (III)
Durante su ejecución el programa llamado actúa como si se tratara
del programa principal
del programa principal.
● Puede realizar llamadas a otros módulos que funcionan de la misma
forma antes expuesta.
● El posible realizar llamadas a otros módulos: llamadas anidadas.
● Es posible llamarse a si mismo (recursividad).
¿Cómo se retorna a la instrucción dónde se ha hecho la llamada?
● La dirección de la línea donde se realiza la llamada y el estado de las variables
del programa llamador se almacena en una estructura de tipo pila: la pila de
llamadas (callstack).
p g
p p
p
Los datos salen de forma inversa a como han entrado.
Cuando acaba un módulo, el flujo de control retorna a la dirección de
memoria almacenada en la parte superior de la pila: la ultima que ha
entrado
entrado.
Se retorna en orden inverso al orden de llamada.
Cuando termina un programa y la pila de llamadas está vacía, el control
retorna el sistema operativo.
Universidad Pontificia de Salamanca (Campus Madrid)
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2011
9
Llamadas a módulos (IV)
100
200
300
400
500
600
Pila de llamadas
600
500
400
100200300
Programa principal
Universidad Pontificia de Salamanca (Campus Madrid)
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2011
10
Tipos de subprogramas
● Ejecutan una acción que puede o no modificar valores y puede o no
● Ejecutan una acción que puede o no modificar valores y puede o no
Procedimientos.
necesitar datos de entrada.
ImprimirFactura.
OrdenarLista.
● Su llamada sustituye a una tarea.
Funciones.
● Realizan una operación que siempre tiene como resultado un valor.
Factorial.
Potencia.
Máximo
Máximo.
en VB.NET
void).
Algunos lenguajes hacen esta distinción entre subprogramas.
● Su llamada sustituye a un valor.
● Procedure y Function en Pascal, procedimientos Sub y procedimientos Function
En algunos lenguajes no hacen esa distinción
ó
● En C, a todo se le denomina función, aunque algunas no devuelven nada (funciones
● En Java, que utiliza programación orientada a objetos, a todo se le denomina método
y forman parte del objeto.
Universidad Pontificia de Salamanca (Campus Madrid)
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2011
11
Funciones
Realizan una tarea que siempre devuelve un valor
p
asociado a la propia llamada.
● Cuando se detecta la llamada a una función, el control del
q
programa se transfiera a la función.
● Cuando la función termina se retorna y la llamada es sustituida
En la instrucción de asignación y 1 + sen(45)…
por el valor que devuelve.
● Se evalúa la expresión de izquierda a derecha.
● Antes de evaluar la expresión, el control se transfiera a la
llamada a la función sen() con el valor 45.
● La función se ejecuta, termina y devuelve el valor del seno de 45
● La expresión evaluada (1+0.7071) se asigna a la variable y.
(0,7071) que sustituye a la llamada.
Universidad Pontificia de Salamanca (Campus Madrid)
Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2011
12
Funciones (II)
Funciones matemáticas internas (predefinidas o intrínsecas) del lenguaje algorítmico UPSAM 2.0.
Significado
y
igual que 0 y menor que 1
Devuelve el coseno de x
Devuelve el valor absoluto de la expresión
numérica x
Devuelve el primer valor entero menor que
la expresión numérica x
Función
Función en C
abs(x)
fabs() en el archivo de cabecera math.h
aleatorio() Devuelve un número aleatorio real mayor o rand() y srand() en al archivo de cabecera stdlib.h
rand() y srand() en al archivo de cabecera stdlib.h
cos(x)
cos() en el archivo de cabecera math.h
entero(x)
ceil(), redondea al entero mayor más cercano y floor(),
redondea al entero menor más cercano, en el archivo de
cabecera math h ceil(2 6) es 3; ceil(-2 6) es 2;
cabecera math.h. ceil(2.6) es 3; ceil(-2.6) es ‐2;
floor(2.6) es 2; floor(-2.6) es ‐3.
exp() en el archivo de cabecera math.h
log() en el archivo de cabecera math.h
l
th h
log10() en el archivo de cabecera math.h
sqrt() en el archivo de cabecera math.h
sin() en el ar
Comentarios de: 4. Programación Modular - Fundamentos de Programación I (0)
No hay comentarios