Download Introducción
Document related concepts
Transcript
Lenguajes de Programación Tema 1. Introducción y conceptos generales Pedro García López pgarcia@etse.urv.es/ Copyright • © University Rovira i Virgili • Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; provided its original author is mentioned and the link to http://libre.act-europe.fr/ is kept at the bottom of every non-title slide. A copy of the license is available at: • http://www.fsf.org/licenses/fdl.html LENGUAJES DE PROGRAMACIÓN Objetivos Presentación de los diferentes paradigmas de los lenguajes de programación. Así como de sus carácterísticas fundamentales. Introducción a un lenguaje típico de cada paradigma. Análisis de los conceptos clave sobre los que se construyen los diferentes lenguajes. Introducción a las formas de descripción formal de los lenguajes de programación. LENGUAJES DE PROGRAMACIÓN Programa I - Introducción (5h). Conceptos y constructores. Descripciones formales: sintaxis y semántica. Paradigmas del los lenguajes de programación. Breve repaso histórico. II - Paradigmas de los lenguatges de programación (35h). Paradigma funcional: Haskell. Paradigma lógico: Prolog. Paradigma imperativo: Ada. Programación orientada a objetos: Smalltalk, Java. III - Conceptos y constructores (10h). Valores. Almacenamiento y variables. Enlaces (bindings). Abstracción. Encapsulación. Sistema de tipos. Secuenciadores. LENGUAJES DE PROGRAMACIÓN Programa IV - Descripción formal de los lenguajes de programación (8h). Sintaxis. Semántica. Modelos de los lenguajes de programación. V - Conclusiones (2h). LENGUAJES DE PROGRAMACIÓN Bibliografía •“Lenguaje de programación, principios y práctica”, Segunda edición. Kenneth C Louden. Thomson 2004. •"Programming Language Concepts and Paradigms D. A.Watt Ed.Prentice-Hall, 1990 •"Programming Language Syntax and Semantics D. A.Watt Ed.Prentice-Hall, 1990. •"Programming in PROLOG” W. F.Clocksin, C.S.Mellish Ed.Springer. •“Introducción a la programación funcional con Haskell. “ Richard Bird, Ed.Prentice-Hall, 1999. Bibliografía • Construcción de Software Orientado a Objetos. Bertrand Meyer. • Java, How to program. 6/E. Deitel & Deitel Evaluación • Examen (Febrero) 50 % – 75% POO, 25% Funcional y Lógico • Prácticas 50% – Grupos unipersonales – Lenguajes: Java, Python, Haskell, Prolog • Se hace media en Febrero a partir de 4 • Tutorías: – tutorias_etse@hotmail.com (MSN) – pgarcia@etse.urv.es – Despacho 238 Asignaturas relacionadas • • • • Programación 1 Programación 2 Estructuras de datos Lenguajes, Gramáticas y autómatas Indice 1. ¿ Qué es un lenguaje de programación ? 2. Abstracciones 3. Paradigmas de computación 4. Definición del lenguaje 5. Traducción del lenguaje 6. Historia 7. Preguntas 1.1 ¿ Qué es un LP ? Definición: Un lenguaje de programación es un sistema notacional para describir computaciones de una forma legible tanto para la máquina como para el ser humano. • Computación – Máquina Turing, tesis de Church • Legibilidad por parte de la máquina • Legibilidad por parte del ser humano 1.2 Características • • • • • • • • Eficiencia Expresividad Capacidad de mantenimiento Legibilidad Confiabilidad Seguridad Simplicidad Productividad 1.3 Abstracciones • Clases: Datos y control • Niveles: básicas, estructuradas y unitarias Abstracciones de datos: ● ● ● Básicas: tipos básicos (enteros, reales, ...) Estructuradas: tipos estructurados (arreglos, registros) Unitarias: Tipos abstractos de datos (TDAs), paquetes, módulos, clases, componentes 1.3 Abstracciones • Abstracciones de control – Básicas: asignación, goto – Estructuradas: condicionales e iteradores – Unitarias: paquetes, módulos, hilos y tareas. Un lenguaje de programación es completo en Turing siempre que tenga variables enteras y aritméticas, y que ejecute enunciados en forma secuencial, incluyendo enunciados de asignación, selección e iteración. 1.4 Paradigmas de programación • Imperativo – modelo de Von Neuman, cuello de botella de Von Neuman • Orientado a Objetos – TDAs, encapsulación, modularidad, reutilización • Funcional – noción abstracta de función, cálculo lambda, recursividad, listas • Lógico – Lógica simbólica, programación declarativa 1.5 Definición del lenguaje • Sintaxis (estructura) – Gramáticas libres de contexto, estructura léxica, tokens • Semántica (significado) – Lenguaje natural – Semántica operacional – Semántica denotacional 1.6 Traducción del lenguaje • Traductor es un programa que acepta otros programas escritos en un lenguaje y: – los ejecuta directamente (interprete) – los transforma en una forma adecuada para su ejecución (compilador). código fuente entrada intérprete salida 1.6 Traducción código fuente código objeto compilación traducción adicional código ejecutable • Pseudointérpretes: intermedio entre interprete y compilador: lenguajes intermedios • Operaciones de un traductor: analizador léxico (tokens), analizador sintáctico, analizador semántico, preprocesador 1.6 Traducción • Tiempo de compilación y tiempo de ejecución • Propiedades estáticas: tiempo de compilación • Propiedades dinámicas: tiempo de ejecución • Recuperación de errores (compilación y ejecución) • Eficiencia y optimización (compilación o ejecución) 1.7 Historia 50 FORTRAN 60 AlGOL 60 PL/I Simula Pascal 70 Smalltalk C 80 90 Ada COBOL LISP Prolog ML Miranda 1.7 Historia 1950 1960 1970 1980 PL/I(66) 1990 Eiffel (86) Ada(95) Ada(83) ENSAMBLADOR Cobol(58) Pascal(70) Java(96) Algol(60) C(72) Fortran(54) Simula(67) Basic(66) C++(89) Smalltalk(80) 1.8 Preguntas • Clasifica los siguientes lenguajes (C, Ada, C++, Java, LISP, Prolog, Visual Basic, JavaScript, C#, PHP) en base a : – Paradigma – tipos de traductor (compilador, interprete, pseudointérprete) – Propiedades estáticas y dinámicas – Eficiencia • Extraed conclusiones de esta clasificación 1.8 Preguntas • Evalua los lenguajes del punto anterior respecto a las características del punto 1.2 • Extrae conclusiones de las dos clasificaciones