Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.
-
Upload
alejo-grimaldo -
Category
Documents
-
view
220 -
download
0
Transcript of Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.
ModularizaciónIntroducción a la Computación
1Ing. Diego Figueyra
Diseño de Programas
ModularizaciónIntroducción a la Computación
2Ing. Diego Figueyra
Diseño
• Diseñar un programa se puede comparar con resolver un problema de la vida cotidiana.
• El programador debe tener muy presente el objetivo del programa, es recomendable que siempre se tenga en mente:– Propósito del programa: Qué hace? Qué tan rápido debe ser? En que
procesador se va a implementar? – Parámetros de entrada: Cómo se pasan los parámetros (registro, por
stack, por memoria, etc)? Cuantos son? Qué tipo de datos?– Salidas esperadas del programa: Cómo debe alterar registros o zonas
de memoria?
– Hay casos particulares o excepciones: Códigos de error frente a entradas o salidas erróneo
ModularizaciónIntroducción a la Computación
3Ing. Diego Figueyra
Diseño
• Es conveniente simplificar el problema original siguiendo los siguientes lineamientos
• Paso 1:– Evitar realizar todo de una sola vez– Subdividir el problema en pasos simples o en tareas lógicas
independientes• De esta manera uno programa módulos más sencillos. • Probar módulos más simples es más rápido• Integrar módulos lógicamente independientes es más sencillo
• Paso 2:– Realizar diagramas de flujo (si aplica)
• Un diagrama de flujo debe ser simple de seguir• No debe contener instrucciones específicas de un procesador
sino ideas o conceptos generales
ModularizaciónIntroducción a la Computación
4Ing. Diego Figueyra
Diagrama de Flujo
• Un diagrama de flujo nos permite realizar un seguimiento conceptual del programa a diseñar
ModularizaciónIntroducción a la Computación
5Ing. Diego Figueyra
Modularización
• Si un programa es suficientemente complejo un diagrama de flujo no resuelve todo.
• En estos casos es conveniente modularizar el programa.
ModularizaciónIntroducción a la Computación
6Ing. Diego Figueyra
Modularización
• Modularizar un problema implica dividir el mismo en problemas más pequeños o módulos. Resolviendo problemas más pequeños se puede resolver el problema más complejo
• Para poder modularizar uno debe encontrar los bloques fundamentales que constituyen el problema.
• Esta división da origen a lo que se conoce como el paradigma de la programación modular.
• En el proceso de modularización se debe:– Dividir el problema en segmentos simples– Buscar que los módulos sean genéricos (que tengan flexibilidad)– En la búsqueda de flexibilidad no debo perder el objetivo del cual partí
ModularizaciónIntroducción a la Computación
7Ing. Diego Figueyra
Modularización
• Divido el problema en bloques fundamentales
• Resolviendo cada bloque y uniéndolo puedo resolver el problema planteado
ModularizaciónIntroducción a la Computación
8Ing. Diego Figueyra
Modularización
• Si diseño segmentos o módulos flexibles puedo reutilizarlos en otro momento
Una locomotora? Un hombre?
ModularizaciónIntroducción a la Computación
9Ing. Diego Figueyra
Modularización
• Un problema complejo como calcular el coseno de un número podría analizarse como varios bloques simples
ModularizaciónIntroducción a la Computación
10Ing. Diego Figueyra
Modularización
• Que bloques empleo?
• Función Potencia• Función División• Función Factorial
• Con que profundidad?
ModularizaciónIntroducción a la Computación
11Ing. Diego Figueyra
Modularización
• Ahora no es tan complicado resolver esto no?
ModularizaciónIntroducción a la Computación
12Ing. Diego Figueyra
Modularización
• Ventajas– Un solo modulo es mas simple de escribir y de poner en funcionamiento.– Un modulo puede ser útil en diferentes partes de un programa e inclusive
formar parte de otros programas. Esto será cierto siempre y cuando el modulo realice una tarea lo suficientemente general.
– Los errores son mas fáciles de aislar y la corrección de los mismos se limita a la modificación de un modulo.
• Desventajas– La integración de los módulos puede ser compleja en particular si fueron
escritos por diferentes personas.– Los módulos requieren de documentación cuidadosa dado que pueden
afectar a otras partes del programa. Se debe prestar mucha atención cuando se utilizan módulos que modifican estructuras de datos compartidas con otros módulos.
– La prueba de un modulo puede ser difícil en situaciones en las que se necesitan datos generados por otros módulos.
ModularizaciónIntroducción a la Computación
13Ing. Diego Figueyra
Modularización
• Principios de la modularización
– Aquellos módulos que hacen referencia a datos comunes deben ser parte de un mismo modulo.
– Dos módulos en donde el primero depende o hace uso del segundo deben estar separados.
– Un modulo que es usado por varios módulos debe ser separado de los demás.
– Dos módulos cuya frecuencia de uso es significativamente diferente deben ser separados
– La organización (estructura) de datos relacionados entre si debe estar oculta en un solo modulo
ModularizaciónIntroducción a la Computación
14Ing. Diego Figueyra
Modularización
• Si un problema es difícil de modularizar hay que intentar redefinir las tareas involucradas en el problema.
• Demasiados casos especiales o demasiadas variables que requieren un tratamiento especial son signos de que la definición del problema es inadecuado
ModularizaciónIntroducción a la Computación
15Ing. Diego Figueyra
Modularización
• Los módulos (también llamados subrutinas o funciones) pueden recibir valores llamados parámetros y/o devolver resultados (valor de retorno)
Modulo o Subrutina
Parámetro
Valor de Retorno
ModularizaciónIntroducción a la Computación
16Ing. Diego Figueyra
Modularización
• Una subrutina puede ser invocada desde distintos lugares del programa
Modulo o Subrutina
ModularizaciónIntroducción a la Computación
17Ing. Diego Figueyra
Modularización
• Ejemplo: Temporizador– Supongamos que tenemos que escribir un programa que controle el
tiempo de encendido de una lámparita.– Se pide que un usuario presione un pulsador, que se encienda la luz y
un minuto después se apague automáticamente.– El procesador controlará todas las entradas y salidas del proceso
– Procedamos a plantear el diagrama de flujo…
ModularizaciónIntroducción a la Computación
18Ing. Diego Figueyra
Inicio Temporizador
Ejemplo: Temporizador
Inicio/Espero
Se presiónó el pulsador?
Enciendo Luz
SISI
NONO
Terminó tiempo? NONO
SISI
Apago la luz
Fin
ModularizaciónIntroducción a la Computación
19Ing. Diego Figueyra
• Utilizando los conceptos de progamación modular podríamos pensar en dos módulos principales para este programa:
– MODULO 1:• Espera que se cierre el interruptor y enciende la luz como
respuesta– MODULO 2:
• Provee el reatrdo de un minuto y luego apaga la luz
– Si bien temos modularizado el progama no lo hemos hecho de la mejor manera:
• En ambos módulos se opera con datos que no están relacionados entre sí: el tiempo y el estado de la luz (on/off). Modularizando de esta manera perdemos flexbilidad y por ende portabilidad del código.
Ejemplo: Temporizador
ModularizaciónIntroducción a la Computación
20Ing. Diego Figueyra
• Recuerden que los criterios para modularizar nos recomiendan mantener los datos (entradas o salidas) que estén relacionados entre sí en el mismo módulo.
• Podríamos entonces redefinir los módulos de la siguiente manera– MODULO1:
• Espera que se cierre el interruptor– MODULO 2:
• Enciende la luz– MODULO 3:
• Apaga la luz– MODULO 4:
• Retardo de 1 minuto
Ejemplo: Temporizador
Estos módulos comparten los mismos datos. Los podríamos convertir en un único módulo
ModularizaciónIntroducción a la Computación
21Ing. Diego Figueyra
Ejemplo: Temporizador
• Podríamos mejorar el diseño aun más. El primer módulo comprende una etapa de decisión (cuando se cierra el interruptor?) con una etapa de lectura del estado del interruptor (abierto o cerrado)
• Separemos dejando la decisión afuera de uno de los módulos. El proceso de decisión estará en el programa principal.
• Redefiniendo esta condición el esquema del programa estará dado de la siguiente manera:– MODULO 1:
• Indicar estado del interruptor (on/off)– MODULO 2:
• Endender o apagar la luz (on/off)– MODULO 3:
• Retardo de 1 minuto
ModularizaciónIntroducción a la Computación
22Ing. Diego Figueyra
Ejemplo: Temporizador
• Documentemos cada módulo:
– MODULO 1:• Indica si el interruptor está abierto o cerrado. Este módulo no
recibe ningún parámetro de entrada. Como salida ofrece dos valores posibles: 0 = Abierto; 1 = Cerrado
– MODULO 2:• Enciende o apaga la luz. El módulo recibe un parámetro que le
indica si debe encender o apagar la luz: 0 = Off ; 1 = On. No devuelve ningún parámetro.
– MODULO 3:• Establece la constante de tiempo de 1 minuto. No recibe o
devuelve ningún parámetro. La ejecución de este módulo debería extenderse durante 1 minuto.
ModularizaciónIntroducción a la Computación
23Ing. Diego Figueyra
Ejemplo: Temporizador
• Cada modulo es independiente de los demás lo que los convierte en genéricos y por lo tanto pueden ser usados en cualquier programa. Debe notarse que los dos primeros módulos tienen subyacente la estructura del hardware y por lo tanto toda modificación realizada sobre dicha estructura se vera reflejada únicamente en estos módulos y no en el resto del programa.
ModularizaciónIntroducción a la Computación
24Ing. Diego Figueyra
Temporizador
Ejemplo: Temporizador
Estado Interruptor
Se presiónó el pulsador?
LUZ
SISI
NONO
Terminó tiempo? NONO
SISI
LUZ
FinONON
OFFOFF
Modulos: VerdeParámetros: NegroPrograma: Celeste
Modulos: VerdeParámetros: NegroPrograma: Celeste
ModularizaciónIntroducción a la Computación
25Ing. Diego Figueyra