logo_nuevo_docirs

Un problema complejo debe ser dividido en varios subproblemas más simples
"Divide y vencerás"



Programación con Diseño Modular o Top-Down

 José Enrique González Cornejo
Abril 2009

 

Actualmente DocIRS utiliza en la programación de aplicaciones una combinación entre el enfoque top-down y ciertos elementos de la Programación Orientada a Objetos(1). Nuestra experiencia, nos ha llevado a aproximarnos con más fuerza a organizar el trabajo bajo este concepto. Sea definiendo capas, roles, componentes autónomas, tratamiento binario y atómico de los objetos, articulación individual con sistemas internos y externos, complementando la integración con Servicios Web XML. (Ver UML)

De hecho hoy, casi todos los lenguajes o plataformas de desarrollo - tipo Framework-, que se ocupan en Internet, obligan a trabajar dividiendo también las tareas de programación en capas, formularios o paginas (asp, aspx, php) , paginas de estilos (css), de formateo xsl, utilización de Ajax para invocar rutinas y consultas, uso autónomo elementos del motor de datos (procedimientos almacenados, triggers, dts,..), sumado a un extenso conjunto de soluciones  predefinidas, que están disponibles para necesidades generales de la programación de aplicaciones.


 Es recomendable, no tener varias pelotas en el aire, sino resolver una por una

La programación es sin duda una actividad compleja, pues en ella se combinan muchos procesos mentales. Deben reunirse muchos factores en la producción de un programa final. Tal vez, la tarea no sea muy diferente de la de un malabarista. En efecto, si éste trata de mantener demasiadas pelotas en el aire al mismo tiempo, antes de lo esperado se estrellarán contra el suelo. (Ver Acerca de las Fases del Proceso de Programación)

La importancia del conceptos «divide y vencerás» aplicado a la programación es fundamental. Para continuar con la analogía del malabarista, se tratará de mantener en el aire un número razonable de pelotas en forma simultánea. Un paso dado en este sentido ha sido la separación entre la solución del problema y su correspondiente programación. (Ver Problema de Programación Dinámica

El concepto es muy antiguo en la resolución de problemas. Nótese que ya Arquímedes lo utilizó 250 años antes de Cristo, para calcular el perímetro de una circunferencia. (Ver Algoritmo de Arquímedes para el Cálculo de PI)

Es decir, aplicar la programación modular significa que un problema complejo debe ser dividido en varios subproblemas más simples, y estos a su vez en otros subproblemas más simples. Una subestructura óptima significa que soluciones óptimas de subproblemas pueden ser usadas para encontrar las soluciones óptimas del problema en su conjunto. Los subproblemas se resuelven a su vez dividiéndolos ellos mismos en subproblemas más pequeños hasta que se alcance el caso fácil, donde la solución al problema es trivial.

 

El enfoque conocido como diseño top-down o en forma análoga programación estructurada, cuya ventaja es proporcionar una estructura al proceso completo. La solución de cualquier problema puede darse en varias formas o, como se les llamará, niveles de abstracción. (Ver Simple-DocIRS)

El enfoque top-down es de algún modo contrario a la Programación Extrema, dado que enfatiza la planificación y conocimiento del modelo y diseño funcional del sistema antes de comenzar a desarrollar. Se entiende que no es recomendable comenzar producir código hasta que no se haya alcanzado un nivel de detalle suficiente, al menos sobre la arquitectura de la aplicación y posible integración con otros sistemas.

El proceso de solución comienza con un enunciado muy general o abstracto de la solución del problema, expresado en términos del problema mismo. A continuación, se procederá a refinar esta solución elaborando los detalles que se habían ignorado previamente, de lo que resulta una solución nueva que es muchísimo menos abstracta. Este proceso continúa a través de un cierto número de etapas cada vez más refinadas, hasta que se ha logrado un nivel de detalles apropiado. Esta es la esencia del diseño top-down. Se trabaja a partir de una solución muy abstracta (el nivel inicial top) hasta llegar a una construcción final, mediante una serie de refinamientos sucesivos. Este enfoque es independiente de cualquier lenguaje de programación; de hecho, se está programando dentro de un lenguaje de programación, más que en uno.

Modulo-->Formulario-->Objetos -->Documentación

Diagrama_Insumo

El diseño top-down es una técnica que han aplicado durante muchos años los buenos programadores.(Dijkstra 1968). Este enfoque es atrayente porque puede definir una estructura para el proceso no estructurado del desarrollo de programas. La atención se concentra en el diseño, en vez de hacerlo en los detalles de la construcción y, por tanto, limita el número de «pelotas» que será necesario tratar a un tiempo. Como toda herramienta, su uso es más eficiente cuando se tiene alguna práctica con ella. El sentido común, la intuición y la creatividad continúan siendo atributos valiosos del programador.

La programación dinámica por ejemplo, es un enfoque que ocupa el mismo concepto top-down para la solución de problemas en los que es necesario tomar decisiones en etapas sucesivas. Las decisiones tomadas en una etapa condicionan la evolución futura del sistema, afectando a las situaciones en las que el sistema se encontrará en el futuro (denominadas estados), y a las decisiones que se plantearán en el futuro.

 


Artículos Relacionados