Lenguajes de Programación Tema 1. Introducción y conceptos generales Pedro García López [email protected] /
Lenguajes de ProgramaciónTema 1. Introducción y
conceptos generales
Pedro García Ló[email protected]/
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
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.
Objetivos
LENGUAJES DE PROGRAMACIÓN
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.
Programa
LENGUAJES DE PROGRAMACIÓN
IV - Descripción formal de los lenguajes de programación (8h). Sintaxis. Semántica. Modelos de los lenguajes de programación.
V - Conclusiones (2h).
Programa
LENGUAJES DE PROGRAMACIÓN
•“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
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:
– [email protected] (MSN)– [email protected]– Despacho 238
Asignaturas relacionadas
• Programación 1 • Programación 2• Estructuras de datos• Lenguajes, Gramáticas y autómatas
Indice1. ¿ Qué es un lenguaje de programación ?2. Abstracciones3. Paradigmas de computación4. Definición del lenguaje5. Traducción del lenguaje6. Historia7. Preguntas
1.1 ¿ Qué es un LP ?
• Computación– Máquina Turing, tesis de Church
• Legibilidad por parte de la máquina• Legibilidad por parte del ser humano
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.
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).
entrada
código fuente
salidaintérprete
1.6 Traducción
• Pseudointérpretes: intermedio entre interprete y compilador: lenguajes intermedios
• Operaciones de un traductor: analizador léxico (tokens), analizador sintáctico, analizador semántico, preprocesador
código fuente
traducciónadicional
compilación
código objeto
código ejecutable
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
FORTRAN
AlGOL 60 COBOL
50
60
70
80
90
SimulaSmalltalk
Pascal
AdaC
PL/I
LISP
ML
Miranda
Prolog
1.7 Historia1950 1960 1970 1980 1990
Fortran(54)
PL/I(66)
Ada(95)
Java(96)
Basic(66)
C(72)
Pascal(70)
Cobol(58)
Algol(60)
Simula(67) Smalltalk(80)
C++(89)
ENSAMBLADOR
Eiffel (86)
Ada(83)
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