23
Lenguajes de Programación Tema 1. Introducción y conceptos generales Pedro García López [email protected] /

Tema1 prog logica

Embed Size (px)

Citation preview

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

Indice

1. ¿ 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