Title: Prsentation PowerPoint
1Intervenants Denis Marchal - Frédéric Moreau
Le langage JAVA
Année scolaire 2004-2005
2Sommaire
- Classes, méthodes, attributs
- Héritage, polymorphisme, encapsulation
3 Introduction à Java
4Origine du langage
Introduction à Java
- Développé par SunSoft pour réaliser le
développement de systèmes embarqués - Projet Oak
- Évolution gérée par JavaSOFT (SunSoft)
- Quelques liens
- http//www.javasoft.com/
- http//www.sunsoft.com/
- http//www.developer.com/directories/pages/dir.jav
a.htm/ (anciennement www.gamelan.com) - http//www.javaworld.com/
- http//tips.iworld.com/ sélectionnez Java
5Java est simple
Introduction à Java
- Simplicité relative par rapport au C
- Certains concepts du C à lorigine de nombreux
bugs ont été supprimés - Pointeurs
- Surcharge des opérateurs
-
- Des études comparatives de développementsmontrent
une diminution du coût de développement de 30 à
35
6Java est un langage objet
Introduction à Java
- Java reprend des caractéristiques de différents
langages à objets - La syntaxe du C
- La gestion dynamique de la mémoire SmallTalk
- Certains concepts de ADA et Objective C
- Toute ligne de code JAVA se trouve
obligatoirement dans une méthode à lintérieur
dune classe - Java est un langage intermédiaire entre les
langages statiques (C) et les langages
interprétés (SmallTalk) - Nombreuses classes permettant le développement
de systèmes répartis - Classes daccès aux ressources dun serveur Web
7Java est robuste
Introduction à Java
- Le compilateur Java est très strict
- Contrôle de typage fort
- Le compilateur vérifie que les erreurs sont
traitées par le développeur - Si une erreur retournée par une méthode nest pas
traitée, le programme ne compilera pas - La gestion de la mémoire nest pas à la charge du
développeur - Garbage Collector ( ramasse-miettes)
- Pas de pointeurs
- Un débordement dindex dans un tableau provoque
une erreur - La mémoire nest pas écrasée
8JAVA est portable
Introduction à Java
- Un code source Java est compilé pour générer un
code assembleur virtuel le byte code - Ce code est conçu pour
- Etre rapidement interprété
- Etre optimisable au moment de son exécution
- Etre facilement traduit en instructions
assembleur lors de son exécution - Etre compact
- en moyenne, une instruction byte code 1,8
octet, RISC 4 octets - Etre vérifiable
- Le byte code est exécuté par un logiciel la
Machine virtuelle - La machine virtuelle est dépendante de la
plate-forme
9Java est performant !
Introduction à Java
Prog.java
Prog.java
Prog.java
Prog.class
Prog.class
Compilateur
MVJIT
MV
Code binaire
Code binaireen mémoire
Systèmedexploitation
Systèmedexploitation
Systèmedexploitation
10JAVA est sécurisé
Introduction à Java
- Le compilateur interdit toute manipulation en
mémoire - Le Verifier contrôle que le byte code chargé dans
la machine virtuelle est conforme - Le ClassLoader est responsable du chargement des
classes dans le SandBox . Il vérifie que la
classe chargée nen écrase pas une autre en
mémoire - Le SecurityManager contrôle les opérations
dentrée/sortie locales et sur le réseau (Applet
uniquement) - ?La portabilité de Java permet de déplacer
dynamiquement du code Java sur un réseau
11JAVA supporte le multi-threading
Introduction à Java
- La gestion des multi-threads est intégrée dans
lelangage et dans la Machine Virtuelle - Grande simplification
- Java permet de synchroniser les threads
Multi-processus
Multi-thread
Mémoire
Mémoire
P1
P2
T1
T2
Synchronisation
Inter-process
12Le JDK
Introduction à Java
- Le JDK Java Development Kit
- Ancienne version 1.0.2
- Version actuelle 1.2
- Il contient
- Un ensemble de classes de base regroupées en
packages - Interface utilisateur, conteneurs, gestion des
threads, réseau - Des exécutables machine virtuelle, compilateur
- Des bibliothèques permettant de coupler du Java
et du C - Peut être téléchargé sur http//www.javasoft.com/
- Il est gratuit
13Les environnements de développement
Introduction à Java
- Ils offrent des fonctions avancées
- Éditeur évolué (couleur, autocorrection,
présentation) - Assistance syntaxique
- Générateur de code
- Débugage
- Environnement dexécution
-
- Loffre actuelle
- Jbuilder 4 (Inprise)
- Visual J (Microsoft)
- Visual Age (IBM)
- Visual Cafe Pro
14Les classes de base
Introduction à Java
- AWT Abstract Window Toolkit
- Classes dIHM boutons, listes, gestion
générique de la géométrie, traitement des
événements par abonnement, copier/coller,
glisser/déplacer - Réseau
- Sockets (serveurs, clients), Web (URL), Applet
- Entrée-sortie
- Fichier, Pipe, accès direct
- Classes de base
- Conteneurs, date, Chaîne de caractéres
- RMI
- Remote Method Invocation
- Middleware objet 100 java
15Les classes de base
Introduction à Java
- JDBC
- Accès aux bases de données relationnelles
- Beans
- Composant Java
- Sécurité
- Cryptage, identification, signature
- Internationalisation
- Format de date/heure
- messages localisés
- caractères UNICODE 2
- JavaIDL
- Support de CORBA
16Hello Word
Introduction à Java
- class Hello
- int k 5
- public static void main (String argv)
-
- Hello hello new Hello()
- for (int I 0 I lt hello.k I)
- hello.SayHello()
-
- public void SayHello()
-
- System.out.println("Hello Java World !!! ")
-
- Edit Hello.java
- Javac Hello.java
- Java Hello
17 La syntaxe
18Constitution dun programme
La syntaxe
- Un programme Java utilise un ensemble de classes
- Les classes sont regroupées par package
- Une classe regroupe un ensemble dattributs et de
méthodes
Package
Classe
Attributs
Méthodes
19Déclaration dune classe
La syntaxe
- Le nom de la classe est spécifié derrière le mot
clé class - Le corps de la classe est délimité par des
accolades - On définit dans le corps les attributs et les
méthodes qui constituent la classe
class Test lt corps de la classe gt
20Définition dun méthode
La syntaxe
- Une méthode est constituée de
- Dun nom
- Dun type de retour
- De paramètres (éventuellement aucun)
- Dun bloc dinstructions
- Un paramètre est constitué
- Dun type
- Dun nom
- void est le mot-clé signifiant que la méthode
ne renvoie pas de valeur
class Test int calculer (int taux, float
delta) lt corps de la méthode gt
21Bloc dinstructions
La syntaxe
- Un bloc dinstructions est délimité par des
accolades - Il contient un ensemble dinstructions
- Toute instruction est terminée par un point
virgule - Un bloc dinstructions peut contenir dautres
blocs dinstructions
int i 0 if (i0)
System.out.println ("Valeur de i " i)
22Instructions possibles
La syntaxe
- Déclaration dune variable
- Appel de méthode
- Affectation
- Instruction de boucle (while, for)
- Instruction de test (if, switch)
23Corps dune méthode
La syntaxe
- Le corps dune méthode est un bloc dinstructions
- Le mot clé return permet de renvoyer une
valeur à lappelant de la méthode - Il doit renvoyer une valeur du même type que le
type de retour de la méthode
class Test int calculer (int taux, float
delta) return taux delta
24Déclaration dune variable
La syntaxe
- Une variable possède un type et un nom
- Le type peut être un type de base ou une classe
- Linitialisation dune variable peut se faire au
moment de la déclaration
int compteur int indice 0 Voiture
golf Voiture twingo new Voiture()
25Portée dune variable
La syntaxe
- La portée dune variable sétend jusquà la fin
du bloc dans lequel elle est définie
int compteur // compteur est
accessible // compteur nest plus
accessible
26Nom de classes, de variables et de méthodes
La syntaxe
- Un nom peut être constitué de lettres, de
chiffres et du caractère souligné - Il ne peut pas commencer par un chiffre
- Le caractère est utilisable mais à éviter
- Les mots réservés (if, class, int) ne peuvent
pas être utilisés - Les développeurs ont défini un consensus de
nommage - Les mots du langage sont en minuscule
- Les noms de classe commencent par une majuscule
- Les noms de méthodes et de variables comment par
une minuscules - Chaque mot qui compose le nom commence par une
majuscule
27Point dentrée
La syntaxe
- Une application possède un point dentrée fourni
par la méthode main (sauf les applets) - Attention à la casse, Java est sensible aux
majuscules/minuscules
class Test public static void main (String
args)) // corps de la méthode main
28Les différents types de base (1/2)
La syntaxe
- Types arithmétiques
- Type caractère
- Type booléen
29Les différents types de base (2/2)
La syntaxe
- Les types de base sécrivent en minuscules (int,
float..) - Le type int est codé sur 4 octets ?
portabilité - Le type char est codé sur 2 octets pour
supporter les jeux de caractères Unicode - Une chaîne de caractères est déclarée avec le
mot-clé String - Ce nest pas un type de base
- Il se manipule comme un type de base
- Ce nest pas équivalent à un tableaux de
caractères
String s "Hello World"
30Laffectation
La syntaxe
- Lopérateur permet daffecter la valeur de
lexpression qui est à droite à la variable qui
est à gauche
class Test int calculer () int i
0 int j 6 i (j 5) 3 return i j
31Les opérateurs arithmétiques
La syntaxe
- Sappliquent sur les types entiers ou réels
- , - , , / , (modulo) , , - , , /
- Les opérateur et peuvent être utilisés sur
des variables de type String - En terme de performance, il est recommandé
dutiliser la notion raccourcie
int x, y, z y 2 z 3 x y z //x
vaut 6 x 2 //x vaut 8 y x / 4 //y
vaut 2 y x 2 //y vaut 0
32Opérateurs unaires
La syntaxe
- Sappliquent à un seul opérande de type entier ou
réel - -, --, ,
- La pré et la post-incrémentation diminuent le
nombre de lignes de byte code générées
int x, y x 3 y -x //y vaut -3 y x
//y vaut 4, x vaut 4 y x-- //y vaut
4, x vaut 3
33Opérateurs de comparaison
La syntaxe
- Sappliquent sur des entiers, booléens, réels
, !, lt, gt, gt - Ces opérateurs retournent une valeur du type
boolean
boolean droitDeVote int age
droitDeVote (age gt 18)
34Opérateurs logiques
La syntaxe
- Sappliquent au type boolean
- ! (not) , (and) , II (or)
- , I
- Retournent un type boolean
- renvoie true si les deux expressions
renvoient true - a le même comportement mais névalue pas le
seconde expression si la première est false - renvoie true si lune des deux expressions
renvoie true - a le même comportement mais névalue pas le
seconde expression si la première est true
35Les conversions de type (1/2)
La syntaxe
- Il y a 4 contextes possibles de conversion (cast)
- Conversion explicite
- Affectation
- Appel de méthode
- Promotion arithmétique
- Certaines conversions provoquent une perte de
valeur - Float en int, int en short, short en byte
- Le type boolean ne peut pas être converti en
entier
36Les conversions de type (2/2)
La syntaxe
- double f 3.14
- int i,j
- short s
- i (int)f // float ? int (conversion
explicite) - float ff (float)3.14
-
- i s // short ? int (affectation)
- // appel de la méthode int obj.m(int i)
- obj.m(s) // short ? int (appel de méthode)
- // division dun entier et dun flottant
lentier i est - // converti en flottant, puis la division
flottante est calculée - f i / (double)j // f vaut 0.3333
37Test conditionnel
La syntaxe
- class Test
- public static void main (String args)
- int compteur 0
- boolean debut
- if (compteur 0)
- debut true
- System.out.println("Début de la partie")
-
- else if (compteur 10)
- System.out.println("Fin de la partie")
- else
- System.out.println("Partie en cours")
-
-
38Boucles while
La syntaxe
- class Test
- public static void main (String args)
- int i
- do
- System.out.println("Entrez un nombre lt 10")
- c lireUnInt()
- while (cgt10)
- while (cgt0) afficher (c--)
-
- public static int lireUnInt()
- public static void afficher (char c)
-
-
39Boucles for
La syntaxe
- class Test
- public static void main (String args)
- int i
- for (i0 i lt5 i)
- System.out.println (i)
-
-
- for (j0 j lt5 , j)
- System.out.println (i)
-
-
-
- // i est accessible
- // j nest pas accessible
-
-
40Switch
La syntaxe
class Test public static void main (String
args) char c (char)System.in.read() s
witch(c) case o case O
System.out.println("Oui") break case
n case N System.out.println("Non")
break default System.out.println("Mauv
aise réponse") break
- Le switch ne sapplique quau type entier ou
caractère.
41Commentaires (1/2)
La syntaxe
- Lutilisation de commentaires est fortement
recommandé - /ceci est un commentaire sur plusieurs lignes
/ - //ceci est un commentaire sur une ligne
- Javadoc (fourni dans le JDK) génère la
documentation des classes en au format HTML - / début de commentaire Javadoc
- _at_author exemple de tag auteur
- / fin de commentaire Javadoc
42Les tableaux description
La syntaxe
- Nombre fixe déléments. Taille fixée à la
construction - Les éléments sont de même type (type de base ou
classe) - Les tableaux sont alloués dynamiquement par
new - Un tableau est détruit lorsquil nest plus
référencé - Les tableaux multi-dimensionnels sont des
tableaux de tableaux
43Les tableaux syntaxe
La syntaxe
- 2 syntaxes pour lallocation
- Une méthode peut renvoyer un tableau
int monTableau new int10 int
monTableau new int10
classe Test int construireTableau (int
dimension) int tab new intdimension r
eturn tab
44Les tableaux initialisation
La syntaxe
- Lattribut length renvoie la dimension du
tableau - Lindice des éléments du tableaux varie de 0 à
tableau.length 1 - Initialisation statique
- Initialisation dynamique
int monTableau 1, 2, 3
int param new int10 for (int i 0 i lt
param.lenght i) parami i
45 Les concepts Objet
46Les concepts de base
Les concepts Objet
- Les concepts de base de lobjet sont simples et
peu nombreux - Objet et Classe
- Encapsulation
- Généralisation/Spécialisation
- Polymorphisme
- Ces concepts impactent directement sur la
qualité, les délais et les coûts de développement
et de la maintenance des logiciels - Il existe de nombreux autres concepts, mais non
fondamentaux - Les concepts de base sont simples, mais leur
utilisation sur un projet demande de lexpérience
47Quest-ce quun objet ?
Les concepts Objet
- Cest une abstraction dune entité du monde réel
Monde réel
Modèle
Simulateurde circulation
Voiture
Abstraction
Voiture
Abstraction
Boîte
Moteur
Conception de voiture
48La généralisation / spécialisation (1/2)
Les concepts Objet
- Généralisation recherche des similitudes
- Identifier les objets du monde réel connus par le
système - Regrouper les objets en classes
- Généraliser les classes en super classes
- Règle dor en cas de doute sur la pertinence
dune classe, il est préférable de ne pas la
définir - La généralisation est caractérisé par
lexpression est un type de
49La généralisation / spécialisation (2/2)
Les concepts Objet
Classesabstraites
Moyen de transport
ltltextendsgtgt
Classesconcrètes
Monde réel
50Attribut, Opération, Identité ?
Les concepts Objet
- Attribut valeur portée par un objet
- Opération service rendu par lobjet
- Synonyme Méthode, Service
- Identité un objet doit être identifiable
- Concept équivalent pour les SGBDR clef primaire
51Attribut, Opération, Identité (2/2)
Les concepts Objet
- Une classe décrit les Attributs, les Opérations
et lIdentité de ses objets
Instance de
Instance de
52Accès aux attributs et invocation des méthodes
Les concepts Objet
- Laccès aux attributs et aux méthodes définis
dans la classe se fait à partir dun objet - Un objet est une instance de classe
- Il possède des valeurs propres pour les attributs
définis dans la classe
Voiture clio // Déclaration dune variable
clio new Voiture() // Création de lobjet
clio.couleur rouge // Accès à lattribut
clio.demarrer() // Appel de la méthode
53Définition dune méthode ltgt invocation dune
méthode
Les concepts Objet
class Voiture // Définition de la
classe float vitesse float
consommation void accelerer (float delta)
consommation consommation delta /
10 vitesse vitesse delta
// Utilisation dun objet Voiture
clio new Voiture() clio.accelerer(20)
Définition du paramètre
Passage du paramètre
54Les Associations (1/2)
Les concepts Objet
- Lassociation est le lien qui peut exister entre
objets de différentes classes pour leur permettre
de communiquer - Deux objets sont associés si
- Un objet connaît lidentité et la classe dun (ou
de plusieurs) autre objet - Il existe un type particulier dassociation nommé
Agrégation ou Composition - Association se lisant Est formée par
lassemblage de ou Contient
55Les Associations (2/2)
Les concepts Objet
- Lecture du modèle UML
- Une personne peut posséder entre 0 et n voitures
- Toute voiture possède un propriétaire
- Une voiture est formée de 4 roues et dune
carrosserie
lt-possède
Voiture
0..
propriétaire
4
Carroserie
56Lhéritage
Les concepts Objet
- Mécanisme provenant dune relation de
Généralisation/Spécialisation - Une sous-classe hérite des attributs, méthodes et
associations de ses super classes
57Quest-ce que lencapsulation ?
Les concepts Objet
- Un mécanisme permettant de masquer les choix
dimplémentation - Permet de changer limplémentation sans incidence
sur le reste du système si linterface nest pas
modifiée - Un objet possède une interface publique et une
implémentation privée - Chaque objet est un mini-serveur ? mise en place
de systèmes distribués via CORBA ou DCOM
implémentation
interface
58Quest-ce que la collaboration ?
Les concepts Objet
- Un objet utilise les services dautres objets
- Les objets collaborent
- Chaque objet est mini-serveur et client dautres
objets
Voiture
Demarrer()
Feu
changer (Vert)
Velo
Demarrer()
59Quest-ce que le polymorphisme ?
Les concepts Objet
- Propriété pour un même message de déclencher des
méthodes différentes
- Débrayer- Passer la première- Accélérer-
Embrayer
Voiture
Demarrer()
Feu
changer (Vert)
Velo
Demarrer()
60Résumé
Les concepts Objet
- Les concepts fondamentaux
- Classe, Objet
- Généralisation/Spécialisation (héritage)
- Encapsulation
- Polymorphisme
- Ces concepts ont un impact direct sur
- La qualité du système
- Le coût de développement et de maintenance
- Le délai du développement et de maintenance
- Si les concepts de base sont simples, leur
utilisation nécessite de lexpérience
61 Classes,méthodes, attributs
62Déclarer une classe
Classes,méthodes, attributs
- Une classe public est visible en dehors du
package - Par défaut, elle nest pas visible
- On ne peut pas mettre 2 classes publiques dans un
fichier ? erreur de compilation - Une classe final ne peut pas être dérivée
(pas de sous-classes) - Utile pour des raisons de sécurité et de
performances - De nombreuses classes du JDK sont final
- Une classe abstract ne peut pas être
instanciée (new)
63Déclarer un attribut (1/3)
Classes,méthodes, attributs
- Lors de la création dun objet, les attributs
sont initialisés par défaut - À zéro pour les valeurs numériques
- À null pour les références
- À false pour les booléens
- Les attributs peuvent être initialisés
- Lors de la déclaration
- Dans le constructeur
- Utiliser des règles de nommage cohérentes
- Le noms des classes commence par une majuscule
- Lidentification dun attribut ou dune méthode
commence par une minuscule
64Déclarer un attribut (2/3)
Classes,méthodes, attributs
- La valeur dun attribut déclaré comme static
est partagée par toutes les instances (objets) de
la classe - La valeur dun attribut déclaré comme final
est constante
65Déclarer un attribut (3/3)
Classes,méthodes, attributs
class Date int _jour // initialisé à
0 int _mois 1 // initialisation
explicite int _an 2000 final static int
max_mois 12 //Constante void print ()
System.out.println(_jour "/" _mois "/"
_an) Date d new Date() //
instantiation de lobjet d.print() // appel de
la méthode print
66Le passage de paramètres
Classes,méthodes, attributs
- Lors de lappel dune méthode prenant en
paramètre des types de bases, les paramètres sont
passés par valeur - La valeur des variables passées en paramètres est
dupliquée - Ce sont ces valeurs dupliquées qui sont
manipulées dans la méthode - Lors de lappel dune méthode prenant en
paramètre des objets, les paramètres sont passés
par référence - Ils peuvent être modifiés dans la méthode
67Surcharge (1/3)
Classes,méthodes, attributs
- Une méthode surchargée est une méthode qui peut
être appelée avec plusieurs ensembles de listes
de paramètres - Permet décrire plusieurs versions dune méthode
- Exemple
- void print ()
- void print (int i)
- int print (float f)
- Le type du paramètre de retour nest pas pris en
compte par le mécanisme de résolution de surcharge
68Surcharge (2/3)
Classes,méthodes, attributs
- A lappel, Java détermine quelle est la méthode
dont la liste des paramètres est la plus proche
des paramètres effectivement envoyés par
lappelant - Si aucune signature de méthode ne correspond au
valeurs envoyées, la machine virtuel Java est
capable de convertir une valeur envoyée dans le
type du paramètre - Java détermine le coût des conversions possibles
et choisit le coût le moins élevé. Si le coût
global de conversion dépasse 10, Java refuse
lappel
69Surcharge (3/3)
Classes,méthodes, attributs
Coût des conversions
vers
de
70Constructeurs
Classes,méthodes, attributs
- Cest une ou plusieurs méthode(s) permettant
dinitialiser les objets - Le constructeur est appelé lors de la création de
lobjet - Le constructeur a le même nom que la classe
- Il na pas de valeur de retour (void est un type
de retour) - Le constructeur peut être surchargé
- Java fournit un constructeur par défaut (sans
paramètres) si aucun constructeur nest défini
explicitement
71Exemple de constructeurs
Classes,méthodes, attributs
class Date int _jour 1 int _mois
1 int _an 2000 Date() _an
1999 Date (int jour, int mois, int an)
_jour jour _mois mois _an
an Date d new Date(10,12,2000) //
instantiation de lobjet
72Création dobjets
Classes,méthodes, attributs
- Allocation de lespace mémoire pour stocker les
variables dinstances - Utilisation de lopérateur new
- Appelle du constructeur adéquat
- Retourne une référence sur lobjet créé
class Voiture // Définition de la
classe String _type Voiture (String type)
_type type void demarrer ()
Voiture clio new Voiture("ClioRT") //
Création de lobjet Voiture renault clio //
Ajout dune référence sur lobjet renault.demarrer
()
73Le Garbage Collector (ramasse-miettes)
Classes,méthodes, attributs
- Il prend en charge la gestion de la mémoire
- Il alloue lespace mémoire lors de la création
des objets - Il libère la mémoire occupé par un objet dès
quil ny a plus aucune référence qui pointe vers
cet objet - Il est capable de compacter la mémoire pour
éviter la fragmentation - Cest un Thread de la machine virtuel Java
74 this
Classes,méthodes, attributs
- this référence sur lobjet courant
- Représente linstance courante en train de
sexécuter
class Compte void crediter(float montant)
void debit(float montant)
class Versement void valider() void
effectuer(Compte s, Compte d, float montant)
s.debiter(montant) d.crediter(montant) t
his.valider()
75Utilisation de this dans un constructeur
Classes,méthodes, attributs
class Personne String _nom String
_prenom float _taille Personne(String nom,
String prenom) _nom nom _prenom
prenom Personne(String nom, String prenom,
float taille) this(nom, prenom) _taille
taille
76 null
Classes,méthodes, attributs
- La valeur null peut être assignée à nimporte
quelle référence sur un objet - Une méthode peut retourner null
- Lappel dune méthode sur une référence dobjet
valant null provoque une erreur dexécution
(NullPointerException) - On peut tester une référence pour savoir si elle
vaut null
Personne moi new Personne() if (moi !
null) System.out.println("Jexiste toujours !
")
77Opérateurs sur les références
Classes,méthodes, attributs
- Egalité de deux références
- Compare si 2 références pointent vers le même
objet - Différence de deux références !
- Compare si 2 références pointent vers des objets
différents - Type dinstance de la référence instanceof
- Permet de savoir si lobjet référencé est une
instance dune classe donnée ou dune de ses
sous-classes
Personne moi new Personne() if (moi
instanceof Personne) System.out.println("Je
suis bien une personne! ")
78Méthodes static
Classes,méthodes, attributs
- Le mot-clé static permet de définir une
méthode comme statique - Une méthode statique ne peut accéder quaux
attributs de la classe déclarés comme static - Lappel dune méthode statique ne se fait pas sur
un objet, mais sur une classe - Exemple Math.cos(3.14)
- Lutilisation dune méthode statique ne nécessite
pas la création dun objet
79Exemple de méthode static
Classes,méthodes, attributs
class MathUtil final static double _PI 3.14
static double PI() return
_PI static double Carre(double x)
return x x static double Demi(double
x) return x / 2 double i
MathUtil.Carre(5) double x MathUtil.PI()
80Héritage, polymorphisme, encapsulation
81Héritage (1/2)
Héritage, polymorphisme, encapsulation
- Toute classe Java est une sous-classe de la
classe Object - Java ne permet pas lhéritage multiple
- La classe dérivée peut changer limplémentation
dune ou plusieurs méthodes héritées
redéfinition - Il est possible de faire en sorte que lon ne
puisse pas hériter dune classe en particulier
utilisation du mot-clé final - Il est possible de faire en sorte quune méthode
ne puisse pas être redéfinie utilisation du
mot-clé final
82Héritage (2/2)
Héritage, polymorphisme, encapsulation
class Felin boolean a_faim true void
parler() void appeler()
System.out.println("minou minou,") if
(a_faim) parler() final class Chat
extends Felin String race void parler()
System.out.println("miaou! ") final class
Lion extends Felin void parler()
System.out.println("roar! ") void chasser()
83Conversion entre classes
Héritage, polymorphisme, encapsulation
- Si une variable référence un objet dune classe,
elle peut référencer un objet de nimporte
laquelle de ses sous-classes
class Felin class Lion extends Felin
Lion lion new Lion() Felin
felin felin lion // OK conversion implicite
les lions // sont des félins lion
felin // ERREUR tous les félins ne sont
pas // des lions
84Conversion ascendante, conversion descendante
Héritage, polymorphisme, encapsulation
class Felin class Lion extends Felin
Felin felin new Felin() Lion lion
new Lion() felin lion // Conversion
ascendante felin.parler() // roar !
felin.chasser() // Méthode introuvable lion
felin // ERREUR conversion explicite
nécessaire lion (Lion)felin // Conversion
descendante explicite lion.parler() // roar
! lion.chasser() // OK Chat chat new
Chat() felin chat // Conversion ascendante
lion (Lion)felin // ERREUR java ClassException
85Polymorphisme (1/2)
Héritage, polymorphisme, encapsulation
- Une méthode polymorphe est une méthode déclarée
dans une super-classe et redéfinie dans une
sous-classe - Une méthode Java st par défaut polymorphe
- Les méthodes final ne peuvent pas être
redéfinies - Permet à la machine virtuel doptimiser le
byte-code - Est utilisé pour des raisons de sécurité
86Polymorphisme (2/2)
Héritage, polymorphisme, encapsulation
class Cirque Felin f_list new
Felin3 Cirque() f_list0 new
Lion() f_list1 new Chat() f_list2
new Tigre() void appeler() for (int i
0 ilt3 i) Felin f f_listi
f.parler()
87Super (1/2)
Héritage, polymorphisme, encapsulation
- Le mot-clé super permet daccèder aux
méthodes et aux attributs de la super-classe - super est utilisé dans le constructeur de la
classe dérivée pour appeler celui de la
super-classe - Cela permet de factoriser du code
- super() doit être la première instruction du
constructeur
class Felin int _nbPattes Felin(int
nbpattes) _nbPattes nbPattes class
Chat Chat() super(4) race
"goutière"
88Méthodes et classes abstraites
Héritage, polymorphisme, encapsulation
- Une méthode abstraite est une méthode dont on
donne la signature sans en décrire
limplémentation - Le mot-clé abstract permet dindiquer quune
méthode doit être redéfinie dans une sous-classe - Une classe abstraite ne peut pas être instanciée
- Le mot-clé abstract permet de bloquer
linstanciation - Une classe possédant une méthode abstraite est
abstraite
abstract class Felin abstract void parler()
class Chat extends Felin void
parler() System.out.println("miaou ! ")
Felin f new Felin() // Ne compile pas
89Les packages définition (1/2)
Héritage, polymorphisme, encapsulation
- Un package est une bibliothèque de classes
- On regroupe les classes dun même domaine dans un
package - Les packages sont organisés hiérarchiquement
- La notion de package apporte un niveau
dencapsulation supplémentaire
90Les packages définition (2/2)
Héritage, polymorphisme, encapsulation
- Les classes du JDK sont classées dans des
packages - Java importe automatiquement le package
java.lang qui contient des classes comme
Thread ou System
java
awt
lang
util
net
event
String.classThread.class
Date.classVector.class
Socket.classURL.class
Button.classList.class
91Les packages utilisation (1/2)
Héritage, polymorphisme, encapsulation
- Il y a 2 manières dutiliser une classe stockée
dans un package - Utilisation du nom complet
- Importer une classe ou toutes les classes du
package
java.util.Date dateDuJour new
java.util.Date() System.out.println(dateDujour)
import java.util.Date Date dateDuJour new
Date() System.out.println(dateDujour)
import java.util. Date dateDuJour new
Date() System.out.println(dateDujour)
92Les packages utilisation (2/2)
Héritage, polymorphisme, encapsulation
- Le mot-clé package permet de définir un
nouveau package - La hiérarchie des packages correspond à la
hiérarchie des répertoires
//fichier Compte.java dans le répertoire Finance
package finance public class Compte
//Fichier Client.java dans le répertoire de
lapplication import finance. public class
Client Compte c new Compte()
93La variable CLASSPATH
Héritage, polymorphisme, encapsulation
- Le compilateur utilise la variable
denvironnement CLASSPATH pour localiser les
classes dun package sur le disque - Cette variable doit référencer tous les
répertoires ou fichiers dans lesquels sont
susceptibles de se trouver des classes Java - On a le droit de placer les classes dans des
archives (zip, jar, cab) - Dans ce cas, la variable CLASSPATH doit
référencer le fichier - La hiérarchie des classes des packages doit être
respectée
94Classes publiques
Héritage, polymorphisme, encapsulation
- Le mot-clé public permet de définir une
classe comme publique - Seules les classes public sont accessibles
depuis lextérieur du package - Chaque fichier java doit contenir au maximum une
classe public - Cette classe doit porter le nom du fichier dans
lequel elle est définie (en respectant les
majuscules/minuscules) - Les classes non public ne sont utilisables
quà lintérieur du fichier dans lequel elles
sont définies
95Visibilité - Encapsulation
Héritage, polymorphisme, encapsulation
- Permet de distinguer les services offerts
(interface) de limplémentation - Lencapsultation des classes Java est définie au
niveau du package - ILencapsulation agit au niveau des classes et
non des objets - Un attribut private dans un objet sera
accessible depuis une autre objet de la même
classe - Il y a 4 niveaux de visibilité public, private,
protected, friendly (valeur par défaut)
96Règles de visibilité
Héritage, polymorphisme, encapsulation
97Règles de visibilité
Héritage, polymorphisme, encapsulation
- Pour une bonne encapsulation, il est préférable
de définir les attributs comme private - On définit alors des méthodes publiques
(accesseurs) permettant de lire et/ou de modifier
les attributs - Si un accesseur retourne une référence sur un
objet, rien nempêche la modification de cet
objet à travers cette référence ? cela brise
lencapsulation
class Personne private Vector children new
Vector() public Vector getChildren() return
children Personne moi new
Personnes() Vector v moi.getChildren()
v.addElement(new Personne("Paul")
Rupture delencapsulation
98Encapsulation des constantes
Héritage, polymorphisme, encapsulation
class EtatPorte // Classe non
publique public final static EtatPorte OUVERTE
newEtatPorte() public final static EtatPorte
FERME newEtatPorte() // Empeche la création
dun nouvel objet private EtatPorte()
public class Porte // Classe publique private
EtatPorte etat EtatPorte.FERMEE public void
ouvrir() etat EtatPorte.OUVERTE public
estOuverte() return (etat
EtatPorte.OUVERTE)
99 Les interfaces
100Définition
Les interfaces
- Une interface définit un ou plusieurs services
offerts - Elle est composée dun ensemble de méthodes
abstraites et de constantes ( static et
final ) - Une classe peut implémenter une ou plusieurs
interfaces - Elle doit fournir une implémentation pour chaque
méthode
interface Printable void print() class
Point extends Object implements Printable
private double x, y void print()
System.out.println(x) System.out.println(y)
101Héritage multiple dinterface
Les interfaces
- Une interface peut hériter dune ou plusieurs
autres interfaces - Java supporte lhéritage multiple dinterface
- Une classe peut implémenter plusieurs interfaces
interface Printable void print() interface
Persistent void save() interface SGBD
extends Persistent void connect() class
Point implements Printable , SGBD private
double x, y void print() void save()
void connect()
102Interfaces et types
Les interfaces
- Une interface définit un nouveau type
- Des objets différents peuvent répondre au même
message à condition quils implémentent la même
interface - Lopérateur instanceof peut être utilisé pour
savoir si un objet implémente une interface donnée
Point point new Point() if (point
instanceof Printable) point.print()
103Variables dinterfaces
Les interfaces
- Les variables déclarées dans une interface sont
des constantes - Les mots clés static et final ne sont pas
nécessaires - Les variables des interfaces doivent
obligatoirement être initialisées
interface MyInterface int MIN 0 int MAX
100 int i MyInterface.MAX
104Quand utiliser les interfaces ?
Les interfaces
- Pour définir des services techniques
- Pour contourner le fait que Java ne supporte pas
lhéritage multiple - Interface vs Héritage
- On utilise lhéritage quand un objet est un
sous-type dun autre - On utilise une interface pour décrire le fait
quune classe implémente un service particulier
Personne
Persistent
extends
implements
Client
105Conception par contrat (1/4)
Les interfaces
- Exemple on définit les classes Client ,
Banque et Compte
0..
0..
106Conception par contrat (2/4)
Les interfaces
- Le Client et la Banque ont des points de
vue différents sur un Compte . Ils nutilisent
pas les mêmes méthodes - ? On définit des contrats différents
implements
implements
0..
0..
107Conception par contrat (3/4)
Les interfaces
- La méthode balance peut être mise en facteur
implements
implements
0..
0..
108Conception par contrat (4/4)
Les interfaces
- Les méthodes save et load sont des
services techniques transversaux
implements
implements
0..
0..
109Les classes de base
110La classe Object définition
Les classes de base
- Classe mère de toutes les classes
- Permet dutiliser les classes conteneurs et le
polymorphisme - La méthode toString() retourne une
description de lobjet - La méthode equals(Object) teste légalité
sémantique de deux objets - Le méthode getClass() retourne le descripteur
de classe. Il permet de - connaître la classe dun objet
- connaître le nom de la classe, ses ancêtres
- découvrir la structure des objets (JDK 1.1)
111La classe Object exemple
Les classes de base
class NamedObject extends Object protected
String _nom public String toString() return
"Objet " _nom " de la classe "
getClass().getName() public boolean
equals (NamedObject obj) return
obj._nom.equals(this._nom) class Personne
extends NamedObject Personne moi new
Personne("Marcel Dupond") Personne lui new
Personne("Marcel Dupond") System.out.println(mo
i) if (moi lui) if (moi.equals(lui))
Objet Marcel Dupondde la classe Personne
Test des références false
Test des valeurs true
112La finalisation dun objet
Les classes de base
- Tout objet qui nest plus référencé est détruit
par le ramasse-miettes - Il ny a pas de delete en java
- finalize() est appelé avant que le
ramasse-miettes ne libère la mémoire occupée par
lobjet - Permet de libérer des ressources allouées par
lobjet - On peut forcer lappel au ramasse-miettes en
invoquant - System.gc() déclencher le ramasse-miettes
- System.runFinalisation() déclencher la
finalisation des objets - Vous pouvez lancer la machine virtuelle en
bloquant le déclenchement automatique du
ramasse-miettes - Option java-nosyncgc
- Permet de contrôler le déclenchement du
ramasse-miettes
113Les classes Wrapper description
Les classes de base
- Les types de base Java ne sont pas des objets
- Il est parfois indispensable de les manipuler
comme des objets - Les classes Wrapper représentent un type de base
- Récupérer les valeurs min et max
- Créer une instance à partir dun type de base ou
dune chaîne - Conversions entre types de base et chaînes
- Conversions entre chaînes et types de base
- Utiliser des types de base dans des conteneurs
- Boolean, Integer, Float, Double, Long, Character
- Attention ne supporte pas dopérateurs (, -,
) - Elles sont dans le package java.lang
114 Wrapper vs types de base
Les classes de base
- Avantages des type de bases
- Plus léger en mémoire
- Supporte un certain nombre dopérateurs
- Autorise certaines conversions automatiques de
types - Avantages des Wrappers
- Est passé par référence
- Dispose de méthodes de conversions statiques vers
les autres types - Peut être géré par les objets container
115Exemples
Les classes de base
- Convertir une chaîne en entier
- Convertir un entier en chaîne
static int convertir(String s) try
return Integer.parseInt(s)
catch(Exception e) return 0
static String convertir(int i) Interger j
new Integer(i) return j.toString()
116La classe java.lang.String
Les classes de base
- Contient une chaîne de caractères
- Classe connue par le compilateur Java
- Une chaîne constante sera convertie en objet de
la classe String - String msg Hello Java World !
- Un objet de la classe String ne peut pas être
modifié - Ne brise pas lencapsulation
class Personne String nom public String
getNom() return nom
117String concaténation
Les classes de base
int area 33 int prefixe 1 int suffixe
02030405 // Chaque concaténation crée un
nouvel objet // lancien est détruit par le
Garbage Collector String numTel "(" area
")" // (33) numTel prefixe // (33)1
numTel "-" // (33)1- numTel
suffixe // (33)1-02030405 // Un seul objet
est créé numtel "(" area ")" prefixe
"-" suffixe // Conversion dun entier en
chaîne String un 1 ""
118String manipulation
Les classes de base
- length() cette méthode permet de connaître le
nombre de caractères dune chaîne - Ex for (int i 0 i lt monTexte.length() i)
...... - indexOf(char c, int i) retourne la position du
caractère c à partir de la position i - if (monTexte.indexof(, 5) ltgt -1 ) ......
- substring(int i, int j) extrait de la chaîne
les caractères de la position i à la position
j - String nouveauMot ancienMot.substring(2,5)
- equals() retourne un booléan signifiant si les
deux chaînes sont identiques - Ex if ( mot1.equals(mot2)) ......
119La classe java.lang.StringBuffer
Les classes de base
- Cest une chaîne de caractères modifiable et de
taille variable - Son utilisation est moins simple que String
- pas dutilisation possible de lopérateur
- append(p) ajoute p en fin de la chaîne
courante - p peut être de nimporte quel type de base
- length() retourne la longueur de la chaîne
- setLength() change la longueur de la chaîne
- Si elle est étendue, les nouveaux caractères sont
initialisés à 0
120La classe java.util.Vector
Les classes de base
- Tableau de références à taille variable
- On ne peut y stocker que des références sur les
objets - Impossible de stocker directement un type de base
dans une collection de type Vector utiliser
pour cela les classes wrapper - Souvent utilisé pour coder une relation 1-n entre
deux classes - Possibilité de savoir si un objet est présent
dans le tableau et quelle est sa position - Vous pouvez
- Insérer ou supprimer des références
- Parcourir le contenu
121Vector insérer, supprimer
Les classes de base
Vector vInt new Vector() for (int i 0
ilt10 i) Integer elt new Integer(i)
vInt.addElement(elt) // 0123456789
Interger i new Integer(0) vInt.addElementAt(i,
5) // 01234056789 vInt.removeElementAt(0)
// 1234056789 vInt.removeAllElements()
122Vector modifier, rechercher ...
Les classes de base
- Object elementAt(int index)
- Retourne lélément pointé par index
- Void setElementAt(Object obj, int index)
- Place obj à la position index
- Boolean contains(Object elem)
- Retourne true si elem est dans le tableau
- Int indexOf(Object elem)
- Int indexOf(Object elem, int index)
- Retourne la position de lobjet ou -1 si lobjet
nest pas dans le tableau - Lobjet est recherché par référence
- Int size()
- Retourne la taille courante
123Linterface java.util.Enumeration
Les classes de base
- Objet permettant de parcourir les éléments dun
conteneur - Une énumération ne stocke aucune information
- Ne contient quune position courante dans le
conteneur - Interface unique pour le parcours de tous les
types de conteneurs - Ne fonctionne que pour un seul parcours
- Cest une interface, pas une classe
- Elements() appliquée sur un Vector retourne une
Enumeration - Deux méthodes
- Boolean hasMoreElements() teste sil reste des
éléments - Object nextElement() récupère lélément courant
etpasse au suivant
124Enumeration exemple
Les classes de base
Vector vInt new Vector() for (int i 0
ilt10 i) Integer elt new Integer(i)
vInt.addElement(elt) // 0123456789 //
Première façon de parcourir le vector for (int
i 0 iltvInt.size() i) System.out.println(v
Int.elementAt(i)) // Seconde façon de
parcourir le vector // la plus élégante for
(Enumeration e vInt.elements()
e.hasMoreElements()) System.out.println(e.nextE
lement())
125Quand utiliser une Enumeration ?
Les classes de base
- Utilisez une Enumeration pour parcourir une
association 1.. - Permet de ne pas briser lencapsulation
- Dans lexemple suivant
- la classe Personne possède une méthode
publique pour parcourir la collection de voitures - Lajout ou la suppression dune voiture dans
cette collection doit se faire en manipulant une
instance de la classe Voiture
possède -gt
0..
proprietaire
126Quand utiliser une Enumeration ?
Les classes de base
public class Personne private Vector
_voitures new Vector() public Enumeration
voitures() return _voitures.elements()
void addVoiture(Voiture v) _voitures.addElement
(v) void remVoiture(Voiture v)
_voitures.removeElement(v) ...... package
simulateur class Voiture private Personne
_proprio public void setProprietaire
(Personne p) if (_proprio ! null)
_proprio.remVoiture(this) _proprio p if
(_proprio ! null) _proprio.addVoiture(this)
public Personne getProprietaire() return
_proprio
127La classe java.util.Hashtable
Les classes de base
- Tableau associatif permettant
- Dindexer un objet par une clé
- De retrouver rapidement un objet à partir dune
clé - Les clés des références sont des objets
- Chaînes de caractères, numéros didentification
- Elles sont recherchées par valeurs (méthodes
equals) - Les clés doivent implémenter la méthode
ObjecthashCode() - Une clé ne peut identifier quune seule valeur
- Naccepte pas les doublons
- Pour stocker des relations n-n, il suffit de
stocker des instances de Vector dans une
Hashtable - Très performant pour laccès aux valeurs
128La classe java.util.Hashtable
Les classes de base
- Object put(Object key, Object value) insère un
élément - Object remove(Object key) supprime la clé
- Object get(Object key) retourne la valeur
associée à la clé - Boolean containsKey(Object key) teste si la clé
existe - Keys() retourne une Enumeration sur les clés
- Elements() retourne une Enumeration sur les
valeurs
129Hashtable un exemple
Les classes de base
Hashtable deptable new Hashtable() //
Stockage dobjets de type Departement en
utilisant // une clé de type String
deptable.put("Ain", new Departement(1))
deptable.put("Aisne", new Departement(2))
deptable.put("Allier", new Departement(3))
Departement dep (Departement)deptable.get(("Aisn
e") // Parcours de toutes les clés de la
hashtable for (Enumeration noms
deptable.keys() noms.hasMoreElements())
String nom (String)noms.nextElements()
Departement dep2 (Departement)deptable.get(nom)
System.out.println(nom " " dep2)
130Choisir un conteneur
Les classes de base
- Le choix dun conteneur dépend du type daccès
131 Les exceptions
132A quoi servent les exceptions ?
Les exceptions
- Le mécanisme des exceptions Java permet de
traiter les erreurs déxécution - Il permet aussi de gérer toutes les situations
hors contrat définit par le concepteur - Le travail du concepteur
- Définir les ensembles dinstructions à risque
- Implémenter les gestionnaire dexceptions pour
chaque cas - Le travail de la machine virtuelle Java
- Distinguer un résultat valide dun code erreur
- Propager jusquau gestionnaire de ce cas
exceptionnel les informations qui lui sont
nécessaires (code erreur, données de contexte)
133Exemple (1/2)
Les exceptions
class Equation double _a double _b double
c // Constructeur Equation(double a, double
b, double c) _a a _b b _c
c // Calcul du delta public double delta()
return _b_b 4_a_c // Solution
public double solution() throws PasDeSolution
double discr delta() if (discrlt0) throw
new PasDeSolution() return (_b
Math.sqrt(discr))/(2_a)
134Exemple (2/2)
Les exceptions
class PasDeSolution extends Exception //
Retourne la description du problème String
toString() return "Léquation na pas de
solution" ... ... // Méthode
appelante try Equation ed new