Fundamentos de
Programación/Programación I
Anders Jonsson
2007-2008
Administración
• Página web: http://www.tecn.upf.es/~jonsson/fp07
(en construcción)
• Teoría: Miércoles 17-18:30, Aula 119
• Práctica: P1 Jueves 18:40-19:25, Aula 202
P2 Jueves 19:35-20:20, Aula 202
• Tutoría: Para confirmar
• [email protected], Edificio França 399
2
Administración
• Evaluación:
Prácticas: 40%
Controles: 20%
Examen final: 40%
• Las prácticas se hacen en grupos de dos
• Después de cada dos prácticas hay un control en
clase sobre el conocimiento de estas prácticas
(últimos 15 minutos de teoría)
3
Clase de introducción
1.
2.
3.
4.
¿Qué es un ordenador?
Programas y algoritmos
Lenguajes de programación
Java
4
¿Qué es un ordenador?
•
“Un sistema digital con tecnología microelectrónica
capaz de procesar información a partir de un grupo
de instrucciones denominado programa”
Componentes principales:
•
–
–
•
Procesador (CPU: Central Processing Unit)
Memoria (RAM: Random Access Memory)
Componentes auxiliares:
–
–
–
–
–
Disco duro
Lector CD-ROM
Teclado
Pantalla
etc.
5
Elementos de un ordenador
(hardware)
Unidad aritmetica
y logica
(ALU)
Procesador
Unidad
de
(CPU)
Control (CU)
Dispositivos de entrada
teclado
ratón
Memoria Principal
(RAM)
Programa
Dispositivos de salida
pantalla
impresora
Dispositivos de
almacenamiento de datos
disco duro
lector/grabador de CD-ROM
6
lector/grabador de disquete
Representación de los datos
en el ordenador
• El único código que entiende la CPU son los bits.
• Los bits son representados en circuitos electrónicos
que pueden estar en estado “on” (1) u “off” (0)
• Las instrucciones se mandan a la CPU en forma de
bytes, que son palabras de 8 bits
• 1 byte = 8 bits
• 1 kilobyte = 1 024 bytes
• 1 megabyte = 1 024 kilobytes = 1 048 576 bytes
7
Representación de los datos
en el ordenador
• Base 10:
– Dígitos = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
– 1111 = 1*103 + 1*102 + 1*101 + 1*100
• Base 2:
– Dígitos = {0, 1}
– 1111 = 1*23 + 1*22 + 1*21 + 1*20 = 8 + 4 + 2 + 1 = 15
• ¿Cuántos valores puede representar un byte?
– 1 byte = 8 bits (Ej: 01100101)
– Cada bit puede representar 2 valores (0 y 1)
– Un byte puede representar 28 = 256 valores
8
Representación de textos
TEXTO: My name is Anders.
ASCII: 77-121-32-110-97-109-101-32-105-115-32-65-110-100-101-114-115-46
18 bytes
9
Representación de imagen
00000000
00110110
00100010
00100010
00110110
00000000
00110110
00000000
• División de la imagen en una matriz de pixels (unidad
de la imagen)
• Cada pixel asociado con un color
10
Representación de sonido
4 8 12 13 12 10 8…
• Discretización de la amplitud
• Un byte para cada valor
11
¿Qué es un programa?
•
Un programa es una secuencia de instrucciones a
la CPU
Cada instrucción es un conjunto de bytes
Ejemplos de instrucciones:
•
•
–
–
–
–
–
Leer un dato del teclado
Guardar un dato en la memoria
Ejecutar una operación sobre dos datos
Mostrar un dato en la pantalla
etc.
12
Acceso a la memoria
RAM
1 12
2 125
3 45
4 2
CPU
5 0
6 10
7 32
8 64
9 15
13
Algoritmo
•
•
•
Un esquema para resolver cierto tipo de problema
Se puede traducir en un programa para ejecutarlo
en un ordenador
Pasos para la resolución de un problema con
ordenador:
1. Diseño de un algoritmo
2. Codificación de un programa
3. Ejecución y validación
14
Algoritmo
• Componentes:
– Entrada: datos del problema a resolver
– Salida: el resultado de la resolución
– Proceso: pasos a seguir para la resolución
• Propiedades:
– Preciso: orden estricto + expresiones precisas
– Definido: con la misma entrada, siempre resulta la
misma salida
– Finito: número finito de pasos
15
Algoritmo 1
•
•
Problema: Sumar dos números
Solución:
– Entrada: dos números
– Salida: guardar la suma en la memoria y
imprimirla por pantalla
– Proceso:
1) Añadir los dos números
2) Guardar el resultado en la memoria
3) Imprimir el resultado por pantalla
16
Algoritmo 2
•
•
Problema: hacer una taza de té a la inglesa
Solución:
– Entrada: agua, bolsa de té, leche, tetera, taza,
cuchara
– Salida: una taza de té a la inglesa
– Proceso:
1.
2.
3.
4.
5.
Poner la bolsa de té en la taza
Poner el agua a hervir en la tetera
Verter el agua hervida en la taza
Añadir leche
Remover
17
Algoritmo 3
•
•
Problema: averiguar la solvencia de un cliente que
ejecuta un pedido a una fábrica.
Solución:
– Entrada: el pedido
– Salida: mensaje de aceptación o rechazo
– Proceso:
1.
2.
3.
4.
Leer el pedido
Examinar la ficha del cliente
Si el cliente es solvente, aceptar pedido
En caso contrario, rechazar pedido
18
Lenguajes de programación
• Lenguajes máquina
• Lenguajes ensamblador
• Lenguajes de alto nivel: C, C++, Visual Basic, Java,
Pascal, Prolog, LISP,…
19
Lenguajes máquina
• Programas son secuencias de instrucciones compuestas de
bytes:
– 16 29 156 9 82 75
• Ventajas:
– La CPU entiende estos programas
• Desventajas:
– Pensar en modo de 0’s y 1’s es muy difícil para nosotros
20
Lenguajes ensamblador
• Instrucciones compuestas de palabras cortas y números:
–
–
–
–
LOD 15 6
LOD 16 8
ADD 15 16 17
JMP 10
• Ventajas:
– Más fácil a entender
• Desventajas:
– Todavía bastante abstracto
– Necesita traducir el código a lenguajes máquina
21
Lenguajes de alto nivel
• Diseñados para ser más parecidos a lenguaje natural
• Ventajas:
– Mucho más fácil de dar instrucciones
• Desventajas:
– Más complicado convertir en lenguajes máquina
22
Lenguajes de programación:
¿Por qué hay tantos?
¿Cómo nacen, sobreviven y caducan?
1. Diferentes dominios de aplicación:
•
•
•
•
•
Programación de sistemas – rapidez y acceso de
bajo nivel: C
Inteligencia artificial – computación simbólica: LISP,
Prolog
Programación científica – fórmulas matemáticas:
Fortran
Negocios – transacciones: COBOL
Uso específico: SQL (bases de datos), Perl
(manipulación de textos), JavaScript (páginas web),
Pascal (formación)
23
Lenguajes de programación:
¿Por qué hay tantos?
¿Cómo nacen, sobreviven y caducan?
1. Diferentes necesidades:
•
•
•
Fiabilidad: Ada
Escabilidad, paradigma orientado a objeto: C  C++
Portabilidad: Java
2. Evolución:
•
•
Mejora del hardware
Mejor comprensión de como reforzar criterios de
legibilidad, facilidad de aprender y escribir,
fiabilidad…
3. Importancia de la estandardización
4. ¡Número de usuarios!
24
Traductores de lenguaje:
intérpretes
PROGRAMA FUENTE
INTERPRETE
EJECUCION DE LA(S)
INSTRUCCION(ES)
INTERPRETADA(S)
25
Traductores de lenguaje:
compiladores
OPCION 1
OPCION 2
PROGRAMA FUENTE
Fase de compilación
Fase de compilación
programa
ejecutable
COMPILADOR
ENLAZADOR
(binder, linker)
programa
objeto
Fase de ejecución
Fase de ejecución
EJECUCION
26
Java
• Se desarrolló en los comienzos de los años 1990
• La intención era crear una herramienta para escribir
programas cortos y efectivos
• Ventajas:
–
–
–
–
Básico, fácil de entender
Portátil: el mismo código sirve para todos los sistemas operativos
Soporta interfaz gráfica de usuario (GUI)
Apropiado para programas en Internet
• Desventajas:
– La ejecución es más lenta que algunos otros lenguajes
27
Java
• El código fuente se guarda en un archivo con extensión
.java
• Un compilador traduce el código fuente en código de byte,
y lo guarda en un archivo con extensión .class
• Las instrucciones son diferentes para diferentes sistemas
operativos
• Un intérprete específico al sistema operativo interpreta el
código byte para ejecutar el programa
• Un programa puede ser compuesto de varios archivos
28
La Máquina Virtual Java (JVM)
PROGRAMA FUENTE
.java
COMPILADOR JAVA
PROGRAMA OBJETO
Programa bytecode para JVM
.class
INTERPRETE (JVM)
para Windows
INTERPRETE (JVM)
para Linux
WINDOWS
LINUX
INTERPRETE (JVM)
para Macintosh
MACINTOSH
29
Ejecución de un programa Java
crear el programa
en un editor
compilador Java
HolaMundo.java
javac HolaMundo.java
HolaMundo.class
llamar a la JVM
System.class
java HolaMundo
SISTEMA OPERATIVO
30
Componentes de un lenguaje
• Sintaxis (gramática): reglas que determinan de
manera estricta el vocabulario, orden y formato de
las instrucciones permitidas
– Errores sintácticos: el programa no compila y/o no se puede
interpretar
• Semántica (sentido): el programa, al ejecutarlo,
produce el resultado correcto que uno quiere
31
Errores de programación
Modificar o crear un
archivo .java
Compilar
errores de compilación (sintaxis)
Editar para
corregir errores
no hay errores
Ejecutar programa
errores de ejecución (semántica)
Depurar
(debugging)
32
Descargar

Fundamentos de Programacion