DATOS IDENTIFICATIVOS 2023_24
Asignatura (*) TÉCNICAS AVANZADAS DE PROGRAMACIÓN Código 17234117
Titulación
Grado en Ingeniería Informática (2010)
Ciclo
Descriptores Cr.totales Tipo Curso Periodo
6 Obligatoria Tercer 1Q
Lengua de impartición
Castellà
Departamento Ingeniería Informática y Matemáticas
Coordinador/a
GARCÍA LÓPEZ, PEDRO ANTONIO
Correo-e pedro.garcia@urv.cat
aitor.arjona@urv.cat
usama.benabdelkrim@urv.cat
Profesores/as
GARCÍA LÓPEZ, PEDRO ANTONIO
ARJONA PEREZ, AITOR
BENABDELKRIM ZAKAN, USAMA
Web http://moodle.urv.cat
Descripción general e información relevante Esta asignatura trata conceptos importantes de programación y diseño de software. En particular, trata conceptos de arquitecturas software, calidad del software y de los procesos de diseño y validación de proyectos informáticos.

Competencias
Tipo A Código Competencias Específicas
 A4 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.
 A5 Capacidad para concebir y desarrollar sistemas o arquitecturas informáticas centralizadas o distribuidas integrando hardware, software y redes.
 A7 Capacidad para definir, evaluar y seleccionar plataformas hardware y software para el desarrollo y la ejecución de sistemas, servicios y aplicaciones informáticas.
 CM1 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.
 CM8 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.
Tipo B Código Competencias Transversales
Tipo C Código Competencias Nucleares

Resultados de aprendizaje
Tipo A Código Resultados de aprendizaje
 A4 Diseña una aplicación basada en componentes utilizando un marco de trabajo de software estándar.
Aplica técnicas de calidad del software como los test unitarios, la integración de código y el control de errores.
 A5 Diseña una aplicación basada en componentes utilizando un marco de trabajo de software estándar.
 A7 Aplica técnicas de refactoring y patrones de diseño en la creación de software.
Aplica técnicas de calidad del software como los test unitarios, la integración de código y el control de errores.
 CM1 Conoce los principales paradigmas de programación.
Aplica técnicas de refactoring y patrones de diseño en la creación de programario.
Aplica conceptos generales de metaprogramación e intercepción de programario.
Aplica técnicas de calidad del programario como los test unitarios, la integración de código y el control de errores.
 CM8 Conoce los principales paradigmas de programación.
Aplica técnicas de refactoring y patrones de diseño en la creación de programario.
Aplica conceptos generales de metaprogramación e intercepción de programario.
Diseña una aplicación basada en componentes utilitzando un marco de trabajo de programario estándar.
Aplica técnicas de calidad del programario como los test unitarios, la integración de código y el control de errores.
Tipo B Código Resultados de aprendizaje
Tipo C Código Resultados de aprendizaje

Contenidos
tema Subtema
Introducción y conceptos generales Calidad del Software
Paradigmas de programación
Arquitectura del Software
Sistemas de tipos y polimorfismo Tipado estático y dinàmico
Polimorfismo de sobrecarga
Polimorfismo paramétrico
Polimorfismo de herencia
Patrones de diseño y refactoring Patrones de creacíon, estructurales y de comportamiento
Mejora del código y refactoring
Documentación del software y APIs
Métricas de evaluación de código
Arquitectura del Software Agile Programming
Validación del software y tests unitarios
Programación reflectiva
Componentes software y Frameworks
Casos de uso Middleware y Objetos distribuidos
Arquitecturas orientadas a servicios
Servidores de aplicaciones
Herramientas de depuración y profiling de código

Planificación
Metodologías  ::  Pruebas
  Competencias (*) Horas en clase
Horas fuera de clase
(**) Horas totales
Actividades introductorias
3 8 11
Sesión magistral
A4
20 35 55
Prácticas en laboratorios
CM1
CM8
26 25 51
Atención personalizada
4 8 12
 
Pruebas de desarrollo
A4
A5
A7
7 14 21
 
(*) En el caso de docencia no presencial, serán las horas de trabajo con soporte virtual del profesor.
(**) Los datos que aparecen en la tabla de planificación son de carácter orientativo, considerando la heterogeneidad de los alumnos

Metodologías
Metodologías
  descripción
Actividades introductorias Repaso de conceptos de orientación a objetos
Ejemplos de laboratorio
Sesión magistral Explicación de conceptos de teoría
Interaccción con preguntas y respuestas con los alumnos
Prácticas en laboratorios Introducción de tecnologías y herramientas
Trabajo en grupo
Atención personalizada Entrevistas individuales en horario de tutorías.
Seguimiento de resultados parciales.

Atención personalizada
descripción
Entrevistes individuals en horari de tutories. Seguiment de resultats parcials.

Evaluación
Metodologías Competencias descripción Peso        
Prácticas en laboratorios
CM1
CM8
Examen de laboratorio sin Internet (semana 6): conceptos de polimorfismo y patrones en Java 30%
Pruebas de desarrollo
A4
A5
A7
Práctica final: práctica a resolver en grupo publicada la quinta semana. A entregar incrementalmente hasta la semana 16.


Examen teórico final
70%
Otros  
 
Otros comentarios y segunda convocatoria

La evaluación de la asignatura tendrá tres componentes fundamentales:1) Examen de laboratorio sin Internet (semana 6): conceptos de polimorfismo y patrones en Java2) Examen de teoría (semana 15)3) Práctica final: práctica a resolver en grupo publicada la quinta semana. A entregar incrementalmente hasta la semana 16.

La segunda convocatoria consistirá en un examen de laboratatorio de dos horas (1), un examen de teoría de dos horas (2) y la entrega de la práctica final (3).


Fuentes de información

Básica Bertrand Meyer , Construcción de Software Orientado a Objetos , Prentice Hall , 2003
Paul Deitel, Como programar en Java, Pearson Education, 2012
Gamma et al, Design Patterns, Addison-Wesley, 1994
Martin Fowler, Refactoring: Improving the Design of Existing Code, Addison-Wesley, 1999
C. Szyperski , Component Software, Beyond Object-Oriented Programming, Addison-Wesley, 2000
Kent Beck, Test Driven Development, Addison-Wesley , 2002
Luciano Ramalho, Fluent Python, O'Reilly, 2014
David Beazley, Python Cookbook, O'Reilly , 2013
Martin Odersky, Programming in Scala: A Comprehensive Step-by-Step Guide, 2nd Edition, Artima, 2010

Complementaria

Recomendaciones

Asignaturas que continúan el temario
SISTEMAS DISTRIBUIDOS/17234106

Asignaturas que se recomienda cursar simultáneamente
SISTEMAS ABIERTOS/17234123

Asignaturas que se recomienda haber cursado previamente
FUNDAMENTOS DE PROGRAMACIÓN I/17234001
METODOLOGÍAS DE LA PROGRAMACIÓN/17234116
ESTRUCTURAS DE DATOS/17234115
(*)La Guía docente es el documento donde se visualiza la propuesta académica de la URV. Este documento es público y no es modificable, excepto en casos excepcionales revisados por el órgano competente o debidamente revisado de acuerdo la normativa vigente.