Técnicas de Programación 2.1.- Introducción: unos conceptos previos y primeros conceptos de la API Introducción La resolución de un problema con medios informáticos implica generalmente la siguiente secuencia de operaciones: Información de entrada: Conjunto de datos de partida necesarios para la resolución del problema. Algoritmo de resolución: Instrucciones necesarias para obtener los datos de salida a partir de los datos de entrada. Información de salida: Información que se desea obtener tras procesar la información de entrada. Cuando hemos hablado de información nos referimos tanto a instrucciones como a datos. Las instrucciones son la información que indica a la máquina lo que hay que hacer. Un conjunto de instrucciones convenientemente ordenadas y encadenadas es un programa de ordenador. Los datos son la información sobre la que actúan las instrucciones. A veces ocurre que los datos de salida sirven a su vez como datos de entrada a otro programa e incluso al mismo. Esto se conoce como realimentación o feedback. 1
Introducción Si vamos a usar un ordenador para resolver un problema este deberá realizar las operaciones con los datos para obtener los resultados. Para ello debemos proporcionar al ordenador un algoritmo de resolución, es decir, debemos indicarle los pasos y operaciones que debe realizar. Es el algoritmo expresado en un lenguaje de programación lo que constituye un programa. En una primera fase de diseño podemos utilizar una notación que nos resulte más fácil de interpretar, como puede ser pseudocódigo u ordinogramas, pero posteriormente debemos codificarla en un lenguaje de programación como, por ejemplo, en lenguaje C y finalmente debemos traducirla a lenguaje máquina que es el único que entiende el ordenador. Lenguajes de programación Existen muchos lenguajes de programación y cada uno utiliza su propio conjunto de símbolos y reglas. De entre ellos podemos destacar: Lenguaje máquina: Un ordenador solamente es capaz de reconocer las instrucciones que damos al procesador en binario o lenguaje máquina, por tanto todo programa debe finalmente estar escrito en lenguaje máquina, pero este nos resulta prácticamente ilegible para nosotros, aunque resulta el más eficiente desde el punto de vista de la máquina, presentando como principales inconvenientes los siguientes: Las instrucciones se dan como cadenas binarias, octales o hexadecimales y solamente realizan operaciones simples. El lenguaje máquina es específico de cada microprocesador y por tanto sus instrucciones tienen un formato particular para cada uno. No es un lenguaje estructurado sino adaptado a la circuiteria del ordenador. No se pueden utilizar nombres de variables sino que hay que asignar memoria para variables y constantes. No existen los comentarios por lo que no se puede documentar el programa. 2
Lenguajes de programación Lenguaje ensamblador: Es el lenguaje de bajo nivel más próximo al lenguaje máquina y lo que hace es sustituir las cadenas numéricas por nemotécnicos o códigos de tres o cuatro letras que las sustituyen. Se trata de abreviaturas en inglés de la operación que realizan, como por ejemplo JMP que indica SALTO. Presenta mayor facilidad de codificación que el lenguaje máquina y resulta más fácil de interpretar para el programador. Ya podemos usar direcciones simbólicas mediante un nombre de referencia en lugar de direcciones absolutas y se pueden incluir comentarios que el traductor eliminará para que no aparezca en el código máquina generado. Un programa en ensamblador necesita ser ensamblado o traducido a lenguaje máquina para que el ordenador lo pueda ejecutar. Este traductor se denomina ensamblador. Los lenguajes de bajo nivel como el máquina y el ensamblador reducen su aplicación a situaciones y equipos muy concretos, como el control de procesos, trabajo en tiempo real o programación de micro controladores. Lenguajes de alto nivel: Permiten usar simbología que los acerca al lenguaje humano y los programas pueden funcionar en diferentes ordenadores. Para que el ordenador los pueda interpretar necesitan ser traducidos a lenguaje máquina. Entonces el programa a traducir se denomina programa fuente y el obtenido programa objeto. Del mismo modo que cuando se trabaja con idiomas existen dos formas de traducir un programa fuente: a posteriori o todo lo que se va a traducir de una vez y traducción simultánea. Por este motivo vamos a tener dos tipos de traductores: Compilador, que es un programa que traduce a posteriori todo el programa fuente en un programa de lenguaje de bajo nivel o ejecutable. Ejemplos de estos son C++ Builder, Visual C++, etc. Interprete, que es un programa que traduce simultáneamente, es decir realiza la traducción de una sentencia e informa al microprocesador de lo que debe hacer para posteriormente seguir con otra sentencia. Ejemplos de estos son Java, Javascrpts, php, etc. 3
Fases de la programación y posibles errores De una forma genérica la programación la podemos dividir en cuatro fases: 0.- Fase de edición. Consiste en escribir el programa fuente con la ayuda de un programa editor y grabarlo en el ordenador. Debemos ser especialmente cuidadosos para evitar errores que hagan al proceso inservible, pero evidentemente nos resultará imposible, sobre todo al principio, no cometerlos. 1.- Fase de compilación. Ahora se traduce el programa fuente a lenguaje máquina para obtener el programa objeto. Para hacerlo se usan programas compiladores (o interpretes) que además comprueban la correcta sintaxis del código fuente. En esta fase se detectan los errores correspondientes al incumplimiento de las reglas sintácticas del lenguaje, como por ejemplo no finalizar una sentencia con ; en C. Se trata de errores fáciles de corregir ya que los detecta el compilador indicándonos donde están y de que tipo son mostrándonos un mensaje de error. 2.- Linkado. En esta fase se añaden al programa rutinas del sistema y/o programas externos lo que se hace con un programa linker. 3.- Ejecución. Se trata de realizar la prueba del programa en todas sus facetas para garantizar su correcto funcionamiento. En esta fase se producen errores debidos a operaciones no permitidas (dividir por cero o introducir un dato incorrecto) y se detectan porque se aborta la ejecución del programa por el sistema. Son más difíciles de detectar y corregir que los de sintaxis ya que no se detectan en la fase de compilación. Otro tipo de error que se comete son los denominados lógicos que consisten en la obtención de resultados erróneos o no esperados a partir de unos datos determinados. Son muy dificles de corregir y la única forma de hacerlo es la ensayo/error comparando los resultados obtenidos por el programa con los que deberíamos obtener a mano. 4
Técnicas o métodos de programación En metodología de la programación existen cinco posibles formas: 0.- Programación modular, descendente o top-down. Se basa en la descomposición sucesiva del algoritmo inicial en módulos para realizar tareas concretas. 1.- Programación estructurada. Se utiliza de forma exclusiva un estructura secuencial para controlar el flujo de ejecución de instrucciones. Estos programas son muy fáciles de verificar, depurar y mantener. 2.- Programación Orienta a Objetos (OPP, Object Oriented Programming). Este sistema unifica los datos y el código que actúa sobre ellos. 3.- Programación Orientada a Eventos. Este tipo se base en hacer que el código se adapte al usuario en lugar de realizar acciones preestablecidas. 4.- Programación Visual. Consiste en realizar aplicaciones para trabajar en un entorno visual como el de Windows sin necesidad de conocer profusamente su funcionamiento interno. Se trata de hacer funcionar nuestro programa con las técnicas habituales de clicar con el ratón o arrastrar y soltar. Se basan, al igual que Windows y cada vez más Linux, en crear aplicaciones que contienen objetos con unas determinadas propiedades características y unas líneas de código para realizar determinadas acciones. De las cinco formas posibles la que posiblemente resulte más fácil a la hora de crear una determinada aplicación es la Visual, razón por la que será la que adoptemos para este curso, aunque se darán pinceladas de las otras en momentos determinados (cuando resulte necesario para las explicaciones). En concreto hemos adoptado una aplicación para realizar estas tareas que no es otra que C++ Builder de la firma Borland, aunque se podrían adoptar otras aplicaciones. 5
Fin de la presentación 6