Skip to content

1. Introducción

1.1. Contexte

El PDF del documento se puede encontrar |AQUÍ|.

Los ejemplos del documento están disponibles |AQUÍ|.

Este documento es a la vez un curso y un TD (Trabajo Dirigido) universitario. Está dirigido a principiantes. Utiliza las siguientes fuentes:

Referencias:

  1. Introducción al lenguaje Java (1998);
  1. Cómo trabajar con una base de datos relacional utilizando el ecosistema Spring (2015);

Denominaremos a estas referencias, respectivamente, [ref1] y [ref2]. La fuente [ref1] es antigua (2002), pero suficiente para este documento, donde solo se utiliza para presentar la sintaxis del lenguaje Java y sus operaciones básicas. El resto de la información necesaria para la realización de TD se presenta en este documento en capítulos titulados [Cours]. Estos capítulos provienen directamente de [ref2] (2015) y, en algunos casos, se han simplificado.

El objetivo de este documento es enseñar el lenguaje Java desde una perspectiva profesional. Por esta razón, nos basamos en gran medida en el marco Spring [https://spring.io/], ampliamente utilizado en el desarrollo JEE (Java Enterprise Edition). Lógicamente, este curso debería ir seguido de un curso de JEE. Así es en Istia (Universidad de Angers). JEE es la principal fuente de empleo actualmente (noviembre de 2015) para los jóvenes desarrolladores con título de maestría. Existen muchas otras tecnologías además de Spring en el mundo de JEE. Spring tiene la ventaja de ser comprensible y, sobre todo, de aportar buenas prácticas de programación que se pueden reutilizar fuera del ecosistema de Spring. Esto explica por qué se eligió aquí.

Este TD se utiliza desde hace más de 10 años y ha evolucionado con las tecnologías. Le siguen (en orden) un IstiA, un TD, un JEE y un [Introduction à Java EE]. Este último, el TD, data de 2012 (estamos en 2015) y merecería una actualización. Presenta la ortodoxia JEE a través del marco de trabajo web JSF2 (Java Server Faces) y los EJB3 (Enterprise Java Bean). En conjunto, estos dos TD han permitido a muchos estudiantes conseguir prácticas JEE en ESN (empresas de servicios digitales) y ser contratados allí de inmediato.

En este documento no encontrarás una presentación formal de todas las facetas de Java. Con el paso de los años, la forma en que los desarrolladores junior abordan un problema ha cambiado mucho. Ahora, casi siempre recurren a Internet para encontrar fragmentos de código que, al unirlos, forman un programa. Si se les ofrece un curso, lo utilizan muy poco y prefieren volver a recurrir a Internet. Aunque al principio tenía mis dudas sobre esta forma de trabajar, me sorprendieron los resultados obtenidos. Así, incluso los estudiantes con dificultades lograban producir programas que funcionaban, mientras que sin la ayuda de Internet probablemente no lo hubieran logrado. Ahora me baso en esta forma de trabajar.

Los fragmentos de código no ofrecen una visión general de la arquitectura de una solución, y uno de los objetivos de este documento es precisamente brindar esa visión. Los estudiantes realizan este TD de la misma manera que el TP, de manera autónoma. No hay clases magistrales. Existe un cronograma que les indica el avance que se espera de ellos a lo largo de las sesiones. Pueden estar atrasados o adelantados con respecto a este cronograma. Su avance se verifica mediante una serie de evaluaciones que deben presentar al profesor. Este está presente tanto para brindarles explicaciones cuando las solicitan como para validar su trabajo. Cada uno avanza a su propio ritmo. Al final de las 36 horas asignadas a este TD, algunos habrán completado un 50 % más de validaciones que otros, pero cada uno —ese es, en cualquier caso, el objetivo— habrá comprendido lo que ha hecho de manera autónoma. Este TD se puede realizar sin la supervisión de un profesor. Por eso está disponible en [https://stahe.github.io].

Este documento no es adecuado para quienes busquen un curso académico sobre Java, algo en lo que se explique Java de manera progresiva y estructurada y donde se explique y justifique cada detalle de la sintaxis. Lo que aquí se propone es más bien un enfoque experimental. Es probable que el estudiante no comprenda todo lo que se le presenta en el documento, pero seguramente sabrá aprovechar su contenido de manera adecuada, y la comprensión de los detalles vendrá con la experiencia.

Este documento tampoco es un curso de algoritmos. El algoritmo del TD es básico y puede ser resuelto por cualquier principiante que esté tomando sus primeras clases de algoritmos. El documento se centra en el entorno de desarrollo profesional en Java, con sus numerosas bibliotecas o marcos de trabajo, y en la arquitectura del código. La mayoría de los estudiantes que veo pasar presentan debilidades en algoritmos, lo cual luego confirman los tutores de prácticas. Así que sí, el dominio de los algoritmos es importante, pero no es el objetivo de este curso-TD.

Por último, este documento (diciembre de 2015) no presenta las últimas novedades de Java, en particular los streams y las funciones lambda. Sin embargo, se utilizan algunos elementos de la última versión de JDK, la JDK 1.8, y los códigos que siguen deben compilarse con esta JDK.

1.2. Contenu

El capítulo 2 presenta el tema del TD, un cálculo de resultados electorales. El problema es básico. El capítulo 2 pide implementar la solución en dos lenguajes, C# y Java, que son muy similares. La implementación se realiza sin clases. El objetivo es presentar la sintaxis de Java, sus instrucciones básicas y el IDE (Entorno de Desarrollo Integrado) Eclipse, que se utiliza para crear proyectos en Java.

El capítulo 3 pide implementar la solución del TD en Java utilizando clases. El objetivo es presentar los conceptos de clases, herencia, interfaces y clases genéricas. Se introduce el concepto de prueba unitaria JUnit.

El capítulo 4 presenta los conceptos que sirven de base para los capítulos siguientes:

  • las arquitecturas en capas;
  • la programación por interfaces;
  • el uso de Spring para implementar los dos conceptos anteriores;

Image

El capítulo 5 presenta el marco Spring con cuatro proyectos.

El capítulo 6 presenta el API JDBC, que es una interfaz de acceso a bases de datos.

El capítulo 7 implementa la capa [DAO] (Objeto de Acceso a Datos) del TD con el API JDBC y Spring.

Image

El capítulo 8 implementa la capa [métier] de TD:

Image

El capítulo 9 implementa la capa [ui] de TD con una aplicación de consola:

Image

El capítulo 10 implementa la capa [ui] de TD con una aplicación gráfica que utiliza la biblioteca de componentes Swing:

Image

Image

El capítulo 11 presenta la administración de bases de datos con el marco [Spring Data], una rama del ecosistema Spring. Presenta la especificación JPA (Java Persistence API), que permite a la capa [DAO] manipular objetos en lugar de manipular SQL (Lenguaje de Consulta Estructurado). La arquitectura en capas evoluciona de la siguiente manera:

Image

El capítulo 12 aplica lo aprendido en el capítulo 11 al implementar el acceso a la base de datos de TD mediante [Spring Data].

El capítulo 13 muestra cómo exponer una base de datos en la web con [Spring MVC], que es otra rama del ecosistema Spring. La arquitectura evoluciona hacia una arquitectura cliente/servidor:

Image

Los capítulos 14 y 15 transforman la aplicación de TD en una aplicación cliente/servidor:

Image

El capítulo 16 muestra cómo proteger el acceso a una aplicación web con [Spring Security], otra rama del ecosistema Spring.

Image

El capítulo 17 retoma el TD y protege el servicio web de elecciones.

El capítulo 18 aborda el problema de las solicitudes entre dominios:

  • en [1], una aplicación web entrega páginas HTML / JavaScript;
  • en [2], el navegador ejecuta el JavaScript integrado en las páginas HTML para consultar el servicio web seguro [3-4];

Supongamos que D1 = http://machine1:port1 es el dominio del servidor [1] y que D4 = http://machine4:port4 es el dominio del servidor [4]. Si los servidores [1] y [4] no se encuentran en el mismo dominio [D1!=D4], entonces las solicitudes de [3] a [4] se denominan solicitudes entre dominios. Debido a las restricciones de seguridad implementadas por los navegadores, su configuración puede resultar problemática. Analizaremos una solución.

El capítulo 19 implementa las solicitudes entre dominios con la aplicación de las elecciones.

1.3. Las herramientas utilizadas

Los siguientes ejemplos se han probado en el siguiente entorno:

  • equipo con Windows 10 Pro de 64 bits;
  • JDK 1.8 (párrafo 22.1);
  • IDE Spring Tool Suite 3.6.3 (párrafo 1);
  • NetBeans 8.1 (párrafo 22.4);
  • navegador Chrome (no se utilizaron otros navegadores);
  • extensión de Chrome [Advanced Rest Client] (párrafo 1);
  • WampServer, que incluye SGBD, MySQL y la herramienta [PhpMyAdmin] para administrarlo (párrafo 22.7);

Es importante utilizar un JDK 1.8. Algunos ejemplos utilizan elementos de este JDK. La mayoría de los ejemplos son proyectos Maven que pueden abrirse indistintamente con IDE, Eclipse [https://www.eclipse.org/], IntellijIDEA Community Edition, [https://www.jetbrains.com/idea/download/] y NetBeans [https://netbeans.org/]. A continuación, las capturas de pantalla provienen de la IDE Spring Tool Suite, una variante de Eclipse.

1.4. Soporte

Los proyectos de Eclipse de este documento están disponibles en el sitio [AQUÍ].

Para importar los proyectos de un capítulo, siga los pasos indicados en [1-8] con Eclipse:

La mayoría de los proyectos son proyectos de Maven. Si después de cargarlos presentan errores, ejecute [Alt-F5] y siga el procedimiento descrito en [9-10]. Los proyectos de Maven seleccionados se volverán a compilar.