Un programa es un conjunto de
líneas de código escritas en un lenguaje de programación
determinado. Pero el código escrito en un lenguaje de alto nivel no puede
ser entendido por el ordenador, por lo que es necesaria la traducción
a código máquina. En este proceso tienen lugar dos fases. En la
primera fase (compilación) el compilador traduce cada uno de las partes
del programa y crea módulos objeto, que posteriormente serán unidos
por el linker (enlazado), creando el módulo ejecutable .exe. Como
la compilación y el enlazado son dos procesos dependientes, a menudo
se suele denominar a todo el proceso compilación.
En el diseño de un programa tenemos diferentes
pasos:
- Análisis del problema. Este paso es fundamental. La
correcta resolución de un problema viene determinada en gran medida
por el planteamiento inicial. Un planteamiento correcto nos evitará
perder tiempo en la implementación de algoritmos que posteriormente
nos demos cuenta que son incorrectos. En este paso nos debemos hacer tres
preguntas: ¿Qué entradas se nos ofrece?, ¿Qué
salida debemos generar? y ¿Cuál es el método que debemos
usar para llegar hacia la solución deseada?
- Diseño del algoritmo. Si en el análisis determinamos
qué hace el programa aquí determinamos cómo lo hace.
Para ello se divide el problema en varios subproblemas que se solucionan de
forma independiente (divide y vencerás), lo que se denomina diseño
modular. En este paso puede ser conveniente la utilización de diagramas
de flujo o pseudocódigo.
- Codificación. Es la escritura del código según
el algoritmo decidido en las etapas anteriores.
- Compilación y ejecución. Una vez escrito el
código, se compila. Si el código contiene errores el compilador
nos los mostrará: son los llamados errores de compilación, que
suelen estar relacionados con incoherencias en la sintaxis, conversión
incorrecta de tipos, etc. Una vez solucionados estos errores, se creará
el programa ejecutable.
- Verificación. Al ejecutar el programa puede ocurrir
que realice lo que queríamos o que, por el contrario, produzca un resultado
indeseado. Nos encontramos aquí con dos tipos de errores:
- Errores de ejecución: Se producen cuando el programa llega a un punto
en el que el ordenador no puede realizar la operación que se le solicita:
división por cero, desbordamiento, etc.
- Errores del algoritmo: Son los más difíciles de detectar,
se producen cuando el algoritmo está mal implementado. Nos conduce
al siguiente paso.
- Depuración. Esta es una parte importante. Se utilizan
las herramientas de depuración del compilador que usamos, lo que en
gran medida determina si el compilador es mejor o peor. En general, todos
los compiladores incluyen entre sus herramientas de depuración las
siguientes:
- Ejecución paso a paso: En lugar de ejecutar todo el programa hasta
su finalización, se ejecuta línea a línea, lo que permite
observar el comportamiento del programa en cada momento.
- Watches (inspecciones): permiten seguir el valor de una variable y comprobar
que cambia su valor en su momento y modo deseado.
- Debug Inspector: similar a las watches pero especialmente útil para
la visualización de arrays, listas, etc.
- Breakpoints: si la ejecución es demasiado larga, podemos definir
un breakpoint (punto de ruptura) en una o varias líneas. El programa
se ejecutará normalmente hasta que llegue a una de esas líneas.
En ese momento la ejecución se detendrá y podremos consultar
valores de variables o ejecutar paso a paso desde ese punto.
- Evaluar/modificar: permite obtener el valor de una variable en un punto
en el que la ejecución del programa se ha pausado. Se puede modificar
el valor de dicha variable para comprobar, por ejemplo, que si tuviera otro
valor el comportamiento también sería el esperado.
|