Acostumbrados estamos a usar programas de todo tipo.
Pero la pregunta del título no es tan fácil de responder.
Los programas, como es obvio, evolucionaron, pero si podemos decir que hay algo básico que sigue siendo cierto:
Un programa es una sucesión de acciones.
Antaño, cuando programar no era tan sencillo (ni barato ), era necesario tener bien claro cada paso. Un programa podían ser de cientos de líneas… o sea cientos de tarjetas perforadas… que si había un error, habría que re codificar. Tiempo, costo, etc.
Por eso, se diseñó una metodología para esquematizar el programa y hacer pruebas de su funcionalidad previas a cualquier codificación.
La diagramación lógica.
Se basa en esquematizar un proceso paso a paso. Hay diseños estándar para representar los distintos tipos de actividades.
Los “terminadores” (Inicio y fin), establecen precisamente eso, los extremos del proceso.
Las acciones, como se ve en el diagrama, se representa por rectángulos.
Por supuesto, a estas alturas, nadie usa diagramación lógica para programar.
Sin embargo, en este blog haré uso de ellos; de cuando en vez, echaré mano a ellos, para contarte mejor de que va algo.
Ejemplo simple (y, de paso, sentencias de control de flujo).
Si bien ahora el .Net Framework es capaz de hacer matemática de fechas (en realidad, desde bastante antes, lenguajes como Visual Basic, o los dBase, ya lo tenían), hubo épocas en que las fechas se debían ingresar en campos separados (día, mes y año), y luego validarla adecuadamente. Insisto, no es una problemática actual pero sirve para equiparar diagramas y códigos.
Aunque parezca simple, se lleva varios pasos.
- El mes no puede ser menor de uno.
- El mes no puede ser mayor que doce.
- El día no puede ser menor de uno
- El día no puede ser mayor que 31
- Si el mes es abril, junio, setiembre o noviembre, el día no debiera ser mayor que 30.
- Si el mes es febrero, no debiera ser mayor que 28, excepto si el año es bisiesto, que no podrá ser mayor que 29.
Bueno, como se ve, los rombos simbolizan preguntas (en realidad, toma de decisión lógica). No existe un “estándar” para indicar las salidas, aunque suelen marcarse con “si y no”. En el diagrama, usé colores, que también sirve.
La sentencia de decisión lógica.
En definitiva, es una pregunta:
SI sucede esto ENTONCES hacemos esto.
If condición Then acción() End If
if (condición) { acción; }
En ocasiones, es cuestión de tomar acciones alternativas, dependiendo del valor lógico, como la decisión del año bisiesto:
If Bisiesto Then If Día > 29 Then acción() End If Else If Día > 28 Then acción() End If End If
if (Bisiesto) { if (Día>29) { acción; } } else { if (Día > 28) { acción; } }
En conclusión, el diagrama completo (exceptuando que en realidad las variables no existen), sería
EsVálida = True If Mes < 1 Then EsVálida = False Return EsVálida End If If Mes > 12 Then EsVálida = False Return EsVálida End If If Día < 1 Then EsVálida = False Return EsVálida End If If Día < 1 Then EsVálida = False Return EsVálida End If If Día > 31 Then EsVálida = False Return EsVálida End If If Mes = 4 Then If Día > 30 Then EsVálida = False Return EsVálida End If End If If Mes = 6 Then If Día > 30 Then EsVálida = False Return EsVálida End If End If If Mes = 9 Then If Día > 30 Then EsVálida = False Return EsVálida End If End If If Mes = 11 Then If Día > 30 Then EsVálida = False Return EsVálida End If End If If Mes = 2 Then Bisiesto = (Año Mod 4 = 0) If Bisiesto Then If Día > 29 Then EsVálida = False End If Else If Día > 28 Then EsVálida = False End If End If End If Return EsVálida
EsVálida = true; if (Mes < 1) { EsVálida = false; return EsVálida; } if (Mes > 12) { EsVálida = false; return EsVálida; } if (Día < 1) { EsVálida = false; return EsVálida; } if (Día < 1) { EsVálida = false; return EsVálida; } if (Día > 31) { EsVálida = false; return EsVálida; } if (Mes == 4) { if (Día > 30) { EsVálida = false; return EsVálida; } } if (Mes == 6) { if (Día > 30) { EsVálida = false; return EsVálida; } } if (Mes == 9) { if (Día > 30) { EsVálida = false; return EsVálida; } } if (Mes == 11) { if (Día > 30) { EsVálida = false; return EsVálida; } } if (Mes == 2) { Bisiesto = (Año % 4 == 0); if (Bisiesto) { if (Día > 29) { EsVálida = false; } } else { if (Día > 28) { EsVálida = false; } } } return EsVálida;
NOTA: Este código dista de ser óptimo y NO debe usarse como ejemplo…. solo es útil para entender la lógica. Ya veremos otras versiones.
Hasta la próxima.