Présentation de la formation
Java avancé
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concep...
Plan
• Présentation du formateur
• Les autres formations sur Alphorm
• Qu’est-ce que Java ?
• Les publics concernés
• Le p...
Présentation du formateur
• Fabien Brissonneau
• Email : fabien.brissonneau@gmail.com
• Consultant Concepteur et Formateur...
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é
•...
Les publics concernés
• Développeurs découvrant Java après avoir suivi les fondamentaux
• Développeurs se dirigeant ensuit...
Le plan de la formation
• Présentation de la plateforme
• Rappels de syntaxe
• Encapsulation
• Conception de classes
• Uti...
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 ...
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
...
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 R...
Les éditions
• La JSE (Java Standard Edition) pour ordinateurs de bureau
• La JEE (Java Entreprise Edition) pour serveurs
...
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
...
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 don...
Les licences
• La licence GPL pour le code Java, mais pas totalement à l’origne
• Depuis la version 7, OpenJDK devient l’i...
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...
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 pra...
Les implémentations
• Oracle Glassfish est l’implémentation de référence
Open Source Edition ou Enterprise Server…
• JBoss...
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...
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 proc...
Les participants
• On peut participer librement au processus
• Les Java User Group sont souvent impliqués
• Public : chacu...
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 Secu...
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
...
Plan
• Déclarer une classe, syntaxe, fichier et outil
• Déclarer les champs de données, visibilité, modificateurs
• Déclar...
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 clas...
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...
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ét...
Modificateur dans la déclaration de la classe
• Une classe peut être « public »
Impact sur le nom du fichier
Impact sur le...
Ce qu’on a couvert
• Déclarer une classe, syntaxe, fichier et outil
• Déclarer les champs de données, visibilité, modifica...
Rappels sur la syntaxe
et les classes Java
Champs, constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brisso...
Plan
• Déclaration et utilisation des méthodes
• Déclaration et utilisation des champs de données
• Rôle des constructeurs...
Déclaration et utilisation des méthodes
• Une méthode est un traitement disponible sur les objets
• Il peut y avoir des pa...
Déclaration et utilisation des champs
• Un champ d’instance porte une valeur pour chaque objet
• En général, le champ est ...
Le rôle des constructeurs
• Il faut initialiser les champs de l’objet
• Des paramètres permettent à l’utilisateur de :
Cho...
Ce qu’on a couvert
• Déclaration et utilisation des méthodes
• Déclaration et utilisation des champs de données
• Rôle des...
Rappels sur la syntaxe
et les classes Java
Modélisation d’objets à
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Bris...
Plan
• Modéliser les objets du monde réel
• Traduire les objets réels en objets logiciels
• Créer les classes et les struc...
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 ob...
Traduire le réel en logiciel
• Un objet métier correspond à des données en base
Un objet de mapping objet-relationnel
Un o...
Créer les classes et les structurer
• Sous la forme d’un diagramme de classes UML
Expressif, lisible, et complet
• Les cla...
Ce qu’on a couvert
• Modéliser les objets du monde réel
• Traduire les objets réels en objets logiciels
• Créer les classe...
Rappels sur la syntaxe
et les classes Java
Instructions package et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Bris...
Plan
• La notion de package, logique et physique
• L’instruction package et le nom de la classe
• Utiliser une classe d’un...
La notion de package
• Un package est :
Un espace de nommage
Une limite de visibilité
• Un répertoire
Les packages sont or...
L’instruction package
• En première ligne du fichier de la classe
• « package » suivi d’un nom de package
• Attention, le ...
L’instruction import
• Pour utiliser une classe d’un autre package :
Écrire le nom complet de la classe
Ou bien utiliser «...
L’utilisation des classes standard
• Toutes les classes de l’API Java sont dans des packages
• Il est peu recommandé de ne...
Ce qu’on a couvert
• La notion de package, logique et physique
• L’instruction package et le nom de la classe
• Utiliser u...
Encapsulation et
polymorphisme
Encapsulation pour la
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consul...
Plan
• Principe de l’encapsulation
• L’encapsulation dans les classes
• L’encapsulation dans les packages
Java, avancé (ex...
Principe de l’encapsulation
• L’encapsulation est le fait de masquer l’implémentation et de fournir
une interface
• Les bé...
L’encapsulation dans les classes
• Les classes masquent leurs implémentation :
Le corps des méthodes
Certaines méthodes
Le...
L’encapsulation dans les packages
• Les classes peuvent être publiques ou non
• La classe publique seule peut être utilisé...
Ce qu’on a couvert
• Principe de l’encapsulation
• L’encapsulation dans les classes
• L’encapsulation dans les packages
Ja...
Encapsulation et
polymorphisme
Modélisation de problèmes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Co...
Plan
• Modélisation des besoins
• Modélisation d’analyse
• Modélisation de conception
• Traduction en Java
Java, avancé (e...
Modélisation des besoins
• Les besoins sont exprimés par du texte
Trop peu formel
• La représentation classique des exigen...
Modélisation de l’analyse
• La description des problèmes
• En terme d’objets, sous la forme de classes
Les classes ne mont...
Modélisation de conception
• La description de la solution
Liée à Java et à sa technologie
• Les classes sont entités, con...
Traduction en Java
• Chaque classe a son équivalent en Java
• Accent mis sur les classes entités
• Classes applicatives li...
Ce qu’on a couvert
• Modélisation des besoins
• Modélisation d’analyse
• Modélisation de conception
• Traduction en Java
J...
Encapsulation et
polymorphisme
Caractère non mutable
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consul...
Plan
• Briser l’encapsulation
• Empêcher la modification des données internes
• String est une classe non mutable
Java, av...
Briser l’encapsulation
• L’encapsulation est mise en place pour protéger un objet
Pas de champs de données publiques
Limit...
Empêcher la modification
• Une classe non mutable (immutable value) est une classe qui ne permet
la modification
Construct...
String est une classe non mutable
• Il est impossible de modifier une String en Java
• Toutes les méthodes et tous les opé...
Ce qu’on a couvert
• Briser l’encapsulation
• Empêcher la modification des données internes
• String est une classe non mu...
Encapsulation et
polymorphisme
Sous-classement
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, ...
Plan
• La relation de généralisation-spécialisation
• Pourquoi utiliser des sous-classes
Java, avancé (examen 1Z0-804) alp...
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é...
Pourquoi utiliser des sous-classes ?
• Pour manipuler des objets en tant que type très général
Stabilité d’un code qui uti...
Ce qu’on a couvert
• La relation de généralisation-spécialisation
• Pourquoi utiliser des sous-classes
Java, avancé (exame...
Encapsulation et
polymorphisme
Surcharge de méthodes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consul...
Plan
• Ecrire plusieurs méthodes même nom dans une classe
• Les conséquences de la surcharge
Java, avancé (examen 1Z0-804)...
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 d...
Les conséquences de la surcharge
• Le compilateur résout l’appel de façon transparente en fonction des
arguments fournis
•...
Ce qu’on a couvert
• Ecrire plusieurs méthodes même nom dans une classe
• Les conséquences de la surcharge
Java, avancé (e...
Encapsulation et
polymorphisme
Méthode à nombre variable
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Co...
Plan
• Utilisation d’une méthode à nombre variable d’arguments
• Déclaration et codage
Java, avancé (examen 1Z0-804) alpho...
Utilisation d’une méthode « variadic »
• Pour un traitement qui sera le même sur chacun des arguments
• Equivalent à n sur...
Déclaration et codage
• Les arguments en nombre variable, c’est un tableau
• On peut utiliser length et les accès aléatoir...
Ce qu’on a couvert
• Utilisation d’une méthode à nombre variable d’arguments
• Déclaration et codage
Java, avancé (examen ...
Conception de classes Java
Modificateurs public,
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant...
Plan
• Impact de l’absence de modificateur
• Influence du modificateur private
• Influence du modificateur public
• Influe...
Impact de l’absence de modificateur
• Un membre sans visibilité est accessible du package entier
• Cela définit une sorte ...
Influence du modificateur private
• N’existe que sur les membres
• Un membre privé n’est accessible que de l’intérieur de ...
Influence du modificateur public
• Un membre publique est accessible de partout
• Typiquement utilisé pour des méthodes
• ...
Influence du modificateur protected
• Un membre protégé est accessible
De toutes les classes du package de la classe qui c...
Remarque sur « public » pour « class »
• Une classe n’est connue par défaut que de son package
• Si la classe doit être ac...
Ce qu’on a couvert
• Impact de l’absence de modificateur
• Influence du modificateur private
• Influence du modificateur p...
Conception de classes Java
Remplacement de
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, conc...
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 ...
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 ...
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
Consu...
Plan
• Le rôle des constructeurs
• Utiliser les paramètres des constructeurs
• Surcharger les constructeurs
Java, avancé (...
Le rôle des constructeurs
• Initialiser les champs de données
• Mettre l’objet dans un état correct
• Assurer que l’on peu...
Utiliser les paramètres des constructeurs
• Les paramètres sont utilisés pour initialiser les attributs
• Les arguments so...
Surcharger les constructeurs
• Il est possible de déclarer plusieurs constructeurs qui se distinguent de
par leurs signatu...
Ce qu’on a couvert
• Le rôle des constructeurs
• Utiliser les paramètres des constructeurs
• Surcharger les constructeurs
...
Conception de classes Java
Opérateur instanceof
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant,...
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
J...
Un objet est d’une classe et une seule
• Un objet a forcément une classe
• Récupérer le descripteur : getClass()
Eventuell...
Détecter le type d’un objet
• Avec instanceOf, il est possible de vérifier le type de l’objet
• Avec getClass(), on découv...
Utiliser la détection d’un ancêtre
• L’opérateur instanceof teste les ancêtres
Super-classes
Interfaces implémentées
• En ...
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...
Conception de classes Java
Appel de méthode virtuelle
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consu...
Plan
• Mise en place du polymorphisme
• Intérêt du polymorphisme
• Dangers du polymorphisme
Java, avancé (examen 1Z0-804) ...
Mise en place du polymorphisme
• Il faut une généralisation-spécialisation : extends
• Il faut une redéfinition : réécritu...
Intérêt du polymorphisme
• L’usage du polymorphisme permet de :
Écrire un code simple, qui utilise le type généralisé
Décl...
Dangers du polymorphisme
• Il est impossible de savoir, à la lecture, quelle est la méthode qui sera
déclenchée
Tout dépen...
Ce qu’on a couvert
• Mise en place du polymorphisme
• Intérêt du polymorphisme
• Dangers du polymorphisme
Java, avancé (ex...
Conception de classes Java
Transtypage de références
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consul...
Plan
• Syntaxe du transtypage
• Le danger du transtypage
• Utilisation inévitable du transtypage
Java, avancé (examen 1Z0-...
Syntaxe du transtypage
• Pour forcer le compilateur à accepter un appel
• Le type de la référence à utiliser ne fournit pa...
Le danger du transtypage
• Le transtypage fait taire le compilateur
• Mais ne préjuge rien à l’exécution
Si l’objet n’est ...
Utilisation inévitable du transtypage
• Lorsqu’on utilise un framework
Il faut dériver des classes, redéfinir des méthodes...
Ce qu’on a couvert
• Syntaxe du transtypage
• Le danger du transtypage
• Utilisation inévitable du transtypage
Java, avanc...
Conception de classes
avancée
Classes abstraites et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consult...
Plan
• La mise en place de le généralisation
• L’intérêt d’une classe abstraite
• Les méthodes abstraites
Java, avancé (ex...
La mise en place de la généralisation
• La relation de généralisation s’utilise pour :
Faire apparaître un super-type, pou...
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...
Les méthodes abstraites
• Une méthode abstraite ne contient pas de corps
Mot-clé « abstract »
• Ne peuvent exister que dan...
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
Ja...
Conception de classes
avancée
Modificateurs static et final
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau...
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...
Modificateur final
• Un champ « final » ne supporte pas d’affectation
Il est initialisé à la déclaration
Ou bien dans un c...
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 ...
Ce qu’on a couvert
• Modificateur static
• Modificateur final
• Les champs public static final
Java, avancé (examen 1Z0-80...
Conception de classes
avancée
Meilleures pratiques pour
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Con...
Plan
• Les champs de donnée
• Les services des classes publiques
• Les méthodes de classes de package
• Cas particulier de...
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...
Les services des classes publiques
• Une classe publique est une façade de son package
• Les méthodes d’une classe peuvent...
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 pack...
Cas particulier des classes à dériver
• Pour les classes qui doivent être dérivées, penser à mettre en protégé
les méthode...
Ce qu’on a couvert
• Les champs de donnée
• Les services des classes publiques
• Les méthodes de classes de package
• Cas ...
Conception de classes
avancée
Implémenter le modèle
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consult...
Plan
• Utiliser un champ « static »
• Utiliser une méthode « static »
• Le modèle Singleton simple
• Le modèle thread-safe...
Utiliser un champ static
• Un champ « static » correspond à une donnée partagée entre tous les
objets de la classe
Pas bes...
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 class...
Le modèle Singleton simple
• Un champ « static », une méthode « static » qui créé l’instance ou bien
qui la retourne si el...
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
...
Le modèle avec disposition
• Il faut savoir se débarrasser de l’instance unique
A priori seulement après la fin du main
• ...
Ce qu’on a couvert
• Utiliser un champ « static »
• Utiliser une méthode « static »
• Le modèle Singleton simple
• Le modè...
Conception de classes
avancée
Conception de classes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consult...
Plan
• Pourquoi créer des classes abstraites
• Rôle des classes abstraites
• Algorithme utilisant des méthodes abstraites
...
Pourquoi créer des classes abstraites
• Pour factoriser du code
Éviter les redondances
• Eviter que l’utilisateur ne crée ...
Rôle des classes abstraites
• Factoriser du code pour de futures classes dérivées
• Représenter des comportements génériqu...
Algorithme utilisant des méthodes abstraites
• Une classe mère abstraite
• Elle contient un squelette d’algorithme
• Celui...
Ce qu’on a couvert
• Pourquoi créer des classes abstraites
• Rôle des classes abstraites
• Algorithme utilisant des méthod...
Conception de classes
avancée
Classes imbriquées
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant...
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...
Intérêt des classes imbriquées
• Accès aux membres privés de la classe englobante
• Imbrication des objets eux-mêmes
• Cas...
Ce qu’on a couvert
• La syntaxe des classes imbriquées
• Intérêt des classes imbriquées
Java, avancé (examen 1Z0-804) alph...
Conception de classes
avancée
Types d’énumération
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultan...
Plan
• Une classe dont on veut limiter le nombre d’instance et leurs valeurs
• Le type « enum »
Java, avancé (examen 1Z0-8...
Une classe à valeurs limitées
• On ne maîtrise pas les instances d’une classe
• Les types standards n’ont pas de limite no...
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é (...
Ce qu’on a couvert
• Une classe dont on veut limiter le nombre d’instance et leurs valeurs
• Le type « enum »
Java, avancé...
Héritage et interfaces
Interfaces Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepte...
Plan
• Principe de l’interface
• Déclaration d’une interface
• Implémentation d’une interface
• Héritage entre interfaces
...
Principe de l’interface
• Une interface définit un type utilisateur
• Comme une classe, mais sans implémentation
• Peut po...
Déclaration d’une interface
• Mot clé « interface » à la place de « class »
• Dans son propre fichier
• Peut être « public...
Implémenter une interface
• Il faut qu’une classe implémente l’interface
• Mot clé « implements »
• Obligation pour la cla...
Héritage entre interfaces
• Une interface peut hériter d’une autre
• Cela sert à enrichir les interfaces en terme de livra...
Ce qu’on a couvert
• Principe de l’interface
• Déclaration d’une interface
• Implémentation d’une interface
• Héritage ent...
Héritage et interfaces
Les types d’héritages
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, co...
Plan
• Les différents types d’héritages
• L’héritages d’implémentation
• L’héritage d’interfaces
Java, avancé (examen 1Z0-...
Les différents types d’héritages
• On peut hériter pour plusieurs raisons
• Pour récupérer une implémentation existante
Hé...
L’héritage d’implémentation
• On hérite pour ne pas recoder les méthodes, les champs
• Moins de travail à faire, mais atte...
L’héritage d’interfaces
• On hérite pour proposer les mêmes services vis-à-vis de l’extérieur
• Tout le travail est à fair...
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...
Héritage et interfaces
Composition d’objets et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, ...
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 i...
La composition
• La composition est l’association de contenance entre deux objets
• Cela permet de réutiliser un objet
• I...
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...
Ce qu’on a couvert
• Héritage d’implémentation
• Composition
• Problème posé par la délégation
Java, avancé (examen 1Z0-80...
Héritage et interfaces
Implémentation de plusieurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consulta...
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 fa...
Les collisions
• Les collisions de champs de ne peuvent pas exister
• Les méthodes seront sous la forme d’une seule implém...
Ce qu’on a couvert
• Une classe peut implémenter plusieurs interfaces
• Les collisions
Java, avancé (examen 1Z0-804) alpho...
Héritage et interfaces
Le modèle de conception
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, ...
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 stoc...
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...
Ce qu’on a couvert
• A quoi sert un Data Access Object
• Implémentation du modèle
Java, avancé (examen 1Z0-804) alphorm.co...
Types génériques et
collections
Classes génériques et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consu...
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 class...
Utilisation d’une classe générique
• Définir une classe générique
Syntaxe du C++ « Classe<T> »
Utiliser le symbole choisi ...
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) ...
Types génériques et
collections
Inférence de type losange
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
C...
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 fonc...
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 s...
Ce qu’on a couvert
• Définition de l’inférence de type
• Comment alléger l’écriture
Java, avancé (examen 1Z0-804) alphorm....
Types génériques et
collections
Types génériques et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consult...
Plan
• Les collections sans généricité
• Les collections modernes, utilisant la généricité
Java, avancé (examen 1Z0-804) a...
Les collections sans généricité
• Collections manipulant des Object
• Code qui compile toujours
Mais risques à l’exécution...
Les collections modernes, avec généricité
• La collection s’applique sur un type générique
• Choisir le type au moment de ...
Ce qu’on a couvert
• Les collections sans généricité
• Les collections modernes, utilisant la généricité
Java, avancé (exa...
Types génériques et
collections
Les objets List et Map
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Cons...
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...
L’interface Map
• Les objets de classes implémentant Map
Utilisent une clé pour ranger les valeurs
Proposent un accès aléa...
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,...
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...
Réaliser une pile avec Deque
• En utilisant les méthodes
addFirst, removeFirst, peekFirst
• Pour implémenter les méthodes
...
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, concep...
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 ch...
Les méthodes de StringBuilder
• Constructeurs :
Par défaut
Avec un CharSequence en paramètre
Avec une capacité
A partir d’...
Ce qu’on a couvert
• String, StringBuffer et StringBuilder
• Les méthodes de StringBuilder
Java, avancé (examen 1Z0-804) a...
Traitement des chaînes
Principales méthodes liées
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultan...
Plan
• La classe String, ses méthodes et les opérateurs
• La méthode toString
• Les classes StringTokenizer et Scanner
• L...
La classe String, ses méthodes et opérateurs
• La classe String représente une chaîne non modifiable
• Toutes ses méthodes...
La méthode toString
• Disponible sur tout objet Java
• Implémenté par défaut sur Object
• Redéfinissable
• Produit une cha...
Les classes StringTokenizer et Scanner
• Utiles pour parcourir une chaîne de caractères
• Fonctionne sur le mode de l’énum...
Les classes StringBuffer et StringBuilder
• La représentation des buffer
• Chaînes de caractères modifiables
• Aucun rappo...
Les expressions régulières
• Avec String, … on peut appliquer les expressions régulières
• Représente un motif
A chercher ...
Ce qu’on a couvert
• La classe String, ses méthodes et les opérateurs
• La méthode toString
• Les classes StringTokenizer ...
Traitement des chaînes
Analyse de texte dans Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultan...
Plan
• Parcourir une chaîne avec StringTokenizer
• Analyser un texte : les mots, les lettres
Java, avancé (examen 1Z0-804)...
Parcourir une chaîne avec StringTokenizer
• Créer un objet StringTokenizer
• Directement connaître le nombre de ‘token’ : ...
Analyser un texte
• Compter les mots : utiliser StringTokenizer
• Compter les lettres : parcourir la chaîne
• Intérêt : fa...
Ce qu’on a couvert
• Parcourir une chaîne avec StringTokenizer
• Analyser un texte : les mots, les lettres
Java, avancé (e...
Traitement des chaînes
Traitement des entrées avec
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consulta...
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
Ja...
Manipulation par un scanner
• Enumérer des valeurs typées
• Rechercher des motifs ou des chaînes
• Enumérer des morceaux d...
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
Consultan...
Plan
• La classe Formatter
• String.format, System.out.printf, System.out.format
• DateFormat, NumberFormat, DecimalFormat...
La classe Formatter
• Cette classe permet d’appliquer des motifs façon « printf »
• Un objet de type Formatter peut être l...
String.format, printf…
• Méthodes de confort exploitant un Formatter
• String.format permet de formatter une chaîne de car...
DateFormat, NumberFormat, DecimalFormat
• Dans le package java.text
• Permet de formatter les dates, les nombres…
• Existe...
Ce qu’on a couvert
• La classe Formatter
• String.format, System.out.printf, System.out.format
• DateFormat, NumberFormat,...
Traitement des chaînes
Expressions régulières avec
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consulta...
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 c...
La classe Pattern
• Le package java.util.regex
• Permet de compiler une expression régulière en un motif
• Méthodes statiq...
La classe Matcher
• Représente un outil pour gérer les correspondances d’un motif
Faire correspondre toute la séquence
Rec...
Ce qu’on a couvert
• Les expressions régulières
• La classe Pattern
• La classe Matcher
Java, avancé (examen 1Z0-804) alph...
Exceptions et assertions
Catégories d’exceptions
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant...
Plan
• La classe Throwable
• La classe Exception
• Les exceptions non gérées
• Les exceptions gérées
Java, avancé (examen ...
La classe Throwable
• Classe mère de tout ce qui peut être levé lorsqu’une erreur est détectée
• Plusieurs constructeurs :...
La classe Exception
• Classe dérivée de Throwable
• Classe mère de tout ce qui peut être levé dans une application
• Plusi...
Les exceptions non gérées
• RuntimeException est la classe mère de toutes les classes d’exceptions
qui arrivent normalemen...
Les exceptions gérées
• Classes dérivées de Exception
En réalité tout Throwable qui n’est ni Error, ni RuntimeException
• ...
Ce qu’on a couvert
• La classe Throwable
• La classe Exception
• Les exceptions non gérées
• Les exceptions gérées
Java, a...
Exceptions et assertions
Classes d’exception Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultan...
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 ...
Les classes d’exception non gérées
• ArithmeticException
Java, avancé (examen 1Z0-804) alphorm.com™©
• ArrayIndexOutOfBoun...
Les classes d’exception non gérées
• IllegalArgumentException : mauvais argument lors d’un appel de méthode
• IllegalMonit...
Les classes d’exception gérées
• Ces exceptions qui correspondent à certaines API
• Les exceptions qui sont liées aux entr...
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, a...
Exceptions et assertions
Création de classes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, co...
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...
Déclarer des membres spécifiques
• Une exception capte le contexte d’erreur et le remonte
Constructeur avec les paramètres...
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
Consul...
Plan
• Le mot-clé try
• Le mot-clé catch
• Le mot-clé finally
• La déclaration de levée d’exception
Java, avancé (examen 1...
Le mot-clé try
• Mot-clé qui introduit le bloc de code nominal
• Ce bloc sera suivi des blocs de gestion d’erreur
Java, av...
Le mot-clé catch
• Correspond à un bloc de gestion d’erreur
• Plusieurs blocs catch peuvent suivre un try
• Il seront éval...
Le mot-clé finally
• Termine la séquence des catch
• Optionnel
• Introduit in bloc garanti d’exécution
Java, avancé (exame...
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’e...
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, av...
Exceptions et assertions
L’interface AutoCloseable et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consu...
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 passag...
Avec try-with-resources
• Provoquer le « close » sur un objet
• Il faut implémenter AutoCloseable
Java, avancé (examen 1Z0...
Ce qu’on a couvert
• L’absence de destruction déterministe
• Avec try-with-resources
Java, avancé (examen 1Z0-804) alphorm...
Exceptions et assertions
Multi-catch
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur...
Plan
• Plusieurs catch sont possibles derrière un try
• Le polymorphisme des exceptions
• Le contenu d’un catch
Java, avan...
Plusieurs catch sont possibles après un try
• Les catch sont typés par la classe d’exception qu’ils traitent
• Un bloc cat...
Le polymorphisme des exceptions
• Les classes d’exception sont organisées en héritages
• Un catch sur une classe mère attr...
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
• T...
Ce qu’on a couvert
• Plusieurs catch sont possibles derrière un try
• Le polymorphisme des exceptions
• Le contenu d’un ca...
Exceptions et assertions
Meilleures pratiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, c...
Plan
• Un bloc try par méthode
• Contenu des catch
• Granularité des catch
• Réinterprétation des exceptions
Java, avancé ...
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 ...
Contenu des catch
• Un minimum dans un catch, non vide
• Utiliser les méthodes présentes sur la classe Exception
en fait T...
Granularité des catch
• Le bloc catch est déclenché pour 1 type d’exception
• On peut traiter une classe mère
Traiter Exce...
Réinterprétation des exceptions
• Il est possible de relancer une exception alors qu’une exception est en
cours de traitem...
Ce qu’on a couvert
• Un bloc try par méthode
• Contenu des catch
• Granularité des catch
• Réinterprétation des exceptions...
Exceptions et assertions
Les assertions
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concept...
Plan
• Définition d’une assertion
• Placer les assertions
• Lancer l’application avec ou sans les assertions
Java, avancé ...
Définition d’une assertion
• Une vérification runtime que l’objet est bien dans un certain état
• Contrat d’utilisation d’...
Placer une assertion
• En début de méthode : une précondition
• En fin de méthode : une postcondition
• N’importe où : un ...
Lancer avec ou sans les assertions
• Les assertions ne sont pas lancées par défaut
• Il faut les activer avec –ea
• Donc l...
Ce qu’on a couvert
• Définition d’une assertion
• Placer les assertions
• Lancer l’application avec ou sans les assertions...
Principes des entrées-sorties
Gestion des entrées-sorties
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
C...
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 t...
Les canaux
• Les sources ou les cibles
• Fichiers : FileInputStream, FileOutputStream, FileReader, FileWriter
• Sockets
• ...
Les filtres
• Décorations des accès aux données
• Ne rajoutent pas méthodes
BufferedInputStream : gère une lecture bufferi...
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
Consult...
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’u...
Les filtres pour lire la console
• InputStreamReader permet de convertir l’entrée binaire en entrée
caractères
• BufferedR...
Scanner
• Pour rappel, il est possible d’utiliser Scanner
• Lecture de données formatées
Java, avancé (examen 1Z0-804) alp...
Ce qu’on a couvert
• System.in est une entrée binaire
• Les filtres pour lire la console
Java, avancé (examen 1Z0-804) alp...
Principes des entrées-sorties
Ecriture sur la console
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consu...
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...
System.err est un PrintStream
• La sortie standard d’erreur sur les systèmes qui séparent les deux
• Sinon, la même chose ...
Ce qu’on a couvert
• System.out est un PrintStream
• System.err est un PrintStream
Java, avancé (examen 1Z0-804) alphorm.c...
Principes des entrées-sorties
Flux d’entrées-sorties
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consul...
Plan
• Flux d’entrée binaires
• Flux de sortie binaires
• Flux d’entrée caractères
• Flux de sortie caractères
Java, avanc...
Flux d’entrée binaire
• Dérivés de InputStream, classe abstraite
Manipulation d’octets à travers de 2 méthodes
• Avec int ...
Flux de sortie binaires
• Dérivés de OutputStream, classe abstraite
Manipulation d’octets
• Classes qui représentent des c...
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[...
Flux de sortie caractères
• Dérivés de la classe abstraite Writer
Ecriture de caractères
• Des classes représentant les ci...
Ce qu’on a couvert
• Flux d’entrée binaires
• Flux de sortie binaires
• Flux d’entrée caractères
• Flux de sortie caractèr...
Principes des entrées-sorties
Chaînage de flux d’entrées-
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
C...
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Alphorm.com Formation Java,avancé OCP (1Z0-804)
Prochain SlideShare
Chargement dans…5
×

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

17 307 vues

Publié le

Vous trouverez la formation complète ici:
http://www.alphorm.com/tutoriel/formation-en-ligne-java-ocp-1z0-804

Cette formation Java avancé, vient après la formation Java, les fondamentaux (1Z0-803), pour renforcer vos compétences Java.

Dans cette formation, vous allez maîtriser des concepts avancés de Java : encapsulation, polymorhisme, conception de classes, héritage, interfaces, types génériques, collections, traitement des chaînes, exceptions et assertions, E/S, les threads, JDBC, localisation...

Cette formation vous permettra non seulement de passer la certification OCP, mais bien entendu d’être au point en Java, tant du point de vue du framework que de celui de la conception de l’application.

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

Aucun téléchargement
Vues
Nombre de vues
17 307
Sur SlideShare
0
Issues des intégrations
0
Intégrations
8 101
Actions
Partages
0
Téléchargements
485
Commentaires
0
J’aime
5
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

  1. 1. 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)
  2. 2. 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
  3. 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. 4. Mes formations sur alphorm Java, avancé (examen 1Z0-804) alphorm.com™©
  5. 5. Les autres formations dév sur Alphorm Java, avancé (examen 1Z0-804) alphorm.com™©
  6. 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. 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. 8. 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
  9. 9. Certification OCP suite à l’examen 1Z0-804 Java, avancé (examen 1Z0-804) alphorm.com™©
  10. 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. 11. Are you ready ? ☺ Java, avancé (examen 1Z0-804) alphorm.com™©
  12. 12. 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
  13. 13. Plan • Les versions des plateformes • Les éditions Java, avancé (examen 1Z0-804) alphorm.com™©
  14. 14. 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
  15. 15. 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
  16. 16. Ce qu’on a couvert • Les versions des plateformes • Les éditions Java, avancé (examen 1Z0-804) alphorm.com™©
  17. 17. 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
  18. 18. Plan • JSR, JDK, OpenJDK • Les licences Java, avancé (examen 1Z0-804) alphorm.com™©
  19. 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. 20. 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)
  21. 21. Ce qu’on a couvert • JSR, JDK, OpenJDK • Les licences Java, avancé (examen 1Z0-804) alphorm.com™©
  22. 22. 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
  23. 23. Plan • Le contenu de Java EE • Les implémentations Java, avancé (examen 1Z0-804) alphorm.com™©
  24. 24. 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
  25. 25. 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, …
  26. 26. Ce qu’on a couvert • Le contenu de Java EE • Les implémentations Java, avancé (examen 1Z0-804) alphorm.com™©
  27. 27. 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
  28. 28. Plan • Définition • Les participants • Les JSR Java, avancé (examen 1Z0-804) alphorm.com™©
  29. 29. 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
  30. 30. 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
  31. 31. 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
  32. 32. Ce qu’on a couvert • Définition • Les participants • Les JSR Java, avancé (examen 1Z0-804) alphorm.com™©
  33. 33. 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
  34. 34. 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™©
  35. 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. 36. 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
  37. 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. 38. 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™©
  39. 39. 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™©
  40. 40. 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
  41. 41. 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™©
  42. 42. 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
  43. 43. 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
  44. 44. 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
  45. 45. 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™©
  46. 46. 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
  47. 47. 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™©
  48. 48. 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 »
  49. 49. 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
  50. 50. 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)
  51. 51. 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™©
  52. 52. 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
  53. 53. 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™©
  54. 54. 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
  55. 55. 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™©
  56. 56. 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
  57. 57. 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
  58. 58. 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™©
  59. 59. 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
  60. 60. Plan • Principe de l’encapsulation • L’encapsulation dans les classes • L’encapsulation dans les packages Java, avancé (examen 1Z0-804) alphorm.com™©
  61. 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. 62. 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)
  63. 63. 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™©
  64. 64. 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™©
  65. 65. 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
  66. 66. Plan • Modélisation des besoins • Modélisation d’analyse • Modélisation de conception • Traduction en Java Java, avancé (examen 1Z0-804) alphorm.com™©
  67. 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. 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. 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. 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. 71. 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™©
  72. 72. 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
  73. 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. 74. 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
  75. 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. 76. 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 !
  77. 77. 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™©
  78. 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. 79. Plan • La relation de généralisation-spécialisation • Pourquoi utiliser des sous-classes Java, avancé (examen 1Z0-804) alphorm.com™©
  80. 80. 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
  81. 81. 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
  82. 82. 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™©
  83. 83. 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
  84. 84. Plan • Ecrire plusieurs méthodes même nom dans une classe • Les conséquences de la surcharge Java, avancé (examen 1Z0-804) alphorm.com™©
  85. 85. 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
  86. 86. 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™©
  87. 87. 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™©
  88. 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. 89. Plan • Utilisation d’une méthode à nombre variable d’arguments • Déclaration et codage Java, avancé (examen 1Z0-804) alphorm.com™©
  90. 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. 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. 92. 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™©
  93. 93. 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
  94. 94. 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
  95. 95. 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™©
  96. 96. 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
  97. 97. 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
  98. 98. 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
  99. 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. 100. 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
  101. 101. 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
  102. 102. Plan • La spécialisation de classes • La redéfinition de méthode Java, avancé (examen 1Z0-804) alphorm.com™©
  103. 103. 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™©
  104. 104. 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
  105. 105. Ce qu’on a couvert • La spécialisation de classes • La redéfinition de méthode Java, avancé (examen 1Z0-804) alphorm.com™©
  106. 106. 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
  107. 107. Plan • Le rôle des constructeurs • Utiliser les paramètres des constructeurs • Surcharger les constructeurs Java, avancé (examen 1Z0-804) alphorm.com™©
  108. 108. 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™©
  109. 109. 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™©
  110. 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. 111. 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™©
  112. 112. 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
  113. 113. 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™©
  114. 114. 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™©
  115. 115. 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
  116. 116. 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é
  117. 117. 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™©
  118. 118. 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
  119. 119. Plan • Mise en place du polymorphisme • Intérêt du polymorphisme • Dangers du polymorphisme Java, avancé (examen 1Z0-804) alphorm.com™©
  120. 120. 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™©
  121. 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. 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. 123. 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™©
  124. 124. 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
  125. 125. Plan • Syntaxe du transtypage • Le danger du transtypage • Utilisation inévitable du transtypage Java, avancé (examen 1Z0-804) alphorm.com™©
  126. 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. 127. 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™©
  128. 128. 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™©
  129. 129. Ce qu’on a couvert • Syntaxe du transtypage • Le danger du transtypage • Utilisation inévitable du transtypage Java, avancé (examen 1Z0-804) alphorm.com™©
  130. 130. 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
  131. 131. 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™©
  132. 132. 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
  133. 133. 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
  134. 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. 135. 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™©
  136. 136. 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
  137. 137. Plan • Modificateur static • Modificateur final • Les champs public static final Java, avancé (examen 1Z0-804) alphorm.com™©
  138. 138. 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
  139. 139. 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™©
  140. 140. 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
  141. 141. Ce qu’on a couvert • Modificateur static • Modificateur final • Les champs public static final Java, avancé (examen 1Z0-804) alphorm.com™©
  142. 142. 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
  143. 143. 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™©
  144. 144. 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™©
  145. 145. 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
  146. 146. 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
  147. 147. 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
  148. 148. 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™©
  149. 149. 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
  150. 150. 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
  151. 151. 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™©
  152. 152. 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™©
  153. 153. 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™©
  154. 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. 155. 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™©
  156. 156. 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
  157. 157. 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
  158. 158. 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™©
  159. 159. 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™©
  160. 160. 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™©
  161. 161. 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™©
  162. 162. 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™©
  163. 163. 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
  164. 164. Plan • La syntaxe des classes imbriquées • Intérêt des classes imbriquées Java, avancé (examen 1Z0-804) alphorm.com™©
  165. 165. 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™©
  166. 166. 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™©
  167. 167. 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™©
  168. 168. 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
  169. 169. Plan • Une classe dont on veut limiter le nombre d’instance et leurs valeurs • Le type « enum » Java, avancé (examen 1Z0-804) alphorm.com™©
  170. 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. 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. 172. 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™©
  173. 173. 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
  174. 174. 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™©
  175. 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. 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. 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. 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. 179. 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™©
  180. 180. 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
  181. 181. 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™©
  182. 182. 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
  183. 183. 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™©
  184. 184. 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™©
  185. 185. 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™©
  186. 186. 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
  187. 187. Plan • Héritage d’implémentation • Composition • Problème posé par la délégation Java, avancé (examen 1Z0-804) alphorm.com™©
  188. 188. 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™©
  189. 189. 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™©
  190. 190. 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
  191. 191. 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™©
  192. 192. 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
  193. 193. Plan • Une classe peut implémenter plusieurs interfaces • Les collisions Java, avancé (examen 1Z0-804) alphorm.com™©
  194. 194. 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™©
  195. 195. 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™©
  196. 196. Ce qu’on a couvert • Une classe peut implémenter plusieurs interfaces • Les collisions Java, avancé (examen 1Z0-804) alphorm.com™©
  197. 197. 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
  198. 198. Plan • A quoi sert un Data Access Object • Implémentation du modèle Java, avancé (examen 1Z0-804) alphorm.com™©
  199. 199. 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™©
  200. 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. 201. Ce qu’on a couvert • A quoi sert un Data Access Object • Implémentation du modèle Java, avancé (examen 1Z0-804) alphorm.com™©
  202. 202. 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
  203. 203. Plan • Définition d’une classe générique • Utilisation d’une classe générique Java, avancé (examen 1Z0-804) alphorm.com™©
  204. 204. 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
  205. 205. 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>
  206. 206. 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™©
  207. 207. 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
  208. 208. Plan • Définition de l’inférence de type • Comment alléger l’écriture Java, avancé (examen 1Z0-804) alphorm.com™©
  209. 209. 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™©
  210. 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. 211. 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™©
  212. 212. 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
  213. 213. Plan • Les collections sans généricité • Les collections modernes, utilisant la généricité Java, avancé (examen 1Z0-804) alphorm.com™©
  214. 214. 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 !!
  215. 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. 216. 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™©
  217. 217. 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
  218. 218. Plan • L’interface List • L’interface Map Java, avancé (examen 1Z0-804) alphorm.com™©
  219. 219. 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
  220. 220. 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
  221. 221. Ce qu’on a couvert • L’interface List • L’interface Map Java, avancé (examen 1Z0-804) alphorm.com™©
  222. 222. 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
  223. 223. Plan • L’interface Deque • Réaliser une pile conforme Java, avancé (examen 1Z0-804) alphorm.com™©
  224. 224. 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™©
  225. 225. 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™©
  226. 226. Ce qu’on a couvert • L’interface Deque • Réaliser une pile conforme Java, avancé (examen 1Z0-804) alphorm.com™©
  227. 227. 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
  228. 228. Plan • String, StringBuffer et StringBuilder • Les méthodes de StringBuilder Java, avancé (examen 1Z0-804) alphorm.com™©
  229. 229. 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
  230. 230. 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
  231. 231. Ce qu’on a couvert • String, StringBuffer et StringBuilder • Les méthodes de StringBuilder Java, avancé (examen 1Z0-804) alphorm.com™©
  232. 232. 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
  233. 233. 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
  234. 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. 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. 236. 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™©
  237. 237. 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™©
  238. 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. 239. 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
  240. 240. 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
  241. 241. Plan • Parcourir une chaîne avec StringTokenizer • Analyser un texte : les mots, les lettres Java, avancé (examen 1Z0-804) alphorm.com™©
  242. 242. 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™©
  243. 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. 244. 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™©
  245. 245. 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
  246. 246. Plan • Entrée d’un scanner • Manipulation par un scanner Java, avancé (examen 1Z0-804) alphorm.com™©
  247. 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. 248. 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™©
  249. 249. Ce qu’on a couvert • Entrée d’un scanner • Manipulation par un scanner Java, avancé (examen 1Z0-804) alphorm.com™©
  250. 250. 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
  251. 251. Plan • La classe Formatter • String.format, System.out.printf, System.out.format • DateFormat, NumberFormat, DecimalFormat Java, avancé (examen 1Z0-804) alphorm.com™©
  252. 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. 253. 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™©
  254. 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. 255. 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™©
  256. 256. 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
  257. 257. Plan • Les expressions régulières • La classe Pattern • La classe Matcher Java, avancé (examen 1Z0-804) alphorm.com™©
  258. 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. 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. 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. 261. Ce qu’on a couvert • Les expressions régulières • La classe Pattern • La classe Matcher Java, avancé (examen 1Z0-804) alphorm.com™©
  262. 262. 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
  263. 263. 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™©
  264. 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. 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. 266. 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
  267. 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. 268. 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™©
  269. 269. 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
  270. 270. 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™©
  271. 271. Les classes d’exception non gérées • ArithmeticException Java, avancé (examen 1Z0-804) alphorm.com™© • ArrayIndexOutOfBoundsException • ArrayStoreException • ClassCastException
  272. 272. 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
  273. 273. 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™©
  274. 274. 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™©
  275. 275. 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
  276. 276. Plan • Hériter de Exception • Déclarer des membres spécifiques Java, avancé (examen 1Z0-804) alphorm.com™©
  277. 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. 278. 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
  279. 279. Ce qu’on a couvert • Hériter de Exception • Déclarer des membres spécifiques Java, avancé (examen 1Z0-804) alphorm.com™©
  280. 280. 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
  281. 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. 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. 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. 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. 285. 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™©
  286. 286. 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™©
  287. 287. 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
  288. 288. Plan • L’absence de destruction déterministe • Avec try-with-resources Java, avancé (examen 1Z0-804) alphorm.com™©
  289. 289. 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
  290. 290. Avec try-with-resources • Provoquer le « close » sur un objet • Il faut implémenter AutoCloseable Java, avancé (examen 1Z0-804) alphorm.com™©
  291. 291. Ce qu’on a couvert • L’absence de destruction déterministe • Avec try-with-resources Java, avancé (examen 1Z0-804) alphorm.com™©
  292. 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. 293. 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™©
  294. 294. 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
  295. 295. 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™©
  296. 296. 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™©
  297. 297. 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™©
  298. 298. 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
  299. 299. 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™©
  300. 300. 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
  301. 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. 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. 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. 304. 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™©
  305. 305. 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
  306. 306. Plan • Définition d’une assertion • Placer les assertions • Lancer l’application avec ou sans les assertions Java, avancé (examen 1Z0-804) alphorm.com™©
  307. 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. 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. 309. 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™©
  310. 310. 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™©
  311. 311. 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
  312. 312. Plan • Hiérarchie de classes • Les canaux • Les filtres Java, avancé (examen 1Z0-804) alphorm.com™©
  313. 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. 314. 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™©
  315. 315. 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
  316. 316. Ce qu’on a couvert • Hiérarchie de classes • Les canaux • Les filtres Java, avancé (examen 1Z0-804) alphorm.com™©
  317. 317. 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
  318. 318. Plan • System.in est une entrée binaire • Les filtres pour lire la console Java, avancé (examen 1Z0-804) alphorm.com™©
  319. 319. 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™©
  320. 320. 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
  321. 321. Scanner • Pour rappel, il est possible d’utiliser Scanner • Lecture de données formatées Java, avancé (examen 1Z0-804) alphorm.com™©
  322. 322. 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™©
  323. 323. 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
  324. 324. Plan • System.out est un PrintStream • System.err est un PrintStream Java, avancé (examen 1Z0-804) alphorm.com™©
  325. 325. 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
  326. 326. 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™©
  327. 327. Ce qu’on a couvert • System.out est un PrintStream • System.err est un PrintStream Java, avancé (examen 1Z0-804) alphorm.com™©
  328. 328. 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
  329. 329. 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™©
  330. 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. 331. 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,…
  332. 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. 333. 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
  334. 334. 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™©
  335. 335. 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

×