universidad nacional aut´onoma de méxico facultad de ciencias

Anuncio
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
FACULTAD DE CIENCIAS
CARRERA DE MATEMÁTICO
LENGUAJES DE PROGRAMACIÓN Y SUS PARADIGMAS
SEMESTRE: Quinto o Sexto
CLAVE: 0607
HORAS A LA SEMANA/SEMESTRE
TEÓRICAS PRÁCTICAS CRÉDITOS
4/64
2/32
10
CARÁCTER: OPTATIVO.
MODALIDAD: CURSO.
SERIACIÓN INDICATIVA ANTECEDENTE: Teorı́a de la Computación.
SERIACIÓN INDICATIVA SUBSECUENTE: Ninguna.
OBJETIVO(S): 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 finalizando 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 introducen 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.
NUM. HORAS
6
UNIDADES TEMÁTICAS
1. Historia y evolución de los lenguajes de programación
1.1 Primeros lenguajes: Algol, Fortran, Cobol.
1.2 La evolución de los lenguajes orientados a procedimientos (las
cadenas de desarrollo de Algol, PL/I, Pascal, Euclid, Modula y Ada).
1.3 Paradigmas y lenguajes no orientados a procedimientos: funcionales (LISP), lógicos (Prolog), orientados a objetos (Smalltalk) y
paralelos (Occam).
1
10
6
8
10
16
2. Organización de la computadora a nivel de ensamblador
2.1 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.
2.2 Conjuntos y tipos de instrucciones.
2.3 Lenguaje ensamblador/de máquina.
2.4 Modos de direccionamiento (i.e. directo, indirecto, de desplazamiento, de registro, indexamiento).
2.5 Unidad de control; carga y ejecución de la instrucción; carga del
operando.
2.6 Interrupciones de entrada/salida.
2.7 Instrumentación por alambrado.
2.8 Instrumentación por microprogramación; formatos y codificación.
3. Máquinas virtuales
3.1 Máquinas virtuales para los lenguajes de programación.
3.2 Jerarquı́a de máquinas virtuales, presentadas al usuario a través
del programa, el traductor, el sistema operativo, etc.
3.3 Consecuencias para la traducción de los distintos momentos en
los que se hace el ligado.
4. Control de secuencia
4.1 Expresiones, orden en la evaluación, efectos laterales.
4.2 Enunciados: simples y compuestos.
4.3 Subprogramas y corrutinas como una abstracción de expresiones
y enunciados.
5. Control de los datos
5.1 Mecanismos para compartir y restringir el acceso a datos (estructura de bloques, COMMON, ADTs y aliases).
5.2 Rangos estático vs. dinámico, extensión, visibilidad.
5.3 Mecanismos para el paso de parámetros: Por referencia, por valor,
por nombre, por resultado, etc.
5.4 Variedad en las disciplinas para el chequeo de tipos y sus mecánicas; estática vs. dinámica vs. sin tipo, explı́cita vs. implı́cita, polimorfismo vs. sobrecarga.
6. Manejo del espacio de almacenamiento durante ejecución
6.1 Asignación estática.
6.2 Asignación basada en un stack y su relación con la recursividad.
6.3 Asignación basada en una estructura de heap.
2
15
15
10
7. Paradigmas de programación
7.1 Revisión de los paradigmas y lenguajes funcional, lógico y orientado a objetos.
7.2 Diseñar programas con estos paradigmas; ambiente de ejecución,
flujo de control.
7.3 Programas ejemplo y aplicaciones.
7.4 Ventajas (transparencia en la referencia) y desventajas (eficiencia en arquitecturas secuenciales) de los paradigmas de programació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. Semántica
8.1 Una máquina sencilla y el modelo denotacional.
8.2 Tipos, vinculación, operadores y coerción.
8.3 Asignación de memoria.
8.4 Estructuras de control.
8.5 Procedimientos y parámetros.
9. Diseño de Lenguajes
9.1 El arte y ciencia del diseño de lenguajes.
9.2 El arte y ciencia de la programación.
9.3 Entorno de programación.
9.4 Comparación y evaluación de lenguajes.
9.5 Conclusiones.
BIBLIOGRAFÍA BÁSICA:
1. Friedman, D. P., Wand, M., Heynes, C. T., Essentials of Programming Languages,
Boston: The MIT Press, 1992.
2. Sethi, R., Programming Languages, Concepts and Constructs, Reading, Mass.:
Addison-Wesley Publishing Company, 1989.
3
BIBLIOGRAFÍA COMPLEMENTARIA:
1. Budd, T., An Introduction To Object-Oriented Programming, Reading, Mass.:
Addison-Wesley Publishing Company, 1991.
2. Field, A. J., Harrison, P. G., Functional Programming, Reading, Mass.: AddisonWesley Publishing Company, 1989.
3. Friedman, L. W., Comparative Programming Languages, Generalizing The Programming Function, New Jersey: Prentice Hall, Inc., 1991.
4. Kogge, P. M., The Architecture of Symbolic Computers, New York: McGraw-Hill
Incorporated, 1991.
5. Scragg, G. W., Computer Organization. A Top-Down Approach, New York: McGrawHill Publishing Company, Inc., 1992.
6. Tucker, A. B., Jr., Lenguajes de Programación, Segunda Edición, España: McGrawHill, 1987.
SUGERENCIAS DIDÁCTICAS: Lograr la participación activa de los alumnos mediante
exposiciones.
SUGERENCIA PARA LA EVALUACIÓN DE LA ASIGNATURA: Además de las calificaciones en exámenes y tareas se tomará en cuenta la participación del alumno.
PERFIL PROFESIOGRÁFICO: Matemático, fı́sico, actuario o licenciado en ciencias de
la computación, especialista en el área de la asignatura a juicio del comité de asignación
de cursos.
4
Descargar