29/10/2015
1
Formation Java8
Formation Les nouveautés Java 8 alphorm.com™©
Site : http://www.alphorm.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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 : fabien.brissonneau@gmail.com
• 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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 rn
• 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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.com
Blog : http://blog.alphorm.com
Forum : http://forum.alphorm.com
Fabien Brissonneau
Consultant, concepteur et formateur
Objets 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 !

Alphorm.com Java 8: les nouveautés

  • 1.
    29/10/2015 1 Formation Java8 Formation Lesnouveautés Java 8 alphorm.com™© Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 2.
    29/10/2015 2 Plan • Présentation devotre 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
  • 3.
    29/10/2015 3 Présentation du formateur •Fabien Brissonneau • Email : fabien.brissonneau@gmail.com • 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
  • 4.
    29/10/2015 4 Mes formations suralphorm Formation Les nouveautés Java 8 alphorm.com™©
  • 5.
    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™©
  • 6.
    29/10/2015 6 Plan de laformation • 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
  • 7.
    29/10/2015 7 Publics concernés • Cetteformation 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™©
  • 8.
    29/10/2015 8 Prérequis de laformation • 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™©
  • 9.
    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™©
  • 10.
    29/10/2015 10 Les autres formationsdév sur Alphorm Formation Les nouveautés Java 8 alphorm.com™©
  • 11.
    29/10/2015 11 Are you ready? ☺ Formation Les nouveautés Java 8 alphorm.com™©
  • 12.
    29/10/2015 12 Expressions lambdas La nouvellesyntaxe Formation Les nouveautés Java 8 alphorm.com™© Expressions lambdas Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 13.
    29/10/2015 13 Plan • La syntaxedes expressions lambdas • Usage des expressions lambdas Formation Les nouveautés Java 8 alphorm.com™©
  • 14.
    29/10/2015 14 La syntaxe desexpressions 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
  • 15.
    29/10/2015 15 Usage des expressionslambdas • 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
  • 16.
    29/10/2015 16 Ce qu’on acouvert • La syntaxe des expressions lambdas • Usage des expressions lambdas Formation Les nouveautés Java 8 alphorm.com™©
  • 17.
    29/10/2015 17 EL et classes Lanouvelle syntaxe Formation Les nouveautés Java 8 alphorm.com™© EL et classes anonymes Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 18.
    29/10/2015 18 Plan • Créer unefonction de rappel • Créer une classe anonyme • Utiliser une expression lambda Formation Les nouveautés Java 8 alphorm.com™©
  • 19.
    29/10/2015 19 Créer une fonctionde 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™©
  • 20.
    29/10/2015 20 Créer une classeanomyne • 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™©
  • 21.
    29/10/2015 21 Utiliser une expressionlambda • 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™©
  • 22.
    29/10/2015 22 Ce qu’on acouvert • Créer une fonction de rappel • Créer une classe anonyme • Utiliser une expression lambda Formation Les nouveautés Java 8 alphorm.com™©
  • 23.
    29/10/2015 23 Les limites des Lanouvelle syntaxe Formation Les nouveautés Java 8 alphorm.com™© Les limites des expressions lambdas Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 24.
    29/10/2015 24 Plan • Les variableslocales • Les captures Formation Les nouveautés Java 8 alphorm.com™©
  • 25.
    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™©
  • 26.
    29/10/2015 26 Les captures • Uneexpression lambda accède • Aux variables locales • Aux variables attributs de la classe Formation Les nouveautés Java 8 alphorm.com™©
  • 27.
    29/10/2015 27 Ce qu’on acouvert • Les variables locales • Les captures Formation Les nouveautés Java 8 alphorm.com™©
  • 28.
    29/10/2015 28 Les méthodes par Lanouvelle syntaxe Formation Les nouveautés Java 8 alphorm.com™© Les méthodes par défaut des interfaces Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 29.
    29/10/2015 29 Plan • Les problèmes •Les méthodes par défaut Formation Les nouveautés Java 8 alphorm.com™©
  • 30.
    29/10/2015 30 Les problèmes • Uneinterface 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™©
  • 31.
    29/10/2015 31 Les méthodes pardé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™©
  • 32.
    29/10/2015 32 Ce qu’on acouvert • Les problèmes • Les méthodes par défaut Formation Les nouveautés Java 8 alphorm.com™©
  • 33.
    29/10/2015 33 Les références de Lanouvelle syntaxe Formation Les nouveautés Java 8 alphorm.com™© Les références de méthodes Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 34.
    29/10/2015 34 Plan • Le problème •La solution nouvelle Formation Les nouveautés Java 8 alphorm.com™©
  • 35.
    29/10/2015 35 Le problème • EnJava, 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
  • 36.
    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™©
  • 37.
    29/10/2015 37 Ce qu’on acouvert • Le problème • La solution nouvelle Formation Les nouveautés Java 8 alphorm.com™©
  • 38.
    29/10/2015 38 Les SAM Les interfacesfonctionnelles Formation Les nouveautés Java 8 alphorm.com™© Les SAM Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 39.
    29/10/2015 39 Plan • Définition • Exemplesde SAM • Les SAM et les expressions lambdas Formation Les nouveautés Java 8 alphorm.com™©
  • 40.
    29/10/2015 40 Définition • Single AbstractMethod • 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™©
  • 41.
    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 • …
  • 42.
    29/10/2015 42 Les SAM etles 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™©
  • 43.
    29/10/2015 43 Ce qu’on acouvert • Définition • Exemples de SAM • Les SAM et les expressions lambdas Formation Les nouveautés Java 8 alphorm.com™©
  • 44.
    29/10/2015 44 @FunctionalInterface Les interfaces fonctionnelles FormationLes nouveautés Java 8 alphorm.com™© @FunctionalInterface Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 45.
    29/10/2015 45 Plan • Définition • Casd’erreur Formation Les nouveautés Java 8 alphorm.com™©
  • 46.
    29/10/2015 46 Définition • Une interfacefonctionnelle 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™©
  • 47.
    29/10/2015 47 Usage des interfacesfonctionnelles • 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
  • 48.
    29/10/2015 48 Cas d’erreur • Uneinterface 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™©
  • 49.
    29/10/2015 49 Ce qu’on acouvert • Définition • Cas d’erreur Formation Les nouveautés Java 8 alphorm.com™©
  • 50.
    29/10/2015 50 Function Les interfaces fonctionnelles FormationLes nouveautés Java 8 alphorm.com™© Function Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 51.
    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™©
  • 52.
    29/10/2015 52 L’interface Function<T,R> • Uneinterface 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
  • 53.
    29/10/2015 53 L’interface UnaryOperator<T> • Sousinterface 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™©
  • 54.
    29/10/2015 54 L’interface BiFunction<T,U,R> • Uneinterface 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
  • 55.
    29/10/2015 55 BinaryOperator<T> • Sous interfacede 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™©
  • 56.
    29/10/2015 56 Ce qu’on acouvert • 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™©
  • 57.
    29/10/2015 57 Predicate Les interfaces fonctionnelles FormationLes nouveautés Java 8 alphorm.com™© Predicate Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 58.
    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
  • 59.
    29/10/2015 59 L’interface Predicate<T> • Représenteune 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é
  • 60.
    29/10/2015 60 L’interface BiPredicate<T,U> • Interfacefonctionnelle 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
  • 61.
    29/10/2015 61 L’interface DoublePredicate • Interfacefonctionnelle • 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™©
  • 62.
    29/10/2015 62 L’interface IntPredicate • Interfacefonctionnelle • 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™©
  • 63.
    29/10/2015 63 L’interface LongPredicate • Interfacefonctionnelle • 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™©
  • 64.
    29/10/2015 64 Ce qu’on acouvert • 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
  • 65.
    29/10/2015 65 Supplier Les interfaces fonctionnelles FormationLes nouveautés Java 8 alphorm.com™© Supplier Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 66.
    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
  • 67.
    29/10/2015 67 L’interface Supplier<T> • Interfacefonctionnelle 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™©
  • 68.
    29/10/2015 68 L’interface BooleanSupplier • Interfacefonctionnelle 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™©
  • 69.
    29/10/2015 69 L’interface DoubleSupplier • Interfacefonctionnelle 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™©
  • 70.
    29/10/2015 70 L’interface IntSupplier • Interfacefonctionnelle 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™©
  • 71.
    29/10/2015 71 L’interface LongSupplier • Interfacefonctionnelle 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™©
  • 72.
    29/10/2015 72 Ce qu’on acouvert • L’interface Supplier<T> • L’interface BooleanSupplier • L’interface DoubleSupplier • L’interface IntSupplier Formation Les nouveautés Java 8 alphorm.com™© • L’interface LongSupplier
  • 73.
    29/10/2015 73 Consumer Les interfaces fonctionnelles FormationLes nouveautés Java 8 alphorm.com™© Consumer Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 74.
    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>
  • 75.
    29/10/2015 75 L’interface Consumer<T> • Interfacefonctionnelle 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
  • 76.
    29/10/2015 76 L’interface DoubleConsumer • Interfacespécialisée pour les double • La méthode fonctionnelle accept(double) ne prend que double Formation Les nouveautés Java 8 alphorm.com™©
  • 77.
    29/10/2015 77 L’interface IntConsumer • Interfacespécialisée pour les int • La méthode fonctionnelle accept(int) ne prend que int Formation Les nouveautés Java 8 alphorm.com™©
  • 78.
    29/10/2015 78 L’interface LongConsumer • Interfacespécialisée pour les long • La méthode fonctionnelle accept(long) ne prend que long Formation Les nouveautés Java 8 alphorm.com™©
  • 79.
    29/10/2015 79 L’interface ObjDoubleConsumer<T> • Interfacefonctionnelle 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
  • 80.
    29/10/2015 80 L’interface ObjIntConsumer<T> • Interfacefonctionnelle 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
  • 81.
    29/10/2015 81 L’interface ObjLongConsumer<T> • Interfacefonctionnelle 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
  • 82.
    29/10/2015 82 Ce qu’on acouvert • 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>
  • 83.
    29/10/2015 83 Les annotations Le langage FormationLes nouveautés Java 8 alphorm.com™© Les annotations répétables Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 84.
    29/10/2015 84 Plan • La base •Les annotations classiques • Les annotations répétables Formation Les nouveautés Java 8 alphorm.com™©
  • 85.
    29/10/2015 85 La base • Uneannotation 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™©
  • 86.
    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
  • 87.
    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
  • 88.
    29/10/2015 88 Ce qu’on acouvert • La base • Les annotations classiques • Les annotations répétables Formation Les nouveautés Java 8 alphorm.com™©
  • 89.
    29/10/2015 89 La réflexion sur Lelangage Formation Les nouveautés Java 8 alphorm.com™© La réflexion sur paramètres Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 90.
    29/10/2015 90 Plan • La réflexionen Java • Les limites de la réflexion • La réflexion sur les paramètres Formation Les nouveautés Java 8 alphorm.com™©
  • 91.
    29/10/2015 91 La réflexion enJava • 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 …
  • 92.
    29/10/2015 92 Les limites dela 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™©
  • 93.
    29/10/2015 93 La réflexion surles 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™©
  • 94.
    29/10/2015 94 Ce qu’on acouvert • 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™©
  • 95.
    29/10/2015 95 Les optional Le langage FormationLes nouveautés Java 8 alphorm.com™© Les optional Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 96.
    29/10/2015 96 Plan • Le problème •La classe Optional<T> Formation Les nouveautés Java 8 alphorm.com™©
  • 97.
    29/10/2015 97 Le problème • EnJava, 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™©
  • 98.
    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()…
  • 99.
    29/10/2015 99 Ce qu’on acouvert • Le problème • La classe Optional<T> Formation Les nouveautés Java 8 alphorm.com™©
  • 100.
    29/10/2015 100 Les classes java.util.stream Lesstreams Formation Les nouveautés Java 8 alphorm.com™© Les classes java.util.stream Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 101.
    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™©
  • 102.
    29/10/2015 102 L’interface BaseStream<> • Interfacede 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()
  • 103.
    29/10/2015 103 L’interface Stream<T> • Sous-interfacede 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
  • 104.
    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)
  • 105.
    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™©
  • 106.
    29/10/2015 106 Ce qu’on acouvert • L’interface BaseStream<> • L’interface Stream<T> • Les interfaces spécialisées • Les interfaces Stream.Builder Formation Les nouveautés Java 8 alphorm.com™©
  • 107.
    29/10/2015 107 Les opérations surStreams Les streams Formation Les nouveautés Java 8 alphorm.com™© Les opérations sur Streams Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 108.
    29/10/2015 108 Plan • Méthodes intermédiaires •Méthodes terminales • La classe Collectors Formation Les nouveautés Java 8 alphorm.com™©
  • 109.
    29/10/2015 109 Méthodes intermédiaires • Méthodedistinct : 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
  • 110.
    29/10/2015 110 Méthodes intermédiaires • Méthodemap(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
  • 111.
    29/10/2015 111 Méthodes terminales • MéthodeallMatch (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
  • 112.
    29/10/2015 112 Méthodes terminales • MéthodenoneMatch(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
  • 113.
    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()…
  • 114.
    29/10/2015 114 Ce qu’on acouvert • Méthodes intermédiaires • Méthodes terminales • La classe Collectors Formation Les nouveautés Java 8 alphorm.com™©
  • 115.
    29/10/2015 115 Les Streams parallèles Lesstreams Formation Les nouveautés Java 8 alphorm.com™© Les Streams parallèles Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 116.
    29/10/2015 116 Plan • Obtention deStreams parallèles • Les effets du parallèlisme Formation Les nouveautés Java 8 alphorm.com™©
  • 117.
    29/10/2015 117 Obtention de Streamsparallè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()
  • 118.
    29/10/2015 118 Les effets duparallè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™©
  • 119.
    29/10/2015 119 Ce qu’on acouvert • Obtention de Streams parallèles • Les effets du parallèlisme Formation Les nouveautés Java 8 alphorm.com™©
  • 120.
    29/10/2015 120 Les classes dedates Les dates Formation Les nouveautés Java 8 alphorm.com™© Les classes de dates Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 121.
    29/10/2015 121 Plan • Les objectifsde 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
  • 122.
    29/10/2015 122 Les objectifs del’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
  • 123.
    29/10/2015 123 Les classes LocalDateet 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™©
  • 124.
    29/10/2015 124 Les classes LocalDateet 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
  • 125.
    29/10/2015 125 Les classes dezones • 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
  • 126.
    29/10/2015 126 Les classes Periodet 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
  • 127.
    29/10/2015 127 Les chronologies • Unpackage 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,…
  • 128.
    29/10/2015 128 Ce qu’on acouvert • 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
  • 129.
    29/10/2015 129 La gestion dutemps Les dates Formation Les nouveautés Java 8 alphorm.com™© La gestion du temps Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 130.
    29/10/2015 130 Plan • La gestiondu temps local • La gestion du temps zoné Formation Les nouveautés Java 8 alphorm.com™©
  • 131.
    29/10/2015 131 La gestion dutemps 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
  • 132.
    29/10/2015 132 La gestion dutemps 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()
  • 133.
    29/10/2015 133 Ce qu’on acouvert • La gestion du temps local • La gestion du temps zoné Formation Les nouveautés Java 8 alphorm.com™©
  • 134.
    29/10/2015 134 Le format dateet heure Les dates Formation Les nouveautés Java 8 alphorm.com™© Le format date et heure Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 135.
    29/10/2015 135 Plan • Le packagejava.time.format • La classe DateTimeFormatter • La classe DateTimeFormatterBuilder Formation Les nouveautés Java 8 alphorm.com™©
  • 136.
    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™©
  • 137.
    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
  • 138.
    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
  • 139.
    29/10/2015 139 Ce qu’on acouvert • Le package java.time.format • La classe DateTimeFormatter • La classe DateTimeFormatterBuilder Formation Les nouveautés Java 8 alphorm.com™©
  • 140.
    29/10/2015 140 Les chronologies Les dates FormationLes nouveautés Java 8 alphorm.com™© Les chronologies Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 141.
    29/10/2015 141 Plan • Le packagejava.time.chrono • Manipuler les chronologies Formation Les nouveautés Java 8 alphorm.com™©
  • 142.
    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
  • 143.
    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™©
  • 144.
    29/10/2015 144 Ce qu’on acouvert • Le package java.time.chrono • Manipuler les chronologies Formation Les nouveautés Java 8 alphorm.com™©
  • 145.
    29/10/2015 145 L’internationalisation Les dates Formation Lesnouveautés Java 8 alphorm.com™© L’internationalisation Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 146.
    29/10/2015 146 Plan • Les datesselon les chronologies • Les possibilités de DateTimeFormatter Formation Les nouveautés Java 8 alphorm.com™©
  • 147.
    29/10/2015 147 Les dates selonles 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) • …
  • 148.
    29/10/2015 148 Les possibilités deDateTimeFormatter • 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
  • 149.
    29/10/2015 149 Ce qu’on acouvert • Les dates selon les chronologies • Les possibilités de DateTimeFormatter Formation Les nouveautés Java 8 alphorm.com™©
  • 150.
    29/10/2015 150 Package java.util.concurrent La concurrence FormationLes nouveautés Java 8 alphorm.com™© Package java.util.concurrent Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 151.
    29/10/2015 151 Plan • Les nouvellesclasses et interfaces • La classe ConcurrentHashMap • Le package java.util.concurrent.atomic • La classe ForkJoinPool Formation Les nouveautés Java 8 alphorm.com™©
  • 152.
    29/10/2015 152 Les nouvelles classeset 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
  • 153.
    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™©
  • 154.
    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™©
  • 155.
    29/10/2015 155 La classe ForkJoinPool •Un ajout d’une méthode commonPool() Formation Les nouveautés Java 8 alphorm.com™©
  • 156.
    29/10/2015 156 Ce qu’on acouvert • 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™©
  • 157.
    29/10/2015 157 La classe StampedLock Laconcurrence Formation Les nouveautés Java 8 alphorm.com™© La classe StampedLock Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 158.
    29/10/2015 158 Plan • La classeStampedLock • Usages de StampedLock Formation Les nouveautés Java 8 alphorm.com™©
  • 159.
    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
  • 160.
    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™©
  • 161.
    29/10/2015 161 Ce qu’on acouvert • La classe StampedLock • Usages de StampedLock Formation Les nouveautés Java 8 alphorm.com™©
  • 162.
    29/10/2015 162 java.net.URLPermission La concurrence Formation Lesnouveautés Java 8 alphorm.com™© java.net.URLPermission Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 163.
    29/10/2015 163 Plan • Le packagejava.net • La classe java.net.URLPermission Formation Les nouveautés Java 8 alphorm.com™©
  • 164.
    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
  • 165.
    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™©
  • 166.
    29/10/2015 166 Ce qu’on acouvert • Le package java.net • La classe java.net.URLPermission Formation Les nouveautés Java 8 alphorm.com™©
  • 167.
    29/10/2015 167 Le tri parallèle Lescollections Formation Les nouveautés Java 8 alphorm.com™© Le tri parallèle Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 168.
    29/10/2015 168 Plan • La classeArrays • Différence entre sort() et parallelSort() Formation Les nouveautés Java 8 alphorm.com™©
  • 169.
    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™©
  • 170.
    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
  • 171.
    29/10/2015 171 Ce qu’on acouvert • La classe Arrays • Différence entre sort() et parallelSort() Formation Les nouveautés Java 8 alphorm.com™©
  • 172.
    29/10/2015 172 Encodage Base64 Les collections FormationLes nouveautés Java 8 alphorm.com™© Encodage Base64 Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 173.
    29/10/2015 173 Plan • La classejava.util.Base64 • Usages de l’encodage Formation Les nouveautés Java 8 alphorm.com™©
  • 174.
    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 rn • Méthode getEncoder(), getDecoder()…
  • 175.
    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
  • 176.
    29/10/2015 176 Ce qu’on acouvert • La classe java.util.Base64 • Usages de l’encodage Formation Les nouveautés Java 8 alphorm.com™©
  • 177.
    29/10/2015 177 L’arithmétique non signée Lescollections Formation Les nouveautés Java 8 alphorm.com™© L’arithmétique non signée Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 178.
    29/10/2015 178 Plan • Types signéset non-signés • Les méthodes de Integer et Long Formation Les nouveautés Java 8 alphorm.com™©
  • 179.
    29/10/2015 179 Types signés etnon-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
  • 180.
    29/10/2015 180 Les méthodes deInteger 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
  • 181.
    29/10/2015 181 Ce qu’on acouvert • Types signés et non-signés • Les méthodes de Integer et Long Formation Les nouveautés Java 8 alphorm.com™©
  • 182.
    29/10/2015 182 La ligne decommande Les outils Formation Les nouveautés Java 8 alphorm.com™© La ligne de commande Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 183.
    29/10/2015 183 Plan • L’outil jjs •L’outil jdeps • L’outil javac -h Formation Les nouveautés Java 8 alphorm.com™©
  • 184.
    29/10/2015 184 L’outil jjs • Moteurjavascript 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™©
  • 185.
    29/10/2015 185 L’outil jdeps • Unoutil 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™©
  • 186.
    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™©
  • 187.
    29/10/2015 187 Ce qu’on acouvert • L’outil jjs • L’outil jdeps • L’outil javac -h Formation Les nouveautés Java 8 alphorm.com™©
  • 188.
    29/10/2015 188 Nashorn Les outils Formation Lesnouveautés Java 8 alphorm.com™© Nashorn Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 189.
    29/10/2015 189 Plan • Nouveau moteurjavascript • Extensions • Encapsulable Formation Les nouveautés Java 8 alphorm.com™©
  • 190.
    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
  • 191.
    29/10/2015 191 Extensions • Les applicationsJavaFX 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™©
  • 192.
    29/10/2015 192 Encapsulable • L’interaction avecJava devient plus simple • Une application Java peut exécuter du Javascript de façon simple Formation Les nouveautés Java 8 alphorm.com™©
  • 193.
    29/10/2015 193 Ce qu’on acouvert • Nouveau moteur javascript • Extensions • Encapsulable Formation Les nouveautés Java 8 alphorm.com™©
  • 194.
    29/10/2015 194 Les profils compacts Lesoutils Formation Les nouveautés Java 8 alphorm.com™© Les profils compacts Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 195.
    29/10/2015 195 Plan • Définition etintérêt • Composition des profils Formation Les nouveautés Java 8 alphorm.com™©
  • 196.
    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™©
  • 197.
    29/10/2015 197 Composition des profils •Chaque profils apporte des éléments Formation Les nouveautés Java 8 alphorm.com™©
  • 198.
    29/10/2015 198 Ce qu’on acouvert • Définition et intérêt • Composition des profils Formation Les nouveautés Java 8 alphorm.com™©
  • 199.
    29/10/2015 199 Le thème Modena JavaFX FormationLes nouveautés Java 8 alphorm.com™© Le thème Modena Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 200.
    29/10/2015 200 Plan • Un nouveauthème • Nouveaux contrôles Formation Les nouveautés Java 8 alphorm.com™©
  • 201.
    29/10/2015 201 Un nouveau thème •Remplace Caspian Formation Les nouveautés Java 8 alphorm.com™©
  • 202.
    29/10/2015 202 Nouveaux contrôles Formation Lesnouveautés Java 8 alphorm.com™©
  • 203.
    29/10/2015 203 Ce qu’on acouvert • Un nouveau thème • Nouveaux contrôles Formation Les nouveautés Java 8 alphorm.com™©
  • 204.
    29/10/2015 204 Encapsulation de Swing JavaFX FormationLes nouveautés Java 8 alphorm.com™© Encapsulation de Swing dans JavaFX Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 205.
    29/10/2015 205 Plan • La classeSwingNode • Encapsuler un SwingNode Formation Les nouveautés Java 8 alphorm.com™©
  • 206.
    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™©
  • 207.
    29/10/2015 207 Encapsuler un composantSwing • Créer un objet SwingNode • Ajouter ce nœud au contenu de la scène Formation Les nouveautés Java 8 alphorm.com™©
  • 208.
    29/10/2015 208 Ce qu’on acouvert • La classe SwingNode • Encapsuler un SwingNode Formation Les nouveautés Java 8 alphorm.com™©
  • 209.
    29/10/2015 209 Le contrôle WebView JavaFX FormationLes nouveautés Java 8 alphorm.com™© Le contrôle WebView Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 210.
    29/10/2015 210 Plan • La classeWebView • Interaction Java/Javascript Formation Les nouveautés Java 8 alphorm.com™©
  • 211.
    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™©
  • 212.
    29/10/2015 212 Interaction Java/Javascript • Uneapplication 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™©
  • 213.
    29/10/2015 213 Ce qu’on acouvert • La classe WebView • Interaction Java/Javascript Formation Les nouveautés Java 8 alphorm.com™©
  • 214.
    29/10/2015 214 Conclusion Formation Java8 Formation Lesnouveautés Java 8 alphorm.com™© Conclusion Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels
  • 215.
    29/10/2015 215 Plan de laformation • 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
  • 216.
    29/10/2015 216 Les autres formationsdév sur Alphorm Formation Les nouveautés Java 8 alphorm.com™©
  • 217.
    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™©
  • 218.
    29/10/2015 218 Merci d’avoir suivicette formation, Formation Les nouveautés Java 8 alphorm.com™© rendez-vous pour la suite !