More Related Content Similar to Alphorm.com Formation Java,avancé OCP (1Z0-804) (20) Alphorm.com Formation Java,avancé OCP (1Z0-804)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. 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. 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/
6. Qu’est-ce que Java ?
• Langage de programmation généraliste
• Créé en 1995 par Sun, héritant du C++
• Géré en communauté
• Langage de programmation objet
Java, avancé (examen 1Z0-804) alphorm.com™©
• Avec un très grande bibliothèque de classes
7. Les publics concernés
• Développeurs découvrant Java après avoir suivi les fondamentaux
• Développeurs se dirigeant ensuite vers Java serveur
• Toute personne intéressée par les technologies Java
Java, avancé (examen 1Z0-804) alphorm.com™©
8. Le plan 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
10. Présentation des outils
• Le site de Oracle sera utilisé pour télécharger
Les outils en ligne de commande
La bibliothèque de base
Un IDE, Netbeans
• Nous utiliserons aussi Eclipse
Java, avancé (examen 1Z0-804) alphorm.com™©
• Nous utiliserons aussi Eclipse
• La présentation sera faite sous Windows 7
11. Are you ready ? ☺
Java, avancé (examen 1Z0-804) alphorm.com™©
12. Présentation de la
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. Plan
• Les versions des plateformes
• Les éditions
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. Ce qu’on a couvert
• Les versions des plateformes
• Les éditions
Java, avancé (examen 1Z0-804) alphorm.com™©
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. Plan
• JSR, JDK, OpenJDK
• Les licences
Java, avancé (examen 1Z0-804) alphorm.com™©
19. JSR, JDK, OpenJDK
• La JSR est la spécification, entre autre d’une version du framework
• JDK 7 est par exemple le nom donné par Oracle
• OpenJDK Project est une autre implémentation
Java, avancé (examen 1Z0-804) alphorm.com™©
20. Les licences
• 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. Ce qu’on a couvert
• JSR, JDK, OpenJDK
• Les licences
Java, avancé (examen 1Z0-804) alphorm.com™©
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. Plan
• Le contenu de Java EE
• Les implémentations
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. Ce qu’on a couvert
• Le contenu de Java EE
• Les implémentations
Java, avancé (examen 1Z0-804) alphorm.com™©
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
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. 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. 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. Ce qu’on a couvert
• Définition
• Les participants
• Les JSR
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. Déclarer une classe
• Mot-clé « class »
• Dans un fichier qui porte le nom de la classe
• L’IDE crée le fichier et la classe
• Il est possible d’avoir plusieurs classes dans un fichier
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il est possible de déclarer une classe dans une classe
36. Déclarer les 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. Déclarer les méthodes
• Déclaration sans ordre
• Déclarer le type de la méthode (de retour), void si aucun
• Le nom de méthode
• Les paramètres, chacun étant typés
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les méthodes supportent la surcharge
• La visibilité peut-être modifiée
• Le mot-clé « final » empêche une éventuelle redéfinition
38. Modificateur dans 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Plan
• Principe de l’encapsulation
• L’encapsulation dans les classes
• L’encapsulation dans les packages
Java, avancé (examen 1Z0-804) alphorm.com™©
61. Principe de l’encapsulation
• L’encapsulation est le fait de masquer l’implémentation et de fournir
une interface
• Les bénéfices attendus :
Sécurité de l’état des objets
Maintenance facile car seuls les services sont utilisés
Java, avancé (examen 1Z0-804) alphorm.com™©
Maintenance facile car seuls les services sont utilisés
Simplification de l’interface
62. L’encapsulation dans 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. 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. 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. 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. Plan
• Modélisation des besoins
• Modélisation d’analyse
• Modélisation de conception
• Traduction en Java
Java, avancé (examen 1Z0-804) alphorm.com™©
67. Modélisation des besoins
• Les besoins sont exprimés par du texte
Trop peu formel
• La représentation classique des exigences passe par les usecase
• Une approche NON orientée objets
Java, avancé (examen 1Z0-804) alphorm.com™©
68. Modélisation de l’analyse
• La description des problèmes
• En terme d’objets, sous la forme de classes
Les classes ne montrent pas les méthodes
• En terme de traitement, sous la forme de séquences
Java, avancé (examen 1Z0-804) alphorm.com™©
• Appelé aussi modèle du domaine
69. Modélisation de conception
• La description de la solution
Liée à Java et à sa technologie
• Les classes sont entités, contrôleurs, frontières …
• Les séquences sont les mêmes que précédemment, mais plus détaillées
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les classes sont équipées des méthodes correspondant aux séquences
70. Traduction en Java
• Chaque classe a son équivalent en Java
• Accent mis sur les classes entités
• Classes applicatives liées à l’architecture choisie
• Génération automatique possible en Java
Java, avancé (examen 1Z0-804) alphorm.com™©
71. Ce qu’on 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. 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. Plan
• Briser l’encapsulation
• Empêcher la modification des données internes
• String est une classe non mutable
Java, avancé (examen 1Z0-804) alphorm.com™©
74. Briser l’encapsulation
• L’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. Empêcher la modification
• Une classe non mutable (immutable value) est une classe qui ne permet
la modification
Constructeur
Pas de setters
Pas de méthode modifiant l’objet
Java, avancé (examen 1Z0-804) alphorm.com™©
Pas de méthode modifiant l’objet
• Une méthode peut « faire comme si » elle modifiait
Mais en fait elle retourne un nouvel objet
76. String est 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. 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™©
79. Plan
• La relation de généralisation-spécialisation
• Pourquoi utiliser des sous-classes
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. 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. 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. 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. 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. 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. 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. Encapsulation et
polymorphisme
Méthode à nombre variable
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Méthode à nombre variable
d’arguments
89. Plan
• Utilisation d’une méthode à nombre variable d’arguments
• Déclaration et codage
Java, avancé (examen 1Z0-804) alphorm.com™©
90. Utilisation d’une méthode « variadic »
• Pour un traitement qui sera le même sur chacun des arguments
• Equivalent à n surcharges de la méthode
• Syntaxiquement proche du passage d’un tableau d’arguments
Java, avancé (examen 1Z0-804) alphorm.com™©
91. Déclaration et codage
• Les arguments en nombre variable, c’est un tableau
• On peut utiliser length et les accès aléatoires
Java, avancé (examen 1Z0-804) alphorm.com™©
92. Ce qu’on a couvert
• Utilisation d’une méthode à nombre variable d’arguments
• Déclaration et codage
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. 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. 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. 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. 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. Remarque sur « public » pour « class »
• Une classe n’est connue par défaut que de son package
• Si la classe doit être accessible de l’extérieur de son package, elle doit
être marquée « public »
• Une classe publique aura certainement des membres publiques
Java, avancé (examen 1Z0-804) alphorm.com™©
100. Ce qu’on 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. 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
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. 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. Ce qu’on a couvert
• La spécialisation de classes
• La redéfinition de méthode
Java, avancé (examen 1Z0-804) alphorm.com™©
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. Plan
• Le rôle des constructeurs
• Utiliser les paramètres des constructeurs
• Surcharger les constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. Surcharger les constructeurs
• Il est possible de déclarer plusieurs constructeurs qui se distinguent de
par leurs signatures
• Chaque constructeur correspond à une façon de créer l’objet
• Le constructeur sans paramètre est le constructeur par défaut
Il n’est plus généré lorsqu’on écrit un constructeur nous-même
Java, avancé (examen 1Z0-804) alphorm.com™©
Il n’est plus généré lorsqu’on écrit un constructeur nous-même
Pas forcément nécessaire de le réécrire
• Il est possible de chaîner les constructeurs entre eux
Pour éviter les redondances de code
111. Ce qu’on a couvert
• Le rôle des constructeurs
• Utiliser les paramètres des constructeurs
• Surcharger les constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. 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. 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. 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. 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. 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. Plan
• Mise en place du polymorphisme
• Intérêt du polymorphisme
• Dangers du polymorphisme
Java, avancé (examen 1Z0-804) alphorm.com™©
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. Intérêt du polymorphisme
• L’usage du polymorphisme permet de :
Écrire un code simple, qui utilise le type généralisé
Déclencher des méthodes qui ne seront connues qu’à l’exécution
Créer des points de variation dans le système
Mettre en place des points d’extensibilité du système
Java, avancé (examen 1Z0-804) alphorm.com™©
Mettre en place des points d’extensibilité du système
• A l’opposé du polymorphisme : tester le type des objets afin de
déclencher un code spécifique sur chaque
122. Dangers du polymorphisme
• Il est impossible de savoir, à la lecture, quelle est la méthode qui sera
déclenchée
Tout dépend de l’objet qui sera créé et placé en face de l’appel
• Le traitement sollicité peut être une surprise (non conforme, levée
d’exception…)
Java, avancé (examen 1Z0-804) alphorm.com™©
Le principe de substitution voudrait que les appels soient correctement
implémentés, mais ce principe est souvent violé
123. Ce qu’on a couvert
• Mise en place du polymorphisme
• Intérêt du polymorphisme
• Dangers du polymorphisme
Java, avancé (examen 1Z0-804) alphorm.com™©
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. Plan
• Syntaxe du transtypage
• Le danger du transtypage
• Utilisation inévitable du transtypage
Java, avancé (examen 1Z0-804) alphorm.com™©
126. Syntaxe du transtypage
• Pour forcer le compilateur à accepter un appel
• Le type de la référence à utiliser ne fournit pas la méthode
Mais vous ‘savez’ que l’objet connaît la méthode
• Mettre le type à obtenir entre parenthèses
Java, avancé (examen 1Z0-804) alphorm.com™©
Le compilateur est forcé d’accepter l’appel, mais il faudra que ce « cast » soit
vrai à l’exécution
127. Le danger 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. 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. 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. 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. 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. 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. 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. Les méthodes abstraites
• Une méthode abstraite ne contient pas de corps
Mot-clé « abstract »
• Ne peuvent exister que dans des classes abstraites
• Seront redéfinies dans les classes filles
Java, avancé (examen 1Z0-804) alphorm.com™©
135. Ce qu’on 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. 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
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. 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. 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. Ce qu’on a couvert
• Modificateur static
• Modificateur final
• Les champs public static final
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Le modèle thread-safe
• Le code précédent n’est pas protégé contre des accès simultanés de
plusieurs thread en même temps
• Créer une section critique ? Mais pas la méthode entière
• Faire créer l’instance à l’initialisation ? Mais plus de création à la
demande
Java, avancé (examen 1Z0-804) alphorm.com™©
155. Le modèle 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. 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. 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. 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. 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. 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. 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. 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. 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. Plan
• La syntaxe des classes imbriquées
• Intérêt des classes imbriquées
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. 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. 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. 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. Une classe à valeurs limitées
• On ne maîtrise pas les instances d’une classe
• Les types standards n’ont pas de limite non plus
• Il est possible de créer les futures valeurs
Limiter les instances
Java, avancé (examen 1Z0-804) alphorm.com™©
Beaucoup de travail
171. Le type enum
• Un énuméré est un type
• Dont on énumère toutes les valeurs
• Qui peut posséder des méthodes
Java, avancé (examen 1Z0-804) alphorm.com™©
172. Ce qu’on 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. 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. 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. Principe de l’interface
• Une interface définit un type utilisateur
• Comme une classe, mais sans implémentation
• Peut posséder des déclarations de méthodes
Abstract public
Java, avancé (examen 1Z0-804) alphorm.com™©
• Peut posséder des déclarations de constantes
Public static final
• Sert à déclarer des services sans les implémenter
• Doit être implémentée par une classe
176. Déclaration d’une interface
• Mot clé « interface » à la place de « class »
• Dans son propre fichier
• Peut être « public » ou pas
Java, avancé (examen 1Z0-804) alphorm.com™©
177. Implémenter une interface
• Il faut qu’une classe implémente l’interface
• Mot clé « implements »
• Obligation pour la classe de fournir les méthodes prévues
Ou bien cette classe doit être marquée « abstract »
Java, avancé (examen 1Z0-804) alphorm.com™©
• Très proche de la notion d’héritage, mais on n’hérite de rien, si ce n’est
de l’obligation de tout implémenter
178. Héritage entre interfaces
• Une interface peut hériter d’une autre
• Cela sert à enrichir les interfaces en terme de livraisons successives
• Une interface peut hériter de plusieurs interfaces
Java, avancé (examen 1Z0-804) alphorm.com™©
179. Ce qu’on 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. 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. 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. 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. 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. 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. 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. 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
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. 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. 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. 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. 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. Plan
• Une classe peut implémenter plusieurs interfaces
• Les collisions
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. Ce qu’on a couvert
• Une classe peut implémenter plusieurs interfaces
• Les collisions
Java, avancé (examen 1Z0-804) alphorm.com™©
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. Plan
• A quoi sert un Data Access Object
• Implémentation du modèle
Java, avancé (examen 1Z0-804) alphorm.com™©
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. Implémentation du modèle
• Un point d’accès au modèle DAO
• Des interfaces représentant les accès à chaque type de données
• Les implémentations de ces accès
Java, avancé (examen 1Z0-804) alphorm.com™©
201. Ce qu’on a couvert
• A quoi sert un Data Access Object
• Implémentation du modèle
Java, avancé (examen 1Z0-804) alphorm.com™©
202. Types génériques et
collections
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. Plan
• Définition d’une classe générique
• Utilisation d’une classe générique
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. 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. 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. Plan
• Définition de l’inférence de type
• Comment alléger l’écriture
Java, avancé (examen 1Z0-804) alphorm.com™©
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. Comment alléger l’écriture
• Avec l’inférence de type, on évite de répéter du code
• Ecriture plus simple
• Mais il faut spécifier quand même les « <> »
Java, avancé (examen 1Z0-804) alphorm.com™©
211. Ce qu’on a couvert
• Définition de l’inférence de type
• Comment alléger l’écriture
Java, avancé (examen 1Z0-804) alphorm.com™©
212. Types génériques et
collections
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. Plan
• Les collections sans généricité
• Les collections modernes, utilisant la généricité
Java, avancé (examen 1Z0-804) alphorm.com™©
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. Les collections modernes, avec généricité
• La collection s’applique sur un type générique
• Choisir le type au moment de la création de l’objet
• Il peut y avoir plusieurs types
• Collection typée
Java, avancé (examen 1Z0-804) alphorm.com™©
216. Ce qu’on a couvert
• Les collections sans généricité
• Les collections modernes, utilisant la généricité
Java, avancé (examen 1Z0-804) alphorm.com™©
217. Types génériques et
collections
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
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. 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. Ce qu’on a couvert
• L’interface List
• L’interface Map
Java, avancé (examen 1Z0-804) alphorm.com™©
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
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. 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. Ce qu’on a couvert
• L’interface Deque
• Réaliser une pile conforme
Java, avancé (examen 1Z0-804) alphorm.com™©
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
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. 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. Ce qu’on a couvert
• String, StringBuffer et StringBuilder
• Les méthodes de StringBuilder
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. La classe String, ses méthodes et opérateurs
• La classe String représente une chaîne non modifiable
• Toutes ses méthodes font des modifications créent un nouvel objet
• Des opérateurs sont disponibles sur String
• L’initialisation littérale de String est possible
Java, avancé (examen 1Z0-804) alphorm.com™©
• Un très grand nombre de méthodes
235. La méthode toString
• Disponible sur tout objet Java
• Implémenté par défaut sur Object
• Redéfinissable
• Produit une chaîne qui doit représenter l’objet
Java, avancé (examen 1Z0-804) alphorm.com™©
236. Les classes 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. 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. Les expressions régulières
• Avec String, … on peut appliquer les expressions régulières
• Représente un motif
A chercher dans un texte
A substituer dans un texte
Pour découper des chaînes
Java, avancé (examen 1Z0-804) alphorm.com™©
Pour découper des chaînes
Pour filtrer
239. Ce qu’on 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. 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. Plan
• Parcourir une chaîne avec StringTokenizer
• Analyser un texte : les mots, les lettres
Java, avancé (examen 1Z0-804) alphorm.com™©
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. Analyser un texte
• Compter les mots : utiliser StringTokenizer
• Compter les lettres : parcourir la chaîne
• Intérêt : faire de la cryptanalyse ;)
Java, avancé (examen 1Z0-804) alphorm.com™©
244. Ce qu’on a couvert
• Parcourir une chaîne avec StringTokenizer
• Analyser un texte : les mots, les lettres
Java, avancé (examen 1Z0-804) alphorm.com™©
245. Traitement des chaînes
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. Plan
• Entrée d’un scanner
• Manipulation par un scanner
Java, avancé (examen 1Z0-804) alphorm.com™©
247. Entrée d’un scanner
• Un scanner peut être construit à partir de
Un fichier
Un flux
Une chaîne
Une source de caractères
Java, avancé (examen 1Z0-804) alphorm.com™©
Une source de caractères
Un canal d’octet
248. Manipulation par 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. Ce qu’on a couvert
• Entrée d’un scanner
• Manipulation par un scanner
Java, avancé (examen 1Z0-804) alphorm.com™©
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. Plan
• La classe Formatter
• String.format, System.out.printf, System.out.format
• DateFormat, NumberFormat, DecimalFormat
Java, avancé (examen 1Z0-804) alphorm.com™©
252. La classe Formatter
• Cette classe permet d’appliquer des motifs façon « printf »
• Un objet de type Formatter peut être lié à un StringBuilder
• Permet de formatter, réorganiser les paramètres
• Les conversions sont
Java, avancé (examen 1Z0-804) alphorm.com™©
Générales, Character, Numeric, Date/Time, Percent, LineSeparator
253. String.format, printf…
• Mé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. DateFormat, NumberFormat, DecimalFormat
• Dans le package java.text
• Permet de formatter les dates, les nombres…
• Existe en une instance dépendant du poste
• S’adapte aux cultures
Java, avancé (examen 1Z0-804) alphorm.com™©
• Gère le formatage et aussi le parsing
255. Ce qu’on a couvert
• La classe Formatter
• String.format, System.out.printf, System.out.format
• DateFormat, NumberFormat, DecimalFormat
Java, avancé (examen 1Z0-804) alphorm.com™©
256. Traitement des chaînes
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. Plan
• Les expressions régulières
• La classe Pattern
• La classe Matcher
Java, avancé (examen 1Z0-804) alphorm.com™©
258. Les expressions régulières
• Sorte de langage à la grammaire simple
• Permet de retrouver des motifs dans des chaînes de caractères
• Basé sur Perl5, mais quelques constructions en moins
• Motifs :
Java, avancé (examen 1Z0-804) alphorm.com™©
Caractères d’échappement n, t …
[abc] : a ou b ou c, [^abc] : tout sauf a ou b ou c, [a-z] : de a à z
. : tout caractère, d : [0-9], D : [^0-9], s : un blanc, w : [a-zA-Z0-9]
X? : un ou zéro, X* : 0 ou plus, X+ : 1 ou plus, X{n} : n, X{n,m} : entre n et m
259. La classe Pattern
• Le package java.util.regex
• Permet de compiler une expression régulière en un motif
• Méthodes statiques :
compile, matches, quote
Java, avancé (examen 1Z0-804) alphorm.com™©
• Autres méthodes :
matcher, pattern, split, toString
260. La classe Matcher
• Représente un outil pour gérer les correspondances d’un motif
Faire correspondre toute la séquence
Rechercher le pattern en partant du début
Rechercher la prochaine partie qui correspond au motif
Java, avancé (examen 1Z0-804) alphorm.com™©
261. Ce qu’on a couvert
• Les expressions régulières
• La classe Pattern
• La classe Matcher
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. La classe Throwable
• Classe mère de tout ce qui peut être levé lorsqu’une erreur est détectée
• Plusieurs constructeurs :
Throwable ()
Throwable (String message)
Throwable (String message, Throwable cause)
Java, avancé (examen 1Z0-804) alphorm.com™©
Throwable (String message, Throwable cause)
Throwable (String message, Throwable cause, boolean sup, boolean stack)
Throwable (Throwable cause)
• Méthodes : getMessage(), getCause() ….
265. La classe Exception
• Classe dérivée de Throwable
• Classe mère de tout ce qui peut être levé dans une application
• Plusieurs constructeurs :
Exception()
Java, avancé (examen 1Z0-804) alphorm.com™©
Exception(String message)
Exception(String message, Throwable cause)
Exception(String message, Throwable cause, boolean sup, boolean stack)
Exception(Throwable cause)
266. Les exceptions 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. Les exceptions gérées
• Classes dérivées de Exception
En réalité tout Throwable qui n’est ni Error, ni RuntimeException
• Le compilateur exigera une gestion explicite
avec les mots clés try-catch-throw-throws
On ne peut pas ignorer simplement la levée de ces exceptions
Java, avancé (examen 1Z0-804) alphorm.com™©
• On ne peut pas ignorer simplement la levée de ces exceptions
268. Ce qu’on 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. 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. 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. Les classes d’exception non gérées
• ArithmeticException
Java, avancé (examen 1Z0-804) alphorm.com™©
• ArrayIndexOutOfBoundsException
• ArrayStoreException
• ClassCastException
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. 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. 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. 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. Plan
• Hériter de Exception
• Déclarer des membres spécifiques
Java, avancé (examen 1Z0-804) alphorm.com™©
277. Hériter de Exception
• Il est indispensable d’hériter de Exception
• Faire le choix du constructeur
Le message est déjà prévu
La cause est déjà prévue
Un héritage sur RuntimeException est possible
Java, avancé (examen 1Z0-804) alphorm.com™©
• Un héritage sur RuntimeException est possible
278. Déclarer des 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. Ce qu’on a couvert
• Hériter de Exception
• Déclarer des membres spécifiques
Java, avancé (examen 1Z0-804) alphorm.com™©
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. Plan
• Le mot-clé try
• Le mot-clé catch
• Le mot-clé finally
• La déclaration de levée d’exception
Java, avancé (examen 1Z0-804) alphorm.com™©
282. Le mot-clé try
• Mot-clé qui introduit le bloc de code nominal
• Ce bloc sera suivi des blocs de gestion d’erreur
Java, avancé (examen 1Z0-804) alphorm.com™©
283. Le mot-clé catch
• Correspond à un bloc de gestion d’erreur
• Plusieurs blocs catch peuvent suivre un try
• Il seront évalués dans l’ordre de présence dans le code
Java, avancé (examen 1Z0-804) alphorm.com™©
284. Le mot-clé finally
• Termine la séquence des catch
• Optionnel
• Introduit in bloc garanti d’exécution
Java, avancé (examen 1Z0-804) alphorm.com™©
285. La déclaration 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. 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. 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. Plan
• L’absence de destruction déterministe
• Avec try-with-resources
Java, avancé (examen 1Z0-804) alphorm.com™©
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
291. Ce qu’on a couvert
• L’absence de destruction déterministe
• Avec try-with-resources
Java, avancé (examen 1Z0-804) alphorm.com™©
292. Exceptions et assertions
Multi-catch
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Multi-catch
293. Plan
• Plusieurs catch sont possibles derrière un try
• Le polymorphisme des exceptions
• Le contenu d’un catch
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. 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. 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. 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. 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. 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. Contenu des catch
• Un minimum dans un catch, non vide
• Utiliser les méthodes présentes sur la classe Exception
en fait Throwable
• Utiliser un log pour tracer
Java, avancé (examen 1Z0-804) alphorm.com™©
• Rétablir le système bas-niveau et réinterpréter
302. Granularité des catch
• Le bloc catch est déclenché pour 1 type d’exception
• On peut traiter une classe mère
Traiter Exception et totalement généraliste
Traiter une super classe traite toutes ses sous-classes
Il est possible de traiter plusieurs types non reliés
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il est possible de traiter plusieurs types non reliés
303. Réinterprétation des exceptions
• Il est possible de relancer une exception alors qu’une exception est en
cours de traitement
• Cas particulier du traitement bas-niveau puis
Relancer la même exception
Relancer une nouvelle exception : réinterprétation
Java, avancé (examen 1Z0-804) alphorm.com™©
Relancer une nouvelle exception : réinterprétation
304. Ce qu’on 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. 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. 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. Définition d’une assertion
• Une vérification runtime que l’objet est bien dans un certain état
• Contrat d’utilisation d’un objet, d’une méthode
• Ne cherche pas à vérifier les entrées variantes de l’environnement
Utiliser les tests à base de « if » pour cela
Java, avancé (examen 1Z0-804) alphorm.com™©
• Lorsque l’assertion n’est pas vérifiée, une Error est levée
308. Placer une assertion
• En début de méthode : une précondition
• En fin de méthode : une postcondition
• N’importe où : un invariant
Une assertion peut détecter un passage dans un flux non prévu
Java, avancé (examen 1Z0-804) alphorm.com™©
• Ne pas tester les paramètres en entrée dus à l’utilisateur
• Les assertions sont débrayables
309. Lancer avec 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. 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. 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. Plan
• Hiérarchie de classes
• Les canaux
• Les filtres
Java, avancé (examen 1Z0-804) alphorm.com™©
313. Hiérarchie de classes
• InputStream est une entrée binaire
• OutputStream est une sortie binaire
• Reader est une entrée texte
• Writer est une sortie texte
Java, avancé (examen 1Z0-804) alphorm.com™©
• Dérivées de ces classes
Canaux représentant les sources/cibles de données
Filtres représentant les décorateurs
314. Les canaux
• 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. 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. Ce qu’on a couvert
• Hiérarchie de classes
• Les canaux
• Les filtres
Java, avancé (examen 1Z0-804) alphorm.com™©
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. Plan
• System.in est une entrée binaire
• Les filtres pour lire la console
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. Scanner
• Pour rappel, il est possible d’utiliser Scanner
• Lecture de données formatées
Java, avancé (examen 1Z0-804) alphorm.com™©
322. Ce qu’on a couvert
• System.in est une entrée binaire
• Les filtres pour lire la console
Java, avancé (examen 1Z0-804) alphorm.com™©
323. Principes des entrées-sorties
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. Plan
• System.out est un PrintStream
• System.err est un PrintStream
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. Ce qu’on a couvert
• System.out est un PrintStream
• System.err est un PrintStream
Java, avancé (examen 1Z0-804) alphorm.com™©
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. 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. Flux d’entrée binaire
• Dérivés de InputStream, classe abstraite
Manipulation d’octets à travers de 2 méthodes
• Avec int read()
• Avec int read(byte[])
• Classes qui représentent des sources de données
Java, avancé (examen 1Z0-804) alphorm.com™©
• Classes qui représentent des sources de données
FileInputStream, …
• Classes qui représentent des transformations de données
ObjectInputStream, DataInputStream,…
331. Flux de 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. Flux d’entrée caractères
• Dérivés de la classe abstraite Reader
Lecture de caractères
• Avec int read() ou int read(char[]) …
• Des classes qui sont sources de caractères
FileReader, …
Java, avancé (examen 1Z0-804) alphorm.com™©
FileReader, …
• Des classes qui transforment ou ajoutent des fonctionnalités
BufferedReader, LineNumberReader, …
• A noter que FileReader dérive de InputStreamReader
333. Flux de 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. 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. 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