Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

25
Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas

Transcript of Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

Page 1: 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

Page 2: Modularización Introducción a la Computación 1 Ing. 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

Page 3: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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

Page 4: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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

Page 5: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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.

Page 6: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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í

Page 7: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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

Page 8: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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?

Page 9: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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

Page 10: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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?

Page 11: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

ModularizaciónIntroducción a la Computación

11Ing. Diego Figueyra

Modularización

• Ahora no es tan complicado resolver esto no?

Page 12: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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.

Page 13: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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

Page 14: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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

Page 15: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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

Page 16: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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

Page 17: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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…

Page 18: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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

Page 19: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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

Page 20: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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

Page 21: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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

Page 22: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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.

Page 23: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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.

Page 24: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

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

Page 25: Modularización Introducción a la Computación 1 Ing. Diego Figueyra Diseño de Programas.

ModularizaciónIntroducción a la Computación

25Ing. Diego Figueyra