Programación Avanzada

Presentación del curso

Yo

Estructura

Asignatura obligatoria.

Segundo curso. Segundo semestre.

6 créditos (150 h.) → 60 presenciales, 90 NO presenciales.

Horario y Profesores

Tal y como aparece en el sia

Como se relaciona con otras asignaturas

Programación I: Definición de clases, acceso a ficheros de texto.

Programación II: Introducción a la POO, entrada/salida.

Estructura de datos: Colecciones, genéricos.

Programación Avanzada

Cualquier otra asignatura que implique programación.

Temario

Teoría

  1. Programación Orientada a Objetos. Genericidad.
  2. Patrones de diseño.
  3. Interfaces de usuario.

Prácticas

  1. Calidad del software.
  2. Programación Orientada a Objetos.
  3. Genericidad, excepciones y Entrada/Salida.
  4. Patrones de diseño.
  5. Interfaces de usuario.

Metodología

Teoría:

Presentación de conceptos teóricos en clases magistrales participativas.

Resolución de ejercicios propuestos.

Prácticas:

Desarrollo de un proyecto.

La presentaciones y código de ejemplo

La presentaciones y código de ejemplo están en el github de la asignatura

Haz un fork del repositorio a tu cuenta.

Si no tienes cuenta en github, debes creártela de inmediato. Git y github son herramientas increíbles para la gestión del control de versiones.

Si encuentras algún error o errata, corrígelo y hazme un pull request.

git es una excelente herramienta para el control de versiones. Si no lo haces ya, debes empezar a usarla de inmediato.

En este vídeo se presentan las instruciones git más comunes.

Bibliografía

Sistema de evaluación

Evaluación continua Revisión de cada entrega de prácticas. 40%
Evaluación de prácticas Revisión de las cuatro entregas de prácticas. 20%
Examen Prueba escrita 40%

Criterio de superación de la asignatura:

Para aprobar la asignatura es necesario obtener 5 o más puntos sobre 10 en el promedio ponderado de esas tres partes, con los pesos indicados anteriormente (que vienen establecidos en el plan de estudios). Además, se exige una nota mínima de 4 en el examen final para aprobar la asignatura; no se exige ninguna nota mínima ni en la evaluación continua, ni en la evaluación continua de prácticas. Si la nota del examen final es mayor o igual que 4, la nota final en actas será la nota media ponderada. Si la nota del examen final es menor que 4, la nota final en actas será el mínimo valor entre la nota media ponderada y 4.

Sistema de evaluación

Criterio de superación de la asignatura:

Constarán en actas como presentados en cada convocatoria aquellos alumnos que se presenten al examen final correspondiente. Los estudiantes que hayan realizado pruebas de evaluación continua de teoría y/o de prácticas pero no se presenten al examen, figurarán en actas como «No Presentado».

En la segunda convocatoria del curso no será posible mejorar las notas de evaluación continua. Solamente se realizará un nuevo examen final, cuyo peso seguirá siendo el 40% de la nota final, y se entregará la práctica, cuyo peso seguirá siendo el 20% de la nota final. El restante 40% de la nota en la segunda convocatoria estará formado por la nota de la evaluación continua que no es recuperable en segunda convocatoria.

Sistema de evaluación

Evaluación prácticas.

Evaluación continua (40%)
Práctica 0 No puntúa.
Práctica 1 Apta / NO Apta 0.8 puntos.
Práctica 2 Apta / NO Apta 1.2 puntos.
Práctica 3 Apta / NO Apta 0.8 puntos.
Práctica 4 Apta / NO Apta 1.2 puntos.
Evaluación continua de prácticas (20%)
Evaluación cualitativa de P1+P2+P3+P4 (No hay entrega) Hasta 2 punto.
TOTAL PRÁCTICAS Hasta 6 puntos.

Sistema de evaluación

Examen de teoría (40%)

Primera convocatoria 24/5/2024
Segunda convocatoria 25/6/2024

Cuestiones previas

¿Qué hace este método?

Lee con detenimiento el siguiente fragmento de código:

                    int[] res() {
                    int[] r = new int[2];
                    for(P p: ps)
                    if(p.s.equals("a"))
                    r[0]++;
                    else if(p.s.equals("b"))
                    r[1]++;
                    return r;
                    }
                

... e intenta adivinar qué hace.

¿Qué hace este método?

Lee ahora este método:

                    ContadorSexos cuentaPersonaPorSexo() {
                    ContadorSexos contador = new ContadorSexos();
                    for(Persona persona: personas) {
                    if(persona.isHombre())
                    contador.incrementaHombres();
                    else if(persona.isMujer())
                    contador.incrementaMujeres();
                    }
                    return contador;
                    }
                

¿Qué hace?

Si, los dos métodos hacen lo mismo.

Inspirado en un ejemplo de Clean Code de Robert C. Martin.

Buenos principios de programmación

  • Abstracción.
    • Abstracción de datos.
    • Abstracción de control.
  • Encapsulación.
  • Separación de intereses ("separation of concerns").
  • Delegación.
  • Polimorfismo.
  • Herencia.

Buenos hábitos de programmación

  • Hacer pruebas unitarias.
  • Trabajar en pareja/grupo.
  • Leer código de otros progamadores.
  • Utilizar un sistema de control de versiones.
  • Compartir lo que aprendes.

Buenos hábitos de programación

  • ¡Piensa primero, programa después!
  • Write DRY code
    • La repetición es a menudo un signo de falta de abstracción.
    • Cada conocimiento/funcionalidad debe tener una única representación en el código.
  • Escribe código legible.
    • Nombre significativos (clases, métodos, atributos).
    • Métodos con pocas líneas de código.
    • Único nivel de abstracción en el código de un método.
    • Escribe código para otra persona, no para ti.

Otros de mis objetivos en la asignatura

  • Que adquiráis buenos hábitos de programador.
  • Que lleguéis a escribir código que sea fácil de leer.
  • Que desarrolléis la intuición sobre POO.
  • Que conozcáis algunos patrones de diseño y su utilidad en la creación de software.
  • Que conozcáis, y pongáis en práctica la separación de responsabilidades.
  • Cualquier otra cosa alrededor de la programación que surja.

Otros de mis objetivos en la asignatura

  • ¿Tienes cuenta en algún servicio de control de versiones en la nube?
  • ¿Cómo cronometras el tiempo que le dedicas a las asignaturas?
  • ¿Cómo te planificas el trabajo?
  • ¿Qué IDE utilizas?

Qué es para mi la programación

Ante todo, una actividad muy creativa.

Gernika

http://www.xtec.cat/~jarrimad/contemp/picasso.html

Qué es para mi la programación

Échale un vistazo a este libro.

Out of our minds

http://sirkenrobinson.com/skr/out-of-our-minds

Qué es para mi la programación

¿Pero de verdad que no hace falta una creatividad enorme para descubrir la teoría de la relatividad?

Relatividad

http://en.wikipedia.org/wiki/File:Spacetime_curvature.png

Qué es para mi la programación

¿O la teoría de la evolución de las especies?

Evolución

http://nadefagus.blogspot.com.es/2012/09/response-to-darwins-theory.html

Qué es para mi la programación

¿O la teoría de la evolución de las especies aplicada a la informática?

Evolución

http://www.oocities.org/talmahmood/GenderAndEvolution.html

Qué es para mi la programación

Pero claro, los informáticos no somos fashion.

James Gosling

http://www.terminalesandroid.com/james-gosling-fundador-de-java-se-une-a-google

Qué es para mi la programación

¿O si?

Fundadores de Google

http://masalakingdom.com/forum/showthread.php/4637-Google-Founders-Sergey-Brin-amp-Larry-Page-Real-Life-New-Photos

Qué es para mi la programación

En cualquier caso, para reirse, lo mejor son los físicos.

Fundadores de Google

Fuente: El País

Preguntas