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

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

Presentación

El desarrollo de software es una de las ramas más importantes de la ingeniería informática. Un buen desarrollador además de ser un buen programador (conocer en profundidad el lenguaje de programación que va a utilizar) debe ser capaz de identificar la técnica de programación más adecuada para resolver el problema al que se enfrenta.

La asignatura está dividida en dos grandes bloques, un primer bloque centrado en técnicas de programación (se llevará a cabo en Java) y un segundo bloque centrado en los aspectos formales de la programación (pruebas, documentación, medición….), unidos nos llevan a la obtención de un desarrollo de calidad.

En el primer bloque se van a abordar problemas complejos del mundo real y se va a mostrar al alumno como resolverlos, de manera práctica, a través de diferentes técnicas de diseño y programación. Esto va a proporcionar las herramientas necesarias para que el alumno sea capaz de resolver los problemas más comunes a los que se enfrenta un programador profesional.

En el segundo bloque lo que vamos a hacer es no olvidar que un buen desarrollo no termina cuando se ha realizado el código, sino que hay que documentar y probar el software de tal manera que sea escalable, adaptable y fácil de mantener.

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: Capacidad para concebir, redactar, organizar, planificar, desarrollar y firmar proyectos en el ámbito de la ingeniería en informática que tengan por objeto, la concepción, el desarrollo o la explotación de sistemas, servicios y aplicaciones informáticas.
  • CG2: Capacidad para dirigir las actividades objeto de los proyectos del ámbito de la informática.
  • CG3: Capacidad para diseñar, desarrollar, evaluar y asegurar la accesibilidad, ergonomía, usabilidad y seguridad de los sistemas, servicios y aplicaciones informáticas, así como de la información que gestionan.
  • CG4: Capacidad para definir, evaluar y seleccionar plataformas hardware y software para el desarrollo y la ejecución de sistemas, servicios y aplicaciones informáticas.
  • CG5: 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.
  • CG6: Capacidad para concebir y desarrollar sistemas o arquitecturas informáticas centralizadas o distribuidas integrando hardware, software y redes.
  • CG7: Capacidad para conocer, comprender y aplicar la legislación necesaria durante el desarrollo de la profesión de Ingeniero Técnico en Informática y manejar especificaciones, reglamentos y normas de obligado cumplimiento.
  • CG8: 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.
  • CG9: 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.
  • CG10: Conocimientos para la realización de mediciones, cálculos, valoraciones, tasaciones, peritaciones, estudios, informes, planificación de tareas y otros trabajos análogos de informática.
  • CG11: Capacidad para analizar y valorar el impacto social y medioambiental de las soluciones técnicas, comprendiendo la responsabilidad ética y profesional.
  • CG12: Conocimiento y aplicación de elementos básicos de economía y de gestión de recursos humanos, organización y planificación de proyectos, así como la legislación, regulación y normalización en el ámbito de los proyectos informáticos.

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.
  • CT4:Capacidad de investigar y comunicar los resultados de la investigación.

Competencias específicas

  • CE1:Capacidad para la resolución de los problemas matemáticos que puedan plantearse en la ingeniería. Aptitud para aplicar los conocimientos sobre: álgebra lineal; cálculo diferencial e integral; métodos numéricos; algorítmicos numéricos; estadísticos y optimización.
  • CE2: Comprensión y dominio de los conceptos básicos de campos y ondas y electromagnetismo, teoría de circuitos eléctricos, circuitos electrónicos, principio físico de los semiconductores y familias lógicas, dispositivos electrónicos y fotónicos, y su aplicación para la resolución de problemas propios de la ingeniería.
  • CE3: Capacidad para comprender y dominar los conceptos básicos de matemática discreta, lógica, algorítmica y complejidad computacional, y su aplicación para la resolución de problemas propios de la ingeniería.
  • CE4: Conocimientos básicos sobre el uso y programación de los ordenadores, sistemas operativos, bases de datos y programas informáticos con aplicación en ingeniería.
  • CE5: Conocimiento de la estructura, organización, funcionamiento e interconexión de los sistemas informáticos, los fundamentos de su programación, y su aplicación para la resolución de problemas propios de la ingeniería.
  • CE6: Conocimiento adecuado del concepto de empresa, marco institucional y jurídico de la empresa. Organización y gestión de empresas.
  • CE7: Capacidad para diseñar, desarrollar, seleccionar y evaluar aplicaciones y sistemas informáticos, asegurando su fiabilidad, seguridad y calidad, conforme a principios éticos y a la legislación y normativa vigente.
  • CE8: Capacidad para planificar, concebir, desplegar y dirigir proyectos, servicios y sistemas informáticos en todos los ámbitos, liderando su puesta en marcha y su mejora continua y valorando su impacto económico y social.
  • CE9: Capacidad para comprender la importancia de la negociación, los hábitos de trabajo efectivos, el liderazgo y las habilidades de comunicación en todos los entornos de desarrollo de software.
  • CE10: Capacidad para elaborar el pliego de condiciones técnicas de una instalación informática que cumpla los estándares y normativas vigentes.
  • CE11: Conocimiento, administración y mantenimiento sistemas, servicios y aplicaciones informáticas.
  • CE12: Conocimiento y aplicación de los procedimientos algorítmicos básicos de las tecnologías informáticas para diseñar soluciones a problemas, analizando la idoneidad y complejidad de los algoritmos propuestos.
  • CE13: Conocimiento, diseño y utilización de forma eficiente los tipos y estructuras de datos más adecuados a la resolución de un problema.
  • CE14: 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.
  • CE15: Capacidad de conocer, comprender y evaluar la estructura y arquitectura de los computadores, así como los componentes básicos que los conforman.
  • CE16: Conocimiento de las características, funcionalidades y estructura de los Sistemas Operativos y diseñar e implementar aplicaciones basadas en sus servicios.
  • CE17: Conocimiento y aplicación de las características, funcionalidades y estructura de las bases de datos, que permitan su adecuado uso, y el diseño y el análisis e implementación de aplicaciones basadas en ellos.
  • CE18: Conocimiento y aplicación de las herramientas necesarias para el almacenamiento, procesamiento y acceso a los Sistemas de información, incluidos los basados en web.
  • CE19: Conocimiento y aplicación de los principios fundamentales y técnicas básicas de la programación paralela, concurrente, distribuida y de tiempo real.
  • CE20: Conocimiento y aplicación de los principios fundamentales y técnicas básicas de los sistemas inteligentes y su aplicación práctica.
  • CE20: Conocimiento y aplicación de los principios, metodologías y ciclos de vida de la ingeniería de software.
  • CE20: Capacidad para diseñar y evaluar interfaces persona computador que garanticen la accesibilidad y usabilidad a los sistemas, servicios y aplicaciones informáticas.
  • CE20: Conocimiento de la normativa y la regulación de la informática en los ámbitos nacional, europeo e internacional.
  • CE20: Capacidad para elaborar un trabajo original a realizar individualmente y presentar y defender ante un tribunal universitario, consistente en un proyecto en el ámbito de las tecnologías específicas de la Ingeniería en Informática de naturaleza profesional en el que se sinteticen e integren las competencias adquiridas en las enseñanzas.

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 u online

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 50 horas 0
Lectura del material complementario 25 horas 0
Prácticas de laboratorios virtuales 12 horas 0
Trabajos, casos prácticos 17 horas 0
Tutorías 16 horas 0
Trabajo colaborativo 7 horas 0
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...

Bibliografía complementaria

  • García Linás, Luis Fernando. (2010). Todo lo básico que debería saber: Sobre programación orientada a objetos en Java.. Ediciones de la U
  • Roger S. Pressman. (2010) Ingeniería del software, un enfoque práctico. McGrawHill.
  • José F. Vélez Serrano, Alberto Peña Abril, Patxi Gortazar Bellas, Ángel Sánchez Calle. (2011). Diseñar y programar, todo es empezar: una introducción a la programación orientada a objetos usando UML y Java. Dykison S.L.
  • Sznajdleder, Pablo Augusto. (2013). Java a Fondo: estudio del lenguaje y desarrollo de aplicaciones. Alfaomega Grupo Editor.
  • Muñoz Escoí, Francisco Daniel. Argente Villaplana, Estefanía. Espinosa Minguet, Agustín Rafael (2013). Concurrencia y sistemas distribuidos.Editorial de la Universidad Politécnica de Valencia

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