Última revisión realizada: 23/05/2022

Denominación de la asignatura: Programación declarativa
Postgrado al que pertenece: Grado en Ingeniería Informática
Créditos ECTS: 6
Cuatrimestre en el que se imparte: Primer cuatrimestre
Materia Computación
Carácter de la asignatura: Optativa

Presentación

La programación, suma de lógica y control como resume la formulación de Kowalsky, es parte integrante de la ciencia computacional. Con este enfoque, entendemos que programación es ciencia, por tanto, es evolución, y sobre todo desarrollo de paradigmas que se ajusten a distintos escenarios. Los inicios de la programación se pueden encontrar en los trabajos de Alan Turing y el desarrollo y ejecución de los primeros algoritmos. Este modelo de programación, en los que detalladamente se comunica a la «máquina de cómputo» cómo operar por medio de un algoritmo, es lo que se conoce como programación en el escenario del paradigma imperativo, lo que es lo mismo, programación imperativa.

El avance en los sistemas de cómputo abre la puerta a plantear casi la solución numérica a cualquier problema imaginable. Motiva el desarrollo de metodologías cada vez más complejas al implicar lo que se conoce como algoritmos de alto nivel, y también a la necesidad de tener programas que sean exportables entre distintas plataformas para hacer más eficiente su solución. Estos son algunos de los factores que fuerzan a la necesidad de desarrollar nuevos paradigmas de programación. Muchos de estos paradigmas se enmarcan dentro de lo que se conoce como programación declarativa.  

La programación declarativa es actualmente considerada como un elemento esencial que debe ser introducido a los ingenieros informáticos desde la formación universitaria. En este contexto, nuestro objetivo principal es mostrar y proveer a los alumnos de las herramientas básicas que les permitan resolver problemas y/o desarrollar metodologías dentro del paradigma de la programación declarativa. Nos centramos en dos paradigmas dentro de este modelo: Uno, pradigma de la programación funcional y dos, paradigma de la programación lógica. Como ejemplos prácticos se usarán dos lenguajes cercanos al ideal en cuanto a funcional y lógico puro, respectivamente, Haskell y Prolog.

Competencias básicas

  • CB1: Que los estudiantes hayan demostrado poseer y comprender conocimientos en un área de estudio que parte de la base de la educación secundaria general, y se suele encontrar a un nivel que, si bien se apoya en libros de texto avanzados, incluye también algunos aspectos que implican conocimientos procedentes de la vanguardia de su campo de estudio.
  • CB2: Que los estudiantes sepan aplicar sus conocimientos a su trabajo o vocación de una forma profesional y posean las competencias que suelen demostrarse por medio de la elaboración y defensa de argumentos y la resolución de problemas dentro de su área de estudio
  • CB3: Que los estudiantes tengan la capacidad de reunir e interpretar datos relevantes (normalmente dentro de su área de estudio) para emitir juicios que incluyan una reflexión sobre temas relevantes de índole social, científica o ética.
  • CB4: Que los estudiantes puedan transmitir información, ideas, problemas y soluciones a un público tanto especializado como no especializado.
  • CB5: Que los estudiantes hayan desarrollado aquellas habilidades de aprendizaje necesarias para emprender estudios posteriores con un alto grado de autonomía.

Competencias generales

  • CG08: 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.
  • CG09: Capacidad para resolver problemas con iniciativa, toma de decisiones, autonomía y creatividad. Capacidad para saber comunicar y transmitir los conocimientos, habilidades y destrezas de la profesión de Ingeniero Técnico en Informática.

Competencias específicas

  • CR-08. 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
  • CR-15. Conocimiento y aplicación de los principios fundamentales y técnicas básicas de los sistemas inteligentes y su aplicación práctica.

Competencias transversales

  • CT1. Capacidad de innovación y flexibilidad en entornos nuevos de aprendizaje como es la enseñanza on-line.
  • CT2. Conocer, y utilizar con habilidad, los mecanismos básicos de uso de comunicación bidireccional entre profesores y alumnos, foros, chats, etc.
  • CT3. Utilizar las herramientas para presentar, producir y comprender la información que les permita transformarla en conocimiento.

Tema 1. El Paradigma declarativo

  • Introducción y objetivos
  • Paradigma declarativo vs. paradigma imperativo
  • Principios básicos de programación declarativa
  • Subparadigmas declarativos
  • Retos para la programación declarativa
  • Referencias bibliográficas

Tema 2. Principios de la programación funcional

  • Introducción y objetivos
  • Definición
  • Evolución
  • Principios básicos
  • Aplicación en la industria
  • Lenguajes: Introducción a Haskell
  • Referencias bibliográficas

Tema 3. Técnicas básicas de programación funcional I: Funciones

  • Introducción y objetivos
  • Definición de función
  • Funciones recursiva
  • Funciones de orden superior
  •  Ámbitos de aplicación
  • Referencias bibliográficas

Tema 4. Técnicas básicas de programación funcional II: Datos

  • Introducción y objetivos
  • Tipos de datos 
  • Listas
  • Clases
  • Ámbitos de aplicación
  • Referencias bibliográficas

Tema 5. Técnicas básicas de programación funcional III: Cómputo

  • Introducción y objetivos
  • Dos modelos de evaluación: impaciente y perezosa
  • Técnicas para programación eficiente a gran escala: módulos y mónadas
  • Ámbitos de aplicación
  • Referencias bibliográficas

Tema 6. Principios de la programación lógica

  • Introducción y objetivos
  • Definición
  • Evolución
  • Principios básicos
  • Aplicación en la industria
  • Lenguajes: Introducción a Prolog
  • Referencias bibliográficas

Tema 7. Técnicas básicas de programación lógica I: Sintaxis  

  • Introducción y objetivos
  • Predicados
  • Funciones
  • Algoritmos
  • Ámbitos de aplicación
  • Referencias bibliográficas

Tema 8. Técnicas básicas de programación lógica II: Datos

  • Introducción y objetivos
  • Estructuras
  • Listas
  • Ámbitos de aplicación
  • Referencias bibliográficas

Tema 9. Técnicas básicas de programación lógica III: Cómputo

  • Introducción y objetivos
  • Operadores
  • Módulos
  • Interfaces gráficas
  • Ámbitos de aplicación
  • Referencias bibliográficas

Tema 10.Campos abiertos a la programación declarativa

  • Introducción y objetivos
  • Otros paradigmas de programación declarativa
  • Programación declarativa en inteligencia artificial 
  • Programación declarativa en bioinformática
  • Programación declarativa en ciberseguridad 
  • Paradigma imperativo, paradigma declarativo: ¿qué más?
  • Referencias bibliográficas

Las actividades formativas de la asignatura se han elaborado con el objetivo de adaptar el proceso de aprendizaje a las diferentes capacidades, necesidades e intereses de los alumnos.

Las actividades formativas de esta asignatura son las siguientes:

  • Trabajos y Lecturas. Se trata de actividades de diferentes tipos: reflexión, análisis de casos, prácticas, etc. Además de análisis de textos relacionados con diferentes temas de la asignatura.
  • Participación en eventos. Son eventos programados todas las semanas del cuatrimestre: sesiones presenciales virtuales, foros de debate, test.
  • Laboratorios. Actividad práctica que se realiza en tiempo real e interactuando con otros alumnos. En el laboratorio los estudiantes tendrán que desarrollar los ejercicios propuestos en un entorno de simulación online. Los estudiantes contarán en todo momento con el apoyo de un tutor de laboratorio, que ayudará al alumno a desarrollar su actividad. El tutor de laboratorio podrá asignar grupos de alumnos para que, de forma colaborativa, alcancen los resultados solicitados. Este tipo de actividad posee un peso considerable en la evaluación continua del alumno, por lo que, a pesar de no ser obligatoria su realización, se recomienda firmemente la participación en los mismos.
Descargar programación

Estas actividades formativas prácticas se completan, por supuesto, con estas otras:

  • Estudio personal.
  • Tutorías. Las tutorías se pueden articular a través de diversas herramientas y medios. Durante el desarrollo de la asignatura, el profesor programa tutorías en días concretos para la resolución de dudas de índole estrictamente académico a través de las denominadas “sesiones de consultas”. Como complemento de estas sesiones se dispone también del foro “Pregúntale al profesor de la asignatura” a través del cual se articulan algunas preguntas de alumnos y las correspondientes respuestas en el que se tratan aspectos generales de la asignatura. Por la propia naturaleza de los medios de comunicación empleados, no existen horarios a los que deba ajustarse el alumno.
  • Examen final presencial u online

Las horas de dedicación a cada actividad se detallan en la siguiente tabla:

ACTIVIDADES FORMATIVAS HORAS POR ASIGNATURA % PRESENCIAL
Sesiones presenciales virtuales 15 horas 100%
Recursos didácticos audiovisuales 6 horas 0
Estudio del material básico 50 horas 0
Lectura del material complementario 25 horas 0
Trabajos, casos prácticos, test 17 horas 0
Prácticas de laboratorios virtuales 12 horas 16.7%
Tutorías 16 horas 30
Trabajo colaborativo 7 horas 0
Realización de examen final 2 horas 100%
Total 150 horas -

Bibliografía básica

Recuerda que la bibliografía básica es imprescindible para el estudio de la asignatura. Cuando se indica que no está disponible en el aula virtual, tendrás que obtenerla por otros medios: librería UNIR, biblioteca...

Los textos necesarios para el estudio de la asignatura han sido elaborados por UNIR y están disponibles en formato digital para consulta, descarga e impresión en el aula virtual.


Bird, R. (2000). Introducción a la programación funcional con Haskell. Madrid: Prentice Hall

Nilsson, U. y Małuszyński, J.  (1995). Logic, Programming and Prolog (2 Ed). Nueva Jersey. John Wiley & Sons Ltd.


Bibliografía complementaria

Angelopoulos, N., Wielemaker, J. y Giegerich, R. (2017). Accessing biological data as Prolog facts. BCM PPDP´17, 29, 29-38.

Hewett, R., Kijsanayothin, P., Bak, S. y Galbrei, M. (2016). Cybersecurity policy verification with declarative programming. Applied Intelligence, 45, 83-95.

Hogger, C. J. (1990). Essentials of Logic Programming. Oxford: Clarendon Press.

Krzysztof, R. (2001). The logic programming paradigm an Prolog. Amsterdam: Apt. Centrum voor Wiskunde.

Lloyd, J. W. (Ed.). (1991). Foundations of Logic Programming. Berlín: Springer-Verlag.

Ricca, F., Grasso, G., Alviano, M., Manna, M., Lio, V., Iiritano, S. y Leone, N. (2012) Team-building with answer set programming in the gioia-tauro seaport. Theory and Practice of Logic Programming. 12(03), 361–381.

Ruiz, B. C. y Gutiérrez, F. y Guerrero, P. y Gallardo, J. E. (2010). Razonando con Haskell. Un curso sobre programación funcional. España: Ediciones Paraninfo.

Thompson, S. (1999) Haskell: The Craft of Functional Programming (Second
Edition). Nueva Jersey Addison-Wesley.

El sistema de calificación se basa en la siguiente escala numérica:

0 - 4, 9 Suspenso (SS)
5,0 - 6,9 Aprobado (AP)
7,0 - 8,9 Notable (NT)
9,0 - 10 Sobresaliente (SB)

La calificación se compone de dos partes principales:

El examen se realiza al final del cuatrimestre y es de carácter PRESENCIAL U ONLINE y OBLIGATORIO. Supone el 60% de la calificación final y para que la nota obtenida en este examen se sume a la nota final, es obligatorio APROBARLO.

La evaluación continua supone el 40% de la calificación final. Este 40% de la nota final se compone de las calificaciones obtenidas en las diferentes actividades formativas llevadas a cabo durante el cuatrimestre.

Ten en cuenta que la suma de las puntuaciones de las actividades de la evaluación continua permite que realices las que prefieras hasta conseguir el máximo puntuable mencionado. En la programación semanal de la asignatura, se detalla la calificación máxima de cada actividad o evento concreto puntuables.

Sistema de evaluación Ponderación min - max
Prueba de evaluación final 60% - 60%
Evaluación de prácticas de laboratorios virtuales 0% - 40%
Resolución de trabajos, proyectos y casos 0% - 40%
Test de autoevaluación 0% - 20%
Participación en foros y otros medios participativos 0% - 40%

Obviamente, al tratarse de formación online puedes organizar tu tiempo de estudio como desees, siempre y cuando vayas cumpliendo las fechas de entrega de actividades, trabajos y exámenes. Nosotros, para ayudarte, te proponemos los siguientes pasos:

  1. Desde el Campus virtual podrás acceder al aula virtual de cada asignatura en la que estés matriculado y, además, al aula virtual al aula virtual del Grado. Aquí podrás consultar la documentación disponible sobre cómo se utilizan las herramientas del aula virtual y sobre cómo se organiza una asignatura en la UNIR y también podrás organizar tu plan de trabajo con tu tutor personal.
  2. Observa la programación semanal. Allí te indicamos qué parte del temario debes trabajar cada semana.
  3. Ya sabes qué trabajo tienes que hacer durante la semana. Accede ahora a la sección Temas del aula virtual. Allí encontrarás el material teórico y práctico del tema correspondiente a esa semana.
  4. Comienza con la lectura de las Ideas clave del tema. Este resumen te ayudará a hacerte una idea del contenido más importante del tema y de cuáles son los aspectos fundamentales en los que te tendrás que fijar al estudiar el material básico. Lee siempre el primer apartado, ¿Cómo estudiar este tema?, porque allí te especificamos qué material tienes que estudiar. Consulta, además, las secciones del tema que contienen material complementario (Lo + recomendado y + Información).
  5. Dedica tiempo al trabajo práctico (sección Actividades y Test). En la programación semanal te detallamos cuáles son las actividades correspondientes a cada semana y qué calificación máxima puedes obtener con cada una de ellas.
  6. Te recomendamos que participes en los eventos del curso (sesiones presenciales virtuales, foros de debate…). Para conocer la fecha concreta de celebración de los eventos debes consultar las herramientas de comunicación del aula vitual. Tu profesor y tu tutor personal te informarán de las novedades de la asignatura.


En el aula virtual del Grado encontrarás siempre disponible la documentación donde te explicamos cómo se estructuran los temas y qué podrás encontrar en cada una de sus secciones: Ideas clave, Lo + recomendado, + Información, Actividades y Test.

 

Ten en cuenta estos consejos...

  • Sea cual sea tu plan de estudio, accede periódicamente al aula Virtual, ya que de esta forma estarás al día de las novedades del curso y en contacto con tu profesor y con tu tutor personal.
  • Recuerda que no estás solo: consulta todas tus dudas con tu profesor-tutor utilizando el correo electrónico. Si asistes a las sesiones presenciales virtuales también podrás preguntar al profesor sobre el contenido del tema. Además, siempre puedes consultar tus dudas sobre el temario en los foros que encontrarás en cada asignatura (Pregúntale al profesor).r).
  • ¡Participa! Siempre que te sea posible accede a los foros de debate y asiste a las sesiones presenciales virtuales. El intercambio de opiniones, materiales e ideas nos enriquece a todos.
  • Y ¡recuerda!, estás estudiando con metodología online: tu esfuerzo y constancia son imprescindibles para conseguir buenos resultados. ¡No dejes todo para el último día!