Jour 1
Présentation de Java
Historique, caractéristiques, Rôle de la machine virtuelle
Déclinaisons : Java SE, Java EE, Java Embedded
Les outils fournis par le JDK
Les évolutions de Java : Java 8, Java11, Java17, Java21, Java 24
Importance des LTS (Long Term Support)
Licence Oracle et alternative avec OpenJDKTravaux pratiquesObjectif : Savoir installer le JDK, être capable de compiler et d’exécuter une application Java
Descriptif : Installation du JDK. Récupération de HelloWorld.java. Commandes de compilationOutils de développement
Les apports d’un IDE : Compilation automatique, refactoring, automatisation de tâches
Les IDEs Java les plus répandus : Eclipse, IntelliJ
Prise en main InteliJ IDEA : Plugins Java, Types de projet Java, Projet et Modules
Organisation des sources et des classes, Les modes de compilation
Exécuter une application, Configuration des exécutions
Debugging, Point d’arrêt, inspectionTravaux pratiquesObjectifs : Savoir installer et se retrouver dans Intellij IDEA
Comprendre les spécificités d’un projet Java
Savoir débugger un programme Java
Descriptif : Création d’un projet Java, Récupération de HelloWorld.java. Visualisation des propriétés du projet, répertoire de compilation, Version JDK. Exécution, exécution en mode DEBUG, breakpointJava, les fondamentaux
Types primitifs, variables, opérateurs
Branchements conditionnels, switches, boucles
Conversions de types, tableaux
Déduction du type des variables locales avec varTravaux pratiquesObjectifs : Prendre en main les bases de la syntaxe et en particulier les instructions de contrôle
Descriptif : Création de programmes simples avec mise en œuvre de variables de différents types, Calculs avec opérateurs, branchements conditionnels et boucles.Jour 2Classes, objets, relations entre objets
Packages, classes, objets, constructeurs, méthodes, spécificateurs d’accès
Cycle de vie d'un objet en mémoire, instanciation d’objet avec new
Comprendre le mot clé static
Surcharge de méthodes
Les énumérations
Relations de composition, associations, héritage
Polymorphisme, classes abstraites, interfaces, conversions entre objets
La classe Object et ses méthodes
Les classes enveloppesTravaux pratiquesObjectifs : Comprendre la POO dans Java. (Instanciation, Relations, Héritage, Interfaces)
Descriptif : Création d’une application avec classes en relation d’association, de composition, d’héritage, Mise en œuvre du polymorphisme.Les exceptions
Hiérarchie des classes d’exceptions
Exceptions contrôlées et non contrôlées
Mécanisme try-catch, rôle de finally, try-with-ressources
Propagation d’exceptions, récupération de Stack TraceTravaux pratiquesObjectifs : Distinguer exception contrôlée et non-contrôlée. Construction syntaxique de la gestion des exceptions.
Descriptif : Mise en place d’une gestion d’exceptions avec try-catch-finally dans une application. Utilisation du try-with-resources. Propagation d’exceptions contrôlées et non-contrôlées.Jour 3Déploiement d’applications
Principe du déploiement
Création/utilisation de librairies jar
Création/utilisation de jar exécutables
Les modules, les commandes jlink et jpackage du JDKTravaux pratiquesObjectif : Savoir créer un fichier jar exécutable ou non
Descriptif : Déployer une application à l’aide d’un fichier jar ordinaire puis à l’aide d’un jar exécutableLes collections et la généricité
Qu’est-ce que la généricité ? Son intérêt et son usage dans les collections
L’interface Collection, ses principales sous-interfaces : List, Set, Queue
L’interface Map
Les principales classes d’implémentation : ArrayList, HashSet, TreeSet, HashMap
Redéfinition des méthodes equals et hashCode
Parcours de collections avec itérateur, boucle for-eachTravaux PratiquesObjectif : Comprendre les différences entre les types de collection et savoir utiliser les principales implémentations.
Descriptif : Remplacement d’un tableau Java par une collection ArrayList dans un projet. Parcours des éléments. Utilisation d’un TreeSet, d’une HashMapJour 4Les flux d'entrées-sorties
Principales classes du package java.io
Distinction flux d’octets, de caractères
Application aux fichiers, au réseau
Opérations de lecture/écriture sur les fichiers
Manipulation de répertoires
Bufferisation des données Sérialisation d’objets
Présentation des API du package java.nioTravaux pratiquesObjectifs : Comprendre la notion d’I/O en Java. Savoir l’appliquer à la manipulation de fichiers aux connexions réseau
Descriptif : Écriture/lecture dans un fichier texte, puis un fichier binaire. Manipulation de répertoires avec File. Désérialisation d’objets présents dans un fichier.L'accès aux bases de données avec l’API JDBC
Le modèle de JDBC, ses principes généraux
Rôle du driver
Rappels sur les bases de données relationnelles et SQL
Correspondance entre types SQL et Java
Se connecter à un SGBD via JDBC
Exécuter des requêtes de sélection, de mise à jour
L’utilisation des PreparedStatement
Concepts de transaction, délimiter une transaction via JDBC
Notion de pool de connexionsTravaux pratiquesObjectifs : Être capable de charger un pilote JDBC, d’exécuter des ordres SQL et d’exploiter les réponses, comprendre les propriétés ACID d’une transaction
Descriptif : Mise en place du Driver PostgreSQL dans Eclipse. Ecriture d’une classe DAO offrant les opérations CRUD sur un objet du domaine Simple. Ecriture d’un Main faisant usage de la classe DAO.Jour 5Expressions Lambda, références de méthodes
Comprendre les principes de la programmation fonctionnelle
Syntaxe des classes internes anonymes
Notion d’interface fonctionnelle
Anatomie d'une expression Lambda
Simplifier les expressions lambdas avec les références de méthodes
Mise en œuvre des interfaces fonctionnelles : Consumer, Supplier, Predicate, FunctionTravaux pratiquesObjectif : Comprendre l’intérêt des expressions lambda pour le développeur
Description : Remplacement de classes internes anonymes par des expressions lambda. Mise en œuvre d’interfaces fonctionnelles de la bibliothèque. Simplification d’expressions lambdas par des références de méthodesIntroduction à l’API Stream pour la manipulation de flux de données
Objectif de l’API Stream
Obtention et sortie d’un stream
Opérations intermédiaires et terminales
Mise en œuvre des méthodes forEach, map, filter, findFirst
Principe de l’évaluation paresseuse (lazy)
Intérêt de la classe Optional
Spécificités des traitements Big DataTravaux pratiquesObjectif : Comprendre l’intérêt de l’API Stream pour le développeur
Description : Utilisation de streams séquentiels sur tableaux et collectionsTour d’horizon des évolutions ou nouveautés importantes de Java
Les modules : rôle et principe
Nouvelle syntaxe du switch
Les blocs de texte
Pattern matching avec instanceof
Les records
Les classes et interfaces scellées
Bibliothèques Java pour l’IA et le Machine Learning
Interopérabilité avec les outils PythonTravaux pratiquesObjectif : Comprendre les apports pour le développeur Java des principales nouveautés
Description : Sur la base d’un programme Java un peu « ancien » de gestion de commandes simplifiée nous montrons comment le « nettoyer » et le moderniser syntaxiquement. Il fait ainsi office de référence de ce qu’il faut retenir pour générer par exemple du JSON ou du HTML plus proprement, gérer les données avec des structures plsu riches et rappeler l’intérêt des branches Git pour faire cohabiter plusieurs versions de Java pour une même application.