Formation Java Eclipse et les concepts OBJET - PowerPoint PPT Presentation

1 / 228
About This Presentation
Title:

Formation Java Eclipse et les concepts OBJET

Description:

Formation Java Eclipse et les concepts OBJET Configuration d'un comportement sp cialis Le logger d fini ici utilise une sortie HTML et un niveau de log warn ... – PowerPoint PPT presentation

Number of Views:1157
Avg rating:3.0/5.0
Slides: 229
Provided by: objisComc
Category:

less

Transcript and Presenter's Notes

Title: Formation Java Eclipse et les concepts OBJET


1
Formation Java Eclipse et les concepts OBJET
2
Objectifs 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

3
Sommaire
  • 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

4
Plan 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

5
Plan 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

6
Partie 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

7
Pré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
8
J2SE socle plate-forme
  • JRE Environnement de production
  • JVM
  • Librairies J2SE
  • JDK Environnement de développement
  • Outils de développement javac, javadoc, jar
  • JRE

9
Les 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)?

10
Portabilité "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
11
Portabilité 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é

12
Javales 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

13
Partie 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

14
Pré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

15
Repré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
16
Instruction élémentaire
  • Chaque instruction se termine par un point virgule

public class Employe int age 23
17
Blocs 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
18
Porté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
19
Structure 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é
20
Classes 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

21
Donné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

22
Membres 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 )
23
Commentaires
  • 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 /
24
Les 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
25
Exemple de package
  • La classe Employe appartient au package du domaine

26
(No Transcript)
27
Inté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

28
Le 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
29
Dé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)
31
Bonnes 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")
32
Les 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"
33
Les Opérateurs
  • Il existe une grande quantité d'opérateurs
  • Affectation
  • Mathématique
  • Incrémentation / décrémentation
  • Relationnels
  • Logiques
  • Bit à bit
  • Ternaire

34
Opé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

35
Exemple 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
36
Opé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
37
Incré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
38
Opé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)?

39
Opé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.
40
Opé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
41
Boucles 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

42
Le 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
43
Les 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)?
44
La 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)
45
break 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)
46
L'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")

47
Pour 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

48
Partie 3 Les outils
  • Vous découvrirez dans les outils Java
  • Présentation dEclipse
  • Présentation de loutil JavaDoc
  • Présentation du packaging avec Jar

49
Pré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...

50
Sché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
51
Espace 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

52
Librairie 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)
54
Pré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")

55
Génération de la javadoc (1/3)?
  • Sélectionner le projet
  • Aller dans le menu Projet gt Generate Javadoc

56
Gé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

57
Gé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 

58
Résultat de la génération
Explorateur de packages
Description de la classe
Explorateur de classes
Description des attributs, constructeurs et
méthodes
59
Pré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.

60
Cré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

61
Sélection du contenu
Inclure les classes
Inclure les sources (pour le développement)?
Destination
62
Enregistrement de la configuration
Fichier .jardesc
Sauvegarde la configuration et permet de
regénérer le JAR ultérieurement (clic droit sur
le fichier)?
63
Fichier manifest
MANIFEST.MF
Contient les options dexécution du package
Classe contenant la méthode main
64
Exécution du JAR
65
Utilisation 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

66
Partie 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

67
Dé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).

68
Objet Employe
Classe description de l objet
Objet instance de classe
identité
DupondEmploye
nom André prenom
Roux poserConges()consulterConges()?
état
comportement
69
Concept 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

70
Encapsulation
  • 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

71
Notation UML de lencapsulation
- password anciennete nom prenom
poserConges()consulterConges()?
Employe
private
public
protected
default
72
Les 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)?

73
Les 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

74
Exemple 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)?

75
Bonnes 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()
76
Bonnes 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
77
La 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

78
Partie 5 concepts avancés
  • Vous découvrirez dans les concepts objets avancés
  • Héritage entre classes
  • Polymorphisme
  • Interfaces
  • Classes abstraites

79
Dé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

80
Héritage entre lemployé et le manager
GENERALISATION
SPECIALISATION
81
Héritage en cascade
82
Implé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)
84
Spé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
85
Polymorphisme
  • 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

86
Polymorphisme sur méthode poserConges()?
polymorphisme
87
Promotion 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
88
Late 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)?

89
Dé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()
90
Utilisation des interfaces dans une communication
entre composants
91
Implé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
92
Interfaces 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

93
Implémentation de plusieurs interfaces
  • Lobjet Manager peut communiquer avec plusieurs
    systèmes différents
  • Système GestionRH interface IGestionnaireRH
  • Système Authentification interface
    IAuthentification

94
En 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

95
Classe 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

96
Exemple 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 ?
97
Partie 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

98
Architecture
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
99
Communication 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

100
Principaux 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

101
Configurer 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

102
Connexion 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)
103
Mé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()?
104
Coding 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()
105
Coding 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()
106
Exceptions
  • 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)
107
Manipulation 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
108
Coding 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"))

109
Comparaisons
  • 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
110
Mapping SQL lt-gt Java
111
Partie 7 Collections
  • Vous découvrirez dans les collections Java
  • Présentation des principales collections
  • Tris et Comparaisons entre objets dune
    collection

112
Types 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

113
LAPI des collections
Collection
Iterator
Map
List
Set
SortedMap
HashTable
Vector
SortedSet
HashSet
TreeMap
TreeSet
Interface
Classe
114
Les 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")
115
Les 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")
116
Les 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()
117
Meilleures 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()
118
Problé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

119
Comparaison 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
120
Comparaison 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
121
Mé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

122
Partie 8 Exceptions
  • Vous découvrirez dans la gestion des exceptions
    Java
  • Présentation des Exceptions
  • Gestion locale des Exceptions
  • Gestion centralisée des Exceptions

123
Architecture API Exception
124
Pré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)
126
Checked 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

127
Traitement 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)
132
Lancement 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
133
Le 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()
134
Ciné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
135
Clô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
Write a Comment
User Comments (0)
About PowerShow.com