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:
- 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)
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
|