Programa del Curso "Lenguajes de Programación"

Si la penúltima pregunta la hacemos a una gran audiencia y sumamos las respuestas, podríamos llegar a unos cinco mil lenguajes!.  Estudiando la gran variedad de lenguajes de programación que se ha propuesto, surgen varios conceptos que nos permiten agruparlos en clases afines, son los paradigmas de programación; surge también, de ese estudio sobre la historia de los lenguajes, el concepto de abstracción. Cada lenguaje ofrece un conjunto de abstracciones que han ido evolucionando hacia conceptos de programación cada vez más independientes de la estructura de la máquina física.

Atados a la idea de celdas de memoria y los cambios de estado están los primeros lenguajes imperativos, otro nivel lo constituye los lenguajes funcionales, donde las variables no corresponden a celdas de memoria sino al concepto matemático de variable; pero en ambos paradigmas para expresar un algoritmo el programador tiene que involucrarse en pasos detallados,  involucrarse en el “cómo hacerlo”; otros paradigma, el lógico o declarativo, pretende resolver un problema a partir de nuestra especificación, del “qué hacer”. Esos han sido los tres grandes paradigmas de programación.

 Los primeros lenguajes reflejaban muy de cerca la organización y arquitectura del hardware: la memoria y sus cambios de estado, la instrucción de asignación, la secuencia de ejecución y las rupturas condicionales o incondicionales de esa secuencia. Es decir reflejaban muy de cerca la arquitectura Von Neumann (una idea genial por cierto, que ha sobrevivido varias generaciones de hardware).

En ese camino hacia la abstracción creciente fuimos de las direcciones de memoria a los nombres de variables, a las expresiones aritméticas y lógicas, a las estructuras de control, y sobre todo a la división del programa en piezas manejables, como subprogramas y módulos. Y después: abstracción de datos, extensión de tipos, objetos, componentes, procesos y sincronización.

Hacer ese recorrido –que es lo que pretende el curso de Lenguajes de Programación-  ¡es simplemente fascinante!


Tabla de Contenidos

  • Historia, generaciones
  • Datos, tipo, tipo fuerte y débil
  • Variables, arreglos, registros, listas
  • Asignación de memoria. Cálculo de dirección. Heap
  • Instrucciones, bloques, subprogramas, pasaje de parámetros
  • Funciones, efectos laterales
  • Recursión. Registros de activación. Stacks
  • Statement-languages y expressión-languages
  • Sintaxis. BNF. Compilación
  • Semántica operacional, denotativa y axiomática
  • Tripletes de Hoare. Guarded-commands de Dijkstra
  • Módulos. Interfaz e implementación
  • Objetos. De ADT a OOP. Tipos abstractos, encapsulamiento, ocultamiento
  • Clases, extensiones de tipo. Herencia, polimorfismo
  • Composición de clases. Relación “tiene” y relación “es”
  • Paradigma funcional o aplicativo: Scheme
  • Paradigma lógico: Prolog
  • Aplicaciones Web: Electron
  • Programación concurrente. Paradigmas de paso de mensajes y de memoria compartida
  • Diseño de lenguajes. Ortogonalidad, legibilidad, Soundness, seguridad
Nota. Este curso está concebido en dos versiones: para pre-grado  (como asignatura electiva) y para post-grado; la diferencia es el énfasis relativo en la amplia variedad de tópicos que abarca. La bibliografía utilizada es igualmente amplia, pero la mayor y definitiva influencia en este proyecto es la del profesor Niklaus Wirth.

René Dorta Franceschi
Panamá, 1 de Abril de 2014.