copyright © 2005 pedro Álvarez, josé Ángel bañares, pedro latorre, santiago velilla Última...
TRANSCRIPT
Cop
yri
gh
t ©
20
05
Ped
ro Á
lvare
z ,
José
Án
gel B
añ
are
s, P
ed
ro L
ato
rre,
San
tiag
o V
elil
la
Última revisión: Septiembre, 2005
Tema 1.
Conceptos Básicos de Programación
Tema 1.
Conceptos Básicos de Programación
Departamento de Informática e Ingeniería de SistemasDepartamento de Informática e Ingeniería de SistemasC.P.S. Universidad de ZaragozaC.P.S. Universidad de ZaragozaDepartamento de Informática e Ingeniería de SistemasDepartamento de Informática e Ingeniería de SistemasC.P.S. Universidad de ZaragozaC.P.S. Universidad de Zaragoza
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 2
Conceptos Básicos de Programación
Problemas y soluciones
Objetivos de la programación
Noción de algoritmo
El computador (hardware)
Cuestiones generales sobre el SoftwareEstilo de programación
Lenguajes de Programación
Elementos de un programa
Propiedades de los algoritmos
Ciclo de vida de los programas
Entorno de Programación
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 3
Problemas y soluciones
¿Cómo se resuelve un problema en general?
Datos Resultados
Modelado o representaciónDatos + procesos + resultados
Implementaciónen la plataforma de trabajo Ejecución
de los procesos
Visualizacióndel modelo de resultados
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 4
Problemas y soluciones
¿Cómo se resuelve un problema con un computador?
Datos Resultados
Análisis
Codificacióndel programa Ejecución
del programa
Presentaciónde los resultados
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 5
Objetivo de la programación.
• Problemas que se tratan de resolver en Programación
• Cómputo o cálculo
• Gestión comercial
• Control
• Tratamiento de la señal
• Lúdicos
• Inteligencia Artificial
• E-bussines
• Etc.
• Problemas cuya solución puede ser llevada a cabo por un COMPUTADOR
Computador: Herramienta que permite tratar de forma automática problemas de tratamiento de la información.
Informática: Ciencia del tratamiento de la información.
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 6
Objetivo de la programación: - Construir programas
• Programa: texto formado por instrucciones para que una máquina las ejecute
Los lenguajes de programación están diseñados de forma que sólo se requiere que los programadores establezcan sus intenciones explícitamente
• ¿Cómo transformar un problema en un programa ejecutable por un computador?
Entre problema y programa hay algunos pasos importantes:
Problema Algoritmo Programa
Análisis /Diseño
Codificación
Lenguaje Natural Lenguaje Algorítmico /
pseudocódigo
PASCAL, C, Ada, Basic, Fortran, COBOL, Java, C++, Lisp, ...
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 7
Noción de algoritmo
• Acción: Es un acontecimiento producido por un actor (o ejecutante de una acción) que tiene lugar durante un periodo de tiempo finito y que tiene como consecuencia o resultado una nueva situación bien definida y previsible.
• Estado: Es el conjunto de objetos (con sus circunstancias) disponibles en un instante determinado.
• Algoritmo: Es la descripción de una sucesión finita de acciones que permite transformar el entorno del estado inicial dado en el final deseado.
Iremos calculando factorial de n = 1* 2 * ...*i * ... npara valores crecientes de i hasta n
i:=1;
factorial:=1;
Mientras Que i < n hacer
i:= i+1;
factorial:= factorial * i
FinMientrasQue;
Solución informalen lenguaje natural
Algoritmo en lenguaje algorítmico
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 8
Noción de Programa
• Programa: Es un algoritmo escrito en términos que pueda interpretar (ejecutar) un computador. A él se llega tras codificar el algoritmo en algún lenguaje de programación.
i:=1;
factorial:=1;
Mientras Que i < n hacer
i:= i+1;
factorial:= factorial * i
FinMientrasQue;
i:=1; factorial:=1;
While i < n do
begin
i:= i+1;
factorial:= factorial * i
end;
i=1; factorial=1;
While (i < n) factorial*=++i;
lenguaje algorítmico
Pascal
C
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 9
Cuestiones generales sobre el software
En los últimos años
• El avance espectacular del hardware no ha ido acompañado por el software en cuanto a calidad y coste
• Aumento de la demanda del software: cantidad, prestaciones, calidad
• La capacidad de mantenimiento está amenazada por el mal diseño y el uso inadecuado de recursos
• La parte principal del coste de una solución informática es el software
• El efecto 2000.
• ¿cómo pudo difundirse ese miedo?
• Por falta de credibilidad
Hacia una solución
• Construcción sistemática frente a improvisada
• Construcción usando componentes: reusabilidad, librerías
• Uso de herramientas de alto nivel: que construyen programas.
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 10
Ciclo de vida de un programa
Mantenimiento: En general el software sufrirá cambios:
• Errores detectados
• Aparición de nuevos requisitos: • Externos: periféricos, sistema operativo
• Nuevas prestaciones
EspecificaciónAnálisis
Diseño
Codificación
Pruebas
Mantenimiento
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 11
El computador (Hardware)
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 12
El computador (Hardware)
CPU (Central Process Unit)
Memoria
Periféricos
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 13
Memoria de un computador
Memoria
• Se realiza mediante millones de transistores que se utilizan a modo de “interruptores” que pueden estar encendidos o apagados
• 8 bits = 1 byte Podemos representar 256 valores del 0 al 255 en binario
Base 10 Base 2
2562 = 2 * 10^3 1101= 1 * 2^3= 8
5 * 10^2 1 * 2^2= 4
6 * 10^1 0 * 2^1= 0
2 * 10^0 1 * 2^0= 1
13
Cada transistor contieneun bit de informaciónDe teoría del lenguaje: La unidad mínima de información es el bit.
1 0
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 14
Memoria
• Podemos representar en memoria información numérica y no numérica:
1101= 13 (Número 13)
Utilizar una codificación para los caracteres (ASCII)
El 65 representa la a
El 66 representa la b
....
Agrupando caracteres representamos palabras ...
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 15
Dirección de memoria
Como almacenar y encontrar la información
• En direcciones de memoria
12
34
1
Direcc
iones d
e mem
oria
........
Palabra*
*Palabra del computador = Número de bytes del mínimo bloque direccionable
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 16
Memoria Principal/Memoria Secundaria
Tipos de memoria
• Memoria Principal• RAM (Read Access Memory)
• ROM (Read Only Memory)
• Memoria Secundaria• Acceso secuencial
• Acceso directo
• La memoria secundaria solo se debe utilizar para almacenar datos:
Vel. mem. primaria >>>> Vel. mem.secundaria
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 17
Cargando un programa en memoria
1. Inicializas el programa
2. La cabeza lectura/escritura del disco duro busca el programa
3. Se copia el programa en memoria(RAM)
4. Se ejecuta el programa (La CPU ejecuta las instrucciones del programa)
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 18
Funcionamiento del computador
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 19
Cuanta memoria se precisa...
• 1 Byte: Bloque de bits. Es la unidad de medida de la capacidad de la memoria o de los discos
• 1 Kilobyte (KB o K) = 1,024 bytes. Desde el punto de vista de un computador es un número redondo (Los computadores representan información en base 2, y 1024 es 2^10. Como las personas pensamos en base 10, solemos redondear un k a 1000 bytes.
• Un disco con 360KB de datos, puede representar unos 360.000 caracteres.
• 1 Megabyte (MB or M) es un kilobyte al cuadrado (1,024 veces 1,024), o aproximadamente un millón de bytes. Un disco con una capacidad de 1.44MB puede contener 1.440.000 caracteres.
• 1.44MB es un tamaño estándar para los discos de 3 pulgadas de doble densidad.
• 1 Gigabyte y Terabyte El termino gigabyte (GB or G) significa un kilobyte al cubo (1,024 * 1,024 * 1,024), o aproximadamente mil millones de bytes. El termino terabyte (TB o T) significa un kilobyte a la cuarta (1,024^4), más de un billón de bytes. Por ahora no hay en el mercado discos duros de tamaño de terabyte a precio razonable.
• ¿Cuanta memoria se precisa?:• Hace unos pocos años los computadores se
vendían de serie con 1MB de RAM. Hoy se ofrecen con 500 MB, 1 GB... o más. Los discos duros están en cientos de gigabytes.
• Una página de texto típico contiene entre 2,500 y 3,000 caracteres. 1MB equivale aproximadamente a 400 paginas de texto.
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 20
Cuestiones generales sobre el software
• Estilo de Programación
Programación imperativa• Lenguajes orientados a instrucciones• Programas = Receta
• Se encadenan de forma explicita las instrucciones.
• Influenciado por la arquitectura de la máquina
• VARIABLES: Direcciones de memoria. Datos
• INSTRUCCIÓN BASICA: Asignación. Acción. (Dar valor a una variable)
• COMPOSICIÓN SECUENCIAL DE ACCIONES.
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 21
Cuestiones generales sobre el software
• Metodología de Programación
Programación Estructurada
Conjunto de ideas gestadas en torno al grupo de trabajo WG2.3 (Programming Methodology) de IFIP:
• Utilización de mecanismos de abstracción (funcional y de datos) como herramienta para dominar la complejidad.
• Utilización de una metodología de diseño descendente o por refinamientos sucesivos (abstracción funcional)
• Reducido número de estructuras de control:• Composición secuencial• Composición condicional• Composición iterativa
• Énfasis en los mecanismos de estructuración de datos.
• Se introduce la idea de tipo abstracto de dato: Separación de los aspectos ligados a la especificación de un tipo de los de la implementación.
• Definición de métodos que garanticen la corrección de programas (verificación formal)
• Notación independiente del lenguaje de programación.
Programas = Algoritmos + Estructuras de datos
• Estructuras de datos = Abstracciones de la realidad que nos permiten representar el conjunto de situaciones esperables al resolver el problema.
• Algoritmos = Esquemas de composición de instrucciones que permiten representar de forma no ambigua el flujo de control (El orden en el que se ejecutarán las instrucciones)
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 22
Lenguajes de Programación
• Jerarquía de Niveles de lenguajes de programación
• Ejemplo del “Procesador” Tractor Oruga
MI A R MD A R
1 1 0 1 1 0 Avanza 1 m
1 0 1 1 0 1 Retrocede 1 m
1 1 0 0 0 0 Gira Derecha 90 º
0 0 0 1 1 0 Gira Izquierda
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 23
Problema El tractor se encuentra en A, mirando al norte, y tengo
que llevarlo a BAlgoritmo
Sigue recto hasta el fondo Gira a la derecha Sigue recto hasta el fondo
Programa MI A R MD A R1 1 0 1 1 01 1 0 1 1 01 1 0 0 0 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 01 1 0 1 1 0
Procesador tractor oruga
Lo lleva a I
Lo direcciona hacia B
Lo lleva a B
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 24
Es farragoso programar a nivel MAQUINAPara facilitar la programación nos inventamos:
• NemotécnicosAV Avanza 1 1 0 1 1 0GD Giro Derecha 1 1 0 0 0 0RE Retrocede 1 0 1 1 0 1GI Giro Izquierda 0 0 0 1 1 0
Programa AV AV GD AV AV AV AV AV AV
• Esquemas de composición
Programa Avanza 2 Derecha 1 Avanza 6
• Hemos mejorado en ABSTRACCION pero nos hemos alejado de lo que “interpreta la maquina”. NECESIDAD DE TRADUCCION
Lenguaje de Maquina
Lo lleva a I
Lo direcciona hacia B
Lo lleva a B
Avanza x AV xDerecha x GD xIzquierda x GI xRetrocede x RE x
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 25
Lenguaje Maquina
• Supongamos otro procesador: Una maquina con un único motor que puede:
Avanzar 1 m 0 1
Retroceder 1 m 1 0
Girar Izquierda 90 1 1
Problema: El mismo
Algoritmo: El mismo
Programa: 01 01 11 11 11 01 01 01 01 01 01
DISTINTO
• Pero el programa, en alto nivel, puede ser el mismo, basta con el traductor adecuado
Programa
Avanza 2
Derecha 1
Avanza 6
1 1 0 1 1 0
1 1 0 1 1 0
1 1 0 0 0 0
1 1 0 1 1 0
1 1 0 1 1 0
1 1 0 1 1 0
1 1 0 1 1 0
1 1 0 1 1 0
1 1 0 1 1 0
0 1 0 1 1 11 1 1 1 0 10 1 0 10 1 0 1 0 1
Código parael primertractor
Código parael tractor conUn solo giro
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 26
Niveles de lenguajes de programacion
• Alto Nivel
• Mas fáciles de programar
• Independencia de la maquina
• Necesidad de traductores compiladores
• Menor coste de desarrollo
• Mas fácilmente mantenibles
• Detección de errores
• Transportables
• Son un compromiso entre eficiencia y manejabilidad
• Bajo Nivel
• Programas específicos para un tipo de máquina
• Pueden permitir hacer cosas de forma más eficiente.
Maquina
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 27
Lenguajes de Programación
• FORTRAN (1965): FORmula TRANslator. Calculo científico.
• COBOL (1959). Ideal para gestión: Pocas estructuras de control, muchas capacidades de manejo de dato.
• ALGOL (1960): Primer intento de formalizar la resolución de problemas. Programas estructurados con tipos de datos.
• Lisp (1960): Sigue en uso. Estructura de datos simple (La lista). Tratamiento simbólico de la información. Su éxito se debe a que soporta más estrategias de descomposición modular que cualquier otro lenguaje.
• BASIC (1965): Beginners All Purpose Symbolic Language. Lenguaje interpretado, sin énfasis en tipos de datos.
• PASCAL (1971): Desciende de ALGOL. Paradigma de la programación estructurada.
• C (1972): Desarrollado por Dennis Ritchie de AT&T Bell Laboratories para ofrecer un lenguaje de alto nivel en el cual se pudiera programar UNIX.
• Lenguajes orientados a objetos (C++, Eiffel, C#,…): A la hora de organizar el software se focaliza en las abstracciones de datos en lugar de en la funcionalidad.
• JAVA: ¡Lenguaje orientado a objeto, que se puede ejecutar en cualquier máquina! Idea de máquina virtual.
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 28
Lenguajes Interpretados/Compilados
• Ejecución interpretada del programa fuente
• Se iteran los siguientes pasos1. Obtención de la siguiente instrucción a
ejecutar del código fuente
2. Análisis de la instrucción y determinación de las acciones a ejecutar
3. Ejecución de las correspondientes acciones
• Ejecución del programa compilado
• Se realiza previamente la compilación del programa fuente en la versión equivalente del programa en lenguaje máquina. Esta versión se conoce como programa objeto.
• El programa objeto se une, eventualmente, con los subprogramas de biblioteca descritos en el programa fuente para obtener el programa ejecutable. Esta operación se denomina edición de uniones (link en inglés).
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 29
Java, código objeto que se ejecuta en cualquier máquina
• Un applet es un programa escrito en Java que anima una porción de la página Web
• El usuario puede interaccionar con un applet, gracias a que se trata de un programa.
• Un applet se ejecuta completamente en el cliente:
• Una vez transmitido la velocidad de la interacción no depende de la red
• Si es necesario el applet se puede comunicar con el servidor
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 30
Java, código objeto que se ejecuta en cualquier máquina
• El applet debe poderse ejecutar en una amplia gama de plataformas con diferentes SO y procesadores.
• Los applets se almacenan en un código intermedio independiente de la plataforma (el byte-code)
Almacén de Applets
Bycodes
Appletjava
Servidor
Compilador de java
Verificador de Bytecode
Cargador de clase
Intérprete deJava (JVM)
Plataforma
MacOSUNIX
Windowsetc.Cliente
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 31
Elementos de un Lenguaje
• Los elementos que definen un lenguaje son:
• SIMBOLOS• Palabras clave = {IF, THEN, WHILE, …}
• Caracteres = {‘a’,..’z’,’A’..’Z’,’#’,’?’,……. }
• Dígitos = {0,..,9}
• Otros símbolos = {‘.’ , ’,’ , ‘;’ ,…}
• SINTAXIS• Conjunto de reglas sintácticas
• Notaciones para expresar las reglas:Backus-Naur
Grafo Sintáctico
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 32
Sintaxis
• Grafos Sintácticos • Backus-Naur
<letra>::= ‘A’ I ‘B’ I… I‘Z’
<digito>::= ‘0’ I ‘1’ I… I‘9’
<identificador>::=
<letra> {<letra> I <digito> I’_’}
digito
1
2
9
0 o más veces
alternativa
Ejemplos identificadores válidos: P3Q numero_PIEjemplo identificadores no válidos: 3PQ _numero
digito
0
2
9
identificador
letra
digito
_
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 33
Sintaxis
expresiónbooleana
sentencia
sentencia
THEN
ELSE
IF
sentenciaIF
<Sentencia IF> ::=
IF <expresion booleana> THEN <bloque>
[ELSE <bloque>]
0 o 1 vez
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 34
Sintaxis
digitoentero sin signo
digitoenterosin signo
enterosin signo. E
+
-
numerosinsigno
expresion constante
identificadorconstante
caracter
numero sin signo
+
-
' '
constante
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 35
Propiedades de los algoritmos
• Condiciones Necesarias
• Finitud
• No ambigüedad
• Propiedades deseables
• Generalidad
• Eficiencia
• Independencia de la máquina
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 36
Sistema Operativo
• Sistema Operativo
• Conjunto de programas que tienen por misión facilitar la utilización del computador
• Acceso a los usuarios autorizados
• Edición de ficheros de texto
• Puesta a punto y ejecución de programas
• Seguridad y protección
• Facturación y contabilidad de uso de recursos
• Etc.
• Gestión óptima de la máquina• Gestión de memoria
• Control de dispositivos periféricos
• Acceso a ficheros
• Asignación de recursos y ordenación de tareas
• Etc.
Programación. Pedro Álvarez, José Ángel Bañares, Pedro Latorre, Santiago VelillaTema 1. Conceptos Básicos de Programación 09/09/2004 37
Entorno de programación
• Entorno de trabajo:
• Programa cuya misión es facilitar el desarrollo de programas utilizando un determinado lenguaje
• Integra herramientas:• Edición e programas fuente (C, C++, Java,
Pascal, Ada, ...)
• Compilación de programas fuente
• Depuración de programas
• Ejecución y prueba de programas
• Construcción de programas ejecutables y bibliotecas