Licenciatura en Ciencias Áreas terminales en Matemáticas, Física, Bioquímica y Biología Molecular, y Ciencias Computacionales y Computación Científica
Prerrequisitos:
Conceptualiza el paradigma de programación estructurada o imperativa.
Implementa algoritmos utilizando un lenguaje de programación de alto nivel (como Python) y de medio nivel (como C).
Antecedentes Recomendadas:
Ninguna
Consecuentes Recomendadas:
Compiladores
Programación Orientada a Objetos y Eventos
Presentación de la unidad de aprendizaje:
Durante la unidad de aprendizaje se definirán los principios de lenguajes de programación y se establecerán las diferencias entre los paradigmas de programación estructural, funcional, lógica y orientada a objetos.
Propósito de la unidad de aprendizaje:
Implementar algoritmos y comprender los conceptos teóricos de los lenguajes de programación, tales como analizador léxico, sintáctico y semántico; funcionamiento de variables y constantes, datos y tipos de datos, expresiones y sentencias, manejo de excepciones y procedimientos, y tipos de datos abstractos y módulos.
Competencias profesionales:
Distinguir diferentes tipos de lenguajes de programación a partir de sus orígenes conceptuales.
Reconocer las ventajas y desventajas de los diferentes tipos de lenguajes de programación, con la finalidad de buscar la solución a un problema en particular.
Comprender los conceptos modernos de las nuevas generaciones de lenguajes de programación tales como clases, métodos, objetos, herencia, polimorfismo, paquetes genéricos, manejo de excepciones, entre otros.
Generalizar los principios y orígenes de la programación funcional y lógica.
Identificar los problemas en los cuales es conveniente aplicar la concurrencia y programación paralela.
Contribución al perfil de egreso:
Para el cumplimiento del perfil, se desarrolla la capacidad para identificar, plantear y resolver problemas.
Secuencia temática:
I Conceptos generales e historia.
Panorama histórico.
Criterios para el diseño de lenguajes.
II Sintaxis y semántica de los lenguajes de programación.
2.1 Descripción sintáctica de los lenguajes de programación. Gramáticas independientes de contexto y BNF.
2.2 Diagramas y grafos sintácticos. Técnicas y herramientas para análisis sintáctico.
2.3 Semántica formal.
III Variables y constantes.
3.1 Atributos: nombre dirección, alias, tipo valor. Espacio y alcance. Concepto de ligadura.
3.2 Análisis de tipo. Compatibilidad de tipos. Alcance y vida de las variables. Ambiente de referencia. Inicialización de variables.
IV Datos y tipos de datos.
4.1 Tipos de datos primitivos y compuestos. Tipos de datos definidos por el usuario. Apuntadores y manejo de memoria dinámico.
4.2 Conversión y equivalencia de tipos. Polimorfismo explícito.
V Expresiones y sentencias.
5.1 Expresiones aritméticas, relacionales y lógicas.
5.2 Sobrecarga de operadores.
5.3 La controversia GOTO.
5.4 Manejo de excepciones.
VI Procedimientos.
6.1 Semántica de procedimiento.
6.2 Mecanismos de paso de parámetros, por valor, por copia, por referencia, etc. Sobrecarga de nombres.
VII Tipos de datos abstractos.
7.1 Especificación algebraica de tipos de datos abstractos.
7.2 Mecanismos de tipos de datos abstractos: paquetes en Java y Namespaces C++. Paquetes en Ada. Módulos en ML.