Upload
alphorm
View
8.476
Download
12
Embed Size (px)
Citation preview
29/10/2015
1
Formation Java8
Formation Les nouveautés Java 8 alphorm.com™©
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
2
Plan
• Présentation de votre formateur
• Qu’est ce que c’est Java8 ?
• Présentation de votre formation
• Le plan de la formation
Formation Les nouveautés Java 8 alphorm.com™©
• Publics concernés
• Prérequis de la formation
29/10/2015
3
Présentation du formateur• Fabien Brissonneau
• Email : [email protected]
• Consultant Concepteur et Formateur
• Missions d’architecture, de conception , de réalisation logicielles
• Fondateur de eiXa6
Formation Les nouveautés Java 8 alphorm.com™©
• Actuellement en mission sur un projet de gestion
• Mes références :
� Mon profil Viadeo : http://fr.viadeo.com/fr/profile/fabien.brissonneau
� Mon profil LinkedIn : http://fr.linkedin.com/pub/fabien-brissonneau/65/902/92a/
� Mon profil Alphorm : http://www.alphorm.com/formateur/fabien-brissonneau
29/10/2015
4
Mes formations sur alphorm
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
5
Qu’est-ce que Java8?
• La nouvelle version de Java8 sortie en 2014
• Une révolution dans la syntaxe
• L’apparition de nouveau concepts
• Une nouvelle façon de programmer en Java ?
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
6
Plan de la formation
• La nouvelle syntaxe
• Les interfaces fonctionnelles
• Le langage
• Les streams
• Les collections
• Les outils
• JavaFX
Formation Les nouveautés Java 8 alphorm.com™©
• Les dates et l’internationalisation
• Concurrence et réseau
29/10/2015
7
Publics concernés
• Cette formation s’adresse à des développeurs
• Connaître Java est nécessaire, ne pas être dérouté par sa syntaxe
• Nous ne reviendrons pas sur les concepts du langage
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
8
Prérequis de la formation
• Savoir lire du code Java
• Avoir des rudiments sur les interfaces graphiques
• Et … du courage comme toujours !
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
9
Les outils nécessaires
• Le SDK Java8
• L’outil Netbeans est utilisé en interface de développement
• La présentation sera faite sous Windows 8
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
10
Les autres formations dév sur Alphorm
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
11
Are you ready ? ☺
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
12
Expressions lambdas
La nouvelle syntaxe
Formation Les nouveautés Java 8 alphorm.com™©
Expressions lambdas
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
13
Plan
• La syntaxe des expressions lambdas
• Usage des expressions lambdas
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
14
La syntaxe des expressions lambdas
• La liste des paramètres
� Le type est optionnel
� Les parenthèses peuvent être omises
• La ->
• Le corps de la fonction
Formation Les nouveautés Java 8 alphorm.com™©
• Le corps de la fonction
� Sans {} s’il y a une seule expression
� Avec {} sinon
29/10/2015
15
Usage des expressions lambdas
• Le besoin d’expressions courtes
• L’expression de prédicat
� Une fonction courte qui retourne true ou false
• La fourniture d’un consommateur
Formation Les nouveautés Java 8 alphorm.com™©
� Une fonction qui accept une donnée
29/10/2015
16
Ce qu’on a couvert
• La syntaxe des expressions lambdas
• Usage des expressions lambdas
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
17
EL et classes
La nouvelle syntaxe
Formation Les nouveautés Java 8 alphorm.com™©
EL et classes anonymes
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
18
Plan
• Créer une fonction de rappel
• Créer une classe anonyme
• Utiliser une expression lambda
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
19
Créer une fonction de rappel
• En Java, on ne peut pas créer une fonction en dehors d’une classe
• Parfois, nous avons besoin du seul traitement
• Il faut créer alors une classe pour profiter de ses seules fonctions
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
20
Créer une classe anomyne
• Une classe anonyme est une classe interne
• Nous nous débarrassons de l’obligation de déclarer une classe
• La classe anonyme a un accès privilégié à la classe englobante
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
21
Utiliser une expression lambda
• La plus courte des expressions
• Pas de classe à déclarer
• Focalisée sur le traitement à mettre en place
• Correspond à une interface à une seule méthode
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
22
Ce qu’on a couvert
• Créer une fonction de rappel
• Créer une classe anonyme
• Utiliser une expression lambda
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
23
Les limites des
La nouvelle syntaxe
Formation Les nouveautés Java 8 alphorm.com™©
Les limites des expressions lambdas
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
24
Plan
• Les variables locales
• Les captures
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
25
Les variables locales
• Les variables d’une expression lambda n’ont pas d’espace propre
• Les collisions sont donc fréquentes
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
26
Les captures
• Une expression lambda accède
• Aux variables locales
• Aux variables attributs de la classe
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
27
Ce qu’on a couvert
• Les variables locales
• Les captures
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
28
Les méthodes par
La nouvelle syntaxe
Formation Les nouveautés Java 8 alphorm.com™©
Les méthodes par défaut des interfaces
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
29
Plan
• Les problèmes
• Les méthodes par défaut
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
30
Les problèmes
• Une interface peut déclarer plusieurs méthodes
• Une classe qui implémente une interface doit fournir un corps de méthode pour chaque méthode de l’interface
• Une interface propose parfois des méthodes qui n’intéressent pas la classe fille
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
31
Les méthodes par défaut
• Une implémentation fournit dans l’interface
• Pas obligatoire de la redéfinir
• Devrait correspondre à un traitement vrai pour toutes les implémentations de cette interface
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
32
Ce qu’on a couvert
• Les problèmes
• Les méthodes par défaut
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
33
Les références de
La nouvelle syntaxe
Formation Les nouveautés Java 8 alphorm.com™©
Les références de méthodes
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
34
Plan
• Le problème
• La solution nouvelle
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
35
Le problème
• En Java, les adresses de variables ou de fonctions ne sont pas manipulables
• Avant la version 8, les méthodes ne sont donc pas référençables
� Contrairement aux objets, instanciés
• Pour déclencher une méthode particulière, il faut référencer un objet
Formation Les nouveautés Java 8 alphorm.com™©
• Pour déclencher une méthode particulière, il faut référencer un objet
• D’où l’obligation de fournir un objet pour déclencher dessus une méthode
29/10/2015
36
La solution nouvelle
• Il est possible de référencer une méthode
• Conforme à une signature particulière
• Peut être une méthode d’instance ou une méthode statique
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
37
Ce qu’on a couvert
• Le problème
• La solution nouvelle
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
38
Les SAM
Les interfaces fonctionnelles
Formation Les nouveautés Java 8 alphorm.com™©
Les SAM
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
39
Plan
• Définition
• Exemples de SAM
• Les SAM et les expressions lambdas
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
40
Définition
• Single Abstract Method
• Une interface avec une seule méthode déclarée
• Une interface qui existe POUR cette méthode
• Lorsqu’on l’utilise, on cherche essentiellement à traiter la méthode
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
41
Exemple de SAM
• Les interfaces à une seule méthode existent en nombre en Java
• Pour l’ihm
� ActionListener : gestion du clic bouton
• Pour le tri
Formation Les nouveautés Java 8 alphorm.com™©
� Comparable : fourniture d’un ordre
• …
29/10/2015
42
Les SAM et les expressions lambdas
• Une SAM peut être avantageusement remplacée
• Pas besoin de créer une classe
• L’expression lambda se substitue à la méthode
• Doit être conforme à la signature
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
43
Ce qu’on a couvert
• Définition
• Exemples de SAM
• Les SAM et les expressions lambdas
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
44
@FunctionalInterface
Les interfaces fonctionnelles
Formation Les nouveautés Java 8 alphorm.com™©
@FunctionalInterface
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
45
Plan
• Définition
• Cas d’erreur
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
46
Définition
• Une interface fonctionnelle
� Propose une seule méthode
� Existe pour cette méthode
� Peut être utilisée via une lambda expression
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
47
Usage des interfaces fonctionnelles
• Définit une signature pour la méthode qu’elle propose
� Les types et nombres de paramètres de la méthode seront respectés
• Définit un type pour des passages de paramètres
� Un traitement peut imposer comme argument un objet conforme
• Définit un type pour des références de méthodes
Formation Les nouveautés Java 8 alphorm.com™©
• Définit un type pour des références de méthodes
� Il est possible de créer des variables références de méthodes
29/10/2015
48
Cas d’erreur
• Une interface fonctionnelle
• Possède une seule méthode et non plusieurs
• Impose les types de paramètres de sa fonction
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
49
Ce qu’on a couvert
• Définition
• Cas d’erreur
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
50
Function
Les interfaces fonctionnelles
Formation Les nouveautés Java 8 alphorm.com™©
Function
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
51
Plan
• L’interface Function<T,R>
• L’interface UnaryOperator<T>
• L’interface BiFunction<T,U,R>
• L’interface BinaryOperator<T>
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
52
L’interface Function<T,R>
• Une interface fonctionnelle
• Qui accepte un paramètre et retourne une valeur
• La méthode fonctionnelle est apply telle que : R r = apply(T t)
• Autres méthodes implémentées par défaut :
Formation Les nouveautés Java 8 alphorm.com™©
� andThen(after) : applique la fonction courante puis celle en argument
� compose(before) : applique d’abord l’argument puis la courante
� identity() : retourne l’argument
29/10/2015
53
L’interface UnaryOperator<T>
• Sous interface de Function<T,R>
• La méthode apply retourne le même type que celui du paramètre
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
54
L’interface BiFunction<T,U,R>
• Une interface fonctionnelle
• Qui accepte deux paramètres et retourne une valeur
• La méthode fonctionnelle est apply telle que : R r = apply(T t, U u)
• Autres méthodes implémentées par défaut :
Formation Les nouveautés Java 8 alphorm.com™©
� andThen(after) : applique la fonction courante puis celle en argument
29/10/2015
55
BinaryOperator<T>
• Sous interface de BiFunction<T,U,R>
• Les types T,U,R sont les mêmes
• Le type du retour est donc le même que ceux des paramètres
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
56
Ce qu’on a couvert
• L’interface Function<T,R>
• L’interface UnaryOperator<T>
• L’interface BiFunction<T,U,R>
• L’interface BinaryOperator<T>
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
57
Predicate
Les interfaces fonctionnelles
Formation Les nouveautés Java 8 alphorm.com™©
Predicate
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
58
Plan
• L’interface Predicate<T>
• L’interface BiPredicate<T,U>
• L’interface DoublePredicate
• L’interface IntPredicate
Formation Les nouveautés Java 8 alphorm.com™©
• L’interface LongPredicate
29/10/2015
59
L’interface Predicate<T>
• Représente une fonction qui prend un T
• Et retourne un booléen
• La méthode fonctionnelle est test telle que boolean b = test(T t)
• Autres méthodes avec implémentations :
Formation Les nouveautés Java 8 alphorm.com™©
� and( Predicate p) : compose avec un AND court-circuit
� negate() : retourne la négation logique
� or(Predicate p) : compose avec un OR coucrt-circuit
� isEqual(Object o) : test l’égalité
29/10/2015
60
L’interface BiPredicate<T,U>
• Interface fonctionnelle Predicate pour 2 paramètres
• La méthode fonctionnelle est test telle que boolean b = test(T t, U u)
• Autres méthodes implémentées :
� and( BiPredicate) : compose AND
Formation Les nouveautés Java 8 alphorm.com™©
� negate() : la négation logique
� or(BiPredicate) : compose OR
29/10/2015
61
L’interface DoublePredicate
• Interface fonctionnelle
• La méthode fonctionnelle est test
• Mais le paramètre est forcément un double
• Mêmes méthodes implémentées par défaut que Predicate
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
62
L’interface IntPredicate
• Interface fonctionnelle
• La méthode fonctionnelle est test
• Mais le paramètre est forcément un int
• Mêmes méthodes implémentées par défaut que Predicate
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
63
L’interface LongPredicate
• Interface fonctionnelle
• La méthode fonctionnelle est test
• Mais le paramètre est forcément un long
• Mêmes méthodes implémentées par défaut que Predicate
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
64
Ce qu’on a couvert
• L’interface Predicate<T>
• L’interface BiPredicate<T,U>
• L’interface DoublePredicate
• L’interface IntPredicate
Formation Les nouveautés Java 8 alphorm.com™©
• L’interface LongPredicate
29/10/2015
65
Supplier
Les interfaces fonctionnelles
Formation Les nouveautés Java 8 alphorm.com™©
Supplier
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
66
Plan
• L’interface Supplier<T>
• L’interface BooleanSupplier
• L’interface DoubleSupplier
• L’interface IntSupplier
Formation Les nouveautés Java 8 alphorm.com™©
• L’interface LongSupplier
29/10/2015
67
L’interface Supplier<T>
• Interface fonctionnelle typée par le résultat attendu
• La méthode fonctionnelle est get telle que T resultat = get()
• Aucune méthode supplémentaire
• Pas d’impératif sur l’unicité des productions
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
68
L’interface BooleanSupplier
• Interface fonctionnelle représentant la production de booléens
• La méthode fonctionnelle est getAsBoolean()
� Telle que : boolean b = getAsBoolean()
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
69
L’interface DoubleSupplier
• Interface fonctionnelle représentant la production de double
• La méthode fonctionnelle est getAsDouble()
� Telle que : double res = getAsDouble()
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
70
L’interface IntSupplier
• Interface fonctionnelle représentant la production de int
• La méthode fonctionnelle est getAsInt()
� Telle que : int res = getAsInt ()
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
71
L’interface LongSupplier
• Interface fonctionnelle représentant la production de long
• La méthode fonctionnelle est getAsLong()
� Telle que : long res = getAsLong()
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
72
Ce qu’on a couvert
• L’interface Supplier<T>
• L’interface BooleanSupplier
• L’interface DoubleSupplier
• L’interface IntSupplier
Formation Les nouveautés Java 8 alphorm.com™©
• L’interface LongSupplier
29/10/2015
73
Consumer
Les interfaces fonctionnelles
Formation Les nouveautés Java 8 alphorm.com™©
Consumer
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
74
Plan
• L’interface Consumer<T>
• L’interface DoubleConsumer
• L’interface IntConsumer
• L’interface LongConsumer
Formation Les nouveautés Java 8 alphorm.com™©
• L’interface ObjDoubleConsumer<T>
• L’interface ObjIntConsumer<T>
• L’interface ObjLongConsumer<T>
29/10/2015
75
L’interface Consumer<T>
• Interface fonctionnelle consommant des objets T
• La méthode fonctionnelle est accept telle que accept(T t)
• Travaille par effet de bords
• Autre méthode implémentée par défaut
Formation Les nouveautés Java 8 alphorm.com™©
� andThen(Consumer ) : compose la production en chaînant l’autre
29/10/2015
76
L’interface DoubleConsumer
• Interface spécialisée pour les double
• La méthode fonctionnelle accept(double) ne prend que double
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
77
L’interface IntConsumer
• Interface spécialisée pour les int
• La méthode fonctionnelle accept(int) ne prend que int
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
78
L’interface LongConsumer
• Interface spécialisée pour les long
• La méthode fonctionnelle accept(long) ne prend que long
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
79
L’interface ObjDoubleConsumer<T>
• Interface fonctionnelle acceptant 2 paramètres
• La méthode accept est la méthode fonctionnelle
• Avec un paramètre objet T et un double
• Est telle que accept(T t, double d)
Formation Les nouveautés Java 8 alphorm.com™©
• Pas de retour
• Travaille par effets de bords
29/10/2015
80
L’interface ObjIntConsumer<T>
• Interface fonctionnelle acceptant 2 paramètres
• La méthode accept est la méthode fonctionnelle
• Avec un paramètre objet T et un int
• Est telle que accept(T t, int d)
Formation Les nouveautés Java 8 alphorm.com™©
• Pas de retour
• Travaille par effets de bords
29/10/2015
81
L’interface ObjLongConsumer<T>
• Interface fonctionnelle acceptant 2 paramètres
• La méthode accept est la méthode fonctionnelle
• Avec un paramètre objet T et un long
• Est telle que accept(T t, long d)
Formation Les nouveautés Java 8 alphorm.com™©
• Pas de retour
• Travaille par effets de bords
29/10/2015
82
Ce qu’on a couvert
• L’interface Consumer<T>
• L’interface DoubleConsumer
• L’interface IntConsumer
• L’interface LongConsumer
Formation Les nouveautés Java 8 alphorm.com™©
• L’interface ObjDoubleConsumer<T>
• L’interface ObjIntConsumer<T>
• L’interface ObjLongConsumer<T>
29/10/2015
83
Les annotations
Le langage
Formation Les nouveautés Java 8 alphorm.com™©
Les annotations répétables
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
84
Plan
• La base
• Les annotations classiques
• Les annotations répétables
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
85
La base
• Une annotation est déclarée avec @interface
• Une annotation possède des propriétés
• Les propriétés peuvent posséder des valeurs par défaut
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
86
Les annotations classiques
• Une annotation s’applique lors de la déclaration d’une classe, champ, méthode, …
• Une annotation peut aussi s’appliquer lors de l’utilisation du type
• Une seule annotation est d’un type donné par usage
• Les informations véhiculées par l’annotation sont disponibles après la
Formation Les nouveautés Java 8 alphorm.com™©
• Les informations véhiculées par l’annotation sont disponibles après la génération javadoc aussi
• Une annotation peut se voir restreindre à certains usages, et peut être disponible ou pas runtime
29/10/2015
87
Les annotations répétables
• Une annotation répétable peut être utilisée plusieurs fois sur le même élément
• Pour accéder à cette capacité :
� Annoter l’annotation avec @Repeatable
� Déclarer une annotation pour « contenir » l’annotation répétable
Formation Les nouveautés Java 8 alphorm.com™©
� Déclarer une annotation pour « contenir » l’annotation répétable
29/10/2015
88
Ce qu’on a couvert
• La base
• Les annotations classiques
• Les annotations répétables
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
89
La réflexion sur
Le langage
Formation Les nouveautés Java 8 alphorm.com™©
La réflexion sur paramètres
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
90
Plan
• La réflexion en Java
• Les limites de la réflexion
• La réflexion sur les paramètres
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
91
La réflexion en Java
• La classe est le descripteur des objets
• Les objets connaissent leur classe
• Trouver via un objet les caractéristiques de sa classe
• Concerne les membres en particuliers
Formation Les nouveautés Java 8 alphorm.com™©
• Permet :
� D’invoquer une méthode sans écrire directement l’appel
� De découvrir les champs d’un objet
� …
29/10/2015
92
Les limites de la reflexion
• Eventuel problème de performance
• La perte de contrôle de type lors de la compilation
• Si on accède aux membres par leurs noms, problème de refactoring
• Jusqu’en Java 8, impossible de trouver les noms des paramètres
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
93
La réflexion sur les paramètres
• En Java8, il est possible de récupérer les noms
• Auparavant, il fallait contourner
� Utiliser les annotations
• Ne pas oublier de compiler avec l’otpion javac : -parameters
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
94
Ce qu’on a couvert
• La réflexion en Java
• Les limites de la réflexion
• La réflexion sur les paramètres
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
95
Les optional
Le langage
Formation Les nouveautés Java 8 alphorm.com™©
Les optional
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
96
Plan
• Le problème
• La classe Optional<T>
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
97
Le problème
• En Java, seules les références peuvent être nulles
• Les types primitifs ne supportent pas la valeur nulle
• Comment exprimer l’absence de valeur ?
• Eviter de déterminer une valeur remarquable
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
98
La classe Optional<T>
• Encapsule une valeur de type T
• Cette valeur peut être absente
• Méthodes :
� Retourne la valeur avec get()
Formation Les nouveautés Java 8 alphorm.com™©
� Teste la présence avec isPresent()
� Construit avec of(T), ofNullable(T)
� Récupère la valeur avec : orElse(), orElseGet(), orElseThrow()…
29/10/2015
99
Ce qu’on a couvert
• Le problème
• La classe Optional<T>
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
100
Les classes java.util.stream
Les streams
Formation Les nouveautés Java 8 alphorm.com™©
Les classes java.util.stream
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
101
Plan
• L’interface BaseStream<>
• L’interface Stream<T>
• Les interfaces spécialisées
• Les interfaces Stream.Builder
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
102
L’interface BaseStream<>
• Interface de base de toutes les interfaces Stream
• Les streams sont des séquences d’éléments qui supportent des opérations agrégées
• Les méthodes :
� Fermeture : close()
Formation Les nouveautés Java 8 alphorm.com™©
� Fermeture : close()
� Parallélisme : parallel(), isParallel()
� En séquence : sequential()
� Itération : iterator(), spliterator()
� Libérer la contrainte d’ordre : unordered()
29/10/2015
103
L’interface Stream<T>
• Sous-interface de BaseStream
• Manipule des objets Java
• Obtenu à partir d’une source (tableau, collection, fonction, canal IO…)
• Permet de construire un pipeline, la source n’est consommée que si nécessaire et lors de l’application d’une opération terminale
Formation Les nouveautés Java 8 alphorm.com™©
nécessaire et lors de l’application d’une opération terminale
• Les opérations attendent de interfaces fonctionnelles, non nulles, non interférentes et en général sans état
• Un Stream est opéré une seule fois.
• Exécution séquentielle ou parallèle
29/10/2015
104
Les interfaces spécialisées
• DoubleStream, IntStream, LongStream
• Ce sont des spécialisations de Stream pour les primitives
• Des méthodes permettent de récupérer des objets au lieu des primitives
• Cohérent avec les Double/Int/LongSupplier-Consumer…
Formation Les nouveautés Java 8 alphorm.com™©
• Méthodes par exemple du DoubleStream :
� map(DoubleUnaryOperator),
� mapToInt(DoubleToIntFunction),
� mapToLong(DoubleToLongFunction),
� mapToObj(DoubleFunction)
29/10/2015
105
Les interfaces Stream.Builder
• Existent aussi sur DoubleStream, IntStream et LongStream
• Permet de créer un Stream et de le modifier avant d’appliquer les opérations
• Le Stream sera généré lors de l’appel de build()
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
106
Ce qu’on a couvert
• L’interface BaseStream<>
• L’interface Stream<T>
• Les interfaces spécialisées
• Les interfaces Stream.Builder
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
107
Les opérations sur Streams
Les streams
Formation Les nouveautés Java 8 alphorm.com™©
Les opérations sur Streams
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
108
Plan
• Méthodes intermédiaires
• Méthodes terminales
• La classe Collectors
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
109
Méthodes intermédiaires
• Méthode distinct : retourne un Stream dont les éléments sont distincts
• Méthode filter (Predicate) : … dont les éléments correspondent au prédicat
• Méthode flatMap (Function) : … dont les éléments sont remplacés par les éléments du Stream fournit par la fonction
Formation Les nouveautés Java 8 alphorm.com™©
• Méthode limit (long) : … limité en nombre d’éléments
29/10/2015
110
Méthodes intermédiaires
• Méthode map(Function) : … dont les éléments sont l’application de la fonction à chaque élément
• Méthode peek(Consumer) : … dont les éléments sont les mêmes, mais la fonction est appliquée à chaque élément
• Méthode skip(long) : … dont les éléments sont ceux qui restent lorsqu’on a éliminé les premiers
Formation Les nouveautés Java 8 alphorm.com™©
lorsqu’on a éliminé les premiers
• Méthode sorted() : … dont les éléments sont triés selon l’ordre naturel
29/10/2015
111
Méthodes terminales
• Méthode allMatch (Predicate) : retourne vrai si chaque élément vérifie le prédicat
• Méthode anyMatch(Precicate) : retourne vrai si l’un des éléments vérifie le prédicat
• Méthode findAny() : retourne un Optional qui représente un des éléments du Stream
Formation Les nouveautés Java 8 alphorm.com™©
éléments du Stream
• Méthode findFirst() : retourne un Optional qui représente le premier élément du Stream
29/10/2015
112
Méthodes terminales
• Méthode noneMatch(Predicate) : retourne vrai si aucun élément ne vérifie le prédicat
• Méthode forEach(Consumer) : applique la fonction sur chacun des éléments
• Méthode reduce(BinaryOperator) : réduit les éléments en les accumulant grâce à la fonction fournie, retourne un Optional
Formation Les nouveautés Java 8 alphorm.com™©
accumulant grâce à la fonction fournie, retourne un Optional
29/10/2015
113
La classe Collectors
• Une classe de service dans java.util.stream
• Fournit des réductions
Formation Les nouveautés Java 8 alphorm.com™©
• Méthodes : averaging(), counting(), groupingBy(), joining(), partitioningBy(), summing(), toMap(), toSet()…
29/10/2015
114
Ce qu’on a couvert
• Méthodes intermédiaires
• Méthodes terminales
• La classe Collectors
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
115
Les Streams parallèles
Les streams
Formation Les nouveautés Java 8 alphorm.com™©
Les Streams parallèles
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
116
Plan
• Obtention de Streams parallèles
• Les effets du parallèlisme
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
117
Obtention de Streams parallèles
• Les Streams peuvent être séquentiels ou parallèles
• Les Streams parallèles peuvent être traités en parallèles par plusieurs threads
• La plupart des méthodes produisent par défaut des Streams séquentiels
• Pour créer un Stream parallèle à partir d’une collection, utiliser la
Formation Les nouveautés Java 8 alphorm.com™©
• Pour créer un Stream parallèle à partir d’une collection, utiliser la méthode parallelStream()
• Pour convertir un Stream séquentiel en parallèle, utiliser parallel()
• Pour convertir un Stream parallèle en séquentiel, utiliser sequential()
29/10/2015
118
Les effets du parallèlisme
• Paralléliser doit être plus rapide, efficace
• Mais cette efficacité supposée peut être réduite : par les contraintes d’ordonnancement du Stream, par l’ordre des opérations…
• Des accès concurrents peuvent produire des résultats malheureux
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
119
Ce qu’on a couvert
• Obtention de Streams parallèles
• Les effets du parallèlisme
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
120
Les classes de dates
Les dates
Formation Les nouveautés Java 8 alphorm.com™©
Les classes de dates
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
121
Plan
• Les objectifs de l’API Date
• Les classes LocalDate et LocalTime
• Les classes de zones
• Les classes Period et Duration
Formation Les nouveautés Java 8 alphorm.com™©
• Les chronologies
29/10/2015
122
Les objectifs de l’API Date
• Un nouveau package apparaît : java.time
• Les classes sont « immutable value », donc pas de problèmes avec le multi threading
• Les classes représentent correctement le domaine, donc pas de confusion
Formation Les nouveautés Java 8 alphorm.com™©
� La classe java.util.Date ne possédait pas de zone
• Des chronologies différentes de ISO-8601 sont possibles
29/10/2015
123
Les classes LocalDate et LocalTime
• Ce sont des classes qui représentent date et heure sur le poste courant
• Il existe aussi LocalDateTime
• Le contexte de zone n’existe pas
• Méthodes de création : now, of, from, parse
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
124
Les classes LocalDate et LocalTime
• La classe la « modification » des données se fait avec with
• Les « ajusteurs », certains standards et sinon à écrire soi-même
Formation Les nouveautés Java 8 alphorm.com™©
• Possibilités de tronquer les infos
29/10/2015
125
Les classes de zones
• Une zone peut être représentée par une chaîne de caractères
• La classe ZoneId sert à garder cette information
Formation Les nouveautés Java 8 alphorm.com™©
• ZonedDateTime est une date/heure avec les informations de zone
• OffsetDateTime est une date/heure avec l’offset (de zone UTC)
• OffsetTime est une heure avec l’offset
29/10/2015
126
Les classes Period et Duration
• La classe Period représente une durée en jour-mois-année et non un point dans le temps
• La classe Duration représente des durées en heures, etc plus précis que
Formation Les nouveautés Java 8 alphorm.com™©
• La classe Duration représente des durées en heures, etc plus précis que Period
29/10/2015
127
Les chronologies
• Un package java.time.chrono
• Une interface Chronology, représentant un système calendaire
• Des classes implémentant cette interface : IsoChronology, JapaneseChronology,…
• Ce sont des factories pour des ChronoLocalDate (interface)
Formation Les nouveautés Java 8 alphorm.com™©
• Ce sont des factories pour des ChronoLocalDate (interface)
� Méthodes dateNow(), dateNow(..), date(…)
• Classes implémentant ChronoLocalDate :
� LocalDate, JapaneseDate,…
29/10/2015
128
Ce qu’on a couvert
• Les objectifs de l’API Date
• Les classes LocalDate et LocalTime
• Les classes de zones
• Les classes Period et Duration
Formation Les nouveautés Java 8 alphorm.com™©
• Les chronologies
29/10/2015
129
La gestion du temps
Les dates
Formation Les nouveautés Java 8 alphorm.com™©
La gestion du temps
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
130
Plan
• La gestion du temps local
• La gestion du temps zoné
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
131
La gestion du temps local
• La classe LocalDate
� Les constantes MAX et MIN
• Les méthodes
� Création de LocalDateTime : atTime, …
Getters : getDayOfMonth()…
Formation Les nouveautés Java 8 alphorm.com™©
� Getters : getDayOfMonth()…
� Informations sur le mois, l’année …
� Date maintenant
� Modifications : minus, plus, withXXX
29/10/2015
132
La gestion du temps zoné
• La classe ZonedDateTime
• Les créateurs of, now, …
• Les modificateurs plus, minus, with, …
• Temps restant : until
Formation Les nouveautés Java 8 alphorm.com™©
• Travail sur offset : getOffset()
29/10/2015
133
Ce qu’on a couvert
• La gestion du temps local
• La gestion du temps zoné
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
134
Le format date et heure
Les dates
Formation Les nouveautés Java 8 alphorm.com™©
Le format date et heure
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
135
Plan
• Le package java.time.format
• La classe DateTimeFormatter
• La classe DateTimeFormatterBuilder
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
136
Le package java.time.format
• Fournit des classes pour afficher et parser des dates
• La classe DateTimeFormatter est suffisante pour la plupart des cas
• Pour les situations complexes, on utilisera DateTimeFormatterBuilder
• Les classes du package ne supportent pas des arguments null
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
137
La classe DateTimeFormatter
• Cette classe proposent de formatter des dates en chaînes de caractères ou de lire une chaîne en date
• Utilise des constantes prédéfinies
• Utilise des motifs prédéfinis
• Utilise des styles prédéfinis
Formation Les nouveautés Java 8 alphorm.com™©
• Utilise des styles prédéfinis
29/10/2015
138
La classe DateTimeFormatterBuilder
• Le builder de base des DateTimeFormatter
• Il permet de faire apparaître les éléments suivants :
� Valeur, Fraction, Text
� OffsetId/Offset, ZoneId, ZoneText
ChronologyId, ChronologyText
Formation Les nouveautés Java 8 alphorm.com™©
� ChronologyId, ChronologyText
� Literal
� Nested et Optional
• Chaque élément peut être arrangé avec des espaces/caractères avant et après
29/10/2015
139
Ce qu’on a couvert
• Le package java.time.format
• La classe DateTimeFormatter
• La classe DateTimeFormatterBuilder
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
140
Les chronologies
Les dates
Formation Les nouveautés Java 8 alphorm.com™©
Les chronologies
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
141
Plan
• Le package java.time.chrono
• Manipuler les chronologies
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
142
Le package java.time.chrono
• Décrit les classes de chronologies
• L’interface Chronology : représente un système calendaire
• Il est possible d’ajouter de nouveaux calendriers en créant une implémentation Chronology, ChronoLocalDate et Era.
• Chronology fonctionne comme une factory
Formation Les nouveautés Java 8 alphorm.com™©
• Chronology fonctionne comme une factory
29/10/2015
143
Manipuler les chronologies
• Trouver les chronologies disponibles
• Créer une date : dateNow, date, dateYearDay…
• Manipuler des ChronoLocalDate et des ChronoPeriod
• Obtenir des ChronoZonedDateTime
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
144
Ce qu’on a couvert
• Le package java.time.chrono
• Manipuler les chronologies
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
145
L’internationalisation
Les dates
Formation Les nouveautés Java 8 alphorm.com™©
L’internationalisation
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
146
Plan
• Les dates selon les chronologies
• Les possibilités de DateTimeFormatter
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
147
Les dates selon les chronologies
• Chaque chronologie a sa propre représentation
• Un style de date et d’heure
� FormatStyle (FULL, LONG, MEDIUM, SHORT)
• Un style décimal
Formation Les nouveautés Java 8 alphorm.com™©
� DecimalStyle (STANDARD)
• Méthode of(Locale)
• …
29/10/2015
148
Les possibilités de DateTimeFormatter
• Méthodes ofLocalizedDate, Time
• Des formatters prédéfinis : BASIC_ISO_DATE, …
• Des méthodes de construction : ofPattern(…)
� « yyyy MM dd »
Formation Les nouveautés Java 8 alphorm.com™©
� Format à découvrir dans la documentation
29/10/2015
149
Ce qu’on a couvert
• Les dates selon les chronologies
• Les possibilités de DateTimeFormatter
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
150
Package java.util.concurrent
La concurrence
Formation Les nouveautés Java 8 alphorm.com™©
Package java.util.concurrent
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
151
Plan
• Les nouvelles classes et interfaces
• La classe ConcurrentHashMap
• Le package java.util.concurrent.atomic
• La classe ForkJoinPool
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
152
Les nouvelles classes et interfaces
• CompletableFuture.AsynchronousCompletionTask : marque les tâches crées par les méthodes async
• CompletionStage<T> :
• CompletableFuture<T> : une Future qui peut être terminée
• ConcurrentHashMap.KeySetView<T> : une vue de la map en set
Formation Les nouveautés Java 8 alphorm.com™©
• ConcurrentHashMap.KeySetView<T> : une vue de la map en set
• CountedCompleter<T> : une ForkJoinTask avec une action de terminaison lors de la levée d’un trigger
• CompletionException : exception levée lors de l’accomplissement d’une tâche
29/10/2015
153
La classe ConcurrentHashMap
• Nouvelles méthodes ajoutées
• Dues à la gestion de Streams et l’apparition des lambdas
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
154
Le package java.util.concurrent.atomic
• La classe DoubleAccumulator : maintenir une variable double
• La classe DoubleAdder : maintenir une somme initialement à 0
• La classe LongAccumulator
• La classe LongAdder
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
155
La classe ForkJoinPool
• Un ajout d’une méthode commonPool()
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
156
Ce qu’on a couvert
• Les nouvelles classes et interfaces
• La classe ConcurrentHashMap
• Le package java.util.concurrent.atomic
• La classe ForkJoinPool
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
157
La classe StampedLock
La concurrence
Formation Les nouveautés Java 8 alphorm.com™©
La classe StampedLock
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
158
Plan
• La classe StampedLock
• Usages de StampedLock
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
159
La classe StampedLock
• Dans le package java.util.concurrent.locks
• Un verrou fonctionnant en 3 modes
� Mode écriture : bloque sur un accès exclusif. Retourne un « stamp »
� Mode lecture : bloque sur un accès non exclusif
Mode lecture optimiste : retourne un « stamp » non null quand le verrou
Formation Les nouveautés Java 8 alphorm.com™©
� Mode lecture optimiste : retourne un « stamp » non null quand le verrou n’est pas en accès exclusif
29/10/2015
160
Usages du StampedLock
• Utiles pour le développement de composants thread-safe
• Ils ne sont pas réentrants
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
161
Ce qu’on a couvert
• La classe StampedLock
• Usages de StampedLock
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
162
java.net.URLPermission
La concurrence
Formation Les nouveautés Java 8 alphorm.com™©
java.net.URLPermission
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
163
Plan
• Le package java.net
• La classe java.net.URLPermission
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
164
Le package java.net
• Package des classes et interfaces utilisées pour les accès réseau
• Une section bas niveau
� Adresses, sockets, interfaces
• Une section haut niveau
Formation Les nouveautés Java 8 alphorm.com™©
� URIs, URLs,Connexions
29/10/2015
165
La classe URLPermission
• Représente la permission d’accéder à une ressource
• Les constructeurs ont besoin
� Du nom : l’url
� De l’action : méthode et entêtes
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
166
Ce qu’on a couvert
• Le package java.net
• La classe java.net.URLPermission
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
167
Le tri parallèle
Les collections
Formation Les nouveautés Java 8 alphorm.com™©
Le tri parallèle
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
168
Plan
• La classe Arrays
• Différence entre sort() et parallelSort()
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
169
La classe Arrays
• Du package java.util
• Contient des méthodes utilitaires pour les tableaux
• Contient des méthodes de création de tableaux
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
170
Différences entre sort() et parallelSort()
• La méthode sort s’applique à toute sorte d’éléments
• Avec indexes
• Avec comparateurs
• Le tri en parallèle divise explicitement le tableau en répartissant les morceaux (split) sur des threads différents
Formation Les nouveautés Java 8 alphorm.com™©
morceaux (split) sur des threads différents
29/10/2015
171
Ce qu’on a couvert
• La classe Arrays
• Différence entre sort() et parallelSort()
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
172
Encodage Base64
Les collections
Formation Les nouveautés Java 8 alphorm.com™©
Encodage Base64
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
173
Plan
• La classe java.util.Base64
• Usages de l’encodage
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
174
La classe java.util.Base64
• Constituée de méthodes statiques
• Ne pas passer de paramètres null
• Les types supportés sont :
� Basic : utilise l’alphabet de la table 1, aucun ajout
Formation Les nouveautés Java 8 alphorm.com™©
� URL safe : utilise l’alphabet de la table 2, aucun ajout
� MIME : utilise la table 1, ajout de \r\n
• Méthode getEncoder(), getDecoder()…
29/10/2015
175
Usages de l’encodage
• Base64 est un codage de l’information
• Défini comme encodage MIME
• Parce que les protocoles ont été prévus pour transmettre des messages en texte seulement
• Provoque en général une augmentation du volume des données
Formation Les nouveautés Java 8 alphorm.com™©
• Provoque en général une augmentation du volume des données
29/10/2015
176
Ce qu’on a couvert
• La classe java.util.Base64
• Usages de l’encodage
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
177
L’arithmétique non signée
Les collections
Formation Les nouveautés Java 8 alphorm.com™©
L’arithmétique non signée
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
178
Plan
• Types signés et non-signés
• Les méthodes de Integer et Long
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
179
Types signés et non-signés
• Il n’existe pas de types non-signés en Java
• Parfois de la confusion peut s’introduire dans la manipulation
• Il faut faire attention :
� Lors des opérations portées sur les variables
Formation Les nouveautés Java 8 alphorm.com™©
� Lors de l’affichage
29/10/2015
180
Les méthodes de Integer et Long
• Méthodes qui manipulent des données non signées
• La méthode compareUnsigned
• La méthode divideUnsigned
• Les méthodes parseUnsignedInt
Formation Les nouveautés Java 8 alphorm.com™©
• La méthode remainderUnsigned
• La méthode toUnsignedLong
• Les méthodes toUnsignedString
29/10/2015
181
Ce qu’on a couvert
• Types signés et non-signés
• Les méthodes de Integer et Long
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
182
La ligne de commande
Les outils
Formation Les nouveautés Java 8 alphorm.com™©
La ligne de commande
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
183
Plan
• L’outil jjs
• L’outil jdeps
• L’outil javac -h
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
184
L’outil jjs
• Moteur javascript Nashorn
• Commande jjs en ligne de commande
• Trouvée sous \bin
• Interpréteur encapsulable dans les applications Java
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
185
L’outil jdeps
• Un outil pour analyser les dépendances entre les classes
• Se lance sur une classe et recherche les dépendances à partir de celle-ci
• Options disponibles
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
186
L’outil javac -h
• Génère les entêtes natifs
• Plus besoin de passer par javah
• Les entêtes sont générés pour toute classe qui possède des méthode native ou qui utilise l’annotation Native
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
187
Ce qu’on a couvert
• L’outil jjs
• L’outil jdeps
• L’outil javac -h
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
188
Nashorn
Les outils
Formation Les nouveautés Java 8 alphorm.com™©
Nashorn
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
189
Plan
• Nouveau moteur javascript
• Extensions
• Encapsulable
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
190
Nouveau moteur javascript
• En Java 7, un moteur basé sur Rhino
• Mieux conforme aux spécifications normalisées ECMA
• Meilleure performance
• Mode standalone
Formation Les nouveautés Java 8 alphorm.com™©
• Mode encapsulé dans une application Java
• Javascript peut appeler du Java
• Java peut appeler du javascript
29/10/2015
191
Extensions
• Les applications JavaFX sont exécutables comme scripts
• Le mode strict du Javascript est activable
• Le classpath peut être modifié pour la JVM
• Il existe un mode scripting
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
192
Encapsulable
• L’interaction avec Java devient plus simple
• Une application Java peut exécuter du Javascript de façon simple
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
193
Ce qu’on a couvert
• Nouveau moteur javascript
• Extensions
• Encapsulable
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
194
Les profils compacts
Les outils
Formation Les nouveautés Java 8 alphorm.com™©
Les profils compacts
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
195
Plan
• Définition et intérêt
• Composition des profils
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
196
Définition et intérêt
• Réduire l’empreinte mémoire
• Pour les applications qui n’ont pas besoin de toute la plateforme
• Option javac –profile
• 3 profils supportés
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
197
Composition des profils
• Chaque profils apporte des éléments
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
198
Ce qu’on a couvert
• Définition et intérêt
• Composition des profils
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
199
Le thème Modena
JavaFX
Formation Les nouveautés Java 8 alphorm.com™©
Le thème Modena
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
200
Plan
• Un nouveau thème
• Nouveaux contrôles
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
201
Un nouveau thème
• Remplace Caspian
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
202
Nouveaux contrôles
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
203
Ce qu’on a couvert
• Un nouveau thème
• Nouveaux contrôles
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
204
Encapsulation de Swing
JavaFX
Formation Les nouveautés Java 8 alphorm.com™©
Encapsulation de Swing dans JavaFX
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
205
Plan
• La classe SwingNode
• Encapsuler un SwingNode
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
206
La classe SwingNode
• Hérite de Node
• Possède un constructeur par défaut
• Permet d’encapsuler des composants Swing
• Peut fournir le composant Swing encapsulé par getComponent()
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
207
Encapsuler un composant Swing
• Créer un objet SwingNode
• Ajouter ce nœud au contenu de la scène
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
208
Ce qu’on a couvert
• La classe SwingNode
• Encapsuler un SwingNode
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
209
Le contrôle WebView
JavaFX
Formation Les nouveautés Java 8 alphorm.com™©
Le contrôle WebView
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
210
Plan
• La classe WebView
• Interaction Java/Javascript
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
211
La classe WebView
• Classe du package javafx.scene.web
• Gère un WebEngine
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
212
Interaction Java/Javascript
• Une application web peut communiquer avec l’application JavaFX
• Le moteur webengine exécute des scripts
• JSObject permet au contraire de déclencher du code Java à partir de JavaScript
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
213
Ce qu’on a couvert
• La classe WebView
• Interaction Java/Javascript
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
214
Conclusion
Formation Java8
Formation Les nouveautés Java 8 alphorm.com™©
Conclusion
Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com
Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels
29/10/2015
215
Plan de la formation
• La nouvelle syntaxe
• Les interfaces fonctionnelles
• Le langage
• Les streams
• Les collections
• Les outils
• JavaFX
Formation Les nouveautés Java 8 alphorm.com™©
• Les dates et l’internationalisation
• Concurrence et réseau
29/10/2015
216
Les autres formations dév sur Alphorm
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
217
Pour continuer …
• La formation Java fondamentaux …
• La formation Java avancée …
• La formation Android …
Formation Les nouveautés Java 8 alphorm.com™©
29/10/2015
218
Merci d’avoir suivi cette formation,
Formation Les nouveautés Java 8 alphorm.com™©
rendez-vous pour la suite !