Download Sin título de diapositiva
Document related concepts
Transcript
U1. Introducción a la programación 1. 2. 3. 4. 5. Programación Lenguajes de programación Fases en el desarrollo de programas. Estrategias de resolución de problemas Elementos de un lenguaje de programación 6. Entornos de desarrollo 7. Ejecución de un programa 8. Interfaz gráfica de usuario 1 1 . Programación Algoritmo Algoritmo Palabra que proviene del nombre de un matemático y astrónomo árabe Al-Khôwarizmi del sigo IX, que escribió un tratado sobre la manipulación de números y ecuaciones llamado Kitab al-jabr w’almugabala. 2 1 . Programación Algoritmo Un algoritmo es una secuencia ordenada de pasos, no ambiguos, expresados en lenguaje natural que conducen a la solución de un problema dado. Los algoritmos deben cumplir con algunas características: – Preciso. Indica el orden de realización de cada uno de los pasos. – Definido. Si a un algoritmo se le suministra varias veces los mismosdatos los resultados deben ser los mismos. – Finito. El algoritmo debe terminar en algún momento. Ejemplos. Calculo de la raíz cuadrada, sumar dos números, recetas de cocina, … 3 1 . Programación Programación Se llama Programación a la implementación de un algoritmo en un determinado lenguaje de programación, para realizar un programa. Programa es una secuencia de instrucciones que una computadora puede interpretar y ejecutar. Las computadoras son un ejemplo de sistemas basados en programa almacenado, todos estos sistemas poseen un procesador central, cuya actividad de una forma simple puede resumirse a: 1. Obtener una instrucción. 2. Determinar que instrucción es. 3. Ejecutar la instrucción 4. Ir al paso número 1 4 1 . Programación Estructura de un ordenador El conjunto de instrucciones que se desea que el sistema ejecute se almacena en algún tipo de memoria, RAM, por el sistema operativo. 5 1 . Programación Sistema Operativo Un sistema operativo (SO, frecuentemente OS, del inglés Operating System) es un programa o conjunto de programas que en un sistema informático gestiona los recursos de hardware y provee servicios a los programas de aplicación. 6 2 . Lenguajes de programación Lenguajes de programación Un lenguaje de programación es un lenguaje formal diseñado para expresar procesos que pueden ser llevados a cabo por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana. Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila (de ser necesario) y se mantiene el código fuente de un programa informático se le llama programación. 7 2 . Lenguajes de programación Historia Para que la computadora entienda nuestras instrucciones debe usarse un lenguaje específico conocido como código máquina, el cual la máquina comprende fácilmente, pero que lo hace excesivamente complicado para las personas. De hecho sólo consiste en cadenas extensas de números 0 y 1. Para facilitar el trabajo, los primeros operadores de computadoras decidieron hacer un traductor para reemplazar los 0 y 1 por palabras o abstracción de palabras y letras provenientes del inglés; éste se conoce como lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesa add (sumar). El lenguaje ensamblador sigue la misma estructura del lenguaje máquina, pero las letras y palabras son más fáciles de recordar y entender que los números. 8 2 . Lenguajes de programación Historia A finales de 1953, John Backus sometió una propuesta a sus superiores en IBM para desarrollar una alternativa más práctica al lenguaje ensamblador para programar la computadora central IBM 704, desarrollando el lenguaje Fortran. El primer manual para el lenguaje Fortran apareció en octubre de 1956, con el primer compilador Fortran entregado en abril de 1957. Esto era un compilador optimizado, porque los clientes eran reacios a usar un lenguaje de alto nivel a menos que su compilador pudiera generar código cuyo desempeño fuera comparable al de un código hecho a mano en lenguaje ensamblador. En 1960, se creó COBOL, uno de los lenguajes usados aún en la actualidad, en informática de gestión. 9 2 . Lenguajes de programación Historia Lista de los lenguajes de programación: http://es.wikipedia.org/wiki/Anexo:Lenguajes_de_programaci%C3%B3n 10 2 . Lenguajes de programación Paradigmas de programación Un paradigma de programación es una propuesta tecnológica que es adoptada por una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a que únicamente trata de resolver uno o varios problemas claramente delimitados. Es un estilo de programación empleado. La resolución de estos problemas debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la ingeniería de software. Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de definición. Un paradigma de programación está delimitado en el tiempo en cuanto a aceptación y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente. 11 2 . Lenguajes de programación Paradigmas de programación Imperativo o por procedimientos: es considerado el más común y está representado, por ejemplo, por C, BASIC o Pascal Funcional: está representado por Scheme o Haskell. Este es un caso del paradigma declarativo. Lógico: está representado por Prolog. Este es otro caso del paradigma declarativo. Modular, en su vertiente gráfica estaría como Pure Data o Max. Orientado a objetos: está representado por Smalltalk y Java, un lenguaje completamente orientado a objetos. 12 3 . Fases en el desarrollo de un programa Ciclo de vida 13 3 . Fases en el desarrollo de un programa Análisis del problema En esta fase debemos especificar cuáles son los requisitos a los que se debe dar solución desde el programa a realizar. El problema debe estar completamente especificado y se entiende perfectamente. Debe responder a la pregunta ¿Qué queremos resolver de forma clara? Ejemplo. Escribir un programa para sumar dos números. ¿Este enunciado esta perfectamente especificado? 14 3 . Fases en el desarrollo de un programa Diseño y verificación En esta fase pasamos a establecer el diseño de una de las posibles soluciones al problema, mediante un algoritmo. Si el problema es muy complejo se establecen las ideas generales de diseño, la arquitectura de la solución Básicamente debemos responder a la pregunta ¿Cómo resolvemos el problema? Se trata de buscar soluciones. Usando un método que sea correcto. Ejemplo. Resolver el problema de multiplicar dos números enteros usando el método de la multiplicación rusa. 15 3 . Fases en el desarrollo de un programa Codificación o implementación En esta fase se implementa el diseño del algoritmo mediante un lenguaje de programación . Una vez hemos realizado la codificación pasamos a la fase de prueba y validación del programa. Antes de esto como ya habíamos comentado hay que traducir el código a lenguaje máquina, a este proceso se le denomina compilación. Para poder traducir el programa a código máquina primero tendremos que depurarlo sintácticamente. Aunque sobre este tema hay varios enfoques que veremos a continuación. 16 3 . Fases en el desarrollo de un programa Compilación La compilación consiste en coger los ficheros fuente que conforman un programa y, línea por línea, traducir cada instrucción de alto nivel por varias instrucciones en código máquina que realicen lo que la instrucción de alto nivel expresa. Si se repite esa traducción para todas las líneas del código fuente, obtendremos un conjunto de instrucciones máquina. Grabando esas instrucciones máquina en un fichero que contiene una estructura interna que un determinado sistema operativo es capaz de entender, obtenemos un fichero binario ejecutable, o simplemente, "un ejecutable". 17 3 . Fases en el desarrollo de un programa Interpretación A diferencia del compilador, el intérprete no produce una traducción a código máquina. El intérprete intenta realizar "al vuelo" lo que se expresa en los ficheros fuente. Cuando un programa es interpretado, el proceso que se sigue es el siguiente: el intérprete obtiene una instrucción del fichero fuente y la realiza inmediatamente. Repitiendo esta secuencia para todas las líneas, el intérprete realiza lo que los ficheros fuente expresan... es decir, ejecuta el programa. Programas escritos en lenguajes como C o Pascal prácticamente siempre se compilan, y otros como Perl o Python prácticamente siempre se interpretan. 18 3 . Fases en el desarrollo de un programa El enfoque de máquina virtual La filosofía de la máquina virtual es la siguiente: el código fuente se compila, detectando los errores sintácticos, y se genera una especie de ejecutable, con un código máquina dirigido a una CPU imaginaria. A esta especie de código máquina se le denomina código intermedio, lenguaje intermedio, p-code, o byte-code (según quién nos lo cuente). Como esa CPU imaginaria no existe, para poder ejecutar ese ejecutable, se construye un intérprete. Este intérprete es capaz de leer cada una de las instrucciones de código máquina imaginario y ejecutarlas en una CPU real. A este intérprete se le denomina máquina virtual. 19 3 . Fases en el desarrollo de un programa El enfoque de máquina virtual 20 3 . Fases en el desarrollo de un programa Verificación y depuración En esta fase es donde se buscan errores producidos en las fases anteriores y se eliminan. Hay que tratar de diferenciar entre los errores de compilación que son errores sintácticos y los errores de ejecución que son semánticos. Por último es importante establecer un buen juego de pruebas con la finalidad de verificar que el programa funciona bien para todos los casos. 21 3 . Fases en el desarrollo de un programa Documentación y mantenimiento En la fase de documentación se creará la documentación del programa realizado, tanto técnica como a nivel de usuario (manuales). Esta fase es muy importante tanto para el usuario final como para posteriores ampliaciones. En la fase de mantenimiento iremos ampliando las funcionalidades del programa. Siempre hay algo que mejorar. 22 3 . Fases en el desarrollo de un programa Ejemplos de algoritmos Escribir un algoritmo para encontrar el número mas pequeño de un conjunto de tres. Escribir un algoritmo para encontrar el número de veces que aparece la letra “a” en una oración. Escribir un algoritmo para subir el volumen un fichero de sonido digital. Escribir un algoritmo para dibujar figuras geométricas en un lienzo. Escribir un algoritmo para sumar dos números. 23 4 . Estrategias de resolución de problemas Estrategias: datos y resultados Para resolver problemas mediante la programación hay que tener en cuenta las fases plateadas en el apartado anterior. Lo primero es determinar o identificar los Datos y los Resultados. Un programa no es mas que una transformación, de manera que a partir de unos datos llegamos a unos resultados realizando cálculos intermedios. DATOS RESULTADOS INTERMEDIOS RESULTADOS transformación 24 4 . Estrategias de resolución de problemas Estrategias: datos y resultados Es importante identificar los datos, resultados intermedios y resultados finales. En programación orientada a objetos estos serán Objetos y sus transformaciones se realizarán a través de la ejecución de métodos. Ejemplo: suma. Datos: dos números enteros, x, y, Resultado: un número entero z. Los datos al ser enteros pertenecen a la clase de los enteros y sobre esos elementos podemos realizar una serie de métodos u operaciones como es la + o la – o la * o la /….. DATOS DATOS RESULTADOS RESULTADOS INTERMEDIOS INTERMEDIOS RESULTADOS transformación transformación 25 4 . Estrategias de resolución de problemas Estrategias: interfaz básica o gráfica Para obtener del exterior (del usuario o de otro programa) los datos deberemos diseñar un protocolo con el usuario. Es un acuerdo para que usuario y programa se entiendan y se comuniquen. Para que el programa se comunique con el exterior, esto es con un programa o con un usuario se debe diseñar también un protocolo de comunicación de resultados. Todo lo que concierne con la forma que tiene que tener esa comunicación entre el programa y el exterior se denomina Interfaz que puede ser gráfica o no Usuario Interfaz DATOS transformación RESULTADOS Interfaz Usuario 26 4 . Estrategias de resolución de problemas Estrategias: lógica e interfaz Es importante separar lo más posible lo que es la interfaz del programa y su lógica (que es el cálculo que realiza). La interfaz puede ser gráfica como los programas de utilidades que usamos habitualmente, textual si recuperamos los datos mediante líneas de comandos o física (custom) si usamos sensores para introducir datos o sacar resultados. En cualquier caso SEPARAR LA LÓGICA DE LA INTERFAZ. Usuario Interfaz DATOS Lógica RESULTADOS Interfaz Usuario 27 4 . Estrategias de resolución de problemas Secuenciación La estrategia mas usada para resolver un problema y la más simple es la secuenciación. Esto supone que para la resolución de un problema con cierto grado de dificultad lo que hacemos es descomponerlo en una serie de pasos mas sencillos, pero no necesariamente básicos. Ejemplo. Para limpiar una casa: – – – – 1.2.3.4.- limpiar la cocina limpiar comedor limpiar dormitorio limpiar baño Ejemplo. Limpiar cocina – – – – – – 1.- Limpiar fogones 2.- fregar 3.- recoger fregada 4. limpiar banco 5.- barrer suelo 6.- fregar suelo 28 4 . Estrategias de resolución de problemas IDEA: Anidación Cada una de las estrategias que habitualmente usamos se pude combinar con ella misma y con el resto de estrategias. 29 4 . Estrategias de resolución de problemas Subcontratación: subprogramación Partes de la resolución de un problema se puede subcontratar a otros objetos o entidades siempre que hayamos pactado los protocolos y condiciones. Ejemplo: limpiar la cocina la podemos subcontratar a una entidad especializada, le pasamos los utensilios de limpieza y nos devuelve la cocina limpia. En programación esto se refiere al uso de LIBRERÍAS, la idea es delegar la resolución de parte del problema a esas entidades externas. Ahora bien hay que saberse los protocolos de comunicación con ellas. En programación se refiere al diseño de métodos (también llamados funciones y procedimientos) por parte del programador con la finalidad de ser reutilizados, la idea es una librería pero la hacemos nosotros para nuestras necesidades 30 4 . Estrategias de resolución de problemas Análisis por casos Dependiendo que los datos o resultados intermedios tengan o no unas propiedades resolvemos de una forma o de otra. Ejemplo: Atravesar un semáforo – – Si esta rojo entonces pasar Sino esperar Esta estrategia se suele denominar Condicional o análisis por casos. 31 4 . Estrategias de resolución de problemas IDEA: Anidación Cada una de las estrategias que habitualmente usamos se pude combinar con ella misma y con el resto de estrategias. 32 4 . Estrategias de resolución de problemas Repetición Repetir una serie de veces una instrucción mientras se cumpla una determinada condición de los resultados intermedios. Repetir una serie de veces una instrucción hasta que se cumpla una determinada condición de los resultados intermedios. Ejemplo: hacer una tortilla de 18 huevos – – – – – – 1)tomar un huevo 2)Batirlo 3) repetir 1 y 2 hasta que no queden huevos Verter la mezcla en una sartén con aceite Darle la vuelta Sacar y dejar en un plato 33 4 . Estrategias de resolución de problemas Recursividad Se trata de resolver un problema usando para ello un caso mas sencillo del mismo. En matemáticas esta estrategia se usa mucho para definir funciones una de las clásicas es la función factorial donde: n! = n*(n-1)! Si n>1 n!=1 si n=0 o n=1 Es un concepto que parece casi mágico: “resolver un problema con el mismo problema” De forma intuitiva esta forma de trabajar nosotros también la usamos. Ejemplo: Para ir de valencia a madrid – - Vas a Alcorcón y una vez allí coges la nacional I. El ir a Alcorcón es un caso mas sencillo del mismo problema 34 4 . Estrategias de resolución de problemas Estrategias 35 5 . Elementos de un lenguaje de programación Estructuras de datos: datos simples Como organizamos o estructuramos los datos de un programa. En el modelo orientado a Objetos, todo son objetos esto es: datos, datos intermedios y resultados y estos tienen una estructura simple o compleja. DATOS SIMPLES: Tipo primitivo boolean char byte short int long float double void bits Mínimo Máximo 1 16 8 16 32 64 32 64 - Unicode_0 -128 -215 -231 -263 IEEE754 IEEE754 - Unicode_216-1 127 215-1 231-1 263-1 IEEE754 IEEE754 - Tipo envoltorio Boolean Character Byte short Integer Long Float Double void 36 5 . Elementos de un lenguaje de programación Estructuras de datos Identificadores – Letras, dígitos, '_' y '$'. El primer carácter no puede ser un dígito. Se distingue entre letras mayúsculas y minúsculas. Declaración de variables – La declaración de variables simples se realiza especificando un tipo de dato simple seguido de una lista separada por comas de identificadores. int var1, var2; char ch1,cha2=’a’; double d1=3.0, d2; – Puede inicializarse una variable como resultado de una expresión float f1=2.0, f2=3.0+f1; – Todo identificador que se use debe estar declarado (excepto reservadas). – El ámbito de una variable se extiende textualmente desde el punto en que se declara hasta el final del bloque al que pertenece la declaración. 37 5 . Elementos de un lenguaje de programación Estructuras de datos La variable tendrá espacio reservado en memoria durante el tiempo que se ejecute el bloque en el cual ha sido declarada. Ejemplo { int x ; x=10; { int y= 20; x=y*2; } // y ya no sería válido en este bloque, x si } Dentro de un bloque las variables pueden ser declaradas en cualquier momento. 38 5 . Elementos de un lenguaje de programación Estructuras de datos Constantes . Uso de la palabra final final int i = 34; Conversión de tipos . La conversión de tipos se realizan de forma automática siempre que los tipos sean compatibles (siempre que el tamaño de ambos lo permita), es lo que se denomina ensanchamiento. int x=2; long y=x; Si queremos realizar la asignación contraria, estrechamiento o casting, tenemos que indicar el tipo de dato al que se ha de convertir el valor entre paréntesis. int a; byte b; b=(byte)a; 39 5 . Elementos de un lenguaje de programación Estructuras de datos Vectores y Matrices. Cuando se crea un vector o matriz, su tamaño es fijo y no se puede modificar. Los vectores y matrices son objetos, y sus elementos pueden ser de cualquier tipo o clase. Este puede ser creado en la declaración o bien usando el operador new: int numeros[]; float matriz[][]; numeros = new int[12] // Un array de 12 enteros cuyo índice va de 0 a 11. matriz= new float[2][3] //Una matriz de 0 a 1 fila y de 0 a 2 columnas. int v[] = {9,3,5}; Es posible obtener el número de elementos de una matriz mediante 40 el acceso a la variable length., v.length tendrá el valor 3. 5 . Elementos de un lenguaje de programación Expresiones Expresiones y operadores Expresión = colección de operandos (variables y literales) y operadores. Toda expresión posee siempre un tipo. Tipos de expresiones – Aritméticas: Operandos y el resultado numéricos. Operadores posibles: +, -, *, /, % Todos aplicables a enteros y reales (excepto %, sólo a enteros). Prioridades: - (signo negativo), *, /, %, + y -. – Asignación: Ambos tipos compatibles. Los numéricos son siempre compatibles (de todas formas, mejor usar el casting). a = a+2; a += 2; (-=, *=, /=, %=, etc...) Autoincremento (y decremento) ++a y a++. 41 5 . Elementos de un lenguaje de programación Expresiones Tipos de expresiones – Relacionales: Comparan expresiones del mismo tipo, devolviendo un resultado lógico. En general, por orden de prioridad <, >, <=, >=, (con la misma); == y != con menos. Todos tiene menor prioridad que los operadores aritméticos. – Lógicos: Devuelven valores lógicos. ! (not), & (and), | (or), ^ (xor), && y || (and y or cortocircuito). La precedencia es menor que la de los ops. relacionales. – Sobre bits: Resultados son siempre secuencias de bits. ˜ (complemento a 1), & (and bit a bit), | (or bit a bit), ^ (xor bit a bit), << (desplaz. a izq.), >> (deplaz. a der. con bit de signo) y >>> (deplaz. a der. con ceros). – Condicional: Expresion_logica ? valor1 : valor2; int a = x>y ? x: 0; 42 5 . Elementos de un lenguaje de programación Estructuras de control Sentencias de control Selección simple if (x<0) x = -x; if (i>=0) System.out.println ("Positivo"); else System.out.println ("Negativo"); Selección compuesta switch (exp) { case valor1: inst1; inst2; break; case valor2: inst1; inst2; break; default: ins1; ins2;} 43 5 . Elementos de un lenguaje de programación Estructuras de control Repetición While (Expresion_booleana) sentencias; do sentencias while (Expresion_booleana); for (inicializacion; Expresion_booleana; Sentencia) Sentencias; for (i = 0; i<10; i++) v[i]=0; 44 6 . Entornos de desarrollo IDE Un entorno de desarrollo integrado, llamado también IDE (sigla en inglés de integrated development environment), es un programa informático compuesto por un conjunto de herramientas de programación. Puede dedicarse en exclusiva a un solo lenguaje de programación o bien puede utilizarse para varios. Un IDE es un entorno de programación que ha sido empaquetado como un programa de aplicación; es decir, consiste en: – – – – un un un un editor de código, compilador, depurador y constructor de interfaz gráfica. Los IDEs pueden ser aplicaciones por sí solas o pueden ser parte de aplicaciones existentes. 45 6 . Entornos de desarrollo IDE Algunos entornos son compatibles con múltiples lenguajes de programación, como Visual Studio (soporta más de 50 lenguajes diferentes), Eclipse o NetBeans , ambos basados en Java; o MonoDevelop, basado en C#. También puede incorporarse la funcionalidad para lenguajes alternativos mediante el uso de plugins. Por ejemplo, Eclipse y NetBeans tienen plugins para C, C++, Ada, Perl, Python, Ruby y PHP, entre otros; o Visual Studio que soporta no solo múltiples lenguajes si no también múltiples dispositivos como móviles Windows Phone, tabletas Windows 8 o consolas como Xbox. 46 7 . Ejecución de un programa Procesos A un programa en ejecución se le denomina Proceso. Para que un programa se pueda ejecutar previamente debe haber sido compilado (salvo el caso de lenguajes interpretados). En Java la primera instrucción que se ejecuta es la primera instrucción que aparece en el método main. Ejemplo. Hola Mundo en Java. public class Hello { public static void main(String[] args) { System.out.println("Hola mundo"); } } Estudiar la ejecución de este programa en el IDE BlueJ. 47 7 . Ejecución de un programa Ejemplos Sumar dos números enteros. import java.util.*; public class Sumar { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n1, n2; System.out.print("Introduzca primer numero: "); n1 = sc.nextInt(); System.out.print("Introduzca segundo numero: "); n2 = sc.nextInt(); System.out.println("suma: “, n1+n2); 48