Descripción: Clase 9 de Programación, Prof. Gonzalo Müller
Programación
Clase 9. Programación Modular Prof. Gonzalo Müller
[email protected]
Facultad de Ingeniería Universidad Central de Venezuela
Clase Anterior
Algunas aplicaciones numéricas: Métodos Secuenciales
Sucesión, Sumatoria y Productoria. Estadística Descriptiva: Media, Varianza, Regresión. Integración: Suma de Riemann.
Métodos Iterativos
Solución de una ecuación f(x) = 0: Newton
Métodos Evolutivos
Búsqueda del Máximo o Mínimo de f(x): 1 + 1.
Métodos Iterativos – Reducción de Intervalos
Solución de una ecuación f(x) = 0: Bisección. Búsqueda del Máximo o Mínimo de f(x): Sección Dorada. Programación – Prof. Gonzalo Müller – Clase 9 – GM - 2
Programación Estructurada Técnica de programación donde: El algoritmo tiene un solo final. Toda operación realizada por el algoritmo está definida en un solo bloque. Todo el algoritmo está construido utilizando las estructuras básicas: Secuencial. Selectiva. Repetitiva.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 3
Programación Estructurada Ejemplo: Algoritmos estructurados: Sumatoria S=0
Comienzo
k=0
Leer A y B
Leer N
V
S=S+k
A>B
B=A+B
Escribir A
k=k+1 Mientras (k ≤ N)
Escribir B
Escribir S Fin
FIN Programación – Prof. Gonzalo Müller – Clase 9 – GM - 4
F
Programación Estructurada En la programación estructurada se ataca el problema utilizando un solo bloque.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 5
Programación Modular Técnica de programación en la cual se descompone el proceso en pequeños módulos independientes.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 6
Programación Modular Técnica de programación en la cual se descompone el proceso en pequeños módulos independientes.
Divide y Vencerás Programación – Prof. Gonzalo Müller – Clase 9 – GM - 7
Módulos Conjunto de sentencias que realizan una tarea concreta. Cada módulo se comporta como un subprograma: el cual recibe entradas, realiza un proceso y genera salidas.
Entradas
Módulo
Salidas
Las entradas recibe el nombre de parámetros Programación – Prof. Gonzalo Müller – Clase 9 – GM - 8
Módulos Conjunto de sentencias que realizan una tarea concreta. Cada módulo se comporta como un subprograma: el cual recibe entradas, realiza un proceso y genera salidas.
Parámetros
Módulo
Salidas Valor utilizado fuera del algoritmo
Resultado Valor utilizado dentro del algoritmo Programación – Prof. Gonzalo Müller – Clase 9 – GM - 9
Módulos
… …
Resultado Valor utilizado dentro del algoritmo
…
… Mientras (…)
Salidas … FIN
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 10
Valor utilizado fuera del algoritmo
Clases de Módulos
Reciben parámetros y retorna un resultado. Parámetros
Módulo
Resultado
Ejemplo:
sqrt(x): recibe un número x y devuelve el resultado de x1/2
pow(x, y): recibe dos número y devuelve xy Programación – Prof. Gonzalo Müller – Clase 9 – GM - 11
Clases de Módulos
No reciben parámetros y retorna un resultado. Módulo
Resultado
Ejemplo: rand(): devuelve un número aleatorio entre 0 y 32767. random(): devuelve un número aleatorio entre 0 y 1.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 12
Clases de Módulos
Reciben parámetros y no retorna resultado, pero cumplen un propósito(puede generar salidas). Parámetros
Módulo
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 13
Salidas
Clases de Módulos
Reciben parámetros y no retorna resultado, pero cumplen un propósito(puede generar salidas). Módulo
Parámetros
Salidas
Ejemplo:
write(texto): Escribe un texto en salida. Salida C++
write(‘C++
#1’) Programación – Prof. Gonzalo Müller – Clase 9 – GM - 14
#1
Clases de Módulos
No reciben parámetros y no retorna resultado, pero cumplen un propósito(puede generar salidas). Módulo
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 15
Salidas
Clases de Módulos
No reciben parámetros y no retorna resultado, pero cumplen un propósito(puede generar salidas). Módulo
Salidas
Ejemplo:
version(): datos sobre versión de programa. Salida
version()
COLARA versión 1.101
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 16
Tipos de Módulos
Se agrupan en: Funciones: realiza una operación y retorna el resultado de la misma. Ejemplo: rand(), sqrt(x), etc.
Subrutinas o procedimientos: realiza una tarea y regresa a la instrucción siguiente a su llamada, es decir, no generan un resultado. Ejemplo: write(), version(), etc.
Ambos pueden o no recibir parámetros. Programación – Prof. Gonzalo Müller – Clase 9 – GM - 17
Programación Modular Algoritmo Existe un bloque principal en el cual se encuentran las llamadas a los módulos.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 18
Programación Modular Algoritmo Existe un bloque principal en el cual se encuentran las llamadas a los módulos. El algoritmo estará construido con:
Estructuras:
Secuenciales.
Selectivas.
Repetitivas.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 19
Programación Modular Algoritmo Existe un bloque principal en el cual se encuentran las llamadas a los módulos. El algoritmo estará construido con:
Estructuras:
Secuenciales.
Selectivas.
Repetitivas.
Dentro de las estructuras existirán:
Llamadas a módulos previamente definidos. Programación – Prof. Gonzalo Müller – Clase 9 – GM - 20
Programación Modular
Nombre …
Bloque Principal
… Mientras (…) …
Estructuras Secuenciales, Selectivas, Repetitivas y Llamadas a módulos.
FIN
Ni el bloque principal ni los módulos debe ocupar más de 20 líneas Programación – Prof. Gonzalo Müller – Clase 9 – GM - 21
Representación de Algoritmos Modulares
Definición de una subrutina. PC Con parámetros: Nombre(parámetro1, parámetro2, …) { … }
Sin parámetros: Nombre() { … } Programación – Prof. Gonzalo Müller – Clase 9 – GM - 22
Representación de Algoritmos Modulares
Definición de una subrutina. PC Con parámetros: Nombre(parámetro1, parámetro2, …) { … }
Sin parámetros: Nombre() ← Los paréntesis permiten diferenciar un módulo del { bloque principal … } Programación – Prof. Gonzalo Müller – Clase 9 – GM - 23
Representación de Algoritmos Modulares DRE Con parámetros: Nombre(parámetro1, parámetro2, …) … Fin
Sin parámetros: Nombre() … Fin Programación – Prof. Gonzalo Müller – Clase 9 – GM - 24
Representación de Algoritmos Modulares DF Con parámetros: Nombre(parámetro1, parámetro2, …)
Sin parámetros:
Fin
Nombre()
Fin Programación – Prof. Gonzalo Müller – Clase 9 – GM - 25
Representación de Algoritmos Modulares Ejemplo: Construir una subrutina para presentar en la salida el máximo de dos números. Fase 1: Diseño y Análisis: DES, DRE ó DF y LV.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 26
Representación de Algoritmos Modulares
Definición de una función. PC Con parámetros: Nombre(parámetro1, parámetro2, …) { … retorna valor }
Sin parámetros: Nombre() { … retorna valor } Programación – Prof. Gonzalo Müller – Clase 9 – GM - 27
Representación de Algoritmos Modulares DRE Con parámetros: Nombre(parámetro1, parámetro2, …) … retorna valor
Sin parámetros: Nombre() … retorna valor Programación – Prof. Gonzalo Müller – Clase 9 – GM - 28
Representación de Algoritmos Modulares DF Con parámetros: Nombre(parámetro1, parámetro2, …)
retorna valor
Sin parámetros: Nombre()
retorna valor Programación – Prof. Gonzalo Müller – Clase 9 – GM - 29
Representación de Algoritmos Modulares Ejemplo: Construir una función para calcular el máximo de dos números. Fase 1: Diseño y Análisis: DES, DRE ó DF, LV.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 30
Representación de Algoritmos Modulares
Llamada a una subrutina. PC Con argumentos: … Nombre(argumento1, argumento2, …) …
Sin argumentos: … Nombre() … Programación – Prof. Gonzalo Müller – Clase 9 – GM - 31
Representación de Algoritmos Modulares DRE Con argumentos:
Nombre(argumento1,argumento2,…)
Sin argumentos: Nombre() Programación – Prof. Gonzalo Müller – Clase 9 – GM - 32
Representación de Algoritmos Modulares DF Con argumentos:
Nombre(argumento1, argumento2, …)
Sin argumentos:
Nombre()
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 33
Representación de Algoritmos Modulares
Llamada a una función. PC Con argumentos: … variable = Nombre(argumento1, argumento2, …) …
Sin argumentos: … Escribir Nombre() … Programación – Prof. Gonzalo Müller – Clase 9 – GM - 34
Representación de Algoritmos Modulares DRE Con argumentos:
Mientras (Nombre(argumento1, …) ==…)
Sin argumentos: Variable = Nombre() Programación – Prof. Gonzalo Müller – Clase 9 – GM - 35
Representación de Algoritmos Modulares DF Con argumentos: Escribir Nombre(argumento1, argumento2, …)
Sin argumentos: variable = Nombre()
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 36
Representación de Algoritmos Modulares Ejemplo: Construir dos algoritmos para calcular el máximo de dos números que utilicen los módulos desarrollados previamente. Fase 1: Diseño y Análisis: DES, DRE ó DF y LV del Bloque Principal.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 37
Corrida en frío de Algoritmo Principal
Dato 1
…
…
…
Variables
Dato N
Módulo1 (…)
…
…
…
…
MóduloZ (…)
Condición
1
…
Llamadas Programación – Prof. Gonzalo Müller – Clase 9 – GM - 38
…
…
Condición
M
…
Condiciones
Salida
…
Corrida en frío de Subrutinas
Parámetro
1
…
…
…
Parámetro
Dato
W
1
…
…
Parámetros
…
…
Dato
Condición
N
1
…
…
Variables Programación – Prof. Gonzalo Müller – Clase 9 – GM - 39
…
…
Condición
M
…
Condiciones
Salida
…
Corrida en frío de Funciones
Parámetro
1
…
…
…
Parámetro
Dato
W
1
…
…
Parámetros
…
…
Dato
Condición
N
1
…
…
Variables Programación – Prof. Gonzalo Müller – Clase 9 – GM - 40
…
…
Condición
M
…
Condiciones
Retorno
…
Corrida en frío de Módulos Ejemplo: Realizar una corrida en frío para el algoritmo principal y módulos del ejemplo anterior.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 41
Programación Modular … Nombre(argumento1,argumento2,…)
Llamada
…
Nombre(parámetro1, parámetro2, …) … Fin Programación – Prof. Gonzalo Müller – Clase 9 – GM - 42
Definición
Programación Modular … Nombre(argumento1,argumento2,…) 1
… Asigna el argumento al parámetro antes de continuar la ejecución: parametro1 = argumento1
Nombre(parámetro1, parámetro2, …) … Fin Programación – Prof. Gonzalo Müller – Clase 9 – GM - 43
Llamada
Programación Modular … Nombre(argumento1,argumento2,…) … 2 Continua la ejecución el módulo correspondiente
Nombre(parámetro1, parámetro2, …) … Fin Programación – Prof. Gonzalo Müller – Clase 9 – GM - 44
Programación Modular … Nombre(argumento1,argumento2,…) …
3
Nombre(parámetro1, parámetro2, …) … Fin Programación – Prof. Gonzalo Müller – Clase 9 – GM - 45
Ejecuta todas las sentencias del módulo
Programación Modular … Nombre(argumento1,argumento2,…) 4
… Regresa y continua la ejecución el algoritmo principal
Nombre(parámetro1, parámetro2, …) … Fin Programación – Prof. Gonzalo Müller – Clase 9 – GM - 46
Metodología de la Programación Modular
Diseño Modular del algoritmo Estructurar la resolución del problema por módulos. Cada módulo se encarga de resolver una parcialidad del problema. Cada módulo debe realizar una función especifica y debe ser sencillo e independiente. Divide y Vencerás Programación – Prof. Gonzalo Müller – Clase 9 – GM - 47
Metodología de la Programación Modular Se debe realizar una descomposición jerárquica, utilizando el diseño top-down o diagramas de estructuras. Diagramas Top-Down: Son una representación gráfica de la jerarquía existente entre los módulos.
Cada módulo se representa con un rectángulo.
Existen dos tipos de módulos:
Primitivos o Terminales: Es independiente.
No Primitivos: Requiere de otros módulos.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 48
Metodología de la Programación Modular Los módulos debe ser organizados de tal manera que la secuencia de ejecución de los mismo sea de izquierda a derecha. 1. Se desarrolla un bosquejo inicial. Módulo No Primitivo
Programa Inicialización
Entrada
Proceso
Secuencia de Ejecución Programación – Prof. Gonzalo Müller – Clase 9 – GM - 49
Módulo Primitivo
Salida
Metodología de la Programación Modular Cuando la descripción de la tarea realizada por un módulo no es lo suficientemente sencilla se debe subdividir en varios módulos.
Se debe subdividir en al menos dos módulos.
2. Se refina paso a paso de forma de enriquecer la jerarquía inicial con niveles adicionales. Programa Inicialización Lectura
Entrada
Validación
Proceso
Tarea 1
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 50
Salida Tarea 2
Metodología de la Programación Modular
Programa Inicialización Lectura
Entrada
Validación
Proceso
Tarea 1
Salida Tarea 2
Bottom-Up
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 51
Metodología de la Programación Modular Ejemplo: Se requiere un programa para obtener las raíces de una ecuación cuadrática. Realizar el diseño, utilizando una descomposición jerárquica.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 52
Metodología de la Programación Modular
Luego de realizar el diagrama Top-Down, se continua con la construcción del algoritmo el cual se complementa con dos nuevos pasos muy importantes: Definición de módulos: se desarrolla el algoritmo que define a la subrutina.
Cada módulo dispone de su propio diagrama.
Llamada a los módulos: Se pone en ejecución el modulo previamente definida donde sea necesario.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 53
Programación Modular Algunos módulos clásicos son:
Módulos de entrada de datos.
Módulos de proceso.
Módulos de presentación de resultados.
Los módulos se caracterizan por su:
Acoplamiento.
Cohesión.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 54
Acoplamiento Describe la dependencia de un módulo respecto de otro. Acoplamiento de zonas: Los módulos manejan los datos de entradas y de salida a través de variables comunes, llamadas variables globales.
Acoplamiento de Alto Nivel
Módulo A Módulo B Datos (Variables
Efecto Colateral
Globales)
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 55
Diagrama de acoplamiento
Acoplamiento Acoplamiento de datos: Los módulos manejan los datos de entradas y de salida haciendo uso de parámetros. Acoplamiento de Bajo Nivel
Módulo A
Módulo B
Datos (Parámetros)
Datos (Parámetros)
Un buen programa contiene módulos con acoplamiento de bajo nivel, ya que al realizar modificaciones no es necesario preocuparse por el impacto en los otros módulos. Programación – Prof. Gonzalo Müller – Clase 9 – GM - 56
Cohesión Establece como se interrelacionan el conjunto de sentencias y datos que forman al módulo. Cohesión de Alto Nivel
Cohesión funcional: Todas las sentencias se destinan a llevar a cabo una y solo una sola tarea.
Cohesión secuencial: Los resultados generados por una sentencia son utilizados en la siguiente.
Cohesión en datos: Las sentencias realizan varias tareas a las vez utilizando los mismo datos.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 57
Cohesión
Cohesión temporal: Las sentencias realizan varias tareas sin importar el orden con distintos datos cuyo significado es el mismo. Por ejemplo: Módulo de inicialización.
Cohesión lógica: Las sentencias realizan una de varias tareas a partir de datos de control. Por ejemplo: Módulo de selección de un menú.
Cohesión coincidental: Las sentencias realizan varias tareas sin relación alguna.
Cohesión de Bajo Nivel
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 58
Programación Modular
Un buen programa contiene módulos con cohesión de alto nivel, donde sus sentencias y datos se interrelaciona fuertemente entre sí y no depende de otros módulos, ya que es más sencillo realizar modificaciones cuando éstos se destina a realizar funciones especifica. Un módulo debe tener una o pocas responsabilidades de lo contrario debería dividirse en varios para facilitar una fuerte cohesión.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 59
Acoplamiento de datos básico El bloque principal se construye solo con los bloques terminales del diagrama Top-Down y módulos solo deben poseer parámetros de entrada. Bloque Principal Programa Inicialización Lectura
Entrada
Validación
Proceso Tarea 1
Salida Tarea 2
Bloques Terminales
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 60
Acoplamiento de datos básico El bloque principal se construye solo con los bloques terminales del diagrama Top-Down y módulos solo deben poseer parámetros de entrada. Bloque Principal Programa Inicialización Lectura
Salida
Validación
Tarea 1
Tarea 2
Bloques Terminales
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 61
Acoplamiento de datos básico
Subrutinas:
…
Pueden recibir Valores o Parámetros de Entrada. No retorna resultado, pero realizar una operación dada.
Utilizadas usualmente para presentación de datos en pantalla.
Funciones:
… 1
Pueden recibir Valores o Parámetros de Entrada. Retorna 1 resultado. Programación – Prof. Gonzalo Müller – Clase 9 – GM - 62
Acoplamiento de datos básico Ejemplo: Construir el algoritmo modular con acoplamiento de datos básico para obtener las raíces de una ecuación cuadrática.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 63
Metodología de la Programación Modular
Tabla de Módulos: Una vez desarrollados los algoritmos de todos los módulos es de utilidad para la posterior implementación en el lenguaje construir una tabla donde se listen todos los módulos, sus tipos y parámetros. Modulo Parámetros Nombre del Lista de módulo parámetros
Retorno Valor retornado
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 64
Tipo Subrutina o Función
Metodología de la Programación Modular Ejemplo: Construir la tabla de módulos del algoritmo anterior.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 65
Programación Modular
Reutilización: Separa en un módulos los procesos que se repita más de una vez el programa. Disminuye el tamaño del programa. Ejemplo: La lectura de un punto (X, Y)
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 66
Programación Modular
Reutilización: Separa en un módulos los procesos que se repita más de una vez el programa. Disminuye el tamaño del programa. Ejemplo: La lectura de un punto (X, Y)
Facilita las modificaciones y localización de errores: Se comprueba o modifica de forma individual cada uno de los módulos.
Programación – Prof. Gonzalo Müller – Clase 9 – GM - 67
Programación Modular
Reutilización: Separa en un módulos los procesos que se repita más de una vez el programa. Disminuye el tamaño del programa. Ejemplo: La lectura de un punto (X, Y)
Facilita las modificaciones y localización de errores: Se comprueba o modifica de forma individual cada uno de los módulos.
Reduce el tiempo de desarrollo: Se reparte la construcción de los módulos entre diferentes equipos de trabajo. Programación – Prof. Gonzalo Müller – Clase 9 – GM - 68
Ejercicios a) Definir un módulo para: 1) Establecer el mínimo de dos valores. 2) Determinar la distancia entre 2 maquinas. 3) Calcular f(x) = sen(2*x)+x4. 4) Determinar si un número entero es par. 5) Establecer el signo de un valor (-1, 0, 1). Fase 1: Diseño y Análisis: DES, DRE ó DF, LV y CF del Módulo. Programación – Prof. Gonzalo Müller – Clase 9 – GM - 69
Ejercicios b) Partiendo de los módulos creados anteriormente construir un algoritmo modular para: 1) Establecer el menor de 3 valores. 2) Determinar las distancias entre 3 maquinas. 3) Calcular f(x) = sen(2*x)+x4 para N puntos. 4) Contar la cantidad de números pares de N datos. 5) Establecer si 2 valores tienen el mismo signo. Fase 1: Diseño y Análisis: DES, DRE ó DF, LV y CF del Bloque Principal. Programación – Prof. Gonzalo Müller – Clase 9 – GM - 70
Ejercicios c) Construir un algoritmo modular para: 1) Calcular el factorial de N números. 2) Dado un conjunto de N números, establecer cuales son números compuestos. 3) Promediar los pares y promediar los impares de los números entre A y B. 4) Dado N intervalos, calcular la sumatoria de los números que contiene cada intervalo. Fase 1: Diseño y Análisis: DES, DTD DES, DRE ó DF y LV de Módulos y TM. DRE ó DF, LV y CF del Bloque Principal. Programación – Prof. Gonzalo Müller – Clase 9 – GM - 71
Ejercicios c) Construir un algoritmo modular para: 5) Dado un conjunto de puntos en R2 por el usuario determinar cuales se encuentra por encima, por debajo y sobre una recta dada por el usuario. 6) Encontrar por Newton 1 solución para f(x) = 0. 7) Encontrar 1 Mínimo de f(x) por 1+1. Fase 1: Diseño y Análisis: DES, DTD DES, DRE ó DF y LV de Módulos y TM. DRE ó DF, LV y CF del Bloque Principal. Programación – Prof. Gonzalo Müller – Clase 9 – GM - 72
Resumen
Programación estructurada. Programación modular. Algoritmo: Bloque principal, llamadas, 20 líneas. Módulos. Clases. Tipos: Subrutinas y Funciones. Representación de Algoritmos Modulares Definición: subrutinas, funciones. Llamada: subrutinas, funciones. Programación – Prof. Gonzalo Müller – Clase 9 – GM - 73
Resumen
Metodología de la Programación Modular Diseño Modular: Diagrama Top-Down. DRE, DF, PC y CF. Tabla de Módulos. Características: Acoplamiento y Cohesión. Acoplamiento de datos básico. Solo bloques terminales del DTD. Subrutinas: No generan resultado. Funciones: Generan 1 resultado.
Beneficios: reutilización, cambios, errores y tiempo. Programación – Prof. Gonzalo Müller – Clase 9 – GM - 74