Ir al contenido

Programación modular

De Wikipedia, la enciclopedia libre

Esta es una versión antigua de esta página, editada a las 17:49 16 sep 2016 por 201.216.241.1 (discusión). La dirección URL es un enlace permanente a esta versión, que puede ser diferente de la versión actual.

Diagrama del funcionamiento de un subprograma.

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 esta puede resolver.

Al aplicar la programación modular, un problema complejo debe ser dividido en varios subproblemas 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. Esta técnica se llama refinamiento sucesivo, divide y vencerás ó análisis descendente (Top-Down).

Un 'módulo' es cada una de las partes de un programa que resuelve uno de los subproblemas en que se divide el problema complejo original. Cada uno de estos módulos tiene una tarea bien definida y algunos necesitan de otros para poder operar. En caso de que un módulo necesite de otro, puede comunicarse con éste mediante una interfaz de comunicación que también debe estar bien definida.

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 "módulo" (en el sentido de programación modular) con términos como "función" o "procedimiento", propios del lenguaje que lo soporte.

EL LENGUAJE LOGO El lenguaje LOGO creado por el matemático Seymour Papert con fines puramente educativos es un ejemplo claro de programaciòn modular. SUpongamos que queremos programar una carrera entre 2 vectores (en Logo se las llama TORTUGAS). Podríamos dividir el problema en sub problemas que a su vez podrìa contener otros sub sub problemas más simples.

CARRERA

 ACTIVAR TORTUGAS
 POSICIONAR TORTUGAS
 ORIENTAR TORTUGAS 
 LARGADA
 CONTROL DE LLEGADA
 PROCLAMAR VENCEDOR

FIN

En LOGO cada módulo debe bautizarse con un nombre único que lo identifique. El comando PARA indicar el inicio del procedimiento

PARA CARRERA

   ACTIVAR_TOR
         POSICIONAR_TOR (incluído en ACTIVAR_TOR)
         ORIENTAR_TOR  (incluído en ACTIVAR_TOR)  
   LARGADA
   CONTROL
   VENCEDOR

FIN

Cada módulo debe definirse

PARA ACTIVAR_TOR

ACTIVA 1
PONPOS [-400 100]
PONRUMBO 90
ACTIVA 2
PONPOS [-400 0]
PONRUMBO 90

FIN

Todas las líneas de ACTIVAR_TOR son comandos "primitivos". No es posible simplificar una "primitiva". Por medio de ellas podemos construir un "procedimiento" o "rutina" de mayor complejidad. Otra característica es que esta rutina es independiente del procedimiento CARRERA y podría ser utilizada por otro procedimiento, de la misma manera que las DLL son utilizadas por diferentes aplicaciones.

PARA CONTROL ACTIVA 1 AV AZAR 20 (Avanzar un valor al azar entre 0 y 20) SI COORX > 400[HAZ "GANADOR 1 ALTO] ACTIVA 2 AV AZAR 20 (Avanzar un valor al azar entre 0 y 20) SI COORX > 400[HAZ "GANADOR 2 ALTO] CONTROL FIN

El procedimiento controla la posiciòn de llegar (x = 400) para la tortuga 1 y la tortuga 2. Esto es injusto para la 2, pero esto es un ejemplo simplificado. El control debería realizarse después de que ambas avancen. El procedimiento CONTROL es un Loop, que en Logo se denomina RECURSION pues el procedimiento "recurre" a sí mismo para repetirse en forma indefinida hasta que se cumpla alguna de las reglas enunciadas con el comando SI (IF).

GANADOR es el nombre de una memoria donde se almacena el valor de la tortuga que "ganó". Esa memoria la utilizará el procedimiento VENCEDOR para proclamar al campeón.


Véase también