Competencias y objetivos

 

Contexto de la asignatura para el curso 2023-24

La asignatura parte de la premisa de que los estudiantes conocen con cierta profundidad algunos lenguajes de programación, principalmente imperativos y orientados a objetos. Su objetivo principal es que consigan una mayor perspectiva y puedan razonar en general sobre los lenguajes de programación. ¿Qué elementos son comunes a los lenguajes de programación? ¿Qué características tienen? ¿Cuáles son los elementos esenciales y los accesorios? ¿Qué familias o paradigmas de lenguajes podemos identificar? ¿Cómo diseñar un buen lenguaje de programación? Dominando estos contenidos será mucho más fácil aprender nuevos lenguajes de programación, identificar sus aspectos esenciales e incluso ser capaz de diseñar lenguajes específicos orientados a dominios concretos.

En el curso utilizaremos los lenguajes de programación Racket y Swift. Racket se construye sobre Scheme, una variante muy extendida de LISP, lenguaje paradigma de la programación funcional. La utilización de un lenguaje tan sencillo nos permite reflexionar sobre cuáles son los elementos esenciales de los lenguajes de programación y su semántica. Swift es un moderno lenguaje multiparadigma creado reciéntemente por Apple con aspiraciones de soportar múltiples plataformas (dispositivos móviles, sistemas operativos o servidores) y que integra de forma coherente conceptos de programación funcional y programación orientado a objetos y que introduce nuevos paradigmas de programación como la programación orientada a protocolos. A diferencia de Racket, Swift es un lenguaje compilado, seguro y fuertemente tipado.

En la asignatura trataremos cuatro grandes aspectos:

  • Lenguajes de programación: Conceptos generales comunes al diseño y construcción de lenguajes de programación. Algunos contenidos: historia y paradigmas de lenguajes de programación, programación declarativa vs. programación procedural, tipos de datos.
  • Programación funcional: Estudio en profundidad del paradigma de programación funcional, comparándolo con el paradigma imperativo tradicional. Algunos contenidos: modelo computacional de sustitución, forma especial lambda, recursión, programacion funcional en Racket y Swift, abstracción, estructuras de datos recursivas como listas y árboles.
  • Programación orientada a objetos: Repaso de los elementos esenciales del paradigma de programación orientada a objeto, poniéndolos en el contexto de lo que aportan al paradigma clásico procedural. Características avanzadas de POO en un lenguaje de reciente diseño como Swift. Programación orientada a protocolos.
  • Integración de paradigmas: Lenguajes que integran el paradigma funcional y el imperativo. ¿Por qué es interesante integrarlos? Ventajas de la programación funcional para la concurrencia. Swift como un ejemplo de lenguaje de integración de paradigmas.

 

 

 

Competencias de la asignatura (verificadas por ANECA en grados y másteres oficiales) para el curso 2023-24

Competencias específicas (CE)

  • CE7 : Conocimiento, diseño y utilización de forma eficiente de los tipos y estructuras de datos más adecuados a la resolución de un problema.
  • CE8 : Capacidad para analizar, diseñar, construir y mantener aplicaciones de forma robusta, segura y eficiente, eligiendo el paradigma y los lenguajes de programación más adecuados.

 

 

 

Resultados de aprendizaje (Objetivos formativos)

  • Capacidad para definir, evaluar y seleccionar plataformas hardware y software para el desarrollo y la ejecución de sistemas, servicios y aplicaciones informáticas, de acuerdo con los conocimientos adquiridos según lo establecido en la Planificación de las Enseñanzas.
  • Capacidad para concebir, desarrollar y mantener sistemas, servicios y aplicaciones informáticas empleando los métodos de la ingeniería del software como instrumento para el aseguramiento de su calidad, de acuerdo con los conocimientos adquiridos según lo establecido en la Planificación de las Enseñanzas.
  • Capacidad para concebir y desarrollar sistemas o arquitecturas informáticas centralizadas o distribuidas integrando hardware, software y redes de acuerdo con los conocimientos adquiridos según lo establecido en la Planificación de las Enseñanzas. 
  • Conocimiento de las materias básicas y tecnologías, que capaciten para el aprendizaje y desarrollo de nuevos métodos y tecnologías, así como las que les doten de una gran versatilidad para adaptarse a nuevas situaciones.

 

 

Objetivos específicos indicados por el profesorado para el curso 2023-24

Definimos las siguientes competencias específicas:

  • Conocer y diferenciar las características de los distintos paradigmas de programación (programación funcional, procedural y orientada a objetos) e identificarlas en lenguajes de programación concretos.
  • Conocer los elementos que componen los lenguajes de programación (estructuras de control, procedimientos, tipos de datos) y distintas implementaciones de estos elementos en distintos lenguajes.
  • Diferenciar entre tiempo de ejecución y tiempo de compilación en distintos ámbitos: detección de errores o definición, creación o ámbito de vida de variables.
  • Conocer el modelo de sustitución como explicación de la semántica de los lenguaje de programación funcional.
  • Utilizar la abstracción y la recursión para diseñar correctamente procedimientos y estructuras de datos (listas y árboles).
  • Ser capaz de diseñar, implementar y corregir programas funcionales, utilizando los lenguajes de programación Racket y Swift.
  • Ser capaz de implementar programas sencillos en Swift, en los que se utilicen las características multi-paradigma del lenguaje.
  • Conocer las ventajas del paradigma orientado a objetos en cuanto a abstracción, reutilización y modificación de código. Conocer y ser capar de utilizar las características orientadas a objetos de Swift.
  • Conocer los elementos fundamentales de la abstracción aplicada al diseño de lenguajes de programación. Conocer nuevos paradigmas de programación, como la programación orientada a protocolos.

 

 

Datos generales

Código: 34017
Profesor/a responsable:
Gallardo López, Domingo
Crdts. ECTS: 6,00
Créditos teóricos: 1,20
Créditos prácticos: 1,20
Carga no presencial: 3,60

Departamentos con docencia

  • Dep.: CIENCIA DE LA COMPUTACION E INT. ARTIF.
    Área: CIENCIA DE LA COMPUTACION, INTELIGENCIA ARTIFICIAL
    Créditos teóricos: 1,2
    Créditos prácticos: 1,2
    Este dep. es responsable de la asignatura.
    Este dep. es responsable del acta.

Estudios en los que se imparte