Dice el dicho: Divide y vencerás, y en el caso de los algoritmos ese dicho es completamente cierto. Como ya hemos aprendido a lo largo de las 22 lecciones anteriores, un programa está compuesto de muchas estructuras que trabajan en conjunto para resolver un problema o completar una tarea. Por supuesto, mientras más complejo el problema, más extenso será el código que tendremos que escribir para solucionarlo. Esto puede ocasionar que nuestros programas se vuelvan complicados de leer, comprender y mantener.
Para evitar esta situación, lo mejor que podemos hacer es dividir un problema complejo en subproblemas más sencillos , y a continuación dividir esos subproblemas en otros más simples, hasta que los problemas más pequeños sean fáciles de resolver. Este método de diseñar la solución de un problema principal obteniendo las soluciones de sus subproblemas se conoce como diseño descendente (top-down design). Se denomina descendente, ya que se comienza por la parte superior considerando el problema general y luego descendiendo hacia los subproblemas particulares que forman al problema principal. Cuando nos aproximamos de este modo a la solución de un problema, cada una de las partes en las que lo dividimos se puede desarrollar de un modo independiente entre sí, lo cual facilita el trabajo en equipo de varios desarrolladores.
Como ejemplo, pensemos en el problema de codificar un sitio web que permita capturar una serie de calificaciones, almacenarlas en una base de datos, calcular promedios y regresar al usuario un archivo PDF con los datos capturados y los resultados capturados. Este problema podría dividirse en varios subproblemas para trabajar en ellos de manera independiente y llegar más rápido a una solución funcional. Podemos tener a un desarrollador que se encargue de codificar la página en la que se van a capturar los datos, otro trabajando en el código necesario para recibir esos datos y almacenarlos en una base de datos, otro trabajando en leer las calificaciones de la base de datos y calculando los promedios y otro desarrollador encargándose de generar los reportes en PDF que se le entregarán al usuario de nuestra aplicación. Cada uno de estos desarrolladores, a su vez, se encargará de analizar su problema particular y dividirlo en más subproblemas para completar su labor paso a paso.
Un subprograma puede realizar las mismas acciones que un programa: recibe datos de entrada, los procesa y devuelve resultados. Sin embargo, un subprograma está inmerso dentro de un programa principal y está encargado de una tarea específica. El subprograma recibe datos desde el programa principal y le devuelve resultados. Se dice que el programa principal llama o invoca al subprograma. El subprograma ejecuta la tarea encomendada y entonces devuelve el control al programa principal. Un subprograma puede también llamar a otro subprograma para encomendarle una tarea determinada.
Esquemáticamente, el flujo de un programa con subprogramas se representaría así:
Existen dos tipos importantes de subprogramas: las funciones y los procedimientos (también llamados subrutinas), de los cuales nos vamos a encargar en las próximas lecciones. ¡Hasta la próxima!
Enlace: Índice del curso
0 comentarios:
Publicar un comentario