Ahora que tenemos el enunciado del problema a resolver, así como las entradas con las que contamos y las salidas que deseamos, es necesario que tengamos un algoritmo que nos permita resolver nuestro problema y obtener los resultados que esperamos.
Para esto es necesario el modelar o elaborar un modelo que nos permita resolver nuestro problema. En más de una ocasión es probable que para llegar a nuestro objetivo se involucren una serie de pasos intermedios(estados de los datos), o más que ello, sea posible que necesitemos tener un cierto comportamiento para no tener un resultado concreto sino un resultado relativo que también nos sirve para nuestro objetivo. En el primer caso, me refiero a soluciones que necesitan ser inmediatos, como la impresión de un saludo en pantalla o resolver una operación aritmética, y, en el segundo caso, a cosas como los videojuegos o simulaciones (un reloj o un calendario por ejemplo).
A pesar de que depende del entorno de nuestro problema tendremos distintos tipos de soluciones que nos resolverán nuestro problema, cada solución tendrá distintas características propias de su entorno, pero, a pesar de ello todas las soluciones comparten un conjunto de características:
- La solución debe de ser correcta, eficiente y efectiva.
Lo de correcta, creo que no hay nada que explicar sobre la correctez de una solución, ya que es lo que se desea cuando se diseña dicha solución. Con respecto a la eficiencia, se puede tener una excepción, ya que puede que solo si estamos haciendo un programa que nos ayude para resolver un problema para calcular algo o para sacarnos de un problema momentáneo, es decir, un programa que se va utilizar por un breve tiempo.
La eficiencia es una parte fundamental de una solución, ya que no podemos desperdiciar recursos(memoria principal, tiempo de procesamiento, etc.) de manera descuidada, ya que en más de una ocasión una pequeña falta de eficiencia en nuestras soluciones puede hacer que falle toda nuestra aplicación y la "tire".
Por efectiva nos referimos al hecho de que produce el efecto esperado en conjunción con la correctez y la eficiencia del mismo. Actualmente los programas son tan grandes que resulta muy difícil que una sola persona los realice por su propia cuenta, así que se tiende a trabajar en equipos(esto de manera muy GENERAL), entonces se requiere que los programas sean:
- Modulares: esto quiere decir que se pueda dividir en varios pedazos (tener fronteras entre diversas partes que hagan su parte por separado), así para que las tareas se puedan repartir de manera eficiente.
- Bajo nivel de acoplamiento: Esto es, que tengan que recibir o utilizar lo menor posible del exterior y entreguen lo mínimo posible (esto es que haya muy poco tráfico entre los módulos), de tal forma que puedan ser reutilizados por otros.
- Alta cohesión: aquí nos referimos al hecho de que todo lo que se encuentre relacionado (variables, métodos) se encuentren juntos, para que el programa sea fácil de entender y modificar.
Esto es lo básico del análisis y diseño del algoritmo, en el siguiente post seguiré con las demás etapas del proceso del software.
No hay comentarios:
Publicar un comentario