Download ppt - UPF
Document related concepts
Transcript
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 • anders.jonsson@upf.edu, 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