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+
Importance des LTS (Long Term Support)
Licence Oracle et alternative avec OpenJDKTravaux Pratiques :Objectifs : Savoir installer le JDK, être capable de compiler et d’exécuter une application Java
Description : Installation du JDK 11. 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 d’Eclipse : Notion de perspective, de Vue, Préférences, MarketPlace
Créer un projet dans Eclipse. Organisation des sources et des classes
Exécuter une application, Configuration des exécutions
Debugging : La perspective de DebugTravaux Pratiques :Objectifs : Savoir installer et se retrouver dans Eclipse, Comprendre les spécificités d’un projet Java, Savoir Debugger un programme Java
Description : 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, fondamentaux
Types primitifs, variables, opérateurs
Branchements conditionnels, switches, boucles
Conversions de types, tableaux
Déduction du type des variables locales avec varTravaux Pratiques :Objectifs : Prendre en main les bases de la syntaxe et en particulier les instructions de contrôle
Description : Création de programmes simples avec mise en œuvre de variables de différents types, Calculs avec opérateurs, branchements conditionnels et boucles.Classes, 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 Pratiques :Objectifs : Comprendre la POO dans Java. (Instanciation, Relations, Héritage, Interfaces)
Description : 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 Pratiques :Objectifs : Distinguer exception contrôlée et non-contrôlée. Construction syntaxique de la gestion des exceptions.
Description : 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.Déploiement d’applications
Principe du déploiement
Création/utilisation de librairies jar
Création/utilisation de jar exécutables
Les commandes jlink et jpackage du JDKTravaux Pratiques :Objectifs : Savoir créer un fichier jar exécutable ou non
Description : 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 Pratiques :Objectifs : Comprendre les différences entre les types de collection et savoir utiliser les principales implémentations.
Description : Remplacement d’un tableau Java par une collection ArrayList dans un projet. Parcours des éléments. Utilisation d’un TreeSet, d’une HashMapLes 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 Pratiques :Objectifs : Comprendre la notion d’I/O en Java. Savoir l’appliquer à la manipulation de fichiers aux connexions réseau
Description : É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 : Etre 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
Description : 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.Expressions 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 Pratiques :Objectifs : 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 Pratiques :Objectifs : 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 nouveautés importantes de Java 11 à Java 17
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éesTravaux PratiquesObjectifs : Savoir dans quels cas utiliser les différents éléments présentés dans ce chapitre
Description : Quizz de validation et exemples de code commentés par le formateurFonctionnement de la JVM (Java Virtual Machine)
Le modèle de sécurité de Java
Chargement des classes, rôle du Bootstrap Class Loader
Mettre en œuvre son propre class loader
Vérification de la structure d’un fichier .class par le class-file verifier
Gestion de la mémoire, les différents garbage collectors
Origines du Out Of Memory Error
Utilisation de l’outil visualvm
Principe et rôle d’un Security Manager
Format des fichiers .policyTravaux pratiquesObservation via Visualvm des cycles d'allocation/désallocation des objets et des performances associées,
la détection de deadlocks
Mise en œuvre d’un SecurityManager pour protéger l’accès aux fichiers du systèmeClasses internes, Généricité, Annotations
Classes internes static, membre, locale, anonyme
Accès aux membres, création d’instances
Passage de paramètres génériques aux méthodes
Méthodes génériques
Principe et rôle d’une annotation
Attributs obligatoires et optionnels
Cibles d’une annotation
Annotations personnalisées
Annotations multiplesTravaux pratiquesMise en œuvre de classes internes, méthodes génériques, annotations personnalisées dans une petite applicationProgrammation parallèle
Concepts et spécificités du multithreading par rapport à la programmation « traditionnelle »
États d'un thread
Synchronisation des threads
Intérêt du pattern Immutable
Gestion des mutex avec les interfaces Lock et Condition
Pools de threads
Les apports du framework Executor (invocation, ordonnancement, exécution, contrôle)
Le package java.util.concurrent
Les classes Atomic, les collections concurrentesTravaux pratiquesÉcriture d’une application client/serveur en Java
Correction d’une corruption de données dans une applicationL'accès aux bases de données
Historique de l'accès aux données en Java, présentation de JDBC
Correspondance entre types SQL et Java
Rôle du driver
L'API JDBC, Connection, Statement, ResultSet
Requêtes paramétrées avec PreparedStatement
Appel de procédure stockées avec CallableStatement
Utilisation de l’API RowSet
Gestion des transactions
Notion de pool de connexions
Problématique de l'ORM et introduction à JPATravaux pratiquesMise en œuvre des API JDBC pour le développement d’un DAO (Data Access Object)Accès complet au système de gestion de fichiers avec Nio.2
Les nouvelles classes java.nio.file.Files et java.nio.file.Path
Gestion des liens symboliques
Manipulation de chemins, parcours de répertoires et d'arborescences
Accès aux attributs d'un fichier
Notification des changements dans un répertoire
Gestion des archives Jar/zip
Entrées/sorties asynchronesTravaux pratiques Parcours d’arborescences pour copie/suppression de fichiers
Synchronisation de répertoires entre arborescencesExpressions 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, Function
Gestion des exceptionsTravaux pratiquesRemplacement 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éthodesMise en œuvre de 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
Intérêt de la la classe Optional
Réductions avec reduce et collect
Interface Collector et classe Collectors
Autres méthodes : limit, skip, sorted, min, max, distinct, allMatch, anyMatch, noneMatch, count
Streams sur fichiers et répertoires
Streams parallèles, précautions d’usageTravaux pratiquesUtilisation de nombreux streams séquentiels et parallèles sur tableaux et collections
Comparaison de performances entre streams séquentiels et parallèlesLe système de modules
Principe et intérêt des modules
Format du descripteur de module : les directives
Utilisation des modules
Gestion des dépendances entre modules, la commande jdeps
Intérêt du module-path
Notions de modules anonymes et modules automatiques
Mise en œuvre de services
Modularité du JDK
Nouvelle organisation de la documentation des API Java
Fichiers jar modulaires
Problématique des migrations : approches bottom-up et top-downTravaux pratiquesDécoupage d'une application en modules
Mise en œuvre de modules anonymes et automatiques
Mise en œuvre de services
Migration d'une application avec mise en oeuvre des modulesAutres nouveautés de Java 11 à 17
Évolution du switch
Blocs de texte
Rôle et intérêt des records
Classes et interfaces scellées
La commande jlink
La commande jpackageIntroduction à l’outil Maven et aux frameworks JUnit, Hibernate, Spring
Rôle et intérêt de Maven
Structure d’un projet Maven
Constitution d’un POM
Résolution des dépendances
Comparaison framework/librairie
Présentation de JUnit pour les tests unitaires
Présentation de Hibernate/JPA pour l’accès aux bases de données relationnelles
Présentation de Spring pour l’injection de dépendancesTravaux pratiquesCréation d’un projet Maven faisant appel aux API SpringDébugging d’applications
Rôle du débugging
Présentation de l’outil de débugging dans l’IDE
Notions de breakpoint, conditional breakpoint, watchpoint, step filtering
Exécution en pas à pas, observation des variables, modification
Suspension et reprise de l’exécution d’un threadTravaux pratiquesRecherche et correction de bugs dans une application fournie