29/10/2015
1
Formation Java8
Formation Les nouveautés Java 8 alphorm.com™©
Site : http://www.alphorm.com
Blog : http://blo...
29/10/2015
2
Plan
• Présentation de votre formateur
• Qu’est ce que c’est Java8 ?
• Présentation de votre formation
• Le p...
29/10/2015
3
Présentation du formateur
• Fabien Brissonneau
• Email : fabien.brissonneau@gmail.com
• Consultant Concepteur...
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’appar...
29/10/2015
6
Plan de la formation
• La nouvelle syntaxe
• Les interfaces fonctionnelles
• Le langage
• Les streams
• Les c...
29/10/2015
7
Publics concernés
• Cette formation s’adresse à des développeurs
• Connaître Java est nécessaire, ne pas être...
29/10/2015
8
Prérequis de la formation
• Savoir lire du code Java
• Avoir des rudiments sur les interfaces graphiques
• Et...
29/10/2015
9
Les outils nécessaires
• Le SDK Java8
• L’outil Netbeans est utilisé en interface de développement
• La prése...
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
Si...
29/10/2015
13
Plan
• La syntaxe des expressions lambdas
• Usage des expressions lambdas
Formation Les nouveautés Java 8 al...
29/10/2015
14
La syntaxe des expressions lambdas
• La liste des paramètres
Le type est optionnel
Les parenthèses peuvent ê...
29/10/2015
15
Usage des expressions lambdas
• Le besoin d’expressions courtes
• L’expression de prédicat
Une fonction cour...
29/10/2015
16
Ce qu’on a couvert
• La syntaxe des expressions lambdas
• Usage des expressions lambdas
Formation Les nouvea...
29/10/2015
17
EL et classes
La nouvelle syntaxe
Formation Les nouveautés Java 8 alphorm.com™©
EL et classes
anonymes
Site ...
29/10/2015
18
Plan
• Créer une fonction de rappel
• Créer une classe anonyme
• Utiliser une expression lambda
Formation Le...
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, ...
29/10/2015
20
Créer une classe anomyne
• Une classe anonyme est une classe interne
• Nous nous débarrassons de l’obligatio...
29/10/2015
21
Utiliser une expression lambda
• La plus courte des expressions
• Pas de classe à déclarer
• Focalisée sur l...
29/10/2015
22
Ce qu’on a couvert
• Créer une fonction de rappel
• Créer une classe anonyme
• Utiliser une expression lambd...
29/10/2015
23
Les limites des
La nouvelle syntaxe
Formation Les nouveautés Java 8 alphorm.com™©
Les limites des
expression...
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 son...
29/10/2015
26
Les captures
• Une expression lambda accède
• Aux variables locales
• Aux variables attributs de la classe
F...
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 d...
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 doi...
29/10/2015
31
Les méthodes par défaut
• Une implémentation fournit dans l’interface
• Pas obligatoire de la redéfinir
• De...
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éthod...
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...
29/10/2015
36
La solution nouvelle
• Il est possible de référencer une méthode
• Conforme à une signature particulière
• P...
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://ww...
29/10/2015
39
Plan
• Définition
• Exemples de SAM
• Les SAM et les expressions lambdas
Formation Les nouveautés Java 8 alp...
29/10/2015
40
Définition
• Single Abstract Method
• Une interface avec une seule méthode déclarée
• Une interface qui exis...
29/10/2015
41
Exemple de SAM
• Les interfaces à une seule méthode existent en nombre en Java
• Pour l’ihm
ActionListener :...
29/10/2015
42
Les SAM et les expressions lambdas
• Une SAM peut être avantageusement remplacée
• Pas besoin de créer une c...
29/10/2015
43
Ce qu’on a couvert
• Définition
• Exemples de SAM
• Les SAM et les expressions lambdas
Formation Les nouveau...
29/10/2015
44
@FunctionalInterface
Les interfaces fonctionnelles
Formation Les nouveautés Java 8 alphorm.com™©
@Functional...
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 utili...
29/10/2015
47
Usage des interfaces fonctionnelles
• Définit une signature pour la méthode qu’elle propose
Les types et nom...
29/10/2015
48
Cas d’erreur
• Une interface fonctionnelle
• Possède une seule méthode et non plusieurs
• Impose les types d...
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://...
29/10/2015
51
Plan
• L’interface Function<T,R>
• L’interface UnaryOperator<T>
• L’interface BiFunction<T,U,R>
• L’interfac...
29/10/2015
52
L’interface Function<T,R>
• Une interface fonctionnelle
• Qui accepte un paramètre et retourne une valeur
• ...
29/10/2015
53
L’interface UnaryOperator<T>
• Sous interface de Function<T,R>
• La méthode apply retourne le même type que ...
29/10/2015
54
L’interface BiFunction<T,U,R>
• Une interface fonctionnelle
• Qui accepte deux paramètres et retourne une va...
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...
29/10/2015
56
Ce qu’on a couvert
• L’interface Function<T,R>
• L’interface UnaryOperator<T>
• L’interface BiFunction<T,U,R...
29/10/2015
57
Predicate
Les interfaces fonctionnelles
Formation Les nouveautés Java 8 alphorm.com™©
Predicate
Site : http:...
29/10/2015
58
Plan
• L’interface Predicate<T>
• L’interface BiPredicate<T,U>
• L’interface DoublePredicate
• L’interface I...
29/10/2015
59
L’interface Predicate<T>
• Représente une fonction qui prend un T
• Et retourne un booléen
• La méthode fonc...
29/10/2015
60
L’interface BiPredicate<T,U>
• Interface fonctionnelle Predicate pour 2 paramètres
• La méthode fonctionnell...
29/10/2015
61
L’interface DoublePredicate
• Interface fonctionnelle
• La méthode fonctionnelle est test
• Mais le paramètr...
29/10/2015
62
L’interface IntPredicate
• Interface fonctionnelle
• La méthode fonctionnelle est test
• Mais le paramètre e...
29/10/2015
63
L’interface LongPredicate
• Interface fonctionnelle
• La méthode fonctionnelle est test
• Mais le paramètre ...
29/10/2015
64
Ce qu’on a couvert
• L’interface Predicate<T>
• L’interface BiPredicate<T,U>
• L’interface DoublePredicate
•...
29/10/2015
65
Supplier
Les interfaces fonctionnelles
Formation Les nouveautés Java 8 alphorm.com™©
Supplier
Site : http://...
29/10/2015
66
Plan
• L’interface Supplier<T>
• L’interface BooleanSupplier
• L’interface DoubleSupplier
• L’interface IntS...
29/10/2015
67
L’interface Supplier<T>
• Interface fonctionnelle typée par le résultat attendu
• La méthode fonctionnelle e...
29/10/2015
68
L’interface BooleanSupplier
• Interface fonctionnelle représentant la production de booléens
• La méthode fo...
29/10/2015
69
L’interface DoubleSupplier
• Interface fonctionnelle représentant la production de double
• La méthode fonct...
29/10/2015
70
L’interface IntSupplier
• Interface fonctionnelle représentant la production de int
• La méthode fonctionnel...
29/10/2015
71
L’interface LongSupplier
• Interface fonctionnelle représentant la production de long
• La méthode fonctionn...
29/10/2015
72
Ce qu’on a couvert
• L’interface Supplier<T>
• L’interface BooleanSupplier
• L’interface DoubleSupplier
• L’...
29/10/2015
73
Consumer
Les interfaces fonctionnelles
Formation Les nouveautés Java 8 alphorm.com™©
Consumer
Site : http://...
29/10/2015
74
Plan
• L’interface Consumer<T>
• L’interface DoubleConsumer
• L’interface IntConsumer
• L’interface LongCons...
29/10/2015
75
L’interface Consumer<T>
• Interface fonctionnelle consommant des objets T
• La méthode fonctionnelle est acc...
29/10/2015
76
L’interface DoubleConsumer
• Interface spécialisée pour les double
• La méthode fonctionnelle accept(double)...
29/10/2015
77
L’interface IntConsumer
• Interface spécialisée pour les int
• La méthode fonctionnelle accept(int) ne prend...
29/10/2015
78
L’interface LongConsumer
• Interface spécialisée pour les long
• La méthode fonctionnelle accept(long) ne pr...
29/10/2015
79
L’interface ObjDoubleConsumer<T>
• Interface fonctionnelle acceptant 2 paramètres
• La méthode accept est la...
29/10/2015
80
L’interface ObjIntConsumer<T>
• Interface fonctionnelle acceptant 2 paramètres
• La méthode accept est la mé...
29/10/2015
81
L’interface ObjLongConsumer<T>
• Interface fonctionnelle acceptant 2 paramètres
• La méthode accept est la m...
29/10/2015
82
Ce qu’on a couvert
• L’interface Consumer<T>
• L’interface DoubleConsumer
• L’interface IntConsumer
• L’inte...
29/10/2015
83
Les annotations
Le langage
Formation Les nouveautés Java 8 alphorm.com™©
Les annotations
répétables
Site : h...
29/10/2015
84
Plan
• La base
• Les annotations classiques
• Les annotations répétables
Formation Les nouveautés Java 8 alp...
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...
29/10/2015
86
Les annotations classiques
• Une annotation s’applique lors de la déclaration d’une classe, champ,
méthode, ...
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
...
29/10/2015
88
Ce qu’on a couvert
• La base
• Les annotations classiques
• Les annotations répétables
Formation Les nouveau...
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 :...
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 no...
29/10/2015
91
La réflexion en Java
• La classe est le descripteur des objets
• Les objets connaissent leur classe
• Trouve...
29/10/2015
92
Les limites de la reflexion
• Eventuel problème de performance
• La perte de contrôle de type lors de la 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 c...
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
Fo...
29/10/2015
95
Les optional
Le langage
Formation Les nouveautés Java 8 alphorm.com™©
Les optional
Site : http://www.alphorm...
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 ...
29/10/2015
98
La classe Optional<T>
• Encapsule une valeur de type T
• Cette valeur peut être absente
• Méthodes :
Retourn...
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.uti...
29/10/2015
101
Plan
• L’interface BaseStream<>
• L’interface Stream<T>
• Les interfaces spécialisées
• Les interfaces Stre...
29/10/2015
102
L’interface BaseStream<>
• Interface de base de toutes les interfaces Stream
• Les streams sont des séquenc...
29/10/2015
103
L’interface Stream<T>
• Sous-interface de BaseStream
• Manipule des objets Java
• Obtenu à partir d’une sou...
29/10/2015
104
Les interfaces spécialisées
• DoubleStream, IntStream, LongStream
• Ce sont des spécialisations de Stream p...
29/10/2015
105
Les interfaces Stream.Builder
• Existent aussi sur DoubleStream, IntStream et LongStream
• Permet de créer ...
29/10/2015
106
Ce qu’on a couvert
• L’interface BaseStream<>
• L’interface Stream<T>
• Les interfaces spécialisées
• Les i...
29/10/2015
107
Les opérations sur Streams
Les streams
Formation Les nouveautés Java 8 alphorm.com™©
Les opérations sur Str...
29/10/2015
108
Plan
• Méthodes intermédiaires
• Méthodes terminales
• La classe Collectors
Formation Les nouveautés Java 8...
29/10/2015
109
Méthodes intermédiaires
• Méthode distinct : retourne un Stream dont les éléments sont distincts
• Méthode ...
29/10/2015
110
Méthodes intermédiaires
• Méthode map(Function) : … dont les éléments sont l’application de la
fonction à c...
29/10/2015
111
Méthodes terminales
• Méthode allMatch (Predicate) : retourne vrai si chaque élément vérifie le
prédicat
• ...
29/10/2015
112
Méthodes terminales
• Méthode noneMatch(Predicate) : retourne vrai si aucun élément ne
vérifie le prédicat
...
29/10/2015
113
La classe Collectors
• Une classe de service dans java.util.stream
• Fournit des réductions
Formation Les n...
29/10/2015
114
Ce qu’on a couvert
• Méthodes intermédiaires
• Méthodes terminales
• La classe Collectors
Formation Les nou...
29/10/2015
115
Les Streams parallèles
Les streams
Formation Les nouveautés Java 8 alphorm.com™©
Les Streams parallèles
Sit...
29/10/2015
116
Plan
• Obtention de Streams parallèles
• Les effets du parallèlisme
Formation Les nouveautés Java 8 alphorm...
29/10/2015
117
Obtention de Streams parallèles
• Les Streams peuvent être séquentiels ou parallèles
• Les Streams parallèl...
29/10/2015
118
Les effets du parallèlisme
• Paralléliser doit être plus rapide, efficace
• Mais cette efficacité supposée ...
29/10/2015
119
Ce qu’on a couvert
• Obtention de Streams parallèles
• Les effets du parallèlisme
Formation Les nouveautés ...
29/10/2015
120
Les classes de dates
Les dates
Formation Les nouveautés Java 8 alphorm.com™©
Les classes de dates
Site : ht...
29/10/2015
121
Plan
• Les objectifs de l’API Date
• Les classes LocalDate et LocalTime
• Les classes de zones
• Les classe...
29/10/2015
122
Les objectifs de l’API Date
• Un nouveau package apparaît : java.time
• Les classes sont « immutable value ...
29/10/2015
123
Les classes LocalDate et LocalTime
• Ce sont des classes qui représentent date et heure sur le poste couran...
29/10/2015
124
Les classes LocalDate et LocalTime
• La classe la « modification » des données se fait avec with
• Les « aj...
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 ...
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 d...
29/10/2015
127
Les chronologies
• Un package java.time.chrono
• Une interface Chronology, représentant un système calendai...
29/10/2015
128
Ce qu’on a couvert
• Les objectifs de l’API Date
• Les classes LocalDate et LocalTime
• Les classes de zone...
29/10/2015
129
La gestion du temps
Les dates
Formation Les nouveautés Java 8 alphorm.com™©
La gestion du temps
Site : http...
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 LocalD...
29/10/2015
132
La gestion du temps zoné
• La classe ZonedDateTime
• Les créateurs of, now, …
• Les modificateurs plus, min...
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 a...
29/10/2015
134
Le format date et heure
Les dates
Formation Les nouveautés Java 8 alphorm.com™©
Le format date et heure
Sit...
29/10/2015
135
Plan
• Le package java.time.format
• La classe DateTimeFormatter
• La classe DateTimeFormatterBuilder
Forma...
29/10/2015
136
Le package java.time.format
• Fournit des classes pour afficher et parser des dates
• La classe DateTimeFor...
29/10/2015
137
La classe DateTimeFormatter
• Cette classe proposent de formatter des dates en chaînes de caractères
ou de ...
29/10/2015
138
La classe DateTimeFormatterBuilder
• Le builder de base des DateTimeFormatter
• Il permet de faire apparaît...
29/10/2015
139
Ce qu’on a couvert
• Le package java.time.format
• La classe DateTimeFormatter
• La classe DateTimeFormatte...
29/10/2015
140
Les chronologies
Les dates
Formation Les nouveautés Java 8 alphorm.com™©
Les chronologies
Site : http://www...
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 s...
29/10/2015
143
Manipuler les chronologies
• Trouver les chronologies disponibles
• Créer une date : dateNow, date, dateYea...
29/10/2015
144
Ce qu’on a couvert
• Le package java.time.chrono
• Manipuler les chronologies
Formation Les nouveautés Java...
29/10/2015
145
L’internationalisation
Les dates
Formation Les nouveautés Java 8 alphorm.com™©
L’internationalisation
Site ...
29/10/2015
146
Plan
• Les dates selon les chronologies
• Les possibilités de DateTimeFormatter
Formation Les nouveautés Ja...
29/10/2015
147
Les dates selon les chronologies
• Chaque chronologie a sa propre représentation
• Un style de date et d’he...
29/10/2015
148
Les possibilités de DateTimeFormatter
• Méthodes ofLocalizedDate, Time
• Des formatters prédéfinis : BASIC_...
29/10/2015
149
Ce qu’on a couvert
• Les dates selon les chronologies
• Les possibilités de DateTimeFormatter
Formation Les...
29/10/2015
150
Package java.util.concurrent
La concurrence
Formation Les nouveautés Java 8 alphorm.com™©
Package java.util...
29/10/2015
151
Plan
• Les nouvelles classes et interfaces
• La classe ConcurrentHashMap
• Le package java.util.concurrent....
29/10/2015
152
Les nouvelles classes et interfaces
• CompletableFuture.AsynchronousCompletionTask : marque les tâches
crée...
29/10/2015
153
La classe ConcurrentHashMap
• Nouvelles méthodes ajoutées
• Dues à la gestion de Streams et l’apparition de...
29/10/2015
154
Le package java.util.concurrent.atomic
• La classe DoubleAccumulator : maintenir une variable double
• La c...
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.ut...
29/10/2015
157
La classe StampedLock
La concurrence
Formation Les nouveautés Java 8 alphorm.com™©
La classe StampedLock
Si...
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...
29/10/2015
160
Usages du StampedLock
• Utiles pour le développement de composants thread-safe
• Ils ne sont pas réentrants...
29/10/2015
161
Ce qu’on a couvert
• La classe StampedLock
• Usages de StampedLock
Formation Les nouveautés Java 8 alphorm....
29/10/2015
162
java.net.URLPermission
La concurrence
Formation Les nouveautés Java 8 alphorm.com™©
java.net.URLPermission
...
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 n...
29/10/2015
165
La classe URLPermission
• Représente la permission d’accéder à une ressource
• Les constructeurs ont besoin...
29/10/2015
166
Ce qu’on a couvert
• Le package java.net
• La classe java.net.URLPermission
Formation Les nouveautés Java 8...
29/10/2015
167
Le tri parallèle
Les collections
Formation Les nouveautés Java 8 alphorm.com™©
Le tri parallèle
Site : http...
29/10/2015
168
Plan
• La classe Arrays
• Différence entre sort() et parallelSort()
Formation Les nouveautés Java 8 alphorm...
29/10/2015
169
La classe Arrays
• Du package java.util
• Contient des méthodes utilitaires pour les tableaux
• Contient de...
29/10/2015
170
Différences entre sort() et parallelSort()
• La méthode sort s’applique à toute sorte d’éléments
• Avec ind...
29/10/2015
171
Ce qu’on a couvert
• La classe Arrays
• Différence entre sort() et parallelSort()
Formation Les nouveautés ...
29/10/2015
172
Encodage Base64
Les collections
Formation Les nouveautés Java 8 alphorm.com™©
Encodage Base64
Site : http:/...
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 type...
29/10/2015
175
Usages de l’encodage
• Base64 est un codage de l’information
• Défini comme encodage MIME
• Parce que les p...
29/10/2015
176
Ce qu’on a couvert
• La classe java.util.Base64
• Usages de l’encodage
Formation Les nouveautés Java 8 alph...
29/10/2015
177
L’arithmétique non signée
Les collections
Formation Les nouveautés Java 8 alphorm.com™©
L’arithmétique non ...
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...
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’i...
29/10/2015
180
Les méthodes de Integer et Long
• Méthodes qui manipulent des données non signées
• La méthode compareUnsig...
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 ...
29/10/2015
182
La ligne de commande
Les outils
Formation Les nouveautés Java 8 alphorm.com™©
La ligne de commande
Site : h...
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éte...
29/10/2015
185
L’outil jdeps
• Un outil pour analyser les dépendances entre les classes
• Se lance sur une classe et reche...
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 p...
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...
29/10/2015
188
Nashorn
Les outils
Formation Les nouveautés Java 8 alphorm.com™©
Nashorn
Site : http://www.alphorm.com
Blog...
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 normali...
29/10/2015
191
Extensions
• Les applications JavaFX sont exécutables comme scripts
• Le mode strict du Javascript est acti...
29/10/2015
192
Encapsulable
• L’interaction avec Java devient plus simple
• Une application Java peut exécuter du Javascri...
29/10/2015
193
Ce qu’on a couvert
• Nouveau moteur javascript
• Extensions
• Encapsulable
Formation Les nouveautés Java 8 ...
29/10/2015
194
Les profils compacts
Les outils
Formation Les nouveautés Java 8 alphorm.com™©
Les profils compacts
Site : h...
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 l...
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 alphor...
29/10/2015
199
Le thème Modena
JavaFX
Formation Les nouveautés Java 8 alphorm.com™©
Le thème Modena
Site : http://www.alph...
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 Jav...
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 composa...
29/10/2015
207
Encapsuler un composant Swing
• Créer un objet SwingNode
• Ajouter ce nœud au contenu de la scène
Formation...
29/10/2015
208
Ce qu’on a couvert
• La classe SwingNode
• Encapsuler un SwingNode
Formation Les nouveautés Java 8 alphorm....
29/10/2015
209
Le contrôle WebView
JavaFX
Formation Les nouveautés Java 8 alphorm.com™©
Le contrôle WebView
Site : http://...
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 ...
29/10/2015
212
Interaction Java/Javascript
• Une application web peut communiquer avec l’application JavaFX
• Le moteur we...
29/10/2015
213
Ce qu’on a couvert
• La classe WebView
• Interaction Java/Javascript
Formation Les nouveautés Java 8 alphor...
29/10/2015
214
Conclusion
Formation Java8
Formation Les nouveautés Java 8 alphorm.com™©
Conclusion
Site : http://www.alpho...
29/10/2015
215
Plan de la formation
• La nouvelle syntaxe
• Les interfaces fonctionnelles
• Le langage
• Les streams
• Les...
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 …
...
29/10/2015
218
Merci d’avoir suivi cette formation,
Formation Les nouveautés Java 8 alphorm.com™©
rendez-vous pour la suit...
Prochain SlideShare
Chargement dans…5
×

Alphorm.com Java 8: les nouveautés

8 250 vues

Publié le

Formation complète ici:
http://www.alphorm.com/tutoriel/formation-en-ligne-java-8-les-nouveautes

La formation va concerner tous les horizons nouveaux de Java : nous commencerons par les nouveautés syntaxiques, comme les expressions lambdas, couplées ou non aux streams, qui ouvrent la porte à une nouvelle façon de programmer.

La formation va aussi dévoiler des nouveautés dans les APIs Java, dans les classes de collections, les classes de gestion de la concurrence et des réseaux.
La partie graphique avec JavaFX sera présentée, puisque cette API remplace Swing à compter de Java8.

Ensuite nous présenterons les nouvelles classes de gestion des dates et du temps.
Les nouveautés dans le domaine de la sécurité seront abordées, avec le support de nouveaux algorithmes.

Enfin, nous parlerons des outils nouveaux ou modifiés, y compris le moteur js.

Publié dans : Technologie
0 commentaire
3 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
8 250
Sur SlideShare
0
Issues des intégrations
0
Intégrations
5 320
Actions
Partages
0
Téléchargements
359
Commentaires
0
J’aime
3
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Alphorm.com Java 8: les nouveautés

  1. 1. 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
  2. 2. 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
  3. 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. 4. 29/10/2015 4 Mes formations sur alphorm Formation Les nouveautés Java 8 alphorm.com™©
  5. 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. 6. 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
  7. 7. 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™©
  8. 8. 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™©
  9. 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. 10. 29/10/2015 10 Les autres formations dév sur Alphorm Formation Les nouveautés Java 8 alphorm.com™©
  11. 11. 29/10/2015 11 Are you ready ? ☺ Formation Les nouveautés Java 8 alphorm.com™©
  12. 12. 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
  13. 13. 29/10/2015 13 Plan • La syntaxe des expressions lambdas • Usage des expressions lambdas Formation Les nouveautés Java 8 alphorm.com™©
  14. 14. 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
  15. 15. 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
  16. 16. 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™©
  17. 17. 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
  18. 18. 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™©
  19. 19. 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™©
  20. 20. 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™©
  21. 21. 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™©
  22. 22. 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™©
  23. 23. 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
  24. 24. 29/10/2015 24 Plan • Les variables locales • Les captures Formation Les nouveautés Java 8 alphorm.com™©
  25. 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. 26. 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™©
  27. 27. 29/10/2015 27 Ce qu’on a couvert • Les variables locales • Les captures Formation Les nouveautés Java 8 alphorm.com™©
  28. 28. 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. 29. 29/10/2015 29 Plan • Les problèmes • Les méthodes par défaut Formation Les nouveautés Java 8 alphorm.com™©
  30. 30. 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™©
  31. 31. 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™©
  32. 32. 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™©
  33. 33. 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
  34. 34. 29/10/2015 34 Plan • Le problème • La solution nouvelle Formation Les nouveautés Java 8 alphorm.com™©
  35. 35. 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
  36. 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. 37. 29/10/2015 37 Ce qu’on a couvert • Le problème • La solution nouvelle Formation Les nouveautés Java 8 alphorm.com™©
  38. 38. 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
  39. 39. 29/10/2015 39 Plan • Définition • Exemples de SAM • Les SAM et les expressions lambdas Formation Les nouveautés Java 8 alphorm.com™©
  40. 40. 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™©
  41. 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. 42. 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™©
  43. 43. 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™©
  44. 44. 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
  45. 45. 29/10/2015 45 Plan • Définition • Cas d’erreur Formation Les nouveautés Java 8 alphorm.com™©
  46. 46. 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™©
  47. 47. 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
  48. 48. 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™©
  49. 49. 29/10/2015 49 Ce qu’on a couvert • Définition • Cas d’erreur Formation Les nouveautés Java 8 alphorm.com™©
  50. 50. 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
  51. 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. 52. 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
  53. 53. 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™©
  54. 54. 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
  55. 55. 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™©
  56. 56. 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™©
  57. 57. 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
  58. 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. 59. 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é
  60. 60. 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
  61. 61. 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™©
  62. 62. 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™©
  63. 63. 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™©
  64. 64. 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
  65. 65. 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
  66. 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. 67. 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™©
  68. 68. 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™©
  69. 69. 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™©
  70. 70. 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™©
  71. 71. 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™©
  72. 72. 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
  73. 73. 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
  74. 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. 75. 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
  76. 76. 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™©
  77. 77. 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™©
  78. 78. 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™©
  79. 79. 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
  80. 80. 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
  81. 81. 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
  82. 82. 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>
  83. 83. 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
  84. 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. 85. 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™©
  86. 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. 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. 88. 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™©
  89. 89. 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
  90. 90. 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™©
  91. 91. 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 …
  92. 92. 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™©
  93. 93. 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™©
  94. 94. 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™©
  95. 95. 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
  96. 96. 29/10/2015 96 Plan • Le problème • La classe Optional<T> Formation Les nouveautés Java 8 alphorm.com™©
  97. 97. 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™©
  98. 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. 99. 29/10/2015 99 Ce qu’on a couvert • Le problème • La classe Optional<T> Formation Les nouveautés Java 8 alphorm.com™©
  100. 100. 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
  101. 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. 102. 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()
  103. 103. 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
  104. 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. 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. 106. 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™©
  107. 107. 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
  108. 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. 109. 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
  110. 110. 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
  111. 111. 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
  112. 112. 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
  113. 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. 114. 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™©
  115. 115. 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
  116. 116. 29/10/2015 116 Plan • Obtention de Streams parallèles • Les effets du parallèlisme Formation Les nouveautés Java 8 alphorm.com™©
  117. 117. 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()
  118. 118. 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™©
  119. 119. 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™©
  120. 120. 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
  121. 121. 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
  122. 122. 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
  123. 123. 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™©
  124. 124. 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
  125. 125. 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
  126. 126. 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
  127. 127. 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,…
  128. 128. 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
  129. 129. 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
  130. 130. 29/10/2015 130 Plan • La gestion du temps local • La gestion du temps zoné Formation Les nouveautés Java 8 alphorm.com™©
  131. 131. 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
  132. 132. 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()
  133. 133. 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™©
  134. 134. 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
  135. 135. 29/10/2015 135 Plan • Le package java.time.format • La classe DateTimeFormatter • La classe DateTimeFormatterBuilder Formation Les nouveautés Java 8 alphorm.com™©
  136. 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. 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. 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. 139. 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™©
  140. 140. 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
  141. 141. 29/10/2015 141 Plan • Le package java.time.chrono • Manipuler les chronologies Formation Les nouveautés Java 8 alphorm.com™©
  142. 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. 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. 144. 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™©
  145. 145. 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
  146. 146. 29/10/2015 146 Plan • Les dates selon les chronologies • Les possibilités de DateTimeFormatter Formation Les nouveautés Java 8 alphorm.com™©
  147. 147. 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) • …
  148. 148. 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
  149. 149. 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™©
  150. 150. 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
  151. 151. 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™©
  152. 152. 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
  153. 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. 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. 155. 29/10/2015 155 La classe ForkJoinPool • Un ajout d’une méthode commonPool() Formation Les nouveautés Java 8 alphorm.com™©
  156. 156. 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™©
  157. 157. 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
  158. 158. 29/10/2015 158 Plan • La classe StampedLock • Usages de StampedLock Formation Les nouveautés Java 8 alphorm.com™©
  159. 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. 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. 161. 29/10/2015 161 Ce qu’on a couvert • La classe StampedLock • Usages de StampedLock Formation Les nouveautés Java 8 alphorm.com™©
  162. 162. 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
  163. 163. 29/10/2015 163 Plan • Le package java.net • La classe java.net.URLPermission Formation Les nouveautés Java 8 alphorm.com™©
  164. 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. 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. 166. 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™©
  167. 167. 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
  168. 168. 29/10/2015 168 Plan • La classe Arrays • Différence entre sort() et parallelSort() Formation Les nouveautés Java 8 alphorm.com™©
  169. 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. 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. 171. 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™©
  172. 172. 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
  173. 173. 29/10/2015 173 Plan • La classe java.util.Base64 • Usages de l’encodage Formation Les nouveautés Java 8 alphorm.com™©
  174. 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. 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. 176. 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™©
  177. 177. 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
  178. 178. 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™©
  179. 179. 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
  180. 180. 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
  181. 181. 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™©
  182. 182. 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
  183. 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. 184. 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™©
  185. 185. 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™©
  186. 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. 187. 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™©
  188. 188. 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
  189. 189. 29/10/2015 189 Plan • Nouveau moteur javascript • Extensions • Encapsulable Formation Les nouveautés Java 8 alphorm.com™©
  190. 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. 191. 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™©
  192. 192. 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™©
  193. 193. 29/10/2015 193 Ce qu’on a couvert • Nouveau moteur javascript • Extensions • Encapsulable Formation Les nouveautés Java 8 alphorm.com™©
  194. 194. 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
  195. 195. 29/10/2015 195 Plan • Définition et intérêt • Composition des profils Formation Les nouveautés Java 8 alphorm.com™©
  196. 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. 197. 29/10/2015 197 Composition des profils • Chaque profils apporte des éléments Formation Les nouveautés Java 8 alphorm.com™©
  198. 198. 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™©
  199. 199. 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
  200. 200. 29/10/2015 200 Plan • Un nouveau thème • Nouveaux contrôles Formation Les nouveautés Java 8 alphorm.com™©
  201. 201. 29/10/2015 201 Un nouveau thème • Remplace Caspian Formation Les nouveautés Java 8 alphorm.com™©
  202. 202. 29/10/2015 202 Nouveaux contrôles Formation Les nouveautés Java 8 alphorm.com™©
  203. 203. 29/10/2015 203 Ce qu’on a couvert • Un nouveau thème • Nouveaux contrôles Formation Les nouveautés Java 8 alphorm.com™©
  204. 204. 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
  205. 205. 29/10/2015 205 Plan • La classe SwingNode • Encapsuler un SwingNode Formation Les nouveautés Java 8 alphorm.com™©
  206. 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. 207. 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™©
  208. 208. 29/10/2015 208 Ce qu’on a couvert • La classe SwingNode • Encapsuler un SwingNode Formation Les nouveautés Java 8 alphorm.com™©
  209. 209. 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
  210. 210. 29/10/2015 210 Plan • La classe WebView • Interaction Java/Javascript Formation Les nouveautés Java 8 alphorm.com™©
  211. 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. 212. 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™©
  213. 213. 29/10/2015 213 Ce qu’on a couvert • La classe WebView • Interaction Java/Javascript Formation Les nouveautés Java 8 alphorm.com™©
  214. 214. 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
  215. 215. 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
  216. 216. 29/10/2015 216 Les autres formations dév sur Alphorm Formation Les nouveautés Java 8 alphorm.com™©
  217. 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. 218. 29/10/2015 218 Merci d’avoir suivi cette formation, Formation Les nouveautés Java 8 alphorm.com™© rendez-vous pour la suite !

×