MATERIA: Lenguajes de Programación y sus Paradigmas

CLAVE: COMP-522

SEMESTRE DE UBICACION: Quinto

AREA: Ciencias de la Computación


OBJETIVOS: Este curso introduce al estudiante a la naturaleza de los lenguajes de programación contemporáneos, empezando por una revisión profunda de lenguaje ensamblador y fianalizando con un tratamiento profundo de un lenguaje verdadero orientado a objetos (tal como Smalltalk o Eiffel). Durante el desarrollo del curso se discute la evolución de lenguajes imperativos ( FORTRAN, Algol, PL/I, Pascal) y lenguajes funcionales (Lisp, Scheme, ML). Adicionalmente se intoducen conceptos fundamentales de diseño e implementación de los lenguajes de alto nivel, incluyendo los conceptos de ligado, chequeo de tipos y administración de memoria durante ejecución

TEMARIO:

  1. Historia y evolución de los lenguajes de programación

    • Primeros lenguajes: Algol, FORTRAN, Cobol

    • La evolución de los lenguajes orientados a procedimientos (las cadenas de desarrollo de Algol, PL/I, Pascal, Euclid, Modula y Ada

    • Paradigmas y lenguajes no orientados a procedimientos: funcionales (LISP), lógicos (PROLOG), orientados a objetos (Smalltalk) y paralelos (Occam)

  2. Organización de la computadora a nivel de ensamblador

    • Organización básica: Von Neumann, diagramas de bloque, rutas para datos, rutas de control, unidades funcionales (i.e. Unidad Aritmético-Lógica, Memoria, registros), ciclo de instrucción

    • Conjuntos y tipos de instrucciones

    • Lenguaje ensamblador de máquina

    • Modos de direccionamiento (i.e. directo, indirecto, de desplazamiento, de registro, indexamiento.

    • Unidad de control: carga y ejecución de la intrucción; carga del operando

    • Interrupciones de entrada /salida

    • Instrumentación por alambrado

    • Instrumentación por microprogramación; formatos y codificación

  3. Máquinas virtuales

    • Máquinas virtuales para los lenguajes de programación

    • Jerarquía de máquinas virtuales, presentadas al usuario a través del programa, el traductor, el sistema operativo, etc

    • Consecuencias para la traducción de los distintos momentos en los que se hace el ligado

  4. Control de secuencias

    • Expresiones, orden en la evaluación, efectos laterales

    • Enunciados: simples y compuestos

    • Subprogramas y corrutinas como una abstracción de expresiones y enunciados

  5. Control de los datos, maneras de compartirlos, chequeos de tipo

    • Mecanismos para compartir y restringir el acceso a datos ( estructura de bloques, COMMON, ADTs y aliases)

    • Rangos estático contra dinámico, extensión, visibilidad

    • Mecanismos para el paso de parámetros: por referencia, por valor, por nombre, por resultado, etc

    • Variedad en las disciplinas para el chequeo de tipos y sus mecánicas; estática contra dinámica contra sin tipo, explícita contra implícita, polimorfismo contra sobrecarga

  6. Manejo del espacio de almacenamiento durante ejecución

    • Asignación estática

    • Asignación basada en un stack y su relación con la recursividad

    • Asignación basada en una estructura de heap

  7. Paradigmas de programación

    • Revisión de los paradigmas y lenguajes funcional, lógico y orientado a objetos

    • Diseñar programas con estos paradigmas; ambiente de ejecución, flujo de control

    • Programas ejemplo y aplicaciones

    • Ventajas (transparencia en la referencia) y desventajas (eficiencia en arquitecturas secuenciales) de los paradigmas de programcación alternativos frente a los lenguajes orientados a procedimientos; aplicaciones en inteligencia artificial, bases de datos y diseño de sistemas de computación

  8. Diseño de lenguajes: Semántica

    • Una máquina sencilla y el modelo denotacional

    • Tipos, vinculación, operadores y coerción

    • Asignación de memoria

    • Estructuras de control

    • Procedimientos y parámetros

  9. Diseño de lenguajes: Pragmática

    • El arte y ciencia del diseño de lenguajes

    • El arte y ciencia de la programación

    • Entorno de la programación

    • Comparación y evaluación de lenguajes

    • Conclusiones

BIBLIOGRAFIA:

  • Friedman, D.P.; Wand, M.; Heynes, C.T., Essentials of programming Languajes, The Mit Press, 1992

  • Sethi, R, Programming Languajes, Concepts and Constructs, Addison-Wesley Publishing Company, 1989

BIBLIOGRAFIA COMPLEMENTARIA:

  • Scragg, G.W., Computer Organization, A Top Down Approach, McGraw-Hill Publishing Company, Inc., 1992

  • Budd, T., An Introduction to Object-Oriented Programming, Adisson Wesley Publishing Company, 1991

  • Field, A.J.; Harrison, P.G., Funtional Programmng, Addison-Wesley Publishing Company, 1989

  • Friedman, L.W., Comparative Programming Languajes, Generalizing the Programming Function, Prentice Hall, Inc., 1991

  • Kogge, P.M., The Architecture of Simbolic Computer, McGraw-Hill Incorporated, 1991

  • Tucker, A.B., Jr., Lenguajes de Programación, Segunda Edición, McGraw-Hill, España, 1987