Última revisión realizada:01/01/2022

Denominación de la asignatura: Programación Avanzada
Grado al que pertenece: Grado en Matemática Computacional
Créditos ECTS: 6
Cuatrimestre en el que se imparte: Tercer curso, segundo cuatrimestre
Carácter de la asignatura: Obligatoria
Materia a la que pertenece: Matemática Computacional

Presentación

La asignatura de Programación Avanzada tiene como objetivo fundamental abordar el estudio y la comprensión de áreas tan importantes en desarrollo software como son el paradigma de orientación a objetos y la programación de interfaces gráficas de usuario. Además, la asignatura aborda la construcción de software siguiendo técnicas de programación concurrente para expresar y explotar el paralelismo subyacente en numerosos problemas de programación.

El paradigma de orientación a objetos es uno de los más usados en la industria del desarrollo software. Sobre este paradigma se asienta una forma particular de estructurar, organizar y comprender el código que representa la lógica del sistema software. Su comprensión y práctica constituye un conocimiento fundamental a la hora de abordar la construcción de grandes sistemas software desarrollados actualmente.

La interfaz gráfica de usuario, por otro lado, configura el componente fundamental para hacer que el sistema software sea altamente interactivo, por lo que su diseño y programación se vuelve crítica en la mayoría de los sistemas software. El sistema software será comprendido por un usuario en términos de su interfaz gráfica, pues es la parte visible del sistema.

La naturaleza del flujo de control y ejecución en numerosos problemas de programación es inherentemente concurrente (ocurren cosas al mismo tiempo sobre los mismos datos), no una detrás de otra de forma secuencial. Piensa por ejemplo en un servidor atendiendo múltiples peticiones, el flujo del servidor y el de las solicitudes de los clientes pueden o estarán están ocurriendo al mismo tiempo. Para estos casos se deben aplicar técnicas especiales de programación que den una solución a este problema.

Por último y no menos importante, en esta asignatura abordamos un tema dedicado a las pruebas software y en concreto a las pruebas unitarias como pilar fundamental a la hora de construir software fiable y de calidad.

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

  • CG1: Ser capaz de aplicar los conocimientos matemáticos de forma rigurosa por medio de la elaboración y defensa de argumentos y en la resolución de problemas.
  • CG2: Capacidad de obtener información y saber interpretarla utilizando el software matemático más adecuado en cada caso.
  • CG3: Capacidad de reunir e interpretar datos relevantes, dentro del área de las matemáticas y la computación, para emitir juicios que incluyan una reflexión sobre temas relevantes de índole social, científica o ética.
  • CG4: Capacidad de tomar decisiones a partir de consideraciones abstractas, para organizar, planificar y optimizar cuestiones de carácter matemático y computacional.
  • CG5: Capacidad de desarrollar aquellas habilidades de aprendizaje necesarias para emprender estudios posteriores en el ámbito de la matemática computacional con un alto grado de autonomía.
  • CG6: Capacidad de presentar ideas, procedimientos o redactar informes, así como asesorar a personas u organizaciones en su ámbito de especialización en matemática computacional.
  • CG7: Capacidad para saber comunicar y transmitir los conocimientos y, habilidades relacionados con la matemática computacional.

Competencias transversales

  • CT1:Aplicar las nuevas tecnologías como herramientas para el intercambio comunicacional en el desarrollo de procesos de indagación y de aprendizaje.
  • CT2:Desarrollar habilidades de comunicación, para redactar informes y documentos, o realizar atractivas y eficaces presentaciones de los mismos.

Competencias específicas

  • CE1:Capacidad de asimilar la definición de un nuevo objeto matemático, en términos de otros ya conocidos, y utilizarlo en otros contextos.
  • CE2: Capacidad de conocer la estructura, organización, funcionamiento e interconexión de los ordenadores.
  • CE3: Ser capaz de conocer y aplicar las características, funcionalidades y estructura de las bases de datos que permitan su adecuado uso, diseño y programación.
  • CE4: Ser capaz de interpretar la influencia de las distintas variables, la relación entre ellas y la complejidad del modelo en los problemas de matemática aplicada.
  • CE5: Capacidad de seleccionar las propiedades estructurales de objetos matemáticos distinguiéndolas de aquellas puramente ocasionales, y poder probarlas con demostraciones rigurosas o refutarlas con contraejemplos.
  • CE6: Capacidad de formular modelos matemáticos que permitan calcular soluciones o la evolución de un determinado sistema de un problema de aplicación directa, así como de analizar e interpretar otros modelos existentes.
  • CE7: Capacidad de utilizar aplicaciones informáticas de análisis estadístico, cálculo numérico y simbólico, visualización gráfica, optimización para la resolución de problemas.
  • CE8: Capacidad para entender la estructura matemática del espacio finito (algebraica, métrica, analítica) en el que tienen lugar la mayor parte de problemas de la empresa y la ingeniería.
  • CE9: Ser capaz de identificar y aplicar las herramientas adecuadas para el análisis de datos en problemas matemáticos.
  • CE10: Capacidad de programar para resolver problemas relacionados con la matemática aplicada.
  • CE11: Capacidad para parametrizar las curvas en el plano y en el espacio para aplicar la teoría de curvas y superficies.
  • CE12: Ser capaz de conocer los fundamentos de la programación de ordenadores y su aplicación para la resolución de problemas.
  • CE13: Ser capaz de conocer y aplicar los principios fundamentales y técnicas básicas de la programación, guiada por eventos, orientada a objetos y concurrente.
  • CE14: Ser capaz de comprender y dominar los conceptos básicos de física electrónica y electromagnetismo, y su aplicación para la resolución de problemas propios de la ingeniería informática.
  • CE15: Capacidad de comprender y dominar los conceptos básicos de matemática discreta, lógica y complejidad computacional, y su aplicación para la resolución de problemas aplicados a la matemática computacional.
  • CE16: Capacidad de diseñar, desarrollar, seleccionar y evaluar aplicaciones y sistemas informáticos, asegurando su fiabilidad y calidad.
  • CE17: -
  • CE18: Ser capaz de conocer las características, funcionalidades y estructura de los Sistemas Operativos y diseñar e implementar aplicaciones basadas en sus servicios.
  • CE19: Ser capaz de conocer y aplicar las características, funcionalidades y estructura de las Redes de Computadores e Internet y diseñar e implementar aplicaciones basadas en ellas.
  • CE20: Ser capaz de elaborar y defender un proyecto universitario en el ámbito de la matemática computacional.

Tema 1. Introducción a la programación orientada a objetos

  • Introducción y objetivos
  • Diseño modular de programas.
  • Principios de diseño de módulos .
  • El paradigma de orientación objetos.
  • Tarjetas CRC (Class, Responsability Collaboration).
  • Modelado con objetos.
  • Cuaderno de ejercicios.

Tema 2. Relaciones entre clases

  • Introducción y objetivos.
  • Relaciones entre clases.
  • Cardinalidad/multiplicidad de una relación.
  • Navegabilidad de una asociación.
  • Tipos de relaciones entre clases.
  • Cuaderno de ejercicios.

Tema 3. Herencia, clases abstractas y polimorfismo

  • Introducción y objetivos.
  • Relación de generalización y especialización entre clases.
  • Principio de sustitución de Liskov.
  • Herencia
  • Clases abstractas
  • Polimorfismo
  • Ligadura de métodos
  • Cuaderno de ejercicios.

Tema 4. Gestión de errores mediante excepciones

  • Introducción y objetivos.
  • Tipos de errores en un programa.
  • Gestión clásica de errores mediante código de retorno.
  • Concepto de excepción.
  • El modelo de errores de Java.
  • Tratamiento de excepciones.
  • Lanzar una excepción (throw).
  • Manejadores de excepciones.
  • Declaración de excepciones en métodos (excepciones comprobadas).
  • Cuaderno de ejercicios.

Tema 5. Interfaces gráficas de usuario (I)

  • Introducción y objetivos.
  • Introducción a las interfaces gráficas de usuario.
  • Interacción persona ordenador (HCI Human-Computer Interaction).
  • Historia de las interfaces gráficas de usuario.
  • Prototipado.
  • Aspectos de diseño de las interfaces gráficas usuario.
  • Principios de diseño de interfaces de usuario.
  • Estilos de interacción.
  • Componentes de un sistema de ventanas.
  • Elementos comunes de una interfaz gráfica de usuario.
  • Cuaderno de ejercicios.

Tema 6. Interfaces gráficas de usuario (II)

  • Introducción y objetivos.
  • Patrones de diseño e interfaces gráficas de usuario.
  • Programación dirigida por eventos.
  • Implementación de interfaces gráficas en Java.
  • Cuaderno de ejercicios.

Tema 7. Introducción a la programación concurrente

  • Introducción y objetivos.
  • Introducción a la programación concurrente.
  • Unidades de ejecución y planificación: procesos e hilos.
  • Concurrencia, paralelismos y ejecución concurrente paralela.
  • Soporte para la ejecución de múltiples hilos.
  • Modelos de concurrencia e intercomunicación.
  • Lenguajes de programación y la programación concurrente.
  • Cuaderno de ejercicios.

Tema 8. Sincronización de hilos

  • Introducción y objetivos.
  • Tipos de interacciones en ejecución concurrente.
  • Sincronización de hilos.
  • Exclusión mutua.
  • Mecanismos de sincronización.
  • Problemas de control y sincronización de hilos.
  • Sincronización de hilos en Java.
  • Monitores en Java.
  • Tipos de datos colección seguros.
  • Cuaderno de ejercicios.

Tema 9. Gestión y planificación de hilos

  • Introducción y objetivos.
  • Introducción a la planificación de procesos e hilos.
  • Políticas de planificación de hilos.
  • Soporte de ejecución de hilos.
  • Patrón de diseño concurrente: ThreadPool.
  • Cuaderno de ejercicios.

Tema 10. Estrategias y técnicas de prueba de software

  • Introducción y objetivos.
  • Introducción a las pruebas software .
  • Estrategias de pruebas.
  • Diseños de casos de pruebas.
  • Pruebas de caja blanca.
  • Técnicas de prueba de caja blanca.
  • Técnicas de prueba de caja negra.
  • Pruebas unitarias.
  • Cuaderno de ejercicios.

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.

En la programación semanal puedes consultar cuáles son las actividades concretas que tienes que realizar en esta asignatura.

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

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

ACTIVIDADES FORMATIVAS HORAS POR ASIGNATURA % PRESENCIAL
Clases en directo 15 horas 100%
Lecciones magistrales 6 horas 0
Estudio del material básico 52 horas 0
Lectura del material complementario 25 horas 0
Sesiones prácticas de laboratorio virtual 12 horas 0
Trabajos, casos prácticos 17 horas 0
Tutorías 16 horas 0
Trabajo colaborativo 7 horas 0
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...

Bibliografía complementaria

  • Meyer, B., Object-Oriented Software Construction, Prentice-Hall, 1988.
  • Jacobson, I., Object-Oriented Sofnvare Engineering, Addison-Wesley, 1992.
  • Programación orientada a objetos C++ (5ª edición 2018) (Español), julio 2018
  • Concurrency in .NET: Modern patterns of concurrent and parallel programming (Inglés) 1st Edición (13 Julio 2018)
  • Designing Interfaces: Patterns for Effective Interaction Design (Inglés) Tapa blanda – 31 enero 2020
  • Ben-Ari, M.: Principles of Concurrent and Distributed Programming. Prentice-Hall.
  • Addison wesley. Doug Lea. Programación Concurrente en Java (Principios y patrones de diseño) (2º edición)
  • Sznajdleder, P. A. Java a Fondo: estudio del lenguaje y desarrollo de aplicaciones (2ª ed.). Buenos Aires: AlfaOmega Grupo Editor. (2013)

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 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
Participación del estudiante (sesiones, foros, tutorías) 0% - 10%
Trabajos, proyectos, laboratorios/talleres y casos 10% - 20%
Test de autoevaluación 0% - 10%
Examen final presencial 60% - 60%

Gustavo Millán García

Formación académica: Doctor en Ingeniería Software por la Universidad Pontificia de Salamanca (Madrid) en el programa de Ingeniería software. Ingeniero en informática por la Universidad Pontificia de Salamanca (Madrid). CAP (Curso de Aptitud Pedagógica) Universidad Complutense de Madrid. Técnico especialista en electrónica industrial.

Experiencia: Profesor adjunto en la Escuela Superior de Ingeniería y Arquitectura (Universidad Pontificia Salamanca Campus Madrid) impartiendo asignaturas en las áreas de Programación, Bases de datos e Ingeniería software. Responsable de equipo de desarrollo de proyectos del Centro de Proceso de Datos de la Fundación Pablo VI/UPSAM. Actualmente Director de TI en la Fundación Pablo VI.

Líneas de investigación: Sus principales líneas de investigación se relacionan con el desarrollo e ingeniería software dirigida por modelos y el área de arquitectura y patrones software.

Al tratarse de formación on line puedes organizar tu tiempo de estudio como desees, siempre y cuando vayas cumpliendo las fechas de entrega de las actividades y la fecha de 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 del Curso de introducción al campus virtual. 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 UNIR. 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 del tema correspondiente a esa semana.
  4. Comienza con la lectura del contenido teórico del tema. Este material es el que debes estudiar para superar la asignatura. Consulta, además, las secciones del tema que contienen material complementario: con esto podrás tener una visión más amplia sobre el tema que estás trabajando.
  5. Dedica tiempo al trabajo práctico (sección Actividades). 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 (clases en directo, foros de debate, etc.). 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 Curso de introducción al campus virtual 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. También puedes consulltar ahí el funcionamiento de las distintas herramientas del aula virtual: correo, foro, clases en directo, envío de actividades, etc.

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 tutor personal utilizando el correo electrónico. Además, siempre puedes consultar tus dudas sobre el temario en los foros que encontrarás en cada asignatura (Pregúntale al profesor).
  • ¡Participa! Siempre que te sea posible accede a los foros de debate. 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!