programación modular

Download Report

Transcript programación modular

La programación modular es un paradigma de
programación que consiste en dividir un programa
en módulos o subprogramas con el fin de hacerlo
más legible y manejable.
Se presenta históricamente como una evolución de
la programación estructurada para solucionar
problemas de programación más grandes y
complejos de lo que ésta puede resolver.
Al aplicar la programación modular, un problema complejo debe ser
dividido en varios sub problemas más simples, y estos a su vez en otros
subproblemas más simples. Esto debe hacerse hasta obtener
subproblemas lo suficientemente simples como para poder ser resueltos
fácilmente con algún lenguaje de programación. Ésta técnica se llama
refinamiento sucesivo, divide y vencerás ó análisis descendente (TopDown).
Si
bien
un
módulo
puede
entenderse como una parte de un
programa en cualquiera de sus
formas y variados contextos, en la
práctica se los suele tomar como
sinónimos de procedimientos y
funciones. Pero no necesaria ni
estrictamente un módulo es una
función o un procedimiento, ya que
el mismo puede contener muchos
de ellos, no debe confundirse el
término "modulo" (en el sentido de
programación
modular)
con
términos
como
"función"
o
"procedimiento",
propios
del
lenguaje que lo soporte.
Cada programa contiene un módulo denominado programa
principal que controla todo lo que sucede; se transfiere el control a
los submódulos o subprogramas. Estos ejecutan su función y una
vez completada su tarea, devuelven el control al módulo principal.
 Cada submódulo se puede descomponer en otros submódulos,
dependiendo de la complejidad de la tarea a realizar y la subdivisión
continúa hasta que cada módulo tenga una sola tarea para ejecutar.
 Un submódulo puede realizar tareas de distinta naturaleza como:
entrada, salida, manipulación de datos, control de otros módulos o
una combinación de éstos. Un módulo puede transferir
temporalmente (bifurcar) el control a otro módulo; sin embargo,
cada módulo debe eventualmente devolver el control al módulo del
cual recibió originalmente el control.
Objetivos de la programación
modular
Hacer mas legible y manejable un
programa
Simplificación del problema: Divide y
vencerás
Aumentar su capacidad de
reutilización
Facilita el trabajo en equipo
Funciones
Transforman datos
Variables de entradas
Variables de salida
Variables de Entrada / Salida
Realizan una única tarea, bien definida
El nombre indicara su función
Pueden usar otras funciones
Si se llama a si misma => función recu
Funciones
Espacio de trabajo local
Aisladas del programa, solo se comunican
mediante los argumentos de entrada y la salida de
la función
Excepción: Variables globales
Ej.: A = f(B)
Si B es una variable de entrada, f no puede
modificar B
En matlab todos los argumentos son de entrada
La salida se guarda en A
Funciones Matlab
function [out1, out2, ..., outN]
= nombre función (in1, in2, ..., inM)
Mismo nombre que el fichero .m donde se
define
Las variables definidas dentro de la función
locales
Al modificar un parámetro de entrada se h
una copia para evitar su modificación
out1=salida1 %modifica la salida
Programa vs Función
Programa: Mismo efecto que ejecutar línea a
línea en ventana de comandos
Funciones: Solo accede a los argumentos de
entrada y variables globales declaradas
Variables de programa: globales
Variables de función: locales
Variables locales:
Se destruyen al salir de la función
No interfieren con variables del mismo
nombre en otras partes del programa
PROCEDIMIENTOS Y FUNCIONES
Un algoritmo que resolviera un problema complejo, contendría cientos o miles de líneas
de código en su interior. Esto es inabarcable para cualquier programador, por lo que se
utiliza el concepto de procedimientos y funciones para subdividir el problema en partes.
La idea es que cada una de estas partes contenga un conjunto de instrucciones que
permita la ejecución de algún proceso determinado y lógico desde el punto de vista
humano.
Dos ejemplos, función y procedimiento respectivamente:
FUNCION multiplicar(E a: ENTERO, E b: ENTERO): ENTERO
RETORNA ( a * b )
FIN_FUNCION
ó
PROCEDIMIENTO escribirEdad(E mensaje: CADENA, E edad: ENTERO)
ESCRIBIR( mensaje, edad )
FIN_PROCEDIMIENTO
La descomposición del software en tareas también se conoce con el nombre de
top-down y fue presentada por primera vez por Niklaus Wirth. Este autor proporciona la
siguiente visión de refinamiento:
“En cada paso (del refinamiento), una o varias instrucciones del programa dado, se
descomponen en instrucciones más detalladas. Esta descomposición sucesiva o
refinamiento de especificaciones termina cuando todas las instrucciones están
expresadas en términos de la computadora usada o del lenguaje de programación…
Conforme se refinan las tareas, también los datos pueden ser refinados, descompuestos
o estructurados siendo natural refinar las especificaciones del programa y los datos en
Paralelo, Cada paso de refinamiento implica algunas decisiones de diseño. Es importante
que el
programador sea consciente de los criterios subyacentes (en las decisiones de diseño
adoptadas) y de la existencia de soluciones alternativas…”
Típicamente, una descomposición insuficiente de un problema en tareas conduce
a la definición de pocos procedimientos, cada uno de las cuales implementará múltiples
funcionalidades.