Profesorado
Responsable
- Alicia Ageno Pulido ( ageno@cs.upc.edu )
- Sergio Álvarez Napagao ( salvarez@cs.upc.edu )
Otros
- Alejandro Ivan Paz Ortiz ( ivan.paz@upc.edu )
- Anna Ramon Hinojosa ( anna.ramon.hinojosa@upc.edu )
- Carles Arnal Castello ( carles.arnal@upc.edu )
- Guillermo Godoy Balil ( guillem.godoy@upc.edu )
- Ignasi Gómez Sebastià ( ignasi.gomez@upc.edu )
- Jose Miguel Urquiza Ortiz ( jose.miguel.urquiza@upc.edu )
- Salvador Medina Herrera ( salvador.medina.herrera@upc.edu )
Horas semanales
Teoría
2
Problemas
0
Laboratorio
2
Aprendizaje dirigido
0.28
Aprendizaje autónomo
5.72
Competencias
Trabajo en equipo
- G5.2 - Planificar y acordar los objetivos, las reglas de funcionamiento, las responsabilidades, la agenda y el procedimiento de revisión del trabajo. Identificar conflictos, negociarlos y resolverlos de forma efectiva. Adaptarse a diferentes tipos de grupo (grande-pequeño, técnico-mixto, presencial-a distancia). Interactuar con eficacia y promover la participación de todos los miembros del grupo.
Espíritu emprendedor e innovador
- G1.2 - Tomar iniciativas que generen oportunidades, nuevos objetos o soluciones nuevas, con una visión de implementación de proceso y de mercado, y que implique y haga partícipes a los otros en proyectos que se tienen que desarrollar (capacidad de actuar de manera autónoma).
Competencias técnicas comunes
- CT2.3 - Diseñar, desarrollar, seleccionar y evaluar aplicaciones, sistemas y servicios informáticos, y al mismo tiempo asegurar su fiabilidad, su seguridad y su calidad, conforme a principios éticos y a la legislación y la normativa vigente.
- CT2.4 - Demostrar conocimiento y capacidad de aplicación de las herramientas necesarias para el almacenaje, el procesamiento y el acceso a los Sistemas de información, incluidos los basados en web.
- CT2.5 - Diseñar y evaluar interfaces persona-computador que garanticen la accesibilidad y la usabilidad a los sistemas, a los servicios y a las aplicaciones informáticas.
- CT3.6 - Demostrar conocimiento de la dimensión ética en la empresa: la responsabilidad social y corporativa en general y, en particular, las responsabilidades civiles y profesionales del ingeniero en informática.
- CT4.1 - Identificar las soluciones algorítmicas más adecuadas para resolver problemas de dificultad mediana.
- CT4.2 - Razonar sobre la corrección y la eficiencia de una solución algorítmica.
- CT4.3 - Demostrar conocimiento y capacidad de aplicación de los principios fundamentales y las técnicas básicas de los sistemas inteligentes y su aplicación práctica.
- CT5.1 - Escoger, combinar y explotar diferentes paradigmas de programación, en el momento de construir software, atendiendo a criterios como la facilidad de desarrollo, la eficiencia, la portabilidad y la mantenibilidad.
- CT5.2 - Conocer, diseñar y utilizar de forma eficiente los tipos y las estructuras de datos más adecuados para la resolución de un problema.
- CT5.3 - Diseñar, escribir, probar, depurar, documentar y mantener código en un lenguaje de alto nivel para resolver problemas de programación aplicando esquemas algorítmicos y usando estructuras de datos.
- CT5.4 - Diseñar la arquitectura de los programas utilizando técnicas de orientación a objetos, de modularización y de especificación e implementación de tipos abstractos de datos.
- CT5.5 - Usar las herramientas de un entorno de desarrollo de software para crear y desarrollar aplicaciones.
- CT5.6 - Demostrar conocimiento y capacidad de aplicación de los principios fundamentales y de las técnicas básicas de la programación paralela, concurrente, distribuida y de tiempo real.
- CT6.1 - Demostrar conocimiento y tener capacidad para administrar y mantener sistemas, servicios y aplicaciones informáticas.
- CT8.6 - Demostrar comprensión de la importancia de la negociación, de los hábitos de trabajo efectivos, del liderazgo y de las habilidades de comunicación en todos los entornos de desarrollo de software.
- CT8.7 - Controlar versiones y configuraciones del proyecto.
Objetivos
-
Invocar los conocimientos de programación adquiridos en asignaturas anteriores durante el desarrollo de un proyecto de programación de tamaño medio, eligiendo algoritmos y estructuras de datos adecuados para construir un programa correcto y eficiente.
Competencias relacionadas: CT4.1, CT4.2, CT5.2, -
Organizar el trabajo de diseño y programación de un equipo de personas de tamaño medio (de tres a cuatro), de acuerdo con una planificación temporal preestablecida. Esta organización incluye tanto el cumplimiento de la planificación dada como el reparto de tareas entre los miembros del grupo.
Competencias relacionadas: CT6.1, CT8.6, G5.2, CT8.7, -
Identificar partes susceptibles de ser factorizadas en la especificación, diseño e implementación de un programa, para resolverlas una sola vez. Usar de manera efectiva los mecanismos de la orientación a objetos para hacer la factorización.
Competencias relacionadas: CT5.4, CT5.5, CT5.1, CT2.3, -
Conocer los principios del diseño y la programación orientadas a objetos, su justificación, y las ventajas e inconvenientes de adoptar este paradigma en un proyecto de programación.
Competencias relacionadas: CT5.4, CT5.1, -
Usar el mecanismo de clases y herencia para evitar la redundancia y para capturar abstracciones de especificación, diseño e implementación. Entender las ventajas de este uso de la orientación a objetos con respecto a fiabilidad, modificabilidad, portabilidad, reusabilidad y productividad.
Competencias relacionadas: CT4.2, CT5.2, CT5.3, CT2.3, -
Tratar correctamente las situaciones anómalas dentro del programa, usando, si es conveniente, el mecanismo de excepciones ofrecido por el lenguaje de programación. Testear el programa de forma sistemática y exhaustiva.
Competencias relacionadas: CT5.1, CT5.3, -
Diseñar una interfaz de usuario razonablemente cómoda y eficaz para el programa, usando una librería GUI.
Competencias relacionadas: CT2.5, CT5.6, -
Desarrollar un proyecto de programación de tamaño medio, en grupo, de acuerdo con un plan de desarrollo y una arquitectura proporcionados de antemano.
Competencias relacionadas: G5.2, CT3.6, CT4.1, CT4.2, CT5.2, CT5.4, CT5.5, G1.2, CT2.4, CT4.3, CT5.3, CT2.3,
Contenidos
-
Repaso IES: Especificación, diagramas de clases y casos de uso.
Ciclos de vida.
Definición del proyecto. Requerimientos. Especificación funcional. Modelar primero el dominio.
UML: diagrama de clases (dominio). Diagrama de casos de uso. Explicaciones textuales. Estudio de un caso. -
Introducción a Java y Conceptos de OO en Java
Especificación, diseño y programación orientadas a objetos (OO). Clases, objetos, atributos, métodos y relaciones. Encapsulamiento y ocultación, abstracción y clasificación, herencia. Polimorfismo, "binding" estático y dinámico. Otras relaciones: asociación, agregación, dependencia. -
Diseño e implementación en Java de la arquitectura en 3 capas
Descripción del paradigma de diseño de arquitectura en 3 capas y su implementación en Java -
Prueba de programas
Verificación. Program Testing: prueba y depuración.
Prueba de componentes.
Estategias de prueba e integración. Drivers y stubs/mocks. Planificación de pruebas.
"Andamiaje" y tests de regresión.
Herramientas de ayuda a la prueba (JUnit).
Tratamiento de errores y excepciones. -
Patrones de diseño en Java
Se describiran e implementaran algunos de los patrones de diseño clásicos (decorador, estado, singleton, etc) -
Conceptos básicos de diseño de interfaces en Java
Cómo diseñar una interfice gráfica sencilla usando las librerías standard de Java y aplicando los principios de arquitectura en capas -
Herramientas para el desarrollo de programas
Se describiran a grandes rasgos las herramientas para desarrollar software: control de versiones (Git), integración con testing (JUnit)
Actividades
Actividad Acto evaluativo
Primera entrega del proyecto
Diseño y principio de la implementación. Se debe implementar completamente el modelo del dominio y el núcleo básico algorítmico del proyecto, proporcionando los juegos de pruebas y tests de la parte implementada.Objetivos: 8 1 2 3 6 4 5
Semana: 10
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h
Tercera entrega del proyecto
Entrega final. La documentación a presentar debe incluir la implementación completa del proyecto, así como los juegos de prueba y el manual de usuario. Además de la entrega de la documentación, cada equipo deberá hacer una presentación de su proyecto.Objetivos: 8 1 2 3 6 7 4 5
Semana: 15 (Fuera de horario lectivo)
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h
Presentación tercera entrega
Presentación y entrevista presencial de la tercera entrega.Objetivos: 8
Contenidos:
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
2.2h
Aprendizaje autónomo
0h
Metodología docente
El temario se expone de forma muy práctica, a través de la presentación de muchos ejemplos.Las clases de teoría introducen todo los conocimientos, las técnicas y los conceptos necesarios para la realización del proyecto de la asignatura. Algunas de las clases de laboratorio, normalmente hacia principio de curso, sirven para que el profesor presente brevemente las notaciones, lenguajes, librerías y herramientas a utilizar. En la mayoría de clases de laboratorio, sin embargo, no es el profesor quien lleva la iniciativa. Son unas horas que cada grupo de proyecto puede utilizar para trabajar en común, o bien para consultar dudas con el profesor y recibir sus comentarios.
Las dos horas de clases de teoría y las dos de laboratorio se hacen semanalmente, excepto la primera semana en que sólo se hace teoría (dos sesiones) y las dos últimas que sólo se hace laboratorio.
La realización del proyecto es la parte principal del trabajo a realizar dentro de la asignatura. Este proyecto tendrá un fuerte componente algorítmico y de estructuras de datos.
Para implementar este proyecto, el sistema de trabajo será el siguiente:
- Los estudiantes se organizan en grupos de 4 personas, y los equipos se estructuran en grupos de laboratorio de 15-20 personas.
- Cada grupo de laboratorio tendrá un profesor tutor asignado.
- Dentro de cada equipo, un estudiante y sólo uno es responsable de programar y probar cada clase.
El curso utiliza el lenguaje de programación Java.
Método de evaluación
Nota Final: Nota_ProyectoNota_Proyecto: (0.40 * Entrega1 + 0.15 * Entrega2 + 0.45 * Entrega3) * FT
Dado que el proyecto es un trabajo en grupo en el que deben participar todos y sólo los miembros del equipo, la nota final del proyecto está ponderada por FT. Este Factor de Trabajo (FT) es una ponderación (0 <= FT <= 1) individual que valora el grado de trabajo de cada miembro del equipo. Se hará público junto con las notas de la última entrega, y se determinará a partir del reparto de tareas dentro del equipo (entregado en la Entrega1 y la Entrega3) y de las presentaciones finales del equipo con su tutor.
Competencia transversal "Trabajo en equipo": Se evalúa usando una rúbrica simple, disponible para los estudiantes, en que el tutor de cada grupo puntúa los diferentes aspectos relacionados con la competencia de cada miembro de los equipos.
Competencia transversal "Emprendeduría e innovación": Se evalúa considerando la iniciativa del equipo en los dos momentos en que se han de tomar decisiones propias, no predeterminadas en la asignatura: las funcionalidades extras del proyecto y los algoritmos y estructuras de datos con los que se va a resolver la funcionalidad principal. Por tanto, la evaluación es una combinación de dos criterios:
1) En función de las funcionalidades opcionales propuestas versus las funcionalidades opcionales implementadas
2) En función de la iniciativa del equipo al escoger algoritmos y EDs para implementar las funcionalidades principales
Bibliografía
Básico
-
An introduction to object-oriented programming
- Budd, T,
Addison-Wesley,
2002.
ISBN: 0201760312
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991002402469706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Testing object-oriented systems: models, patterns and tools
- Binder, R.V,
Addison-Wesley,
2000.
ISBN: 9780321700674
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003748579706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
The Java programming language
- Arnold, K.; Gosling, J.; Holmes, D,
Addison-Wesley,
2006.
ISBN: 0321349806
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003128819706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Enginyeria del software: programació orientada a objectes
- Peralta, A.J.; Rodríguez, H,
Edicions UPC,
1994.
ISBN: 8476533748
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991000965439706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
JUnit in action
- Tahcheiv, P. [et al.],
Manning,
2011.
ISBN: 9781935182023
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004104699706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
The object-oriented thought process
- Weisfeld, M,
Addison-Wesley Professional,
2019.
ISBN: 9780135181966
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004210579706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Design patterns : elements of reusable object-oriented software
- Gamma, Erich,
Addison-Wesley,
cop. 1995.
ISBN: 0201633612
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991001193289706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Java design patterns: a hands-on experience with real-world examples
- Sarcar, V,
Apress L.P.,
2022.
ISBN: 9781484279717
Complementario
-
Object-oriented software construction
- Meyer, B,
Prentice Hall,
1997.
ISBN: 0136291554
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991002431179706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
The unified modeling language user guide
- Booch, G.; Rumbaugh, J.; Jacobson, I,
Addison-Wesley,
2005.
ISBN: 0321267974
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003448989706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
The unified modeling language reference manual
- Rumbaugh, J.; Jacobson, I.; Booch, G,
Addison-Wesley,
2005.
ISBN: 0321245628
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991002895869706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
UML and C++: a practical guide to object-oriented development
- Lee, R.C.; Tepfenhart, W.M,
Prentice Hall,
2001.
ISBN: 0130290408
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003632949706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Software engineering: a practitioner's approach
- Pressman, R.S.; Maxim, B.R,
McGraw Hill Higher Education,
2020.
ISBN: 9781260548006
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004193559706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
About face: the essentials of interaction design
- Cooper, A.; Reimann, R.; Cronin, D.; Noessel, C,
Wiley,
2014.
ISBN: 9781118766576
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004024899706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Pragmatic Programmer: your journey to mastery
- Thomas, David,
Addison Wesley,
2020.
ISBN: 9780135957059
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004949115106711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Clean architecture : a craftsman's guide to software structure and design
- Martin, Robert C,
Prentice Hall,
[2018].
ISBN: 9780134494166
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991004184599706711&context=L&vid=34CSUC_UPC:VU1&lang=ca
Web links
- Pàgina de Java, el llenguatge de programació usat a l'assignatura. L'última versió disponible de la Java Platform es pot descarregar lliurement d'aquesta web. https://www.oracle.com/java/index.html
- Pàgina del consorci UML. https://www.uml.org/
Capacidades previas
- Capacidad para resolver problemas algorítmicos de dificultad media a partir de una especificación clara, y de implementar las soluciones en un lenguaje de programación imperativo.- Conocimiento de los mecanismos básicos de estructuración de programas (modularización, encapsulación, tipos abstractos de datos, clases) y capacidad para aplicarlos a problemas pequeños-medios (unos pocos módulos)
- Conocimiento de los elementos de programación orientada a objetos (clases, objetos, mecanismos de ejecución).
- Familiaridad con un lenguaje imperativo orientado a objetos.
- Capacidad de usar y programar estructuras de datos en este lenguaje.
- Capacidad de usar librerías en este lenguaje.
- Dominio de estrategias básicas para encontrar y corregir errores en módulos sencillos.