Download Introducción

Document related concepts

Programación funcional wikipedia , lookup

Ocaml wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

Oz (lenguaje de programación) wikipedia , lookup

Meta Lenguaje wikipedia , lookup

Transcript
Lenguajes de Programación
Tema 1. Introducción y conceptos
generales
Pedro García López
[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
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:
– [email protected] (MSN)
– [email protected]
– 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