Tema 3 Módulo I: Conceptos Básicos ¿Qué es un Lenguaje de Programación? • Tema 1. ¿Qué es un ordenador? • Tema 2. ¿Cómo se representan los datos en un ordenador? • Tema 3. ¿Qué Qué es un lenguaje de programació programación? • Tema 4. ¿Cómo se hace un programa informático? • Tema 5. Tipos de datos y operadores básicos • Tema 6. Sentencias de Control Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Conocimientos y Habilidades Después de este tema, el alumno debería ser capaz de: Tener una perspectiva de la evolución de los lenguajes de programación Cuestiones a resolver • ¿Qué es un programa informático? • Evolución de los lenguajes de programación Distinguir entre lenguajes máquina, ensamblador y de alto nivel. Comprender el proceso de creación de un programa Distinguir las diferentes categorías de los lenguajes: procedurales, orientadoorientado-a-objetos, funcionales, declarativos y especiales Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática • Categorías de los lenguajes • Metodologías de programación Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática ¿Qué es un programa (informático)? Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática 1 Algoritmo: conjunto de pasos para resolver un problema Programa: Programa: Es una colección de instrucciones que indican al ordenador lo que debe hacer. Muhammad ibn Musa al-Khwarizmi 800 - 847, Baghdad Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática En los programas, los diferentes pasos de un algoritmo se expresan como instrucciones, instrucciones, sentencias o proposiciones. proposiciones. Ö un programa consta de una secuencia de instrucciones. Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Programación: Programación: conjunto de operaciones que conducen a expresar un algoritmo en forma de programa Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Instrucciones Básicas Lenguaje de Programación: Programación: "idioma" utilizado para describir programas o secuencias de instrucciones Entrada/Salida: Entrada/Salida: transferencia de información entre los periféricos y la memoria central AritméticoAritmético-lógicas: lógicas: ejecutan operaciones aritméticas y lógicas Selectivas: Selectivas: permiten la selección de tareas alternativas en función de determinados resultados Repetitivas: Repetitivas: permiten la repetición de secuencias de instrucciones Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática 2 Cuestiones a resolver Evolución de los lenguajes de programación • ¿Qué es un programa informático? • Evolución de los lenguajes de programación • Categorías de los lenguajes • Metodologías de programación Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Programa 'hardware' Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Perforadora Eléctrica de Tarjetas Perforadas Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Programas en Tarjetas Perforadas Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Programadores de Tarjetas Perforadas Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática 3 Programas de Tarjetas Perforadas Programas almacenados en memoria Modelo A1: Calculadora Electrónica Programada con Tarjetas de IBM (1954) Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Programa almacenado en memoria Recuerda: El único lenguaje que entiende un ordenador es el lenguaje máquina. máquina. 00101000 10001011 00010001 Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Lenguaje Máquina • Está escrito en lenguaje directamente inteligible por la máquina • Utiliza el alfabeto binario (0 y 1), lo que permite programar con secuencias de unos y ceros (código máquina) • El conjunto de instrucciones depende de la máquina • Ventajas: posibilidad de transferir un programa a la memoria sin necesidad de traducción posterior Ö mayor velocidad • Inconvenientes: dificultad en la codificación y depuración de los programas; dependencia de la máquina Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática lenguaje máquina lenguaje máquina Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática 4 Programa 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 00000000 01011110 00000100 00001100 11101111 11101111 10101101 01100010 00000010 10101101 10100010 00000010 11110100 10101110 10100010 00000010 11111000 11101111 11110100 00000011 11101111 01111110 11111000 00000110 11101111 Lenguajes Simbólicos: ensamblador Programa en lenguaje máquina 0000000000000000 11000010 0000000000000010 00010110 0000000000000101 10011110 0000000000001011 11011111 0000000000010010 11011111 0000000000010101 11111011 0000000000010111 11011111 0000000000011110 11011111 0000000000100001 11111011 0000000000100100 10101101 11000101 0000000000101011 11111011 0000000000110001 11111011 0000000000110100 00000100 0000000000111101 00000100 0000000000111101 • Cada instrucción equivale a una instrucción en lenguaje de máquina • Utiliza palabras mnemotécnicas en lugar de cadenas o secuencias de bits. Ejemplo: – ADD B,1 instrucción sumar – MOV A,B instrucción asignar (mover) Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Lenguajes Simbólicos: ensamblador ensamblador lenguaje ensamblador • Necesita traducción • Ventajas: mayo facilidad de codificación • Inconvenientes: dependencia de la máquina, conocimiento del juego de instrucciones Programa Fuente: ensamblador lenguaje máquina Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Programa almacenado en memoria Programa Objeto: código máquina Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Programa 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Programa ENSAMBLADOR Programa en lenguaje simbólico Entry subl2 jsb movab main, ^m<r2> #12,sp C$MAIN_ARGS $CHAR_STRING_CON pushal pushal calls pushal pushal calls mull3 pushal calls clrl ret -8(fp) (r2) #2,read -12(fp) 3(r2) #2,read -8(fp),-12(fp),6(r2) #2,print r0 Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática 5 Lenguajes de Alto Nivel • • • • Más sencillos de aprender y programar. Se aproximan al lenguaje natural. Son independientes de la máquina. Incluyen rutinas de uso frecuente como son las de entrada/salida, funciones matemáticas, de manera de que se puedan usar siempre sin necesidad de programarlas cada vez. • Ejemplos de lenguajes de programación de alto nivel: C/ C++, Fortran, Basic, Pascal, Ada, Prolog, Simula, Modula, Cobol, JAVA, etc. Lenguajes de Alto Nivel • Inconvenientes – Incremento de tiempo de puesta a punto – No se aprovechan al máximo los recursos internos de la máquina – Aumento de la ocupación de la memoria – Mayor tiempo de ejecución de los programas • Los programas escritos en lenguajes de alto nivel necesitan ser "traducidos" a lenguaje de máquina. Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Traductores • Traductor: programa que traduce el código fuente de un programa a lenguaje de máquina • Intérprete: traductor que toma un programa fuente lo traduce y ejecuta línea a línea. Ejemplo: Smaltalk, Prolog. • Compilador: programa que traduce los programas fuentes escritos en lenguajes de alto nivel a lenguaje de máquina, produciendo un programa objeto. intérprete lenguaje de alto nivel BASIC JAVA lenguaje máquina Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Intérpretes Pastel de Carne "libro de recetas" • Método de operación: cada sentencia encontrada en el texto del programa es traducida a código máquina y ejecuta inmediatamente. x=5 y=3 y = x + 2*y x y ====== 5 3 11 Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática compilador 3HLz KL &HL lenguaje de alto nivel C, C++ JAVA lenguaje máquina Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática 6 Construcción de un programa Compiladores • Método de operación: el programa completo Ap (lenguaje de alto nivel) se traduce a un lenguaje intermedio (similar al ensamblador) As, y después se traduce a código máquina, Am #include <stdio.h> int main() { if (c>0) cnt++; …. } load ax, bx Store ax, bx …. 01110000 11010000 Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Ejecución de un Programa Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Cuestiones a resolver • ¿Qué es un programa informático? • Evolución de los lenguajes de programación • Categorías de los lenguajes • Metodologías de programación Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Categorías de lenguajes Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Lenguajes procedurales o imperativos • Lenguajes máquina, FORTRAN, COBOL • ALGOL, BASIC, C, PASCAL, ADA • Los lenguajes imperativos usan secuencias, elección e iteración para escribir programas que le dicen a la máquina cómo realizar una tarea Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática 7 Lenguajes procedurales o imperativos(II) • Las instrucciones se ejecutan normalmente en orden secuencial, en el mismo orden en que están escritas, que sólo varía cuando se alcanza una instrucción de control (un bucle, una instrucción condicional o una transferencia). Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Lenguaje C • Se trata de un lenguaje no fuertemente tipado de medio nivel pero con muchas características de bajo nivel. • Dispone de las estructuras típicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel. Un ejemplo es la posibilidad de mezclar código en ensamblador con código C o acceder directamente a memoria o dispositivos periféricos. Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Programa en C 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <stdio.h> /* Entrada / salida estándar */ int main(void) { puts("¡Hola, Mundo!"); return 0; } Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Lenguaje C • C es un lenguaje de programación creado en 1969 por Ken Thompson y Dennis M. Ritchie en los Laboratorios Bell basándose en los lenguajes BCPL y B. • Al igual que sus dos predecesores, es un lenguaje orientado a la implementación de Sistemas Operativos (los sistemas operativos Linux y UNIX están escritos mayormente en C), pero se ha convertido en un lenguaje de propósito general de los más usados. Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Lenguaje C • Destaca su gran riqueza de operadores y expresiones. • Existe un estándar ISO de 1986 denominado ANSI C. En teoría, un lenguaje 100% ANSI C sería portable entre plataformas y/o arquitecturas pero en la práctica esto no es siempre cierto. Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Lenguajes Orientados a Objeto • SIMULA Smalltalk C++ Java • Los lenguajes orientados a objeto obligan al programador a concentrar la información en tipos de datos abstractos. • Esto se hace asociando código imperativo con variables (llamadas objetos) objetos y teniendo una jerarquía de tipos de variables (llamadas clases). clases Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática 8 Lenguaje C++ • C++ (pronunciado /ce.mas.más/, o /si.plas.plás/) es un lenguaje de programación, diseñado a mediados de los ochenta, por Bjarne Stroustrup, como extensión del lenguaje de programación C. • Es un lenguaje híbrido, que se puede compilar y resulta más sencillo de aprender para los programadores que ya conocen C. Lenguaje C++ • Las principales características del C++ son: – abstracción (encapsulación) – el soporte para programación orientada a objetos (polimorfismo) – el soporte de plantillas o programación genérica (Templates) • C++ es un lenguaje que abarca tres paradigmas de la programación: – La programación estructurada, – la programación genérica y – la programación orientada a objetos. Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Programa en lenguaje C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /* Este programa lee dos enteros del teclado e imprime su producto. */ #include <iostream.h> int main (void) { // Declaraciones locales int numero1; int numero2; int result; // Sentencias cin >> numero1; cin >> numero2; result = numero1 * numero2; cout << result; return 0; } // main Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Lenguajes Funcionales • LISP • Los lenguajes funcionales no tienen variables y usan recursión para realizar cálculos • El elemento fundamental en Lisp es la lista, en el sentido más amplio del término, pues tanto los datos como los programas son listas. • De ahí viene su nombre, pues Lisp es un acrónimo de "LIStProcessing". Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Programa en JAVA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import javax.swing.JFrame; import javax.swing.JLabel; public class HolaMundo extends JFrame { public static void main(String[] args) { System.out.println("Vamos a crear una ventana que salude al mundo."); new HolaMundo(); } public HolaMundo() { super("Prueba de Java"); // creo la etiqueta JLabel etiqueta = new JLabel("¡Hola, Mundo!"); etiqueta.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); getContentPane().add(etiqueta); setSize(400,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); setResizable(false); } } Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Lenguajes Declarativos • PROLOG • Un lenguaje de programación declarativa está basado en un subconjunto de lógica matemática • El ordenador es programado para inferir reglas ntre valores en lugar de para calcular valores de salida a partir de datos de entrada. • Los programas componen de cláusulas que constituyen reglas del tipo "Si es verdad el antecendente, entonces es verdad el consecuente". Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática 9 Programa 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Programa en PROLOG %% %% declaraciones %% padrede('juan', 'maria'). % juan es padre de maria padrede('pablo', 'juan'). % pablo es padre de juan padrede('pablo', 'marcela'). padrede('carlos', 'debora'). % A es hijo de B si B es padre de A hijode(A,B) :- padrede(B,A). % A es abuelo de B si A es padre de C y C es padre B abuelode(A,B) :padrede(A,C), padrede(C, B). % A y B son hermanos si el padre de A es también el padre de B y si A y B no son lo mismo hermanode(A,B) :padrede(C,A) , padrede(C,B), A \== B. Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Otros lenguajes Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Lenguajes Declarativos • El HTML, acrónimo inglés de Hypertext Markup Language (lenguaje de marcación de hipertexto), es un lenguaje de marcas diseñado para estructurar textos y presentarlos en forma de hipertexto, que es el formato estándar de las páginas web. • HTML • PHP • Javascript • JSP (Java Server Pages) • .... Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Programa en PHP 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <html> <head> <title>Ejemplo</title> </head> <body> <?php if (isset($_POST['muestra'])) { echo 'Hola, '.htmlentities($_POST['nombre']) .', tu comida favorita es:'. htmlentities($_POST['comida']); } else { ?> <form method="POST" action="?"> ¿Cuál es tu nombre? <input type="text" name="nombre"/> ¿Cuál es tu comida favorita? <select name="comida"> <option>Spaghetti</option> <option>Asado</option> <option>Pizza</option> </select> <input type="submit" name="muestra" value="Seguir"> </form> <?php } ?> </body> </html> Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática <html> <head> <title>Ejemplo</title> </head> <body> ¡Hola Mundo! </body> </html> Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Cuestiones a resolver • ¿Qué es un programa informático? • Evolución de los lenguajes de programación • Categorías de los lenguajes • Metodologías de programación Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática 10 METODOLOGIAS DE DESARROLLO DE SOFTWARE 4.018 4.020 METODOLOGIAS DE DESARROLLO DE SOFTWARE DESARROLLO CONVENCIONAL GENERACIONES DE METODOLOGÍA / Los resultados finales son impredecibles Desarrollo Convencional (Sin Metodología) . Desarrollo Estructurado. Desarrollo Orientado a Objetos. / No hay forma de controlar lo que está sucediendo en el Proyecto / Los cambios organizativos afectan negativamente al proceso de desarrollo Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática METODOLOGIAS DE DESARROLLO DE SOFTWARE 4.030 METODOLOGIAS DE DESARROLLO DE SOFTWARE 4.050 DESARROLLO ESTRUCTURADO DESARROLLO ORIENTADO AL OBJETO ; Programación estructurada ; Diseño estructurado ; Análisis estructurado ; Especificaciones funcionales: : Gráficas : Particionadas : Mínimamente redundantes La esencia del desarrollo orientado a objetos es la identificación y organización de conceptos del dominio de la aplicación y no tanto de su representación final en un lenguaje de programación. Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática METODOLOGIAS DE DESARROLLO DE SOFTWARE 4.080 METODOLOGIAS DE DESARROLLO DE SOFTWARE 4.080 CLASIFICACION DE LAS METODOLOGIAS O Estructuradas CLASIFICACION DE LAS METODOLOGIAS O Estructuradas D Orientadas a Procesos D Orientadas a Procesos D Orientadas a datos D Orientadas a datos Jerárquicas No Jerárquicas D Mixtas Jerárquicas No Jerárquicas D Mixtas O Orientadas a Objetos O Orientadas a Objetos O Para Sistemas de Tiempo Real O Para Sistemas de Tiempo Real Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática 11 METODOLOGIAS DE DESARROLLO DE SOFTWARE 4.090 METODOLOGIAS DE DESARROLLO DE SOFTWARE 4.120 METODOLOGIAS ESTRUCTURADAS METODOLOGIAS ORIENTADAS A PROCESOS • Especificación estructurada: 3Diagramas de Flujo de Datos 3Diccionario de Datos 3Especificaciones de procesos METODOLOGIAS ESTRUCTURADAS METODOLOGIAS ORIENTADAS A DATOS JERARQUICOS • La estructura de control del programa debe ser jerárquica y se debe derivar de la estructura de datos del programa • El proceso de diseño consiste en definir primero las estructuras de los datos de entrada y salida, mezclarlas todas en una estructura jerárquica de programa y después ordenar detalladamente la lógica procedimental para que se ajuste a esta estructura • El diseño lógico debe preceder y estar separado del diseño físico Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática METODOLOGIAS DE DESARROLLO DE SOFTWARE 4.150 METODOLOGIAS PARA SISTEMAS DE TIEMPO REAL Manejo de interrupciones Comunicación y sincronización entre tareas Gestión de procesos concurrentes Respuesta oportuna ante eventos externos Datos continuos o discretos Se está produciendo una evolución de las metodologías orientadas a objetos para desarrollos de sistemas de tiempo real Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Resumen Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática Proximamente… Proximamente… • ¿Qué es un programa informático? • Evolución de los lenguajes de programación • Categorías de los lenguajes • Metodologías de programación Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática ¿Cómo se hace un Programa Informático? Departamento de Teoría de la Señal y Comunicaciones e Ingeniería Telemática 12