C op yr ig ht © 2 00 5 Pe dro Á lv are z , Jo sé Á nge l B añ are s, Pe dro L at orre , S an tia go Ve lil la
Tema 1.
Conceptos Básicos de Programación
Tema 1.
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 Software
Estilo 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
Problemas y soluciones
¿Cómo se resuelve un problema en general?
Datos
Resultados
Modelado o representación
Datos (iniciales, intermedios, resultados)
+ algoritmos
Implementación
en la plataforma de trabajo
(codificación: Pascal, Java, C…)
Ejecución
de los procesos
Visualización
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.
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++,
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 * ... n
para valores crecientes de i
hasta n
Read(n);i:=1;
factorial:=1;
Mientras Que i < n hacer
Solución informal
en lenguaje natural
Algoritmo en
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
lenguaje
algorítmico
Pascal
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
Ciclo de vida de un programa
Mantenimiento:
En general el software sufrirá cambios:
•
Errores detectados
Especificación
Análisis
Diseño
Codificación
Pruebas
Mantenimiento
El computador (Hardware)
CPU (Central Process Unit)
Memoria
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
Cada transistor contiene
un bit de información
De teoría del lenguaje:
La unidad mínima de
información es el bit.
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
....
Dirección de memoria
Como almacenar y encontrar la información
• En direcciones de memoria
1
2
3
4
1
D
ire
cc
io
ne
s d
e
m
em
or
ia
...
...
..
Palabra*
*
Palabra
del computador = Número de bytes
del mínimo bloque direccionable
Memoria Principal/Memoria Secundaria
Tipos de memoria
• Memoria Principal
• RAM (Read Access Memory)
• ROM (Read Only Memory)
• Memoria Secundaria
• Acceso secuencial
• Acceso directo
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
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.
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
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
Lenguajes de Programación
•
Jerarquía de Niveles de lenguajes de
programación
Problema
El tractor se encuentra en A, mirando al norte, y tengo que
llevarlo a B
Algoritmo
Sigue recto hasta el fondo
Gira a la derecha
Sigue recto hasta el fondo
Programa
MI A R MD A R
1 1 0 1 1 0
1 1 0 1 1 0
1 1 0 0 0 0
1 1 0 1 1 0
Procesador tractor oruga
Lo lleva a I
Es farragoso programar a nivel MAQUINA
Para facilitar la programación nos inventamos:
•
Nemotécnicos
AV
Avanza
1 1 0 1 1 0
GD
Giro Derecha
1 1 0 0 0 0
RE
Retrocede
1 0 1 1 0 1
GI
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
Lenguaje de Maquina
Lo lleva a I
Lo direcciona hacia B
Lo lleva a B
Avanza x AV x
Derecha x GD x
Izquierda x GI x
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
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
Código para
el primer
tractor
Lenguaje Máquina / CPU / Memoria
Lenguaje Máquina / CPU / Memoria
Lenguaje Máquina / CPU / Memoria
Lenguaje Máquina / CPU / Memoria
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.
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.
Lenguajes Interpretados/Compilados
•
Ejecución interpretada del programa fuente
•
Se iteran los siguientes pasos
1. 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).
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
Java, código objeto que se ejecuta en
cualquier máquina
•
Una aplicación java debe poderse ejecutar
en una amplia gama de plataformas con
diferentes SO y procesadores.
• Las aplicaciones Java se almacenan en un
código intermedio independiente de la
plataforma (el byte-code)
Almacén de
Applets
Bycodes
Applet
java
Servidor
Compilador de java
Verificador de Bytecode
Cargador de clase
Intérprete de
Java
(JVM)
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
Sintaxis
•
Grafos Sintácticos
•
Backus-Naur
<letra>::= ‘A’ I ‘B’ I… I‘Z’
<digito>::= ‘0’ I ‘1’ I… I‘9’
0 o más veces
alternativa
identificadorletra
digito
digito
1
2
9
digito
0
2
9
1
letra
A
B
Z
Sintaxis
expresión
booleana
sentencia
sentencia
THEN
ELSE
IF
sentencia IF<Sentencia IF> ::=
IF <expresion booleana> THEN <sentencia>
[ELSE <sentencia>]
0 o 1 vez
sentencia
W HILE
DO
sentencia W HILEexpresión
booleana
<Sentencia WHILE> ::=
Sintaxis
digito
entero sin signodigito entero sin signo entero sin signo . E + -numero sin signo