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