Download unidad 1
Document related concepts
Transcript
FUNDAMENTOS DE PROGRAMACIÓN. APUNTES UNIDAD 1. INTRODUCCIÓN A LA PROGRAMACION. Hoy en día, la computadora es una herramienta indispensable en muchos ámbitos. Gracias a la informática, se ha producido avances tecnológicos que eran impensables. No obstante, la máquina no puede hacer absolutamente nada sin un software, es decir, sin un programa que le diga qué es lo que tiene que hacer. Pero ¿cómo se hace un programa? Probablemente alguna vez has utilizado un ordenador para escribir un documento o para divertirse con algún juego. Para ello en el caso de escribir un documento, primero se tuvo que poner en marcha un procesador de textos, y en el juego poner en marcha el juego. Tanto el procesador de textos como el juego son programas de ordenador. Poner un programa en marcha es sinónimo de ejecutarlo. Cuando ejecutamos un programa, nosotros solamente vemos el resultado( en el procesador el texto sobre la pantalla y en el juego las imágenes que se van sucediendo) pero no vemos el guión seguido por el ordenador para conseguir los resultados. Este guión es el programa. Ahora, si nosotros escribimos un programa, entonces si que sabemos cómo trabaja y por qué trabaja de esa manera. Vamos a pensar en un juego cualquiera. La pregunta es ¿qué hacemos si queremos enseñar a otra persona a jugar? Lógicamente le explicamos lo que hacer; esto es, los pasos que tiene que seguir. Dicho de otra forma, le damos instrucciones de cómo debe actuar. Esto es lo que hace un programa de ordenador. Un programa no es nada más que una serie de instrucciones dadas al ordenador en un lenguaje entendido por él, para decirle exactamente lo que queremos que haga. Si el ordenador no entiende alguna instrucción, lo comunicará generalmente mediante mensajes visualizados en pantalla. 1. FASES DE CREACIÓN DE UN PROGRAMA El proceso de CREACIÓN de cualquier aplicación informática lleva consigo realizar una serie de tareas repartidas en cinco etapas, llamadas: análisis, diseño, codificación, pruebas y mantenimiento. A estos cinco fases se les conoce como ciclo de vida de un programa. Análisis Diseño Codificación Pruebas Mantenimiento 1 FUNDAMENTOS DE PROGRAMACIÓN. APUNTES 1.1 ANÁLISIS Un software(programa) se crea para dar solución a un problema. Lo primero que hay que hacer es analizar el problema. Esto implica determinar cuales son las exigencias del problema y estudiar si se puede resolver. Si es viable, se debe realizar un análisis muy exhaustivo del problema, del cual se obtendrá una documentación, en donde se especificará, claramente, cuales son los requisitos que el programa deberá tener. A este documento se le llama Especificación de requisitos software (ERS) y en él quedará escrito qué tiene que hacer el programa que se va a desarrollar, tanto en lo que se refiere a comportamiento interno (gestión de los datos) como al externo (interacción con el usuario y con otras aplicaciones). 1.2 DISEÑO Una vez que los requisitos de un programa han sido establecidos, ya se puede iniciar la fase del diseño. Dicha solución determinará cómo se va a resolver el problema. No suele se fácil encontrar una solución óptima para ello se recurre al diseño modular. Diseño modular Dado un problema a resolver, en primer lugar hay que estudiar si existe la posibilidad de dividirlo en otros más pequeños llamados subprogramas (este método es conocido como divide y vencerás). Cada uno de ellos puede tratarse de forma aislada; luego la complejidad de un programa disminuirá. Del mismo modo di los subprogramas siguen siendo muy complicadas, éstos pueden y suele ser conveniente dividirlos. Y así, sucesivamente hasta llegar a problemas muy sencillos. Dependiendo de las características de un problema se alcanzará un nivel de descomposición diferente. Los módulos se interrelacionan entre si, ya que cada uno de ellos tendrá un comportamiento que afectará al que este por debajo o por encima de él. Sin embargo la manera en que cada uno de los módulos realice sus tareas no será visible al resto de los módulos, se dice que hay una encapsulación. En resumen, la solución de un problema suele venir dada por un programa representado el módulo principal, el cual se descompone en subprogramas (submódulos), los cuales a su vez se pueden fraccionar, y así sucesivamente, es decir el problema se resuelve de arriba abajo. A este método se denomina diseño modular o descendente (top-down). 2 FUNDAMENTOS DE PROGRAMACIÓN. APUNTES ¿Qué es un algoritmo? En la fase de codificación, todos los módulos definidos mediante el diseño modular se convertirán en un programa, es decir, la aplicación final estará compuesta por la suma de todos los programas que se diseñen. Pero antes, se debe hacer uso de instrucciones o acciones de cada uno de dichos programas. Para ello, se debe hacer uso de algoritmo. Un algoritmo, establece, de una manera informal, la secuencia de pasos o acciones que resuelve un determinado problema. Constituyen la documentación principal que se necesita para poder iniciar la fase de codificación, y para representarlos, se utiliza, fundamentalmente, dos tipos de notación: pseudocódigo y diagramas de flujo. El diseño de un algoritmo es independiente del lenguaje que se vaya a utilizar después para codificarlo. Pseudocódigo Es un lenguaje de programación intermedio entre el lenguaje natural y el lenguaje de programación específico, como son: C, fortran, Pascal, Cobol.. Ejemplo: Un programa que va a calcular la suma de dos números enteros introducidos por el usuario, y después se va a mostrar por pantalla el resultado obtenido. Es un programa muy sencillo y no necesita descomponerlo, luego solamente tiene el módulo principal que puede ser: Algoritmo sumar Variables entero a, b, c inicio escribir leer (a) escribir leer (b) C <- a + escribir fin (“Introducir el primer número(entero):”) (“Introducir el segundo número(entero):”) b (“La suma es:”, c) Un algoritmo escrito en pseudocódigo siempre se suele organizar en tres partes: cabecera , declaraciones y cuerpo. Cabecera: nombre del programa Declaraciones: los datos que va a utilizar el programa. Cuerpo: todas las acciones que se tienen que llevar a cabo en el programa y siempre se escriben entre el inicio y fin. 3 FUNDAMENTOS DE PROGRAMACIÓN. APUNTES Diagramas de flujo Los algoritmos también se suelen representar gráficamente, por medio de diagramas de flujo conocidos también como ordinogramas. Representa de manera gráfica, el orden de los pasos o acciones de un algoritmo. Por ejemplo el algoritmo anterior escrito en pseudocódigo en un diagrama de flujo sería: INICIO escribir("Introduzca el primer numero:") leer(a) escribir("Introduzca el segundo numero:") leer(b) c <- a + b escribir("la suma es :", c) fin 1.3 CODIFICACION Una vez que los algoritmos de una aplicación han sido diseñados, ya se puede iniciar la fase de codificación. En esta etapa se tiene que traducir loa algoritmos a un lenguaje de programación específico, en nuestro caso C. Al codificar en C el algoritmo del programa Sumar, se escribirá algo parecido a: Programa Sumar # include <stadio.h> int main() { int a, b, c; printf(“\n Introduzca el primer numero (entero): “); scanf(“%d”, &a); printf(“\n Introduzca el segundo numero (entero): “); scanf(“%d”, &b); c = a + b; printf(“\n La suma es: %d“, c); return 0; } 4 FUNDAMENTOS DE PROGRAMACIÓN. APUNTES Lenguajes de programación Un lenguaje de programación permite al programador comunicarse con la computadora para decirle lo que tiene que hacer. Con esta finalidad el hombre ha inventado muchos lenguajes de programación, ahora bien, todos ellos se pueden clasificar en tres tipos fundamentales: máquina, de bajo nivel y de alto nivel. El lenguaje máquina es el único que entiende la computadora digital, es su lenguaje natural. En él sólo se pueden utilizar dos símbolos: el cero (0) y el uno (1). Por ello, al lenguaje máquina también se le denomina lenguaje binario. La computadora sólo puede trabajar con bits, sin embargo, para el programador no resulta fácil escribir instrucciones tales como: 10100010 11110011 00100010 Por esta razón, se inventaron los lenguajes de programación más entendibles para el programador. Así, aparecieron los lenguajes de bajo nivel, también llamados lenguajes ensambladores, los cuales permiten al programador escribir las instrucciones de un programa usando abreviaturas del inglés, también llamadas palabras nemotécnicas, tales como: ADD, DIV, DUB,.. en vez de utilizar ceros y unos. Ejemplo: la instrucción ADD a, b, c podría ser c <- a + b del algoritmo anterior la cual significa que en el espacio de memoria representado por la variable c se puede almacenar los dos números guardados en los espacios de memoria representados por las variables a b. Un programa escrito en este lenguaje tiene el inconveniente de que no es comprensible para la computadora , ya que, no esta compuesto por ceros y unos. Para traducir las instrucciones de un programa escrito en un lenguaje ensamblador a instrucciones de un lenguaje máquina hay que utilizar un programa llamado ensamblador: computadora Instrucciones en lenguaje ensamblador Programa ensamblador Instrucciones en un lenguaje máquina Una dificultad añadida a los lenguajes binarios es el hecho de que son dependientes de la máquina( o mejor dicho, del procesador), es decir, cada procesador utiliza un lenguaje maquina distinto (un juego de instrucciones distinto) que está definido en su propio hardware. Luego un programa escrito para un tipo de procesador no podrá ser utilizado para otro procesador distinto, ya que el programa no es portable o transportable. 5 FUNDAMENTOS DE PROGRAMACIÓN. APUNTES Igualmente, puesto que las instrucciones que se pueden escribir en un lenguaje ensamblador siempre están asociadas a las instrucciones binarias de una computadora en concreto, los lenguajes ensambladores también son dependientes del procesador. Sin embargo los lenguajes de alto nivel si son independientes del procesador, es decir, un programa escrito en un ordenador en un lenguaje de alto nivel podrá transportarse a cualquier computadora , con algunos pequeños cambios o incluso ninguno. Un lenguaje de alto nivel permite al programador escribir las instrucciones de un programa utilizando palabras o expresiones sintácticas muy similares al inglés. Por ejemplo, en C, se pueden usar palabras tales como: case, if , for, while.. para construir con ellas instrucciones como: if (numero >0) printf(“ el número es positivo”) que traducido al castellano sería: si el numero es mayor que 0 entonces, escribir por la pantalla el mensaje: “el número es positivo”. Ésta es la razón por lo que a estos lenguajes se les considera de alto nivel, porque se pueden utilizar palabras de muy fácil comprensión para el programador. En contraposición los lenguajes de bajo nivel están más cerca del entendimiento de la máquina. Otros lenguajes de alto nivel: ADA, BASIC, COBOL, PASCAL.. Una característica de los lenguajes de alto nivel es que, para la mayoría de las instrucciones de estos lenguajes , se necesitarían varias instrucciones en un lenguajes ensamblador para indicar los mismo. De igual forma que la mayoría de las instrucciones de los lenguajes ensambladores necesitarían varias instrucciones de lenguaje máquina. instrucción de alto nivel instrucción en ensamblador instrucción binaria 00011100 10101111 01110011 instrucción en ensamblador Instrucción binaria 00011100 10101111 01110011 00011100 10101111 01110011 6 00011100 10101111 01110011 00011100 10101111 01110011 FUNDAMENTOS DE PROGRAMACIÓN. APUNTES Relación entre las instrucciones de alto nivel, ensamblador y máquina. Sin embargo un lenguaje de alto nivel tampoco se libra del inconveniente que tiene el hecho de no ser comprensible para la computadora, y por tanto, para traducir las instrucciones de un programa escrito en lenguaje de alto nivel a instrucciones de un lenguaje máquina, hay que utilizar otro programa que en este caso se denomina compilador. computadora Instrucciones en un lenguaje de alto nivel Programa compilador Instrucciones en un lenguaje máquina Compiladores e intérpretes Al conjunto de instrucciones escrito en un lenguaje de alto nivel se le llama código fuente del programa. Así pues, el compilador es un programa que recibe como datos de entrada el código fuente de un programa escrito por un programador, y genera como salida un conjunto de instrucciones escritas en el lenguaje máquina de la computadora donde se van a ejecutar. Al conjunto de instrucciones generado por el compilador se le denomina código objeto . Normalmente, un programador en C, utilizará un programa de edición para escribir el código fuente de un programa, y lo guardará en un archivo con una extensión (.c), ejemplo, Suma.c. A continuación, un compilador de C traducirá el código fuente a código objeto guardándolo con otra extensión, que, dependiendo del sistema operativo puede variar. Por ejemplo, en windows, se guardará con la extensión (.obj). Por otro lado, existen, otro tipo de programas llamados intérpretes, los cuales también sirven para traducir el código fuente de un programa a código objeto, pero su manera de actuar es diferente a un compilador. El funcionamiento de un interprete se caracteriza por traducir y ejecutar, de una en una , las instrucciones del código fuente de un programa, pero sin generar como salida código objeto. Es decir, el interprete realiza el siguiente proceso: lee la primera instrucción del código fuente, la traduce a código objeto y la ejecuta; a continuación hace lo mismo con la segunda instrucción, así sucesivamente hasta llegar a la última instrucción del programa, siempre y cuando haya algún error que detenga el proceso. 7 FUNDAMENTOS DE PROGRAMACIÓN. APUNTES En un programa pueden existir básicamente tres tipos de errores: de sintaxis, de ejecución y de lógica. Tipos de errores Error de sintaxis: cuando en alguna instrucción del código fuente de un programa existe un error de sintaxis, dicho error impedirá, tanto al compilador como al interprete, traducir dicha instrucción, ya que ninguno de los dos entenderá qué le está diciendo el programador. Ejemplo: si en vez de escribir Printf(“\n Introduzca el primer número (entero):”); Se pone Prrintf(“\n Introduzca el primer número (entero):”); Cuando el compilador o el intérprete lean esta línea ninguno de los dos entenderá que significar y por lo tanto no podrán traducir esta instrucción a código máquina y avisarán al programador de dicho error. Los errores de sintaxis se detectan en el proceso de traducción del código fuente a código binario. Al contrario que los otros dos tipos de error que se detectan cuando el programa se está ejecutando. Error de ejecución: se produce cuando el ordenador no puede ejecutar alguna instrucción de forma correcta. Ejemplo: la instrucción c = 5/0; es correcta sintácticamente y será traducida a código binario. Sin embargo, cuando la computadora intente realizar la división 5/0 se producirá un error de ejecución , ya que, matemáticamente no se puede dividir 5/0. Error de lógica: son los más difíciles de detectar. Cuando un programa no tiene errores de sintaxis ni de ejecución, pero, aun así, no funciona bien, esto es debido a un error de lógica. Un error de lógica se produce cuando los resultados obtenidos no son los esperados. Por ejemplo si en vez de la instrucción c = a + b; se ha puesto c = a * b hasta que no se vea el resultado, el programador no podrá darse cuenta del error. 8 FUNDAMENTOS DE PROGRAMACIÓN. APUNTES Fases de la puesta a punto de un programa Teniendo en cuenta que una aplicación informática suele estar compuesta por un conjunto de programas o subprogramas, el código objeto de todos ellos deberá ser enlazado (unido) para obtener el programa ejecutable. Para ello se utiliza un programa llamado enlazador ,el cual, generará y guardará en disco, un archivo ejecutable. En windows, tendrá la extensión .exe computadora Código objeto de varios programas Programa enlazador Código objeto del programa final (.exe) Los lenguajes de alto nivel son portables, lo que significa que un programa creado en este tipo de lenguajes pueden ejecutarse en cualquier otra máquina. Aunque no es del todo cierto, ya que para que sea posible entre máquinas de distinto tipo, el código fuente debe ser compilado y enlazado de nuevo en es máquina. Luego los lenguajes de alto nivel son portables su código fuente pero no los códigos binarios (código objeto). Para la mayoría de los programas escritos en lenguajes de programación de alto nivel el proceso de obtención del código ejecutables consta de tres fases: edición, compilación y enlace. Sin embargo, en algunos lenguajes como C, requieren una fase más, llamada preproceso. El preproceso se realiza antes de la compilación , y de hecho es el propio compilador el que llama al preprocesador. Éste sirve para realizar una serie de modificaciones en el código fuente escrito por el programador, esto sirve entre otras, para que más tarde el enlazador pueda unir el código objeto del programa que se está desarrollando con el código objeto de otros programas. El preproceso no es visible al programador ya que no se guarda ningún archivo. 9 FUNDAMENTOS DE PROGRAMACIÓN. APUNTES Gráficamente sería: Codigo fuentes (.c) Editor Codigo fuente modificado Preprocesador Codigo objeto(.obj) Compilador Otros codigo objeto Enlazador 1.4 Codigo ejecutable (.exe) PRUEBAS Una vez obtenido el código ejecutable este se tiene que ejecutar tantas veces como se considere necesario , proporcionando cada vez datos de entrada distintos y comprobando que los de salida son los esperados. Este tipo de pruebas sirven para detectar los errores de ejecución o de lógica. Ejemplo: en el programa sumar se puede probar con distintos datos de entrada con números negativos y positivos. Pero en todos los programas se pueden darse situaciones inesperadas , situaciones no previstas por el programador. Por ejemplo ¿qué ocurre si se introducen dos letras? ¿ o dos números reales? .. siempre dentro del programa hay que tener en cuenta este tipo de situaciones. 1.5 MANTENIMIENTO El mantenimiento de un programase puede realizar, en dos sentidos: reparación o modificación. Una vez implantada la aplicación, todavía pueden darse errores no detectados en las fases anteriores, lo cual implica una reparación. Por otro lado, puede ser que la aplicación se le quiera ampliar o cambiara alguna funcionalidad, lo cual llevará a realizar modificaciones. 10