Titulación | Tipo | Curso | Semestre |
---|---|---|---|
2503740 Matemática Computacional y Analítica de Datos | FB | 1 | 2 |
No hay prerrequisitos oficiales, pero es necesario saber programar en Python.
Una de las metodologías más extendidas de diseño y programación es la orientada a objetos, según la cual un software se organiza en clases que contienen métodos (procedimientos) y atributos (datos). Las instancias u objetos de estas clases se envían mensajes unas a otras (hacen "llamadas" a métodos de otros objetos) consiguiendo así la funcionalidad deseada. Aparte del concepto de clase, tres otros elementos fundamentales son la herencia, la composición y la separación de las partes pública y privada de las clases. Estos elementos son pues necesarios para la programación OO, pero no suficientes: hay que saber cómo utilizarlos para llegar a soluciones que sean fácilmente extensibles en el futuro, ya que una ley del software es que los cambios son inevitables. Existen una serie de principios de diseño o heurísticas que nos dicen cómo emplear estos elementos con el fin de conseguirlo. Y sobre ellos todavía, se construyen los patrones de diseño, que son soluciones a nivel de diseño OO a problemas recurrentes, que aparecen a menudo en resolver problemas aparentemente independientes. En esta asignatura se introducen y se practican los conceptos OO así como los principios y patrones de diseño.
El aprendizaje gira en torno a un proyecto --- la práctica --- en que es necesario aplicar todos los temas explicados para diseñar e implementar una aplicación de software a partir de un enunciado que hace el papel de documento de requerimientos. Por el contexto de la asignatura, el proyecto cae en el campo del aprendizaje computacional (machine learning). Los lenguajes de programación utilizados en la asignatura serán Python principalmente por que es en el que se hará el proyecto, pero también Java que utilizaremos en algunos ejercicios y soporta mejor los conceptos de orientación a objeto. Así,podremos comparar cómo uni otro los implementa y en qué grado.
1. Conceptos de orientación a objeto: encapsulamiento, herencia, composición, interfaz. Diagramas de clase UML
2. Programación orientada a objeto en Python3 y Java
3. Asignación de responsabilidades: patrones GRASP
4. Principios generales de diseño orientado a objeto
5. Patrones de diseño: creacionales, estructurales, de comportamiento
6. Estilo de codificación, aserciones y mensajes de logging
Tal como hemos dicho a los objetivos, la asignatura sigue una metodología de aprendizaje basado en el desarrollo de un proyecto. Su implementación concreta en cuanto al uso de las horas de clase es la siguiente:
- Clases de teoría. En ellas el profesor introduce los contenidos teóricos y da referencias útiles (libros, artículos, páginas web) para que el estudiante después pueda continuar su aprendizaje, así como desarrollar el proyecto propuesto. Las transparencias utilizadas en estas clases pues no deben tomarse como única fuente de estudio. Hay que estudiar los libros recomendados, y los artículos, capítulos de libros de acceso abierto y otros, disponibles en la página web de la asignatura. En estas clases también resolveremos pequeños problemas, de diseño y / o programación OO en Java y Python.
- Sesiones de prácticas. Los estudiantes deberán formado a principio de curso grupos de 3 estudiantes. En estas sesiones los estudiantes vienen a 1) 'ajustar cuentas' con el profesor del trabajo hecho cada semana del proyecto y resolver dudas, y 2) a ser evaluados de manera continua, de acuerdo con el baremo que figura en el enunciado de la práctica. Por lo tanto, la práctica *no* se hace sólo durante estas sesiones sino que pide un trabajo previo.
Todos los materiales de la asignatura junto con su planificación detallada se encontrarán en el campus virtual o bien a una página web que ya se anunciará. La mayoría de estos materiales son en inglés.
Título | Horas | ECTS | Resultados de aprendizaje |
---|---|---|---|
Tipo: Dirigidas | |||
Clases de teoria | 75 | 3 | 5, 2, 3, 9, 10 |
clases de prácticas | 75 | 3 | 7, 11, 13 |
Hay una parte de evaluación de grupo y otra individual. La nota de la primera (PR) corresponde a la práctica. La segunda (EX) del promedio de dos pruebas escritas durante el trimestre (EX1, EX2), o bien de un examen de recuperación (EXR1, EXR2).
El algoritmo para el cálculo de la nota final (FM) es el siguiente (todas las notas son sobre 10):
EX = 0.5 * (max (EX1 + EXR1), max (EX2, EXR2))
if (EX> = 4.0) and (PR> = 4.0):
FM = (EX + PR) /2.0
else:
FM = min (EX, PR)
Opcionalmente, propondremos algunos ejercicios y pequeños problemas que sumarán puntos a los exámenes EX1, EX2 y los correspondientes de recuperacion.
Si no se entrega un examen o la práctica, la nota de esta parte es cero. No hay recuperación de la práctica. La nota final será 'no evaluable' si no se ha entregado nada evaluable, ya sea examen o práctica.
Algo que queremos asegurar mediante las diferentes evaluaciones es que cada miembro del grupo realmente ha contribuido a la práctica en la misma medida que los demás. Así pues, si de resultas de las preguntas que el profesor hace durante las sesiones de proyecto o por las notas de las pruebas escritas tenemos indicios de que esto no ocurre, entonces la nota de proyecto pasará de ser de grupo a individual: evaluaremos separadamente la parte del proyecto que haya hecho cada miembro, pudiendo además dividir el grupo a partir de ese momento.
Sin perjuicio de otras medidas disciplinarias que se estimen oportunas, y de acuerdo con la normativa académica vigente, se calificarán con un cero las irregularidades cometidas por el estudiante que puedan conducir a una variación de la calificación de un acto de evaluación. Por lo tanto, plagiar, copiar o dejar copiar la práctica o cualquier otra actividad de evaluación implicará suspender con un cero y no se podrá recuperar en el mismo curso académico. Si esta actividad tiene una nota mínima asociada, entonces la asignatura quedará suspendida.
Título | Peso | Horas | ECTS | Resultados de aprendizaje |
---|---|---|---|---|
Exámenes | 50% | 0 | 0 | 5, 2, 3, 6, 7, 8, 9, 10 |
Práctica | 50% | 0 | 0 | 4, 1, 2, 3, 7, 9, 11, 12, 13, 14 |
Python: master the art of design patterns. D. Phillips, C. Giridhar, S. Kasampalis. Packt Publishing, 2016.
Mastering object-oriented Python. Steven F. Lott. Packt publishing, 2014.
Head first object oriented analysis and design. B.D. McLaughlin, G. Pollice, D. West. O'Reilly, 2007.
Design patterns explained simply. Alexander Shvets. https://sourcemaking.com/design-patterns-ebook.
Head first design patterns. E. Freeman, E. Freeman, K. Sierra, B. Bates. O'Reilly, 2004.
Clean code: a handbook of agile software craftmanship. R.C. Martin. Prentice Hall, 2008. O la versión en castellano, Código limpio, d'Anaya
Multimedia 2012.