SlideShare ist ein Scribd-Unternehmen logo
1 von 500
Downloaden Sie, um offline zu lesen
Présentation de la formation
Java avancé
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Java avancé
(examen 1Z0-804)
Plan
• Présentation du formateur
• Les autres formations sur Alphorm
• Qu’est-ce que Java ?
• Les publics concernés
• Le plan de la formation
Java, avancé (examen 1Z0-804) alphorm.com™©
• Le plan de la formation
• Présentation des outils
Présentation du formateur
• Fabien Brissonneau
• Email : fabien.brissonneau@gmail.com
• Consultant Concepteur et Formateur
• Missions d’architecture, de conception , de réalisation logicielles
• Fondateur de eiXa6
• Actuellement en mission sur un projet de gestion
Java, avancé (examen 1Z0-804) alphorm.com™©
• Actuellement en mission sur un projet de gestion
• Mes références :
Mon profil Viadeo : http://fr.viadeo.com/fr/profile/fabien.brissonneau
Mon profil LinkedIn : http://fr.linkedin.com/pub/fabien-brissonneau/65/902/92a/
Mes formations sur alphorm
Java, avancé (examen 1Z0-804) alphorm.com™©
Les autres formations dév sur Alphorm
Java, avancé (examen 1Z0-804) alphorm.com™©
Qu’est-ce que Java ?
• Langage de programmation généraliste
• Créé en 1995 par Sun, héritant du C++
• Géré en communauté
• Langage de programmation objet
Java, avancé (examen 1Z0-804) alphorm.com™©
• Avec un très grande bibliothèque de classes
Les publics concernés
• Développeurs découvrant Java après avoir suivi les fondamentaux
• Développeurs se dirigeant ensuite vers Java serveur
• Toute personne intéressée par les technologies Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Le plan de la formation
• Présentation de la plateforme
• Rappels de syntaxe
• Encapsulation
• Conception de classes
• Utilisation de l’héritage
• Les exceptions
• Les entrées-sorties
• Les entrées-sorties NIO
• Le multithread
• Les traitements simultanés
Java, avancé (examen 1Z0-804) alphorm.com™©
• Utilisation de l’héritage
• La généricité
• Le traitement de textes
• Les traitements simultanés
• La base de données
• La localisation
Certification OCP suite à l’examen 1Z0-804
Java, avancé (examen 1Z0-804) alphorm.com™©
Présentation des outils
• Le site de Oracle sera utilisé pour télécharger
Les outils en ligne de commande
La bibliothèque de base
Un IDE, Netbeans
• Nous utiliserons aussi Eclipse
Java, avancé (examen 1Z0-804) alphorm.com™©
• Nous utiliserons aussi Eclipse
• La présentation sera faite sous Windows 7
Are you ready ? ☺
Java, avancé (examen 1Z0-804) alphorm.com™©
Présentation de la
plateforme Java
Java et les plateformes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Java et les plateformes
Plan
• Les versions des plateformes
• Les éditions
Java, avancé (examen 1Z0-804) alphorm.com™©
Les versions des plateformes
• Chaque plateforme contient des outils qui chacun correspond à une JSR
(Java Specification Request)
• La JVM (Java Virtual Machine) exécute le bytecode grâce au compilateur
JIT (Just In Time)
• Le JDK (Java Development Kit) contient le compilateur entre autre
Java, avancé (examen 1Z0-804) alphorm.com™©
• Le JRE (Java Runtime Environment) est l’environnement d’exécution
• Les numéros de versions sont ceux des JDK
• Chaque version correspond à une JSR
Les éditions
• La JSE (Java Standard Edition) pour ordinateurs de bureau
• La JEE (Java Entreprise Edition) pour serveurs
• La JME (Java Micro Edition) pour environnements mémoires réduits
• La Java FX, un environnement client riche
Java, avancé (examen 1Z0-804) alphorm.com™©
• JavaCard est un système d’exploitation pour carte à puce
Ce qu’on a couvert
• Les versions des plateformes
• Les éditions
Java, avancé (examen 1Z0-804) alphorm.com™©
Présentation de la
plateforme Java
OpenJDK et les licences
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
OpenJDK et les licences
Plan
• JSR, JDK, OpenJDK
• Les licences
Java, avancé (examen 1Z0-804) alphorm.com™©
JSR, JDK, OpenJDK
• La JSR est la spécification, entre autre d’une version du framework
• JDK 7 est par exemple le nom donné par Oracle
• OpenJDK Project est une autre implémentation
Java, avancé (examen 1Z0-804) alphorm.com™©
Les licences
• La licence GPL pour le code Java, mais pas totalement à l’origne
• Depuis la version 7, OpenJDK devient l’implémentation de référence
pour la JSR
• Pour qu’une implémentation soit certifiée, elle doit passée le test de
compatibilité et comparée à OpenJDK
Java, avancé (examen 1Z0-804) alphorm.com™©
• Le code source OpenJDK est diponible sour 2 licences : licence GNU, et
licence Sun’s Java Research License (travaux académiques)
• Le JDK Oracle et disponible sous BPL (code compilé uniquement)
• Pour être intégré dans des distributions GNU, il faut OpenJDK complété
éventuellement par IceTea (projet initial de RedHat)
Ce qu’on a couvert
• JSR, JDK, OpenJDK
• Les licences
Java, avancé (examen 1Z0-804) alphorm.com™©
Présentation de la
plateforme Java
Java dans les
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Java dans les
environnements serveurs
Plan
• Le contenu de Java EE
• Les implémentations
Java, avancé (examen 1Z0-804) alphorm.com™©
Le contenu de Java EE
• Une plate forme pour exécuter
• Une suite de tests
• Une réalisation de référence
• Les bonnes pratiques
Java, avancé (examen 1Z0-804) alphorm.com™©
• Objectifs : faciliter la construction d’applications serveur, sur la même
base que JSE, mais avec des compléments fournis par le conteneur
Les implémentations
• Oracle Glassfish est l’implémentation de référence
Open Source Edition ou Enterprise Server…
• JBoss, JEUS, Apache Geronimo, IBM WebSphere, Caucho Resin…
• Les composants peuvent être : Servlet, JSP, JSTL, JSF, EJB, JNDI, JDBC,
JMS, JPA, JAXB, …
Java, avancé (examen 1Z0-804) alphorm.com™©
JMS, JPA, JAXB, …
Ce qu’on a couvert
• Le contenu de Java EE
• Les implémentations
Java, avancé (examen 1Z0-804) alphorm.com™©
Présentation de la
plateforme Java
Processus JCP
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Processus JCP
Plan
• Définition
• Les participants
• Les JSR
Java, avancé (examen 1Z0-804) alphorm.com™©
Définition
• Le Java Community Process est le mécanisme pour faire évoluer les
spécifications techniques de Java
• Le processus consiste à faire évoluer une Java Specification Request à
travers plusieurs étapes (JCP 2.9 version actuelle du processus)
Java, avancé (examen 1Z0-804) alphorm.com™©
• Initiation -> Première revue -> Brouillon public -> Maintenance
Les participants
• On peut participer librement au processus
• Les Java User Group sont souvent impliqués
• Public : chacun peut donner des commentaires
• Member : faire des propositions
Java, avancé (examen 1Z0-804) alphorm.com™©
• Expert : donner la forme de la spécification
• Specification Lead : choix des experts des groupes
• Executive Committee : élu
• Oracle a un siège permanent
Les JSR
• Java SE : 62 JSR différentes
Java SE 7 : JSR 336
Java SE 8 : JSR 337
• Java EE : 57 JSR différentes
Java EE Security API : JSR 375
Java, avancé (examen 1Z0-804) alphorm.com™©
Java EE Security API : JSR 375
• Java ME : 85 JSR différentes
Ce qu’on a couvert
• Définition
• Les participants
• Les JSR
Java, avancé (examen 1Z0-804) alphorm.com™©
Rappels sur la syntaxe
et les classes Java
Classes simples
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Classes simples
Plan
• Déclarer une classe, syntaxe, fichier et outil
• Déclarer les champs de données, visibilité, modificateurs
• Déclarer les méthodes, visibilités, modificateurs
• Modificateurs de la déclaration de la classe
Java, avancé (examen 1Z0-804) alphorm.com™©
Déclarer une classe
• Mot-clé « class »
• Dans un fichier qui porte le nom de la classe
• L’IDE crée le fichier et la classe
• Il est possible d’avoir plusieurs classes dans un fichier
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il est possible de déclarer une classe dans une classe
Déclarer les champs de donnée
• Déclaration sans aucun ordre des membres de la classe
• Déclarer le type puis le nom de la variable
• Il est possible de placer une valeur par défaut
• Il est possible de modifier la visibilité : public, protected, private
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il est possible de rendre constant ce champ : final
Mais empêche une affectation APRES l’initialisation
Déclarer les méthodes
• Déclaration sans ordre
• Déclarer le type de la méthode (de retour), void si aucun
• Le nom de méthode
• Les paramètres, chacun étant typés
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les méthodes supportent la surcharge
• La visibilité peut-être modifiée
• Le mot-clé « final » empêche une éventuelle redéfinition
Modificateur dans la déclaration de la classe
• Une classe peut être « public »
Impact sur le nom du fichier
Impact sur les accès de l’extérieur de son package
• Le mot-clé « final » signifie que la classe ne peut pas être dérivée
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Déclarer une classe, syntaxe, fichier et outil
• Déclarer les champs de données, visibilité, modificateurs
• Déclarer les méthodes, visibilités, modificateurs
• Modificateurs de la déclaration de la classe
Java, avancé (examen 1Z0-804) alphorm.com™©
Rappels sur la syntaxe
et les classes Java
Champs, constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Champs, constructeurs
et méthodes
Plan
• Déclaration et utilisation des méthodes
• Déclaration et utilisation des champs de données
• Rôle des constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Déclaration et utilisation des méthodes
• Une méthode est un traitement disponible sur les objets
• Il peut y avoir des paramètres
• Un retour peut être récupéré
• La sélection se fait sur un objet que l’on instancie auparavant
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il existe des méthodes statiques
Déclaration et utilisation des champs
• Un champ d’instance porte une valeur pour chaque objet
• En général, le champ est privé
• Utilisé dans les méthodes de l’objet
• Peut être accessible via des getters et des setters
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il existe des champs statiques
Le rôle des constructeurs
• Il faut initialiser les champs de l’objet
• Des paramètres permettent à l’utilisateur de :
Choisir la version du constructeur (surcharge)
Fournir des arguments de paramétrage
La surcharge est fréquente
Java, avancé (examen 1Z0-804) alphorm.com™©
• La surcharge est fréquente
• Un constructeur est une méthode :
Portant le nom de la classe
Sans retour
Ce qu’on a couvert
• Déclaration et utilisation des méthodes
• Déclaration et utilisation des champs de données
• Rôle des constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Rappels sur la syntaxe
et les classes Java
Modélisation d’objets à
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Modélisation d’objets à
l’aide de classes Java
Plan
• Modéliser les objets du monde réel
• Traduire les objets réels en objets logiciels
• Créer les classes et les structurer
Java, avancé (examen 1Z0-804) alphorm.com™©
Modéliser les objets du monde réel
• Les objets métiers sont au cœur de l’application
• Plusieurs façons de trouver les objets métiers
À partir des exigences, usecase, …
Concepts métiers décrits sous forme de noms
Traduits sous la forme d’objets « entités »
Java, avancé (examen 1Z0-804) alphorm.com™©
• Traduits sous la forme d’objets « entités »
Traduire le réel en logiciel
• Un objet métier correspond à des données en base
Un objet de mapping objet-relationnel
Un objet de valeurs (contenant les données)
• On devra ajouter
Les objets de services
Java, avancé (examen 1Z0-804) alphorm.com™©
Les objets de services
Les objets de présentation
Créer les classes et les structurer
• Sous la forme d’un diagramme de classes UML
Expressif, lisible, et complet
• Les classes possèdent
Attributs
Méthodes
Java, avancé (examen 1Z0-804) alphorm.com™©
Méthodes
Constructeurs
• Les classes sont reliées entre elles grâce aux associations
• La traduction en Java est directe
Les associations sont traduites en références (cf attributs références)
Ce qu’on a couvert
• Modéliser les objets du monde réel
• Traduire les objets réels en objets logiciels
• Créer les classes et les structurer
Java, avancé (examen 1Z0-804) alphorm.com™©
Rappels sur la syntaxe
et les classes Java
Instructions package et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Instructions package et
import
Plan
• La notion de package, logique et physique
• L’instruction package et le nom de la classe
• Utiliser une classe d’un autre package, import, exceptions
• L’utilisation des classes standards
Java, avancé (examen 1Z0-804) alphorm.com™©
La notion de package
• Un package est :
Un espace de nommage
Une limite de visibilité
• Un répertoire
Les packages sont organisés en hiérarchies
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les packages sont organisés en hiérarchies
L’instruction package
• En première ligne du fichier de la classe
• « package » suivi d’un nom de package
• Attention, le nom de package peut être composé
• La classe (ou les classes) sont réputées être dans le package
Java, avancé (examen 1Z0-804) alphorm.com™©
L’instruction import
• Pour utiliser une classe d’un autre package :
Écrire le nom complet de la classe
Ou bien utiliser « import » <nom_de_la_classe>, puis le nom court
• Il est possible d’écrire un « import » pour toutes les classes d’un
package
Java, avancé (examen 1Z0-804) alphorm.com™©
package
• Les classes concernées doivent être « public »
• Les classes imbriquées ont un nom composé avec le nom de la classe
englobante
L’utilisation des classes standard
• Toutes les classes de l’API Java sont dans des packages
• Il est peu recommandé de ne pas utiliser de package
Voire interdit lors de la livraison sur certains serveurs
• Les import n’ont pas à être faits pour
Java, avancé (examen 1Z0-804) alphorm.com™©
Les classes de java.lang
Les classes du même package
Ce qu’on a couvert
• La notion de package, logique et physique
• L’instruction package et le nom de la classe
• Utiliser une classe d’un autre package, import, exceptions
• L’utilisation des classes standards
Java, avancé (examen 1Z0-804) alphorm.com™©
Encapsulation et
polymorphisme
Encapsulation pour la
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Encapsulation pour la
conception de classes
Plan
• Principe de l’encapsulation
• L’encapsulation dans les classes
• L’encapsulation dans les packages
Java, avancé (examen 1Z0-804) alphorm.com™©
Principe de l’encapsulation
• L’encapsulation est le fait de masquer l’implémentation et de fournir
une interface
• Les bénéfices attendus :
Sécurité de l’état des objets
Maintenance facile car seuls les services sont utilisés
Java, avancé (examen 1Z0-804) alphorm.com™©
Maintenance facile car seuls les services sont utilisés
Simplification de l’interface
L’encapsulation dans les classes
• Les classes masquent leurs implémentation :
Le corps des méthodes
Certaines méthodes
Les champs de données
• Les classes proposent une interface :
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les classes proposent une interface :
Les méthodes non privées
Les constructeurs (non privés)
L’encapsulation dans les packages
• Les classes peuvent être publiques ou non
• La classe publique seule peut être utilisée de l’extérieur de son package
• Les classes non publiques servent au fonctionnement du package
• Un package est une unité de codage, de test, de livraison
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Principe de l’encapsulation
• L’encapsulation dans les classes
• L’encapsulation dans les packages
Java, avancé (examen 1Z0-804) alphorm.com™©
Encapsulation et
polymorphisme
Modélisation de problèmes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Modélisation de problèmes
métier à l’aide de classes
Java
Plan
• Modélisation des besoins
• Modélisation d’analyse
• Modélisation de conception
• Traduction en Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Modélisation des besoins
• Les besoins sont exprimés par du texte
Trop peu formel
• La représentation classique des exigences passe par les usecase
• Une approche NON orientée objets
Java, avancé (examen 1Z0-804) alphorm.com™©
Modélisation de l’analyse
• La description des problèmes
• En terme d’objets, sous la forme de classes
Les classes ne montrent pas les méthodes
• En terme de traitement, sous la forme de séquences
Java, avancé (examen 1Z0-804) alphorm.com™©
• Appelé aussi modèle du domaine
Modélisation de conception
• La description de la solution
Liée à Java et à sa technologie
• Les classes sont entités, contrôleurs, frontières …
• Les séquences sont les mêmes que précédemment, mais plus détaillées
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les classes sont équipées des méthodes correspondant aux séquences
Traduction en Java
• Chaque classe a son équivalent en Java
• Accent mis sur les classes entités
• Classes applicatives liées à l’architecture choisie
• Génération automatique possible en Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Modélisation des besoins
• Modélisation d’analyse
• Modélisation de conception
• Traduction en Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Encapsulation et
polymorphisme
Caractère non mutable
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Caractère non mutable
Plan
• Briser l’encapsulation
• Empêcher la modification des données internes
• String est une classe non mutable
Java, avancé (examen 1Z0-804) alphorm.com™©
Briser l’encapsulation
• L’encapsulation est mise en place pour protéger un objet
Pas de champs de données publiques
Limiter les getters/setters
Passer par des méthodes
• Il n’y a pas de « const » en Java, donc on n’interdit pas la modification
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il n’y a pas de « const » en Java, donc on n’interdit pas la modification
Lorsqu’on passe un objet en paramètre
Lorsqu’on retourne un objet
Empêcher la modification
• Une classe non mutable (immutable value) est une classe qui ne permet
la modification
Constructeur
Pas de setters
Pas de méthode modifiant l’objet
Java, avancé (examen 1Z0-804) alphorm.com™©
Pas de méthode modifiant l’objet
• Une méthode peut « faire comme si » elle modifiait
Mais en fait elle retourne un nouvel objet
String est une classe non mutable
• Il est impossible de modifier une String en Java
• Toutes les méthodes et tous les opérateur re-crée un objet
• Transparent, intuitif, mais peu performant
• Donc on peut exposer une String de son propre objet, l’utilisateur ne
peut pas modifier la donnée réelle !
Java, avancé (examen 1Z0-804) alphorm.com™©
peut pas modifier la donnée réelle !
Ce qu’on a couvert
• Briser l’encapsulation
• Empêcher la modification des données internes
• String est une classe non mutable
Java, avancé (examen 1Z0-804) alphorm.com™©
Encapsulation et
polymorphisme
Sous-classement
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Sous-classement
Plan
• La relation de généralisation-spécialisation
• Pourquoi utiliser des sous-classes
Java, avancé (examen 1Z0-804) alphorm.com™©
La relation de généralisation-spécialisation
• La super-classe est un type général, la sous-classe un sous-type
• Une référence vers la super-classe peut pointer vers un objet de la
sous-classe
• Toutes les caractéristiques de la super-classe sont héritées par la sous-
classe
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les membres privés de la super-classe ne sont jamais visibles de la
sous-classe
Pourquoi utiliser des sous-classes ?
• Pour manipuler des objets en tant que type très général
Stabilité d’un code qui utilise des abstractions
• Pour factoriser des caractéristiques communes
Les sous-classes héritent des caractéristiques du parent
Pour spécialiser des types
Java, avancé (examen 1Z0-804) alphorm.com™©
• Pour spécialiser des types
Chaque sous-classe peut apporter une variante dans le comportement et
dans le contenu
Ce qu’on a couvert
• La relation de généralisation-spécialisation
• Pourquoi utiliser des sous-classes
Java, avancé (examen 1Z0-804) alphorm.com™©
Encapsulation et
polymorphisme
Surcharge de méthodes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Surcharge de méthodes
Plan
• Ecrire plusieurs méthodes même nom dans une classe
• Les conséquences de la surcharge
Java, avancé (examen 1Z0-804) alphorm.com™©
Ecrire plusieurs méthodes même nom
• Le même nom de méthode peut être utilisé
• Les paramètres sont différents
• Le type de retour est indifférent, mais ne suffit pas
• A l’appel, le compilateur branche la bonne méthode
Java, avancé (examen 1Z0-804) alphorm.com™©
• La surcharge est résolue à travers les niveaux d’héritage
Les conséquences de la surcharge
• Le compilateur résout l’appel de façon transparente en fonction des
arguments fournis
• Il n’y a pas de complexité syntaxique due à des inventions de nouveaux
noms à chaque type de paramètres
• Il n’y a pas de découverte à l’exécution, tout est compilé
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Ecrire plusieurs méthodes même nom dans une classe
• Les conséquences de la surcharge
Java, avancé (examen 1Z0-804) alphorm.com™©
Encapsulation et
polymorphisme
Méthode à nombre variable
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Méthode à nombre variable
d’arguments
Plan
• Utilisation d’une méthode à nombre variable d’arguments
• Déclaration et codage
Java, avancé (examen 1Z0-804) alphorm.com™©
Utilisation d’une méthode « variadic »
• Pour un traitement qui sera le même sur chacun des arguments
• Equivalent à n surcharges de la méthode
• Syntaxiquement proche du passage d’un tableau d’arguments
Java, avancé (examen 1Z0-804) alphorm.com™©
Déclaration et codage
• Les arguments en nombre variable, c’est un tableau
• On peut utiliser length et les accès aléatoires
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Utilisation d’une méthode à nombre variable d’arguments
• Déclaration et codage
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes Java
Modificateurs public,
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Modificateurs public,
protected et private
Plan
• Impact de l’absence de modificateur
• Influence du modificateur private
• Influence du modificateur public
• Influence du modificateur protected
• Remarque sur le modificateur public de class
Java, avancé (examen 1Z0-804) alphorm.com™©
• Remarque sur le modificateur public de class
Impact de l’absence de modificateur
• Un membre sans visibilité est accessible du package entier
• Cela définit une sorte de voisinage
• Les classes sans visibilité elles-mêmes suivent la même règle
Java, avancé (examen 1Z0-804) alphorm.com™©
Influence du modificateur private
• N’existe que sur les membres
• Un membre privé n’est accessible que de l’intérieur de la classe
• Attention, un objet d’une classe donnée peut accéder aux données
privées d’un objet de la même classe
• Typiquement utilisé pour les attributs
Java, avancé (examen 1Z0-804) alphorm.com™©
• Typiquement utilisé pour les attributs
Influence du modificateur public
• Un membre publique est accessible de partout
• Typiquement utilisé pour des méthodes
• Dangereux pour les attributs
Les attributs participent à l’état de l’objet
Java, avancé (examen 1Z0-804) alphorm.com™©
• N’est intéressant que pour les classes elles-mêmes publiques
Influence du modificateur protected
• Un membre protégé est accessible
De toutes les classes du package de la classe qui contient le membre
Des classes filles, y compris celles qui sont dans d’autres packages
• A utiliser plutôt sur des méthodes d’accès
Il est très simple de dériver une classe en Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Il est très simple de dériver une classe en Java
Je ne maîtrise pas qui dérive ma classe, et ce qu’il/elle en fait
Remarque sur « public » pour « class »
• Une classe n’est connue par défaut que de son package
• Si la classe doit être accessible de l’extérieur de son package, elle doit
être marquée « public »
• Une classe publique aura certainement des membres publiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Impact de l’absence de modificateur
• Influence du modificateur private
• Influence du modificateur public
• Influence du modificateur protected
• Remarque sur le modificateur public de class
Java, avancé (examen 1Z0-804) alphorm.com™©
• Remarque sur le modificateur public de class
Conception de classes Java
Remplacement de
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Remplacement de
méthodes
Plan
• La spécialisation de classes
• La redéfinition de méthode
Java, avancé (examen 1Z0-804) alphorm.com™©
La spécialisation de classes
• Permet d’hériter de la totalité de la super-classe
• Une sous-classe peut posséder en plus attributs et méthodes
• Il n’est pas possible de faire disparaître des membres hérités
• Il est possible de spécialiser un ou plusieurs comportements
Java, avancé (examen 1Z0-804) alphorm.com™©
La redéfinition de méthodes
• C’est refaire la méthode dans la sous-classe alors qu’elle existe dans la
super-classe
• Le prototype de la méthode est identique
Le corps de la méthode est différent
• On peut ajouter l’annotation @Override
Java, avancé (examen 1Z0-804) alphorm.com™©
• On peut ajouter l’annotation @Override
Ce qu’on a couvert
• La spécialisation de classes
• La redéfinition de méthode
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes Java
Surcharge de constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Surcharge de constructeurs
Plan
• Le rôle des constructeurs
• Utiliser les paramètres des constructeurs
• Surcharger les constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Le rôle des constructeurs
• Initialiser les champs de données
• Mettre l’objet dans un état correct
• Assurer que l’on peut travailler avec l’objet
Java, avancé (examen 1Z0-804) alphorm.com™©
Utiliser les paramètres des constructeurs
• Les paramètres sont utilisés pour initialiser les attributs
• Les arguments sont fournis par l’utilisateur
• Il n’y a pas de paramètres optionnels en Java
Donc la signature du constructeur est contraignante pour l’appelant
Java, avancé (examen 1Z0-804) alphorm.com™©
Surcharger les constructeurs
• Il est possible de déclarer plusieurs constructeurs qui se distinguent de
par leurs signatures
• Chaque constructeur correspond à une façon de créer l’objet
• Le constructeur sans paramètre est le constructeur par défaut
Il n’est plus généré lorsqu’on écrit un constructeur nous-même
Java, avancé (examen 1Z0-804) alphorm.com™©
Il n’est plus généré lorsqu’on écrit un constructeur nous-même
Pas forcément nécessaire de le réécrire
• Il est possible de chaîner les constructeurs entre eux
Pour éviter les redondances de code
Ce qu’on a couvert
• Le rôle des constructeurs
• Utiliser les paramètres des constructeurs
• Surcharger les constructeurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes Java
Opérateur instanceof
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Opérateur instanceof
Plan
• Un objet est d’une classe et une seule
• Détecter le type d’un objet
• Utiliser la détection d’un ancêtre du type
Java, avancé (examen 1Z0-804) alphorm.com™©
Un objet est d’une classe et une seule
• Un objet a forcément une classe
• Récupérer le descripteur : getClass()
Eventuellement possible d’exploiter la description
• L’objet est conforme à sa classe
Java, avancé (examen 1Z0-804) alphorm.com™©
Détecter le type d’un objet
• Avec instanceOf, il est possible de vérifier le type de l’objet
• Avec getClass(), on découvre le type de l’objet
• L’opérateur instanceof implique une logique conditionnelle
• Permettrait de détecter le type concret de l’objet et de choisir le
traitement adapté à ce type
Java, avancé (examen 1Z0-804) alphorm.com™©
traitement adapté à ce type
Utilisation dénoncée
• Permet surtout de se protéger avant un transtypage
Utiliser la détection d’un ancêtre
• L’opérateur instanceof teste les ancêtres
Super-classes
Interfaces implémentées
• En fonction de l’interface, il est possible de choisir un traitement
Conception par capacité
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception par capacité
Ce qu’on a couvert
• Un objet est d’une classe et une seule
• Détecter le type d’un objet
• Utiliser la détection d’un ancêtre du type
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes Java
Appel de méthode virtuelle
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Appel de méthode virtuelle
Et polymorphisme
Plan
• Mise en place du polymorphisme
• Intérêt du polymorphisme
• Dangers du polymorphisme
Java, avancé (examen 1Z0-804) alphorm.com™©
Mise en place du polymorphisme
• Il faut une généralisation-spécialisation : extends
• Il faut une redéfinition : réécriture d’une méthode dans la sous-classe
• Non indispensable : @Override, une annotation qui permet de faire
vérifier la redéfinition par le compilateur
Java, avancé (examen 1Z0-804) alphorm.com™©
Intérêt du polymorphisme
• L’usage du polymorphisme permet de :
Écrire un code simple, qui utilise le type généralisé
Déclencher des méthodes qui ne seront connues qu’à l’exécution
Créer des points de variation dans le système
Mettre en place des points d’extensibilité du système
Java, avancé (examen 1Z0-804) alphorm.com™©
Mettre en place des points d’extensibilité du système
• A l’opposé du polymorphisme : tester le type des objets afin de
déclencher un code spécifique sur chaque
Dangers du polymorphisme
• Il est impossible de savoir, à la lecture, quelle est la méthode qui sera
déclenchée
Tout dépend de l’objet qui sera créé et placé en face de l’appel
• Le traitement sollicité peut être une surprise (non conforme, levée
d’exception…)
Java, avancé (examen 1Z0-804) alphorm.com™©
Le principe de substitution voudrait que les appels soient correctement
implémentés, mais ce principe est souvent violé
Ce qu’on a couvert
• Mise en place du polymorphisme
• Intérêt du polymorphisme
• Dangers du polymorphisme
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes Java
Transtypage de références
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Transtypage de références
d’objets
Plan
• Syntaxe du transtypage
• Le danger du transtypage
• Utilisation inévitable du transtypage
Java, avancé (examen 1Z0-804) alphorm.com™©
Syntaxe du transtypage
• Pour forcer le compilateur à accepter un appel
• Le type de la référence à utiliser ne fournit pas la méthode
Mais vous ‘savez’ que l’objet connaît la méthode
• Mettre le type à obtenir entre parenthèses
Java, avancé (examen 1Z0-804) alphorm.com™©
Le compilateur est forcé d’accepter l’appel, mais il faudra que ce « cast » soit
vrai à l’exécution
Le danger du transtypage
• Le transtypage fait taire le compilateur
• Mais ne préjuge rien à l’exécution
Si l’objet n’est pas celui qui est attendu, problème !
ClassCastException : arrêt du programme par levée d’exception
Java, avancé (examen 1Z0-804) alphorm.com™©
Utilisation inévitable du transtypage
• Lorsqu’on utilise un framework
Il faut dériver des classes, redéfinir des méthodes
La redéfinition suppose une signature identique
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Syntaxe du transtypage
• Le danger du transtypage
• Utilisation inévitable du transtypage
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes
avancée
Classes abstraites et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Classes abstraites et
généralisation de type
Plan
• La mise en place de le généralisation
• L’intérêt d’une classe abstraite
• Les méthodes abstraites
Java, avancé (examen 1Z0-804) alphorm.com™©
La mise en place de la généralisation
• La relation de généralisation s’utilise pour :
Faire apparaître un super-type, pour avoir du code stable
Factoriser des membres
Spécialiser des comportements
• La super-classe ne doit pas forcément être instanciée : « abstract »
Java, avancé (examen 1Z0-804) alphorm.com™©
• La super-classe ne doit pas forcément être instanciée : « abstract »
• Empêcher l’instanciation peut se faire :
En rendant les constructeurs privés : impossible de créer un objet de cette
classe de l’extérieur de la classe
En rendant la classe abstraite : la classe doit être dérivée
L’intérêt d’une classe abstraite
• Faire apparaître une généralisation
• Mais la super-classe n’est là que pour factoriser des membres
On ne veut pas d’objet de ce type
• Les exemples de classes abstraites dans la vie réelle sont nombreux
Java, avancé (examen 1Z0-804) alphorm.com™©
Taxonomie : les noms d’espèces, de genres, de familles …
• Une classe abstraite possède donc
Des attributs
Des méthodes
Des constructeurs
Les méthodes abstraites
• Une méthode abstraite ne contient pas de corps
Mot-clé « abstract »
• Ne peuvent exister que dans des classes abstraites
• Seront redéfinies dans les classes filles
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• La mise en place de le généralisation
• L’intérêt d’une classe abstraite
• Les méthodes abstraites
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes
avancée
Modificateurs static et final
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Modificateurs static et final
Plan
• Modificateur static
• Modificateur final
• Les champs public static final
Java, avancé (examen 1Z0-804) alphorm.com™©
Modificateur static
• Le mot clé « static » s’utilise sur un membre
• Un champ « static » est une donnée partagée par tous les objets de la
classe
• Une méthode « static » est une méthode qui est appelée sur la classe
elle-même, et non sur un objet
Java, avancé (examen 1Z0-804) alphorm.com™©
• Une méthode « static » ne peut accéder qu’aux champs « static »
• Les champs « static » sont initialisés lors du chargement de la classe
Modificateur final
• Un champ « final » ne supporte pas d’affectation
Il est initialisé à la déclaration
Ou bien dans un constructeur
• Une méthode « final » ne peut pas être redéfinie
Java, avancé (examen 1Z0-804) alphorm.com™©
Les champs public static final
• En général, un champ ne doit pas être public
• S’il est final, ce n’est pas dangereux
Ne fait pas partie de l’état de l’objet
• Math.PI : PI est public static et final
Java, avancé (examen 1Z0-804) alphorm.com™©
Constante publique
Ce qu’on a couvert
• Modificateur static
• Modificateur final
• Les champs public static final
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes
avancée
Meilleures pratiques pour
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Meilleures pratiques pour
les modificateurs de champs
Plan
• Les champs de donnée
• Les services des classes publiques
• Les méthodes de classes de package
• Cas particulier des classes à dériver
Java, avancé (examen 1Z0-804) alphorm.com™©
Les champs de donnée
• En général les champs de donnée sont privés
• Car ils font partie de l’état de l’objet
• Les champs constants peuvent être publiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Les services des classes publiques
• Une classe publique est une façade de son package
• Les méthodes d’une classe peuvent être publiques
• Mais certaines méthodes peuvent rester inaccessibles de l’extérieur
• A priori, si rien ne justifie qu’elle soit publique, une méthode reste
privée
Java, avancé (examen 1Z0-804) alphorm.com™©
privée
Les méthodes des classes de package
• A l’intérieur d’un package, une classe a des méthodes au mieux de
visibilité de package (par défaut)
• Les attributs restent privés, mais les services peuvent être rendus aux
autres classes du package
• Les méthodes qui ne sont utilisées qu’à l’intérieur du package restent
privées
Java, avancé (examen 1Z0-804) alphorm.com™©
privées
Cas particulier des classes à dériver
• Pour les classes qui doivent être dérivées, penser à mettre en protégé
les méthodes utilisables par des sous-classes
• Utile pour les sous-classes qui ne seront pas dans le même package
Dans le même package, la visibilité par défaut suffit
• Faire attention aux attributs protégés, qui seront modifiés sans contrôle
Java, avancé (examen 1Z0-804) alphorm.com™©
• Faire attention aux attributs protégés, qui seront modifiés sans contrôle
par le code des sous-classes
Ce qu’on a couvert
• Les champs de donnée
• Les services des classes publiques
• Les méthodes de classes de package
• Cas particulier des classes à dériver
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes
avancée
Implémenter le modèle
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Implémenter le modèle
Singleton
Plan
• Utiliser un champ « static »
• Utiliser une méthode « static »
• Le modèle Singleton simple
• Le modèle thread-safe
• Le modèle avec disposition
Java, avancé (examen 1Z0-804) alphorm.com™©
• Le modèle avec disposition
Utiliser un champ static
• Un champ « static » correspond à une donnée partagée entre tous les
objets de la classe
Pas besoin de créer un objet pour utiliser ou évaluer cette donnée
• En général, d’une visibilité restreinte, de façon à ce que les autres
classes ne puissent pas y accéder librement
Java, avancé (examen 1Z0-804) alphorm.com™©
Utiliser une méthode static
• Une méthode qui n’accède qu’aux champs « static »
• Une méthode qui est appelée sur la classe
• Ne nécessite pas la création préalable d’un objet
Java, avancé (examen 1Z0-804) alphorm.com™©
Le modèle Singleton simple
• Un champ « static », une méthode « static » qui créé l’instance ou bien
qui la retourne si elle est déjà créée
Java, avancé (examen 1Z0-804) alphorm.com™©
Le modèle thread-safe
• Le code précédent n’est pas protégé contre des accès simultanés de
plusieurs thread en même temps
• Créer une section critique ? Mais pas la méthode entière
• Faire créer l’instance à l’initialisation ? Mais plus de création à la
demande
Java, avancé (examen 1Z0-804) alphorm.com™©
Le modèle avec disposition
• Il faut savoir se débarrasser de l’instance unique
A priori seulement après la fin du main
• Créer une méthode Reset qui élimine l’instance
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Utiliser un champ « static »
• Utiliser une méthode « static »
• Le modèle Singleton simple
• Le modèle thread-safe
• Le modèle avec disposition
Java, avancé (examen 1Z0-804) alphorm.com™©
• Le modèle avec disposition
Conception de classes
avancée
Conception de classes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Conception de classes
abstraites
Plan
• Pourquoi créer des classes abstraites
• Rôle des classes abstraites
• Algorithme utilisant des méthodes abstraites
Java, avancé (examen 1Z0-804) alphorm.com™©
Pourquoi créer des classes abstraites
• Pour factoriser du code
Éviter les redondances
• Eviter que l’utilisateur ne crée des objets à partir de classes incomplètes
• Créer des modèles symétriques plus simples
Java, avancé (examen 1Z0-804) alphorm.com™©
Rôle des classes abstraites
• Factoriser du code pour de futures classes dérivées
• Représenter des comportements génériques
• Réifier des algorithmes
Java, avancé (examen 1Z0-804) alphorm.com™©
Algorithme utilisant des méthodes abstraites
• Une classe mère abstraite
• Elle contient un squelette d’algorithme
• Celui-ci appelle des méthodes abstraites
• Les classes filles implémentent les parties
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Pourquoi créer des classes abstraites
• Rôle des classes abstraites
• Algorithme utilisant des méthodes abstraites
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes
avancée
Classes imbriquées
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Classes imbriquées
Plan
• La syntaxe des classes imbriquées
• Intérêt des classes imbriquées
Java, avancé (examen 1Z0-804) alphorm.com™©
Syntaxe des classes imbriquées
• Ecrire une classe dans une classe
• Le nom de la classe est masquée
• Le nom des fichiers est particulier
Java, avancé (examen 1Z0-804) alphorm.com™©
Intérêt des classes imbriquées
• Accès aux membres privés de la classe englobante
• Imbrication des objets eux-mêmes
• Cas particulier des « static class »
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• La syntaxe des classes imbriquées
• Intérêt des classes imbriquées
Java, avancé (examen 1Z0-804) alphorm.com™©
Conception de classes
avancée
Types d’énumération
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Types d’énumération
Plan
• Une classe dont on veut limiter le nombre d’instance et leurs valeurs
• Le type « enum »
Java, avancé (examen 1Z0-804) alphorm.com™©
Une classe à valeurs limitées
• On ne maîtrise pas les instances d’une classe
• Les types standards n’ont pas de limite non plus
• Il est possible de créer les futures valeurs
Limiter les instances
Java, avancé (examen 1Z0-804) alphorm.com™©
Beaucoup de travail
Le type enum
• Un énuméré est un type
• Dont on énumère toutes les valeurs
• Qui peut posséder des méthodes
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Une classe dont on veut limiter le nombre d’instance et leurs valeurs
• Le type « enum »
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage et interfaces
Interfaces Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Interfaces Java
Plan
• Principe de l’interface
• Déclaration d’une interface
• Implémentation d’une interface
• Héritage entre interfaces
Java, avancé (examen 1Z0-804) alphorm.com™©
Principe de l’interface
• Une interface définit un type utilisateur
• Comme une classe, mais sans implémentation
• Peut posséder des déclarations de méthodes
Abstract public
Java, avancé (examen 1Z0-804) alphorm.com™©
• Peut posséder des déclarations de constantes
Public static final
• Sert à déclarer des services sans les implémenter
• Doit être implémentée par une classe
Déclaration d’une interface
• Mot clé « interface » à la place de « class »
• Dans son propre fichier
• Peut être « public » ou pas
Java, avancé (examen 1Z0-804) alphorm.com™©
Implémenter une interface
• Il faut qu’une classe implémente l’interface
• Mot clé « implements »
• Obligation pour la classe de fournir les méthodes prévues
Ou bien cette classe doit être marquée « abstract »
Java, avancé (examen 1Z0-804) alphorm.com™©
• Très proche de la notion d’héritage, mais on n’hérite de rien, si ce n’est
de l’obligation de tout implémenter
Héritage entre interfaces
• Une interface peut hériter d’une autre
• Cela sert à enrichir les interfaces en terme de livraisons successives
• Une interface peut hériter de plusieurs interfaces
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Principe de l’interface
• Déclaration d’une interface
• Implémentation d’une interface
• Héritage entre interfaces
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage et interfaces
Les types d’héritages
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les types d’héritages
Plan
• Les différents types d’héritages
• L’héritages d’implémentation
• L’héritage d’interfaces
Java, avancé (examen 1Z0-804) alphorm.com™©
Les différents types d’héritages
• On peut hériter pour plusieurs raisons
• Pour récupérer une implémentation existante
Héritage d’implémentation
• Pour proposer les mêmes services qu’un ancêtre
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage d’interfaces
L’héritage d’implémentation
• On hérite pour ne pas recoder les méthodes, les champs
• Moins de travail à faire, mais attention à la pertinence
• Suit une logique ‘métier’
• Typiquement réalisé en Java avec « extends »
Java, avancé (examen 1Z0-804) alphorm.com™©
L’héritage d’interfaces
• On hérite pour proposer les mêmes services vis-à-vis de l’extérieur
• Tout le travail est à faire, car on ne récupère pas une implémentation
• Suit une logique ‘service’
• Typiquement réalisé avec « implements »
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Les différents types d’héritages
• L’héritages d’implémentation
• L’héritage d’interfaces
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage et interfaces
Composition d’objets et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Composition d’objets et
délégation de méthode
Plan
• Héritage d’implémentation
• Composition
• Problème posé par la délégation
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage d’implémentation
• L’héritage pour des raisons d’implémentation peut
Ne pas être clair
Ne pas respecter le test is-a ou le test 100%
• La relation d’héritage est extrêmement forte
Java, avancé (examen 1Z0-804) alphorm.com™©
La composition
• La composition est l’association de contenance entre deux objets
• Cela permet de réutiliser un objet
• Il faut réécrire les méthodes
• Clair dans son intention
Java, avancé (examen 1Z0-804) alphorm.com™©
Problème posé par la délégation
• Lorsqu’une association est établie entre 2 classes
• Il y a 2 objets
• Il faut gérer ces 2 objets à la place d’un seul
• Le fait de rappeler une méthode d’un objet à partir de l’autre est la
délégation
Java, avancé (examen 1Z0-804) alphorm.com™©
délégation
Ce qu’on a couvert
• Héritage d’implémentation
• Composition
• Problème posé par la délégation
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage et interfaces
Implémentation de plusieurs
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Implémentation de plusieurs
interfaces
Plan
• Une classe peut implémenter plusieurs interfaces
• Les collisions
Java, avancé (examen 1Z0-804) alphorm.com™©
Une classe implémente plusieurs interfaces
• Utiliser « implements » une seule fois, avec une liste des interfaces
• Il faut implémenter toutes les méthodes prévues par les interfaces
Java, avancé (examen 1Z0-804) alphorm.com™©
Les collisions
• Les collisions de champs de ne peuvent pas exister
• Les méthodes seront sous la forme d’une seule implémentation
• Seul cas difficile : la même méthode, mais avec un retour différent
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Une classe peut implémenter plusieurs interfaces
• Les collisions
Java, avancé (examen 1Z0-804) alphorm.com™©
Héritage et interfaces
Le modèle de conception
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Le modèle de conception
DAO
Plan
• A quoi sert un Data Access Object
• Implémentation du modèle
Java, avancé (examen 1Z0-804) alphorm.com™©
A quoi sert le modèle DAO
• Isoler les accès aux données persistantes
• Eviter les impacts d’un changement de mode de stockage
• Regrouper les accès aux données dans des classes dédiées
Java, avancé (examen 1Z0-804) alphorm.com™©
Implémentation du modèle
• Un point d’accès au modèle DAO
• Des interfaces représentant les accès à chaque type de données
• Les implémentations de ces accès
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• A quoi sert un Data Access Object
• Implémentation du modèle
Java, avancé (examen 1Z0-804) alphorm.com™©
Types génériques et
collections
Classes génériques et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Classes génériques et
paramètres de type
Plan
• Définition d’une classe générique
• Utilisation d’une classe générique
Java, avancé (examen 1Z0-804) alphorm.com™©
Définition d’une classe générique
• Une classe « patron », qui est paramétrable par un type
• Définit une famille de classes, qui seront générées à la demande
• Ecrite une seule fois, utilisée plusieurs fois
• Très utile en particulier pour les conteneurs
Java, avancé (examen 1Z0-804) alphorm.com™©
• Alternative au code sur Object
Utilisation d’une classe générique
• Définir une classe générique
Syntaxe du C++ « Classe<T> »
Utiliser le symbole choisi T dans le code
• A l’appel, remplacer T par un type classe réel
Syntaxe Classe<Integer>
Java, avancé (examen 1Z0-804) alphorm.com™©
Syntaxe Classe<Integer>
Ce qu’on a couvert
• Définition d’une classe générique
• Utilisation d’une classe générique
Java, avancé (examen 1Z0-804) alphorm.com™©
Types génériques et
collections
Inférence de type losange
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Inférence de type losange
Plan
• Définition de l’inférence de type
• Comment alléger l’écriture
Java, avancé (examen 1Z0-804) alphorm.com™©
Définition de l’inférence de type
• L’inférence de type est réalisée par le compilateur
• Il va placer le bon type en fonction de ce qui est attendu
• Tout est compilé, donc pas de surprises à l’exécution
Java, avancé (examen 1Z0-804) alphorm.com™©
Comment alléger l’écriture
• Avec l’inférence de type, on évite de répéter du code
• Ecriture plus simple
• Mais il faut spécifier quand même les « <> »
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Définition de l’inférence de type
• Comment alléger l’écriture
Java, avancé (examen 1Z0-804) alphorm.com™©
Types génériques et
collections
Types génériques et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Types génériques et
collections
Plan
• Les collections sans généricité
• Les collections modernes, utilisant la généricité
Java, avancé (examen 1Z0-804) alphorm.com™©
Les collections sans généricité
• Collections manipulant des Object
• Code qui compile toujours
Mais risques à l’exécution
Perte de types, il faut forcer les types
Autre possibilité : copier-coller !!
Java, avancé (examen 1Z0-804) alphorm.com™©
• Autre possibilité : copier-coller !!
Les collections modernes, avec généricité
• La collection s’applique sur un type générique
• Choisir le type au moment de la création de l’objet
• Il peut y avoir plusieurs types
• Collection typée
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Les collections sans généricité
• Les collections modernes, utilisant la généricité
Java, avancé (examen 1Z0-804) alphorm.com™©
Types génériques et
collections
Les objets List et Map
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les objets List et Map
Plan
• L’interface List
• L’interface Map
Java, avancé (examen 1Z0-804) alphorm.com™©
L’interface List
• Les objets de classes implémentant List
Conservent l’ordre d’insertion
Proposent un accès aléatoire
• L’interface List est une sous-interface de Collection
Plusieurs classes implémentent l’interface List
Java, avancé (examen 1Z0-804) alphorm.com™©
• Plusieurs classes implémentent l’interface List
ArrayList
LinkedList
L’interface Map
• Les objets de classes implémentant Map
Utilisent une clé pour ranger les valeurs
Proposent un accès aléatoire, utilisant la clé
• L’interface Map prend 2 paramètres génériques obligatoirement
Plusieurs classes implémentent l’interface Map
Java, avancé (examen 1Z0-804) alphorm.com™©
• Plusieurs classes implémentent l’interface Map
HashMap
TreeMap
Ce qu’on a couvert
• L’interface List
• L’interface Map
Java, avancé (examen 1Z0-804) alphorm.com™©
Types génériques et
collections
Pile avec Deque
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Pile avec Deque
Plan
• L’interface Deque
• Réaliser une pile conforme
Java, avancé (examen 1Z0-804) alphorm.com™©
L’interface Deque
• Sous-interface de Queue, elle-même sous-interface de Collection
• Utilisable des deux côtés
• Méthodes addFirst, addLast, …
• Permet d’implémenter FIFO, et LIFO
Java, avancé (examen 1Z0-804) alphorm.com™©
Réaliser une pile avec Deque
• En utilisant les méthodes
addFirst, removeFirst, peekFirst
• Pour implémenter les méthodes
De la Pile : push, pop, peek
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• L’interface Deque
• Réaliser une pile conforme
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitement des chaînes
Manipulation avec
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Manipulation avec
StringBuilder et StringBuffer
Plan
• String, StringBuffer et StringBuilder
• Les méthodes de StringBuilder
Java, avancé (examen 1Z0-804) alphorm.com™©
String, StringBuffer et StringBuilder
• La classe String est ‘immutable value’
Les méthodes de String ne modifie pas la chaîne en place
• StringBuffer est synchronisée
Utilisée pour un buffer, mais les opérations sont thread-safe
StringBuilder n’est pas synchronisée et donc souhaitable dans un
Java, avancé (examen 1Z0-804) alphorm.com™©
• StringBuilder n’est pas synchronisée et donc souhaitable dans un
contexte non multithread
Doit être préférée à la précédente, et offre les mêmes méthodes
Les méthodes de StringBuilder
• Constructeurs :
Par défaut
Avec un CharSequence en paramètre
Avec une capacité
A partir d’une String
Java, avancé (examen 1Z0-804) alphorm.com™©
A partir d’une String
• Méthodes : append, insert
• Redimensionnement automatique
Ce qu’on a couvert
• String, StringBuffer et StringBuilder
• Les méthodes de StringBuilder
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitement des chaînes
Principales méthodes liées
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Principales méthodes liées
aux chaînes de caractères
Plan
• La classe String, ses méthodes et les opérateurs
• La méthode toString
• Les classes StringTokenizer et Scanner
• Les classes StringBuilder et StringBuffer
• Les expressions régulières
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les expressions régulières
La classe String, ses méthodes et opérateurs
• La classe String représente une chaîne non modifiable
• Toutes ses méthodes font des modifications créent un nouvel objet
• Des opérateurs sont disponibles sur String
• L’initialisation littérale de String est possible
Java, avancé (examen 1Z0-804) alphorm.com™©
• Un très grand nombre de méthodes
La méthode toString
• Disponible sur tout objet Java
• Implémenté par défaut sur Object
• Redéfinissable
• Produit une chaîne qui doit représenter l’objet
Java, avancé (examen 1Z0-804) alphorm.com™©
Les classes StringTokenizer et Scanner
• Utiles pour parcourir une chaîne de caractères
• Fonctionne sur le mode de l’énumération
• StringTokenizer est plus ancien et plus limité que Scanner
Java, avancé (examen 1Z0-804) alphorm.com™©
Les classes StringBuffer et StringBuilder
• La représentation des buffer
• Chaînes de caractères modifiables
• Aucun rapport avec String, utiliser toString pour obtenir la chaîne
Java, avancé (examen 1Z0-804) alphorm.com™©
Les expressions régulières
• Avec String, … on peut appliquer les expressions régulières
• Représente un motif
A chercher dans un texte
A substituer dans un texte
Pour découper des chaînes
Java, avancé (examen 1Z0-804) alphorm.com™©
Pour découper des chaînes
Pour filtrer
Ce qu’on a couvert
• La classe String, ses méthodes et les opérateurs
• La méthode toString
• Les classes StringTokenizer et Scanner
• Les classes StringBuilder et StringBuffer
• Les expressions régulières
Java, avancé (examen 1Z0-804) alphorm.com™©
• Les expressions régulières
Traitement des chaînes
Analyse de texte dans Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Analyse de texte dans Java
Plan
• Parcourir une chaîne avec StringTokenizer
• Analyser un texte : les mots, les lettres
Java, avancé (examen 1Z0-804) alphorm.com™©
Parcourir une chaîne avec StringTokenizer
• Créer un objet StringTokenizer
• Directement connaître le nombre de ‘token’ : countTokens()
• Parcourir : hasMoreToken(), nextToken()
Java, avancé (examen 1Z0-804) alphorm.com™©
Analyser un texte
• Compter les mots : utiliser StringTokenizer
• Compter les lettres : parcourir la chaîne
• Intérêt : faire de la cryptanalyse ;)
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Parcourir une chaîne avec StringTokenizer
• Analyser un texte : les mots, les lettres
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitement des chaînes
Traitement des entrées avec
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Traitement des entrées avec
Scanner
Plan
• Entrée d’un scanner
• Manipulation par un scanner
Java, avancé (examen 1Z0-804) alphorm.com™©
Entrée d’un scanner
• Un scanner peut être construit à partir de
Un fichier
Un flux
Une chaîne
Une source de caractères
Java, avancé (examen 1Z0-804) alphorm.com™©
Une source de caractères
Un canal d’octet
Manipulation par un scanner
• Enumérer des valeurs typées
• Rechercher des motifs ou des chaînes
• Enumérer des morceaux de chaînes
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Entrée d’un scanner
• Manipulation par un scanner
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitement des chaînes
Affichage et mise en forme
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Affichage et mise en forme
de texte
Plan
• La classe Formatter
• String.format, System.out.printf, System.out.format
• DateFormat, NumberFormat, DecimalFormat
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe Formatter
• Cette classe permet d’appliquer des motifs façon « printf »
• Un objet de type Formatter peut être lié à un StringBuilder
• Permet de formatter, réorganiser les paramètres
• Les conversions sont
Java, avancé (examen 1Z0-804) alphorm.com™©
Générales, Character, Numeric, Date/Time, Percent, LineSeparator
String.format, printf…
• Méthodes de confort exploitant un Formatter
• String.format permet de formatter une chaîne de caractères
• System.out.printf ou format gère directement l’affichage
Java, avancé (examen 1Z0-804) alphorm.com™©
DateFormat, NumberFormat, DecimalFormat
• Dans le package java.text
• Permet de formatter les dates, les nombres…
• Existe en une instance dépendant du poste
• S’adapte aux cultures
Java, avancé (examen 1Z0-804) alphorm.com™©
• Gère le formatage et aussi le parsing
Ce qu’on a couvert
• La classe Formatter
• String.format, System.out.printf, System.out.format
• DateFormat, NumberFormat, DecimalFormat
Java, avancé (examen 1Z0-804) alphorm.com™©
Traitement des chaînes
Expressions régulières avec
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Expressions régulières avec
Pattern et Matcher
Plan
• Les expressions régulières
• La classe Pattern
• La classe Matcher
Java, avancé (examen 1Z0-804) alphorm.com™©
Les expressions régulières
• Sorte de langage à la grammaire simple
• Permet de retrouver des motifs dans des chaînes de caractères
• Basé sur Perl5, mais quelques constructions en moins
• Motifs :
Java, avancé (examen 1Z0-804) alphorm.com™©
Caractères d’échappement n, t …
[abc] : a ou b ou c, [^abc] : tout sauf a ou b ou c, [a-z] : de a à z
. : tout caractère, d : [0-9], D : [^0-9], s : un blanc, w : [a-zA-Z0-9]
X? : un ou zéro, X* : 0 ou plus, X+ : 1 ou plus, X{n} : n, X{n,m} : entre n et m
La classe Pattern
• Le package java.util.regex
• Permet de compiler une expression régulière en un motif
• Méthodes statiques :
compile, matches, quote
Java, avancé (examen 1Z0-804) alphorm.com™©
• Autres méthodes :
matcher, pattern, split, toString
La classe Matcher
• Représente un outil pour gérer les correspondances d’un motif
Faire correspondre toute la séquence
Rechercher le pattern en partant du début
Rechercher la prochaine partie qui correspond au motif
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Les expressions régulières
• La classe Pattern
• La classe Matcher
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Catégories d’exceptions
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Catégories d’exceptions
Plan
• La classe Throwable
• La classe Exception
• Les exceptions non gérées
• Les exceptions gérées
Java, avancé (examen 1Z0-804) alphorm.com™©
La classe Throwable
• Classe mère de tout ce qui peut être levé lorsqu’une erreur est détectée
• Plusieurs constructeurs :
Throwable ()
Throwable (String message)
Throwable (String message, Throwable cause)
Java, avancé (examen 1Z0-804) alphorm.com™©
Throwable (String message, Throwable cause)
Throwable (String message, Throwable cause, boolean sup, boolean stack)
Throwable (Throwable cause)
• Méthodes : getMessage(), getCause() ….
La classe Exception
• Classe dérivée de Throwable
• Classe mère de tout ce qui peut être levé dans une application
• Plusieurs constructeurs :
Exception()
Java, avancé (examen 1Z0-804) alphorm.com™©
Exception(String message)
Exception(String message, Throwable cause)
Exception(String message, Throwable cause, boolean sup, boolean stack)
Exception(Throwable cause)
Les exceptions non gérées
• RuntimeException est la classe mère de toutes les classes d’exceptions
qui arrivent normalement dans une application
• Le compilateur n’oblige pas à gérer ces exceptions
• On parle d’exceptions non gérées
• ArithmeticException, ClassCastException, NullpointerException …
Java, avancé (examen 1Z0-804) alphorm.com™©
• ArithmeticException, ClassCastException, NullpointerException …
• Sont déclarées dans java.lang
Les exceptions gérées
• Classes dérivées de Exception
En réalité tout Throwable qui n’est ni Error, ni RuntimeException
• Le compilateur exigera une gestion explicite
avec les mots clés try-catch-throw-throws
On ne peut pas ignorer simplement la levée de ces exceptions
Java, avancé (examen 1Z0-804) alphorm.com™©
• On ne peut pas ignorer simplement la levée de ces exceptions
Ce qu’on a couvert
• La classe Throwable
• La classe Exception
• Les exceptions non gérées
• Les exceptions gérées
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Classes d’exception Java
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Classes d’exception Java
standard
Plan
• Les classes d’exception non gérées de java.lang
• Les classes d’exception gérées de java.lang
Java, avancé (examen 1Z0-804) alphorm.com™©
Les classes d’exception non gérées
• ArithmeticException
Java, avancé (examen 1Z0-804) alphorm.com™©
• ArrayIndexOutOfBoundsException
• ArrayStoreException
• ClassCastException
Les classes d’exception non gérées
• IllegalArgumentException : mauvais argument lors d’un appel de méthode
• IllegalMonitorStateException : attente d’un thread non bloqué
• IllegalStateException : application dans un état incorrect
• IllegalThreadStateException : l’état du thread ne permet pas de réaliser l’opération
• IndexOutOfBoundsException : débordement d’index
• NegativeArraySizeException : allocation d’un tableau avec une taille négative
Java, avancé (examen 1Z0-804) alphorm.com™©
• NegativeArraySizeException : allocation d’un tableau avec une taille négative
• NullPointerException : utilisation d’une référence nulle
• NumberFormatException : conversion de chaîne de caractère en numérique impossible
• SecurityException : tentative de violation de sécurité
• StringIndexOutOfBounds : index supérieur à la taille de la chaîne
• UnsupportedOperationException : opération non supportée
Les classes d’exception gérées
• Ces exceptions qui correspondent à certaines API
• Les exceptions qui sont liées aux entrées-sorties
• Les exceptions liées aux bases de données
• Le compilateur exigera une gestion du cas exceptionnel
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Les classes d’exception non gérées de java.lang
• Les classes d’exception gérées de java.lang
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Création de classes
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Création de classes
d’exception
Plan
• Hériter de Exception
• Déclarer des membres spécifiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Hériter de Exception
• Il est indispensable d’hériter de Exception
• Faire le choix du constructeur
Le message est déjà prévu
La cause est déjà prévue
Un héritage sur RuntimeException est possible
Java, avancé (examen 1Z0-804) alphorm.com™©
• Un héritage sur RuntimeException est possible
Déclarer des membres spécifiques
• Une exception capte le contexte d’erreur et le remonte
Constructeur avec les paramètres appropriés
Getter pour restituer l’information
• Les attributs vont avec…
Une exception peut ne pas avoir d’attributs spécifiques
Java, avancé (examen 1Z0-804) alphorm.com™©
• Une exception peut ne pas avoir d’attributs spécifiques
Son type seul suffit à l’identifier
Ce qu’on a couvert
• Hériter de Exception
• Déclarer des membres spécifiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Les mots-clés try, catch et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les mots-clés try, catch et
finally
Plan
• Le mot-clé try
• Le mot-clé catch
• Le mot-clé finally
• La déclaration de levée d’exception
Java, avancé (examen 1Z0-804) alphorm.com™©
Le mot-clé try
• Mot-clé qui introduit le bloc de code nominal
• Ce bloc sera suivi des blocs de gestion d’erreur
Java, avancé (examen 1Z0-804) alphorm.com™©
Le mot-clé catch
• Correspond à un bloc de gestion d’erreur
• Plusieurs blocs catch peuvent suivre un try
• Il seront évalués dans l’ordre de présence dans le code
Java, avancé (examen 1Z0-804) alphorm.com™©
Le mot-clé finally
• Termine la séquence des catch
• Optionnel
• Introduit in bloc garanti d’exécution
Java, avancé (examen 1Z0-804) alphorm.com™©
La déclaration de la levée d’exceptions
• Pour gérer les exceptions, 2 possibilités :
Try-catch pour gérer à ce niveau l’exception
Throws pour laisser passer l’exception
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Le mot-clé try
• Le mot-clé catch
• Le mot-clé finally
• La déclaration de levée d’exception
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
L’interface AutoCloseable et
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
L’interface AutoCloseable et
try-with-resources
Plan
• L’absence de destruction déterministe
• Avec try-with-resources
Java, avancé (examen 1Z0-804) alphorm.com™©
L’absence de destruction déterministe
• Le ramasse-miette se charge de récupérer la mémoire non utilisée
• Mais son passage est dicté par ses propres algorithmes
• Il est possible mais souvent maladroit de déclencher le gc
• En Java, il n’y a pas de destructeur déterministe
Java, avancé (examen 1Z0-804) alphorm.com™©
Cela évite au développeur d’avoir à écrire le « delete »
• Mais certains objets ont des ressources (non mémoire) associées
Il faut les forcer à libérer ces ressources
Avec try-with-resources
• Provoquer le « close » sur un objet
• Il faut implémenter AutoCloseable
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• L’absence de destruction déterministe
• Avec try-with-resources
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Multi-catch
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Multi-catch
Plan
• Plusieurs catch sont possibles derrière un try
• Le polymorphisme des exceptions
• Le contenu d’un catch
Java, avancé (examen 1Z0-804) alphorm.com™©
Plusieurs catch sont possibles après un try
• Les catch sont typés par la classe d’exception qu’ils traitent
• Un bloc catch exécuté suffit pour qu’il n’y ait plus d’erreur
• Les blocs catch sont évalués dans l’ordre de présence dans le code
Mais dès qu’un catch correspond, il est exécuté
Java, avancé (examen 1Z0-804) alphorm.com™©
Aucun autre ne sera exécuté
• Si aucun catch ne correspond, on remonte à l’appelant
Le polymorphisme des exceptions
• Les classes d’exception sont organisées en héritages
• Un catch sur une classe mère attrape les exceptions filles
• Il faut mettre les catch du type le plus spécifique vers le plus générique
Sinon, le premier bloc convient toujours, et les autres sont du code mort
Java, avancé (examen 1Z0-804) alphorm.com™©
Le contenu d’un catch
• Ne rien mettre dans un catch est dangereux
L’erreur sera réputée traitée, mais rien n’est fait
• Traiter l’erreur en utilisant le contexte : l’exception
• Méthodes printStackTrace de Exception
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Plusieurs catch sont possibles derrière un try
• Le polymorphisme des exceptions
• Le contenu d’un catch
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Meilleures pratiques
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Meilleures pratiques
Plan
• Un bloc try par méthode
• Contenu des catch
• Granularité des catch
• Réinterprétation des exceptions
Java, avancé (examen 1Z0-804) alphorm.com™©
Un bloc try par méthode
• Si vous placez plusieurs try dans une méthode
Il est possible de réaliser le second try sans le premier
Est-ce que la méthode elle-même est cohérente ?
Il est difficile de suivre le scénario nominal
• Un seul try suivi de plusieurs catch
Java, avancé (examen 1Z0-804) alphorm.com™©
• Un seul try suivi de plusieurs catch
• Facile à lire, meilleure séparation du code nominal du code de gestion
des erreurs
Contenu des catch
• Un minimum dans un catch, non vide
• Utiliser les méthodes présentes sur la classe Exception
en fait Throwable
• Utiliser un log pour tracer
Java, avancé (examen 1Z0-804) alphorm.com™©
• Rétablir le système bas-niveau et réinterpréter
Granularité des catch
• Le bloc catch est déclenché pour 1 type d’exception
• On peut traiter une classe mère
Traiter Exception et totalement généraliste
Traiter une super classe traite toutes ses sous-classes
Il est possible de traiter plusieurs types non reliés
Java, avancé (examen 1Z0-804) alphorm.com™©
• Il est possible de traiter plusieurs types non reliés
Réinterprétation des exceptions
• Il est possible de relancer une exception alors qu’une exception est en
cours de traitement
• Cas particulier du traitement bas-niveau puis
Relancer la même exception
Relancer une nouvelle exception : réinterprétation
Java, avancé (examen 1Z0-804) alphorm.com™©
Relancer une nouvelle exception : réinterprétation
Ce qu’on a couvert
• Un bloc try par méthode
• Contenu des catch
• Granularité des catch
• Réinterprétation des exceptions
Java, avancé (examen 1Z0-804) alphorm.com™©
Exceptions et assertions
Les assertions
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Les assertions
Plan
• Définition d’une assertion
• Placer les assertions
• Lancer l’application avec ou sans les assertions
Java, avancé (examen 1Z0-804) alphorm.com™©
Définition d’une assertion
• Une vérification runtime que l’objet est bien dans un certain état
• Contrat d’utilisation d’un objet, d’une méthode
• Ne cherche pas à vérifier les entrées variantes de l’environnement
Utiliser les tests à base de « if » pour cela
Java, avancé (examen 1Z0-804) alphorm.com™©
• Lorsque l’assertion n’est pas vérifiée, une Error est levée
Placer une assertion
• En début de méthode : une précondition
• En fin de méthode : une postcondition
• N’importe où : un invariant
Une assertion peut détecter un passage dans un flux non prévu
Java, avancé (examen 1Z0-804) alphorm.com™©
• Ne pas tester les paramètres en entrée dus à l’utilisateur
• Les assertions sont débrayables
Lancer avec ou sans les assertions
• Les assertions ne sont pas lancées par défaut
• Il faut les activer avec –ea
• Donc les assertions ne coûtent rien dans une application livrée
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• Définition d’une assertion
• Placer les assertions
• Lancer l’application avec ou sans les assertions
Java, avancé (examen 1Z0-804) alphorm.com™©
Principes des entrées-sorties
Gestion des entrées-sorties
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Gestion des entrées-sorties
Plan
• Hiérarchie de classes
• Les canaux
• Les filtres
Java, avancé (examen 1Z0-804) alphorm.com™©
Hiérarchie de classes
• InputStream est une entrée binaire
• OutputStream est une sortie binaire
• Reader est une entrée texte
• Writer est une sortie texte
Java, avancé (examen 1Z0-804) alphorm.com™©
• Dérivées de ces classes
Canaux représentant les sources/cibles de données
Filtres représentant les décorateurs
Les canaux
• Les sources ou les cibles
• Fichiers : FileInputStream, FileOutputStream, FileReader, FileWriter
• Sockets
• Entrées ou sorties sur les serveurs : ServletOutputStream
Java, avancé (examen 1Z0-804) alphorm.com™©
Les filtres
• Décorations des accès aux données
• Ne rajoutent pas méthodes
BufferedInputStream : gère une lecture bufferisée
• Ou bien ajoutent des comportement
Java, avancé (examen 1Z0-804) alphorm.com™©
DataInputStream : lit des valeurs de types primitifs
Ce qu’on a couvert
• Hiérarchie de classes
• Les canaux
• Les filtres
Java, avancé (examen 1Z0-804) alphorm.com™©
Principes des entrées-sorties
Lecture de la console
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Lecture de la console
Plan
• System.in est une entrée binaire
• Les filtres pour lire la console
Java, avancé (examen 1Z0-804) alphorm.com™©
System.in est une entrée binaire
• System.in est de type InputStream
• Lecture via read ou read(byte[])
• Récupération d’un octet
Java, avancé (examen 1Z0-804) alphorm.com™©
Les filtres pour lire la console
• InputStreamReader permet de convertir l’entrée binaire en entrée
caractères
• BufferedReader permet de lire une ligne
Java, avancé (examen 1Z0-804) alphorm.com™©
• BufferedReader permet de lire une ligne
Scanner
• Pour rappel, il est possible d’utiliser Scanner
• Lecture de données formatées
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• System.in est une entrée binaire
• Les filtres pour lire la console
Java, avancé (examen 1Z0-804) alphorm.com™©
Principes des entrées-sorties
Ecriture sur la console
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Ecriture sur la console
Plan
• System.out est un PrintStream
• System.err est un PrintStream
Java, avancé (examen 1Z0-804) alphorm.com™©
System.out est un PrintStream
• Les méthodes proposées sur PrintStream
Méthodes write( int) : affichage de l’octet
Méthode print (…) surchargée, gère l’encodage
Méthode println(…) avec retour à la ligne
• Méthode format, qui se repose sur les méthodes de String
Java, avancé (examen 1Z0-804) alphorm.com™©
• Méthode format, qui se repose sur les méthodes de String
• Méthode printf
System.err est un PrintStream
• La sortie standard d’erreur sur les systèmes qui séparent les deux
• Sinon, la même chose que out
• Possibilités de rediriger les sorties
Java, avancé (examen 1Z0-804) alphorm.com™©
Ce qu’on a couvert
• System.out est un PrintStream
• System.err est un PrintStream
Java, avancé (examen 1Z0-804) alphorm.com™©
Principes des entrées-sorties
Flux d’entrées-sorties
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Flux d’entrées-sorties
Plan
• Flux d’entrée binaires
• Flux de sortie binaires
• Flux d’entrée caractères
• Flux de sortie caractères
Java, avancé (examen 1Z0-804) alphorm.com™©
Flux d’entrée binaire
• Dérivés de InputStream, classe abstraite
Manipulation d’octets à travers de 2 méthodes
• Avec int read()
• Avec int read(byte[])
• Classes qui représentent des sources de données
Java, avancé (examen 1Z0-804) alphorm.com™©
• Classes qui représentent des sources de données
FileInputStream, …
• Classes qui représentent des transformations de données
ObjectInputStream, DataInputStream,…
Flux de sortie binaires
• Dérivés de OutputStream, classe abstraite
Manipulation d’octets
• Classes qui représentent des cibles de données
FileOutputStream,…
Classes qui transforment ou ajoutent des fonctionnalités
Java, avancé (examen 1Z0-804) alphorm.com™©
• Classes qui transforment ou ajoutent des fonctionnalités
ObjectOutputStream, DataOutputStream,…
Flux d’entrée caractères
• Dérivés de la classe abstraite Reader
Lecture de caractères
• Avec int read() ou int read(char[]) …
• Des classes qui sont sources de caractères
FileReader, …
Java, avancé (examen 1Z0-804) alphorm.com™©
FileReader, …
• Des classes qui transforment ou ajoutent des fonctionnalités
BufferedReader, LineNumberReader, …
• A noter que FileReader dérive de InputStreamReader
Flux de sortie caractères
• Dérivés de la classe abstraite Writer
Ecriture de caractères
• Des classes représentant les cibles de caractères
FileWriter,…
Des classes qui transforment ou ajoutent des fonctionnalités
Java, avancé (examen 1Z0-804) alphorm.com™©
• Des classes qui transforment ou ajoutent des fonctionnalités
PrintWriter, …
• A noter que FileWriter dérive de OutputStreamWriter, qui gère
l’encodage de la machine
Ce qu’on a couvert
• Flux d’entrée binaires
• Flux de sortie binaires
• Flux d’entrée caractères
• Flux de sortie caractères
Java, avancé (examen 1Z0-804) alphorm.com™©
Principes des entrées-sorties
Chaînage de flux d’entrées-
Java, avancé (examen 1Z0-804) alphorm.com™©
Fabien Brissonneau
Consultant, concepteur et formateur
Objets Logiciels
Site : http://www.alphorm.com
Blog : http://www.alphorm.com/blog
Forum : http://www.alphorm.com/forum
Chaînage de flux d’entrées-
sorties
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)

Weitere ähnliche Inhalte

Was ist angesagt?

Alphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm
 
Alphorm.com Formation les fondamentaux de Matlab 2013 A
Alphorm.com  Formation les fondamentaux de Matlab 2013 AAlphorm.com  Formation les fondamentaux de Matlab 2013 A
Alphorm.com Formation les fondamentaux de Matlab 2013 AAlphorm
 
alphorm.com - Formation PostgreSQL administration
alphorm.com - Formation PostgreSQL administrationalphorm.com - Formation PostgreSQL administration
alphorm.com - Formation PostgreSQL administrationAlphorm
 
Alphorm.com Formation VirtualBox
Alphorm.com Formation VirtualBoxAlphorm.com Formation VirtualBox
Alphorm.com Formation VirtualBoxAlphorm
 
alphorm.com - Formation proxmoxVE 3
alphorm.com - Formation proxmoxVE 3alphorm.com - Formation proxmoxVE 3
alphorm.com - Formation proxmoxVE 3Alphorm
 
Alphorm.com Formation RDS Windows Server 2012 R2
Alphorm.com Formation RDS Windows Server 2012 R2Alphorm.com Formation RDS Windows Server 2012 R2
Alphorm.com Formation RDS Windows Server 2012 R2Alphorm
 
Alphorm.com Formation Linux LPIC-3 (examen 300) Environnement mixte
Alphorm.com Formation Linux LPIC-3 (examen 300) Environnement mixteAlphorm.com Formation Linux LPIC-3 (examen 300) Environnement mixte
Alphorm.com Formation Linux LPIC-3 (examen 300) Environnement mixteAlphorm
 
alphorm.com - Formation XenSources
alphorm.com - Formation XenSourcesalphorm.com - Formation XenSources
alphorm.com - Formation XenSourcesAlphorm
 
alphorm.com - Formation VMware vSphere 5
alphorm.com - Formation VMware vSphere 5alphorm.com - Formation VMware vSphere 5
alphorm.com - Formation VMware vSphere 5Alphorm
 
Alphorm.com Formation VMware Horizon View 5.2
Alphorm.com Formation VMware Horizon View 5.2Alphorm.com Formation VMware Horizon View 5.2
Alphorm.com Formation VMware Horizon View 5.2Alphorm
 
Alphorm.com Support de la formation Vmware Esxi 6.0
Alphorm.com Support de la formation Vmware Esxi 6.0Alphorm.com Support de la formation Vmware Esxi 6.0
Alphorm.com Support de la formation Vmware Esxi 6.0Alphorm
 
Alphorm.com Formation JavaFX
Alphorm.com Formation JavaFXAlphorm.com Formation JavaFX
Alphorm.com Formation JavaFXAlphorm
 
Alphorm.com Formation le langage SQL
Alphorm.com  Formation le langage SQLAlphorm.com  Formation le langage SQL
Alphorm.com Formation le langage SQLAlphorm
 
Alphorm.com-Formation windows 2012 (70-410)
Alphorm.com-Formation windows 2012 (70-410)Alphorm.com-Formation windows 2012 (70-410)
Alphorm.com-Formation windows 2012 (70-410)Alphorm
 
Alphorm.com Formation Configuration des services avancés de Windows Server 20...
Alphorm.com Formation Configuration des services avancés de Windows Server 20...Alphorm.com Formation Configuration des services avancés de Windows Server 20...
Alphorm.com Formation Configuration des services avancés de Windows Server 20...Alphorm
 
Alphorm.com Formation Déployer Xen Desktop 7.6 ET XenApp 7.6
Alphorm.com Formation Déployer Xen Desktop 7.6 ET XenApp 7.6 Alphorm.com Formation Déployer Xen Desktop 7.6 ET XenApp 7.6
Alphorm.com Formation Déployer Xen Desktop 7.6 ET XenApp 7.6 Alphorm
 
alphorm.com - Formation Exchange Server 2013 (70-341)
alphorm.com - Formation Exchange Server 2013 (70-341)alphorm.com - Formation Exchange Server 2013 (70-341)
alphorm.com - Formation Exchange Server 2013 (70-341)Alphorm
 
alphorm.com - Formation Configuration de SharePoint 2010 (70-667)
alphorm.com - Formation Configuration de SharePoint 2010 (70-667)alphorm.com - Formation Configuration de SharePoint 2010 (70-667)
alphorm.com - Formation Configuration de SharePoint 2010 (70-667)Alphorm
 
Alphorm.com Formation OS X 10.11 Server El Capitan, Les fondamentaux
Alphorm.com Formation OS X 10.11 Server El Capitan, Les fondamentauxAlphorm.com Formation OS X 10.11 Server El Capitan, Les fondamentaux
Alphorm.com Formation OS X 10.11 Server El Capitan, Les fondamentauxAlphorm
 
Alphorm.com Support de la Formation Azure Iaas avancé 2
Alphorm.com Support de la Formation Azure Iaas avancé 2Alphorm.com Support de la Formation Azure Iaas avancé 2
Alphorm.com Support de la Formation Azure Iaas avancé 2Alphorm
 

Was ist angesagt? (20)

Alphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB AdministrationAlphorm.com-Formation MongoDB Administration
Alphorm.com-Formation MongoDB Administration
 
Alphorm.com Formation les fondamentaux de Matlab 2013 A
Alphorm.com  Formation les fondamentaux de Matlab 2013 AAlphorm.com  Formation les fondamentaux de Matlab 2013 A
Alphorm.com Formation les fondamentaux de Matlab 2013 A
 
alphorm.com - Formation PostgreSQL administration
alphorm.com - Formation PostgreSQL administrationalphorm.com - Formation PostgreSQL administration
alphorm.com - Formation PostgreSQL administration
 
Alphorm.com Formation VirtualBox
Alphorm.com Formation VirtualBoxAlphorm.com Formation VirtualBox
Alphorm.com Formation VirtualBox
 
alphorm.com - Formation proxmoxVE 3
alphorm.com - Formation proxmoxVE 3alphorm.com - Formation proxmoxVE 3
alphorm.com - Formation proxmoxVE 3
 
Alphorm.com Formation RDS Windows Server 2012 R2
Alphorm.com Formation RDS Windows Server 2012 R2Alphorm.com Formation RDS Windows Server 2012 R2
Alphorm.com Formation RDS Windows Server 2012 R2
 
Alphorm.com Formation Linux LPIC-3 (examen 300) Environnement mixte
Alphorm.com Formation Linux LPIC-3 (examen 300) Environnement mixteAlphorm.com Formation Linux LPIC-3 (examen 300) Environnement mixte
Alphorm.com Formation Linux LPIC-3 (examen 300) Environnement mixte
 
alphorm.com - Formation XenSources
alphorm.com - Formation XenSourcesalphorm.com - Formation XenSources
alphorm.com - Formation XenSources
 
alphorm.com - Formation VMware vSphere 5
alphorm.com - Formation VMware vSphere 5alphorm.com - Formation VMware vSphere 5
alphorm.com - Formation VMware vSphere 5
 
Alphorm.com Formation VMware Horizon View 5.2
Alphorm.com Formation VMware Horizon View 5.2Alphorm.com Formation VMware Horizon View 5.2
Alphorm.com Formation VMware Horizon View 5.2
 
Alphorm.com Support de la formation Vmware Esxi 6.0
Alphorm.com Support de la formation Vmware Esxi 6.0Alphorm.com Support de la formation Vmware Esxi 6.0
Alphorm.com Support de la formation Vmware Esxi 6.0
 
Alphorm.com Formation JavaFX
Alphorm.com Formation JavaFXAlphorm.com Formation JavaFX
Alphorm.com Formation JavaFX
 
Alphorm.com Formation le langage SQL
Alphorm.com  Formation le langage SQLAlphorm.com  Formation le langage SQL
Alphorm.com Formation le langage SQL
 
Alphorm.com-Formation windows 2012 (70-410)
Alphorm.com-Formation windows 2012 (70-410)Alphorm.com-Formation windows 2012 (70-410)
Alphorm.com-Formation windows 2012 (70-410)
 
Alphorm.com Formation Configuration des services avancés de Windows Server 20...
Alphorm.com Formation Configuration des services avancés de Windows Server 20...Alphorm.com Formation Configuration des services avancés de Windows Server 20...
Alphorm.com Formation Configuration des services avancés de Windows Server 20...
 
Alphorm.com Formation Déployer Xen Desktop 7.6 ET XenApp 7.6
Alphorm.com Formation Déployer Xen Desktop 7.6 ET XenApp 7.6 Alphorm.com Formation Déployer Xen Desktop 7.6 ET XenApp 7.6
Alphorm.com Formation Déployer Xen Desktop 7.6 ET XenApp 7.6
 
alphorm.com - Formation Exchange Server 2013 (70-341)
alphorm.com - Formation Exchange Server 2013 (70-341)alphorm.com - Formation Exchange Server 2013 (70-341)
alphorm.com - Formation Exchange Server 2013 (70-341)
 
alphorm.com - Formation Configuration de SharePoint 2010 (70-667)
alphorm.com - Formation Configuration de SharePoint 2010 (70-667)alphorm.com - Formation Configuration de SharePoint 2010 (70-667)
alphorm.com - Formation Configuration de SharePoint 2010 (70-667)
 
Alphorm.com Formation OS X 10.11 Server El Capitan, Les fondamentaux
Alphorm.com Formation OS X 10.11 Server El Capitan, Les fondamentauxAlphorm.com Formation OS X 10.11 Server El Capitan, Les fondamentaux
Alphorm.com Formation OS X 10.11 Server El Capitan, Les fondamentaux
 
Alphorm.com Support de la Formation Azure Iaas avancé 2
Alphorm.com Support de la Formation Azure Iaas avancé 2Alphorm.com Support de la Formation Azure Iaas avancé 2
Alphorm.com Support de la Formation Azure Iaas avancé 2
 

Andere mochten auch

alphorm.com - Formation HTML5, CSS 3 et JavaScript (70-480)
alphorm.com - Formation HTML5, CSS 3 et JavaScript (70-480)alphorm.com - Formation HTML5, CSS 3 et JavaScript (70-480)
alphorm.com - Formation HTML5, CSS 3 et JavaScript (70-480)Alphorm
 
Alphorm.com Support Formation Android 6, Expert
Alphorm.com Support Formation Android 6, ExpertAlphorm.com Support Formation Android 6, Expert
Alphorm.com Support Formation Android 6, ExpertAlphorm
 
Alphorm.com Support de la Formation WebDev 21
Alphorm.com Support de la Formation WebDev 21Alphorm.com Support de la Formation WebDev 21
Alphorm.com Support de la Formation WebDev 21Alphorm
 
Alphorm.com Formation Windev 20 Pefectionnement
Alphorm.com Formation Windev 20 Pefectionnement Alphorm.com Formation Windev 20 Pefectionnement
Alphorm.com Formation Windev 20 Pefectionnement Alphorm
 
Alphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, AndroidAlphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, AndroidAlphorm
 
Alphorm.com Formation Le Language C
Alphorm.com  Formation Le Language C Alphorm.com  Formation Le Language C
Alphorm.com Formation Le Language C Alphorm
 
Alphorm.com support de la formation Access 2016 Initiation
Alphorm.com support de la formation Access 2016 InitiationAlphorm.com support de la formation Access 2016 Initiation
Alphorm.com support de la formation Access 2016 InitiationAlphorm
 
Alphorm.com Formation PCSoft(version20) GDS et Centres de contrôle
Alphorm.com Formation PCSoft(version20) GDS et Centres de contrôleAlphorm.com Formation PCSoft(version20) GDS et Centres de contrôle
Alphorm.com Formation PCSoft(version20) GDS et Centres de contrôleAlphorm
 
Alphorm.com support de la formation Word 2016 Initiation
Alphorm.com support de la formation Word 2016 InitiationAlphorm.com support de la formation Word 2016 Initiation
Alphorm.com support de la formation Word 2016 InitiationAlphorm
 
Alphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautésAlphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautésAlphorm
 
Alphorm.com Support de la Formation-PowerPoint 2016 Initiation
Alphorm.com Support de la Formation-PowerPoint 2016 Initiation Alphorm.com Support de la Formation-PowerPoint 2016 Initiation
Alphorm.com Support de la Formation-PowerPoint 2016 Initiation Alphorm
 
alphorm.com - Formation MOS Word 2013 (77-418)
alphorm.com - Formation MOS Word 2013 (77-418)alphorm.com - Formation MOS Word 2013 (77-418)
alphorm.com - Formation MOS Word 2013 (77-418)Alphorm
 
Alphorm.com Support de la formation Programmer en C# avec visual studio 2015
Alphorm.com Support de la formation Programmer en C# avec visual studio 2015Alphorm.com Support de la formation Programmer en C# avec visual studio 2015
Alphorm.com Support de la formation Programmer en C# avec visual studio 2015Alphorm
 
alphorm.com - Formation Microsoft PowerPoint 2013 (77-422)
alphorm.com - Formation Microsoft PowerPoint 2013 (77-422)alphorm.com - Formation Microsoft PowerPoint 2013 (77-422)
alphorm.com - Formation Microsoft PowerPoint 2013 (77-422)Alphorm
 
Alphorm.com win dev-20-avance-ss
Alphorm.com win dev-20-avance-ssAlphorm.com win dev-20-avance-ss
Alphorm.com win dev-20-avance-ssAlphorm
 
Alphorm.com Formation MOS Access 2013 (77-424)
Alphorm.com Formation MOS Access 2013 (77-424)Alphorm.com Formation MOS Access 2013 (77-424)
Alphorm.com Formation MOS Access 2013 (77-424)Alphorm
 
Alphorm.com Support de la formation EXCEL 2016 initiation ,Organiser et saisi...
Alphorm.com Support de la formation EXCEL 2016 initiation ,Organiser et saisi...Alphorm.com Support de la formation EXCEL 2016 initiation ,Organiser et saisi...
Alphorm.com Support de la formation EXCEL 2016 initiation ,Organiser et saisi...Alphorm
 
Alphorm.com Support de la Formation Outlook 2016 Initiation
Alphorm.com  Support de la Formation Outlook 2016 Initiation Alphorm.com  Support de la Formation Outlook 2016 Initiation
Alphorm.com Support de la Formation Outlook 2016 Initiation Alphorm
 
alphorm.com - Formation Windows 8.1 - Utilisateur
alphorm.com - Formation Windows 8.1 - Utilisateuralphorm.com - Formation Windows 8.1 - Utilisateur
alphorm.com - Formation Windows 8.1 - UtilisateurAlphorm
 
Alphorm.com Support de la formation EXCEL 2016 Initiation Découverte de l’env...
Alphorm.com Support de la formation EXCEL 2016 Initiation Découverte de l’env...Alphorm.com Support de la formation EXCEL 2016 Initiation Découverte de l’env...
Alphorm.com Support de la formation EXCEL 2016 Initiation Découverte de l’env...Alphorm
 

Andere mochten auch (20)

alphorm.com - Formation HTML5, CSS 3 et JavaScript (70-480)
alphorm.com - Formation HTML5, CSS 3 et JavaScript (70-480)alphorm.com - Formation HTML5, CSS 3 et JavaScript (70-480)
alphorm.com - Formation HTML5, CSS 3 et JavaScript (70-480)
 
Alphorm.com Support Formation Android 6, Expert
Alphorm.com Support Formation Android 6, ExpertAlphorm.com Support Formation Android 6, Expert
Alphorm.com Support Formation Android 6, Expert
 
Alphorm.com Support de la Formation WebDev 21
Alphorm.com Support de la Formation WebDev 21Alphorm.com Support de la Formation WebDev 21
Alphorm.com Support de la Formation WebDev 21
 
Alphorm.com Formation Windev 20 Pefectionnement
Alphorm.com Formation Windev 20 Pefectionnement Alphorm.com Formation Windev 20 Pefectionnement
Alphorm.com Formation Windev 20 Pefectionnement
 
Alphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, AndroidAlphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, Android
 
Alphorm.com Formation Le Language C
Alphorm.com  Formation Le Language C Alphorm.com  Formation Le Language C
Alphorm.com Formation Le Language C
 
Alphorm.com support de la formation Access 2016 Initiation
Alphorm.com support de la formation Access 2016 InitiationAlphorm.com support de la formation Access 2016 Initiation
Alphorm.com support de la formation Access 2016 Initiation
 
Alphorm.com Formation PCSoft(version20) GDS et Centres de contrôle
Alphorm.com Formation PCSoft(version20) GDS et Centres de contrôleAlphorm.com Formation PCSoft(version20) GDS et Centres de contrôle
Alphorm.com Formation PCSoft(version20) GDS et Centres de contrôle
 
Alphorm.com support de la formation Word 2016 Initiation
Alphorm.com support de la formation Word 2016 InitiationAlphorm.com support de la formation Word 2016 Initiation
Alphorm.com support de la formation Word 2016 Initiation
 
Alphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautésAlphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautés
 
Alphorm.com Support de la Formation-PowerPoint 2016 Initiation
Alphorm.com Support de la Formation-PowerPoint 2016 Initiation Alphorm.com Support de la Formation-PowerPoint 2016 Initiation
Alphorm.com Support de la Formation-PowerPoint 2016 Initiation
 
alphorm.com - Formation MOS Word 2013 (77-418)
alphorm.com - Formation MOS Word 2013 (77-418)alphorm.com - Formation MOS Word 2013 (77-418)
alphorm.com - Formation MOS Word 2013 (77-418)
 
Alphorm.com Support de la formation Programmer en C# avec visual studio 2015
Alphorm.com Support de la formation Programmer en C# avec visual studio 2015Alphorm.com Support de la formation Programmer en C# avec visual studio 2015
Alphorm.com Support de la formation Programmer en C# avec visual studio 2015
 
alphorm.com - Formation Microsoft PowerPoint 2013 (77-422)
alphorm.com - Formation Microsoft PowerPoint 2013 (77-422)alphorm.com - Formation Microsoft PowerPoint 2013 (77-422)
alphorm.com - Formation Microsoft PowerPoint 2013 (77-422)
 
Alphorm.com win dev-20-avance-ss
Alphorm.com win dev-20-avance-ssAlphorm.com win dev-20-avance-ss
Alphorm.com win dev-20-avance-ss
 
Alphorm.com Formation MOS Access 2013 (77-424)
Alphorm.com Formation MOS Access 2013 (77-424)Alphorm.com Formation MOS Access 2013 (77-424)
Alphorm.com Formation MOS Access 2013 (77-424)
 
Alphorm.com Support de la formation EXCEL 2016 initiation ,Organiser et saisi...
Alphorm.com Support de la formation EXCEL 2016 initiation ,Organiser et saisi...Alphorm.com Support de la formation EXCEL 2016 initiation ,Organiser et saisi...
Alphorm.com Support de la formation EXCEL 2016 initiation ,Organiser et saisi...
 
Alphorm.com Support de la Formation Outlook 2016 Initiation
Alphorm.com  Support de la Formation Outlook 2016 Initiation Alphorm.com  Support de la Formation Outlook 2016 Initiation
Alphorm.com Support de la Formation Outlook 2016 Initiation
 
alphorm.com - Formation Windows 8.1 - Utilisateur
alphorm.com - Formation Windows 8.1 - Utilisateuralphorm.com - Formation Windows 8.1 - Utilisateur
alphorm.com - Formation Windows 8.1 - Utilisateur
 
Alphorm.com Support de la formation EXCEL 2016 Initiation Découverte de l’env...
Alphorm.com Support de la formation EXCEL 2016 Initiation Découverte de l’env...Alphorm.com Support de la formation EXCEL 2016 Initiation Découverte de l’env...
Alphorm.com Support de la formation EXCEL 2016 Initiation Découverte de l’env...
 

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

Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)
Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)
Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)SmartnSkilled
 
Play Framework
Play FrameworkPlay Framework
Play FrameworkArmaklan
 
JEE_chapitre 1.pdf
JEE_chapitre 1.pdfJEE_chapitre 1.pdf
JEE_chapitre 1.pdfiyadamri
 
Joomla! Platform - Pourquoi l’API Joomla!
Joomla! Platform - Pourquoi l’API Joomla!Joomla! Platform - Pourquoi l’API Joomla!
Joomla! Platform - Pourquoi l’API Joomla!Bilel McSam
 
Java - Exceptions
Java - ExceptionsJava - Exceptions
Java - ExceptionsNoël
 
OBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur javaOBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur javaDouglas MBIANDOU
 
Alphorm.com Support de la Formation PHP MySQL
Alphorm.com Support de la Formation PHP MySQLAlphorm.com Support de la Formation PHP MySQL
Alphorm.com Support de la Formation PHP MySQLAlphorm
 
20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven developmentLeClubQualiteLogicielle
 
alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)
alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)
alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)Alphorm
 
Alphorm.com Formation knockoutJS
Alphorm.com Formation knockoutJSAlphorm.com Formation knockoutJS
Alphorm.com Formation knockoutJSAlphorm
 
Alphorm.com Formation jQuery
Alphorm.com Formation jQueryAlphorm.com Formation jQuery
Alphorm.com Formation jQueryAlphorm
 
La Maîtrise de Java au sein du SI
La Maîtrise de Java au sein du SILa Maîtrise de Java au sein du SI
La Maîtrise de Java au sein du SIcpruvost
 
Certification java oracle java se 7 programmer
Certification java oracle   java se 7 programmerCertification java oracle   java se 7 programmer
Certification java oracle java se 7 programmerEGILIA Learning
 
Objet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonomeObjet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonomeformationobjetdirect
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !Paris Salesforce Developer Group
 

Ähnlich wie Alphorm.com Formation Java,avancé OCP (1Z0-804) (20)

Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)
Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)
Support formation vidéo : OCA Java SE 8 Programmer (1Z0-808) (1)
 
Play Framework
Play FrameworkPlay Framework
Play Framework
 
Javaoop
JavaoopJavaoop
Javaoop
 
JEE_chapitre 1.pdf
JEE_chapitre 1.pdfJEE_chapitre 1.pdf
JEE_chapitre 1.pdf
 
J platform
J platformJ platform
J platform
 
Joomla! Platform - Pourquoi l’API Joomla!
Joomla! Platform - Pourquoi l’API Joomla!Joomla! Platform - Pourquoi l’API Joomla!
Joomla! Platform - Pourquoi l’API Joomla!
 
Java - Exceptions
Java - ExceptionsJava - Exceptions
Java - Exceptions
 
OBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur javaOBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur java
 
Certification java oca
Certification java ocaCertification java oca
Certification java oca
 
Alphorm.com Support de la Formation PHP MySQL
Alphorm.com Support de la Formation PHP MySQLAlphorm.com Support de la Formation PHP MySQL
Alphorm.com Support de la Formation PHP MySQL
 
#6 Outils De Developpement
#6 Outils De Developpement#6 Outils De Developpement
#6 Outils De Developpement
 
20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development
 
alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)
alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)
alphorm.com - Formation Oracle Database 11g DBA 1 (1Z0-052)
 
Alphorm.com Formation knockoutJS
Alphorm.com Formation knockoutJSAlphorm.com Formation knockoutJS
Alphorm.com Formation knockoutJS
 
Alphorm.com Formation jQuery
Alphorm.com Formation jQueryAlphorm.com Formation jQuery
Alphorm.com Formation jQuery
 
La Maîtrise de Java au sein du SI
La Maîtrise de Java au sein du SILa Maîtrise de Java au sein du SI
La Maîtrise de Java au sein du SI
 
Certification java oracle java se 7 programmer
Certification java oracle   java se 7 programmerCertification java oracle   java se 7 programmer
Certification java oracle java se 7 programmer
 
Octo Maven.pdf
Octo Maven.pdfOcto Maven.pdf
Octo Maven.pdf
 
Objet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonomeObjet Direct Formation Java pour devenir autonome
Objet Direct Formation Java pour devenir autonome
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 

Mehr von Alphorm

Alphorm.com Formation Microsoft 365 (MS-500) : Administrateur Sécurité - Prot...
Alphorm.com Formation Microsoft 365 (MS-500) : Administrateur Sécurité - Prot...Alphorm.com Formation Microsoft 365 (MS-500) : Administrateur Sécurité - Prot...
Alphorm.com Formation Microsoft 365 (MS-500) : Administrateur Sécurité - Prot...Alphorm
 
Alphorm.com Formation Google Sheets : Créer un Tableau de Bord Collaboratif a...
Alphorm.com Formation Google Sheets : Créer un Tableau de Bord Collaboratif a...Alphorm.com Formation Google Sheets : Créer un Tableau de Bord Collaboratif a...
Alphorm.com Formation Google Sheets : Créer un Tableau de Bord Collaboratif a...Alphorm
 
Alphorm.com Formation CCNP ENCOR 350-401 (6of8) : Sécurité
Alphorm.com Formation CCNP ENCOR 350-401 (6of8) : SécuritéAlphorm.com Formation CCNP ENCOR 350-401 (6of8) : Sécurité
Alphorm.com Formation CCNP ENCOR 350-401 (6of8) : SécuritéAlphorm
 
Alphorm.com Formation Vue JS 3 : Créer une application de A à Z
Alphorm.com Formation Vue JS 3 : Créer une application de A à ZAlphorm.com Formation Vue JS 3 : Créer une application de A à Z
Alphorm.com Formation Vue JS 3 : Créer une application de A à ZAlphorm
 
Alphorm.com Formation Blockchain : Maîtriser la Conception d'Architectures
Alphorm.com Formation Blockchain : Maîtriser la Conception d'ArchitecturesAlphorm.com Formation Blockchain : Maîtriser la Conception d'Architectures
Alphorm.com Formation Blockchain : Maîtriser la Conception d'ArchitecturesAlphorm
 
Alphorm.com Formation Sage : Gestion Commerciale
Alphorm.com Formation Sage : Gestion CommercialeAlphorm.com Formation Sage : Gestion Commerciale
Alphorm.com Formation Sage : Gestion CommercialeAlphorm
 
Alphorm.com Formation PHP 8 (2/6) : L'héritage en orienté objet
Alphorm.com Formation PHP 8 (2/6) : L'héritage en orienté objetAlphorm.com Formation PHP 8 (2/6) : L'héritage en orienté objet
Alphorm.com Formation PHP 8 (2/6) : L'héritage en orienté objetAlphorm
 
Alphorm.com Formation Excel 2019 : Concevoir un Tableau de Bord Interactif
Alphorm.com Formation Excel 2019 : Concevoir un Tableau de Bord InteractifAlphorm.com Formation Excel 2019 : Concevoir un Tableau de Bord Interactif
Alphorm.com Formation Excel 2019 : Concevoir un Tableau de Bord InteractifAlphorm
 
Alphorm.com Formation Maya 3D : Créer un Design d'intérieur au Style Isométrique
Alphorm.com Formation Maya 3D : Créer un Design d'intérieur au Style IsométriqueAlphorm.com Formation Maya 3D : Créer un Design d'intérieur au Style Isométrique
Alphorm.com Formation Maya 3D : Créer un Design d'intérieur au Style IsométriqueAlphorm
 
Alphorm.com Formation VMware vSphere 7 : La Mise à Niveau
Alphorm.com Formation VMware vSphere 7 : La Mise à NiveauAlphorm.com Formation VMware vSphere 7 : La Mise à Niveau
Alphorm.com Formation VMware vSphere 7 : La Mise à NiveauAlphorm
 
Alphorm.com Formation Apprendre les bonnes pratiques de CSS avec BEM : OOCSS ...
Alphorm.com Formation Apprendre les bonnes pratiques de CSS avec BEM : OOCSS ...Alphorm.com Formation Apprendre les bonnes pratiques de CSS avec BEM : OOCSS ...
Alphorm.com Formation Apprendre les bonnes pratiques de CSS avec BEM : OOCSS ...Alphorm
 
Alphorm.com Formation Unity : Monétiser votre jeu 3D sur les plateformes Mobiles
Alphorm.com Formation Unity : Monétiser votre jeu 3D sur les plateformes MobilesAlphorm.com Formation Unity : Monétiser votre jeu 3D sur les plateformes Mobiles
Alphorm.com Formation Unity : Monétiser votre jeu 3D sur les plateformes MobilesAlphorm
 
Alphorm.com Formation PHP 8 : Les bases de la POO
Alphorm.com Formation PHP 8 : Les bases de la POOAlphorm.com Formation PHP 8 : Les bases de la POO
Alphorm.com Formation PHP 8 : Les bases de la POOAlphorm
 
Alphorm.com Formation Power BI : Transformation de Données avec DAX et Power ...
Alphorm.com Formation Power BI : Transformation de Données avec DAX et Power ...Alphorm.com Formation Power BI : Transformation de Données avec DAX et Power ...
Alphorm.com Formation Power BI : Transformation de Données avec DAX et Power ...Alphorm
 
Alphorm.com Formation Techniques de Blue Teaming : L'Essentiel pour l'Analyst...
Alphorm.com Formation Techniques de Blue Teaming : L'Essentiel pour l'Analyst...Alphorm.com Formation Techniques de Blue Teaming : L'Essentiel pour l'Analyst...
Alphorm.com Formation Techniques de Blue Teaming : L'Essentiel pour l'Analyst...Alphorm
 
Alphorm.com Formation Améliorer le développement avec CSS-in-JS _ Styled Comp...
Alphorm.com Formation Améliorer le développement avec CSS-in-JS _ Styled Comp...Alphorm.com Formation Améliorer le développement avec CSS-in-JS _ Styled Comp...
Alphorm.com Formation Améliorer le développement avec CSS-in-JS _ Styled Comp...Alphorm
 
Alphorm.com Formation Unity (6/7) : Maitriser l'Intelligence Artificielle de ...
Alphorm.com Formation Unity (6/7) : Maitriser l'Intelligence Artificielle de ...Alphorm.com Formation Unity (6/7) : Maitriser l'Intelligence Artificielle de ...
Alphorm.com Formation Unity (6/7) : Maitriser l'Intelligence Artificielle de ...Alphorm
 
Alphorm.com Formation Architecture Microservices : Jenkins et SpringBoot
Alphorm.com Formation Architecture Microservices : Jenkins et SpringBootAlphorm.com Formation Architecture Microservices : Jenkins et SpringBoot
Alphorm.com Formation Architecture Microservices : Jenkins et SpringBootAlphorm
 
Alphorm.com Formation Active Directory 2022 : Multi Sites et Services
Alphorm.com Formation Active Directory 2022 : Multi Sites et ServicesAlphorm.com Formation Active Directory 2022 : Multi Sites et Services
Alphorm.com Formation Active Directory 2022 : Multi Sites et ServicesAlphorm
 
Alphorm.com Formation Vue JS 3 : Exploiter la Composition API
Alphorm.com Formation Vue JS 3 : Exploiter la Composition APIAlphorm.com Formation Vue JS 3 : Exploiter la Composition API
Alphorm.com Formation Vue JS 3 : Exploiter la Composition APIAlphorm
 

Mehr von Alphorm (20)

Alphorm.com Formation Microsoft 365 (MS-500) : Administrateur Sécurité - Prot...
Alphorm.com Formation Microsoft 365 (MS-500) : Administrateur Sécurité - Prot...Alphorm.com Formation Microsoft 365 (MS-500) : Administrateur Sécurité - Prot...
Alphorm.com Formation Microsoft 365 (MS-500) : Administrateur Sécurité - Prot...
 
Alphorm.com Formation Google Sheets : Créer un Tableau de Bord Collaboratif a...
Alphorm.com Formation Google Sheets : Créer un Tableau de Bord Collaboratif a...Alphorm.com Formation Google Sheets : Créer un Tableau de Bord Collaboratif a...
Alphorm.com Formation Google Sheets : Créer un Tableau de Bord Collaboratif a...
 
Alphorm.com Formation CCNP ENCOR 350-401 (6of8) : Sécurité
Alphorm.com Formation CCNP ENCOR 350-401 (6of8) : SécuritéAlphorm.com Formation CCNP ENCOR 350-401 (6of8) : Sécurité
Alphorm.com Formation CCNP ENCOR 350-401 (6of8) : Sécurité
 
Alphorm.com Formation Vue JS 3 : Créer une application de A à Z
Alphorm.com Formation Vue JS 3 : Créer une application de A à ZAlphorm.com Formation Vue JS 3 : Créer une application de A à Z
Alphorm.com Formation Vue JS 3 : Créer une application de A à Z
 
Alphorm.com Formation Blockchain : Maîtriser la Conception d'Architectures
Alphorm.com Formation Blockchain : Maîtriser la Conception d'ArchitecturesAlphorm.com Formation Blockchain : Maîtriser la Conception d'Architectures
Alphorm.com Formation Blockchain : Maîtriser la Conception d'Architectures
 
Alphorm.com Formation Sage : Gestion Commerciale
Alphorm.com Formation Sage : Gestion CommercialeAlphorm.com Formation Sage : Gestion Commerciale
Alphorm.com Formation Sage : Gestion Commerciale
 
Alphorm.com Formation PHP 8 (2/6) : L'héritage en orienté objet
Alphorm.com Formation PHP 8 (2/6) : L'héritage en orienté objetAlphorm.com Formation PHP 8 (2/6) : L'héritage en orienté objet
Alphorm.com Formation PHP 8 (2/6) : L'héritage en orienté objet
 
Alphorm.com Formation Excel 2019 : Concevoir un Tableau de Bord Interactif
Alphorm.com Formation Excel 2019 : Concevoir un Tableau de Bord InteractifAlphorm.com Formation Excel 2019 : Concevoir un Tableau de Bord Interactif
Alphorm.com Formation Excel 2019 : Concevoir un Tableau de Bord Interactif
 
Alphorm.com Formation Maya 3D : Créer un Design d'intérieur au Style Isométrique
Alphorm.com Formation Maya 3D : Créer un Design d'intérieur au Style IsométriqueAlphorm.com Formation Maya 3D : Créer un Design d'intérieur au Style Isométrique
Alphorm.com Formation Maya 3D : Créer un Design d'intérieur au Style Isométrique
 
Alphorm.com Formation VMware vSphere 7 : La Mise à Niveau
Alphorm.com Formation VMware vSphere 7 : La Mise à NiveauAlphorm.com Formation VMware vSphere 7 : La Mise à Niveau
Alphorm.com Formation VMware vSphere 7 : La Mise à Niveau
 
Alphorm.com Formation Apprendre les bonnes pratiques de CSS avec BEM : OOCSS ...
Alphorm.com Formation Apprendre les bonnes pratiques de CSS avec BEM : OOCSS ...Alphorm.com Formation Apprendre les bonnes pratiques de CSS avec BEM : OOCSS ...
Alphorm.com Formation Apprendre les bonnes pratiques de CSS avec BEM : OOCSS ...
 
Alphorm.com Formation Unity : Monétiser votre jeu 3D sur les plateformes Mobiles
Alphorm.com Formation Unity : Monétiser votre jeu 3D sur les plateformes MobilesAlphorm.com Formation Unity : Monétiser votre jeu 3D sur les plateformes Mobiles
Alphorm.com Formation Unity : Monétiser votre jeu 3D sur les plateformes Mobiles
 
Alphorm.com Formation PHP 8 : Les bases de la POO
Alphorm.com Formation PHP 8 : Les bases de la POOAlphorm.com Formation PHP 8 : Les bases de la POO
Alphorm.com Formation PHP 8 : Les bases de la POO
 
Alphorm.com Formation Power BI : Transformation de Données avec DAX et Power ...
Alphorm.com Formation Power BI : Transformation de Données avec DAX et Power ...Alphorm.com Formation Power BI : Transformation de Données avec DAX et Power ...
Alphorm.com Formation Power BI : Transformation de Données avec DAX et Power ...
 
Alphorm.com Formation Techniques de Blue Teaming : L'Essentiel pour l'Analyst...
Alphorm.com Formation Techniques de Blue Teaming : L'Essentiel pour l'Analyst...Alphorm.com Formation Techniques de Blue Teaming : L'Essentiel pour l'Analyst...
Alphorm.com Formation Techniques de Blue Teaming : L'Essentiel pour l'Analyst...
 
Alphorm.com Formation Améliorer le développement avec CSS-in-JS _ Styled Comp...
Alphorm.com Formation Améliorer le développement avec CSS-in-JS _ Styled Comp...Alphorm.com Formation Améliorer le développement avec CSS-in-JS _ Styled Comp...
Alphorm.com Formation Améliorer le développement avec CSS-in-JS _ Styled Comp...
 
Alphorm.com Formation Unity (6/7) : Maitriser l'Intelligence Artificielle de ...
Alphorm.com Formation Unity (6/7) : Maitriser l'Intelligence Artificielle de ...Alphorm.com Formation Unity (6/7) : Maitriser l'Intelligence Artificielle de ...
Alphorm.com Formation Unity (6/7) : Maitriser l'Intelligence Artificielle de ...
 
Alphorm.com Formation Architecture Microservices : Jenkins et SpringBoot
Alphorm.com Formation Architecture Microservices : Jenkins et SpringBootAlphorm.com Formation Architecture Microservices : Jenkins et SpringBoot
Alphorm.com Formation Architecture Microservices : Jenkins et SpringBoot
 
Alphorm.com Formation Active Directory 2022 : Multi Sites et Services
Alphorm.com Formation Active Directory 2022 : Multi Sites et ServicesAlphorm.com Formation Active Directory 2022 : Multi Sites et Services
Alphorm.com Formation Active Directory 2022 : Multi Sites et Services
 
Alphorm.com Formation Vue JS 3 : Exploiter la Composition API
Alphorm.com Formation Vue JS 3 : Exploiter la Composition APIAlphorm.com Formation Vue JS 3 : Exploiter la Composition API
Alphorm.com Formation Vue JS 3 : Exploiter la Composition API
 

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/
  • 4. Mes formations sur alphorm Java, avancé (examen 1Z0-804) alphorm.com™©
  • 5. Les autres formations dév sur Alphorm Java, avancé (examen 1Z0-804) alphorm.com™©
  • 6. Qu’est-ce que Java ? • Langage de programmation généraliste • Créé en 1995 par Sun, héritant du C++ • Géré en communauté • Langage de programmation objet Java, avancé (examen 1Z0-804) alphorm.com™© • Avec un très grande bibliothèque de classes
  • 7. Les publics concernés • Développeurs découvrant Java après avoir suivi les fondamentaux • Développeurs se dirigeant ensuite vers Java serveur • Toute personne intéressée par les technologies Java Java, avancé (examen 1Z0-804) alphorm.com™©
  • 8. Le plan 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. Certification OCP suite à l’examen 1Z0-804 Java, avancé (examen 1Z0-804) alphorm.com™©
  • 10. Présentation des outils • Le site de Oracle sera utilisé pour télécharger Les outils en ligne de commande La bibliothèque de base Un IDE, Netbeans • Nous utiliserons aussi Eclipse Java, avancé (examen 1Z0-804) alphorm.com™© • Nous utiliserons aussi Eclipse • La présentation sera faite sous Windows 7
  • 11. Are you ready ? ☺ Java, avancé (examen 1Z0-804) alphorm.com™©
  • 12. Présentation de la 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
  • 28. Plan • Définition • Les participants • Les JSR Java, avancé (examen 1Z0-804) alphorm.com™©
  • 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™©
  • 78. Encapsulation et polymorphisme Sous-classement Java, avancé (examen 1Z0-804) alphorm.com™© Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels Site : http://www.alphorm.com Blog : http://www.alphorm.com/blog Forum : http://www.alphorm.com/forum Sous-classement
  • 79. Plan • La 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
  • 102. Plan • La spécialisation de classes • La redéfinition de méthode Java, avancé (examen 1Z0-804) alphorm.com™©
  • 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
  • 137. Plan • Modificateur static • Modificateur final • Les champs public static final Java, avancé (examen 1Z0-804) alphorm.com™©
  • 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
  • 187. Plan • Héritage d’implémentation • Composition • Problème posé par la délégation Java, avancé (examen 1Z0-804) alphorm.com™©
  • 188. Héritage d’implémentation • L’hé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
  • 218. Plan • L’interface List • L’interface Map Java, avancé (examen 1Z0-804) alphorm.com™©
  • 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
  • 223. Plan • L’interface Deque • Réaliser une pile conforme Java, avancé (examen 1Z0-804) alphorm.com™©
  • 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
  • 228. Plan • String, StringBuffer et StringBuilder • Les méthodes de StringBuilder Java, avancé (examen 1Z0-804) alphorm.com™©
  • 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
  • 290. Avec try-with-resources • Provoquer le « close » sur un objet • Il faut implémenter AutoCloseable Java, avancé (examen 1Z0-804) alphorm.com™©
  • 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