Nuevas tendencias en el diseño y desarrollo de aplicaciones con tecnologías Java Duración: 150 horas Fechas: 17/10/2016 - 16/12/2016 Semanas de aprendizaje: 8 Índice 1. INTRODUCCIÓN 2. PROFESORES 3. TEMARIO DETALLADO DEL CURSO 4. OBJETIVOS POR BLOQUE TEMÁTICO 5. METODOLOGÍA DE IMPARTICIÓN 6. EVALUACIÓN 7. CRONOGRAMA 1. Introducción El curso “Nuevas tendencias en el diseño y desarrollo de aplicaciones con tecnologías Java” tiene una carga docente de 150 horas distribuidas entre los días 17 de octubre y 16 de diciembre de 2016, en horario de 16:30 a 20:30, de lunes a viernes. Sus destinatarios son jóvenes de 20 a 28 años que se encuentren cursando el último año o estén titulados de Grado o Ciclo Formativo de Grado Superior, en situación de desempleo especialmente en los sectores de Informática, Matemáticas, Física, Ingeniería o Estadística posean conocimientos informáticos relacionados con el contexto del curso. Se suponen conocimientos de programación orientada a objetos. El curso cuenta con 19 módulos formativos que se dividen en cinco bloques: ● El primer bloque (28 horas), formado por los módulos 1 a 6 está dedicado a la programación orientada a objetos en Java. Aunque se supone que los alumnos conocen la programación orientada a objetos, los objetivos de este módulo son recordar los conceptos fundamentales en primer lugar, para centrarse posteriormente en los mecanismos más avanzados del lenguaje Java, y en particular los que introduce su última versión (8). ● ● ● ● El segundo bloque (8 horas) está formado por los módulos 7, 8 y 9 , y su objetivo es introducir los conceptos y mecanismos que proporciona el lenguaje UML para modelar a alto nivel los diferentes aspectos de un sistema (requisitos, estructura, comportamiento, despliegue…). El bloque tercero (34 horas) está dedicado a las pruebas y la calidad del software, y está compuesto por los módulos 10, 11 y 12 que se centran, respectivamente, en las pruebas unitarias, las pruebas de integración y de producto, y al estudio de la calidad del código. Se introduce el uso de herramientas como JUnit, JMockit o SonarQube para la realización de las pruebas y el control de la calidad. El cuarto bloque (4 horas) consta de un sólo módulo (13) dedicado a herramientas que normalmente se utilizan para el desarrollo industrial de software, incluyendo Git, Maven y Jenkins. Finalmente, el bloque quinto (72 horas) está compuesto por seis módulos que recorren en profundidad los aspectos fundamentales de lo que constituye la programación Web y algunas de las plataformas existentes para el desarrollo de sistemas Web, incluyendo tecnologías como JavaScript, Ajax, JSP, JSF, JPA, JPQL y Spring. También se aborda el desarrollo y despliegue de servicios web. 2. Profesores CHICANO GARCÍA, JOSÉ FRANCISCO FERNÁNDEZ BERTOA, MANUEL GUTIÉRREZ LÓPEZ, FRANCISCO Profesor Contratado Doctor. Doctor en Informática por la UMA. Ingeniero en Informática por la UMA. Licenciado en Ciencias Físicas por la UNED Profesor Contratado Doctor. Doctor en Informática por la UMA. Ingeniero de Telecomunicación por la UPM Profesor Titular de Universidad. Doctor en Informática por la UMA. Licenciado en Ciencias Exactas por la UMA GUZMAN DE LOS RISCOS, EDUARDO Profesor Titular de Universidad. Doctor en Informática por la UMA. Ingeniero en Informática por la UMA. NEBRO URBANEJA, ANTONIO Profesor Titular de Universidad. Doctor en Informática por la UMA. Ingeniero en Informática por la UMA. ORTIZ DE LAZCANO LOBATO, JUAN MIGUEL Profesor Contratado Doctor. Doctor en Informática por la UMA. Ingeniero en Informática por la UMA. RUBIO MUÑOZ, BARTOLOMÉ Profesor Titular de Universidad. Doctor en Informática por la UMA. Licenciado en Informática por la UMA VALLECILLO MORENO, ANTONIO Catedrático de Universidad. Doctor en Informática por la UMA. Licenciado en Matemáticas por la UMA Los profesores del equipo docente suman numerosos años de experiencia docente, tanto en enseñanza secundaria, universitaria reglada y no reglada. El equipo docente ha impartido con anterioridad asignaturas relacionadas con cada uno de los tópicos del temario del curso. En particular, han sido o son profesores de asignaturas de introducción a la programación, donde el lenguaje utilizado es Java; en asignaturas específicas de programación orientada a objetos y programación funcional; en asignaturas relacionadas con el modelado del software usando UML; en asignaturas centradas en las pruebas y la calidad del software; en asignaturas de metodologías de desarrollo software y gestión de herramientas para el desarrollo del software; y en asignaturas de desarrollo de aplicaciones Web usando la tecnología Java EE. 3. Temario detallado del curso Bloque 1. Programación en Java (28 horas) Módulo 1. Introducción a Java (2 horas) 1.1. Tipos Básicos de Datos 1.2. Entrada/Salida Básicas 1.3. Estructuras de Control 1.4. Cadenas de caracteres 1.5. Arrays Módulo 2. Programación Orientada a Objetos (4 horas) 2.1. Clases y Objetos 2.2. Métodos y Mensajes 2.3. Herencia, Polimorfismo y Vinculación Dinámica 2.4. Clases Abstractas e Interfaces 2.5. Anotaciones Módulo 3. Tratamiento de Errores. Excepciones (2 horas) 3.1. Concepto de Excepciones 3.2. Tratamiento de Excepciones Módulo 4. Clases Básicas (4 horas) 4.1. Paquete java.lang 4.2. Paquete java.util 4.3. Paquete java.io Módulo 5. Colecciones (8 horas) 5.1. Genericidad 5.2. Colecciones y Correspondencias 5.3. Clases Ordenables 5.4. Colecciones y Correspondencias ordenadas Módulo 6. Programación Funcional en Java (8 horas) 6.1. Interfaces Funcionales. Expresiones Lambda 6.2. Streams. 6.3. Creación y Manipulación de Streams 6.4. Spliterator Bloque 2. Modelado UML (8 horas) Módulo 7. 7.1. 7.2. Módulo 8. 8.1. 8.2. 8.3. Módulo 9. 9.1. 9.2. Modelado de la estructura de un sistema (4 horas) Diagramas de clases Diagramas de componentes Modelado del comportamiento de un sistema (2 horas) Diagramas de estado Diagramas de secuencia Diagramas de actividades Modelado de otros aspectos (2 hora) Diagramas de casos de uso Diagramas de despliegue Bloque 3. Pruebas y calidad (34 horas) Módulo 10. Pruebas unitarias (12 horas) 10.1. Introducción a las pruebas del software 10.2. Desarrollo dirigido por pruebas (TDD) 10.3. Pruebas unitarias en Java: JUnit 10.4. Pruebas usando mocking con JMockit Módulo 11. Pruebas de integración y de producto (12 horas) 11.1. Pruebas de integración 11.2. Pruebas de sistema y aceptación Módulo 12. Calidad de código (10 horas) 12.1. ¿Por qué es importante la calidad en el código? 12.2. Calidad y Clean Code 12.3. Refactorización de código 12.4. Herramientas de control de calidad: SonarQube Bloque 4. DevOps (4 horas) Módulo 13. Herramientas para el desarrollo de software (4 horas) 13.1. Gestión de código fuente con GIT 13.2. Construcción del código con Maven 13.3. Integración contínua en Jenkins Bloque 5. Programación web y plataforma Java EE (72 horas) Módulo 14. Introducción al desarrollo de aplicaciones Web (4 horas) 14.1. La Web 14.2. HyperText Transfer Protocol (HTTP) 14.3. Arquitectura de aplicaciones Web 14.4. Servidores de aplicaciones 14.5. Configuración de las herramientas y el servidor Módulo 15. Tecnologías en el lado del cliente (16 horas) 15.1. HyperText Markup Language (HTML) 15.2. eXtensible Markup Language (XML) 15.3. Cascading Style Sheets (CSS) 15.4. Javascript 15.5. JavaScript Object Notation (JSON) 15.6. Ajax Módulo 16. Java EE: capa de presentación (20 horas) 16.1. Servlets 16.2. JavaServer Pages (JSP) 16.3. Expression Language (EL) 16.4. JavaServer Pages Standard Tag Library (JSTL) 16.5. JavaServer Faces (JSF) 16.6. Pruebas de aplicaciones Web con Selenium HQ Módulo 17. Java EE: capa de persistencia (12 horas) 17.1. Bases de datos relacionales 17.2. Java Persistence API (JPA) 17.3. Java Persistence Query Language (JPQL) Módulo 18. Spring (12 horas) 18.1. Spring Framework 18.2. Spring MVC 18.3. Spring MVC + JPA 18.4. Pruebas en Spring MVC Módulo 19. Servicios Web (8 horas) 19.1. Arquitecturas orientadas a servicios (SOA) 19.2. Servicios Web 19.3. Representational State Transfer (REST) 19.4. Servicios RESTful en Spring 4. Objetivos por bloque temático Bloque 1. Programación en Java ● ● ● ● ● ● ● ● ● ● ● Repasar los tipos básicos de datos en Java Repasar las estructuras de control de flujo de Java Repasar los conceptos de programación orientada a objetos Repasar la sintaxis de Java para definir clases, interfaces y sus miembros Comprender y aplicar el tratamiento de excepciones en Java Conocer las clases básicas de los paquetes java.lang, java.util y java.io. Comprender la genericidad en Java Saber desarrollar clases genéricas Conocer las colecciones de la biblioteca estándar de Java Comprender los conceptos básicos de programación funcional en Java Saber utilizar los streams y las expresiones lambda en Java Bloque 2. Modelado UML ● ● ● ● ● Comprender el papel y la importancia del modelado de software Conocer los diagramas estructurales de UML (clases y componentes) y saber realizarlos Conocer los diagramas de comportamiento de UML (estado, secuencia y actividades) y saber realizarlos Conocer los diagramas de casos de uso y saber realizarlos Conocer los diagramas de despliegue y saber realizarlos Bloque 3. Pruebas y calidad ● ● ● ● ● ● ● ● ● ● ● ● Comprender la importancia de las pruebas del software Conocer los distintos tipos de pruebas existentes Conocer el desarrollo dirigido por pruebas Saber implementar pruebas unitarias usando JUnit Saber usar JMockit para crear objetos mock Comprender el objetivo de las pruebas de integración y saber realizarlas Comprender el objetivo de las pruebas de sistemas y saber realizarlas Comprender el objetivo de las pruebas de aceptación y saber realizarlas Comprender la importancia de la calidad del código fuente Conocer buenas prácticas de implementación para mejorar la calidad del código Comprender el concepto de refactorización y saber aplicarlo para mejorar la calidad del código Conocer métricas para medir la calidad del código y herramientas para medir de forma automática la calidad (SonarQube) Bloque 4. DevOps ● Conocer las fases por las que pasa el código desde su implementación hasta su despliegue ● ● ● ● Comprender los gestores de código fuente y saber utilizar GIT Saber utilizar Maven para construir un proyecto Java Comprender el concepto de integración contínua y saber utilizar Jenkins Comprender el concepto de entrega contínua y saber ponerlo en práctica usando Jenkins Bloque 5. Programación web y plataforma Java EE ● Comprender el funcionamiento de la Web y el protocolo HTTP ● Conocer la arquitectura en capas de las aplicaciones Web ● Conocer el objetivo de los servidores de aplicaciones y saber configurar Wildfly ● Saber escribir páginas en HTML y XHTML ● Saber interpretar y escribir los ficheros XML ● Saber escribir hojas de estilo CSS ● Introducir los conceptos básicos de programación en Javascript ● Saber interpretar y escribir documentos JSON ● Conocer los principios de funcionamiento de Ajax y saber aplicarlos ● Saber desarrollar servlets y JavaServer Pages ● Saber crear expresiones en lenguaje EL ● Conocer la biblioteca de etiquetas JSTL y saber utilizarla ● Introducir el framework JavaServer Faces ● Saber desarrollar pruebas de sistemas para aplicaciones Web usando Selenium HQ ● Comprender el mapeo objeto-relacional ● Saber utilizar Java Persistence API para aplicar el mapeo objeto-relacional en Java ● Conocer el lenguaje de consultas JPQL ● Introducir el framework Spring ● Saber desarrollar aplicaciones Web usando Spring MVC ● Saber combinar la tecnología Spring MVC con la tecnología JPA ● Saber desarrollar pruebas de aplicaciones Web en Spring MVC ● Comprender la arquitectura orientada a servicios ● Comprender el concepto de servicio Web ● Conocer los principios REST y los servicios Web REST ● Saber implementar servicios Web REST usando Spring 5. Metodología de impartición El curso se plantea de una forma eminentemente práctica, donde todas las clases se impartirán en laboratorios de programación y los alumnos podrán practicar de primera mano con los conceptos, mecanismos y herramientas que se introducen en el curso. Todas las actividades tienen como objetivo principal el de potenciar el aprendizaje de los alumnos, facilitando la adquisición de cuantos conocimientos y competencias precise. Por ello, dependiendo del tipo de contenidos de los diferentes módulos formativos los métodos a utilizar variarán: expositivo, por descubrimiento, interactivo, enseñanza programada, trabajo autónomo, metodología participativa, etc. Al comenzar cada módulo del curso, el alumno dispondrá de todo el material del mismo. Se incluirán las transparencias presentadas en clase como guión de los conocimientos a adquirir, para facilitar su seguimiento. Se proporcionarán enunciados con ejercicios, así como toda la documentación que se considere necesaria relativas a la contenidos formativos. Los enunciados de las prácticas también estarán disponibles en cada módulo, así como hojas de ejercicios para trabajo personal de los estudiantes. A continuación se detallan los diferentes métodos docentes que se emplearán a lo largo del curso: ● Clases magistrales: se utilizarán para exponer la teoría básica del programa en cada uno de los temas que se vayan a tocar. ● Prácticas: se utilizarán para asentar los conocimientos teóricos adquiridos. El trabajo práctico será propuesto por el profesor sobre la materia estudiada. Estos trabajos deberán completarse en el aula. El trabajo realizado por cada alumno será revisado y valorado por el profesor, tanto en contenidos como en presentación, pudiendo ser requeridas de los alumnos cuantas explicaciones se consideren oportunas. Los contenidos se desarrollarán en el aula (clase magistral más prácticas en aula), resolviendo supuestos teórico/prácticos. Cada sesión constará de explicaciones teóricas intercaladas con actividades prácticas. Durante la parte teórica se introducirán los conceptos clave y se presentarán los elementos tecnológicos más relevantes de cada tema, y durante la parte práctica se aplicarán estos conceptos a través de una serie de ejercicios propuestos. 6. Evaluación Instrumentos de evaluación La calificación final del curso se hará en base a una serie de pruebas (tests) de evaluación. Con independencia de estas pruebas, dentro de cada módulo se podrán definir una serie de prácticas de laboratorio que los alumnos deberán realizar de forma individual o en grupos (dependiendo de la práctica) y que deberán entregar al equipo docente para su evaluación. El equipo docente, a la mayor brevedad posible realizará una evaluación formativa (sin peso en la calificación final) de dichas prácticas y la hará disponible para el alumno, con el objetivo de que sepa qué aspectos debe mejorar. Las pruebas de evaluación con influencia en la calificación podrán estar basadas en los ejercicios prácticos que se realicen durante el curso en el aula. Momentos en los que se realizará la evaluación Las pruebas con peso en la calificación se realizarán a mitad y al final del curso. El resto de instrumentos de evaluación serán utilizados durante todo el proceso formativo a modo de evaluación continua. Responsables de la evaluación La responsabilidad de la evaluación recaerá principalmente en los profesores que serán los encargados de la revisión de los trabajos prácticos, si bien, los alumnos deberán responsabilizarse de los ejercicios generales que se resuelvan en clases prácticas a modo de autoevaluación. 7. Cronograma L M X J V 17/10/2016 B1 B1 B1 B1 B1 24/10/2016 B1 B1 B2 B2 B3 Festivo B3 B3 B3 31/10/2016 No hay clase 7/11/2016 B3 B3 B3 B3 B3+T 14/11/2016 B4 B5 B5 B5 B5 21/11/2016 B5 B5 B5 B5 B5 28/11/2016 B5 B5 B5 B5 B5 Festivo No hay clase Festivo No hay clase B5 B5 B5 T 5/12/2016 No hay clase 12/12/2016 B5 Leyenda B1 Bloque 1: Programación en Java B2 Bloque 2: Modelado UML B3 Bloque 3: Pruebas y calidad B4 Bloque 4: DevOps B5 Bloque 5: Programación web y plataforma Java EE T Pruebas de conocimiento calificativas