Présentation de la formation
Java avancé
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Java avancé
(examen 1Z0-804)
Plan
• Présentation du formateur
• Les autres formations sur Alphorm
• Qu’est-ce que Java ?
• Les publics concernés
• Le plan de la formation
Java, avancé (examen 1Z0-804) alphorm.com™©
• Le plan de la formation
• Présentation des outils
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
• Actuellement en mission sur un projet de gestion
Java, avancé (examen 1Z0-804) 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/
Mes formations sur alphorm
Java, avancé (examen 1Z0-804) alphorm.com™©
Les autres formations dév sur Alphorm
Java, avancé (examen 1Z0-804) alphorm.com™©
Qu’est-ce que Java ?
• Langage de programmation généraliste
• Créé en 1995 par Sun, héritant du C++
• Géré en communauté
• Langage de programmation objet
Java, avancé (examen 1Z0-804) alphorm.com™©
• Avec un très grande bibliothèque de classes
Les publics concernés
• Développeurs découvrant Java après avoir suivi les fondamentaux
• Développeurs se dirigeant ensuite vers Java serveur
• Toute personne intéressée par les technologies Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Le plan de la formation
• Présentation de la plateforme
• Rappels de syntaxe
• Encapsulation
• Conception de classes
• Utilisation de l’héritage
• Les exceptions
• Les entrées-sorties
• Les entrées-sorties NIO
• Le multithread
• Les traitements simultanés
Java, avancé (examen 1Z0-804) alphorm.com™©
• Utilisation de l’héritage
• La généricité
• Le traitement de textes
• Les traitements simultanés
• La base de données
• La localisation
Certification OCP suite à l’examen 1Z0-804
Java, avancé (examen 1Z0-804) alphorm.com™©
Présentation des outils
• Le site de Oracle sera utilisé pour télécharger
Les outils en ligne de commande
La bibliothèque de base
Un IDE, Netbeans
• Nous utiliserons aussi Eclipse
Java, avancé (examen 1Z0-804) alphorm.com™©
• Nous utiliserons aussi Eclipse
• La présentation sera faite sous Windows 7
Are you ready ? ☺
Java, avancé (examen 1Z0-804) alphorm.com™©
Présentation de la
plateforme Java
Java et les plateformes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Java et les plateformes
Plan
• Les versions des plateformes
• Les éditions
Java, avancé (examen 1Z0-804) alphorm.com™©
Les versions des plateformes
• Chaque plateforme contient des outils qui chacun correspond à une JSR
(Java Specification Request)
• La JVM (Java Virtual Machine) exécute le bytecode grâce au compilateur
JIT (Just In Time)
• Le JDK (Java Development Kit) contient le compilateur entre autre
Java, avancé (examen 1Z0-804) alphorm.com™©
• Le JRE (Java Runtime Environment) est l’environnement d’exécution
• Les numéros de versions sont ceux des JDK
• Chaque version correspond à une JSR
Les éditions
• La JSE (Java Standard Edition) pour ordinateurs de bureau
• La JEE (Java Entreprise Edition) pour serveurs
• La JME (Java Micro Edition) pour environnements mémoires réduits
• La Java FX, un environnement client riche
Java, avancé (examen 1Z0-804) alphorm.com™©
• JavaCard est un système d’exploitation pour carte à puce
Ce qu’on a couvert
• Les versions des plateformes
• Les éditions
Java, avancé (examen 1Z0-804) alphorm.com™©
Présentation de la
plateforme Java
OpenJDK et les licences
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
OpenJDK et les licences
Plan
• JSR, JDK, OpenJDK
• Les licences
Java, avancé (examen 1Z0-804) alphorm.com™©
JSR, JDK, OpenJDK
• La JSR est la spécification, entre autre d’une version du framework
• JDK 7 est par exemple le nom donné par Oracle
• OpenJDK Project est une autre implémentation
Java, avancé (examen 1Z0-804) alphorm.com™©
Les licences
• La licence GPL pour le code Java, mais pas totalement à l’origne
• Depuis la version 7, OpenJDK devient l’implémentation de référence
pour la JSR
• Pour qu’une implémentation soit certifiée, elle doit passée le test de
compatibilité et comparée à OpenJDK
Java, avancé (examen 1Z0-804) alphorm.com™©
• Le code source OpenJDK est diponible sour 2 licences : licence GNU, et
licence Sun’s Java Research License (travaux académiques)
• Le JDK Oracle et disponible sous BPL (code compilé uniquement)
• Pour être intégré dans des distributions GNU, il faut OpenJDK complété
éventuellement par IceTea (projet initial de RedHat)
Ce qu’on a couvert
• JSR, JDK, OpenJDK
• Les licences
Java, avancé (examen 1Z0-804) alphorm.com™©
Présentation de la
plateforme Java
Java dans les
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Java dans les
environnements serveurs
Plan
• Le contenu de Java EE
• Les implémentations
Java, avancé (examen 1Z0-804) alphorm.com™©
Le contenu de Java EE
• Une plate forme pour exécuter
• Une suite de tests
• Une réalisation de référence
• Les bonnes pratiques
Java, avancé (examen 1Z0-804) alphorm.com™©
• Objectifs : faciliter la construction d’applications serveur, sur la même
base que JSE, mais avec des compléments fournis par le conteneur
Les implémentations
• Oracle Glassfish est l’implémentation de référence
Open Source Edition ou Enterprise Server…
• JBoss, JEUS, Apache Geronimo, IBM WebSphere, Caucho Resin…
• Les composants peuvent être : Servlet, JSP, JSTL, JSF, EJB, JNDI, JDBC,
JMS, JPA, JAXB, …
Java, avancé (examen 1Z0-804) alphorm.com™©
JMS, JPA, JAXB, …
Ce qu’on a couvert
• Le contenu de Java EE
• Les implémentations
Java, avancé (examen 1Z0-804) alphorm.com™©
Présentation de la
plateforme Java
Processus JCP
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Processus JCP
Plan
• Définition
• Les participants
• Les JSR
Java, avancé (examen 1Z0-804) alphorm.com™©
Définition
• Le Java Community Process est le mécanisme pour faire évoluer les
spécifications techniques de Java
• Le processus consiste à faire évoluer une Java Specification Request à
travers plusieurs étapes (JCP 2.9 version actuelle du processus)
Java, avancé (examen 1Z0-804) alphorm.com™©
• Initiation -> Première revue -> Brouillon public -> Maintenance
Les participants
• On peut participer librement au processus
• Les Java User Group sont souvent impliqués
• Public : chacun peut donner des commentaires
• Member : faire des propositions
Java, avancé (examen 1Z0-804) alphorm.com™©
• Expert : donner la forme de la spécification
• Specification Lead : choix des experts des groupes
• Executive Committee : élu
• Oracle a un siège permanent
Les JSR
• Java SE : 62 JSR différentes
Java SE 7 : JSR 336
Java SE 8 : JSR 337
• Java EE : 57 JSR différentes
Java EE Security API : JSR 375
Java, avancé (examen 1Z0-804) alphorm.com™©
Java EE Security API : JSR 375
• Java ME : 85 JSR différentes
Ce qu’on a couvert
• Définition
• Les participants
• Les JSR
Java, avancé (examen 1Z0-804) alphorm.com™©
Rappels sur la syntaxe
et les classes Java
Classes simples
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Classes simples
Plan
• Déclarer une classe, syntaxe, fichier et outil
• Déclarer les champs de données, visibilité, modificateurs
• Déclarer les méthodes, visibilités, modificateurs
• Modificateurs de la déclaration de la classe
Java, avancé (examen 1Z0-804) alphorm.com™©
Déclarer une classe
• Mot-clé « class »
• Dans un fichier qui porte le nom de la classe
• L’IDE crée le fichier et la classe
• Il est possible d’avoir plusieurs classes dans un fichier
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il est possible de déclarer une classe dans une classe
Déclarer les champs de donnée
• Déclaration sans aucun ordre des membres de la classe
• Déclarer le type puis le nom de la variable
• Il est possible de placer une valeur par défaut
• Il est possible de modifier la visibilité : public, protected, private
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il est possible de rendre constant ce champ : final
Mais empêche une affectation APRES l’initialisation
Déclarer les méthodes
• Déclaration sans ordre
• Déclarer le type de la méthode (de retour), void si aucun
• Le nom de méthode
• Les paramètres, chacun étant typés
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les méthodes supportent la surcharge
• La visibilité peut-être modifiée
• Le mot-clé « final » empêche une éventuelle redéfinition
Modificateur dans la déclaration de la classe
• Une classe peut être « public »
Impact sur le nom du fichier
Impact sur les accès de l’extérieur de son package
• Le mot-clé « final » signifie que la classe ne peut pas être dérivée
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Déclarer une classe, syntaxe, fichier et outil
• Déclarer les champs de données, visibilité, modificateurs
• Déclarer les méthodes, visibilités, modificateurs
• Modificateurs de la déclaration de la classe
Java, avancé (examen 1Z0-804) alphorm.com™©
Rappels sur la syntaxe
et les classes Java
Champs, constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Champs, constructeurs
et méthodes
Plan
• Déclaration et utilisation des méthodes
• Déclaration et utilisation des champs de données
• Rôle des constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Déclaration et utilisation des méthodes
• Une méthode est un traitement disponible sur les objets
• Il peut y avoir des paramètres
• Un retour peut être récupéré
• La sélection se fait sur un objet que l’on instancie auparavant
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il existe des méthodes statiques
Déclaration et utilisation des champs
• Un champ d’instance porte une valeur pour chaque objet
• En général, le champ est privé
• Utilisé dans les méthodes de l’objet
• Peut être accessible via des getters et des setters
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il existe des champs statiques
Le rôle des constructeurs
• Il faut initialiser les champs de l’objet
• Des paramètres permettent à l’utilisateur de :
Choisir la version du constructeur (surcharge)
Fournir des arguments de paramétrage
La surcharge est fréquente
Java, avancé (examen 1Z0-804) alphorm.com™©
• La surcharge est fréquente
• Un constructeur est une méthode :
Portant le nom de la classe
Sans retour
Ce qu’on a couvert
• Déclaration et utilisation des méthodes
• Déclaration et utilisation des champs de données
• Rôle des constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Rappels sur la syntaxe
et les classes Java
Modélisation d’objets à
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Modélisation d’objets à
l’aide de classes Java
Plan
• Modéliser les objets du monde réel
• Traduire les objets réels en objets logiciels
• Créer les classes et les structurer
Java, avancé (examen 1Z0-804) alphorm.com™©
Modéliser les objets du monde réel
• Les objets métiers sont au cœur de l’application
• Plusieurs façons de trouver les objets métiers
À partir des exigences, usecase, …
Concepts métiers décrits sous forme de noms
Traduits sous la forme d’objets « entités »
Java, avancé (examen 1Z0-804) alphorm.com™©
• Traduits sous la forme d’objets « entités »
Traduire le réel en logiciel
• Un objet métier correspond à des données en base
Un objet de mapping objet-relationnel
Un objet de valeurs (contenant les données)
• On devra ajouter
Les objets de services
Java, avancé (examen 1Z0-804) alphorm.com™©
Les objets de services
Les objets de présentation
Créer les classes et les structurer
• Sous la forme d’un diagramme de classes UML
Expressif, lisible, et complet
• Les classes possèdent
Attributs
Méthodes
Java, avancé (examen 1Z0-804) alphorm.com™©
Méthodes
Constructeurs
• Les classes sont reliées entre elles grâce aux associations
• La traduction en Java est directe
Les associations sont traduites en références (cf attributs références)
Ce qu’on a couvert
• Modéliser les objets du monde réel
• Traduire les objets réels en objets logiciels
• Créer les classes et les structurer
Java, avancé (examen 1Z0-804) alphorm.com™©
Rappels sur la syntaxe
et les classes Java
Instructions package et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Instructions package et
import
Plan
• La notion de package, logique et physique
• L’instruction package et le nom de la classe
• Utiliser une classe d’un autre package, import, exceptions
• L’utilisation des classes standards
Java, avancé (examen 1Z0-804) alphorm.com™©
La notion de package
• Un package est :
Un espace de nommage
Une limite de visibilité
• Un répertoire
Les packages sont organisés en hiérarchies
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les packages sont organisés en hiérarchies
L’instruction package
• En première ligne du fichier de la classe
• « package » suivi d’un nom de package
• Attention, le nom de package peut être composé
• La classe (ou les classes) sont réputées être dans le package
Java, avancé (examen 1Z0-804) alphorm.com™©
L’instruction import
• Pour utiliser une classe d’un autre package :
Écrire le nom complet de la classe
Ou bien utiliser « import » <nom_de_la_classe>, puis le nom court
• Il est possible d’écrire un « import » pour toutes les classes d’un
package
Java, avancé (examen 1Z0-804) alphorm.com™©
package
• Les classes concernées doivent être « public »
• Les classes imbriquées ont un nom composé avec le nom de la classe
englobante
L’utilisation des classes standard
• Toutes les classes de l’API Java sont dans des packages
• Il est peu recommandé de ne pas utiliser de package
Voire interdit lors de la livraison sur certains serveurs
• Les import n’ont pas à être faits pour
Java, avancé (examen 1Z0-804) alphorm.com™©
Les classes de java.lang
Les classes du même package
Ce qu’on a couvert
• La notion de package, logique et physique
• L’instruction package et le nom de la classe
• Utiliser une classe d’un autre package, import, exceptions
• L’utilisation des classes standards
Java, avancé (examen 1Z0-804) alphorm.com™©
Encapsulation et
polymorphisme
Encapsulation pour la
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Encapsulation pour la
conception de classes
Plan
• Principe de l’encapsulation
• L’encapsulation dans les classes
• L’encapsulation dans les packages
Java, avancé (examen 1Z0-804) alphorm.com™©
Principe de l’encapsulation
• L’encapsulation est le fait de masquer l’implémentation et de fournir
une interface
• Les bénéfices attendus :
Sécurité de l’état des objets
Maintenance facile car seuls les services sont utilisés
Java, avancé (examen 1Z0-804) alphorm.com™©
Maintenance facile car seuls les services sont utilisés
Simplification de l’interface
L’encapsulation dans les classes
• Les classes masquent leurs implémentation :
Le corps des méthodes
Certaines méthodes
Les champs de données
• Les classes proposent une interface :
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les classes proposent une interface :
Les méthodes non privées
Les constructeurs (non privés)
L’encapsulation dans les packages
• Les classes peuvent être publiques ou non
• La classe publique seule peut être utilisée de l’extérieur de son package
• Les classes non publiques servent au fonctionnement du package
• Un package est une unité de codage, de test, de livraison
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Principe de l’encapsulation
• L’encapsulation dans les classes
• L’encapsulation dans les packages
Java, avancé (examen 1Z0-804) alphorm.com™©
Encapsulation et
polymorphisme
Modélisation de problèmes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Modélisation de problèmes
métier à l’aide de classes
Java
Plan
• Modélisation des besoins
• Modélisation d’analyse
• Modélisation de conception
• Traduction en Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Modélisation des besoins
• Les besoins sont exprimés par du texte
Trop peu formel
• La représentation classique des exigences passe par les usecase
• Une approche NON orientée objets
Java, avancé (examen 1Z0-804) alphorm.com™©
Modélisation de l’analyse
• La description des problèmes
• En terme d’objets, sous la forme de classes
Les classes ne montrent pas les méthodes
• En terme de traitement, sous la forme de séquences
Java, avancé (examen 1Z0-804) alphorm.com™©
• Appelé aussi modèle du domaine
Modélisation de conception
• La description de la solution
Liée à Java et à sa technologie
• Les classes sont entités, contrôleurs, frontières …
• Les séquences sont les mêmes que précédemment, mais plus détaillées
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les classes sont équipées des méthodes correspondant aux séquences
Traduction en Java
• Chaque classe a son équivalent en Java
• Accent mis sur les classes entités
• Classes applicatives liées à l’architecture choisie
• Génération automatique possible en Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Modélisation des besoins
• Modélisation d’analyse
• Modélisation de conception
• Traduction en Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Encapsulation et
polymorphisme
Caractère non mutable
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Caractère non mutable
Plan
• Briser l’encapsulation
• Empêcher la modification des données internes
• String est une classe non mutable
Java, avancé (examen 1Z0-804) alphorm.com™©
Briser l’encapsulation
• L’encapsulation est mise en place pour protéger un objet
Pas de champs de données publiques
Limiter les getters/setters
Passer par des méthodes
• Il n’y a pas de « const » en Java, donc on n’interdit pas la modification
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il n’y a pas de « const » en Java, donc on n’interdit pas la modification
Lorsqu’on passe un objet en paramètre
Lorsqu’on retourne un objet
Empêcher la modification
• Une classe non mutable (immutable value) est une classe qui ne permet
la modification
Constructeur
Pas de setters
Pas de méthode modifiant l’objet
Java, avancé (examen 1Z0-804) alphorm.com™©
Pas de méthode modifiant l’objet
• Une méthode peut « faire comme si » elle modifiait
Mais en fait elle retourne un nouvel objet
String est une classe non mutable
• Il est impossible de modifier une String en Java
• Toutes les méthodes et tous les opérateur re-crée un objet
• Transparent, intuitif, mais peu performant
• Donc on peut exposer une String de son propre objet, l’utilisateur ne
peut pas modifier la donnée réelle !
Java, avancé (examen 1Z0-804) alphorm.com™©
peut pas modifier la donnée réelle !
Ce qu’on a couvert
• Briser l’encapsulation
• Empêcher la modification des données internes
• String est une classe non mutable
Java, avancé (examen 1Z0-804) alphorm.com™©
Encapsulation et
polymorphisme
Sous-classement
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Sous-classement
Plan
• La relation de généralisation-spécialisation
• Pourquoi utiliser des sous-classes
Java, avancé (examen 1Z0-804) alphorm.com™©
La relation de généralisation-spécialisation
• La super-classe est un type général, la sous-classe un sous-type
• Une référence vers la super-classe peut pointer vers un objet de la
sous-classe
• Toutes les caractéristiques de la super-classe sont héritées par la sous-
classe
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les membres privés de la super-classe ne sont jamais visibles de la
sous-classe
Pourquoi utiliser des sous-classes ?
• Pour manipuler des objets en tant que type très général
Stabilité d’un code qui utilise des abstractions
• Pour factoriser des caractéristiques communes
Les sous-classes héritent des caractéristiques du parent
Pour spécialiser des types
Java, avancé (examen 1Z0-804) alphorm.com™©
• Pour spécialiser des types
Chaque sous-classe peut apporter une variante dans le comportement et
dans le contenu
Ce qu’on a couvert
• La relation de généralisation-spécialisation
• Pourquoi utiliser des sous-classes
Java, avancé (examen 1Z0-804) alphorm.com™©
Encapsulation et
polymorphisme
Surcharge de méthodes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Surcharge de méthodes
Plan
• Ecrire plusieurs méthodes même nom dans une classe
• Les conséquences de la surcharge
Java, avancé (examen 1Z0-804) alphorm.com™©
Ecrire plusieurs méthodes même nom
• Le même nom de méthode peut être utilisé
• Les paramètres sont différents
• Le type de retour est indifférent, mais ne suffit pas
• A l’appel, le compilateur branche la bonne méthode
Java, avancé (examen 1Z0-804) alphorm.com™©
• La surcharge est résolue à travers les niveaux d’héritage
Les conséquences de la surcharge
• Le compilateur résout l’appel de façon transparente en fonction des
arguments fournis
• Il n’y a pas de complexité syntaxique due à des inventions de nouveaux
noms à chaque type de paramètres
• Il n’y a pas de découverte à l’exécution, tout est compilé
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Ecrire plusieurs méthodes même nom dans une classe
• Les conséquences de la surcharge
Java, avancé (examen 1Z0-804) alphorm.com™©
Encapsulation et
polymorphisme
Méthode à nombre variable
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Méthode à nombre variable
d’arguments
Plan
• Utilisation d’une méthode à nombre variable d’arguments
• Déclaration et codage
Java, avancé (examen 1Z0-804) alphorm.com™©
Utilisation d’une méthode « variadic »
• Pour un traitement qui sera le même sur chacun des arguments
• Equivalent à n surcharges de la méthode
• Syntaxiquement proche du passage d’un tableau d’arguments
Java, avancé (examen 1Z0-804) alphorm.com™©
Déclaration et codage
• Les arguments en nombre variable, c’est un tableau
• On peut utiliser length et les accès aléatoires
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Utilisation d’une méthode à nombre variable d’arguments
• Déclaration et codage
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes Java
Modificateurs public,
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Modificateurs public,
protected et private
Plan
• Impact de l’absence de modificateur
• Influence du modificateur private
• Influence du modificateur public
• Influence du modificateur protected
• Remarque sur le modificateur public de class
Java, avancé (examen 1Z0-804) alphorm.com™©
• Remarque sur le modificateur public de class
Impact de l’absence de modificateur
• Un membre sans visibilité est accessible du package entier
• Cela définit une sorte de voisinage
• Les classes sans visibilité elles-mêmes suivent la même règle
Java, avancé (examen 1Z0-804) alphorm.com™©
Influence du modificateur private
• N’existe que sur les membres
• Un membre privé n’est accessible que de l’intérieur de la classe
• Attention, un objet d’une classe donnée peut accéder aux données
privées d’un objet de la même classe
• Typiquement utilisé pour les attributs
Java, avancé (examen 1Z0-804) alphorm.com™©
• Typiquement utilisé pour les attributs
Influence du modificateur public
• Un membre publique est accessible de partout
• Typiquement utilisé pour des méthodes
• Dangereux pour les attributs
Les attributs participent à l’état de l’objet
Java, avancé (examen 1Z0-804) alphorm.com™©
• N’est intéressant que pour les classes elles-mêmes publiques
Influence du modificateur protected
• Un membre protégé est accessible
De toutes les classes du package de la classe qui contient le membre
Des classes filles, y compris celles qui sont dans d’autres packages
• A utiliser plutôt sur des méthodes d’accès
Il est très simple de dériver une classe en Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Il est très simple de dériver une classe en Java
Je ne maîtrise pas qui dérive ma classe, et ce qu’il/elle en fait
Remarque sur « public » pour « class »
• Une classe n’est connue par défaut que de son package
• Si la classe doit être accessible de l’extérieur de son package, elle doit
être marquée « public »
• Une classe publique aura certainement des membres publiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Impact de l’absence de modificateur
• Influence du modificateur private
• Influence du modificateur public
• Influence du modificateur protected
• Remarque sur le modificateur public de class
Java, avancé (examen 1Z0-804) alphorm.com™©
• Remarque sur le modificateur public de class
Conception de classes Java
Remplacement de
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Remplacement de
méthodes
Plan
• La spécialisation de classes
• La redéfinition de méthode
Java, avancé (examen 1Z0-804) alphorm.com™©
La spécialisation de classes
• Permet d’hériter de la totalité de la super-classe
• Une sous-classe peut posséder en plus attributs et méthodes
• Il n’est pas possible de faire disparaître des membres hérités
• Il est possible de spécialiser un ou plusieurs comportements
Java, avancé (examen 1Z0-804) alphorm.com™©
La redéfinition de méthodes
• C’est refaire la méthode dans la sous-classe alors qu’elle existe dans la
super-classe
• Le prototype de la méthode est identique
Le corps de la méthode est différent
• On peut ajouter l’annotation @Override
Java, avancé (examen 1Z0-804) alphorm.com™©
• On peut ajouter l’annotation @Override
Ce qu’on a couvert
• La spécialisation de classes
• La redéfinition de méthode
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes Java
Surcharge de constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Surcharge de constructeurs
Plan
• Le rôle des constructeurs
• Utiliser les paramètres des constructeurs
• Surcharger les constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Le rôle des constructeurs
• Initialiser les champs de données
• Mettre l’objet dans un état correct
• Assurer que l’on peut travailler avec l’objet
Java, avancé (examen 1Z0-804) alphorm.com™©
Utiliser les paramètres des constructeurs
• Les paramètres sont utilisés pour initialiser les attributs
• Les arguments sont fournis par l’utilisateur
• Il n’y a pas de paramètres optionnels en Java
Donc la signature du constructeur est contraignante pour l’appelant
Java, avancé (examen 1Z0-804) alphorm.com™©
Surcharger les constructeurs
• Il est possible de déclarer plusieurs constructeurs qui se distinguent de
par leurs signatures
• Chaque constructeur correspond à une façon de créer l’objet
• Le constructeur sans paramètre est le constructeur par défaut
Il n’est plus généré lorsqu’on écrit un constructeur nous-même
Java, avancé (examen 1Z0-804) alphorm.com™©
Il n’est plus généré lorsqu’on écrit un constructeur nous-même
Pas forcément nécessaire de le réécrire
• Il est possible de chaîner les constructeurs entre eux
Pour éviter les redondances de code
Ce qu’on a couvert
• Le rôle des constructeurs
• Utiliser les paramètres des constructeurs
• Surcharger les constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes Java
Opérateur instanceof
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Opérateur instanceof
Plan
• Un objet est d’une classe et une seule
• Détecter le type d’un objet
• Utiliser la détection d’un ancêtre du type
Java, avancé (examen 1Z0-804) alphorm.com™©
Un objet est d’une classe et une seule
• Un objet a forcément une classe
• Récupérer le descripteur : getClass()
Eventuellement possible d’exploiter la description
• L’objet est conforme à sa classe
Java, avancé (examen 1Z0-804) alphorm.com™©
Détecter le type d’un objet
• Avec instanceOf, il est possible de vérifier le type de l’objet
• Avec getClass(), on découvre le type de l’objet
• L’opérateur instanceof implique une logique conditionnelle
• Permettrait de détecter le type concret de l’objet et de choisir le
traitement adapté à ce type
Java, avancé (examen 1Z0-804) alphorm.com™©
traitement adapté à ce type
Utilisation dénoncée
• Permet surtout de se protéger avant un transtypage
Utiliser la détection d’un ancêtre
• L’opérateur instanceof teste les ancêtres
Super-classes
Interfaces implémentées
• En fonction de l’interface, il est possible de choisir un traitement
Conception par capacité
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception par capacité
Ce qu’on a couvert
• Un objet est d’une classe et une seule
• Détecter le type d’un objet
• Utiliser la détection d’un ancêtre du type
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes Java
Appel de méthode virtuelle
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Appel de méthode virtuelle
Et polymorphisme
Plan
• Mise en place du polymorphisme
• Intérêt du polymorphisme
• Dangers du polymorphisme
Java, avancé (examen 1Z0-804) alphorm.com™©
Mise en place du polymorphisme
• Il faut une généralisation-spécialisation : extends
• Il faut une redéfinition : réécriture d’une méthode dans la sous-classe
• Non indispensable : @Override, une annotation qui permet de faire
vérifier la redéfinition par le compilateur
Java, avancé (examen 1Z0-804) alphorm.com™©
Intérêt du polymorphisme
• L’usage du polymorphisme permet de :
Écrire un code simple, qui utilise le type généralisé
Déclencher des méthodes qui ne seront connues qu’à l’exécution
Créer des points de variation dans le système
Mettre en place des points d’extensibilité du système
Java, avancé (examen 1Z0-804) alphorm.com™©
Mettre en place des points d’extensibilité du système
• A l’opposé du polymorphisme : tester le type des objets afin de
déclencher un code spécifique sur chaque
Dangers du polymorphisme
• Il est impossible de savoir, à la lecture, quelle est la méthode qui sera
déclenchée
Tout dépend de l’objet qui sera créé et placé en face de l’appel
• Le traitement sollicité peut être une surprise (non conforme, levée
d’exception…)
Java, avancé (examen 1Z0-804) alphorm.com™©
Le principe de substitution voudrait que les appels soient correctement
implémentés, mais ce principe est souvent violé
Ce qu’on a couvert
• Mise en place du polymorphisme
• Intérêt du polymorphisme
• Dangers du polymorphisme
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes Java
Transtypage de références
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Transtypage de références
d’objets
Plan
• Syntaxe du transtypage
• Le danger du transtypage
• Utilisation inévitable du transtypage
Java, avancé (examen 1Z0-804) alphorm.com™©
Syntaxe du transtypage
• Pour forcer le compilateur à accepter un appel
• Le type de la référence à utiliser ne fournit pas la méthode
Mais vous ‘savez’ que l’objet connaît la méthode
• Mettre le type à obtenir entre parenthèses
Java, avancé (examen 1Z0-804) alphorm.com™©
Le compilateur est forcé d’accepter l’appel, mais il faudra que ce « cast » soit
vrai à l’exécution
Le danger du transtypage
• Le transtypage fait taire le compilateur
• Mais ne préjuge rien à l’exécution
Si l’objet n’est pas celui qui est attendu, problème !
ClassCastException : arrêt du programme par levée d’exception
Java, avancé (examen 1Z0-804) alphorm.com™©
Utilisation inévitable du transtypage
• Lorsqu’on utilise un framework
Il faut dériver des classes, redéfinir des méthodes
La redéfinition suppose une signature identique
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Syntaxe du transtypage
• Le danger du transtypage
• Utilisation inévitable du transtypage
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes
avancée
Classes abstraites et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Classes abstraites et
généralisation de type
Plan
• La mise en place de le généralisation
• L’intérêt d’une classe abstraite
• Les méthodes abstraites
Java, avancé (examen 1Z0-804) alphorm.com™©
La mise en place de la généralisation
• La relation de généralisation s’utilise pour :
Faire apparaître un super-type, pour avoir du code stable
Factoriser des membres
Spécialiser des comportements
• La super-classe ne doit pas forcément être instanciée : « abstract »
Java, avancé (examen 1Z0-804) alphorm.com™©
• La super-classe ne doit pas forcément être instanciée : « abstract »
• Empêcher l’instanciation peut se faire :
En rendant les constructeurs privés : impossible de créer un objet de cette
classe de l’extérieur de la classe
En rendant la classe abstraite : la classe doit être dérivée
L’intérêt d’une classe abstraite
• Faire apparaître une généralisation
• Mais la super-classe n’est là que pour factoriser des membres
On ne veut pas d’objet de ce type
• Les exemples de classes abstraites dans la vie réelle sont nombreux
Java, avancé (examen 1Z0-804) alphorm.com™©
Taxonomie : les noms d’espèces, de genres, de familles …
• Une classe abstraite possède donc
Des attributs
Des méthodes
Des constructeurs
Les méthodes abstraites
• Une méthode abstraite ne contient pas de corps
Mot-clé « abstract »
• Ne peuvent exister que dans des classes abstraites
• Seront redéfinies dans les classes filles
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• La mise en place de le généralisation
• L’intérêt d’une classe abstraite
• Les méthodes abstraites
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes
avancée
Modificateurs static et final
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Modificateurs static et final
Plan
• Modificateur static
• Modificateur final
• Les champs public static final
Java, avancé (examen 1Z0-804) alphorm.com™©
Modificateur static
• Le mot clé « static » s’utilise sur un membre
• Un champ « static » est une donnée partagée par tous les objets de la
classe
• Une méthode « static » est une méthode qui est appelée sur la classe
elle-même, et non sur un objet
Java, avancé (examen 1Z0-804) alphorm.com™©
• Une méthode « static » ne peut accéder qu’aux champs « static »
• Les champs « static » sont initialisés lors du chargement de la classe
Modificateur final
• Un champ « final » ne supporte pas d’affectation
Il est initialisé à la déclaration
Ou bien dans un constructeur
• Une méthode « final » ne peut pas être redéfinie
Java, avancé (examen 1Z0-804) alphorm.com™©
Les champs public static final
• En général, un champ ne doit pas être public
• S’il est final, ce n’est pas dangereux
Ne fait pas partie de l’état de l’objet
• Math.PI : PI est public static et final
Java, avancé (examen 1Z0-804) alphorm.com™©
Constante publique
Ce qu’on a couvert
• Modificateur static
• Modificateur final
• Les champs public static final
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes
avancée
Meilleures pratiques pour
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Meilleures pratiques pour
les modificateurs de champs
Plan
• Les champs de donnée
• Les services des classes publiques
• Les méthodes de classes de package
• Cas particulier des classes à dériver
Java, avancé (examen 1Z0-804) alphorm.com™©
Les champs de donnée
• En général les champs de donnée sont privés
• Car ils font partie de l’état de l’objet
• Les champs constants peuvent être publiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Les services des classes publiques
• Une classe publique est une façade de son package
• Les méthodes d’une classe peuvent être publiques
• Mais certaines méthodes peuvent rester inaccessibles de l’extérieur
• A priori, si rien ne justifie qu’elle soit publique, une méthode reste
privée
Java, avancé (examen 1Z0-804) alphorm.com™©
privée
Les méthodes des classes de package
• A l’intérieur d’un package, une classe a des méthodes au mieux de
visibilité de package (par défaut)
• Les attributs restent privés, mais les services peuvent être rendus aux
autres classes du package
• Les méthodes qui ne sont utilisées qu’à l’intérieur du package restent
privées
Java, avancé (examen 1Z0-804) alphorm.com™©
privées
Cas particulier des classes à dériver
• Pour les classes qui doivent être dérivées, penser à mettre en protégé
les méthodes utilisables par des sous-classes
• Utile pour les sous-classes qui ne seront pas dans le même package
Dans le même package, la visibilité par défaut suffit
• Faire attention aux attributs protégés, qui seront modifiés sans contrôle
Java, avancé (examen 1Z0-804) alphorm.com™©
• Faire attention aux attributs protégés, qui seront modifiés sans contrôle
par le code des sous-classes
Ce qu’on a couvert
• Les champs de donnée
• Les services des classes publiques
• Les méthodes de classes de package
• Cas particulier des classes à dériver
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes
avancée
Implémenter le modèle
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Implémenter le modèle
Singleton
Plan
• Utiliser un champ « static »
• Utiliser une méthode « static »
• Le modèle Singleton simple
• Le modèle thread-safe
• Le modèle avec disposition
Java, avancé (examen 1Z0-804) alphorm.com™©
• Le modèle avec disposition
Utiliser un champ static
• Un champ « static » correspond à une donnée partagée entre tous les
objets de la classe
Pas besoin de créer un objet pour utiliser ou évaluer cette donnée
• En général, d’une visibilité restreinte, de façon à ce que les autres
classes ne puissent pas y accéder librement
Java, avancé (examen 1Z0-804) alphorm.com™©
Utiliser une méthode static
• Une méthode qui n’accède qu’aux champs « static »
• Une méthode qui est appelée sur la classe
• Ne nécessite pas la création préalable d’un objet
Java, avancé (examen 1Z0-804) alphorm.com™©
Le modèle Singleton simple
• Un champ « static », une méthode « static » qui créé l’instance ou bien
qui la retourne si elle est déjà créée
Java, avancé (examen 1Z0-804) alphorm.com™©
Le modèle thread-safe
• Le code précédent n’est pas protégé contre des accès simultanés de
plusieurs thread en même temps
• Créer une section critique ? Mais pas la méthode entière
• Faire créer l’instance à l’initialisation ? Mais plus de création à la
demande
Java, avancé (examen 1Z0-804) alphorm.com™©
Le modèle avec disposition
• Il faut savoir se débarrasser de l’instance unique
A priori seulement après la fin du main
• Créer une méthode Reset qui élimine l’instance
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Utiliser un champ « static »
• Utiliser une méthode « static »
• Le modèle Singleton simple
• Le modèle thread-safe
• Le modèle avec disposition
Java, avancé (examen 1Z0-804) alphorm.com™©
• Le modèle avec disposition
Conception de classes
avancée
Conception de classes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Conception de classes
abstraites
Plan
• Pourquoi créer des classes abstraites
• Rôle des classes abstraites
• Algorithme utilisant des méthodes abstraites
Java, avancé (examen 1Z0-804) alphorm.com™©
Pourquoi créer des classes abstraites
• Pour factoriser du code
Éviter les redondances
• Eviter que l’utilisateur ne crée des objets à partir de classes incomplètes
• Créer des modèles symétriques plus simples
Java, avancé (examen 1Z0-804) alphorm.com™©
Rôle des classes abstraites
• Factoriser du code pour de futures classes dérivées
• Représenter des comportements génériques
• Réifier des algorithmes
Java, avancé (examen 1Z0-804) alphorm.com™©
Algorithme utilisant des méthodes abstraites
• Une classe mère abstraite
• Elle contient un squelette d’algorithme
• Celui-ci appelle des méthodes abstraites
• Les classes filles implémentent les parties
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Pourquoi créer des classes abstraites
• Rôle des classes abstraites
• Algorithme utilisant des méthodes abstraites
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes
avancée
Classes imbriquées
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Classes imbriquées
Plan
• La syntaxe des classes imbriquées
• Intérêt des classes imbriquées
Java, avancé (examen 1Z0-804) alphorm.com™©
Syntaxe des classes imbriquées
• Ecrire une classe dans une classe
• Le nom de la classe est masquée
• Le nom des fichiers est particulier
Java, avancé (examen 1Z0-804) alphorm.com™©
Intérêt des classes imbriquées
• Accès aux membres privés de la classe englobante
• Imbrication des objets eux-mêmes
• Cas particulier des « static class »
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• La syntaxe des classes imbriquées
• Intérêt des classes imbriquées
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes
avancée
Types d’énumération
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Types d’énumération
Plan
• Une classe dont on veut limiter le nombre d’instance et leurs valeurs
• Le type « enum »
Java, avancé (examen 1Z0-804) alphorm.com™©
Une classe à valeurs limitées
• On ne maîtrise pas les instances d’une classe
• Les types standards n’ont pas de limite non plus
• Il est possible de créer les futures valeurs
Limiter les instances
Java, avancé (examen 1Z0-804) alphorm.com™©
Beaucoup de travail
Le type enum
• Un énuméré est un type
• Dont on énumère toutes les valeurs
• Qui peut posséder des méthodes
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Une classe dont on veut limiter le nombre d’instance et leurs valeurs
• Le type « enum »
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage et interfaces
Interfaces Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Interfaces Java
Plan
• Principe de l’interface
• Déclaration d’une interface
• Implémentation d’une interface
• Héritage entre interfaces
Java, avancé (examen 1Z0-804) alphorm.com™©
Principe de l’interface
• Une interface définit un type utilisateur
• Comme une classe, mais sans implémentation
• Peut posséder des déclarations de méthodes
Abstract public
Java, avancé (examen 1Z0-804) alphorm.com™©
• Peut posséder des déclarations de constantes
Public static final
• Sert à déclarer des services sans les implémenter
• Doit être implémentée par une classe
Déclaration d’une interface
• Mot clé « interface » à la place de « class »
• Dans son propre fichier
• Peut être « public » ou pas
Java, avancé (examen 1Z0-804) alphorm.com™©
Implémenter une interface
• Il faut qu’une classe implémente l’interface
• Mot clé « implements »
• Obligation pour la classe de fournir les méthodes prévues
Ou bien cette classe doit être marquée « abstract »
Java, avancé (examen 1Z0-804) alphorm.com™©
• Très proche de la notion d’héritage, mais on n’hérite de rien, si ce n’est
de l’obligation de tout implémenter
Héritage entre interfaces
• Une interface peut hériter d’une autre
• Cela sert à enrichir les interfaces en terme de livraisons successives
• Une interface peut hériter de plusieurs interfaces
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Principe de l’interface
• Déclaration d’une interface
• Implémentation d’une interface
• Héritage entre interfaces
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage et interfaces
Les types d’héritages
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les types d’héritages
Plan
• Les différents types d’héritages
• L’héritages d’implémentation
• L’héritage d’interfaces
Java, avancé (examen 1Z0-804) alphorm.com™©
Les différents types d’héritages
• On peut hériter pour plusieurs raisons
• Pour récupérer une implémentation existante
Héritage d’implémentation
• Pour proposer les mêmes services qu’un ancêtre
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage d’interfaces
L’héritage d’implémentation
• On hérite pour ne pas recoder les méthodes, les champs
• Moins de travail à faire, mais attention à la pertinence
• Suit une logique ‘métier’
• Typiquement réalisé en Java avec « extends »
Java, avancé (examen 1Z0-804) alphorm.com™©
L’héritage d’interfaces
• On hérite pour proposer les mêmes services vis-à-vis de l’extérieur
• Tout le travail est à faire, car on ne récupère pas une implémentation
• Suit une logique ‘service’
• Typiquement réalisé avec « implements »
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Les différents types d’héritages
• L’héritages d’implémentation
• L’héritage d’interfaces
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage et interfaces
Composition d’objets et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Composition d’objets et
délégation de méthode
Plan
• Héritage d’implémentation
• Composition
• Problème posé par la délégation
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage d’implémentation
• L’héritage pour des raisons d’implémentation peut
Ne pas être clair
Ne pas respecter le test is-a ou le test 100%
• La relation d’héritage est extrêmement forte
Java, avancé (examen 1Z0-804) alphorm.com™©
La composition
• La composition est l’association de contenance entre deux objets
• Cela permet de réutiliser un objet
• Il faut réécrire les méthodes
• Clair dans son intention
Java, avancé (examen 1Z0-804) alphorm.com™©
Problème posé par la délégation
• Lorsqu’une association est établie entre 2 classes
• Il y a 2 objets
• Il faut gérer ces 2 objets à la place d’un seul
• Le fait de rappeler une méthode d’un objet à partir de l’autre est la
délégation
Java, avancé (examen 1Z0-804) alphorm.com™©
délégation
Ce qu’on a couvert
• Héritage d’implémentation
• Composition
• Problème posé par la délégation
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage et interfaces
Implémentation de plusieurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Implémentation de plusieurs
interfaces
Plan
• Une classe peut implémenter plusieurs interfaces
• Les collisions
Java, avancé (examen 1Z0-804) alphorm.com™©
Une classe implémente plusieurs interfaces
• Utiliser « implements » une seule fois, avec une liste des interfaces
• Il faut implémenter toutes les méthodes prévues par les interfaces
Java, avancé (examen 1Z0-804) alphorm.com™©
Les collisions
• Les collisions de champs de ne peuvent pas exister
• Les méthodes seront sous la forme d’une seule implémentation
• Seul cas difficile : la même méthode, mais avec un retour différent
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Une classe peut implémenter plusieurs interfaces
• Les collisions
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage et interfaces
Le modèle de conception
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Le modèle de conception
DAO
Plan
• A quoi sert un Data Access Object
• Implémentation du modèle
Java, avancé (examen 1Z0-804) alphorm.com™©
A quoi sert le modèle DAO
• Isoler les accès aux données persistantes
• Eviter les impacts d’un changement de mode de stockage
• Regrouper les accès aux données dans des classes dédiées
Java, avancé (examen 1Z0-804) alphorm.com™©
Implémentation du modèle
• Un point d’accès au modèle DAO
• Des interfaces représentant les accès à chaque type de données
• Les implémentations de ces accès
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• A quoi sert un Data Access Object
• Implémentation du modèle
Java, avancé (examen 1Z0-804) alphorm.com™©
Types génériques et
collections
Classes génériques et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Classes génériques et
paramètres de type
Plan
• Définition d’une classe générique
• Utilisation d’une classe générique
Java, avancé (examen 1Z0-804) alphorm.com™©
Définition d’une classe générique
• Une classe « patron », qui est paramétrable par un type
• Définit une famille de classes, qui seront générées à la demande
• Ecrite une seule fois, utilisée plusieurs fois
• Très utile en particulier pour les conteneurs
Java, avancé (examen 1Z0-804) alphorm.com™©
• Alternative au code sur Object
Utilisation d’une classe générique
• Définir une classe générique
Syntaxe du C++ « Classe<T> »
Utiliser le symbole choisi T dans le code
• A l’appel, remplacer T par un type classe réel
Syntaxe Classe<Integer>
Java, avancé (examen 1Z0-804) alphorm.com™©
Syntaxe Classe<Integer>
Ce qu’on a couvert
• Définition d’une classe générique
• Utilisation d’une classe générique
Java, avancé (examen 1Z0-804) alphorm.com™©
Types génériques et
collections
Inférence de type losange
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Inférence de type losange
Plan
• Définition de l’inférence de type
• Comment alléger l’écriture
Java, avancé (examen 1Z0-804) alphorm.com™©
Définition de l’inférence de type
• L’inférence de type est réalisée par le compilateur
• Il va placer le bon type en fonction de ce qui est attendu
• Tout est compilé, donc pas de surprises à l’exécution
Java, avancé (examen 1Z0-804) alphorm.com™©
Comment alléger l’écriture
• Avec l’inférence de type, on évite de répéter du code
• Ecriture plus simple
• Mais il faut spécifier quand même les « <> »
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Définition de l’inférence de type
• Comment alléger l’écriture
Java, avancé (examen 1Z0-804) alphorm.com™©
Types génériques et
collections
Types génériques et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Types génériques et
collections
Plan
• Les collections sans généricité
• Les collections modernes, utilisant la généricité
Java, avancé (examen 1Z0-804) alphorm.com™©
Les collections sans généricité
• Collections manipulant des Object
• Code qui compile toujours
Mais risques à l’exécution
Perte de types, il faut forcer les types
Autre possibilité : copier-coller !!
Java, avancé (examen 1Z0-804) alphorm.com™©
• Autre possibilité : copier-coller !!
Les collections modernes, avec généricité
• La collection s’applique sur un type générique
• Choisir le type au moment de la création de l’objet
• Il peut y avoir plusieurs types
• Collection typée
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Les collections sans généricité
• Les collections modernes, utilisant la généricité
Java, avancé (examen 1Z0-804) alphorm.com™©
Types génériques et
collections
Les objets List et Map
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les objets List et Map
Plan
• L’interface List
• L’interface Map
Java, avancé (examen 1Z0-804) alphorm.com™©
L’interface List
• Les objets de classes implémentant List
Conservent l’ordre d’insertion
Proposent un accès aléatoire
• L’interface List est une sous-interface de Collection
Plusieurs classes implémentent l’interface List
Java, avancé (examen 1Z0-804) alphorm.com™©
• Plusieurs classes implémentent l’interface List
ArrayList
LinkedList
L’interface Map
• Les objets de classes implémentant Map
Utilisent une clé pour ranger les valeurs
Proposent un accès aléatoire, utilisant la clé
• L’interface Map prend 2 paramètres génériques obligatoirement
Plusieurs classes implémentent l’interface Map
Java, avancé (examen 1Z0-804) alphorm.com™©
• Plusieurs classes implémentent l’interface Map
HashMap
TreeMap
Ce qu’on a couvert
• L’interface List
• L’interface Map
Java, avancé (examen 1Z0-804) alphorm.com™©
Types génériques et
collections
Pile avec Deque
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Pile avec Deque
Plan
• L’interface Deque
• Réaliser une pile conforme
Java, avancé (examen 1Z0-804) alphorm.com™©
L’interface Deque
• Sous-interface de Queue, elle-même sous-interface de Collection
• Utilisable des deux côtés
• Méthodes addFirst, addLast, …
• Permet d’implémenter FIFO, et LIFO
Java, avancé (examen 1Z0-804) alphorm.com™©
Réaliser une pile avec Deque
• En utilisant les méthodes
addFirst, removeFirst, peekFirst
• Pour implémenter les méthodes
De la Pile : push, pop, peek
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• L’interface Deque
• Réaliser une pile conforme
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitement des chaînes
Manipulation avec
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Manipulation avec
StringBuilder et StringBuffer
Plan
• String, StringBuffer et StringBuilder
• Les méthodes de StringBuilder
Java, avancé (examen 1Z0-804) alphorm.com™©
String, StringBuffer et StringBuilder
• La classe String est ‘immutable value’
Les méthodes de String ne modifie pas la chaîne en place
• StringBuffer est synchronisée
Utilisée pour un buffer, mais les opérations sont thread-safe
StringBuilder n’est pas synchronisée et donc souhaitable dans un
Java, avancé (examen 1Z0-804) alphorm.com™©
• StringBuilder n’est pas synchronisée et donc souhaitable dans un
contexte non multithread
Doit être préférée à la précédente, et offre les mêmes méthodes
Les méthodes de StringBuilder
• Constructeurs :
Par défaut
Avec un CharSequence en paramètre
Avec une capacité
A partir d’une String
Java, avancé (examen 1Z0-804) alphorm.com™©
A partir d’une String
• Méthodes : append, insert
• Redimensionnement automatique
Ce qu’on a couvert
• String, StringBuffer et StringBuilder
• Les méthodes de StringBuilder
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitement des chaînes
Principales méthodes liées
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Principales méthodes liées
aux chaînes de caractères
Plan
• La classe String, ses méthodes et les opérateurs
• La méthode toString
• Les classes StringTokenizer et Scanner
• Les classes StringBuilder et StringBuffer
• Les expressions régulières
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les expressions régulières
La classe String, ses méthodes et opérateurs
• La classe String représente une chaîne non modifiable
• Toutes ses méthodes font des modifications créent un nouvel objet
• Des opérateurs sont disponibles sur String
• L’initialisation littérale de String est possible
Java, avancé (examen 1Z0-804) alphorm.com™©
• Un très grand nombre de méthodes
La méthode toString
• Disponible sur tout objet Java
• Implémenté par défaut sur Object
• Redéfinissable
• Produit une chaîne qui doit représenter l’objet
Java, avancé (examen 1Z0-804) alphorm.com™©
Les classes StringTokenizer et Scanner
• Utiles pour parcourir une chaîne de caractères
• Fonctionne sur le mode de l’énumération
• StringTokenizer est plus ancien et plus limité que Scanner
Java, avancé (examen 1Z0-804) alphorm.com™©
Les classes StringBuffer et StringBuilder
• La représentation des buffer
• Chaînes de caractères modifiables
• Aucun rapport avec String, utiliser toString pour obtenir la chaîne
Java, avancé (examen 1Z0-804) alphorm.com™©
Les expressions régulières
• Avec String, … on peut appliquer les expressions régulières
• Représente un motif
A chercher dans un texte
A substituer dans un texte
Pour découper des chaînes
Java, avancé (examen 1Z0-804) alphorm.com™©
Pour découper des chaînes
Pour filtrer
Ce qu’on a couvert
• La classe String, ses méthodes et les opérateurs
• La méthode toString
• Les classes StringTokenizer et Scanner
• Les classes StringBuilder et StringBuffer
• Les expressions régulières
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les expressions régulières
Traitement des chaînes
Analyse de texte dans Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Analyse de texte dans Java
Plan
• Parcourir une chaîne avec StringTokenizer
• Analyser un texte : les mots, les lettres
Java, avancé (examen 1Z0-804) alphorm.com™©
Parcourir une chaîne avec StringTokenizer
• Créer un objet StringTokenizer
• Directement connaître le nombre de ‘token’ : countTokens()
• Parcourir : hasMoreToken(), nextToken()
Java, avancé (examen 1Z0-804) alphorm.com™©
Analyser un texte
• Compter les mots : utiliser StringTokenizer
• Compter les lettres : parcourir la chaîne
• Intérêt : faire de la cryptanalyse ;)
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Parcourir une chaîne avec StringTokenizer
• Analyser un texte : les mots, les lettres
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitement des chaînes
Traitement des entrées avec
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Traitement des entrées avec
Scanner
Plan
• Entrée d’un scanner
• Manipulation par un scanner
Java, avancé (examen 1Z0-804) alphorm.com™©
Entrée d’un scanner
• Un scanner peut être construit à partir de
Un fichier
Un flux
Une chaîne
Une source de caractères
Java, avancé (examen 1Z0-804) alphorm.com™©
Une source de caractères
Un canal d’octet
Manipulation par un scanner
• Enumérer des valeurs typées
• Rechercher des motifs ou des chaînes
• Enumérer des morceaux de chaînes
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Entrée d’un scanner
• Manipulation par un scanner
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitement des chaînes
Affichage et mise en forme
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Affichage et mise en forme
de texte
Plan
• La classe Formatter
• String.format, System.out.printf, System.out.format
• DateFormat, NumberFormat, DecimalFormat
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe Formatter
• Cette classe permet d’appliquer des motifs façon « printf »
• Un objet de type Formatter peut être lié à un StringBuilder
• Permet de formatter, réorganiser les paramètres
• Les conversions sont
Java, avancé (examen 1Z0-804) alphorm.com™©
Générales, Character, Numeric, Date/Time, Percent, LineSeparator
String.format, printf…
• Méthodes de confort exploitant un Formatter
• String.format permet de formatter une chaîne de caractères
• System.out.printf ou format gère directement l’affichage
Java, avancé (examen 1Z0-804) alphorm.com™©
DateFormat, NumberFormat, DecimalFormat
• Dans le package java.text
• Permet de formatter les dates, les nombres…
• Existe en une instance dépendant du poste
• S’adapte aux cultures
Java, avancé (examen 1Z0-804) alphorm.com™©
• Gère le formatage et aussi le parsing
Ce qu’on a couvert
• La classe Formatter
• String.format, System.out.printf, System.out.format
• DateFormat, NumberFormat, DecimalFormat
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitement des chaînes
Expressions régulières avec
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Expressions régulières avec
Pattern et Matcher
Plan
• Les expressions régulières
• La classe Pattern
• La classe Matcher
Java, avancé (examen 1Z0-804) alphorm.com™©
Les expressions régulières
• Sorte de langage à la grammaire simple
• Permet de retrouver des motifs dans des chaînes de caractères
• Basé sur Perl5, mais quelques constructions en moins
• Motifs :
Java, avancé (examen 1Z0-804) alphorm.com™©
Caractères d’échappement n, t …
[abc] : a ou b ou c, [^abc] : tout sauf a ou b ou c, [a-z] : de a à z
. : tout caractère, d : [0-9], D : [^0-9], s : un blanc, w : [a-zA-Z0-9]
X? : un ou zéro, X* : 0 ou plus, X+ : 1 ou plus, X{n} : n, X{n,m} : entre n et m
La classe Pattern
• Le package java.util.regex
• Permet de compiler une expression régulière en un motif
• Méthodes statiques :
compile, matches, quote
Java, avancé (examen 1Z0-804) alphorm.com™©
• Autres méthodes :
matcher, pattern, split, toString
La classe Matcher
• Représente un outil pour gérer les correspondances d’un motif
Faire correspondre toute la séquence
Rechercher le pattern en partant du début
Rechercher la prochaine partie qui correspond au motif
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Les expressions régulières
• La classe Pattern
• La classe Matcher
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Catégories d’exceptions
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Catégories d’exceptions
Plan
• La classe Throwable
• La classe Exception
• Les exceptions non gérées
• Les exceptions gérées
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe Throwable
• Classe mère de tout ce qui peut être levé lorsqu’une erreur est détectée
• Plusieurs constructeurs :
Throwable ()
Throwable (String message)
Throwable (String message, Throwable cause)
Java, avancé (examen 1Z0-804) alphorm.com™©
Throwable (String message, Throwable cause)
Throwable (String message, Throwable cause, boolean sup, boolean stack)
Throwable (Throwable cause)
• Méthodes : getMessage(), getCause() ….
La classe Exception
• Classe dérivée de Throwable
• Classe mère de tout ce qui peut être levé dans une application
• Plusieurs constructeurs :
Exception()
Java, avancé (examen 1Z0-804) alphorm.com™©
Exception(String message)
Exception(String message, Throwable cause)
Exception(String message, Throwable cause, boolean sup, boolean stack)
Exception(Throwable cause)
Les exceptions non gérées
• RuntimeException est la classe mère de toutes les classes d’exceptions
qui arrivent normalement dans une application
• Le compilateur n’oblige pas à gérer ces exceptions
• On parle d’exceptions non gérées
• ArithmeticException, ClassCastException, NullpointerException …
Java, avancé (examen 1Z0-804) alphorm.com™©
• ArithmeticException, ClassCastException, NullpointerException …
• Sont déclarées dans java.lang
Les exceptions gérées
• Classes dérivées de Exception
En réalité tout Throwable qui n’est ni Error, ni RuntimeException
• Le compilateur exigera une gestion explicite
avec les mots clés try-catch-throw-throws
On ne peut pas ignorer simplement la levée de ces exceptions
Java, avancé (examen 1Z0-804) alphorm.com™©
• On ne peut pas ignorer simplement la levée de ces exceptions
Ce qu’on a couvert
• La classe Throwable
• La classe Exception
• Les exceptions non gérées
• Les exceptions gérées
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Classes d’exception Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Classes d’exception Java
standard
Plan
• Les classes d’exception non gérées de java.lang
• Les classes d’exception gérées de java.lang
Java, avancé (examen 1Z0-804) alphorm.com™©
Les classes d’exception non gérées
• ArithmeticException
Java, avancé (examen 1Z0-804) alphorm.com™©
• ArrayIndexOutOfBoundsException
• ArrayStoreException
• ClassCastException
Les classes d’exception non gérées
• IllegalArgumentException : mauvais argument lors d’un appel de méthode
• IllegalMonitorStateException : attente d’un thread non bloqué
• IllegalStateException : application dans un état incorrect
• IllegalThreadStateException : l’état du thread ne permet pas de réaliser l’opération
• IndexOutOfBoundsException : débordement d’index
• NegativeArraySizeException : allocation d’un tableau avec une taille négative
Java, avancé (examen 1Z0-804) alphorm.com™©
• NegativeArraySizeException : allocation d’un tableau avec une taille négative
• NullPointerException : utilisation d’une référence nulle
• NumberFormatException : conversion de chaîne de caractère en numérique impossible
• SecurityException : tentative de violation de sécurité
• StringIndexOutOfBounds : index supérieur à la taille de la chaîne
• UnsupportedOperationException : opération non supportée
Les classes d’exception gérées
• Ces exceptions qui correspondent à certaines API
• Les exceptions qui sont liées aux entrées-sorties
• Les exceptions liées aux bases de données
• Le compilateur exigera une gestion du cas exceptionnel
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Les classes d’exception non gérées de java.lang
• Les classes d’exception gérées de java.lang
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Création de classes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Création de classes
d’exception
Plan
• Hériter de Exception
• Déclarer des membres spécifiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Hériter de Exception
• Il est indispensable d’hériter de Exception
• Faire le choix du constructeur
Le message est déjà prévu
La cause est déjà prévue
Un héritage sur RuntimeException est possible
Java, avancé (examen 1Z0-804) alphorm.com™©
• Un héritage sur RuntimeException est possible
Déclarer des membres spécifiques
• Une exception capte le contexte d’erreur et le remonte
Constructeur avec les paramètres appropriés
Getter pour restituer l’information
• Les attributs vont avec…
Une exception peut ne pas avoir d’attributs spécifiques
Java, avancé (examen 1Z0-804) alphorm.com™©
• Une exception peut ne pas avoir d’attributs spécifiques
Son type seul suffit à l’identifier
Ce qu’on a couvert
• Hériter de Exception
• Déclarer des membres spécifiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Les mots-clés try, catch et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les mots-clés try, catch et
finally
Plan
• Le mot-clé try
• Le mot-clé catch
• Le mot-clé finally
• La déclaration de levée d’exception
Java, avancé (examen 1Z0-804) alphorm.com™©
Le mot-clé try
• Mot-clé qui introduit le bloc de code nominal
• Ce bloc sera suivi des blocs de gestion d’erreur
Java, avancé (examen 1Z0-804) alphorm.com™©
Le mot-clé catch
• Correspond à un bloc de gestion d’erreur
• Plusieurs blocs catch peuvent suivre un try
• Il seront évalués dans l’ordre de présence dans le code
Java, avancé (examen 1Z0-804) alphorm.com™©
Le mot-clé finally
• Termine la séquence des catch
• Optionnel
• Introduit in bloc garanti d’exécution
Java, avancé (examen 1Z0-804) alphorm.com™©
La déclaration de la levée d’exceptions
• Pour gérer les exceptions, 2 possibilités :
Try-catch pour gérer à ce niveau l’exception
Throws pour laisser passer l’exception
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Le mot-clé try
• Le mot-clé catch
• Le mot-clé finally
• La déclaration de levée d’exception
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
L’interface AutoCloseable et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
L’interface AutoCloseable et
try-with-resources
Plan
• L’absence de destruction déterministe
• Avec try-with-resources
Java, avancé (examen 1Z0-804) alphorm.com™©
L’absence de destruction déterministe
• Le ramasse-miette se charge de récupérer la mémoire non utilisée
• Mais son passage est dicté par ses propres algorithmes
• Il est possible mais souvent maladroit de déclencher le gc
• En Java, il n’y a pas de destructeur déterministe
Java, avancé (examen 1Z0-804) alphorm.com™©
Cela évite au développeur d’avoir à écrire le « delete »
• Mais certains objets ont des ressources (non mémoire) associées
Il faut les forcer à libérer ces ressources
Avec try-with-resources
• Provoquer le « close » sur un objet
• Il faut implémenter AutoCloseable
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• L’absence de destruction déterministe
• Avec try-with-resources
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Multi-catch
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Multi-catch
Plan
• Plusieurs catch sont possibles derrière un try
• Le polymorphisme des exceptions
• Le contenu d’un catch
Java, avancé (examen 1Z0-804) alphorm.com™©
Plusieurs catch sont possibles après un try
• Les catch sont typés par la classe d’exception qu’ils traitent
• Un bloc catch exécuté suffit pour qu’il n’y ait plus d’erreur
• Les blocs catch sont évalués dans l’ordre de présence dans le code
Mais dès qu’un catch correspond, il est exécuté
Java, avancé (examen 1Z0-804) alphorm.com™©
Aucun autre ne sera exécuté
• Si aucun catch ne correspond, on remonte à l’appelant
Le polymorphisme des exceptions
• Les classes d’exception sont organisées en héritages
• Un catch sur une classe mère attrape les exceptions filles
• Il faut mettre les catch du type le plus spécifique vers le plus générique
Sinon, le premier bloc convient toujours, et les autres sont du code mort
Java, avancé (examen 1Z0-804) alphorm.com™©
Le contenu d’un catch
• Ne rien mettre dans un catch est dangereux
L’erreur sera réputée traitée, mais rien n’est fait
• Traiter l’erreur en utilisant le contexte : l’exception
• Méthodes printStackTrace de Exception
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Plusieurs catch sont possibles derrière un try
• Le polymorphisme des exceptions
• Le contenu d’un catch
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Meilleures pratiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Meilleures pratiques
Plan
• Un bloc try par méthode
• Contenu des catch
• Granularité des catch
• Réinterprétation des exceptions
Java, avancé (examen 1Z0-804) alphorm.com™©
Un bloc try par méthode
• Si vous placez plusieurs try dans une méthode
Il est possible de réaliser le second try sans le premier
Est-ce que la méthode elle-même est cohérente ?
Il est difficile de suivre le scénario nominal
• Un seul try suivi de plusieurs catch
Java, avancé (examen 1Z0-804) alphorm.com™©
• Un seul try suivi de plusieurs catch
• Facile à lire, meilleure séparation du code nominal du code de gestion
des erreurs
Contenu des catch
• Un minimum dans un catch, non vide
• Utiliser les méthodes présentes sur la classe Exception
en fait Throwable
• Utiliser un log pour tracer
Java, avancé (examen 1Z0-804) alphorm.com™©
• Rétablir le système bas-niveau et réinterpréter
Granularité des catch
• Le bloc catch est déclenché pour 1 type d’exception
• On peut traiter une classe mère
Traiter Exception et totalement généraliste
Traiter une super classe traite toutes ses sous-classes
Il est possible de traiter plusieurs types non reliés
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il est possible de traiter plusieurs types non reliés
Réinterprétation des exceptions
• Il est possible de relancer une exception alors qu’une exception est en
cours de traitement
• Cas particulier du traitement bas-niveau puis
Relancer la même exception
Relancer une nouvelle exception : réinterprétation
Java, avancé (examen 1Z0-804) alphorm.com™©
Relancer une nouvelle exception : réinterprétation
Ce qu’on a couvert
• Un bloc try par méthode
• Contenu des catch
• Granularité des catch
• Réinterprétation des exceptions
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Les assertions
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les assertions
Plan
• Définition d’une assertion
• Placer les assertions
• Lancer l’application avec ou sans les assertions
Java, avancé (examen 1Z0-804) alphorm.com™©
Définition d’une assertion
• Une vérification runtime que l’objet est bien dans un certain état
• Contrat d’utilisation d’un objet, d’une méthode
• Ne cherche pas à vérifier les entrées variantes de l’environnement
Utiliser les tests à base de « if » pour cela
Java, avancé (examen 1Z0-804) alphorm.com™©
• Lorsque l’assertion n’est pas vérifiée, une Error est levée
Placer une assertion
• En début de méthode : une précondition
• En fin de méthode : une postcondition
• N’importe où : un invariant
Une assertion peut détecter un passage dans un flux non prévu
Java, avancé (examen 1Z0-804) alphorm.com™©
• Ne pas tester les paramètres en entrée dus à l’utilisateur
• Les assertions sont débrayables
Lancer avec ou sans les assertions
• Les assertions ne sont pas lancées par défaut
• Il faut les activer avec –ea
• Donc les assertions ne coûtent rien dans une application livrée
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Définition d’une assertion
• Placer les assertions
• Lancer l’application avec ou sans les assertions
Java, avancé (examen 1Z0-804) alphorm.com™©
Principes des entrées-sorties
Gestion des entrées-sorties
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Gestion des entrées-sorties
Plan
• Hiérarchie de classes
• Les canaux
• Les filtres
Java, avancé (examen 1Z0-804) alphorm.com™©
Hiérarchie de classes
• InputStream est une entrée binaire
• OutputStream est une sortie binaire
• Reader est une entrée texte
• Writer est une sortie texte
Java, avancé (examen 1Z0-804) alphorm.com™©
• Dérivées de ces classes
Canaux représentant les sources/cibles de données
Filtres représentant les décorateurs
Les canaux
• Les sources ou les cibles
• Fichiers : FileInputStream, FileOutputStream, FileReader, FileWriter
• Sockets
• Entrées ou sorties sur les serveurs : ServletOutputStream
Java, avancé (examen 1Z0-804) alphorm.com™©
Les filtres
• Décorations des accès aux données
• Ne rajoutent pas méthodes
BufferedInputStream : gère une lecture bufferisée
• Ou bien ajoutent des comportement
Java, avancé (examen 1Z0-804) alphorm.com™©
DataInputStream : lit des valeurs de types primitifs
Ce qu’on a couvert
• Hiérarchie de classes
• Les canaux
• Les filtres
Java, avancé (examen 1Z0-804) alphorm.com™©
Principes des entrées-sorties
Lecture de la console
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Lecture de la console
Plan
• System.in est une entrée binaire
• Les filtres pour lire la console
Java, avancé (examen 1Z0-804) alphorm.com™©
System.in est une entrée binaire
• System.in est de type InputStream
• Lecture via read ou read(byte[])
• Récupération d’un octet
Java, avancé (examen 1Z0-804) alphorm.com™©
Les filtres pour lire la console
• InputStreamReader permet de convertir l’entrée binaire en entrée
caractères
• BufferedReader permet de lire une ligne
Java, avancé (examen 1Z0-804) alphorm.com™©
• BufferedReader permet de lire une ligne
Scanner
• Pour rappel, il est possible d’utiliser Scanner
• Lecture de données formatées
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• System.in est une entrée binaire
• Les filtres pour lire la console
Java, avancé (examen 1Z0-804) alphorm.com™©
Principes des entrées-sorties
Ecriture sur la console
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Ecriture sur la console
Plan
• System.out est un PrintStream
• System.err est un PrintStream
Java, avancé (examen 1Z0-804) alphorm.com™©
System.out est un PrintStream
• Les méthodes proposées sur PrintStream
Méthodes write( int) : affichage de l’octet
Méthode print (…) surchargée, gère l’encodage
Méthode println(…) avec retour à la ligne
• Méthode format, qui se repose sur les méthodes de String
Java, avancé (examen 1Z0-804) alphorm.com™©
• Méthode format, qui se repose sur les méthodes de String
• Méthode printf
System.err est un PrintStream
• La sortie standard d’erreur sur les systèmes qui séparent les deux
• Sinon, la même chose que out
• Possibilités de rediriger les sorties
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• System.out est un PrintStream
• System.err est un PrintStream
Java, avancé (examen 1Z0-804) alphorm.com™©
Principes des entrées-sorties
Flux d’entrées-sorties
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Flux d’entrées-sorties
Plan
• Flux d’entrée binaires
• Flux de sortie binaires
• Flux d’entrée caractères
• Flux de sortie caractères
Java, avancé (examen 1Z0-804) alphorm.com™©
Flux d’entrée binaire
• Dérivés de InputStream, classe abstraite
Manipulation d’octets à travers de 2 méthodes
• Avec int read()
• Avec int read(byte[])
• Classes qui représentent des sources de données
Java, avancé (examen 1Z0-804) alphorm.com™©
• Classes qui représentent des sources de données
FileInputStream, …
• Classes qui représentent des transformations de données
ObjectInputStream, DataInputStream,…
Flux de sortie binaires
• Dérivés de OutputStream, classe abstraite
Manipulation d’octets
• Classes qui représentent des cibles de données
FileOutputStream,…
Classes qui transforment ou ajoutent des fonctionnalités
Java, avancé (examen 1Z0-804) alphorm.com™©
• Classes qui transforment ou ajoutent des fonctionnalités
ObjectOutputStream, DataOutputStream,…
Flux d’entrée caractères
• Dérivés de la classe abstraite Reader
Lecture de caractères
• Avec int read() ou int read(char[]) …
• Des classes qui sont sources de caractères
FileReader, …
Java, avancé (examen 1Z0-804) alphorm.com™©
FileReader, …
• Des classes qui transforment ou ajoutent des fonctionnalités
BufferedReader, LineNumberReader, …
• A noter que FileReader dérive de InputStreamReader
Flux de sortie caractères
• Dérivés de la classe abstraite Writer
Ecriture de caractères
• Des classes représentant les cibles de caractères
FileWriter,…
Des classes qui transforment ou ajoutent des fonctionnalités
Java, avancé (examen 1Z0-804) alphorm.com™©
• Des classes qui transforment ou ajoutent des fonctionnalités
PrintWriter, …
• A noter que FileWriter dérive de OutputStreamWriter, qui gère
l’encodage de la machine
Ce qu’on a couvert
• Flux d’entrée binaires
• Flux de sortie binaires
• Flux d’entrée caractères
• Flux de sortie caractères
Java, avancé (examen 1Z0-804) alphorm.com™©
Principes des entrées-sorties
Chaînage de flux d’entrées-
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Chaînage de flux d’entrées-
sorties
Plan
• L’intérêt d’un décorateur
• L’application pour écrire un fichier binaire
• L’application pour lire un fichier texte
Java, avancé (examen 1Z0-804) alphorm.com™©
L’intérêt d’un décorateur
• Un modèle de décorateur permet d’éviter de multiplier les classes
Combinaison de sources/cibles de données
Avec les transformations possibles
Java, avancé (examen 1Z0-804) alphorm.com™©
L’application pour écrire un fichier binaire
• Fichier binaire en sortie : FileOutputStream
• Sortie bufferisée : BufferedOutputStream
• Ecriture de types primitifs : DataOutputStream
Java, avancé (examen 1Z0-804) alphorm.com™©
L’application pour lire un fichier texte
• Fichier texte en entrée : FileReader
• Entrée bufferisée avec lecture de ligne : BufferedReader
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• L’intérêt d’un décorateur
• L’application pour écrire un fichier binaire
• L’application pour lire un fichier texte
Java, avancé (examen 1Z0-804) alphorm.com™©
Principes des entrées-sorties
Entrées-sorties de canal
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Entrées-sorties de canal
Plan
• Exemple de canaux
• Souplesse du changement de canal
Java, avancé (examen 1Z0-804) alphorm.com™©
Exemple de canaux
• Canal fichier en écriture : FileOutputStream
• Si écriture en mémoire : BytearrayOutputStream
• Si écriture sur tube : PipedOutputStream
Java, avancé (examen 1Z0-804) alphorm.com™©
Souplesse de changement de canal
• La façon d’écrire ne change pas selon le canal
• L’écriture dans un PrintStream se fait à l’identique
Sur la console
Dans un servlet
Vers un fichier
Java, avancé (examen 1Z0-804) alphorm.com™©
Vers un fichier
Ce qu’on a couvert
• Exemple de canaux
• Souplesse du changement de canal
Java, avancé (examen 1Z0-804) alphorm.com™©
Principes des entrées-sorties
Lire et écrire des objets
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Lire et écrire des objets
Plan
• La classe ObjectOutputStream
• La classe ObjectInputStream
• L’interface Serializable vs Externalizable
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe ObjectOutputStream
• Un objet pour traduire un objet en flux
• Se crée à partir d’un OutputStream
• Encodage binaire, format publié
• Ecriture de la totalité d’un graphe
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe ObjectInputStream
• Pour lire un objet encodé
• Exceptions à traiter : FileNotFoundException, IOException,
ClassNotFoundException, ClassCastException
Java, avancé (examen 1Z0-804) alphorm.com™©
L’interface Serializable vs Externalizable
• La classe des objets à sérialiser doit implémenter Serializable
Rien de particulier à faire
• Ou bien Externalizable
L’objet a la main sur la processus de sérialisation, en proposant
La méthode readExternal
Java, avancé (examen 1Z0-804) alphorm.com™©
• La méthode readExternal
• La méthode writeExternal
Ce qu’on a couvert
• La classe ObjectOutputStream
• La classe ObjectInputStream
• L’interface Serializable vs Externalizable
Java, avancé (examen 1Z0-804) alphorm.com™©
E/S de fichiers avec NIO2
Interface Path
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Interface Path
Plan
• Définition de Path dans java.nio.file
• Création d’un objet Path
• Récupération d’informations
• Normaliser, convertir, fusionner
Java, avancé (examen 1Z0-804) alphorm.com™©
Définition de Path dans java.nio.file
• Interface proposant des méthodes pour manipuler un chemin
• Ne propose pas de méthodes modifiant le chemin
• Obtenu typiquement à partir d’un FileSystem
• Permet d’accéder à un File
Java, avancé (examen 1Z0-804) alphorm.com™©
Création d’un objet Path
• Utiliser Paths.get
• Utiliser FileSystems
Java, avancé (examen 1Z0-804) alphorm.com™©
Récupérer des informations
• Les méthodes de Path permettent d’obtenir des infos
toString () : c:formationjava
getFileName () : java
getName(0) : formation
getNameCount() : 2
Java, avancé (examen 1Z0-804) alphorm.com™©
getNameCount() : 2
subpath(0,2) : formationjava
getParent() : c:formation
getRoot() : c:
Normaliser, convertir, fusionner
• Path Path.normalize() : élimine les redondances…
• Path.toUri() : façon uri
Java, avancé (examen 1Z0-804) alphorm.com™©
• Path.toAbsolutePath()
• Path.toRealPath()
• Path.resolve(String a) : fusionne le path avec la chaîne
Ce qu’on a couvert
• Définition de Path dans java.nio.file
• Création d’un objet Path
• Récupération d’informations
• Normaliser, convertir, fusionner
Java, avancé (examen 1Z0-804) alphorm.com™©
E/S de fichiers avec NIO2
Classe Files
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Classe Files
Plan
• Définition de la classe Files
• Méthodes de création
• Méthodes de tests
• Méthodes de modification
Java, avancé (examen 1Z0-804) alphorm.com™©
Définition de la classe Files
• Ne contient que des méthodes statiques
• Travaille sur les fichiers, les répertoires,…
• Sert d’intermédiaire pour attaquer le système de fichier sous-jacent
Java, avancé (examen 1Z0-804) alphorm.com™©
Méthodes de création
• Pour créer des fichiers…
• Utilise un objet Path
Java, avancé (examen 1Z0-804) alphorm.com™©
Méthodes de test
• Teste la nature du chemin
• Ou bien ses attributs
Java, avancé (examen 1Z0-804) alphorm.com™©
Méthodes de modifications
• Copie
• Suppression
• Ouverture d’un flux
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Définition de la classe Files
• Méthodes de création
• Méthodes de tests
• Méthodes de modification
Java, avancé (examen 1Z0-804) alphorm.com™©
E/S de fichiers avec NIO2
Opérations sur les
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Opérations sur les
répertoires et les fichiers
Plan
• Parcourir des répertoires
• Lister les fichiers et déterminer les attributs de fichiers
Java, avancé (examen 1Z0-804) alphorm.com™©
Parcourir les répertoires
• Méthode newDirectorySteam
• L’interface DirectoryStream<Path> permet d’itérer sur les répertoires
Sous-interface de Iterable<Path>
Java, avancé (examen 1Z0-804) alphorm.com™©
• Filtrer les types d’entrées :
Lister les fichiers et déterminer les attributs
• Fichier exécutable, caché, lisible, inscriptible
• Files.isRegularFile : identifie les fichiers
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Parcourir des répertoires
• Lister les fichiers et déterminer les attributs de fichiers
Java, avancé (examen 1Z0-804) alphorm.com™©
E/S de fichiers avec NIO2
Opérations de création,
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Opérations de création,
lecture et écriture
Plan
Créer un fichier
Lire et écrire un fichier
Java, avancé (examen 1Z0-804) alphorm.com™©
Créer un fichier
• Création d’un fichier vide : createFile
• Création d’un fichier temporaire : createTempFile
• Création d’un fichier texte : newBufferedReader, newBufferedWriter
• Création d’un fichier binaire : newInputStream, newOutputStream
Java, avancé (examen 1Z0-804) alphorm.com™©
Lire et écrire dans un fichier
• Manipuler directement les classes : BufferedReader, BufferedWriter,
InputStream, OutputStream
• Lire un tableau d’octets : readAllBytes
• Lire toutes les lignes : readAllLines
• Ecrire : write
Java, avancé (examen 1Z0-804) alphorm.com™©
• Ecrire : write
Ce qu’on a couvert
Créer un fichier
Lire et écrire un fichier
Java, avancé (examen 1Z0-804) alphorm.com™©
E/S de fichiers avec NIO2
Surveillance des
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Surveillance des
modifications
Plan
L’interface WatchService
La classe StandardWatchEventKinds
L’interface WatchKey
L’interface WatchEvent
Java, avancé (examen 1Z0-804) alphorm.com™©
L’interface WatchService
• Représente un service qui observe les changements
• Il faudra s’enregistrer sur des événements particuliers
• L’implémentation est dépendante de la plateforme
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe StandardWatchEventKinds
• Représente les catégories d’événements que l’on peut observer
Java, avancé (examen 1Z0-804) alphorm.com™©
L’interface WatchKey
• Représente un enregistrement à un WatchService
• Signalé lorsqu’un événement se produit
Java, avancé (examen 1Z0-804) alphorm.com™©
L’interface WatchEvent<T>
• Représente l’événement pour lequel on est abonné
• T représente le contexte
• Peu représenter un événement répété
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• L’interface WatchService
• La classe StandardWatchEventKinds
• L’interface WatchKey
• L’interface WatchEvent
Java, avancé (examen 1Z0-804) alphorm.com™©
Utilisation des threads
Créations de solutions
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Créations de solutions
multithread
Plan
L’interface Runnable
La classe Thread
Java, avancé (examen 1Z0-804) alphorm.com™©
L’interface Runnable
• Doit être implémentée par une classe qui sera utilisée par Thread
• Demande la méthode run()
Tourne jusqu’à la fin de la vie du Thread
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe Thread
• Il est possible d’hériter de la classe Thread
• Implémenter run()
• Le thread est démarré par un appel à start()
• Peut aussi servir à démarrer un Runnable
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
L’interface Runnable
La classe Thread
Java, avancé (examen 1Z0-804) alphorm.com™©
Utilisation des threads
Partage de données entre
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Partage de données entre
Thread
Plan
• Les objets sont naturellement partagés
• Situation de conflit sur une variable
• Situation de conflit sur une collection
Java, avancé (examen 1Z0-804) alphorm.com™©
Les objets sont naturellement partagés
• Une référence vers un objet peut être recopiée entre 2 threads
• Il est donc très naturel de partager une ressource
Java, avancé (examen 1Z0-804) alphorm.com™©
Situation de conflit sur une variable
• Lorsque 2 threads accèdent en lecture/écriture
• 1 seule ressource pour les 2
• Le partage conduit à un conflit
• Situation particulièrement délicate en cas de lecture/écriture
Java, avancé (examen 1Z0-804) alphorm.com™©
• Et de modification en plusieurs étapes
Situation de conflit sur une collection
• Entre autre objet, une collection peut être partagée
• Les accès se font de façon désordonnés sur chaque élément de la
collection
• Ajout/suppression …
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Les objets sont naturellement partagés
• Situation de conflit sur une variable
• Situation de conflit sur une collection
Java, avancé (examen 1Z0-804) alphorm.com™©
Utilisation des threads
Synchronisation et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Synchronisation et
interblocage
Plan
• Synchronisation par join
• Mot-clé synchronized
• Situation de blocage entre threads
Java, avancé (examen 1Z0-804) alphorm.com™©
Synchronisation par join
• Thread.join permet de bloquer le thread courant
Sur attente de la fin du thread en question
• La mort d’un thread est la fin du traitement dans lequel il est engagé
• Il faut être sûr qu’il va finir, et qu’il n’attend pas …
Java, avancé (examen 1Z0-804) alphorm.com™©
Mot –clé synchronized
• Avec le mot-clé synchronized
On introduit une section critique
Il est possible de verrouiller un bloc de code seulement
• S’utilise sur un objet (les méthodes d’instance)
Peut s’appliquer sur les méthodes de classe
Java, avancé (examen 1Z0-804) alphorm.com™©
• Peut s’appliquer sur les méthodes de classe
Situations de blocage entre threads
• Si deux threads attendent sur la même ressource
• Appelé deadlock, ou étreinte fatale
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Synchronisation par join
• Mot-clé synchronized
• Situation de blocage entre threads
Java, avancé (examen 1Z0-804) alphorm.com™©
Utilisation des threads
Objets non mutables
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Objets non mutables
Plan
• Problème de modification d’un objet par plusieurs threads
• Un objet non mutable
Java, avancé (examen 1Z0-804) alphorm.com™©
Problème de modification
• Un objet peut exporter des parties de ses données
• Il propose des modificateurs
• Il peut donc être partiellement modifié
Java, avancé (examen 1Z0-804) alphorm.com™©
Un objet non mutable
• Un objet non mutable
Ne propose pas de modifications de ses données
Se duplique au besoin
• Les données internes ne peuvent pas être mises en incohérence
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Problème de modification d’un objet par plusieurs threads
• Un objet non mutable
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitements simultanés
Variables atomiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Variables atomiques
Plan
• Accès concurrents sur une donnée
• Intérêt d’une variable atomique
• Les variables atomiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Accès concurrents sur une donnée
• Les threads accèdent simultanément aux données
• La donnée peut donc être dans un état non souhaitable
• La synchronisation des accès peut être utilisée
Code assez lourd
Java, avancé (examen 1Z0-804) alphorm.com™©
Parfois difficile à introduire
Intérêt d’une variable atomique
• Un type atomique est utilisé à la place du type original
• Des méthodes garanties exclusives
• Par d’interférence entre les threads
• Simplicité d’utilisation
Java, avancé (examen 1Z0-804) alphorm.com™©
Les variables atomiques
• Les types primitifs sont représentés
• Les tableaux
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Accès concurrents sur une donnée
• Intérêt d’une variable atomique
• Les variables atomiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitements simultanés
Verrouillage en lecture et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Verrouillage en lecture et
écriture
Plan
• Classe ReentrantLock
• Classe ReentrantReadWriteLock
Java, avancé (examen 1Z0-804) alphorm.com™©
Classe ReentrantLock
• Méthode lock qui bloque le thread en attendant l’accès
• Quasiment les mêmes possibilités que synchronized
• Explicite, contrairement à synchronized
• La méthode lock() retourne immédiatement si déjà obtenu par le ême
thread
Java, avancé (examen 1Z0-804) alphorm.com™©
thread
• Le constructeur peut être paramétré
Classe ReentrantReadWriteLock
• Les méthodes readLock() et writeLock() permettent d’obtenir un verrou
en lecture et un en écriture
• Efficace lorsque un seul thread peut modifier, rarement, les données
• Plusieurs threads peuvent posséder le verrou en read
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Classe ReentrantLock
• Classe ReentrantReadWriteLock
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitements simultanés
Collections sécurisées
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Collections sécurisées
Plan
• Le package java.util.concurrent
• Les classes implémentant BlockingQueue
• La classe ConcurrentHashMap
• La classe ConcurrentSkipListMap
Java, avancé (examen 1Z0-804) alphorm.com™©
Le package java.util.concurrent
• L’interface BlockingQueue
• L’interface ConcurrentMap
• L’interface ConcurrentNavigableMap
Java, avancé (examen 1Z0-804) alphorm.com™©
Les classes implémentant BlockingQueue
• ArrayBlockingQueue : FIFO à taille déterminée
• LinkedBlockingQueue : FIFO à taille max Integer.MAX_INT
• PriorityBlockingQueue : ordre des éléments conservés
• SynchronousQueue : point de rendez-vous sur une donnée
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe ConcurrentHashMap
• Permet des accès concurrents sans conflit
• Le verrouillage en interne se fait par portions
Plus efficace qu’une HashMap synchronisée
• Efficace lorsqu’il y a peu de « writers »
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe ConcurrentSkipListMap
• Implémente ConcurrentNavigableMap
• Permet de retrouver des parties, en fonction de la clé
Méthodes headMap, tailMap, subMap
• Similaire à TreeMap, mais avec protection dans le cadre multithread
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Le package java.util.concurrent
• Les classes implémentant BlockingQueue
• La classe ConcurrentHashMap
• La classe ConcurrentSkipListMap
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitements simultanés
Outils de synchronisation
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Outils de synchronisation
Plan
• La classe Semaphore
• La classe Phaser
• La classe CyclicBarrier
• La classe CountDownLatch
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe Semaphore
• Une classe qui permet à un nombre limité de thread de passer
• Les constructeurs permettent de positionner le nombre de threads
autorisés
• Méthodes acquire, tryAcquire… pour acquérir une permission
• Méthodes release,… pour laisser une permission
Java, avancé (examen 1Z0-804) alphorm.com™©
• Méthodes release,… pour laisser une permission
La classe Phaser
• Une barrière de synchronisation avec un nombre variable de parties
• Des constructeurs permettant de positionner un nombre de parties
• Des méthodes pour attendre
• Des méthodes pour enregistrer des parties
Java, avancé (examen 1Z0-804) alphorm.com™©
• Des méthodes pour supprimer des parties
La classe CyclicBarrier
• Décrit un point où différents threads vont s’attendre
• Constructeur prenant en paramètre le nombre de thread
• Avec éventuellement en plus un thread qui est déclenché lorsque toutes
les parties sont arrivées
• Méthode await pour attendre les autres thread
Java, avancé (examen 1Z0-804) alphorm.com™©
• Méthode await pour attendre les autres thread
Appelée dans chaque thread partie
• Utile par exemple pour des threads ne finissent pas tant que tous les
autres ne sont pas arrivés à un point
La class CountDownLatch
• Un constructeur permettant de positionner le décompte
• Méthodes await pour attendre que le décompte soit arrivé
• Méthode countDown pour décompter
• Utile pour que des threads attendent qu’une autre tâche soit effectuée
avant de continuer
Java, avancé (examen 1Z0-804) alphorm.com™©
avant de continuer
Ce qu’on a couvert
• La classe Semaphore
• La classe Phaser
• La classe CyclicBarrier
• La classe CountDownLatch
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitements simultanés
Executor,
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Executor,
ThreadPoolExecutor et
ForkJoinTask
Plan
• ForkJoinTask
• L’interface Executor
• ThreadPoolExecutor
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe ForkJoinTask
• Une classe abstraite qui représente une tâche à réaliser
• Sous-classes : RecursiveTask et RecursiveAction
• Une méthode à implémenter : compute
• Des méthodes pour lancer la tâche : exec ou fork
Java, avancé (examen 1Z0-804) alphorm.com™©
L’interface Executor
• Représente un objet qui exécute des Runnable
• L’implémentation n’est donc pas spécifiée
• Les sous-classes :
ForkJoinPool
Java, avancé (examen 1Z0-804) alphorm.com™©
ScheduledThreadPoolExecutor
ThreadPoolExecutor
• Les objets conformes à Executor peuvent être créés par Executors
ThreadPoolExecutor
• Classe qui sert à gérer des threads
Économie des ressources
Meilleure répartition des threads
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• ForkJoinTask
• L’interface Executor
• ThreadPoolExecutor
Java, avancé (examen 1Z0-804) alphorm.com™©
Applications de base de
données avec JDBC
JDBC
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
JDBC
Plan
• Architecture
• Interfaces et classes de java.sql
• Interfaces et classes de javax.sql
• Séquence de code utilisant DriverManager
Java, avancé (examen 1Z0-804) alphorm.com™©
Architecture
• JDBC dans l’architecture : couche d’accès
• Le pilote de base de données doit être chargé
• Le type du pilote
Type 1 : pont JDBC-ODBC
Java, avancé (examen 1Z0-804) alphorm.com™©
Type 2 : pont JDBC- API Native
Type 3 : pur Java, accès réseau
Type 4 : pur Java, le pilote accède à la base
Les interfaces et les classes de java.sql
• Les classes :
DriverManager
Date et Time
DriverPropertyInfo
• Les interfaces :
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les interfaces :
Array, SQLXML, Clob
Connection, DatabaseMetaData, ResultSetMetaData
Statement, CallableStatement, PreparedStatement
ResultSet
Les interfaces et les classes de javax.sql
• Dédiée aux accès côté serveur
• Des interfaces représentant la source de données
CommonDataSource, DataSource, ConnectionPoolDataSource, XADataSource
• La DataSource est récupérée via JNDI, préalablement enregistrée
Java, avancé (examen 1Z0-804) alphorm.com™©
Séquence de code utilisant DriverManager
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Architecture
• Interfaces et classes de java.sql
• Interfaces et classes de javax.sql
• Séquence de code utilisant DriverManager
Java, avancé (examen 1Z0-804) alphorm.com™©
Applications de base de
données avec JDBC
Requêtes et résultats
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Requêtes et résultats
Plan
• Créer une requête
• Paramétrer la requête
• Exécuter un INSERT
• Exécuter un DELETE
Java, avancé (examen 1Z0-804) alphorm.com™©
Créer une requête
• Les classes Statement, PreparedStatement, CallableStatement
• Récupérer les résultats dans un ResultSet
Par défaut avance seulement et non modifiable
• Les options
Java, avancé (examen 1Z0-804) alphorm.com™©
Type
Concurrence
Maintient après commit
Paramétrer une requête
• Avec le Statement, les paramètres sont concaténés
Java, avancé (examen 1Z0-804) alphorm.com™©
Exécuter un INSERT
• Fournir le SQL avec les paramètres de création
Java, avancé (examen 1Z0-804) alphorm.com™©
Exécuter un DELETE
• Fournir le SQL
• Les paramètres sont concaténés aussi
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Créer une requête
• Paramétrer la requête
• Exécuter un INSERT
• Exécuter un DELETE
Java, avancé (examen 1Z0-804) alphorm.com™©
Applications de base de
données avec JDBC
PreparedStatement et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
PreparedStatement et
CallableStatement
Plan
• Les requêtes précompilées
• Le passage de paramètres
• Les procédures stockées
Java, avancé (examen 1Z0-804) alphorm.com™©
Les requêtes précompilées
• La classe PreparedStatement
• Obtention par la méthode prepareStatement() de Connection
• Préparation des paramètres
Java, avancé (examen 1Z0-804) alphorm.com™©
Le passage de paramètres
• Utiliser les méthode setxxx pour positionner les paramètres
Java, avancé (examen 1Z0-804) alphorm.com™©
Les procédures stockées
• Appel d’une procédure écrite dans le système de base de données
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Les requêtes précompilées
• Le passage de paramètres
• Les procédures stockées
Java, avancé (examen 1Z0-804) alphorm.com™©
Applications de base de
données avec JDBC
Transactions
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Transactions
Plan
• Les transactions avec JDBC
• Les points de sauvegarde
Java, avancé (examen 1Z0-804) alphorm.com™©
Les transactions avec JDBC
• Le mode par défaut est « auto-commit »
• Il est possible de désactiver ce mode : setAutoCommit(false)
• Il faut alors faire le commit et le rollback
Java, avancé (examen 1Z0-804) alphorm.com™©
Les points de sauvegarde
• Un point qu’on enregistre et sur lequel on peut revenir
• setSavepoint
• releaseSavepoint
• rollback(SavePoint s)
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Les transactions avec JDBC
• Les points de sauvegarde
Java, avancé (examen 1Z0-804) alphorm.com™©
Applications de base de
données avec JDBC
Les RowSet
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les RowSet
Plan
• Définition des RowSet
• Manipuler un RowSet
• Les types de RowSet
• RowSetFactory et RowSetProvider
Java, avancé (examen 1Z0-804) alphorm.com™©
Définition des RowSet
• Un objet qui encapsule une table de résultats
Les packages javax.sql et javax.sql.rowset
• Représentation en mémoire des tables
Donc mode déconnecté
Est paramétrable via ses propriétés
Java, avancé (examen 1Z0-804) alphorm.com™©
• Est paramétrable via ses propriétés
• Supporte l’abonnement à des événements
• 5 types de RowSet : CachedRowSet, JDBCRowSet, WebRowSet,
FilteredRowSet, JoinRowSet
Manipuler un RowSet
• Paramétrer la commande
• Executer
• Parcourir
Java, avancé (examen 1Z0-804) alphorm.com™©
Les types de RowSet
• L’interface CachedRowSet
Ne maintient pas une connection à la base
• L’interface JDBCRowSet
Connecté, encapsule un ResulSet
• L’interface WebRowSet
Java, avancé (examen 1Z0-804) alphorm.com™©
• L’interface WebRowSet
Dérivée de CachedRowSet, déconnecté, adapté au Web (XML)
• L’interface FilteredRowSet
Dérivée de WebRowSet, supporte des filtres
• L’interface JoinRowSet
Dérivée de WebRowSet, permet de joindre plusieurs RowSets
RowSetFactory et RowSetProvider
• L’interface RowSetFactory représente une fabrique de RowSet
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Définition des RowSet
• Manipuler un RowSet
• Les types de RowSet
• RowSetFactory et RowSetProvider
Java, avancé (examen 1Z0-804) alphorm.com™©
Applications de base de
données avec JDBC
JDBC et DAO
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
JDBC et DAO
Plan
• Le modèle DAO
• Exemple de code
Java, avancé (examen 1Z0-804) alphorm.com™©
Le modèle DAO
• Une couche qui fait la correspondance entre objets et données
• Une classe peut servir d’intermédiaire
Méthodes statiques
• Utilisation d’interfaces pour s’abstraire de la base
Java, avancé (examen 1Z0-804) alphorm.com™©
Exemple de code
• Utilisation d’une fabrique pour accéder aux données
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Le modèle DAO
• Exemple de code
Java, avancé (examen 1Z0-804) alphorm.com™©
Localisation
Avantages de la localisation
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Avantages de la localisation
Plan
• Définition de la « localisation »
• Impact de l’internationalisation
• Les classes disponibles
Java, avancé (examen 1Z0-804) alphorm.com™©
Définition de la localisation
• Par localisation on entend : adapter le logiciel à la localisation de
l’utilisateur
• Important pour vendre localement
• Améliorer l’internationalisation du logiciel
• Limiter la consommation de ressources
Java, avancé (examen 1Z0-804) alphorm.com™©
• Limiter la consommation de ressources
Impact de l’internationalisation
• L’interface graphique
• Les chaînes de caractères
• Les caractères utilisés
• Les formats numériques
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les formats monétaires
• Les formats de dates
Les classes disponibles
• La classe java.util.Locale : une spécification géographique, culturelle
Language : fr
Script : Latn
Country : FR
Variant : polyton
Java, avancé (examen 1Z0-804) alphorm.com™©
Variant : polyton
Extension
• La classe imbriquée Locale.Builder
• La classe java.util.ResourceBundle : contenant pour des objets localisés
• La classe java.text.Format
Ce qu’on a couvert
• Définition de la « localisation »
• Impact de l’internationalisation
• Les classes disponibles
Java, avancé (examen 1Z0-804) alphorm.com™©
Localisation
Locale : lecture et définition
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Locale : lecture et définition
de l’environnement local
Plan
• La classe Locale
• Lecture des locales disponibles
• Changer la localisation courante
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe Locale
• Utiliser la classe Locale.Builder
• Utiliser les constructeurs de Locale
• Mettre en œuvre la fabrique Locale.forLanguageTag()
• Utiliser une des constantes de Locale
Java, avancé (examen 1Z0-804) alphorm.com™©
Lecture des Locale disponibles
• Pour déterminer les Locale disponibles
• Locale n’est qu’un identifiant pour des paramètres d’internationalisation
Java, avancé (examen 1Z0-804) alphorm.com™©
Changer la localisation courante
• On peut changer la localisation
Locale.setDefault(Locale l)
• Une locale peut être associée à des catégories
Locale.Category
DISPLAY
Java, avancé (examen 1Z0-804) alphorm.com™©
• DISPLAY
• FORMAT
Ce qu’on a couvert
• La classe Locale
• Lecture des locales disponibles
• Changer la localisation courante
Java, avancé (examen 1Z0-804) alphorm.com™©
Localisation
Regroupement de
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Regroupement de
ressources
Plan
• La classe ResourceBundle
• La classe PropertyResourceBundle
• La classe ListResourceBundle
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe ResourceBundle
• Classe abstraite
• Un seul constructeur, sans paramètre
• De nombreuses méthodes getBundle(…) permettant de récupérer
l’objet correspondant à la ressource, et à l’objet Locale
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe PropertyResourceBundle
• Classe dérivée de ResourceBundle
• Les ressources sont stockées dans un fichier de propriétés
• Pattern de nommage du fichier :
<nomDeRessource>_<langage>_<pays>
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe ListResourceBundle
• Classe dérivée de ResourceBundle
• Les ressources sont stockées dans un tableau d’objets
• Permet de gérer des objets sous forme de ressources
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• La classe ResourceBundle
• La classe PropertyResourceBundle
• La classe ListResourceBundle
Java, avancé (examen 1Z0-804) alphorm.com™©
Localisation
Format des messages, de
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Format des messages, de
dates et des nombres
Plan
• Format des nombres et monétaires
• Format des dates
• Format des messages
Java, avancé (examen 1Z0-804) alphorm.com™©
Format des nombres et monétaires
• Formats prédéfinis par NumberFormat
La méthode format(…)
• Les monétaires peuvent être formatés par NumberFormat
getCurrencyInstance(…)
Avec DecimalFormat
Java, avancé (examen 1Z0-804) alphorm.com™©
• Avec DecimalFormat
Format suivant des motifs, personnalisés
Format des dates
• Des formats prédéfinis par DateFormat
Possibilités sur la date, l’heure ou les deux
• Avec des méthodes statiques
getDateInstance(), getTimeInstance(), …
Possibilités de formats personnalisés avec SimpleDateFormat
Java, avancé (examen 1Z0-804) alphorm.com™©
• Possibilités de formats personnalisés avec SimpleDateFormat
• Possibilités de changer les symboles : DateFormatSymbols
Format des messages
• Les messages composés peuvent être formatés
• La classe MessageFormat
• Conjuguée à une utilisation de ResourceBundle
• Possibilités de s’adapter au pluriel des mots
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Format des nombres et monétaires
• Format des dates
• Format des messages
Java, avancé (examen 1Z0-804) alphorm.com™©
Conclusion
Java avancé
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Java avancé
(examen 1Z0-804)
Plan
• Présentation de la plateforme
• Rappels de syntaxe
• Encapsulation
• Conception de classes
• Utilisation de l’héritage
• Les exceptions
• Les entrées-sorties
• Les entrées-sorties NIO
• Le multithread
• Les traitements simultanés
Java, avancé (examen 1Z0-804) alphorm.com™©
• Utilisation de l’héritage
• La généricité
• Le traitement de textes
• Les traitements simultanés
• La base de données
• La localisation
Pour continuer …
• S’intéresser aux applications serveur
• Ne pas oublier la documentation Javadoc, en ligne ou sur le poste
Java, avancé (examen 1Z0-804) alphorm.com™©
Bon courage pour
la certification
Java, avancé (examen 1Z0-804) alphorm.com™©
☺

Alphorm.com Formation Java,avancé OCP (1Z0-804)

  • 1.
    Présentation de laformation Java avancé Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Java avancé (examen 1Z0-804)
  • 2.
    Plan • Présentation duformateur • Les autres formations sur Alphorm • Qu’est-ce que Java ? • Les publics concernés • Le plan de la formation Java, avancé (examen 1Z0-804) alphorm.com™© • Le plan de la formation • Présentation des outils
  • 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 • Actuellement en mission sur un projet de gestion Java, avancé (examen 1Z0-804) 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/
  • 4.
    Mes formations suralphorm Java, avancé (examen 1Z0-804) alphorm.com™©
  • 5.
    Les autres formationsdév sur Alphorm Java, avancé (examen 1Z0-804) alphorm.com™©
  • 6.
    Qu’est-ce que Java? • Langage de programmation généraliste • Créé en 1995 par Sun, héritant du C++ • Géré en communauté • Langage de programmation objet Java, avancé (examen 1Z0-804) alphorm.com™© • Avec un très grande bibliothèque de classes
  • 7.
    Les publics concernés •Développeurs découvrant Java après avoir suivi les fondamentaux • Développeurs se dirigeant ensuite vers Java serveur • Toute personne intéressée par les technologies Java Java, avancé (examen 1Z0-804) alphorm.com™©
  • 8.
    Le plan dela formation • Présentation de la plateforme • Rappels de syntaxe • Encapsulation • Conception de classes • Utilisation de l’héritage • Les exceptions • Les entrées-sorties • Les entrées-sorties NIO • Le multithread • Les traitements simultanés Java, avancé (examen 1Z0-804) alphorm.com™© • Utilisation de l’héritage • La généricité • Le traitement de textes • Les traitements simultanés • La base de données • La localisation
  • 9.
    Certification OCP suiteà l’examen 1Z0-804 Java, avancé (examen 1Z0-804) alphorm.com™©
  • 10.
    Présentation des outils •Le site de Oracle sera utilisé pour télécharger Les outils en ligne de commande La bibliothèque de base Un IDE, Netbeans • Nous utiliserons aussi Eclipse Java, avancé (examen 1Z0-804) alphorm.com™© • Nous utiliserons aussi Eclipse • La présentation sera faite sous Windows 7
  • 11.
    Are you ready? ☺ Java, avancé (examen 1Z0-804) alphorm.com™©
  • 12.
    Présentation de la plateformeJava Java et les plateformes Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Java et les plateformes
  • 13.
    Plan • Les versionsdes plateformes • Les éditions Java, avancé (examen 1Z0-804) alphorm.com™©
  • 14.
    Les versions desplateformes • Chaque plateforme contient des outils qui chacun correspond à une JSR (Java Specification Request) • La JVM (Java Virtual Machine) exécute le bytecode grâce au compilateur JIT (Just In Time) • Le JDK (Java Development Kit) contient le compilateur entre autre Java, avancé (examen 1Z0-804) alphorm.com™© • Le JRE (Java Runtime Environment) est l’environnement d’exécution • Les numéros de versions sont ceux des JDK • Chaque version correspond à une JSR
  • 15.
    Les éditions • LaJSE (Java Standard Edition) pour ordinateurs de bureau • La JEE (Java Entreprise Edition) pour serveurs • La JME (Java Micro Edition) pour environnements mémoires réduits • La Java FX, un environnement client riche Java, avancé (examen 1Z0-804) alphorm.com™© • JavaCard est un système d’exploitation pour carte à puce
  • 16.
    Ce qu’on acouvert • Les versions des plateformes • Les éditions Java, avancé (examen 1Z0-804) alphorm.com™©
  • 17.
    Présentation de la plateformeJava OpenJDK et les licences Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum OpenJDK et les licences
  • 18.
    Plan • JSR, JDK,OpenJDK • Les licences Java, avancé (examen 1Z0-804) alphorm.com™©
  • 19.
    JSR, JDK, OpenJDK •La JSR est la spécification, entre autre d’une version du framework • JDK 7 est par exemple le nom donné par Oracle • OpenJDK Project est une autre implémentation Java, avancé (examen 1Z0-804) alphorm.com™©
  • 20.
    Les licences • Lalicence GPL pour le code Java, mais pas totalement à l’origne • Depuis la version 7, OpenJDK devient l’implémentation de référence pour la JSR • Pour qu’une implémentation soit certifiée, elle doit passée le test de compatibilité et comparée à OpenJDK Java, avancé (examen 1Z0-804) alphorm.com™© • Le code source OpenJDK est diponible sour 2 licences : licence GNU, et licence Sun’s Java Research License (travaux académiques) • Le JDK Oracle et disponible sous BPL (code compilé uniquement) • Pour être intégré dans des distributions GNU, il faut OpenJDK complété éventuellement par IceTea (projet initial de RedHat)
  • 21.
    Ce qu’on acouvert • JSR, JDK, OpenJDK • Les licences Java, avancé (examen 1Z0-804) alphorm.com™©
  • 22.
    Présentation de la plateformeJava Java dans les Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Java dans les environnements serveurs
  • 23.
    Plan • Le contenude Java EE • Les implémentations Java, avancé (examen 1Z0-804) alphorm.com™©
  • 24.
    Le contenu deJava EE • Une plate forme pour exécuter • Une suite de tests • Une réalisation de référence • Les bonnes pratiques Java, avancé (examen 1Z0-804) alphorm.com™© • Objectifs : faciliter la construction d’applications serveur, sur la même base que JSE, mais avec des compléments fournis par le conteneur
  • 25.
    Les implémentations • OracleGlassfish est l’implémentation de référence Open Source Edition ou Enterprise Server… • JBoss, JEUS, Apache Geronimo, IBM WebSphere, Caucho Resin… • Les composants peuvent être : Servlet, JSP, JSTL, JSF, EJB, JNDI, JDBC, JMS, JPA, JAXB, … Java, avancé (examen 1Z0-804) alphorm.com™© JMS, JPA, JAXB, …
  • 26.
    Ce qu’on acouvert • Le contenu de Java EE • Les implémentations Java, avancé (examen 1Z0-804) alphorm.com™©
  • 27.
    Présentation de la plateformeJava Processus JCP Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Processus JCP
  • 28.
    Plan • Définition • Lesparticipants • Les JSR Java, avancé (examen 1Z0-804) alphorm.com™©
  • 29.
    Définition • Le JavaCommunity Process est le mécanisme pour faire évoluer les spécifications techniques de Java • Le processus consiste à faire évoluer une Java Specification Request à travers plusieurs étapes (JCP 2.9 version actuelle du processus) Java, avancé (examen 1Z0-804) alphorm.com™© • Initiation -> Première revue -> Brouillon public -> Maintenance
  • 30.
    Les participants • Onpeut participer librement au processus • Les Java User Group sont souvent impliqués • Public : chacun peut donner des commentaires • Member : faire des propositions Java, avancé (examen 1Z0-804) alphorm.com™© • Expert : donner la forme de la spécification • Specification Lead : choix des experts des groupes • Executive Committee : élu • Oracle a un siège permanent
  • 31.
    Les JSR • JavaSE : 62 JSR différentes Java SE 7 : JSR 336 Java SE 8 : JSR 337 • Java EE : 57 JSR différentes Java EE Security API : JSR 375 Java, avancé (examen 1Z0-804) alphorm.com™© Java EE Security API : JSR 375 • Java ME : 85 JSR différentes
  • 32.
    Ce qu’on acouvert • Définition • Les participants • Les JSR Java, avancé (examen 1Z0-804) alphorm.com™©
  • 33.
    Rappels sur lasyntaxe et les classes Java Classes simples Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Classes simples
  • 34.
    Plan • Déclarer uneclasse, syntaxe, fichier et outil • Déclarer les champs de données, visibilité, modificateurs • Déclarer les méthodes, visibilités, modificateurs • Modificateurs de la déclaration de la classe Java, avancé (examen 1Z0-804) alphorm.com™©
  • 35.
    Déclarer une classe •Mot-clé « class » • Dans un fichier qui porte le nom de la classe • L’IDE crée le fichier et la classe • Il est possible d’avoir plusieurs classes dans un fichier Java, avancé (examen 1Z0-804) alphorm.com™© • Il est possible de déclarer une classe dans une classe
  • 36.
    Déclarer les champsde donnée • Déclaration sans aucun ordre des membres de la classe • Déclarer le type puis le nom de la variable • Il est possible de placer une valeur par défaut • Il est possible de modifier la visibilité : public, protected, private Java, avancé (examen 1Z0-804) alphorm.com™© • Il est possible de rendre constant ce champ : final Mais empêche une affectation APRES l’initialisation
  • 37.
    Déclarer les méthodes •Déclaration sans ordre • Déclarer le type de la méthode (de retour), void si aucun • Le nom de méthode • Les paramètres, chacun étant typés Java, avancé (examen 1Z0-804) alphorm.com™© • Les méthodes supportent la surcharge • La visibilité peut-être modifiée • Le mot-clé « final » empêche une éventuelle redéfinition
  • 38.
    Modificateur dans ladéclaration de la classe • Une classe peut être « public » Impact sur le nom du fichier Impact sur les accès de l’extérieur de son package • Le mot-clé « final » signifie que la classe ne peut pas être dérivée Java, avancé (examen 1Z0-804) alphorm.com™©
  • 39.
    Ce qu’on acouvert • Déclarer une classe, syntaxe, fichier et outil • Déclarer les champs de données, visibilité, modificateurs • Déclarer les méthodes, visibilités, modificateurs • Modificateurs de la déclaration de la classe Java, avancé (examen 1Z0-804) alphorm.com™©
  • 40.
    Rappels sur lasyntaxe et les classes Java Champs, constructeurs Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Champs, constructeurs et méthodes
  • 41.
    Plan • Déclaration etutilisation des méthodes • Déclaration et utilisation des champs de données • Rôle des constructeurs Java, avancé (examen 1Z0-804) alphorm.com™©
  • 42.
    Déclaration et utilisationdes méthodes • Une méthode est un traitement disponible sur les objets • Il peut y avoir des paramètres • Un retour peut être récupéré • La sélection se fait sur un objet que l’on instancie auparavant Java, avancé (examen 1Z0-804) alphorm.com™© • Il existe des méthodes statiques
  • 43.
    Déclaration et utilisationdes champs • Un champ d’instance porte une valeur pour chaque objet • En général, le champ est privé • Utilisé dans les méthodes de l’objet • Peut être accessible via des getters et des setters Java, avancé (examen 1Z0-804) alphorm.com™© • Il existe des champs statiques
  • 44.
    Le rôle desconstructeurs • Il faut initialiser les champs de l’objet • Des paramètres permettent à l’utilisateur de : Choisir la version du constructeur (surcharge) Fournir des arguments de paramétrage La surcharge est fréquente Java, avancé (examen 1Z0-804) alphorm.com™© • La surcharge est fréquente • Un constructeur est une méthode : Portant le nom de la classe Sans retour
  • 45.
    Ce qu’on acouvert • Déclaration et utilisation des méthodes • Déclaration et utilisation des champs de données • Rôle des constructeurs Java, avancé (examen 1Z0-804) alphorm.com™©
  • 46.
    Rappels sur lasyntaxe et les classes Java Modélisation d’objets à Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Modélisation d’objets à l’aide de classes Java
  • 47.
    Plan • Modéliser lesobjets du monde réel • Traduire les objets réels en objets logiciels • Créer les classes et les structurer Java, avancé (examen 1Z0-804) alphorm.com™©
  • 48.
    Modéliser les objetsdu monde réel • Les objets métiers sont au cœur de l’application • Plusieurs façons de trouver les objets métiers À partir des exigences, usecase, … Concepts métiers décrits sous forme de noms Traduits sous la forme d’objets « entités » Java, avancé (examen 1Z0-804) alphorm.com™© • Traduits sous la forme d’objets « entités »
  • 49.
    Traduire le réelen logiciel • Un objet métier correspond à des données en base Un objet de mapping objet-relationnel Un objet de valeurs (contenant les données) • On devra ajouter Les objets de services Java, avancé (examen 1Z0-804) alphorm.com™© Les objets de services Les objets de présentation
  • 50.
    Créer les classeset les structurer • Sous la forme d’un diagramme de classes UML Expressif, lisible, et complet • Les classes possèdent Attributs Méthodes Java, avancé (examen 1Z0-804) alphorm.com™© Méthodes Constructeurs • Les classes sont reliées entre elles grâce aux associations • La traduction en Java est directe Les associations sont traduites en références (cf attributs références)
  • 51.
    Ce qu’on acouvert • Modéliser les objets du monde réel • Traduire les objets réels en objets logiciels • Créer les classes et les structurer Java, avancé (examen 1Z0-804) alphorm.com™©
  • 52.
    Rappels sur lasyntaxe et les classes Java Instructions package et Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Instructions package et import
  • 53.
    Plan • La notionde package, logique et physique • L’instruction package et le nom de la classe • Utiliser une classe d’un autre package, import, exceptions • L’utilisation des classes standards Java, avancé (examen 1Z0-804) alphorm.com™©
  • 54.
    La notion depackage • Un package est : Un espace de nommage Une limite de visibilité • Un répertoire Les packages sont organisés en hiérarchies Java, avancé (examen 1Z0-804) alphorm.com™© • Les packages sont organisés en hiérarchies
  • 55.
    L’instruction package • Enpremière ligne du fichier de la classe • « package » suivi d’un nom de package • Attention, le nom de package peut être composé • La classe (ou les classes) sont réputées être dans le package Java, avancé (examen 1Z0-804) alphorm.com™©
  • 56.
    L’instruction import • Pourutiliser une classe d’un autre package : Écrire le nom complet de la classe Ou bien utiliser « import » <nom_de_la_classe>, puis le nom court • Il est possible d’écrire un « import » pour toutes les classes d’un package Java, avancé (examen 1Z0-804) alphorm.com™© package • Les classes concernées doivent être « public » • Les classes imbriquées ont un nom composé avec le nom de la classe englobante
  • 57.
    L’utilisation des classesstandard • Toutes les classes de l’API Java sont dans des packages • Il est peu recommandé de ne pas utiliser de package Voire interdit lors de la livraison sur certains serveurs • Les import n’ont pas à être faits pour Java, avancé (examen 1Z0-804) alphorm.com™© Les classes de java.lang Les classes du même package
  • 58.
    Ce qu’on acouvert • La notion de package, logique et physique • L’instruction package et le nom de la classe • Utiliser une classe d’un autre package, import, exceptions • L’utilisation des classes standards Java, avancé (examen 1Z0-804) alphorm.com™©
  • 59.
    Encapsulation et polymorphisme Encapsulation pourla Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Encapsulation pour la conception de classes
  • 60.
    Plan • Principe del’encapsulation • L’encapsulation dans les classes • L’encapsulation dans les packages Java, avancé (examen 1Z0-804) alphorm.com™©
  • 61.
    Principe de l’encapsulation •L’encapsulation est le fait de masquer l’implémentation et de fournir une interface • Les bénéfices attendus : Sécurité de l’état des objets Maintenance facile car seuls les services sont utilisés Java, avancé (examen 1Z0-804) alphorm.com™© Maintenance facile car seuls les services sont utilisés Simplification de l’interface
  • 62.
    L’encapsulation dans lesclasses • Les classes masquent leurs implémentation : Le corps des méthodes Certaines méthodes Les champs de données • Les classes proposent une interface : Java, avancé (examen 1Z0-804) alphorm.com™© • Les classes proposent une interface : Les méthodes non privées Les constructeurs (non privés)
  • 63.
    L’encapsulation dans lespackages • Les classes peuvent être publiques ou non • La classe publique seule peut être utilisée de l’extérieur de son package • Les classes non publiques servent au fonctionnement du package • Un package est une unité de codage, de test, de livraison Java, avancé (examen 1Z0-804) alphorm.com™©
  • 64.
    Ce qu’on acouvert • Principe de l’encapsulation • L’encapsulation dans les classes • L’encapsulation dans les packages Java, avancé (examen 1Z0-804) alphorm.com™©
  • 65.
    Encapsulation et polymorphisme Modélisation deproblèmes Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Modélisation de problèmes métier à l’aide de classes Java
  • 66.
    Plan • Modélisation desbesoins • Modélisation d’analyse • Modélisation de conception • Traduction en Java Java, avancé (examen 1Z0-804) alphorm.com™©
  • 67.
    Modélisation des besoins •Les besoins sont exprimés par du texte Trop peu formel • La représentation classique des exigences passe par les usecase • Une approche NON orientée objets Java, avancé (examen 1Z0-804) alphorm.com™©
  • 68.
    Modélisation de l’analyse •La description des problèmes • En terme d’objets, sous la forme de classes Les classes ne montrent pas les méthodes • En terme de traitement, sous la forme de séquences Java, avancé (examen 1Z0-804) alphorm.com™© • Appelé aussi modèle du domaine
  • 69.
    Modélisation de conception •La description de la solution Liée à Java et à sa technologie • Les classes sont entités, contrôleurs, frontières … • Les séquences sont les mêmes que précédemment, mais plus détaillées Java, avancé (examen 1Z0-804) alphorm.com™© • Les classes sont équipées des méthodes correspondant aux séquences
  • 70.
    Traduction en Java •Chaque classe a son équivalent en Java • Accent mis sur les classes entités • Classes applicatives liées à l’architecture choisie • Génération automatique possible en Java Java, avancé (examen 1Z0-804) alphorm.com™©
  • 71.
    Ce qu’on acouvert • Modélisation des besoins • Modélisation d’analyse • Modélisation de conception • Traduction en Java Java, avancé (examen 1Z0-804) alphorm.com™©
  • 72.
    Encapsulation et polymorphisme Caractère nonmutable Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Caractère non mutable
  • 73.
    Plan • Briser l’encapsulation •Empêcher la modification des données internes • String est une classe non mutable Java, avancé (examen 1Z0-804) alphorm.com™©
  • 74.
    Briser l’encapsulation • L’encapsulationest mise en place pour protéger un objet Pas de champs de données publiques Limiter les getters/setters Passer par des méthodes • Il n’y a pas de « const » en Java, donc on n’interdit pas la modification Java, avancé (examen 1Z0-804) alphorm.com™© • Il n’y a pas de « const » en Java, donc on n’interdit pas la modification Lorsqu’on passe un objet en paramètre Lorsqu’on retourne un objet
  • 75.
    Empêcher la modification •Une classe non mutable (immutable value) est une classe qui ne permet la modification Constructeur Pas de setters Pas de méthode modifiant l’objet Java, avancé (examen 1Z0-804) alphorm.com™© Pas de méthode modifiant l’objet • Une méthode peut « faire comme si » elle modifiait Mais en fait elle retourne un nouvel objet
  • 76.
    String est uneclasse non mutable • Il est impossible de modifier une String en Java • Toutes les méthodes et tous les opérateur re-crée un objet • Transparent, intuitif, mais peu performant • Donc on peut exposer une String de son propre objet, l’utilisateur ne peut pas modifier la donnée réelle ! Java, avancé (examen 1Z0-804) alphorm.com™© peut pas modifier la donnée réelle !
  • 77.
    Ce qu’on acouvert • Briser l’encapsulation • Empêcher la modification des données internes • String est une classe non mutable Java, avancé (examen 1Z0-804) alphorm.com™©
  • 78.
    Encapsulation et polymorphisme Sous-classement Java, avancé(examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Sous-classement
  • 79.
    Plan • La relationde généralisation-spécialisation • Pourquoi utiliser des sous-classes Java, avancé (examen 1Z0-804) alphorm.com™©
  • 80.
    La relation degénéralisation-spécialisation • La super-classe est un type général, la sous-classe un sous-type • Une référence vers la super-classe peut pointer vers un objet de la sous-classe • Toutes les caractéristiques de la super-classe sont héritées par la sous- classe Java, avancé (examen 1Z0-804) alphorm.com™© • Les membres privés de la super-classe ne sont jamais visibles de la sous-classe
  • 81.
    Pourquoi utiliser dessous-classes ? • Pour manipuler des objets en tant que type très général Stabilité d’un code qui utilise des abstractions • Pour factoriser des caractéristiques communes Les sous-classes héritent des caractéristiques du parent Pour spécialiser des types Java, avancé (examen 1Z0-804) alphorm.com™© • Pour spécialiser des types Chaque sous-classe peut apporter une variante dans le comportement et dans le contenu
  • 82.
    Ce qu’on acouvert • La relation de généralisation-spécialisation • Pourquoi utiliser des sous-classes Java, avancé (examen 1Z0-804) alphorm.com™©
  • 83.
    Encapsulation et polymorphisme Surcharge deméthodes Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Surcharge de méthodes
  • 84.
    Plan • Ecrire plusieursméthodes même nom dans une classe • Les conséquences de la surcharge Java, avancé (examen 1Z0-804) alphorm.com™©
  • 85.
    Ecrire plusieurs méthodesmême nom • Le même nom de méthode peut être utilisé • Les paramètres sont différents • Le type de retour est indifférent, mais ne suffit pas • A l’appel, le compilateur branche la bonne méthode Java, avancé (examen 1Z0-804) alphorm.com™© • La surcharge est résolue à travers les niveaux d’héritage
  • 86.
    Les conséquences dela surcharge • Le compilateur résout l’appel de façon transparente en fonction des arguments fournis • Il n’y a pas de complexité syntaxique due à des inventions de nouveaux noms à chaque type de paramètres • Il n’y a pas de découverte à l’exécution, tout est compilé Java, avancé (examen 1Z0-804) alphorm.com™©
  • 87.
    Ce qu’on acouvert • Ecrire plusieurs méthodes même nom dans une classe • Les conséquences de la surcharge Java, avancé (examen 1Z0-804) alphorm.com™©
  • 88.
    Encapsulation et polymorphisme Méthode ànombre variable Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Méthode à nombre variable d’arguments
  • 89.
    Plan • Utilisation d’uneméthode à nombre variable d’arguments • Déclaration et codage Java, avancé (examen 1Z0-804) alphorm.com™©
  • 90.
    Utilisation d’une méthode« variadic » • Pour un traitement qui sera le même sur chacun des arguments • Equivalent à n surcharges de la méthode • Syntaxiquement proche du passage d’un tableau d’arguments Java, avancé (examen 1Z0-804) alphorm.com™©
  • 91.
    Déclaration et codage •Les arguments en nombre variable, c’est un tableau • On peut utiliser length et les accès aléatoires Java, avancé (examen 1Z0-804) alphorm.com™©
  • 92.
    Ce qu’on acouvert • Utilisation d’une méthode à nombre variable d’arguments • Déclaration et codage Java, avancé (examen 1Z0-804) alphorm.com™©
  • 93.
    Conception de classesJava Modificateurs public, Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Modificateurs public, protected et private
  • 94.
    Plan • Impact del’absence de modificateur • Influence du modificateur private • Influence du modificateur public • Influence du modificateur protected • Remarque sur le modificateur public de class Java, avancé (examen 1Z0-804) alphorm.com™© • Remarque sur le modificateur public de class
  • 95.
    Impact de l’absencede modificateur • Un membre sans visibilité est accessible du package entier • Cela définit une sorte de voisinage • Les classes sans visibilité elles-mêmes suivent la même règle Java, avancé (examen 1Z0-804) alphorm.com™©
  • 96.
    Influence du modificateurprivate • N’existe que sur les membres • Un membre privé n’est accessible que de l’intérieur de la classe • Attention, un objet d’une classe donnée peut accéder aux données privées d’un objet de la même classe • Typiquement utilisé pour les attributs Java, avancé (examen 1Z0-804) alphorm.com™© • Typiquement utilisé pour les attributs
  • 97.
    Influence du modificateurpublic • Un membre publique est accessible de partout • Typiquement utilisé pour des méthodes • Dangereux pour les attributs Les attributs participent à l’état de l’objet Java, avancé (examen 1Z0-804) alphorm.com™© • N’est intéressant que pour les classes elles-mêmes publiques
  • 98.
    Influence du modificateurprotected • Un membre protégé est accessible De toutes les classes du package de la classe qui contient le membre Des classes filles, y compris celles qui sont dans d’autres packages • A utiliser plutôt sur des méthodes d’accès Il est très simple de dériver une classe en Java Java, avancé (examen 1Z0-804) alphorm.com™© Il est très simple de dériver une classe en Java Je ne maîtrise pas qui dérive ma classe, et ce qu’il/elle en fait
  • 99.
    Remarque sur «public » pour « class » • Une classe n’est connue par défaut que de son package • Si la classe doit être accessible de l’extérieur de son package, elle doit être marquée « public » • Une classe publique aura certainement des membres publiques Java, avancé (examen 1Z0-804) alphorm.com™©
  • 100.
    Ce qu’on acouvert • Impact de l’absence de modificateur • Influence du modificateur private • Influence du modificateur public • Influence du modificateur protected • Remarque sur le modificateur public de class Java, avancé (examen 1Z0-804) alphorm.com™© • Remarque sur le modificateur public de class
  • 101.
    Conception de classesJava Remplacement de Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Remplacement de méthodes
  • 102.
    Plan • La spécialisationde classes • La redéfinition de méthode Java, avancé (examen 1Z0-804) alphorm.com™©
  • 103.
    La spécialisation declasses • Permet d’hériter de la totalité de la super-classe • Une sous-classe peut posséder en plus attributs et méthodes • Il n’est pas possible de faire disparaître des membres hérités • Il est possible de spécialiser un ou plusieurs comportements Java, avancé (examen 1Z0-804) alphorm.com™©
  • 104.
    La redéfinition deméthodes • C’est refaire la méthode dans la sous-classe alors qu’elle existe dans la super-classe • Le prototype de la méthode est identique Le corps de la méthode est différent • On peut ajouter l’annotation @Override Java, avancé (examen 1Z0-804) alphorm.com™© • On peut ajouter l’annotation @Override
  • 105.
    Ce qu’on acouvert • La spécialisation de classes • La redéfinition de méthode Java, avancé (examen 1Z0-804) alphorm.com™©
  • 106.
    Conception de classesJava Surcharge de constructeurs Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Surcharge de constructeurs
  • 107.
    Plan • Le rôledes constructeurs • Utiliser les paramètres des constructeurs • Surcharger les constructeurs Java, avancé (examen 1Z0-804) alphorm.com™©
  • 108.
    Le rôle desconstructeurs • Initialiser les champs de données • Mettre l’objet dans un état correct • Assurer que l’on peut travailler avec l’objet Java, avancé (examen 1Z0-804) alphorm.com™©
  • 109.
    Utiliser les paramètresdes constructeurs • Les paramètres sont utilisés pour initialiser les attributs • Les arguments sont fournis par l’utilisateur • Il n’y a pas de paramètres optionnels en Java Donc la signature du constructeur est contraignante pour l’appelant Java, avancé (examen 1Z0-804) alphorm.com™©
  • 110.
    Surcharger les constructeurs •Il est possible de déclarer plusieurs constructeurs qui se distinguent de par leurs signatures • Chaque constructeur correspond à une façon de créer l’objet • Le constructeur sans paramètre est le constructeur par défaut Il n’est plus généré lorsqu’on écrit un constructeur nous-même Java, avancé (examen 1Z0-804) alphorm.com™© Il n’est plus généré lorsqu’on écrit un constructeur nous-même Pas forcément nécessaire de le réécrire • Il est possible de chaîner les constructeurs entre eux Pour éviter les redondances de code
  • 111.
    Ce qu’on acouvert • Le rôle des constructeurs • Utiliser les paramètres des constructeurs • Surcharger les constructeurs Java, avancé (examen 1Z0-804) alphorm.com™©
  • 112.
    Conception de classesJava Opérateur instanceof Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Opérateur instanceof
  • 113.
    Plan • Un objetest d’une classe et une seule • Détecter le type d’un objet • Utiliser la détection d’un ancêtre du type Java, avancé (examen 1Z0-804) alphorm.com™©
  • 114.
    Un objet estd’une classe et une seule • Un objet a forcément une classe • Récupérer le descripteur : getClass() Eventuellement possible d’exploiter la description • L’objet est conforme à sa classe Java, avancé (examen 1Z0-804) alphorm.com™©
  • 115.
    Détecter le typed’un objet • Avec instanceOf, il est possible de vérifier le type de l’objet • Avec getClass(), on découvre le type de l’objet • L’opérateur instanceof implique une logique conditionnelle • Permettrait de détecter le type concret de l’objet et de choisir le traitement adapté à ce type Java, avancé (examen 1Z0-804) alphorm.com™© traitement adapté à ce type Utilisation dénoncée • Permet surtout de se protéger avant un transtypage
  • 116.
    Utiliser la détectiond’un ancêtre • L’opérateur instanceof teste les ancêtres Super-classes Interfaces implémentées • En fonction de l’interface, il est possible de choisir un traitement Conception par capacité Java, avancé (examen 1Z0-804) alphorm.com™© Conception par capacité
  • 117.
    Ce qu’on acouvert • Un objet est d’une classe et une seule • Détecter le type d’un objet • Utiliser la détection d’un ancêtre du type Java, avancé (examen 1Z0-804) alphorm.com™©
  • 118.
    Conception de classesJava Appel de méthode virtuelle Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Appel de méthode virtuelle Et polymorphisme
  • 119.
    Plan • Mise enplace du polymorphisme • Intérêt du polymorphisme • Dangers du polymorphisme Java, avancé (examen 1Z0-804) alphorm.com™©
  • 120.
    Mise en placedu polymorphisme • Il faut une généralisation-spécialisation : extends • Il faut une redéfinition : réécriture d’une méthode dans la sous-classe • Non indispensable : @Override, une annotation qui permet de faire vérifier la redéfinition par le compilateur Java, avancé (examen 1Z0-804) alphorm.com™©
  • 121.
    Intérêt du polymorphisme •L’usage du polymorphisme permet de : Écrire un code simple, qui utilise le type généralisé Déclencher des méthodes qui ne seront connues qu’à l’exécution Créer des points de variation dans le système Mettre en place des points d’extensibilité du système Java, avancé (examen 1Z0-804) alphorm.com™© Mettre en place des points d’extensibilité du système • A l’opposé du polymorphisme : tester le type des objets afin de déclencher un code spécifique sur chaque
  • 122.
    Dangers du polymorphisme •Il est impossible de savoir, à la lecture, quelle est la méthode qui sera déclenchée Tout dépend de l’objet qui sera créé et placé en face de l’appel • Le traitement sollicité peut être une surprise (non conforme, levée d’exception…) Java, avancé (examen 1Z0-804) alphorm.com™© Le principe de substitution voudrait que les appels soient correctement implémentés, mais ce principe est souvent violé
  • 123.
    Ce qu’on acouvert • Mise en place du polymorphisme • Intérêt du polymorphisme • Dangers du polymorphisme Java, avancé (examen 1Z0-804) alphorm.com™©
  • 124.
    Conception de classesJava Transtypage de références Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Transtypage de références d’objets
  • 125.
    Plan • Syntaxe dutranstypage • Le danger du transtypage • Utilisation inévitable du transtypage Java, avancé (examen 1Z0-804) alphorm.com™©
  • 126.
    Syntaxe du transtypage •Pour forcer le compilateur à accepter un appel • Le type de la référence à utiliser ne fournit pas la méthode Mais vous ‘savez’ que l’objet connaît la méthode • Mettre le type à obtenir entre parenthèses Java, avancé (examen 1Z0-804) alphorm.com™© Le compilateur est forcé d’accepter l’appel, mais il faudra que ce « cast » soit vrai à l’exécution
  • 127.
    Le danger dutranstypage • Le transtypage fait taire le compilateur • Mais ne préjuge rien à l’exécution Si l’objet n’est pas celui qui est attendu, problème ! ClassCastException : arrêt du programme par levée d’exception Java, avancé (examen 1Z0-804) alphorm.com™©
  • 128.
    Utilisation inévitable dutranstypage • Lorsqu’on utilise un framework Il faut dériver des classes, redéfinir des méthodes La redéfinition suppose une signature identique Java, avancé (examen 1Z0-804) alphorm.com™©
  • 129.
    Ce qu’on acouvert • Syntaxe du transtypage • Le danger du transtypage • Utilisation inévitable du transtypage Java, avancé (examen 1Z0-804) alphorm.com™©
  • 130.
    Conception de classes avancée Classesabstraites et Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Classes abstraites et généralisation de type
  • 131.
    Plan • La miseen place de le généralisation • L’intérêt d’une classe abstraite • Les méthodes abstraites Java, avancé (examen 1Z0-804) alphorm.com™©
  • 132.
    La mise enplace de la généralisation • La relation de généralisation s’utilise pour : Faire apparaître un super-type, pour avoir du code stable Factoriser des membres Spécialiser des comportements • La super-classe ne doit pas forcément être instanciée : « abstract » Java, avancé (examen 1Z0-804) alphorm.com™© • La super-classe ne doit pas forcément être instanciée : « abstract » • Empêcher l’instanciation peut se faire : En rendant les constructeurs privés : impossible de créer un objet de cette classe de l’extérieur de la classe En rendant la classe abstraite : la classe doit être dérivée
  • 133.
    L’intérêt d’une classeabstraite • Faire apparaître une généralisation • Mais la super-classe n’est là que pour factoriser des membres On ne veut pas d’objet de ce type • Les exemples de classes abstraites dans la vie réelle sont nombreux Java, avancé (examen 1Z0-804) alphorm.com™© Taxonomie : les noms d’espèces, de genres, de familles … • Une classe abstraite possède donc Des attributs Des méthodes Des constructeurs
  • 134.
    Les méthodes abstraites •Une méthode abstraite ne contient pas de corps Mot-clé « abstract » • Ne peuvent exister que dans des classes abstraites • Seront redéfinies dans les classes filles Java, avancé (examen 1Z0-804) alphorm.com™©
  • 135.
    Ce qu’on acouvert • La mise en place de le généralisation • L’intérêt d’une classe abstraite • Les méthodes abstraites Java, avancé (examen 1Z0-804) alphorm.com™©
  • 136.
    Conception de classes avancée Modificateursstatic et final Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Modificateurs static et final
  • 137.
    Plan • Modificateur static •Modificateur final • Les champs public static final Java, avancé (examen 1Z0-804) alphorm.com™©
  • 138.
    Modificateur static • Lemot clé « static » s’utilise sur un membre • Un champ « static » est une donnée partagée par tous les objets de la classe • Une méthode « static » est une méthode qui est appelée sur la classe elle-même, et non sur un objet Java, avancé (examen 1Z0-804) alphorm.com™© • Une méthode « static » ne peut accéder qu’aux champs « static » • Les champs « static » sont initialisés lors du chargement de la classe
  • 139.
    Modificateur final • Unchamp « final » ne supporte pas d’affectation Il est initialisé à la déclaration Ou bien dans un constructeur • Une méthode « final » ne peut pas être redéfinie Java, avancé (examen 1Z0-804) alphorm.com™©
  • 140.
    Les champs publicstatic final • En général, un champ ne doit pas être public • S’il est final, ce n’est pas dangereux Ne fait pas partie de l’état de l’objet • Math.PI : PI est public static et final Java, avancé (examen 1Z0-804) alphorm.com™© Constante publique
  • 141.
    Ce qu’on acouvert • Modificateur static • Modificateur final • Les champs public static final Java, avancé (examen 1Z0-804) alphorm.com™©
  • 142.
    Conception de classes avancée Meilleurespratiques pour Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Meilleures pratiques pour les modificateurs de champs
  • 143.
    Plan • Les champsde donnée • Les services des classes publiques • Les méthodes de classes de package • Cas particulier des classes à dériver Java, avancé (examen 1Z0-804) alphorm.com™©
  • 144.
    Les champs dedonnée • En général les champs de donnée sont privés • Car ils font partie de l’état de l’objet • Les champs constants peuvent être publiques Java, avancé (examen 1Z0-804) alphorm.com™©
  • 145.
    Les services desclasses publiques • Une classe publique est une façade de son package • Les méthodes d’une classe peuvent être publiques • Mais certaines méthodes peuvent rester inaccessibles de l’extérieur • A priori, si rien ne justifie qu’elle soit publique, une méthode reste privée Java, avancé (examen 1Z0-804) alphorm.com™© privée
  • 146.
    Les méthodes desclasses de package • A l’intérieur d’un package, une classe a des méthodes au mieux de visibilité de package (par défaut) • Les attributs restent privés, mais les services peuvent être rendus aux autres classes du package • Les méthodes qui ne sont utilisées qu’à l’intérieur du package restent privées Java, avancé (examen 1Z0-804) alphorm.com™© privées
  • 147.
    Cas particulier desclasses à dériver • Pour les classes qui doivent être dérivées, penser à mettre en protégé les méthodes utilisables par des sous-classes • Utile pour les sous-classes qui ne seront pas dans le même package Dans le même package, la visibilité par défaut suffit • Faire attention aux attributs protégés, qui seront modifiés sans contrôle Java, avancé (examen 1Z0-804) alphorm.com™© • Faire attention aux attributs protégés, qui seront modifiés sans contrôle par le code des sous-classes
  • 148.
    Ce qu’on acouvert • Les champs de donnée • Les services des classes publiques • Les méthodes de classes de package • Cas particulier des classes à dériver Java, avancé (examen 1Z0-804) alphorm.com™©
  • 149.
    Conception de classes avancée Implémenterle modèle Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Implémenter le modèle Singleton
  • 150.
    Plan • Utiliser unchamp « static » • Utiliser une méthode « static » • Le modèle Singleton simple • Le modèle thread-safe • Le modèle avec disposition Java, avancé (examen 1Z0-804) alphorm.com™© • Le modèle avec disposition
  • 151.
    Utiliser un champstatic • Un champ « static » correspond à une donnée partagée entre tous les objets de la classe Pas besoin de créer un objet pour utiliser ou évaluer cette donnée • En général, d’une visibilité restreinte, de façon à ce que les autres classes ne puissent pas y accéder librement Java, avancé (examen 1Z0-804) alphorm.com™©
  • 152.
    Utiliser une méthodestatic • Une méthode qui n’accède qu’aux champs « static » • Une méthode qui est appelée sur la classe • Ne nécessite pas la création préalable d’un objet Java, avancé (examen 1Z0-804) alphorm.com™©
  • 153.
    Le modèle Singletonsimple • Un champ « static », une méthode « static » qui créé l’instance ou bien qui la retourne si elle est déjà créée Java, avancé (examen 1Z0-804) alphorm.com™©
  • 154.
    Le modèle thread-safe •Le code précédent n’est pas protégé contre des accès simultanés de plusieurs thread en même temps • Créer une section critique ? Mais pas la méthode entière • Faire créer l’instance à l’initialisation ? Mais plus de création à la demande Java, avancé (examen 1Z0-804) alphorm.com™©
  • 155.
    Le modèle avecdisposition • Il faut savoir se débarrasser de l’instance unique A priori seulement après la fin du main • Créer une méthode Reset qui élimine l’instance Java, avancé (examen 1Z0-804) alphorm.com™©
  • 156.
    Ce qu’on acouvert • Utiliser un champ « static » • Utiliser une méthode « static » • Le modèle Singleton simple • Le modèle thread-safe • Le modèle avec disposition Java, avancé (examen 1Z0-804) alphorm.com™© • Le modèle avec disposition
  • 157.
    Conception de classes avancée Conceptionde classes Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Conception de classes abstraites
  • 158.
    Plan • Pourquoi créerdes classes abstraites • Rôle des classes abstraites • Algorithme utilisant des méthodes abstraites Java, avancé (examen 1Z0-804) alphorm.com™©
  • 159.
    Pourquoi créer desclasses abstraites • Pour factoriser du code Éviter les redondances • Eviter que l’utilisateur ne crée des objets à partir de classes incomplètes • Créer des modèles symétriques plus simples Java, avancé (examen 1Z0-804) alphorm.com™©
  • 160.
    Rôle des classesabstraites • Factoriser du code pour de futures classes dérivées • Représenter des comportements génériques • Réifier des algorithmes Java, avancé (examen 1Z0-804) alphorm.com™©
  • 161.
    Algorithme utilisant desméthodes abstraites • Une classe mère abstraite • Elle contient un squelette d’algorithme • Celui-ci appelle des méthodes abstraites • Les classes filles implémentent les parties Java, avancé (examen 1Z0-804) alphorm.com™©
  • 162.
    Ce qu’on acouvert • Pourquoi créer des classes abstraites • Rôle des classes abstraites • Algorithme utilisant des méthodes abstraites Java, avancé (examen 1Z0-804) alphorm.com™©
  • 163.
    Conception de classes avancée Classesimbriquées Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Classes imbriquées
  • 164.
    Plan • La syntaxedes classes imbriquées • Intérêt des classes imbriquées Java, avancé (examen 1Z0-804) alphorm.com™©
  • 165.
    Syntaxe des classesimbriquées • Ecrire une classe dans une classe • Le nom de la classe est masquée • Le nom des fichiers est particulier Java, avancé (examen 1Z0-804) alphorm.com™©
  • 166.
    Intérêt des classesimbriquées • Accès aux membres privés de la classe englobante • Imbrication des objets eux-mêmes • Cas particulier des « static class » Java, avancé (examen 1Z0-804) alphorm.com™©
  • 167.
    Ce qu’on acouvert • La syntaxe des classes imbriquées • Intérêt des classes imbriquées Java, avancé (examen 1Z0-804) alphorm.com™©
  • 168.
    Conception de classes avancée Typesd’énumération Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Types d’énumération
  • 169.
    Plan • Une classedont on veut limiter le nombre d’instance et leurs valeurs • Le type « enum » Java, avancé (examen 1Z0-804) alphorm.com™©
  • 170.
    Une classe àvaleurs limitées • On ne maîtrise pas les instances d’une classe • Les types standards n’ont pas de limite non plus • Il est possible de créer les futures valeurs Limiter les instances Java, avancé (examen 1Z0-804) alphorm.com™© Beaucoup de travail
  • 171.
    Le type enum •Un énuméré est un type • Dont on énumère toutes les valeurs • Qui peut posséder des méthodes Java, avancé (examen 1Z0-804) alphorm.com™©
  • 172.
    Ce qu’on acouvert • Une classe dont on veut limiter le nombre d’instance et leurs valeurs • Le type « enum » Java, avancé (examen 1Z0-804) alphorm.com™©
  • 173.
    Héritage et interfaces InterfacesJava Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Interfaces Java
  • 174.
    Plan • Principe del’interface • Déclaration d’une interface • Implémentation d’une interface • Héritage entre interfaces Java, avancé (examen 1Z0-804) alphorm.com™©
  • 175.
    Principe de l’interface •Une interface définit un type utilisateur • Comme une classe, mais sans implémentation • Peut posséder des déclarations de méthodes Abstract public Java, avancé (examen 1Z0-804) alphorm.com™© • Peut posséder des déclarations de constantes Public static final • Sert à déclarer des services sans les implémenter • Doit être implémentée par une classe
  • 176.
    Déclaration d’une interface •Mot clé « interface » à la place de « class » • Dans son propre fichier • Peut être « public » ou pas Java, avancé (examen 1Z0-804) alphorm.com™©
  • 177.
    Implémenter une interface •Il faut qu’une classe implémente l’interface • Mot clé « implements » • Obligation pour la classe de fournir les méthodes prévues Ou bien cette classe doit être marquée « abstract » Java, avancé (examen 1Z0-804) alphorm.com™© • Très proche de la notion d’héritage, mais on n’hérite de rien, si ce n’est de l’obligation de tout implémenter
  • 178.
    Héritage entre interfaces •Une interface peut hériter d’une autre • Cela sert à enrichir les interfaces en terme de livraisons successives • Une interface peut hériter de plusieurs interfaces Java, avancé (examen 1Z0-804) alphorm.com™©
  • 179.
    Ce qu’on acouvert • Principe de l’interface • Déclaration d’une interface • Implémentation d’une interface • Héritage entre interfaces Java, avancé (examen 1Z0-804) alphorm.com™©
  • 180.
    Héritage et interfaces Lestypes d’héritages Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les types d’héritages
  • 181.
    Plan • Les différentstypes d’héritages • L’héritages d’implémentation • L’héritage d’interfaces Java, avancé (examen 1Z0-804) alphorm.com™©
  • 182.
    Les différents typesd’héritages • On peut hériter pour plusieurs raisons • Pour récupérer une implémentation existante Héritage d’implémentation • Pour proposer les mêmes services qu’un ancêtre Java, avancé (examen 1Z0-804) alphorm.com™© Héritage d’interfaces
  • 183.
    L’héritage d’implémentation • Onhérite pour ne pas recoder les méthodes, les champs • Moins de travail à faire, mais attention à la pertinence • Suit une logique ‘métier’ • Typiquement réalisé en Java avec « extends » Java, avancé (examen 1Z0-804) alphorm.com™©
  • 184.
    L’héritage d’interfaces • Onhérite pour proposer les mêmes services vis-à-vis de l’extérieur • Tout le travail est à faire, car on ne récupère pas une implémentation • Suit une logique ‘service’ • Typiquement réalisé avec « implements » Java, avancé (examen 1Z0-804) alphorm.com™©
  • 185.
    Ce qu’on acouvert • Les différents types d’héritages • L’héritages d’implémentation • L’héritage d’interfaces Java, avancé (examen 1Z0-804) alphorm.com™©
  • 186.
    Héritage et interfaces Compositiond’objets et Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Composition d’objets et délégation de méthode
  • 187.
    Plan • Héritage d’implémentation •Composition • Problème posé par la délégation Java, avancé (examen 1Z0-804) alphorm.com™©
  • 188.
    Héritage d’implémentation • L’héritagepour des raisons d’implémentation peut Ne pas être clair Ne pas respecter le test is-a ou le test 100% • La relation d’héritage est extrêmement forte Java, avancé (examen 1Z0-804) alphorm.com™©
  • 189.
    La composition • Lacomposition est l’association de contenance entre deux objets • Cela permet de réutiliser un objet • Il faut réécrire les méthodes • Clair dans son intention Java, avancé (examen 1Z0-804) alphorm.com™©
  • 190.
    Problème posé parla délégation • Lorsqu’une association est établie entre 2 classes • Il y a 2 objets • Il faut gérer ces 2 objets à la place d’un seul • Le fait de rappeler une méthode d’un objet à partir de l’autre est la délégation Java, avancé (examen 1Z0-804) alphorm.com™© délégation
  • 191.
    Ce qu’on acouvert • Héritage d’implémentation • Composition • Problème posé par la délégation Java, avancé (examen 1Z0-804) alphorm.com™©
  • 192.
    Héritage et interfaces Implémentationde plusieurs Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Implémentation de plusieurs interfaces
  • 193.
    Plan • Une classepeut implémenter plusieurs interfaces • Les collisions Java, avancé (examen 1Z0-804) alphorm.com™©
  • 194.
    Une classe implémenteplusieurs interfaces • Utiliser « implements » une seule fois, avec une liste des interfaces • Il faut implémenter toutes les méthodes prévues par les interfaces Java, avancé (examen 1Z0-804) alphorm.com™©
  • 195.
    Les collisions • Lescollisions de champs de ne peuvent pas exister • Les méthodes seront sous la forme d’une seule implémentation • Seul cas difficile : la même méthode, mais avec un retour différent Java, avancé (examen 1Z0-804) alphorm.com™©
  • 196.
    Ce qu’on acouvert • Une classe peut implémenter plusieurs interfaces • Les collisions Java, avancé (examen 1Z0-804) alphorm.com™©
  • 197.
    Héritage et interfaces Lemodèle de conception Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Le modèle de conception DAO
  • 198.
    Plan • A quoisert un Data Access Object • Implémentation du modèle Java, avancé (examen 1Z0-804) alphorm.com™©
  • 199.
    A quoi sertle modèle DAO • Isoler les accès aux données persistantes • Eviter les impacts d’un changement de mode de stockage • Regrouper les accès aux données dans des classes dédiées Java, avancé (examen 1Z0-804) alphorm.com™©
  • 200.
    Implémentation du modèle •Un point d’accès au modèle DAO • Des interfaces représentant les accès à chaque type de données • Les implémentations de ces accès Java, avancé (examen 1Z0-804) alphorm.com™©
  • 201.
    Ce qu’on acouvert • A quoi sert un Data Access Object • Implémentation du modèle Java, avancé (examen 1Z0-804) alphorm.com™©
  • 202.
    Types génériques et collections Classesgénériques et Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Classes génériques et paramètres de type
  • 203.
    Plan • Définition d’uneclasse générique • Utilisation d’une classe générique Java, avancé (examen 1Z0-804) alphorm.com™©
  • 204.
    Définition d’une classegénérique • Une classe « patron », qui est paramétrable par un type • Définit une famille de classes, qui seront générées à la demande • Ecrite une seule fois, utilisée plusieurs fois • Très utile en particulier pour les conteneurs Java, avancé (examen 1Z0-804) alphorm.com™© • Alternative au code sur Object
  • 205.
    Utilisation d’une classegénérique • Définir une classe générique Syntaxe du C++ « Classe<T> » Utiliser le symbole choisi T dans le code • A l’appel, remplacer T par un type classe réel Syntaxe Classe<Integer> Java, avancé (examen 1Z0-804) alphorm.com™© Syntaxe Classe<Integer>
  • 206.
    Ce qu’on acouvert • Définition d’une classe générique • Utilisation d’une classe générique Java, avancé (examen 1Z0-804) alphorm.com™©
  • 207.
    Types génériques et collections Inférencede type losange Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Inférence de type losange
  • 208.
    Plan • Définition del’inférence de type • Comment alléger l’écriture Java, avancé (examen 1Z0-804) alphorm.com™©
  • 209.
    Définition de l’inférencede type • L’inférence de type est réalisée par le compilateur • Il va placer le bon type en fonction de ce qui est attendu • Tout est compilé, donc pas de surprises à l’exécution Java, avancé (examen 1Z0-804) alphorm.com™©
  • 210.
    Comment alléger l’écriture •Avec l’inférence de type, on évite de répéter du code • Ecriture plus simple • Mais il faut spécifier quand même les « <> » Java, avancé (examen 1Z0-804) alphorm.com™©
  • 211.
    Ce qu’on acouvert • Définition de l’inférence de type • Comment alléger l’écriture Java, avancé (examen 1Z0-804) alphorm.com™©
  • 212.
    Types génériques et collections Typesgénériques et Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Types génériques et collections
  • 213.
    Plan • Les collectionssans généricité • Les collections modernes, utilisant la généricité Java, avancé (examen 1Z0-804) alphorm.com™©
  • 214.
    Les collections sansgénéricité • Collections manipulant des Object • Code qui compile toujours Mais risques à l’exécution Perte de types, il faut forcer les types Autre possibilité : copier-coller !! Java, avancé (examen 1Z0-804) alphorm.com™© • Autre possibilité : copier-coller !!
  • 215.
    Les collections modernes,avec généricité • La collection s’applique sur un type générique • Choisir le type au moment de la création de l’objet • Il peut y avoir plusieurs types • Collection typée Java, avancé (examen 1Z0-804) alphorm.com™©
  • 216.
    Ce qu’on acouvert • Les collections sans généricité • Les collections modernes, utilisant la généricité Java, avancé (examen 1Z0-804) alphorm.com™©
  • 217.
    Types génériques et collections Lesobjets List et Map Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les objets List et Map
  • 218.
    Plan • L’interface List •L’interface Map Java, avancé (examen 1Z0-804) alphorm.com™©
  • 219.
    L’interface List • Lesobjets de classes implémentant List Conservent l’ordre d’insertion Proposent un accès aléatoire • L’interface List est une sous-interface de Collection Plusieurs classes implémentent l’interface List Java, avancé (examen 1Z0-804) alphorm.com™© • Plusieurs classes implémentent l’interface List ArrayList LinkedList
  • 220.
    L’interface Map • Lesobjets de classes implémentant Map Utilisent une clé pour ranger les valeurs Proposent un accès aléatoire, utilisant la clé • L’interface Map prend 2 paramètres génériques obligatoirement Plusieurs classes implémentent l’interface Map Java, avancé (examen 1Z0-804) alphorm.com™© • Plusieurs classes implémentent l’interface Map HashMap TreeMap
  • 221.
    Ce qu’on acouvert • L’interface List • L’interface Map Java, avancé (examen 1Z0-804) alphorm.com™©
  • 222.
    Types génériques et collections Pileavec Deque Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Pile avec Deque
  • 223.
    Plan • L’interface Deque •Réaliser une pile conforme Java, avancé (examen 1Z0-804) alphorm.com™©
  • 224.
    L’interface Deque • Sous-interfacede Queue, elle-même sous-interface de Collection • Utilisable des deux côtés • Méthodes addFirst, addLast, … • Permet d’implémenter FIFO, et LIFO Java, avancé (examen 1Z0-804) alphorm.com™©
  • 225.
    Réaliser une pileavec Deque • En utilisant les méthodes addFirst, removeFirst, peekFirst • Pour implémenter les méthodes De la Pile : push, pop, peek Java, avancé (examen 1Z0-804) alphorm.com™©
  • 226.
    Ce qu’on acouvert • L’interface Deque • Réaliser une pile conforme Java, avancé (examen 1Z0-804) alphorm.com™©
  • 227.
    Traitement des chaînes Manipulationavec Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Manipulation avec StringBuilder et StringBuffer
  • 228.
    Plan • String, StringBufferet StringBuilder • Les méthodes de StringBuilder Java, avancé (examen 1Z0-804) alphorm.com™©
  • 229.
    String, StringBuffer etStringBuilder • La classe String est ‘immutable value’ Les méthodes de String ne modifie pas la chaîne en place • StringBuffer est synchronisée Utilisée pour un buffer, mais les opérations sont thread-safe StringBuilder n’est pas synchronisée et donc souhaitable dans un Java, avancé (examen 1Z0-804) alphorm.com™© • StringBuilder n’est pas synchronisée et donc souhaitable dans un contexte non multithread Doit être préférée à la précédente, et offre les mêmes méthodes
  • 230.
    Les méthodes deStringBuilder • Constructeurs : Par défaut Avec un CharSequence en paramètre Avec une capacité A partir d’une String Java, avancé (examen 1Z0-804) alphorm.com™© A partir d’une String • Méthodes : append, insert • Redimensionnement automatique
  • 231.
    Ce qu’on acouvert • String, StringBuffer et StringBuilder • Les méthodes de StringBuilder Java, avancé (examen 1Z0-804) alphorm.com™©
  • 232.
    Traitement des chaînes Principalesméthodes liées Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Principales méthodes liées aux chaînes de caractères
  • 233.
    Plan • La classeString, ses méthodes et les opérateurs • La méthode toString • Les classes StringTokenizer et Scanner • Les classes StringBuilder et StringBuffer • Les expressions régulières Java, avancé (examen 1Z0-804) alphorm.com™© • Les expressions régulières
  • 234.
    La classe String,ses méthodes et opérateurs • La classe String représente une chaîne non modifiable • Toutes ses méthodes font des modifications créent un nouvel objet • Des opérateurs sont disponibles sur String • L’initialisation littérale de String est possible Java, avancé (examen 1Z0-804) alphorm.com™© • Un très grand nombre de méthodes
  • 235.
    La méthode toString •Disponible sur tout objet Java • Implémenté par défaut sur Object • Redéfinissable • Produit une chaîne qui doit représenter l’objet Java, avancé (examen 1Z0-804) alphorm.com™©
  • 236.
    Les classes StringTokenizeret Scanner • Utiles pour parcourir une chaîne de caractères • Fonctionne sur le mode de l’énumération • StringTokenizer est plus ancien et plus limité que Scanner Java, avancé (examen 1Z0-804) alphorm.com™©
  • 237.
    Les classes StringBufferet StringBuilder • La représentation des buffer • Chaînes de caractères modifiables • Aucun rapport avec String, utiliser toString pour obtenir la chaîne Java, avancé (examen 1Z0-804) alphorm.com™©
  • 238.
    Les expressions régulières •Avec String, … on peut appliquer les expressions régulières • Représente un motif A chercher dans un texte A substituer dans un texte Pour découper des chaînes Java, avancé (examen 1Z0-804) alphorm.com™© Pour découper des chaînes Pour filtrer
  • 239.
    Ce qu’on acouvert • La classe String, ses méthodes et les opérateurs • La méthode toString • Les classes StringTokenizer et Scanner • Les classes StringBuilder et StringBuffer • Les expressions régulières Java, avancé (examen 1Z0-804) alphorm.com™© • Les expressions régulières
  • 240.
    Traitement des chaînes Analysede texte dans Java Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Analyse de texte dans Java
  • 241.
    Plan • Parcourir unechaîne avec StringTokenizer • Analyser un texte : les mots, les lettres Java, avancé (examen 1Z0-804) alphorm.com™©
  • 242.
    Parcourir une chaîneavec StringTokenizer • Créer un objet StringTokenizer • Directement connaître le nombre de ‘token’ : countTokens() • Parcourir : hasMoreToken(), nextToken() Java, avancé (examen 1Z0-804) alphorm.com™©
  • 243.
    Analyser un texte •Compter les mots : utiliser StringTokenizer • Compter les lettres : parcourir la chaîne • Intérêt : faire de la cryptanalyse ;) Java, avancé (examen 1Z0-804) alphorm.com™©
  • 244.
    Ce qu’on acouvert • Parcourir une chaîne avec StringTokenizer • Analyser un texte : les mots, les lettres Java, avancé (examen 1Z0-804) alphorm.com™©
  • 245.
    Traitement des chaînes Traitementdes entrées avec Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Traitement des entrées avec Scanner
  • 246.
    Plan • Entrée d’unscanner • Manipulation par un scanner Java, avancé (examen 1Z0-804) alphorm.com™©
  • 247.
    Entrée d’un scanner •Un scanner peut être construit à partir de Un fichier Un flux Une chaîne Une source de caractères Java, avancé (examen 1Z0-804) alphorm.com™© Une source de caractères Un canal d’octet
  • 248.
    Manipulation par unscanner • Enumérer des valeurs typées • Rechercher des motifs ou des chaînes • Enumérer des morceaux de chaînes Java, avancé (examen 1Z0-804) alphorm.com™©
  • 249.
    Ce qu’on acouvert • Entrée d’un scanner • Manipulation par un scanner Java, avancé (examen 1Z0-804) alphorm.com™©
  • 250.
    Traitement des chaînes Affichageet mise en forme Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Affichage et mise en forme de texte
  • 251.
    Plan • La classeFormatter • String.format, System.out.printf, System.out.format • DateFormat, NumberFormat, DecimalFormat Java, avancé (examen 1Z0-804) alphorm.com™©
  • 252.
    La classe Formatter •Cette classe permet d’appliquer des motifs façon « printf » • Un objet de type Formatter peut être lié à un StringBuilder • Permet de formatter, réorganiser les paramètres • Les conversions sont Java, avancé (examen 1Z0-804) alphorm.com™© Générales, Character, Numeric, Date/Time, Percent, LineSeparator
  • 253.
    String.format, printf… • Méthodesde confort exploitant un Formatter • String.format permet de formatter une chaîne de caractères • System.out.printf ou format gère directement l’affichage Java, avancé (examen 1Z0-804) alphorm.com™©
  • 254.
    DateFormat, NumberFormat, DecimalFormat •Dans le package java.text • Permet de formatter les dates, les nombres… • Existe en une instance dépendant du poste • S’adapte aux cultures Java, avancé (examen 1Z0-804) alphorm.com™© • Gère le formatage et aussi le parsing
  • 255.
    Ce qu’on acouvert • La classe Formatter • String.format, System.out.printf, System.out.format • DateFormat, NumberFormat, DecimalFormat Java, avancé (examen 1Z0-804) alphorm.com™©
  • 256.
    Traitement des chaînes Expressionsrégulières avec Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Expressions régulières avec Pattern et Matcher
  • 257.
    Plan • Les expressionsrégulières • La classe Pattern • La classe Matcher Java, avancé (examen 1Z0-804) alphorm.com™©
  • 258.
    Les expressions régulières •Sorte de langage à la grammaire simple • Permet de retrouver des motifs dans des chaînes de caractères • Basé sur Perl5, mais quelques constructions en moins • Motifs : Java, avancé (examen 1Z0-804) alphorm.com™© Caractères d’échappement n, t … [abc] : a ou b ou c, [^abc] : tout sauf a ou b ou c, [a-z] : de a à z . : tout caractère, d : [0-9], D : [^0-9], s : un blanc, w : [a-zA-Z0-9] X? : un ou zéro, X* : 0 ou plus, X+ : 1 ou plus, X{n} : n, X{n,m} : entre n et m
  • 259.
    La classe Pattern •Le package java.util.regex • Permet de compiler une expression régulière en un motif • Méthodes statiques : compile, matches, quote Java, avancé (examen 1Z0-804) alphorm.com™© • Autres méthodes : matcher, pattern, split, toString
  • 260.
    La classe Matcher •Représente un outil pour gérer les correspondances d’un motif Faire correspondre toute la séquence Rechercher le pattern en partant du début Rechercher la prochaine partie qui correspond au motif Java, avancé (examen 1Z0-804) alphorm.com™©
  • 261.
    Ce qu’on acouvert • Les expressions régulières • La classe Pattern • La classe Matcher Java, avancé (examen 1Z0-804) alphorm.com™©
  • 262.
    Exceptions et assertions Catégoriesd’exceptions Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Catégories d’exceptions
  • 263.
    Plan • La classeThrowable • La classe Exception • Les exceptions non gérées • Les exceptions gérées Java, avancé (examen 1Z0-804) alphorm.com™©
  • 264.
    La classe Throwable •Classe mère de tout ce qui peut être levé lorsqu’une erreur est détectée • Plusieurs constructeurs : Throwable () Throwable (String message) Throwable (String message, Throwable cause) Java, avancé (examen 1Z0-804) alphorm.com™© Throwable (String message, Throwable cause) Throwable (String message, Throwable cause, boolean sup, boolean stack) Throwable (Throwable cause) • Méthodes : getMessage(), getCause() ….
  • 265.
    La classe Exception •Classe dérivée de Throwable • Classe mère de tout ce qui peut être levé dans une application • Plusieurs constructeurs : Exception() Java, avancé (examen 1Z0-804) alphorm.com™© Exception(String message) Exception(String message, Throwable cause) Exception(String message, Throwable cause, boolean sup, boolean stack) Exception(Throwable cause)
  • 266.
    Les exceptions nongérées • RuntimeException est la classe mère de toutes les classes d’exceptions qui arrivent normalement dans une application • Le compilateur n’oblige pas à gérer ces exceptions • On parle d’exceptions non gérées • ArithmeticException, ClassCastException, NullpointerException … Java, avancé (examen 1Z0-804) alphorm.com™© • ArithmeticException, ClassCastException, NullpointerException … • Sont déclarées dans java.lang
  • 267.
    Les exceptions gérées •Classes dérivées de Exception En réalité tout Throwable qui n’est ni Error, ni RuntimeException • Le compilateur exigera une gestion explicite avec les mots clés try-catch-throw-throws On ne peut pas ignorer simplement la levée de ces exceptions Java, avancé (examen 1Z0-804) alphorm.com™© • On ne peut pas ignorer simplement la levée de ces exceptions
  • 268.
    Ce qu’on acouvert • La classe Throwable • La classe Exception • Les exceptions non gérées • Les exceptions gérées Java, avancé (examen 1Z0-804) alphorm.com™©
  • 269.
    Exceptions et assertions Classesd’exception Java Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Classes d’exception Java standard
  • 270.
    Plan • Les classesd’exception non gérées de java.lang • Les classes d’exception gérées de java.lang Java, avancé (examen 1Z0-804) alphorm.com™©
  • 271.
    Les classes d’exceptionnon gérées • ArithmeticException Java, avancé (examen 1Z0-804) alphorm.com™© • ArrayIndexOutOfBoundsException • ArrayStoreException • ClassCastException
  • 272.
    Les classes d’exceptionnon gérées • IllegalArgumentException : mauvais argument lors d’un appel de méthode • IllegalMonitorStateException : attente d’un thread non bloqué • IllegalStateException : application dans un état incorrect • IllegalThreadStateException : l’état du thread ne permet pas de réaliser l’opération • IndexOutOfBoundsException : débordement d’index • NegativeArraySizeException : allocation d’un tableau avec une taille négative Java, avancé (examen 1Z0-804) alphorm.com™© • NegativeArraySizeException : allocation d’un tableau avec une taille négative • NullPointerException : utilisation d’une référence nulle • NumberFormatException : conversion de chaîne de caractère en numérique impossible • SecurityException : tentative de violation de sécurité • StringIndexOutOfBounds : index supérieur à la taille de la chaîne • UnsupportedOperationException : opération non supportée
  • 273.
    Les classes d’exceptiongérées • Ces exceptions qui correspondent à certaines API • Les exceptions qui sont liées aux entrées-sorties • Les exceptions liées aux bases de données • Le compilateur exigera une gestion du cas exceptionnel Java, avancé (examen 1Z0-804) alphorm.com™©
  • 274.
    Ce qu’on acouvert • Les classes d’exception non gérées de java.lang • Les classes d’exception gérées de java.lang Java, avancé (examen 1Z0-804) alphorm.com™©
  • 275.
    Exceptions et assertions Créationde classes Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Création de classes d’exception
  • 276.
    Plan • Hériter deException • Déclarer des membres spécifiques Java, avancé (examen 1Z0-804) alphorm.com™©
  • 277.
    Hériter de Exception •Il est indispensable d’hériter de Exception • Faire le choix du constructeur Le message est déjà prévu La cause est déjà prévue Un héritage sur RuntimeException est possible Java, avancé (examen 1Z0-804) alphorm.com™© • Un héritage sur RuntimeException est possible
  • 278.
    Déclarer des membresspécifiques • Une exception capte le contexte d’erreur et le remonte Constructeur avec les paramètres appropriés Getter pour restituer l’information • Les attributs vont avec… Une exception peut ne pas avoir d’attributs spécifiques Java, avancé (examen 1Z0-804) alphorm.com™© • Une exception peut ne pas avoir d’attributs spécifiques Son type seul suffit à l’identifier
  • 279.
    Ce qu’on acouvert • Hériter de Exception • Déclarer des membres spécifiques Java, avancé (examen 1Z0-804) alphorm.com™©
  • 280.
    Exceptions et assertions Lesmots-clés try, catch et Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les mots-clés try, catch et finally
  • 281.
    Plan • Le mot-clétry • Le mot-clé catch • Le mot-clé finally • La déclaration de levée d’exception Java, avancé (examen 1Z0-804) alphorm.com™©
  • 282.
    Le mot-clé try •Mot-clé qui introduit le bloc de code nominal • Ce bloc sera suivi des blocs de gestion d’erreur Java, avancé (examen 1Z0-804) alphorm.com™©
  • 283.
    Le mot-clé catch •Correspond à un bloc de gestion d’erreur • Plusieurs blocs catch peuvent suivre un try • Il seront évalués dans l’ordre de présence dans le code Java, avancé (examen 1Z0-804) alphorm.com™©
  • 284.
    Le mot-clé finally •Termine la séquence des catch • Optionnel • Introduit in bloc garanti d’exécution Java, avancé (examen 1Z0-804) alphorm.com™©
  • 285.
    La déclaration dela levée d’exceptions • Pour gérer les exceptions, 2 possibilités : Try-catch pour gérer à ce niveau l’exception Throws pour laisser passer l’exception Java, avancé (examen 1Z0-804) alphorm.com™©
  • 286.
    Ce qu’on acouvert • Le mot-clé try • Le mot-clé catch • Le mot-clé finally • La déclaration de levée d’exception Java, avancé (examen 1Z0-804) alphorm.com™©
  • 287.
    Exceptions et assertions L’interfaceAutoCloseable et Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum L’interface AutoCloseable et try-with-resources
  • 288.
    Plan • L’absence dedestruction déterministe • Avec try-with-resources Java, avancé (examen 1Z0-804) alphorm.com™©
  • 289.
    L’absence de destructiondéterministe • Le ramasse-miette se charge de récupérer la mémoire non utilisée • Mais son passage est dicté par ses propres algorithmes • Il est possible mais souvent maladroit de déclencher le gc • En Java, il n’y a pas de destructeur déterministe Java, avancé (examen 1Z0-804) alphorm.com™© Cela évite au développeur d’avoir à écrire le « delete » • Mais certains objets ont des ressources (non mémoire) associées Il faut les forcer à libérer ces ressources
  • 290.
    Avec try-with-resources • Provoquerle « close » sur un objet • Il faut implémenter AutoCloseable Java, avancé (examen 1Z0-804) alphorm.com™©
  • 291.
    Ce qu’on acouvert • L’absence de destruction déterministe • Avec try-with-resources Java, avancé (examen 1Z0-804) alphorm.com™©
  • 292.
    Exceptions et assertions Multi-catch Java,avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Multi-catch
  • 293.
    Plan • Plusieurs catchsont possibles derrière un try • Le polymorphisme des exceptions • Le contenu d’un catch Java, avancé (examen 1Z0-804) alphorm.com™©
  • 294.
    Plusieurs catch sontpossibles après un try • Les catch sont typés par la classe d’exception qu’ils traitent • Un bloc catch exécuté suffit pour qu’il n’y ait plus d’erreur • Les blocs catch sont évalués dans l’ordre de présence dans le code Mais dès qu’un catch correspond, il est exécuté Java, avancé (examen 1Z0-804) alphorm.com™© Aucun autre ne sera exécuté • Si aucun catch ne correspond, on remonte à l’appelant
  • 295.
    Le polymorphisme desexceptions • Les classes d’exception sont organisées en héritages • Un catch sur une classe mère attrape les exceptions filles • Il faut mettre les catch du type le plus spécifique vers le plus générique Sinon, le premier bloc convient toujours, et les autres sont du code mort Java, avancé (examen 1Z0-804) alphorm.com™©
  • 296.
    Le contenu d’uncatch • Ne rien mettre dans un catch est dangereux L’erreur sera réputée traitée, mais rien n’est fait • Traiter l’erreur en utilisant le contexte : l’exception • Méthodes printStackTrace de Exception Java, avancé (examen 1Z0-804) alphorm.com™©
  • 297.
    Ce qu’on acouvert • Plusieurs catch sont possibles derrière un try • Le polymorphisme des exceptions • Le contenu d’un catch Java, avancé (examen 1Z0-804) alphorm.com™©
  • 298.
    Exceptions et assertions Meilleurespratiques Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Meilleures pratiques
  • 299.
    Plan • Un bloctry par méthode • Contenu des catch • Granularité des catch • Réinterprétation des exceptions Java, avancé (examen 1Z0-804) alphorm.com™©
  • 300.
    Un bloc trypar méthode • Si vous placez plusieurs try dans une méthode Il est possible de réaliser le second try sans le premier Est-ce que la méthode elle-même est cohérente ? Il est difficile de suivre le scénario nominal • Un seul try suivi de plusieurs catch Java, avancé (examen 1Z0-804) alphorm.com™© • Un seul try suivi de plusieurs catch • Facile à lire, meilleure séparation du code nominal du code de gestion des erreurs
  • 301.
    Contenu des catch •Un minimum dans un catch, non vide • Utiliser les méthodes présentes sur la classe Exception en fait Throwable • Utiliser un log pour tracer Java, avancé (examen 1Z0-804) alphorm.com™© • Rétablir le système bas-niveau et réinterpréter
  • 302.
    Granularité des catch •Le bloc catch est déclenché pour 1 type d’exception • On peut traiter une classe mère Traiter Exception et totalement généraliste Traiter une super classe traite toutes ses sous-classes Il est possible de traiter plusieurs types non reliés Java, avancé (examen 1Z0-804) alphorm.com™© • Il est possible de traiter plusieurs types non reliés
  • 303.
    Réinterprétation des exceptions •Il est possible de relancer une exception alors qu’une exception est en cours de traitement • Cas particulier du traitement bas-niveau puis Relancer la même exception Relancer une nouvelle exception : réinterprétation Java, avancé (examen 1Z0-804) alphorm.com™© Relancer une nouvelle exception : réinterprétation
  • 304.
    Ce qu’on acouvert • Un bloc try par méthode • Contenu des catch • Granularité des catch • Réinterprétation des exceptions Java, avancé (examen 1Z0-804) alphorm.com™©
  • 305.
    Exceptions et assertions Lesassertions Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les assertions
  • 306.
    Plan • Définition d’uneassertion • Placer les assertions • Lancer l’application avec ou sans les assertions Java, avancé (examen 1Z0-804) alphorm.com™©
  • 307.
    Définition d’une assertion •Une vérification runtime que l’objet est bien dans un certain état • Contrat d’utilisation d’un objet, d’une méthode • Ne cherche pas à vérifier les entrées variantes de l’environnement Utiliser les tests à base de « if » pour cela Java, avancé (examen 1Z0-804) alphorm.com™© • Lorsque l’assertion n’est pas vérifiée, une Error est levée
  • 308.
    Placer une assertion •En début de méthode : une précondition • En fin de méthode : une postcondition • N’importe où : un invariant Une assertion peut détecter un passage dans un flux non prévu Java, avancé (examen 1Z0-804) alphorm.com™© • Ne pas tester les paramètres en entrée dus à l’utilisateur • Les assertions sont débrayables
  • 309.
    Lancer avec ousans les assertions • Les assertions ne sont pas lancées par défaut • Il faut les activer avec –ea • Donc les assertions ne coûtent rien dans une application livrée Java, avancé (examen 1Z0-804) alphorm.com™©
  • 310.
    Ce qu’on acouvert • Définition d’une assertion • Placer les assertions • Lancer l’application avec ou sans les assertions Java, avancé (examen 1Z0-804) alphorm.com™©
  • 311.
    Principes des entrées-sorties Gestiondes entrées-sorties Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Gestion des entrées-sorties
  • 312.
    Plan • Hiérarchie declasses • Les canaux • Les filtres Java, avancé (examen 1Z0-804) alphorm.com™©
  • 313.
    Hiérarchie de classes •InputStream est une entrée binaire • OutputStream est une sortie binaire • Reader est une entrée texte • Writer est une sortie texte Java, avancé (examen 1Z0-804) alphorm.com™© • Dérivées de ces classes Canaux représentant les sources/cibles de données Filtres représentant les décorateurs
  • 314.
    Les canaux • Lessources ou les cibles • Fichiers : FileInputStream, FileOutputStream, FileReader, FileWriter • Sockets • Entrées ou sorties sur les serveurs : ServletOutputStream Java, avancé (examen 1Z0-804) alphorm.com™©
  • 315.
    Les filtres • Décorationsdes accès aux données • Ne rajoutent pas méthodes BufferedInputStream : gère une lecture bufferisée • Ou bien ajoutent des comportement Java, avancé (examen 1Z0-804) alphorm.com™© DataInputStream : lit des valeurs de types primitifs
  • 316.
    Ce qu’on acouvert • Hiérarchie de classes • Les canaux • Les filtres Java, avancé (examen 1Z0-804) alphorm.com™©
  • 317.
    Principes des entrées-sorties Lecturede la console Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Lecture de la console
  • 318.
    Plan • System.in estune entrée binaire • Les filtres pour lire la console Java, avancé (examen 1Z0-804) alphorm.com™©
  • 319.
    System.in est uneentrée binaire • System.in est de type InputStream • Lecture via read ou read(byte[]) • Récupération d’un octet Java, avancé (examen 1Z0-804) alphorm.com™©
  • 320.
    Les filtres pourlire la console • InputStreamReader permet de convertir l’entrée binaire en entrée caractères • BufferedReader permet de lire une ligne Java, avancé (examen 1Z0-804) alphorm.com™© • BufferedReader permet de lire une ligne
  • 321.
    Scanner • Pour rappel,il est possible d’utiliser Scanner • Lecture de données formatées Java, avancé (examen 1Z0-804) alphorm.com™©
  • 322.
    Ce qu’on acouvert • System.in est une entrée binaire • Les filtres pour lire la console Java, avancé (examen 1Z0-804) alphorm.com™©
  • 323.
    Principes des entrées-sorties Ecrituresur la console Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Ecriture sur la console
  • 324.
    Plan • System.out estun PrintStream • System.err est un PrintStream Java, avancé (examen 1Z0-804) alphorm.com™©
  • 325.
    System.out est unPrintStream • Les méthodes proposées sur PrintStream Méthodes write( int) : affichage de l’octet Méthode print (…) surchargée, gère l’encodage Méthode println(…) avec retour à la ligne • Méthode format, qui se repose sur les méthodes de String Java, avancé (examen 1Z0-804) alphorm.com™© • Méthode format, qui se repose sur les méthodes de String • Méthode printf
  • 326.
    System.err est unPrintStream • La sortie standard d’erreur sur les systèmes qui séparent les deux • Sinon, la même chose que out • Possibilités de rediriger les sorties Java, avancé (examen 1Z0-804) alphorm.com™©
  • 327.
    Ce qu’on acouvert • System.out est un PrintStream • System.err est un PrintStream Java, avancé (examen 1Z0-804) alphorm.com™©
  • 328.
    Principes des entrées-sorties Fluxd’entrées-sorties Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Flux d’entrées-sorties
  • 329.
    Plan • Flux d’entréebinaires • Flux de sortie binaires • Flux d’entrée caractères • Flux de sortie caractères Java, avancé (examen 1Z0-804) alphorm.com™©
  • 330.
    Flux d’entrée binaire •Dérivés de InputStream, classe abstraite Manipulation d’octets à travers de 2 méthodes • Avec int read() • Avec int read(byte[]) • Classes qui représentent des sources de données Java, avancé (examen 1Z0-804) alphorm.com™© • Classes qui représentent des sources de données FileInputStream, … • Classes qui représentent des transformations de données ObjectInputStream, DataInputStream,…
  • 331.
    Flux de sortiebinaires • Dérivés de OutputStream, classe abstraite Manipulation d’octets • Classes qui représentent des cibles de données FileOutputStream,… Classes qui transforment ou ajoutent des fonctionnalités Java, avancé (examen 1Z0-804) alphorm.com™© • Classes qui transforment ou ajoutent des fonctionnalités ObjectOutputStream, DataOutputStream,…
  • 332.
    Flux d’entrée caractères •Dérivés de la classe abstraite Reader Lecture de caractères • Avec int read() ou int read(char[]) … • Des classes qui sont sources de caractères FileReader, … Java, avancé (examen 1Z0-804) alphorm.com™© FileReader, … • Des classes qui transforment ou ajoutent des fonctionnalités BufferedReader, LineNumberReader, … • A noter que FileReader dérive de InputStreamReader
  • 333.
    Flux de sortiecaractères • Dérivés de la classe abstraite Writer Ecriture de caractères • Des classes représentant les cibles de caractères FileWriter,… Des classes qui transforment ou ajoutent des fonctionnalités Java, avancé (examen 1Z0-804) alphorm.com™© • Des classes qui transforment ou ajoutent des fonctionnalités PrintWriter, … • A noter que FileWriter dérive de OutputStreamWriter, qui gère l’encodage de la machine
  • 334.
    Ce qu’on acouvert • Flux d’entrée binaires • Flux de sortie binaires • Flux d’entrée caractères • Flux de sortie caractères Java, avancé (examen 1Z0-804) alphorm.com™©
  • 335.
    Principes des entrées-sorties Chaînagede flux d’entrées- Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Chaînage de flux d’entrées- sorties
  • 336.
    Plan • L’intérêt d’undécorateur • L’application pour écrire un fichier binaire • L’application pour lire un fichier texte Java, avancé (examen 1Z0-804) alphorm.com™©
  • 337.
    L’intérêt d’un décorateur •Un modèle de décorateur permet d’éviter de multiplier les classes Combinaison de sources/cibles de données Avec les transformations possibles Java, avancé (examen 1Z0-804) alphorm.com™©
  • 338.
    L’application pour écrireun fichier binaire • Fichier binaire en sortie : FileOutputStream • Sortie bufferisée : BufferedOutputStream • Ecriture de types primitifs : DataOutputStream Java, avancé (examen 1Z0-804) alphorm.com™©
  • 339.
    L’application pour lireun fichier texte • Fichier texte en entrée : FileReader • Entrée bufferisée avec lecture de ligne : BufferedReader Java, avancé (examen 1Z0-804) alphorm.com™©
  • 340.
    Ce qu’on acouvert • L’intérêt d’un décorateur • L’application pour écrire un fichier binaire • L’application pour lire un fichier texte Java, avancé (examen 1Z0-804) alphorm.com™©
  • 341.
    Principes des entrées-sorties Entrées-sortiesde canal Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Entrées-sorties de canal
  • 342.
    Plan • Exemple decanaux • Souplesse du changement de canal Java, avancé (examen 1Z0-804) alphorm.com™©
  • 343.
    Exemple de canaux •Canal fichier en écriture : FileOutputStream • Si écriture en mémoire : BytearrayOutputStream • Si écriture sur tube : PipedOutputStream Java, avancé (examen 1Z0-804) alphorm.com™©
  • 344.
    Souplesse de changementde canal • La façon d’écrire ne change pas selon le canal • L’écriture dans un PrintStream se fait à l’identique Sur la console Dans un servlet Vers un fichier Java, avancé (examen 1Z0-804) alphorm.com™© Vers un fichier
  • 345.
    Ce qu’on acouvert • Exemple de canaux • Souplesse du changement de canal Java, avancé (examen 1Z0-804) alphorm.com™©
  • 346.
    Principes des entrées-sorties Lireet écrire des objets Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Lire et écrire des objets
  • 347.
    Plan • La classeObjectOutputStream • La classe ObjectInputStream • L’interface Serializable vs Externalizable Java, avancé (examen 1Z0-804) alphorm.com™©
  • 348.
    La classe ObjectOutputStream •Un objet pour traduire un objet en flux • Se crée à partir d’un OutputStream • Encodage binaire, format publié • Ecriture de la totalité d’un graphe Java, avancé (examen 1Z0-804) alphorm.com™©
  • 349.
    La classe ObjectInputStream •Pour lire un objet encodé • Exceptions à traiter : FileNotFoundException, IOException, ClassNotFoundException, ClassCastException Java, avancé (examen 1Z0-804) alphorm.com™©
  • 350.
    L’interface Serializable vsExternalizable • La classe des objets à sérialiser doit implémenter Serializable Rien de particulier à faire • Ou bien Externalizable L’objet a la main sur la processus de sérialisation, en proposant La méthode readExternal Java, avancé (examen 1Z0-804) alphorm.com™© • La méthode readExternal • La méthode writeExternal
  • 351.
    Ce qu’on acouvert • La classe ObjectOutputStream • La classe ObjectInputStream • L’interface Serializable vs Externalizable Java, avancé (examen 1Z0-804) alphorm.com™©
  • 352.
    E/S de fichiersavec NIO2 Interface Path Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Interface Path
  • 353.
    Plan • Définition dePath dans java.nio.file • Création d’un objet Path • Récupération d’informations • Normaliser, convertir, fusionner Java, avancé (examen 1Z0-804) alphorm.com™©
  • 354.
    Définition de Pathdans java.nio.file • Interface proposant des méthodes pour manipuler un chemin • Ne propose pas de méthodes modifiant le chemin • Obtenu typiquement à partir d’un FileSystem • Permet d’accéder à un File Java, avancé (examen 1Z0-804) alphorm.com™©
  • 355.
    Création d’un objetPath • Utiliser Paths.get • Utiliser FileSystems Java, avancé (examen 1Z0-804) alphorm.com™©
  • 356.
    Récupérer des informations •Les méthodes de Path permettent d’obtenir des infos toString () : c:formationjava getFileName () : java getName(0) : formation getNameCount() : 2 Java, avancé (examen 1Z0-804) alphorm.com™© getNameCount() : 2 subpath(0,2) : formationjava getParent() : c:formation getRoot() : c:
  • 357.
    Normaliser, convertir, fusionner •Path Path.normalize() : élimine les redondances… • Path.toUri() : façon uri Java, avancé (examen 1Z0-804) alphorm.com™© • Path.toAbsolutePath() • Path.toRealPath() • Path.resolve(String a) : fusionne le path avec la chaîne
  • 358.
    Ce qu’on acouvert • Définition de Path dans java.nio.file • Création d’un objet Path • Récupération d’informations • Normaliser, convertir, fusionner Java, avancé (examen 1Z0-804) alphorm.com™©
  • 359.
    E/S de fichiersavec NIO2 Classe Files Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Classe Files
  • 360.
    Plan • Définition dela classe Files • Méthodes de création • Méthodes de tests • Méthodes de modification Java, avancé (examen 1Z0-804) alphorm.com™©
  • 361.
    Définition de laclasse Files • Ne contient que des méthodes statiques • Travaille sur les fichiers, les répertoires,… • Sert d’intermédiaire pour attaquer le système de fichier sous-jacent Java, avancé (examen 1Z0-804) alphorm.com™©
  • 362.
    Méthodes de création •Pour créer des fichiers… • Utilise un objet Path Java, avancé (examen 1Z0-804) alphorm.com™©
  • 363.
    Méthodes de test •Teste la nature du chemin • Ou bien ses attributs Java, avancé (examen 1Z0-804) alphorm.com™©
  • 364.
    Méthodes de modifications •Copie • Suppression • Ouverture d’un flux Java, avancé (examen 1Z0-804) alphorm.com™©
  • 365.
    Ce qu’on acouvert • Définition de la classe Files • Méthodes de création • Méthodes de tests • Méthodes de modification Java, avancé (examen 1Z0-804) alphorm.com™©
  • 366.
    E/S de fichiersavec NIO2 Opérations sur les Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Opérations sur les répertoires et les fichiers
  • 367.
    Plan • Parcourir desrépertoires • Lister les fichiers et déterminer les attributs de fichiers Java, avancé (examen 1Z0-804) alphorm.com™©
  • 368.
    Parcourir les répertoires •Méthode newDirectorySteam • L’interface DirectoryStream<Path> permet d’itérer sur les répertoires Sous-interface de Iterable<Path> Java, avancé (examen 1Z0-804) alphorm.com™© • Filtrer les types d’entrées :
  • 369.
    Lister les fichierset déterminer les attributs • Fichier exécutable, caché, lisible, inscriptible • Files.isRegularFile : identifie les fichiers Java, avancé (examen 1Z0-804) alphorm.com™©
  • 370.
    Ce qu’on acouvert • Parcourir des répertoires • Lister les fichiers et déterminer les attributs de fichiers Java, avancé (examen 1Z0-804) alphorm.com™©
  • 371.
    E/S de fichiersavec NIO2 Opérations de création, Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Opérations de création, lecture et écriture
  • 372.
    Plan Créer un fichier Lireet écrire un fichier Java, avancé (examen 1Z0-804) alphorm.com™©
  • 373.
    Créer un fichier •Création d’un fichier vide : createFile • Création d’un fichier temporaire : createTempFile • Création d’un fichier texte : newBufferedReader, newBufferedWriter • Création d’un fichier binaire : newInputStream, newOutputStream Java, avancé (examen 1Z0-804) alphorm.com™©
  • 374.
    Lire et écriredans un fichier • Manipuler directement les classes : BufferedReader, BufferedWriter, InputStream, OutputStream • Lire un tableau d’octets : readAllBytes • Lire toutes les lignes : readAllLines • Ecrire : write Java, avancé (examen 1Z0-804) alphorm.com™© • Ecrire : write
  • 375.
    Ce qu’on acouvert Créer un fichier Lire et écrire un fichier Java, avancé (examen 1Z0-804) alphorm.com™©
  • 376.
    E/S de fichiersavec NIO2 Surveillance des Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Surveillance des modifications
  • 377.
    Plan L’interface WatchService La classeStandardWatchEventKinds L’interface WatchKey L’interface WatchEvent Java, avancé (examen 1Z0-804) alphorm.com™©
  • 378.
    L’interface WatchService • Représenteun service qui observe les changements • Il faudra s’enregistrer sur des événements particuliers • L’implémentation est dépendante de la plateforme Java, avancé (examen 1Z0-804) alphorm.com™©
  • 379.
    La classe StandardWatchEventKinds •Représente les catégories d’événements que l’on peut observer Java, avancé (examen 1Z0-804) alphorm.com™©
  • 380.
    L’interface WatchKey • Représenteun enregistrement à un WatchService • Signalé lorsqu’un événement se produit Java, avancé (examen 1Z0-804) alphorm.com™©
  • 381.
    L’interface WatchEvent<T> • Représentel’événement pour lequel on est abonné • T représente le contexte • Peu représenter un événement répété Java, avancé (examen 1Z0-804) alphorm.com™©
  • 382.
    Ce qu’on acouvert • L’interface WatchService • La classe StandardWatchEventKinds • L’interface WatchKey • L’interface WatchEvent Java, avancé (examen 1Z0-804) alphorm.com™©
  • 383.
    Utilisation des threads Créationsde solutions Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Créations de solutions multithread
  • 384.
    Plan L’interface Runnable La classeThread Java, avancé (examen 1Z0-804) alphorm.com™©
  • 385.
    L’interface Runnable • Doitêtre implémentée par une classe qui sera utilisée par Thread • Demande la méthode run() Tourne jusqu’à la fin de la vie du Thread Java, avancé (examen 1Z0-804) alphorm.com™©
  • 386.
    La classe Thread •Il est possible d’hériter de la classe Thread • Implémenter run() • Le thread est démarré par un appel à start() • Peut aussi servir à démarrer un Runnable Java, avancé (examen 1Z0-804) alphorm.com™©
  • 387.
    Ce qu’on acouvert L’interface Runnable La classe Thread Java, avancé (examen 1Z0-804) alphorm.com™©
  • 388.
    Utilisation des threads Partagede données entre Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Partage de données entre Thread
  • 389.
    Plan • Les objetssont naturellement partagés • Situation de conflit sur une variable • Situation de conflit sur une collection Java, avancé (examen 1Z0-804) alphorm.com™©
  • 390.
    Les objets sontnaturellement partagés • Une référence vers un objet peut être recopiée entre 2 threads • Il est donc très naturel de partager une ressource Java, avancé (examen 1Z0-804) alphorm.com™©
  • 391.
    Situation de conflitsur une variable • Lorsque 2 threads accèdent en lecture/écriture • 1 seule ressource pour les 2 • Le partage conduit à un conflit • Situation particulièrement délicate en cas de lecture/écriture Java, avancé (examen 1Z0-804) alphorm.com™© • Et de modification en plusieurs étapes
  • 392.
    Situation de conflitsur une collection • Entre autre objet, une collection peut être partagée • Les accès se font de façon désordonnés sur chaque élément de la collection • Ajout/suppression … Java, avancé (examen 1Z0-804) alphorm.com™©
  • 393.
    Ce qu’on acouvert • Les objets sont naturellement partagés • Situation de conflit sur une variable • Situation de conflit sur une collection Java, avancé (examen 1Z0-804) alphorm.com™©
  • 394.
    Utilisation des threads Synchronisationet Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Synchronisation et interblocage
  • 395.
    Plan • Synchronisation parjoin • Mot-clé synchronized • Situation de blocage entre threads Java, avancé (examen 1Z0-804) alphorm.com™©
  • 396.
    Synchronisation par join •Thread.join permet de bloquer le thread courant Sur attente de la fin du thread en question • La mort d’un thread est la fin du traitement dans lequel il est engagé • Il faut être sûr qu’il va finir, et qu’il n’attend pas … Java, avancé (examen 1Z0-804) alphorm.com™©
  • 397.
    Mot –clé synchronized •Avec le mot-clé synchronized On introduit une section critique Il est possible de verrouiller un bloc de code seulement • S’utilise sur un objet (les méthodes d’instance) Peut s’appliquer sur les méthodes de classe Java, avancé (examen 1Z0-804) alphorm.com™© • Peut s’appliquer sur les méthodes de classe
  • 398.
    Situations de blocageentre threads • Si deux threads attendent sur la même ressource • Appelé deadlock, ou étreinte fatale Java, avancé (examen 1Z0-804) alphorm.com™©
  • 399.
    Ce qu’on acouvert • Synchronisation par join • Mot-clé synchronized • Situation de blocage entre threads Java, avancé (examen 1Z0-804) alphorm.com™©
  • 400.
    Utilisation des threads Objetsnon mutables Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Objets non mutables
  • 401.
    Plan • Problème demodification d’un objet par plusieurs threads • Un objet non mutable Java, avancé (examen 1Z0-804) alphorm.com™©
  • 402.
    Problème de modification •Un objet peut exporter des parties de ses données • Il propose des modificateurs • Il peut donc être partiellement modifié Java, avancé (examen 1Z0-804) alphorm.com™©
  • 403.
    Un objet nonmutable • Un objet non mutable Ne propose pas de modifications de ses données Se duplique au besoin • Les données internes ne peuvent pas être mises en incohérence Java, avancé (examen 1Z0-804) alphorm.com™©
  • 404.
    Ce qu’on acouvert • Problème de modification d’un objet par plusieurs threads • Un objet non mutable Java, avancé (examen 1Z0-804) alphorm.com™©
  • 405.
    Traitements simultanés Variables atomiques Java,avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Variables atomiques
  • 406.
    Plan • Accès concurrentssur une donnée • Intérêt d’une variable atomique • Les variables atomiques Java, avancé (examen 1Z0-804) alphorm.com™©
  • 407.
    Accès concurrents surune donnée • Les threads accèdent simultanément aux données • La donnée peut donc être dans un état non souhaitable • La synchronisation des accès peut être utilisée Code assez lourd Java, avancé (examen 1Z0-804) alphorm.com™© Parfois difficile à introduire
  • 408.
    Intérêt d’une variableatomique • Un type atomique est utilisé à la place du type original • Des méthodes garanties exclusives • Par d’interférence entre les threads • Simplicité d’utilisation Java, avancé (examen 1Z0-804) alphorm.com™©
  • 409.
    Les variables atomiques •Les types primitifs sont représentés • Les tableaux Java, avancé (examen 1Z0-804) alphorm.com™©
  • 410.
    Ce qu’on acouvert • Accès concurrents sur une donnée • Intérêt d’une variable atomique • Les variables atomiques Java, avancé (examen 1Z0-804) alphorm.com™©
  • 411.
    Traitements simultanés Verrouillage enlecture et Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Verrouillage en lecture et écriture
  • 412.
    Plan • Classe ReentrantLock •Classe ReentrantReadWriteLock Java, avancé (examen 1Z0-804) alphorm.com™©
  • 413.
    Classe ReentrantLock • Méthodelock qui bloque le thread en attendant l’accès • Quasiment les mêmes possibilités que synchronized • Explicite, contrairement à synchronized • La méthode lock() retourne immédiatement si déjà obtenu par le ême thread Java, avancé (examen 1Z0-804) alphorm.com™© thread • Le constructeur peut être paramétré
  • 414.
    Classe ReentrantReadWriteLock • Lesméthodes readLock() et writeLock() permettent d’obtenir un verrou en lecture et un en écriture • Efficace lorsque un seul thread peut modifier, rarement, les données • Plusieurs threads peuvent posséder le verrou en read Java, avancé (examen 1Z0-804) alphorm.com™©
  • 415.
    Ce qu’on acouvert • Classe ReentrantLock • Classe ReentrantReadWriteLock Java, avancé (examen 1Z0-804) alphorm.com™©
  • 416.
    Traitements simultanés Collections sécurisées Java,avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Collections sécurisées
  • 417.
    Plan • Le packagejava.util.concurrent • Les classes implémentant BlockingQueue • La classe ConcurrentHashMap • La classe ConcurrentSkipListMap Java, avancé (examen 1Z0-804) alphorm.com™©
  • 418.
    Le package java.util.concurrent •L’interface BlockingQueue • L’interface ConcurrentMap • L’interface ConcurrentNavigableMap Java, avancé (examen 1Z0-804) alphorm.com™©
  • 419.
    Les classes implémentantBlockingQueue • ArrayBlockingQueue : FIFO à taille déterminée • LinkedBlockingQueue : FIFO à taille max Integer.MAX_INT • PriorityBlockingQueue : ordre des éléments conservés • SynchronousQueue : point de rendez-vous sur une donnée Java, avancé (examen 1Z0-804) alphorm.com™©
  • 420.
    La classe ConcurrentHashMap •Permet des accès concurrents sans conflit • Le verrouillage en interne se fait par portions Plus efficace qu’une HashMap synchronisée • Efficace lorsqu’il y a peu de « writers » Java, avancé (examen 1Z0-804) alphorm.com™©
  • 421.
    La classe ConcurrentSkipListMap •Implémente ConcurrentNavigableMap • Permet de retrouver des parties, en fonction de la clé Méthodes headMap, tailMap, subMap • Similaire à TreeMap, mais avec protection dans le cadre multithread Java, avancé (examen 1Z0-804) alphorm.com™©
  • 422.
    Ce qu’on acouvert • Le package java.util.concurrent • Les classes implémentant BlockingQueue • La classe ConcurrentHashMap • La classe ConcurrentSkipListMap Java, avancé (examen 1Z0-804) alphorm.com™©
  • 423.
    Traitements simultanés Outils desynchronisation Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Outils de synchronisation
  • 424.
    Plan • La classeSemaphore • La classe Phaser • La classe CyclicBarrier • La classe CountDownLatch Java, avancé (examen 1Z0-804) alphorm.com™©
  • 425.
    La classe Semaphore •Une classe qui permet à un nombre limité de thread de passer • Les constructeurs permettent de positionner le nombre de threads autorisés • Méthodes acquire, tryAcquire… pour acquérir une permission • Méthodes release,… pour laisser une permission Java, avancé (examen 1Z0-804) alphorm.com™© • Méthodes release,… pour laisser une permission
  • 426.
    La classe Phaser •Une barrière de synchronisation avec un nombre variable de parties • Des constructeurs permettant de positionner un nombre de parties • Des méthodes pour attendre • Des méthodes pour enregistrer des parties Java, avancé (examen 1Z0-804) alphorm.com™© • Des méthodes pour supprimer des parties
  • 427.
    La classe CyclicBarrier •Décrit un point où différents threads vont s’attendre • Constructeur prenant en paramètre le nombre de thread • Avec éventuellement en plus un thread qui est déclenché lorsque toutes les parties sont arrivées • Méthode await pour attendre les autres thread Java, avancé (examen 1Z0-804) alphorm.com™© • Méthode await pour attendre les autres thread Appelée dans chaque thread partie • Utile par exemple pour des threads ne finissent pas tant que tous les autres ne sont pas arrivés à un point
  • 428.
    La class CountDownLatch •Un constructeur permettant de positionner le décompte • Méthodes await pour attendre que le décompte soit arrivé • Méthode countDown pour décompter • Utile pour que des threads attendent qu’une autre tâche soit effectuée avant de continuer Java, avancé (examen 1Z0-804) alphorm.com™© avant de continuer
  • 429.
    Ce qu’on acouvert • La classe Semaphore • La classe Phaser • La classe CyclicBarrier • La classe CountDownLatch Java, avancé (examen 1Z0-804) alphorm.com™©
  • 430.
    Traitements simultanés Executor, Java, avancé(examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Executor, ThreadPoolExecutor et ForkJoinTask
  • 431.
    Plan • ForkJoinTask • L’interfaceExecutor • ThreadPoolExecutor Java, avancé (examen 1Z0-804) alphorm.com™©
  • 432.
    La classe ForkJoinTask •Une classe abstraite qui représente une tâche à réaliser • Sous-classes : RecursiveTask et RecursiveAction • Une méthode à implémenter : compute • Des méthodes pour lancer la tâche : exec ou fork Java, avancé (examen 1Z0-804) alphorm.com™©
  • 433.
    L’interface Executor • Représenteun objet qui exécute des Runnable • L’implémentation n’est donc pas spécifiée • Les sous-classes : ForkJoinPool Java, avancé (examen 1Z0-804) alphorm.com™© ScheduledThreadPoolExecutor ThreadPoolExecutor • Les objets conformes à Executor peuvent être créés par Executors
  • 434.
    ThreadPoolExecutor • Classe quisert à gérer des threads Économie des ressources Meilleure répartition des threads Java, avancé (examen 1Z0-804) alphorm.com™©
  • 435.
    Ce qu’on acouvert • ForkJoinTask • L’interface Executor • ThreadPoolExecutor Java, avancé (examen 1Z0-804) alphorm.com™©
  • 436.
    Applications de basede données avec JDBC JDBC Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum JDBC
  • 437.
    Plan • Architecture • Interfaceset classes de java.sql • Interfaces et classes de javax.sql • Séquence de code utilisant DriverManager Java, avancé (examen 1Z0-804) alphorm.com™©
  • 438.
    Architecture • JDBC dansl’architecture : couche d’accès • Le pilote de base de données doit être chargé • Le type du pilote Type 1 : pont JDBC-ODBC Java, avancé (examen 1Z0-804) alphorm.com™© Type 2 : pont JDBC- API Native Type 3 : pur Java, accès réseau Type 4 : pur Java, le pilote accède à la base
  • 439.
    Les interfaces etles classes de java.sql • Les classes : DriverManager Date et Time DriverPropertyInfo • Les interfaces : Java, avancé (examen 1Z0-804) alphorm.com™© • Les interfaces : Array, SQLXML, Clob Connection, DatabaseMetaData, ResultSetMetaData Statement, CallableStatement, PreparedStatement ResultSet
  • 440.
    Les interfaces etles classes de javax.sql • Dédiée aux accès côté serveur • Des interfaces représentant la source de données CommonDataSource, DataSource, ConnectionPoolDataSource, XADataSource • La DataSource est récupérée via JNDI, préalablement enregistrée Java, avancé (examen 1Z0-804) alphorm.com™©
  • 441.
    Séquence de codeutilisant DriverManager Java, avancé (examen 1Z0-804) alphorm.com™©
  • 442.
    Ce qu’on acouvert • Architecture • Interfaces et classes de java.sql • Interfaces et classes de javax.sql • Séquence de code utilisant DriverManager Java, avancé (examen 1Z0-804) alphorm.com™©
  • 443.
    Applications de basede données avec JDBC Requêtes et résultats Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Requêtes et résultats
  • 444.
    Plan • Créer unerequête • Paramétrer la requête • Exécuter un INSERT • Exécuter un DELETE Java, avancé (examen 1Z0-804) alphorm.com™©
  • 445.
    Créer une requête •Les classes Statement, PreparedStatement, CallableStatement • Récupérer les résultats dans un ResultSet Par défaut avance seulement et non modifiable • Les options Java, avancé (examen 1Z0-804) alphorm.com™© Type Concurrence Maintient après commit
  • 446.
    Paramétrer une requête •Avec le Statement, les paramètres sont concaténés Java, avancé (examen 1Z0-804) alphorm.com™©
  • 447.
    Exécuter un INSERT •Fournir le SQL avec les paramètres de création Java, avancé (examen 1Z0-804) alphorm.com™©
  • 448.
    Exécuter un DELETE •Fournir le SQL • Les paramètres sont concaténés aussi Java, avancé (examen 1Z0-804) alphorm.com™©
  • 449.
    Ce qu’on acouvert • Créer une requête • Paramétrer la requête • Exécuter un INSERT • Exécuter un DELETE Java, avancé (examen 1Z0-804) alphorm.com™©
  • 450.
    Applications de basede données avec JDBC PreparedStatement et Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum PreparedStatement et CallableStatement
  • 451.
    Plan • Les requêtesprécompilées • Le passage de paramètres • Les procédures stockées Java, avancé (examen 1Z0-804) alphorm.com™©
  • 452.
    Les requêtes précompilées •La classe PreparedStatement • Obtention par la méthode prepareStatement() de Connection • Préparation des paramètres Java, avancé (examen 1Z0-804) alphorm.com™©
  • 453.
    Le passage deparamètres • Utiliser les méthode setxxx pour positionner les paramètres Java, avancé (examen 1Z0-804) alphorm.com™©
  • 454.
    Les procédures stockées •Appel d’une procédure écrite dans le système de base de données Java, avancé (examen 1Z0-804) alphorm.com™©
  • 455.
    Ce qu’on acouvert • Les requêtes précompilées • Le passage de paramètres • Les procédures stockées Java, avancé (examen 1Z0-804) alphorm.com™©
  • 456.
    Applications de basede données avec JDBC Transactions Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Transactions
  • 457.
    Plan • Les transactionsavec JDBC • Les points de sauvegarde Java, avancé (examen 1Z0-804) alphorm.com™©
  • 458.
    Les transactions avecJDBC • Le mode par défaut est « auto-commit » • Il est possible de désactiver ce mode : setAutoCommit(false) • Il faut alors faire le commit et le rollback Java, avancé (examen 1Z0-804) alphorm.com™©
  • 459.
    Les points desauvegarde • Un point qu’on enregistre et sur lequel on peut revenir • setSavepoint • releaseSavepoint • rollback(SavePoint s) Java, avancé (examen 1Z0-804) alphorm.com™©
  • 460.
    Ce qu’on acouvert • Les transactions avec JDBC • Les points de sauvegarde Java, avancé (examen 1Z0-804) alphorm.com™©
  • 461.
    Applications de basede données avec JDBC Les RowSet Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Les RowSet
  • 462.
    Plan • Définition desRowSet • Manipuler un RowSet • Les types de RowSet • RowSetFactory et RowSetProvider Java, avancé (examen 1Z0-804) alphorm.com™©
  • 463.
    Définition des RowSet •Un objet qui encapsule une table de résultats Les packages javax.sql et javax.sql.rowset • Représentation en mémoire des tables Donc mode déconnecté Est paramétrable via ses propriétés Java, avancé (examen 1Z0-804) alphorm.com™© • Est paramétrable via ses propriétés • Supporte l’abonnement à des événements • 5 types de RowSet : CachedRowSet, JDBCRowSet, WebRowSet, FilteredRowSet, JoinRowSet
  • 464.
    Manipuler un RowSet •Paramétrer la commande • Executer • Parcourir Java, avancé (examen 1Z0-804) alphorm.com™©
  • 465.
    Les types deRowSet • L’interface CachedRowSet Ne maintient pas une connection à la base • L’interface JDBCRowSet Connecté, encapsule un ResulSet • L’interface WebRowSet Java, avancé (examen 1Z0-804) alphorm.com™© • L’interface WebRowSet Dérivée de CachedRowSet, déconnecté, adapté au Web (XML) • L’interface FilteredRowSet Dérivée de WebRowSet, supporte des filtres • L’interface JoinRowSet Dérivée de WebRowSet, permet de joindre plusieurs RowSets
  • 466.
    RowSetFactory et RowSetProvider •L’interface RowSetFactory représente une fabrique de RowSet Java, avancé (examen 1Z0-804) alphorm.com™©
  • 467.
    Ce qu’on acouvert • Définition des RowSet • Manipuler un RowSet • Les types de RowSet • RowSetFactory et RowSetProvider Java, avancé (examen 1Z0-804) alphorm.com™©
  • 468.
    Applications de basede données avec JDBC JDBC et DAO Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum JDBC et DAO
  • 469.
    Plan • Le modèleDAO • Exemple de code Java, avancé (examen 1Z0-804) alphorm.com™©
  • 470.
    Le modèle DAO •Une couche qui fait la correspondance entre objets et données • Une classe peut servir d’intermédiaire Méthodes statiques • Utilisation d’interfaces pour s’abstraire de la base Java, avancé (examen 1Z0-804) alphorm.com™©
  • 471.
    Exemple de code •Utilisation d’une fabrique pour accéder aux données Java, avancé (examen 1Z0-804) alphorm.com™©
  • 472.
    Ce qu’on acouvert • Le modèle DAO • Exemple de code Java, avancé (examen 1Z0-804) alphorm.com™©
  • 473.
    Localisation Avantages de lalocalisation Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Avantages de la localisation
  • 474.
    Plan • Définition dela « localisation » • Impact de l’internationalisation • Les classes disponibles Java, avancé (examen 1Z0-804) alphorm.com™©
  • 475.
    Définition de lalocalisation • Par localisation on entend : adapter le logiciel à la localisation de l’utilisateur • Important pour vendre localement • Améliorer l’internationalisation du logiciel • Limiter la consommation de ressources Java, avancé (examen 1Z0-804) alphorm.com™© • Limiter la consommation de ressources
  • 476.
    Impact de l’internationalisation •L’interface graphique • Les chaînes de caractères • Les caractères utilisés • Les formats numériques Java, avancé (examen 1Z0-804) alphorm.com™© • Les formats monétaires • Les formats de dates
  • 477.
    Les classes disponibles •La classe java.util.Locale : une spécification géographique, culturelle Language : fr Script : Latn Country : FR Variant : polyton Java, avancé (examen 1Z0-804) alphorm.com™© Variant : polyton Extension • La classe imbriquée Locale.Builder • La classe java.util.ResourceBundle : contenant pour des objets localisés • La classe java.text.Format
  • 478.
    Ce qu’on acouvert • Définition de la « localisation » • Impact de l’internationalisation • Les classes disponibles Java, avancé (examen 1Z0-804) alphorm.com™©
  • 479.
    Localisation Locale : lectureet définition Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Locale : lecture et définition de l’environnement local
  • 480.
    Plan • La classeLocale • Lecture des locales disponibles • Changer la localisation courante Java, avancé (examen 1Z0-804) alphorm.com™©
  • 481.
    La classe Locale •Utiliser la classe Locale.Builder • Utiliser les constructeurs de Locale • Mettre en œuvre la fabrique Locale.forLanguageTag() • Utiliser une des constantes de Locale Java, avancé (examen 1Z0-804) alphorm.com™©
  • 482.
    Lecture des Localedisponibles • Pour déterminer les Locale disponibles • Locale n’est qu’un identifiant pour des paramètres d’internationalisation Java, avancé (examen 1Z0-804) alphorm.com™©
  • 483.
    Changer la localisationcourante • On peut changer la localisation Locale.setDefault(Locale l) • Une locale peut être associée à des catégories Locale.Category DISPLAY Java, avancé (examen 1Z0-804) alphorm.com™© • DISPLAY • FORMAT
  • 484.
    Ce qu’on acouvert • La classe Locale • Lecture des locales disponibles • Changer la localisation courante Java, avancé (examen 1Z0-804) alphorm.com™©
  • 485.
    Localisation Regroupement de Java, avancé(examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Regroupement de ressources
  • 486.
    Plan • La classeResourceBundle • La classe PropertyResourceBundle • La classe ListResourceBundle Java, avancé (examen 1Z0-804) alphorm.com™©
  • 487.
    La classe ResourceBundle •Classe abstraite • Un seul constructeur, sans paramètre • De nombreuses méthodes getBundle(…) permettant de récupérer l’objet correspondant à la ressource, et à l’objet Locale Java, avancé (examen 1Z0-804) alphorm.com™©
  • 488.
    La classe PropertyResourceBundle •Classe dérivée de ResourceBundle • Les ressources sont stockées dans un fichier de propriétés • Pattern de nommage du fichier : <nomDeRessource>_<langage>_<pays> Java, avancé (examen 1Z0-804) alphorm.com™©
  • 489.
    La classe ListResourceBundle •Classe dérivée de ResourceBundle • Les ressources sont stockées dans un tableau d’objets • Permet de gérer des objets sous forme de ressources Java, avancé (examen 1Z0-804) alphorm.com™©
  • 490.
    Ce qu’on acouvert • La classe ResourceBundle • La classe PropertyResourceBundle • La classe ListResourceBundle Java, avancé (examen 1Z0-804) alphorm.com™©
  • 491.
    Localisation Format des messages,de Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Format des messages, de dates et des nombres
  • 492.
    Plan • Format desnombres et monétaires • Format des dates • Format des messages Java, avancé (examen 1Z0-804) alphorm.com™©
  • 493.
    Format des nombreset monétaires • Formats prédéfinis par NumberFormat La méthode format(…) • Les monétaires peuvent être formatés par NumberFormat getCurrencyInstance(…) Avec DecimalFormat Java, avancé (examen 1Z0-804) alphorm.com™© • Avec DecimalFormat Format suivant des motifs, personnalisés
  • 494.
    Format des dates •Des formats prédéfinis par DateFormat Possibilités sur la date, l’heure ou les deux • Avec des méthodes statiques getDateInstance(), getTimeInstance(), … Possibilités de formats personnalisés avec SimpleDateFormat Java, avancé (examen 1Z0-804) alphorm.com™© • Possibilités de formats personnalisés avec SimpleDateFormat • Possibilités de changer les symboles : DateFormatSymbols
  • 495.
    Format des messages •Les messages composés peuvent être formatés • La classe MessageFormat • Conjuguée à une utilisation de ResourceBundle • Possibilités de s’adapter au pluriel des mots Java, avancé (examen 1Z0-804) alphorm.com™©
  • 496.
    Ce qu’on acouvert • Format des nombres et monétaires • Format des dates • Format des messages Java, avancé (examen 1Z0-804) alphorm.com™©
  • 497.
    Conclusion Java avancé Java, avancé(examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Java avancé (examen 1Z0-804)
  • 498.
    Plan • Présentation dela plateforme • Rappels de syntaxe • Encapsulation • Conception de classes • Utilisation de l’héritage • Les exceptions • Les entrées-sorties • Les entrées-sorties NIO • Le multithread • Les traitements simultanés Java, avancé (examen 1Z0-804) alphorm.com™© • Utilisation de l’héritage • La généricité • Le traitement de textes • Les traitements simultanés • La base de données • La localisation
  • 499.
    Pour continuer … •S’intéresser aux applications serveur • Ne pas oublier la documentation Javadoc, en ligne ou sur le poste Java, avancé (examen 1Z0-804) alphorm.com™©
  • 500.
    Bon courage pour lacertification Java, avancé (examen 1Z0-804) alphorm.com™© ☺