:: Enseignements :: Master :: M1 :: 2024-2025 :: Java Avancé ::
[LOGO]

Java Avancé


Responsable

Remi Forax -- www -- @
Le cours

Chargés de TD

Remi Forax -- www -- @
Carine Pivoteau -- www -- @
Pablo Rotondo -- www -- @



L'exam (session 2) !

Le projet !

Sujets de TP

Les TPs sont à rendre sur la plateforme elearning le vendredi soir (exceptionnellement dimanche soir pour le TP1) de la semaine qui suit le cours.

Compte-rendu de TP

Les sources et un compte rendu de TP doit être rendu le jeudi soir suivant le TP.
Le compte rendu de TP doit être au format Markdown, doit indiquer votre nom et doit pour chaque exercice rappeler les questions avant d'y répondre (même s'il n'y a pas de "?" c'est une question quand même). Vous pouvez rédiger le compte rendu en français ou en anglais à votre convenance.
Si vous n'avez pas eu le temps de finir un TP avant la fin de la séance, vous devez le finir (hormis les questions marquées comme optionnelles). Si un TP n'est pas fini ou pas rendu dans les temps, la note est zéro.
Les sources Java doit être indentées proprement ; en Java, c'est 2 espaces pas 4, et pas de tabulation, l'accolade ouvrante en fin de ligne et l'accolade fermante en début de ligne. Pour cela, configurer votre éditeur correctement. Les identifiants doivent être en anglais. Le code doit compiler et faire ce qui est demandé.
Note: le but n'est pas uniquement que le code marche, mais qu'il soit beau. Il faut que vous soyez content du code que vous écrivez, si vous avez une solution en 20 lignes alors que cela en nécessite 5, cela veut dire que vous n'avez pas compris.
Note 2: la plupart du code disponible sur internet n'est pas écrit par des professionnels, surtout sur les sites francophones, donc ne recopiez pas bêtement du code sans l'avoir compris et vous êtes demandés si vraiment s'il n'y a pas plus simple. Pareil pour l'utilisation des LLMs, ceux-ci ont été entrainés sur du code que l'on trouve sur internet. Si vous voulez savoir un truc, utiliser la javadoc ou StackOverflow. Faites aussi attention à la date à laquelle un article a été publié, on ne programme pas en Java comme il y a 10 ans ou 20 ans. Le compte rendu de TP et les fichiers sources doivent être placé dans un fichier au format zip.
Si l'archive n'a pas le bon format, la note est zéro.
Les TPs doivent être rendu sur la plateforme elearning avant Vendredi soir 23h59.

Installer Java et Eclipse sur votre machine

Le JDK 23 est disponible

Eclipse 4.33 (2024-09) est disponible sur le site d'Eclipse, on va prendre la version "Eclipse for Java Developer".
https://www.eclipse.org/downloads/packages/release/2024-09/r/eclipse-ide-java-developers
Une fois Eclipse téléchargé, il faut patcher celui-ci pour ajouter le support la version 23 de Java, pour cela, aller dans Help > Install New Software ... et indiquer le site suivant https://download.eclipse.org/eclipse/updates/4.33-P-builds/ sélectionner les éléments "Eclipse Java 23 support" puis installer le patch. Il faut ensuite attendre la fin du téléchargement du patch et sélectionner tout et valider. Et enfin redémarrer.

Enfin ajouter le JDK 23 comme JDK par défaut pour Eclipse dans Window > Preferences > Java > Installed JREs, appuyer sur "Add..." et indiquer le répertoire jdk-23 et cliquer sur la case à cocher devant pour qu'il devienne le JDK par défaut.
Puis, pour vérifier que l'installation est complète, dans le menu Window > Preferences > Java > Compiler, sélectionner "Java 23" comme version pour le compilateur.

Références


Cours

  • Tous les pdf
  • Concepts de programmation en Java
  • Les lambdas.
    Interface Fonctionnelle. Package java.util.function. Operateur :: (method reference). Inférence du type des paramétrés. Capture de la valeur des variables locales. Capture de this. Lambdas dans les collections. Comparateurs. java.util.stream.Stream. Opérations intermédiaires/finales. Streams de types primitifs. API des Collectors.
  • Classes Internes et Énumération
    Classe interne (statique ou inner class). Classe locale. Classe anonyme. Relation avec les lambdas. Type énuméré. Méthodes ordinal, name, values,...
  • Pattern Matching
    Switch. Relation avec instanceof. Guards. Total Pattern. Switch expression. Relation avec le polymorphisme. Déstructuration lors de l'assignation.
  • Les Exceptions
    Stacktrace. Lire la doc. Lancer une exception. Reprendre sur l'erreur (catch). Multi catch. Créer les exceptions. Chaîner les exceptions. Checked Exceptions. Hiérarchie des Throwable. La directive throws. Tunneling d'exception. Throws ou catch ? Exceptions et entrées/sorties. Bloc finally. try-with-ressources. Programmation par contrat.
  • Types paramétrés et Types paramétrés et méthodes paramétrées
    Déclaration d'un type paramétré. Méthodes paramétrées. Variable de type et static. Borne d'une variable de type. Types primitifs. Inférence. Erasure. Tableaux de types paramétrés. Varargs. Legacy Code et Générification. Covariance des types paramétrés. Contravariance. Règles PECS. Wildcard non borné (?). Wildcard et capture.
  • Collections
    Types abstraits. Interface vs. Implantation. Constructeurs. Contrat sur les éléments/clés. null ? Vues. Interface et Mutations. Encapsulation. Parcours interne (forEach) vs. externe (iterator). Iterable. Modification structurelle. Classes implantant List/Map/Set. Écrire sa propre implantation à partir de AbstractList/Map/Set. Contrats des interfaces. Liens avec les tableaux. Ordre. Comparator. Class Legacy (Interfaces/Classes peu utilisées ou démodées).
  • Stream et Optional
    Sources d'un Stream. Ré-utilisation. Parcourt et modifications. L'API des Streams. Opérations intermédiaires ou terminales. Streams de type primitif. Stream parallèle. API Collector. java.util.stream.Collectors. Spliterator. Optional. Créer un Optional. API. Optional et calcul. Stockage d'un Optional.
  • Modules, Packaging
  • Reflection et Annotations
    java.lang.Class. Classe et new. getClass() vs instanceof. API de reflection. Exceptions. Enum, Record et Classes internes/locales. Efficacité : Cache. Annotations.
  • Entrées/sorties
    Path. java.nio.file.Files. Flux binaire / Flux de caractères. Bufferisation. Ressources Système. try/finally. try-with-ressources. Le try() et les Buffered*. Liens avec les Streams. Encodage et Charset. Readers. Writers. Console. Entrée standard et console. Accès direct aux données d'un fichier (FileChannel). Serialization. Legacy.
  • Opérations Vectorisées
    Vecteur et mémoire. API : jdk.incubator.vector. VectorSpecies. VectorMask. Opérations Lanewise. Reduce en ligne. Lire/écrire dans un tableau. postLoop vs. mask. Performance.
  • Garbage Collectors
  • Gatherers