Title: Formation Java Eclipse et les concepts OBJET
1Formation Java Eclipse et les concepts OBJET
2Objectifs de la formation
- Autonomie métier sur un projet Java
- Capacité à installer et configurer son poste
- Maîtriser les outils et la documentation du
projet - Développer des applications de bout en bout fil
conducteur application Gestion des Congés - Architectures techniques et logicielles
- Analyse et Conception Objet
- Développement par couches métier, accès aux
données, présentation - Présenter les API techniques et la syntaxe dans
leur contexte - Objectifs projet et de développement
dapplications
3Sommaire
- Partie 1 introduction 6
- Partie 2 syntaxe 13
- Partie 3 outils 48
- Partie 4 concepts élémentaires
66 - Partie 5 concepts avancés
78 - Partie 6 accès données JDBC
97 - Partie 7 collections
111 - Partie 9 Junit 138
- Partie 10 internationalisation
151 - Partie 11 entrées / sorties
165 - Partie 12 Interface IHM avec Swing
190 - Partie 13 Log4j 213
4Plan de la formation
- Jour 1
- 1. Introduction à la plate-forme Java
- 3. Syntaxe Java
- 4. Présentation des outils Java
- Jour 2
- 5. Concepts Objet Elémentaires
- 6. Concepts Objets Avancés
5Plan de la formation
- Jour 3
- 7. Accès aux données avec JDBC
- 8. Les collections particularités et
performances - Jour 4
- 9. Gestion des Exceptions
- 10. Tests Unitaires avec JUnit
- 11. Internationalisation i18n
- Jour 5
- 12. Entrées / Sorties
- 13. Client riche Swing
6Partie 1 introduction
- Vous découvrirez dans la plate-forme Java
- Historique
- Une introduction au standard java et la
plate-forme J2EE - Une présentation de la JVM et du JDK
7Présentation
- Historique
- Projet OAK de Sun pour Whirpool electro-ménager
- Portabilité du code
- Langage sûr et orienté réseau
- Version 1.0 en 1996
- Version 1.1 en 1997
- Version 5 (aka 1.5) en 2004
- Caractéristiques
- Java tire de Oak ses caractéristiques
fondamentales - Portabilité du code (byte code ou pseudo code)?
- Orienté réseau / sûr
- Sûreté du langage
- Gestion de la mémoire (ramasse miettes ou Garbage
Collector)?
Site web de SUN Microsystem (java)
http//java.sun.com
8J2SE socle plate-forme
- JRE Environnement de production
- JVM
- Librairies J2SE
- JDK Environnement de développement
- Outils de développement javac, javadoc, jar
- JRE
9Les principales API
- Standard Sun. Il contient deux librairies
- J2SE JVM librairies client serveur
- IHM AWT / Swing (package javax.swing)?
- I/O package java.io
- SGBDR JDBC (package java.sql)?
- RMI (package java.rmi)?
- NET (sockets) (package java.net)?
- Librairies de base du language (packages
java.lang, java.util) - J2EE
- Web JSP, Servlets et JavaBeans
- Java Server Pages et Servlet (package
javax.servlet)? - EJB Enterprise Java Beans
- Session, Entités, Message Driven Bean (package
javax.ejb)? - JCA Java Connector Architecture
- Connecteurs EAI standardisés (package
javax.ressource)?
10Portabilité "write once, run everywhere"
- A l'inverse d'autres langages, les valeurs
minimum et maximum des types primitifs ne
changent pas en fonction du système - C'est l'une des raisons de la portabilité de java
- L'autre raison de la portabilité est la
compilation en bytecode - Celui-ci sera interprété par les différentes
implémentations de la JVM en code spécifique à
l'OS
Fichiers .java
Fichiers .class
JVM Linux
Compilateur Java
JVM Windows
11Portabilité ou rapidité ?
- La traduction du bytecode en langage adapté à la
plate-forme requiert plus de temps que
l'exécution d'un programme écrit en code natif
comme le C - Ce qui a valu sa réputation de lenteur à java
- Les implémentations plus récentes de la JVM
utilisent des techniques d'optimisation - Compilation directe en code natif, en perdant la
notion de portabilité - Compilation à la volée (JIT Just In Time)
compile le pseudo-code Java en code natif à
l'exécution du programme - Recompilation dynamique qui consiste à analyser
le comportement du programme et à recompiler et
optimiser les parties critiques (HotSpot)? - Ces deux techniques permettent à l'application de
prendre avantage de la vitesse d'exécution du
code natif tout en conservant la portabilité
12Javales bases
- Développement en Java présuppose la possession
dun JDK sur le poste - Machine virtuelle (programme java.exe)?
- Compilateur (javac.exe)?
- Profiler de code (javap.exe)?
- Génération de documentation (javadoc.exe)?
- Outils divers
- Attention
- Lexécution dun programme Java ne requiert
généralement quune machine virtuelle (java)
contenue dans le JRE - Le développement nécessite la présence dun
compilateur, contenu pour sa part dans le JDK
13Partie 2 Syntaxe JAVA
- Vous découvrirez dans la syntaxe Java
- Structure Générale du langage
- Typage des variables et des objets en Java
- Opérateurs
- Boucles et Contrôles dexécution
14Présentation
- Java est un langage
- Fortement typé et sensible à la casse
- Qui se rapproche beaucoup du C en terme de
structure syntaxique - Pour écrire un programme, il faut commencer par
créer un fichier - En php monfichier.php
- En c maclasse.c, monheader.h
- En Java MaClasse.java
15Représentation fichier
- Chaque fichier correspond en fait à une ou
plusieurs classes - Cette classe reprend exactement le même nom que
le fichier dans lequel elle est écrite - Son nom commence toujours par une majuscule
public class Employe ...
Employe.java
contenu
16Instruction élémentaire
- Chaque instruction se termine par un point virgule
public class Employe int age 23
17Blocs dinstructions
- Un bloc dinstructions est représenté par des
accolades. Il délimite lappartenance et la
portée des instructions - Bloc de classe ou Corps de la classe
- Encadre les attributs et méthodes de la classe
sa définition. - Bloc de méthode ou Corps de méthode
- Peut être placé n'importe où dans la classe
- Bloc conditionnel ou itératif
- Peut être placé n'importe où dans une méthode
public class Employe int age 23 public void
faireTraitement(String nom) if(nom
null) return else //Traitement à
effectuer
corps de classe
Bloc conditionnel
corps de méthode
Imbrication des blocs d'instructions
18Portée des variables
- Les blocs de traitements sont imbriquables
- La règle de portée des variables concerne cette
imbrication et l'emplacement de déclaration des
variables - Java n'est pas un langage séquentiel. Même si une
variable est déclarée sur une ligne précédente,
elle n'est pas forcément visible dans les lignes
de traitement suivantes. - Lorsqu'une variable est déclaré dans un bloc n,
elle est visible dans les blocs imbriqués n mais
pas dans les blocs "parents"
public void faireTraitement(String nom) if(nom
! null) String copieNom nom if(true)
System.out.println( copieNom ) //
OK System.out.println( copieNom ) //
la variable n'existe pas à ce niveau
19Structure d'une classe
- Chaque classe peut avoir
- des attributs ce sont des variables déclarées
dans le corps de la classe - des méthodes c'est le comportement de la
classe, les fonctionnalités qu'elle propose - La méthode comporte une signature
- visibilité (public, protected, private ou
defaut)? - type de retour (void pour indiquer qu'il n'y a
pas de retour)? - nom de méthode
- arguments
- Levée possible d'exception (throws)?
public class Employe int age 23 //Attribut
ou membre de classe public void
poserConge(String dateDebut, String
dateFin) //Traitements réalisés par la
fonctionnalité poser congé
20Classes internes
- Une classe C1 peut également contenir la
définition d'une autre classe C2. - On dit que C2 est une classe interne de C1
- Ce principe n'a d'intérêt que si C2 n'a d'utilité
que dans C1 - Pour un même fichier .java, il ne peut y avoir
qu'une seule classe publique - Une classe interne peut elle-même contenir
d'autres classes internes - Les classes internes conservent un lien implicite
avec leur classe externe dont elles peuvent
utiliser les attributs et méthodes
21Données retournées par une méthode
- Sur lexemple de code précédent, la déclaration
de la méthode comporte le mot clé void - Une méthode doit toujours avoir un type de retour
- Cela peut être un type scalaire (int, boolean)
ou un autre objet - Exception pas de type de retour pour les
constructeurs - Si la méthode ne renvoie rien, on indique void à
la place du type
22Membres et méthodes d'instance VS de classe
- Un attribut, une méthode ou un bloc statiques
sont définis par le mot clé static - Ils sont créés une seule fois lors du
chargement de la classe en mémoire - Ils sont associés à la classe et non à une
instance de cette classe - On les appelle attributs ou méthodes de classe,
en opposition aux attributs ou méthodes
d'instance qui eux ne sont pas statiques mais
créés au chargement d'une instance. - On y accède avec le nom de la classe, pas avec
l'identité d'un objet - Les attributs statiques sont partagés par toutes
les instances de la classe - Une méthode de classe statique ne peut appeler
que des méthodes elles mêmes statiques
public class Logger public static int
defaultLevel //Attribut statique, partagé par
toutes les instances de cette classe static //
Bloc statique d'initialisation System.out.println(
"Logger chargé") public static void trace(int
level, String message) // Méthode statique //
Appel au membre de classe defaultLevel if( level
gt Logger.defaultLevel )
23Commentaires
- Trois types de commentaires sont utilisés
//Commentaire simple
/Commentaire multiligne /
/ Commentaire javadoc Utilisé pour la
génération automatique de documentation,
Comprend un ensemble de tags spécifiques les
tags HTML _at_author lta href"http//masociete.
com"gtMaSociétélt/agt /
24Les packages
- Intérêt des packages
- Ils permettent de regrouper logiquement les
classes - Par fonctionnalités homogènes métier ou
techniques - Couche métier présentation, domaine,
intégration, services communs - Tiers Technique gestion des sessions
- Lorsqu'on utilise une classe, il faut l'importer
explicitement, en début de fichier, avant la
déclaration de notre classe, en précisant son
package - Exception pour le package java.lang disponible
par défaut
package test //Emplacement de la classe
"AutreClasse" import monpackage.MaClasse
//Import de la classe MaClasse située dans le
package monpackage import java.io. //Import de
toutes les classes situées dans le package
java.io public class AutreClasse
25Exemple de package
- La classe Employe appartient au package du domaine
26(No Transcript)
27Intérêts dune visibilité limitée
- Une bonne architecture doit apporter un
découplage package / classe - La visibilité permet de verrouiller le couplage,
en nexposant à lextérieur quune partie du
package, idéalement une seule classe. - Les autres classes du package auront une
visibilité par défaut
28Le typage
- Lorsquon parle de type en java, il faut
comprendre type dobjet, défini par - un nom
- son emplacement dans la hiérarchie des packages.
- Un objet est
- une instance de classe
- créé, ou instancié avec lopérateur new
- Les types primitifs
- Ce ne sont pas des objets à proprement parler
mais de simples variables. - Ils n'ont pas besoin d'être instanciés avec new.
Integer age new Integer(24)
int age 24
29Déclaration et affectation
- Lorsqu'on déclare une variable en java, on
précise toujours son type. - La création se déroule en deux étapes qui peuvent
être réalisées dans le même traitement - Déclaration
- Affectation / instanciation
Employe emp // Déclaration emp new Employe()
// Affectation / instanciation int age 24 //
Déclaration affectation
30(No Transcript)
31Bonnes pratiques
- La classe String est utilisée très couramment, si
bien qu'on oublie la classe StringBuffer - Cette dernière représente des chaînes de
caractères pouvant être modifiées, alors que
String est read-only - Chaque fois que lon désirera modifier lobjet
String, il y aura en fait création dun nouvel
objet - Elle est une centaine de fois plus rapide pour la
concaténation de chaînes - Elle génère deux fois moins de bytecode à la
compilation
StringBuffer str new StringBuffer("Optimisation
") str.append("par le code")
32Les tableaux
- Les tableaux comportent des désavantages
- Ils ont une taille fixe définie lors de
l'instanciation - Très gourmand lorsquil sagit de
redimensionnement - Les objets quils contiennent doivent tous être
du même type - Pas de tri
String prenom new String3 prenom0
"toto" prenom1 "titi"
ou
String prenom "toto", "titi"
33Les Opérateurs
- Il existe une grande quantité d'opérateurs
- Affectation
- Mathématique
- Incrémentation / décrémentation
- Relationnels
- Logiques
- Bit à bit
- Ternaire
34Opérateur d'affectation
- L'affectation est réalisé au moyen de l'opérateur
"" - Type primitif
- Affectation copie une valeur
- Type objet
- Les objets sont manipulés par référence. La
référence est l'adresse mémoire où est stocké
l'objet. - L'affectation provoque non pas une affectation de
valeur, mais l'affectation de la référence de
l'objet, pointant donc vers le même objet en
mémoire
35Exemple d'affectation
- Types primitifs
- Types objet
int a 0 int b a int a 5
b vaut 0, tandis que a vaut 5 (passage par
valeur)?
Employe emp1 new Employe() Employe emp2 new
Employe() emp1.setAge(25) emp2.setAge(33) emp1
emp2 emp2.age 40
L'âge de l'employé 1 vaut aussi 40 (passage par
référence
36Opérateurs mathématiques
- Les opérateurs mathématiques sont les mêmes que
dans beaucoup d'autres langages - l'addition (), la soustraction (-), la division
(/), la multiplication () et le modulo (, le
reste de la division entière) - Il existe une notation abrégée pour effectuer en
même temps une opération et une affectation
int a 0 a 5
Affecte à la variable a son ancienne valeur
incrémentée de 5
37Incrémentation et décrémentation
- Les opérateurs et -- permettent respectivement
d'incrémenter et décrémenter un entier - opérateur préfixé signifie que la valeur est
modifiée avant l'opération - opérateur suffixé signifie que l'opération est
effectuée avant la modification de la valeur
int a 0 int b a //b vaut 1
int a 0 int b a //b vaut 0
38Opérateurs relationnels
- Ils créent un résultat de type boolean et sont
utilisés dans les tests (conditions et
itérations)? - plus petit que (lt)?
- plus grand que (gt)?
- plus petit que ou égal à (lt)?
- plus grand que ou égal à (gt)?
- équivalent ()?
- non équivalent (!)
- Ces opérateurs sont réservés aux types primitifs.
- Lorsqu'on compare deux objets avec l'opérateur
, ce n'est pas la valeur de l'objet mais leur
référence qui est testée. - Le test renverra true si les deux identités
pointent vers la même adresse mémoire (le même
objet)?
39Opérateurs logiques
- Ils permettent d'aggréger les tests pour produire
une valeur de type boolean - Ces opérateurs logiques ont un comportement de
"court-circuit" - L'expression est évaluée jusqu'à ce que la
véracité ou la fausseté de celle ci soit
déterminée sans ambiguïté
int i 10 if( (i gt 5) (i lt 10) ) //Produit
true
int i 10 int j 50 if( (i gt 5) (i lt 10)
(j 50) ) //Produit false
Le test marqué en rouge ne sera pas vérifié.
L'expression est fausse avant.
40Opérateur ternaire
- Remplace le test if...else
- Il agrège sur une même ligne le test, et les
traitements (simples) si le test est vrai ou faux
int i 10 i lt 10 ? //traitement si vrai
//traitement si faux
41Boucles et Contrôles dexécution
- Les structures de contrôle retournent un résultat
de type boolean - Si ce résultat est vrai, les instructions du bloc
seront exécutées
42Le bloc conditionnel ifelse
- Ce contrôle est le contrôle de base de tout
langage. - La clause else est optionnelle.
- Le test permet deffectuer des instructions si la
condition testée est vraie
int i 10 If( i 0) //Si i0 effectuer les
traitements indiqués entre les accolades else //
sinon effectuer celui-ci
43Les blocs itératifs while et do...while
- La condition est testée à chaque itération. Les
instructions sont répétées jusqu'à ce que le
condition soit fausse - Pour le bloc do...while, la condition est testée
à la fin du bloc. Les instructions seront
exécutées au moins une fois.
int i 0 while( i lt 10) //Tant que i inférieur
à 10, effectuer les traitements i
int i 20 do //Les traitements seront exécutés
une seule fois i while( i lt 10)?
44La boucle for
- La boucle for effectue
- une initialisation avant la première itération.
- puis un test conditionnel
- et, à la fin de chaque itération, une
instruction d'itération .
//La boucle suivante liste tous les caractères
ASCII for( char c 0 c lt 128 c) if (c
! 26 ) // Effacement de l'écran
ANSI System.out.println( "value " (int)c
" character " c)
45break et continue
- Le déroulement de toutes les instructions
d'itération peut être contrôlé de l'intérieur du
corps de la boucle. - L'instruction break sort de la boucle sans
exécuter la suite des instructions. - L'instruction continue arrête l'exécution de
l'itération courante, et l'exécution reprend en
début de boucle avec l'itération suivante.
//La boucle suivante liste tous les caractères
ASCII for( char c 0 c lt 255 c) if (c
! 26 ) continue if (c 128
) break System.out.println( "value "
(int)c " character " c)
46L'instruction switch
- L'instruction switch sélectionne un morceau de
code parmi d'autres en se basant sur la valeur
d'une expression entière.
for(int i 0 i lt 100 i) char c
(char)(Math.random() 26 'a') System.out.print
(c " ") switch(c) case 'a' case 'e' case
'i' case 'o' case 'u' System.out.println("vowe
l") break case 'y' case 'w'
System.out.println("Sometimes a vowel")
break default System.out.println("consonant")
47Pour aller plus loin
- Tutoriel JAVA de Sun
- http//java.sun.com/docs/books/tutorial/
- Penser en Java de Bruce Eckel
- http//penserenjava.free.fr/
- Emmanuel Puybaret, auteur du cahier du
programmeur Java chez Eyrolles - http//www.eteks.com
48Partie 3 Les outils
- Vous découvrirez dans les outils Java
- Présentation dEclipse
- Présentation de loutil JavaDoc
- Présentation du packaging avec Jar
49Présentation Eclipse
- Eclipse est une plate-forme de développement
d'applications - S'exécute sur un grand nombre d'OS (développée en
Java)? - language-neutral
- HTML, Java, C, JSP, EJB, XML...
- Le projet fut lancé en 1999 par OTI et IBM avec
une équipe - de 40 développeurs à plein temps
- dispersés géographiquement (Ottawa, Toronto,
Saint Nazaire...)? - De grands groupes viennent deviennent membre du
conseil au fil du temps - 2001 Borland, Red Hat, TogetherSoft...
- 2002 Serena, Sybase, Fujitsu, Hitashi, HP,
Oracle, SAP... - 2003 OMG, Fraunhofer Institute, Ericsson
Intel...
50Schéma de la plate-forme
Another Tool
Eclipse Platform
Help
Workbench
Java Development Tools (JDT)?
JFace
SWT
Team
Your Tool
Plug-in Development Environment (PDE)?
Workspace
Debug
Their Tool
Platform Runtime
Eclipse Project
51Espace de travail
- Le développement de projets se fait dans un
espace de travail séparé de la plate-forme - Cette topologie permet de déplacer aisément ses
projets, notamment grâce aux fonctionnalités
d'import/export
52Librairie graphique
- La librairie graphique utilisée pour le
développement a été entièrement refondue. Elle
s'appelle SWT (Standard Widget Toolkit). Ses
atouts - Simplicité
- Faible volumétrie
- Rapidité
- Portabilité
- Utilisation de widgets natifs quand disponibles
- Emulation de widgets quand indisponibles
nativement
53(No Transcript)
54Présentation JavaDoc exemple
/ Classe de démarrage _at_author lta
href"http//www.objis.com"gtObjislt/agt / public
class BootStrapGestionEmployes /
La méthode statique main est chargée au démarrage
de la JVM. C'est le point d'entrée d'une
application. On affiche le message "Hello
World" sur la sortie _at_param args
/ public static void main(String args)
System.out.println("Hello World")
55Génération de la javadoc (1/3)?
- Sélectionner le projet
- Aller dans le menu Projet gt Generate Javadoc
56Génération de la Javadoc (2/3)?
- Sélectionner la librairie rt.jar
- Cette étape permet dinclure les informations de
lAPI runtime (J2SE) dans la documentation - Cliquer sur suivant
57Génération de la Javadoc (3/3)?
- Cocher la case Save the settings
- Cette étape permet de créer un script ant pour
regénérer cette documentation - Pour regénérer la doc il suffit ensuite de faire
un clic droit sur le script et sélectionner Run
javadoc Wizard
58Résultat de la génération
Explorateur de packages
Description de la classe
Explorateur de classes
Description des attributs, constructeurs et
méthodes
59Présentation Jar
- JAR est le diminutif de Java ARchive
- Les archives peuvent être exécutées
automatiquement - Elle permettent de distribuer plus facilement les
fichiers .class d'une application, d'un
composant.
60Création dune archive jar de lapplication
- Les archives peuvent être ajoutées à la librairie
dautres projets - Pour créer une archive du projet, faire un clic
droit sur ce dernier et sélectionner export gt jar
file - En ligne de commande avec loutil jar
- Ouvrir une invite de commandes
- Utiliser la commande depuis le dossier principal
du projet - jar cvf ltnom_du_jargt.jar
61Sélection du contenu
Inclure les classes
Inclure les sources (pour le développement)?
Destination
62Enregistrement de la configuration
Fichier .jardesc
Sauvegarde la configuration et permet de
regénérer le JAR ultérieurement (clic droit sur
le fichier)?
63Fichier manifest
MANIFEST.MF
Contient les options dexécution du package
Classe contenant la méthode main
64Exécution du JAR
65Utilisation d'archives dans un projet
- Lors de l'utilisation d'archives dans une
application - Il faut ajouter l'archive au classpath afin de
pouvoir utiliser les classes qu'elle contient. - Notion de CLASSPATH
- Variable denvironnement dictant au compilateur
et à la machine virtuelle comment localiser les
classes nécessaires à un projet - Vos classes
- Les librairies utilisées
66Partie 4 Concepts élémentaires
- Vous découvrirez les concepts objets en Java
- gt Classes, Objets et Identité
- gt Encapsulation
- gt Constructeurs
- gt Méthodes et attributs
67Définition dun objet
- Un objet est une entité dotée de caractéristiques
- Ses attributs (Java) ou propriétés (UML)
couleur, N secu etc... - Ses méthodes (Java) ou opérations (UML)
caractéristiques comportementales
(sauter/démarrer/tirer).
68Objet Employe
Classe description de l objet
Objet instance de classe
identité
DupondEmploye
nom André prenom
Roux poserConges()consulterConges()?
état
comportement
69Concept dabstraction
- L'abstraction consiste à
- Prendre en compte les attributs de l'objet qui
nous intéressent, dans le cadre du cahier des
charges - Refactoriser les classes extraction des
attributs ou méthodes en commun, pour les
mutualiser dans une classe de niveau supérieur
70Encapsulation
- Lencapsulation consiste à réduire la visibilité
des attributs et méthodes d'une classe, afin de
n'exposer que les fonctionnalités réellement
nécessaires pour les classes utilisatrices. - Cette réduction de visibilité est rendue possible
avec - private visibilité interne à la classe
- public visibilité pour toutes les classes
- protected visibilité pour les classes enfants
- default (aucun des modes ci-dessus nest
spécifié) visibilité pour les classes du même
package
71Notation UML de lencapsulation
- password anciennete nom prenom
poserConges()consulterConges()?
Employe
private
public
protected
default
72Les getter et setter
- Les attributs privés ne sont pas accessibles il
leur faut des accesseurs dédiés - Lecture getter
- Ecriture setter
- Les noms de ces opérations suivent la convention
suivante - Ils sont constitués de get ou set suivant le type
d'accesseur, suivi du nom de l'attribut débutant
par une majuscule - Exemple d'attribut
- private String password
- Exemple d'accesseurs sur l'attribut password
- public String getPassword()?
- public void setPassword(String p)?
73Les constructeurs
- Un constructeur est la méthode dinitialisation
d'un objet - Le nom de cette méthode est le même que le nom de
la classe et elle n'a pas de type de retour - Il sert à initialiser létat de lobjet quil
crée - Une classe peut comporter plusieurs constructeurs
ayant des arguments différents - On fait appel au constructeur dun objet avec le
mot clé new - new Employe("Bernard") indique que lon appelle
un constructeur de la classe Employe, qui prend
un argument de type String
74Exemple de constructeurs
- public class Employe
-
- private String nomprivate String
prenomprivate String login - private String password
-
- public Employe()
-
-
-
- public Employe(String nom)
- this.nom nom // this désigne lobjet courant
(cette instance dEmploye)? -
75Bonnes pratiques créations inutiles
- La création d'objets est coûteuse. Il faut éviter
d'en créer inutilement
Objet1 o1 new Objet1() Objet2 o2 new
Objet2() if(demande 1)? o1.initialiser() else
o2.initialiser()
L'un des objets ne sera pas utilisé
if(demande 1) Objet1 o1 new
Objet1() o1.initialiser() else Objet2 o2
new Objet2() o2.initialiser()
76Bonnes pratiques réutilisation d'objets
- Il faut proscrire la création d'objets à
l'intérieur d'une boucle. - Cet anti-Pattern peut être désastreux en terme de
consommation de la mémoire - Préférer la réutilisation d'objet, qui sera
instancié avant la boucle, et modifié à
l'intérieur
for(int i0 iltemployes.length i) Employe
emp new Employe() //Création d'un objet à
chaque passage emp (Employe) employesi
Employe emp new Employe() for(int i0
iltemployes.length i) emp (Employe)
employesi //Réutilisation d'un seul objet
Employe
77La destruction d'objets
- L'un des objectifs du langage Java est
d'affranchir le développeur des problématiques de
gestion de mémoire rencontrées avec le C - La gestion de la mémoire a donc été automatisée.
Ce rôle est délégué au "Garbage Collector" ou
"ramasse-miettes" - Il libérère la mémoire des objets non utilisés,
c'est-à-dire qui n'ont plus de référence dans le
stack de la mémoire
78Partie 5 concepts avancés
- Vous découvrirez dans les concepts objets avancés
- Héritage entre classes
- Polymorphisme
- Interfaces
- Classes abstraites
79Définition et de lhéritage
- Lhéritage, appelé aussi dérivation, est une
notion qui implique - Une seule classe mère ou super-classe
- Pas d'héritage multiple ( de code) en Java
- La classe mère de toutes les classes Java est la
classe java.lang.Object - Une ou plusieurs classes dérivées dites
spécialisées ou sous-classes - Elles héritent des attributs et méthodes public
et protected de leur classe mère, par héritage
direct ou en cascade (plusieurs niveaux
d'héritage)? - Elles peuvent
- Redéfinir les méthodes de la classe mère
- Enrichir le comportement en ajoutant dautres
méthodes
80Héritage entre lemployé et le manager
GENERALISATION
SPECIALISATION
81Héritage en cascade
82Implémentation
- L'héritage simplémente avec le mot clé extends
suivi du nom de la classe mère
public class Manager extends Employe
83(No Transcript)
84Spécificités de lhéritage
- De même que le mot clé this désigne l'instance de
classe courante, le mot clé super désigne
l'instance de la classe parente - L'héritage implique la notion de compatibilité
ascendante - On peut dire qu'un manager "est une sorte"
d'employé - Java offre la possibilité d'empêcher d'hériter
d'une classe - Il suffit de déclarer une classe comme final
(plus de late binding)?
public class Manager extends Employe public
Manager(String login, String password) super(
login, password ) // appel au constructeur de la
classe Employe super.faireTraitement() // appel
à la méthode faireTraitement de la classe
Employe System.out.println( super.nom ) //
récupération de l'attribut nom de la classe
Employe
public final class PDG
85Polymorphisme
- Le polymorphisme désigne une méthode
- Héritée d'une classe mère, mais redéfinie dans la
sous classe - Avec la même signature (type de retour, nom et
arguments)? - On utilise le polymorphisme pour effectuer une
implémentation spécialisée des traitements - La méthode poserConges() pour lemployé déclenche
une demande avec une attente de validation - La méthode poserConges() pour le manager
déclenche une demande qui est automatiquement
validée
86Polymorphisme sur méthode poserConges()?
polymorphisme
87Promotion des types CAST implicite
- Il existe une compatibilité ascendante entre les
objets - Un manager EST un employé
- Linverse est faux tout employé n'est pas
manager - On peut faire une conversion de type ( appelée
aussi transtypage ou CAST ) implicite - Le transtypage explicite (ou "down cast") doit se
faire si l'on désire récupérer le Manager à
partir du type Employe - Note si l'employe n'est pas un manager, une
erreur sera générée
Employe emp new Manager()
Manager man (Manager) emp
88Late Binding
- Dans le cadre du polymorphisme, si l'on appelle
la méthode poserConge(), le compilateur ne peut
connaître à l'avance si la méthode sera appelée
sur l'objet Employe ou Manager. - La résolution de l'appel de méthode se fait lors
de l'exécution du programme (résolution tardive
ou late binding)?
89Définition de linterface
- Une interface nest pas une classe
- On ne peut pas créer d'instances d'une interface
- Une interface est un contrat déclaratif
- On déclare uniquement la signature des méthodes
- Limplémentation est déléguée aux classes qui
implémentent cette interface ou contrat - Elle peut avoir des attributs
- Ces attributs sont des constantes, et doivent
donc être initialisés ( à éviter )?
public interface IGestionConges public String
titre "Interface de gestion des
congés" public abstract void poserConges() pub
lic abstract Collection consulterConges()
90Utilisation des interfaces dans une communication
entre composants
91Implémentation dune interface
- Une classe peut implémenter une ou plusieurs
interfaces grâce au mot clé implements - Il doit dès lors obligatoirement implémenter
toutes les méthodes décrites dans
l(es)interface(s)? - Dans le cas contraire, la classe devient
abstraite
public class Employe implements IGestionConges,
Interface2, Interface3 public void
poserConges() //Fourniture dune
Implémentation en Java //Redéfinition par
rapport à la classe mère polymorphisme publ
ic void consulterConges() // Fourniture dune
Implémentation en Java // autres méthodes
issues de I2, I3
92Interfaces normaliser les contrats de
communication
- Le pattern Factory fabriquer(instancier) des
objets présentant un contrat de
communication(Interface) stable - Cela permet de remplacer lobjet Employe par un
mock object comprendre objet fictif,
contenant un état défini à l'avance. L'utilité
d'un mock est de simuler les données de
l'application afin d'effectuer des tests le plus
en amont possible
93Implémentation de plusieurs interfaces
- Lobjet Manager peut communiquer avec plusieurs
systèmes différents - Système GestionRH interface IGestionnaireRH
- Système Authentification interface
IAuthentification
94En résumé
- Une classe ne peut avoir quune seule classe mère
- Par contre elle peut implémenter plusieurs
interfaces - Une interface peut quant à elle hériter de
plusieurs interfaces - Elle additionne ainsi les services proposés
95Classe abstraite
- Une classe est abstraite lorsque
- Le mot-clef "abstract" est présent dans la
déclaration de la classe - Elle possède une méthode abstract
- Les classes dérivées ont lobligation
dimplémenter les méthodes abstract de
leur classe mère, sans quoi elles deviennent
elles-mêmes abstraites. - Condition nécessaire et suffisante...
- Une classe abstract peut également contenir
- Des attributs
- Des méthodes concrètes
- Dans tous les cas, une classe abstraite est
non-instanciable
96Exemple de classe abstract
- Une classe Bateau pourrait déclarée en classe
abstraite. - On ne peut pas créer d'instance sans connaître le
type exact que l'on désire construire (frégate,
destroyer...)? - On place un mot-clef abstract sur la
déclaration de la classe
public abstract class Bateau boolean
moteur Collection equipage public void
virer() // Mutualisable, l'implémentation se
fait ici public abstract void avancer() //
Présence d'un moteur ou seulement des voiles ?
97Partie 6 Accès données avec l'API JDBC
- Vous découvrirez dans la couche du domaine
- JDBC pour communiquer avec une base de données
- Configuration et séquence de connexion
- Manipulation des résultats
98Architecture
Présentation
DAO Domaine
Controle
Framework mapping Objet relationnel (ORM)?
Domaine DAO
- Hibernate- TopLink- EJB Entité
JDBC
Driver JDBC
JDBC
Pool
JVM
Driver JDBC
ODBCNet8
Agent SGBDR
Pool physique
SGBD
OS
ODBC Net8
99Communication avec la base
- Pour dialoguer avec une base de données il faut
- Une base de données
- Un agent local pour dialoguer avec la base
- ODBC
- Net8
- Un driver JDBC, qui
- passe les requêtes SQL à lagent
- récupère les jeux denregistrement
100Principaux objets JDBC
- Connection
- Représente la connexion physique à la base de
données - Statement
- Représente la requête à exécuter sur la base
- ResultSet
- Contient le jeu denregistrements récupéré dans
la base
101Configurer un pilote Mysql
- Le pilote Mysql est fourni à ladresse suivante
- http//www.mysql.com/products/connector/
- Extraire larchive jar et la placer dans le
dossier shared/lib du serveur
102Connexion au SGBD avec Mysql
- Chargement du driver JDBC
- Obtention dune connexion
String driver "com.mysql.jdbc.Driver"Class.for
Name(driver)
Méthode statique de classe
String url "jdbcmysql//lthôtegt/ltBDgt"Class.for
Name(url)
103Méthodes statiques
- Un objet peut contenir des méthodes statiques,
accessibles dans le classpath de la JVM. - Lobjet na pas besoin dêtre créé.
- Ces méthodes sont dites one shot .
- Elles renvoient un résultat, mais ne manipulent
pas un état, puisque lobjet nest pas créé.
Stack
Heap
JVM
Class.classforName()?
104Coding séquence de connexion JDBC
String MysqlUser "root" String MysqlPassword
"" Connection cn null Statement st
null ResultSet rs null try //Chargement
d'un driver Mysql Class.forName("com.mysql.jdb
c.Driver") //2.Le driverManager tente
d'instancier une connexion vers la base, en
//utilisant le driver instancié précédemment
cn DriverManager.getConnection("jdbcmysql//loc
alhost/formation", MysqlUser, MysqlPassword)
//3.Création d'un objet Statement
st cn.createStatement() //4.L'objet
statement exécute la requête et retourne les
résultats dans un objet ResultSet rs
st.executeQuery("SELECT FROM employe WHERE
login'" login "' AND pwd'" password
"'") //5.On boucle ensuite sur le jeu
d'enregistrements . catch(SQLException e)
e.printStackTrace() catch(ClassNotFoundExcep
tion e) e.printStackTrace()
105Coding libération des ressources
try //séquence de connexion JDBC
catch(SQLException e) e.printStackTrace()
catch(ClassNotFoundException e)
e.printStackTrace() finally try
if(rs ! null) rs.close()
catch(SQLException e)
e.printStackTrace() try if(st
! null) st.close() catch(SQLException e)
e.printStackTrace() try
if( cn ! null) cn.close()
catch(SQLException e)
e.printStackTrace()
106Exceptions
- En Java les exceptions doivent être catchées
- Lorsquune méthode lance une exception
- son appel doit être englobé dans un bloc try
- La ou les erreurs susceptibles dêtre lancées
sont récupérées dans un ou plusieurs bloc(s)
catch
try//Tentative de connexion écriture dans un
fichier catch(SQLException e) catch(IOExceptio
n e1)
107Manipulation des données avec le ResultSet
- Cest une collection contenant des
enregistrements - Elle est parcourue grâce à un curseur et une
boucle while - Ce curseur récupère les enregistrements un par
un. - On accède ensuite aux différents champs grâce à
différents accesseurs qui retournent des types de
données calqués sur les types inhérents au SGBD
(getString, getBlob)?
curseur
R E S U L T S E T
Enregistrement 1
Enregistrement 2
Enregistrement 3
Enregistrement 4
Enregistrement 5
Enregistrement 6
Enregistrement 7
108Coding récupérer les enregistrements
//Connexion à la base et obtention du
recordset //Bouclage sur le recordset et
affichage des informations quil
contient while(rs.next())
System.out.println(rs.getInt("ID"))
System.out.println(rs.getString("prenom"))
System.out.println(rs.getString("nom"))
109Comparaisons
- La comparaison de valeurs de chaînes de
caractères seffectue avec la méthode equals - Comparaison de valeur
- Comparaison de ladresse mémoire gt même objet ?
String valeur "Dupond" String nom
valeur If(nom.equals("Dupond")) //vrai
String valeur "Dupond" String nom
valeur If(nom valeur) // faux
110Mapping SQL lt-gt Java
111Partie 7 Collections
- Vous découvrirez dans les collections Java
- Présentation des principales collections
- Tris et Comparaisons entre objets dune
collection
112Types de collections
- Il existe différents types de collections
- Vecteurs
- Ensemble dobjets pouvant être retrouvés par leur
référence - Listes
- Ensemble dobjets classés par une position
- Ensembles
- Ensemble dobjets dun même type
- Tables de hachage
- Objets classés avec une clé qui est elle-même un
objet - Piles
- Ensemble dobjets pouvant être simplement posés
ou retirés (push et pull)? - Les collections, contrairement aux tableaux, ont
une taille variable
113LAPI des collections
Collection
Iterator
Map
List
Set
SortedMap
HashTable
Vector
SortedSet
HashSet
TreeMap
TreeSet
Interface
Classe
114Les types implémentant Collection
- Ils contiennent nimporte quel type dobjet (pas
de primitif)? - Ils sont décomposés en deux sous ensembles
- List
- doublons autorisés, accès aléatoire avec get(int
index)? - Set
- Pas de doublon, pas daccès aléatoire car lindex
consiste en une table de hachage
Vector v new Vector() v.addElement(new
Object()) v.addElement("Bernard")
115Les types implémentant Map
- Contiennent des associations clé objet
clé3
objet3
clé2
objet2
clé1
objet1
HashMap v new HashMap() v.put("cle1", new
Object()) v.put("cle2", "Bernard")
116Les interfaces Enumeration et Iterator
- Elle permettent de lire tous les éléments dun
type Vector ou HashTable. - Un objet implémentant linterface Enumeration est
obtenu en appelant la méthode elements() ou
keys(). - Un iterateur est obtenu avec la méthode
iterator(). Il permet de supprimer des éléments
avec la méthode remove(). - Ces interfaces sont la seule manière daccéder
aux éléments dune collection - En effet, on ne peut pas faire de get(int index)
sur une collection, car les objets de lensemble
Set nont pas dindex mais une table de hachage
Enumeration e vecteur.elements() while(e.hasMor
eElements()) String prenom (String)
e.nextElement()
117Meilleures Pratiques
- On préfèrera toujours utiliser les interfaces
Collection ou Map pour manipuler les
implémentations réelles - Le type dobjet réel sera déclaré à un seul
endroit, lors de sa création - Toutes les classes utilisatrices manipuleront le
type générique interface, évitant une réécriture
si limplémentation change (ex HashSet au lieu
de Vector).
private Vector v public Collection getListe()
return v
private HashSet v public Collection getListe()
return v
Collection maListe unObjet.getListe()
Collection maListe unObjet.getListe()
118Problématique de la comparaison d'objets
- Lorsque les objets stockés dans des collections
avec tri (TreeSet, TreeMap) sont de type
Integer, String - Les fonctionnalités de tri et comparaison ne
nécessitent pas dintervention particulière - Lorsque ce sont des types définis par
lutilisateur, par exemple un objet Employe - Il faut
- Implémenter linterface Comparable et sa méthode
compareTo - Redéfinir la méthode equals (appartenant à
Object)? - Redéfinir également hashcode, qui est utilisé
comme index des hashtables
119Comparaison dégalité
- Légalité entre deux objets est testée avec la
méthode equals - Les deux objets testés doivent être de même type,
ce qui est vérifié avec lopérateur instanceof
public class Employe implements
Comparable public boolean equals(Object
objetAComparer) if(objetAComparer instanceof
Employe) if( ( (Employe) objetAComparer).id
this.id )? return true return false
120Comparaison quantitative
- Linterface comparable déclare la méthode
compareTo - Elle prend un objet en argument et retourne
- 0 si les deux objets sont identiques
- Valeur négative si lobjet est plus petit que
lobjet passé en argument - Valeur positive si lobjet est plus grand que
lobjet passé en argument
public class Employe implements
Comparable public int compareTo(Object
objetAComparer) if(objetAComparer instanceof
Employe) if( ( (Employe) objetAComparer).id
this.id ) return 0 if( ( (Employe)
objetAComparer).id gt this.id) return -1 if( (
(Employe) objetAComparer).id lt this.id) return
1 return -2
121Méthodes de tri
- Tous les types de collection ne prennent pas en
charge le tri - Tri manuel
- Les tableaux sont triés par appel à la méthode
sort()? - Tri automatique
- Les types implémentant sortedSet et sortedMap
sont triés en automatique - Autres méthodes de tri
- Les autres types effectuent un classement
différent soit basé sur le hashcode de lobjet,
soit simplement en conservant lordre dinsertion
des données
122Partie 8 Exceptions
- Vous découvrirez dans la gestion des exceptions
Java - Présentation des Exceptions
- Gestion locale des Exceptions
- Gestion centralisée des Exceptions
123Architecture API Exception
124Présentation
- Les exceptions sont le mécanisme par lequel java
gère les erreurs dexécution - Elles héritent toutes de la classe Throwable
- Elles contiennent des informations sur l'erreur
générée - cause
- méthode ayant généré l'erreur
125(No Transcript)
126Checked et Unchecked
- On dénote deux types d'exceptions
- Les "checked exceptions", qui sont traitées dans
les méthodes trycatch - Classes dérivant de java.lang.Exception
- Les "unchecked exceptions" qui correspondent à
des problèmes impossibles à détecter à la
compilation, comme la saturation de la mémoire - Classes dérivant de java.lang.RuntimeException
- Classes dérivant de java.lang.Error
127Traitement des "unchecked exceptions"
- Les catégories RuntimeException, Error et leurs
classes dérivées n'ont pas besoin d'être traitées
dans des blocs try...catch, même si une méthode
relance explicitement une exception de ce type. - C'est la JVM qui se charge du traitement, et de
l'affichage de l'état de la pile sur la console. - Sans cette gestion automatisée, le code de
traitement des erreurs serait plus important que
le code utile.
128(No Transcript)
129(No Transcript)
130(No Transcript)
131(No Transcript)
132Lancement d'exception
- L'exécution de certaines méthodes peut provoquer
une erreur que l'application devra prendre en
compte. - On signale que la méthode peut littéralement
lancer une exception en ajoutant un throw à la
signature de la méthode
public EmployeVO getEmploye(String login, String
password) throws ErreurDomaine
133Le bloc trycatch
- Lappel aux méthodes pouvant lancer une
erreur/exception doit être englobé dans un bloc
trycatch - La méthode printStackTrace de lobjet Exception
permet de retracer la pile des appels de méthode,
jusquà lappel ayant générée lerreur.
try // Ecrire dans un fichier catch(FileNotFound
Exception e) e.printStackTrace()
134Cinématique d'affichage d'erreur
Stack
setValueAt updateData propertyChange firePropertyC
hange
JVM
problème d'exécution
affichage de l'erreur et de l'état de la pile
d'exécution
135Clôture des traitements avec finally
- Dès quune exception intervient, les traitements
suivants dans le bloc try sont éludés. - Il peut néanmoins être nécessaire deffectuer
dautres traitements - libérer les ressources, comme la fermeture de la
connexion vers un fichier - On utilise pour cela le bloc finally, qui sera
toujours exécuté (avec ou sans passage dans le
bloc catch)?
try //Ecrire dans un fichier catch(Exception
e) e.printStackTrace() finally // Libération
de la ressource (fermeture d'une connexion avec
close())?
- Si l'exception n'est pas relancée mais traitée
dans le bloc catch, l'exécution de la méthode se
poursuit après le dernier catch
Slid