En la etapa anterior denominada análisis, el principal cuestionamiento se da a través de determinar qué hace el programa y cuáles son los datos de entrada, procesos y salidas.
En la etapa de diseño se determina el cómo hacer que el programa responda a la tarea solicitada. Para dar respuesta a la pregunta anterior y a una óptima solución se recomienda dividir el problema en subproblemas y estos a su vez en otros problemas de más bajo nivel hasta llegar a la implementación de la solución.
A este método se le conoce técnicamente como diseño descendente o modular[1]; así que cualquier programa tendrá un módulo o programa principal que enlaza a otros subprogramas (o módulos) que una vez realicen la tarea que a cada uno le corresponde, devuelven el control al programa principal o al módulo que lo invocó. La ventaja del diseño descendente o modular radica en la facilidad para que cada módulo pueda ser codificado, validado y depurado de manera independiente y al final pueda ser integrado al módulo o programa principal.
La particularidad del diseño radica en que algoritmo debe ser representado en algún método que permita independizarlo del lenguaje de programación al que posteriormente se va a codificar, y para conseguir éste objetivo se precisa que el algoritmo sea representado gráfica o alfanuméricamente de modo que las secuencias y acciones no dependan de las sintaxis de algún lenguaje de programación, sino que la descripción pueda servir fácilmente para su transformación a un lenguaje determinado.
Los métodos usados para representar el algoritmo son:
La representación en diagrama de flujo que se muestra en la figura 1, corresponde a la solución del problema que determina si un número ingresado por el usuario es positivo o negativo.
El diagrama fue obtenido directamente del programa PSeInt como se indica en la figura 2.
[1]Joyanes A. Luis. (2000). Programación en algoritmos, estructuras de datos y objetos. McGraw Hill. México.