SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Java 8
Interfaces
antislashn.org Java 8 - interfaces 2 / 34
Introduction
● Java 8 modifie le concept d'interface, en permettant à
une interface d'avoir
● des méthodes statiques
● des méthodes par défaut
● une seule méthode abstraite, pour définir une interface
fonctionnelle
antislashn.org Java 8 - interfaces 3 / 34
Méthode statique
● Une interface peut recevoir des méthodes statiques
● une méthode statique ne peut pas être redéfinie dans une
classe fille
● ne peut pas utiliser la référence this, puisque statique
● Les méthodes statiques d'interface ne peuvent être
utilisées que sur l'interface
● par sur les classes implémentant l'interface
● classiquement, par le nom de l'interface
antislashn.org Java 8 - interfaces 4 / 34
Méthode statique
● Permet de regrouper un ensemble de fonctionnalités
dans une interface
● Améliore la sécurité, car les classes filles ne peuvent
pas redéfinir la méthode statique
● Une méthode statique ne peut pas se substituer à
une méthode de la classe Object
● erreur
– "This static method cannot hide the instance method from
Object"
antislashn.org Java 8 - interfaces 5 / 34
Méthode statique
● Exemple
public interface Foo {
static boolean isNullOrEmpty(String str) {
return str == null ? true : str.equals("") ? true : false;
}
}
antislashn.org Java 8 - interfaces 6 / 34
Méthode par défaut
● Le qualificateur default marque une méthode par
défaut
● la classe fille n'est pas obligée de fournir une
implémentation
● this est utilisable dans la méthode par défaut
– ce n'est pas une méthode statique
antislashn.org Java 8 - interfaces 7 / 34
Méthode par défaut
● Exemple
public interface Roulable
{
default void rouler(){
System.out.println("Objet pouvant rouler par défaut");
}
}
public class Ballon implements Roulable
{
}
public class De implements Roulable
{
@Override
public void rouler()
{
System.out.println("valeur obtenue : "+((int)(Math.random()*6)+1));
}
}
antislashn.org Java 8 - interfaces 8 / 34
Méthode par défaut
● Une première utilité des méthodes par défaut est
l'intégration de nouvelles fonctionnalités sans avoir à
intervenir sur le code existant
● assure la compatibilité avec le code déjà écrit pour
l'ancienne version d'une interface
antislashn.org Java 8 - interfaces 9 / 34
Méthode par défaut
● Permet d'implémenter le concept de trait en Java
● le trait, ou extension, encapsule un ensemble cohérent de
méthodes
● ensemble de méthodes concrètes pouvant être ajoutée à
une classe pour étendre ses fonctionnalités
● il est composé :
– d'une méthode abstraite
– des méthodes additionnelles implémentées par le trait et utilisant
la méthode abstraite
antislashn.org Java 8 - interfaces 10 / 34
Méthode par défaut
● Exemple de trait
● l'interface Java Comparable possède une méthode
unique compareTo()
– cette méthode renvoie un int
● il est intéressant sémantiquement d'avoir des méthodes
telles que :
– greaterThan()
– lessThan()
– isBefore()
– isAfter()
– isSame()
antislashn.org Java 8 - interfaces 11 / 34
Méthode par défaut
● Exemple de trait
● les classes concrètes implémentant Orderable auront
juste à définir la méthode compareTo(), héritée de
Comparable
public interface Odrderable<T> extends Comparable<T> {
public default boolean isAfter(T other) {
return compareTo(other) > 0;
}
public default boolean isBefore(T other) {
return compareTo(other) < 0;
}
public default boolean isSameAs(T other) {
return compareTo(other) == 0;
}
}
antislashn.org Java 8 - interfaces 12 / 34
Méthode par défaut
● Que ce passe-t-il si deux interfaces possèdent une
méthode par défaut ayant la même signature ?
● la classe qui implémente les deux interfaces doit fournir
une implémentation de la méthode
public interface InterfaceA {
default void foo() {
System.out.println("InterfaceA - foo()");
}
}
public interface InterfaceB {
default void foo() {
System.out.println("InterfaceB - foo()");
}
}
public class ABImpl implements InterfaceA, InterfaceB {
}
antislashn.org Java 8 - interfaces 13 / 34
Méthode par défaut
● Il suffit alors de fournir le code pour la méthode
foo()
● exemples d'implémentation
public class ABImpl implements InterfaceA, InterfaceB {
@Override
public void foo() {
System.out.println("ABImpl - foo()");
}
}
public class ABImpl implements InterfaceA, InterfaceB {
@Override
public void foo() {
InterfaceB.super.foo();
}
}
antislashn.org Java 8 - interfaces 14 / 34
Interface fonctionnelle
● Interface qui possède une seule méthode abstraite
● SAM : Single Abstract Method
● l'annotation @FunctionnalInterface permet au
compilateur de vérifier que l'interface ne comporte qu'une
seule méthode abstraite
● peut posséder des méthodes par défaut
@FunctionalInterface
public interface Operation
{
int compute(int x, int y);
}
antislashn.org Java 8 - interfaces 15 / 34
Interface fonctionnelle
● Objectif : définir une signature de méthode qui pourra
être utilisée pour passer en paramètre :
● une référence vers une méthode statique
● une référence vers une méthode d'instance
● une référence vers un constructeur
● une expression lambda
● Un certains nombre d'interfaces fonctionnelles sont
fournies par Java 8 dans le package
java.util.function
antislashn.org Java 8 - interfaces 16 / 34
Interface fonctionnelle
● Exemple d'interface fonctionnelle
● Exemple d'utilisation de l'interface
@FunctionalInterface
public interface Operation
{
int compute(int x, int y);
}
public class Calcul
{
public static int compute(int x, int y, Operation op){
return op.compute(x,y);
}
}
antislashn.org Java 8 - interfaces 17 / 34
Interface fonctionnelle
● Classiquement, cette interface est implémentée par
une classe
● utilisation
public class Addition implements Operation
{
@Override
public int compute(int x, int y)
{
return x+y;
}
}
...
Operation op = new Addition();
int r = Calcul.compute(2, 2, op);
...
antislashn.org Java 8 - interfaces 18 / 34
Interface fonctionnelle
● Ou passée comme classe anonyme
...
r = Calcul.compute(5, 6, new Operation()
{
@Override
public int compute(int x, int y)
{
return x-y;
}
});
...
antislashn.org Java 8 - interfaces 19 / 34
Interface fonctionnelle
● Exemple d'une interface de création
● retourne un objet fabriqué avec trois String
● Exemple de classe utilisant l'interface
@FunctionalInterface
public interface Creator<T> {
T create(String str1, String str2, String str3);
}
public class ContactParser<T> {
public T parse(String nomComplet, Creator<T> creator) {
String[] items = nomComplet.split(" ");
String civilite = items[0];
String nom = items[1];
String prenom = items[2];
return creator.create(civilite, nom, prenom);
}
}
antislashn.org Java 8 - interfaces 20 / 34
Interface fonctionnelle
● Exemple de classe Contact (extrait)
● le constructeur prend 3 paramètres de type String
public class Contact {
private String civilite;
private String nom;
private String prenom;
public Contact() {}
public Contact(String civilite, String nom, String prenom) {
this.civilite = civilite;
this.nom = nom;
this.prenom = prenom;
}
...
}
antislashn.org Java 8 - interfaces 21 / 34
Interface fonctionnelle
● Réponse de Java 8
● sans modification de l'existant nous pouvons passer toute
méthode qui
– accepte les mêmes types de paramètre
● 3 paramètres de type String
– retourne le même type
● générique T
antislashn.org Java 8 - interfaces 22 / 34
Interface fonctionnelle
● Avec Java 8, nous pouvons éviter la création d'une
classe anonyme de type Creator<Contact>
● par une référence vers le constructeur de Contact
– la syntaxe ::<method> définit une référence vers une méthode
● ici il y a bien un constructeur Contact(String,String, String)
ContactParser<Contact> parser = new ContactParser<>();
Contact contact = parser.parse("M LAGAFFE Gaston", Contact::new);
public class ContactParser<T> {
public T parse(String nomComplet, Creator<T> creator) {
,,,
return creator.create(civilite, nom, prenom);
}
}
antislashn.org Java 8 - interfaces 23 / 34
Référence à une méthode
● Syntaxe permettant de référencer directement une
méthode ou un constructeur
● opérateur ::
● référence à un constructeur par défaut
– sans paramètre
● référence à une méthode
– statique ou non
System.out::println o -> System.out.println(o)est équivalent à
antislashn.org Java 8 - interfaces 24 / 34
Référence à une méthode
● Exemples
public class Voiture
{
public static Voiture create(final Supplier<Voiture> supplier){
return supplier.get();
}
public void rouler(){
System.out.println("Rouler");
}
}
public static void main(String[] args)
{
List<Voiture> voitures = new ArrayList<>();
voitures.add(Voiture.create(Voiture::new));
voitures.add(Voiture.create(Voiture::new));
voitures.add(Voiture.create(Voiture::new));
voitures.forEach(Voiture::rouler);
}
antislashn.org Java 8 - interfaces 25 / 34
java.util.function
● Nombreuses interfaces fonctionnelles
● définies avec des types génériques
● Interfaces de base :
● Consumer
– accepte un argument T et ne retourne pas de résultat
● Function
– accepte un argument T et retourne un résultat R
● Supplier
– ne prend pas d'argument et retourne un résultat T
● Predicate
– test un valeur T et retourne un booléen
antislashn.org Java 8 - interfaces 26 / 34
java.util.function.Consumer
● Abstraction d'une opération acceptant un seul
argument et ne renvoyant aucun résultat
● méthodes
– accept(T t) : exécute une opération sur le paramètre
● méthode abstraite
– andThen(Consumer<? super T> after) : exécute
l'opération accept puis l'opération accept sur after
antislashn.org Java 8 - interfaces 27 / 34
java.util.function.Consumer
● Exemple
List<String> types = new ArrayList<>(Arrays.asList("rock","trip hop","jazz","pop","rock"));
List<String> result = new ArrayList<>();
Consumer<String> c1 = result::add;
Consumer<String> c2 = System.out::println;
Consumer<String> c3 = c1.andThen(c2);
types.stream().forEach(c3); // BAD PATTERN (result::add)
System.out.println(result);
antislashn.org Java 8 - interfaces 28 / 34
java.util.function.Supplier
● Abstraction d'une fonction retournant une valeur
● le Supplier produit une valeur
– abstraction d'un factory
● le Consumer consomme une valeur
● méthode
– T get() : produit une valeur de type T
● méthode abstraite
antislashn.org Java 8 - interfaces 29 / 34
java.util.function.Supplier
● Exemples
Supplier<Point> pointSupplier = new Supplier<Point>(){
private int i = 0;
@Override
public Point get(){
i++;
return new Point(i,i);
}
};
Point p1 = pointSupplier.get();
Point p2 = pointSupplier.get();
Supplier<Point> pointSupplier = Point::new;
Point p1 = pointSupplier.get();
Point p2 = pointSupplier.get();
antislashn.org Java 8 - interfaces 30 / 34
java.util.function.Function
● Abstraction d'une fonction acceptant un paramètre et
retournant un résultat
● Function<T,R> : T argument, R résultat
● méthodes
– R apply(T t) : applique la fonction à l'argument t
– <T> Function<T,T> identity() : retourne toujours l'argument
– <V> Function<R,V> andThen(Function<R,V> after) :
retourne une fonction qui applique la fonction, puis applique after sur
le résultat
– <V> Function<V,R> compose(Function<V,T> before) :
retourne une fonction qui applique before, puis applique la fonction
sur le résultat de before
antislashn.org Java 8 - interfaces 31 / 34
java.util.function.Function
● Exemple
List<Point> points = new ArrayList<>();
initPoints(points);
Function<Point,Integer> f1 = p -> p.getX();
Stream<Point> stream = points.stream();
Stream<Integer> xs = stream.map(f1);
xs.forEach(System.out::println);
antislashn.org Java 8 - interfaces 32 / 34
java.util.function.Predicate
● Abstraction d'un prédicat (fonction retournant true
ou false)
● méthodes
– test(T t) : évalue le prédicat sur t
● méthode abstraite
– and(), or(), isEqual(), negate() : permet l'évaluation et le
chaînage des prédicats
antislashn.org Java 8 - interfaces 33 / 34
java.util.function.Predicate
● Exemple
List<String> types = new ArrayList<>(Arrays.asList("rock","trip hop","jazz","pop","rock"));
Predicate<String> p1 = s -> s.length() >3;
Predicate<String> p2 = s -> s.length() <5;
List<String> result = types.stream().filter(p1.and(p2)).collect(Collectors.toList());
System.out.println(result);
antislashn.org Java 8 - interfaces 34 / 34
java.util.function
● Les interfaces de base servent à définir de
nombreuses interfaces fonctionnelles sur les types
de base
● IntConsumer
● LongToIntFunction
● DoubleSupplier
● cf. javadoc

Contenu connexe

Tendances

Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objetsAziz Darouichi
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationMouna Torjmen
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...MICHRAFY MUSTAFA
 
Exercice 2 java Héritage
Exercice 2  java HéritageExercice 2  java Héritage
Exercice 2 java HéritageNadaBenLatifa
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introductionneuros
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfacesAmir Souissi
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Aziz Darouichi
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...ENSET, Université Hassan II Casablanca
 
Cours java avance débutant facile l'essentiel swing ,events
Cours java avance débutant facile l'essentiel swing ,events Cours java avance débutant facile l'essentiel swing ,events
Cours java avance débutant facile l'essentiel swing ,events Houssem Hamrouni
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Kristen Le Liboux
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...ENSET, Université Hassan II Casablanca
 

Tendances (20)

Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
Cours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 compositeCours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 composite
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
Cours java
Cours javaCours java
Cours java
 
Cours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateurCours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateur
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
 
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...Interface fonctionnelle, Lambda expression, méthode par défaut,  référence de...
Interface fonctionnelle, Lambda expression, méthode par défaut, référence de...
 
Exercice 2 java Héritage
Exercice 2  java HéritageExercice 2  java Héritage
Exercice 2 java Héritage
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introduction
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
 
Polymorphisme
PolymorphismePolymorphisme
Polymorphisme
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
 
Cours java avance débutant facile l'essentiel swing ,events
Cours java avance débutant facile l'essentiel swing ,events Cours java avance débutant facile l'essentiel swing ,events
Cours java avance débutant facile l'essentiel swing ,events
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
 
Java RMI
Java RMIJava RMI
Java RMI
 

Similaire à Java 8 - interfaces

Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfacesAziz Darouichi
 
POO - Chapitre6.pptx
POO - Chapitre6.pptxPOO - Chapitre6.pptx
POO - Chapitre6.pptxRAYENBOUAFIF1
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?Fou Cha
 
Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8OLBATI
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 OverviewGregory Renard
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Jean-Michel Doudoux
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Foraxlyonjug
 
Chapitre4 cours de java
Chapitre4 cours de javaChapitre4 cours de java
Chapitre4 cours de javainfo1994
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinterRYMAA
 
Eric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpEric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpMSDEVMTL
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Loic Yon
 
chapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfchapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfMoez Moezm
 
Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Jean-Michel Doudoux
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07haythem_2015
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 

Similaire à Java 8 - interfaces (20)

Java 8 - lambda
Java 8 - lambdaJava 8 - lambda
Java 8 - lambda
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfaces
 
Memo java
Memo javaMemo java
Memo java
 
POO - Chapitre6.pptx
POO - Chapitre6.pptxPOO - Chapitre6.pptx
POO - Chapitre6.pptx
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?
 
Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
ExJava.pdf
ExJava.pdfExJava.pdf
ExJava.pdf
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Forax
 
Chapitre4 cours de java
Chapitre4 cours de javaChapitre4 cours de java
Chapitre4 cours de java
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinter
 
Eric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpEric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharp
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 
chapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfchapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdf
 
Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 

Plus de Franck SIMON

Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via mavenFranck SIMON
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de donnéesFranck SIMON
 
Description d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimumDescription d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimumFranck SIMON
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd trainingFranck SIMON
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMXFranck SIMON
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrenteFranck SIMON
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method EditorFranck SIMON
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuéesFranck SIMON
 
Développement Android
Développement AndroidDéveloppement Android
Développement AndroidFranck SIMON
 
Java scripting api
Java scripting apiJava scripting api
Java scripting apiFranck SIMON
 

Plus de Franck SIMON (16)

Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via maven
 
Java 9 modules
Java 9    modulesJava 9    modules
Java 9 modules
 
Java 8 - DateTime
Java 8 - DateTimeJava 8 - DateTime
Java 8 - DateTime
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de données
 
Description d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimumDescription d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimum
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd training
 
Android ORMLite
Android   ORMLiteAndroid   ORMLite
Android ORMLite
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMX
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrente
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method Editor
 
Squid
SquidSquid
Squid
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuées
 
Android NDK
Android   NDKAndroid   NDK
Android NDK
 
Développement Android
Développement AndroidDéveloppement Android
Développement Android
 
jQuery
jQueryjQuery
jQuery
 
Java scripting api
Java scripting apiJava scripting api
Java scripting api
 

Dernier

COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...Faga1939
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxRayane619450
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...Nguyen Thanh Tu Collection
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaireTxaruka
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfssuserc72852
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfachrafbrahimi1
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 

Dernier (13)

COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 

Java 8 - interfaces

  • 2. antislashn.org Java 8 - interfaces 2 / 34 Introduction ● Java 8 modifie le concept d'interface, en permettant à une interface d'avoir ● des méthodes statiques ● des méthodes par défaut ● une seule méthode abstraite, pour définir une interface fonctionnelle
  • 3. antislashn.org Java 8 - interfaces 3 / 34 Méthode statique ● Une interface peut recevoir des méthodes statiques ● une méthode statique ne peut pas être redéfinie dans une classe fille ● ne peut pas utiliser la référence this, puisque statique ● Les méthodes statiques d'interface ne peuvent être utilisées que sur l'interface ● par sur les classes implémentant l'interface ● classiquement, par le nom de l'interface
  • 4. antislashn.org Java 8 - interfaces 4 / 34 Méthode statique ● Permet de regrouper un ensemble de fonctionnalités dans une interface ● Améliore la sécurité, car les classes filles ne peuvent pas redéfinir la méthode statique ● Une méthode statique ne peut pas se substituer à une méthode de la classe Object ● erreur – "This static method cannot hide the instance method from Object"
  • 5. antislashn.org Java 8 - interfaces 5 / 34 Méthode statique ● Exemple public interface Foo { static boolean isNullOrEmpty(String str) { return str == null ? true : str.equals("") ? true : false; } }
  • 6. antislashn.org Java 8 - interfaces 6 / 34 Méthode par défaut ● Le qualificateur default marque une méthode par défaut ● la classe fille n'est pas obligée de fournir une implémentation ● this est utilisable dans la méthode par défaut – ce n'est pas une méthode statique
  • 7. antislashn.org Java 8 - interfaces 7 / 34 Méthode par défaut ● Exemple public interface Roulable { default void rouler(){ System.out.println("Objet pouvant rouler par défaut"); } } public class Ballon implements Roulable { } public class De implements Roulable { @Override public void rouler() { System.out.println("valeur obtenue : "+((int)(Math.random()*6)+1)); } }
  • 8. antislashn.org Java 8 - interfaces 8 / 34 Méthode par défaut ● Une première utilité des méthodes par défaut est l'intégration de nouvelles fonctionnalités sans avoir à intervenir sur le code existant ● assure la compatibilité avec le code déjà écrit pour l'ancienne version d'une interface
  • 9. antislashn.org Java 8 - interfaces 9 / 34 Méthode par défaut ● Permet d'implémenter le concept de trait en Java ● le trait, ou extension, encapsule un ensemble cohérent de méthodes ● ensemble de méthodes concrètes pouvant être ajoutée à une classe pour étendre ses fonctionnalités ● il est composé : – d'une méthode abstraite – des méthodes additionnelles implémentées par le trait et utilisant la méthode abstraite
  • 10. antislashn.org Java 8 - interfaces 10 / 34 Méthode par défaut ● Exemple de trait ● l'interface Java Comparable possède une méthode unique compareTo() – cette méthode renvoie un int ● il est intéressant sémantiquement d'avoir des méthodes telles que : – greaterThan() – lessThan() – isBefore() – isAfter() – isSame()
  • 11. antislashn.org Java 8 - interfaces 11 / 34 Méthode par défaut ● Exemple de trait ● les classes concrètes implémentant Orderable auront juste à définir la méthode compareTo(), héritée de Comparable public interface Odrderable<T> extends Comparable<T> { public default boolean isAfter(T other) { return compareTo(other) > 0; } public default boolean isBefore(T other) { return compareTo(other) < 0; } public default boolean isSameAs(T other) { return compareTo(other) == 0; } }
  • 12. antislashn.org Java 8 - interfaces 12 / 34 Méthode par défaut ● Que ce passe-t-il si deux interfaces possèdent une méthode par défaut ayant la même signature ? ● la classe qui implémente les deux interfaces doit fournir une implémentation de la méthode public interface InterfaceA { default void foo() { System.out.println("InterfaceA - foo()"); } } public interface InterfaceB { default void foo() { System.out.println("InterfaceB - foo()"); } } public class ABImpl implements InterfaceA, InterfaceB { }
  • 13. antislashn.org Java 8 - interfaces 13 / 34 Méthode par défaut ● Il suffit alors de fournir le code pour la méthode foo() ● exemples d'implémentation public class ABImpl implements InterfaceA, InterfaceB { @Override public void foo() { System.out.println("ABImpl - foo()"); } } public class ABImpl implements InterfaceA, InterfaceB { @Override public void foo() { InterfaceB.super.foo(); } }
  • 14. antislashn.org Java 8 - interfaces 14 / 34 Interface fonctionnelle ● Interface qui possède une seule méthode abstraite ● SAM : Single Abstract Method ● l'annotation @FunctionnalInterface permet au compilateur de vérifier que l'interface ne comporte qu'une seule méthode abstraite ● peut posséder des méthodes par défaut @FunctionalInterface public interface Operation { int compute(int x, int y); }
  • 15. antislashn.org Java 8 - interfaces 15 / 34 Interface fonctionnelle ● Objectif : définir une signature de méthode qui pourra être utilisée pour passer en paramètre : ● une référence vers une méthode statique ● une référence vers une méthode d'instance ● une référence vers un constructeur ● une expression lambda ● Un certains nombre d'interfaces fonctionnelles sont fournies par Java 8 dans le package java.util.function
  • 16. antislashn.org Java 8 - interfaces 16 / 34 Interface fonctionnelle ● Exemple d'interface fonctionnelle ● Exemple d'utilisation de l'interface @FunctionalInterface public interface Operation { int compute(int x, int y); } public class Calcul { public static int compute(int x, int y, Operation op){ return op.compute(x,y); } }
  • 17. antislashn.org Java 8 - interfaces 17 / 34 Interface fonctionnelle ● Classiquement, cette interface est implémentée par une classe ● utilisation public class Addition implements Operation { @Override public int compute(int x, int y) { return x+y; } } ... Operation op = new Addition(); int r = Calcul.compute(2, 2, op); ...
  • 18. antislashn.org Java 8 - interfaces 18 / 34 Interface fonctionnelle ● Ou passée comme classe anonyme ... r = Calcul.compute(5, 6, new Operation() { @Override public int compute(int x, int y) { return x-y; } }); ...
  • 19. antislashn.org Java 8 - interfaces 19 / 34 Interface fonctionnelle ● Exemple d'une interface de création ● retourne un objet fabriqué avec trois String ● Exemple de classe utilisant l'interface @FunctionalInterface public interface Creator<T> { T create(String str1, String str2, String str3); } public class ContactParser<T> { public T parse(String nomComplet, Creator<T> creator) { String[] items = nomComplet.split(" "); String civilite = items[0]; String nom = items[1]; String prenom = items[2]; return creator.create(civilite, nom, prenom); } }
  • 20. antislashn.org Java 8 - interfaces 20 / 34 Interface fonctionnelle ● Exemple de classe Contact (extrait) ● le constructeur prend 3 paramètres de type String public class Contact { private String civilite; private String nom; private String prenom; public Contact() {} public Contact(String civilite, String nom, String prenom) { this.civilite = civilite; this.nom = nom; this.prenom = prenom; } ... }
  • 21. antislashn.org Java 8 - interfaces 21 / 34 Interface fonctionnelle ● Réponse de Java 8 ● sans modification de l'existant nous pouvons passer toute méthode qui – accepte les mêmes types de paramètre ● 3 paramètres de type String – retourne le même type ● générique T
  • 22. antislashn.org Java 8 - interfaces 22 / 34 Interface fonctionnelle ● Avec Java 8, nous pouvons éviter la création d'une classe anonyme de type Creator<Contact> ● par une référence vers le constructeur de Contact – la syntaxe ::<method> définit une référence vers une méthode ● ici il y a bien un constructeur Contact(String,String, String) ContactParser<Contact> parser = new ContactParser<>(); Contact contact = parser.parse("M LAGAFFE Gaston", Contact::new); public class ContactParser<T> { public T parse(String nomComplet, Creator<T> creator) { ,,, return creator.create(civilite, nom, prenom); } }
  • 23. antislashn.org Java 8 - interfaces 23 / 34 Référence à une méthode ● Syntaxe permettant de référencer directement une méthode ou un constructeur ● opérateur :: ● référence à un constructeur par défaut – sans paramètre ● référence à une méthode – statique ou non System.out::println o -> System.out.println(o)est équivalent à
  • 24. antislashn.org Java 8 - interfaces 24 / 34 Référence à une méthode ● Exemples public class Voiture { public static Voiture create(final Supplier<Voiture> supplier){ return supplier.get(); } public void rouler(){ System.out.println("Rouler"); } } public static void main(String[] args) { List<Voiture> voitures = new ArrayList<>(); voitures.add(Voiture.create(Voiture::new)); voitures.add(Voiture.create(Voiture::new)); voitures.add(Voiture.create(Voiture::new)); voitures.forEach(Voiture::rouler); }
  • 25. antislashn.org Java 8 - interfaces 25 / 34 java.util.function ● Nombreuses interfaces fonctionnelles ● définies avec des types génériques ● Interfaces de base : ● Consumer – accepte un argument T et ne retourne pas de résultat ● Function – accepte un argument T et retourne un résultat R ● Supplier – ne prend pas d'argument et retourne un résultat T ● Predicate – test un valeur T et retourne un booléen
  • 26. antislashn.org Java 8 - interfaces 26 / 34 java.util.function.Consumer ● Abstraction d'une opération acceptant un seul argument et ne renvoyant aucun résultat ● méthodes – accept(T t) : exécute une opération sur le paramètre ● méthode abstraite – andThen(Consumer<? super T> after) : exécute l'opération accept puis l'opération accept sur after
  • 27. antislashn.org Java 8 - interfaces 27 / 34 java.util.function.Consumer ● Exemple List<String> types = new ArrayList<>(Arrays.asList("rock","trip hop","jazz","pop","rock")); List<String> result = new ArrayList<>(); Consumer<String> c1 = result::add; Consumer<String> c2 = System.out::println; Consumer<String> c3 = c1.andThen(c2); types.stream().forEach(c3); // BAD PATTERN (result::add) System.out.println(result);
  • 28. antislashn.org Java 8 - interfaces 28 / 34 java.util.function.Supplier ● Abstraction d'une fonction retournant une valeur ● le Supplier produit une valeur – abstraction d'un factory ● le Consumer consomme une valeur ● méthode – T get() : produit une valeur de type T ● méthode abstraite
  • 29. antislashn.org Java 8 - interfaces 29 / 34 java.util.function.Supplier ● Exemples Supplier<Point> pointSupplier = new Supplier<Point>(){ private int i = 0; @Override public Point get(){ i++; return new Point(i,i); } }; Point p1 = pointSupplier.get(); Point p2 = pointSupplier.get(); Supplier<Point> pointSupplier = Point::new; Point p1 = pointSupplier.get(); Point p2 = pointSupplier.get();
  • 30. antislashn.org Java 8 - interfaces 30 / 34 java.util.function.Function ● Abstraction d'une fonction acceptant un paramètre et retournant un résultat ● Function<T,R> : T argument, R résultat ● méthodes – R apply(T t) : applique la fonction à l'argument t – <T> Function<T,T> identity() : retourne toujours l'argument – <V> Function<R,V> andThen(Function<R,V> after) : retourne une fonction qui applique la fonction, puis applique after sur le résultat – <V> Function<V,R> compose(Function<V,T> before) : retourne une fonction qui applique before, puis applique la fonction sur le résultat de before
  • 31. antislashn.org Java 8 - interfaces 31 / 34 java.util.function.Function ● Exemple List<Point> points = new ArrayList<>(); initPoints(points); Function<Point,Integer> f1 = p -> p.getX(); Stream<Point> stream = points.stream(); Stream<Integer> xs = stream.map(f1); xs.forEach(System.out::println);
  • 32. antislashn.org Java 8 - interfaces 32 / 34 java.util.function.Predicate ● Abstraction d'un prédicat (fonction retournant true ou false) ● méthodes – test(T t) : évalue le prédicat sur t ● méthode abstraite – and(), or(), isEqual(), negate() : permet l'évaluation et le chaînage des prédicats
  • 33. antislashn.org Java 8 - interfaces 33 / 34 java.util.function.Predicate ● Exemple List<String> types = new ArrayList<>(Arrays.asList("rock","trip hop","jazz","pop","rock")); Predicate<String> p1 = s -> s.length() >3; Predicate<String> p2 = s -> s.length() <5; List<String> result = types.stream().filter(p1.and(p2)).collect(Collectors.toList()); System.out.println(result);
  • 34. antislashn.org Java 8 - interfaces 34 / 34 java.util.function ● Les interfaces de base servent à définir de nombreuses interfaces fonctionnelles sur les types de base ● IntConsumer ● LongToIntFunction ● DoubleSupplier ● cf. javadoc