Generalmente, la primera razón que mueve a una persona hacia el aprendizaje de la programación es utilizar el ordenador como herramienta para resolver problemas concretos. Como en la vida real, la búsqueda y obtención de una solución a un problema determinado, utilizando medios informáticos, se lleva a cabo siguiendo unos pasos fundamentales. En la siguiente tabla podemos ver estas analogías.
En la vida real... | En Programación... |
---|---|
Observación de la situación o problema. | Análisis del problema: requiere que el problema sea definido y comprendido claramente para que pueda ser analizado con todo detalle. |
Pensamos en una o varias posibles soluciones. | Diseño o desarrollo de algoritmos: se establece una solución al problema sin entrar en detalles tecnológicos. Se aplican diferentes técnicas y principios para establecer de forma detallada los pasos a seguir para resolver el problema. |
Aplicamos la solución que estimamos más adecuada. | Resolución del algoritmo elegido en la computadora: consiste en convertir el algoritmo en programa, ejecutarlo y comprobar que soluciona verdaderamente el problema. |
¿Qué virtudes debería tener nuestra solución?
- Corrección y eficacia: si resuelve el problema adecuadamente.
- Eficiencia: si lo hace en un tiempo mínimo y con un uso óptimo de los recursos del sistema.
Para conseguirlo, cuando afrontemos la construcción de la solución tendremos que tener en cuenta los siguientes conceptos:
- Abstracción: se trata de realizar un análisis del problema para descomponerlo en problemas más pequeños y de menor complejidad, describiendo cada uno de ellos de manera precisa. Divide y vencerás, esta suele ser considerada una filosofía general para resolver problemas y de aquí que su nombre no sólo forme parte del vocabulario informático, sino que también se utiliza en muchos otros ámbitos.
- Encapsulación: consiste en ocultar la información que manejan de los diferentes elementos que forman el sistema. La forma de manejar es información no debe influir en el resto de elementos del sistema.
- Modularidad: un proyecto software será dividido en módulos independientes, dependiendo de su tamaño, donde cada uno de ellos tendrá su función correspondiente. Los demás módulos del sistema podrán utilizar su funcionalidad sin necesidad de conocer cómo funciona internamente.