Introduction Java
systemesdeproduction.blogspot.com
Plan du cours (1/4)
1. Introduction gnrale et historique
Le langage de programmation Java
La plateforme Java
2. Premire application en Java
3. Syntaxe et smantique de Java
Identificateurs
Types primitifs et types de rfrence
Tableaux et chanes de caractres
Arithmtique et oprateurs
Instructions de contrle
4. Premiers concepts de lorient objets
Programmation procdurale v/s Programmation OO
Concepts de lOO
Reprsentations UML
Plan du cours (2/4)
5. Programmation oriente objets en Java
La cration dobjets: Constructeurs et mot-cl new
Les variables: Dclaration et porte
Les mthodes: Dclaration, interface et surcharge
Lencapsulation: public , private et protected
Les membres dinstance et de classe: static
Utilisation de lhritage: this et super
Conversion de types
Polymorphisme
Classes abstraites
Interfaces
Plan du cours (3/4)
6. Structure des API de Java
7. Interfaces graphiques et Gestion des vnements
La philosophie Model-View-Control
Interfaces graphiques: lAWT
Gestion dvnements
Graphisme 2D avec lAWT
8. Les collections
Interfaces
Implmentations HashSet , TreeSet , ArrayList , LinkedList
Algorithmes
Plan du cours (4/4)
9. La gestion des Exceptions
Principes et hirarchie des classes dexceptions
Interception par bloc try catch finally
Lancement par mots-cls throws et throw
10. Multithreading
Dfinition
Raison dtre
Cration
Gestion
11. Annexes
Java et ses concurrents
Les utilitaires de Java
Prsentations
Nom
Activit / Centres dintrt
Exprience de programmation
Motivations pour suivre le cours / Intrt pour Java
Attentes par rapport au cours
Objectifs du cours (1/2)
Dcrire les lments-cl de la plate-forme Java
Compiler et excuter une application Java
Comprendre et utiliser la documentation en ligne de Java
Dcrire la syntaxe du langage
Comprendre le paradigme OO et utiliser Java pour le
mettre en uvre
Comprendre et utiliser les exceptions
Dvelopper une interface graphique
Dcrire les lments de lAWT
Objectifs du cours (2/2)
Dvelopper un programme qui utilise une interface
graphique pour introduire les donnes traiter
Comprendre la gestion des vnements
Comprendre un diagramme de classes et de squences
(UML)
Lire et crire sur des fichiers
Comprendre les bases du multithreading
Dvelopper des applications multiprocess
Quelques sujets non couverts
Dveloppement des applets
Le package Swing
Dveloppement dapplication clients/serveur
TCP/IP
UDP
Enterprise Java Beans (EJB)
Servlets et Java Server Pages (JSP)
Connections des bases de donnes (JDBC)
Rfrences Web
The Java Tutorial from Sun
http://java.sun.com/docs/books/tutorial/
The Java Developer Connection
http://developer.java.sun.com/developer/index.html
Introduction Java
I. Introduction et historique
Survol du chapitre
Quest-ce que Java ?
Java comme langage de programmation
La plateforme Java
La Java Virtual Machine
Les interfaces de programmation dapplication (API)
Dploiement dun programme
Quelques notions historiques
Quest-ce que Java ?
Java est un langage de programmation
Un programme Java est compil et interprt
Java est une plateforme
La plateforme Java, uniquement software, est excute sur la
plateforme du systme dexploitation
La Java Platform est constitue de :
La Java Virtual Machine (JVM)
Des interfaces de programmation dapplication (Java API)
Java comme langage de programmation
Java est un langage de programmation particulier qui
possde des caractristiques avantageuses:
Simplicit et productivit:
Intgration complte de lOO
Gestion mmoire ( Garbage collector )
Robustesse, fiabilit et scurit
Indpendance par rapport aux plateformes
Ouverture:
Support intgr dInternet
Connexion intgre aux bases de donnes (JDBC)
Support des caractres internationaux
Distribution et aspects dynamiques
Performance
Java comme langage de programmation
Simple et orient objet
Java est un langage de programmation simple
Langage de programmation au mme titre que C/C+
+/Perl/Smalltalk/Fortran mais plus simple
Les aspects fondamentaux du langage sont rapidement assimils
Java est orient objet :
La technologie OO aprs un moment de gestation est maintenant
compltement intgre
En java, tout est un objet ( la diffrence du C++ par ex.)
Simple aussi parce quil comporte un grand nombre
dobjets prdfinis pour lutilisateur
Java est familier pour les programmeurs C++
Java comme langage de programmation
Robuste et scuris
Conu pour crer des logiciels hautement fiables
Oblige le programmeur garder lesprit les erreurs
hardware et software
Vrifications compltes lexcution et la compilation
Existence dun garbage collector qui permet dviter
les erreurs de gestion de la mmoire
Java comme langage de programmation
Neutre architecturalement
Il existe une grande diversit de
systmes dexploitation
MyProgram.java
Le compilateur Java gnre un
bytecode, cest dire un format
intermdiaire, neutre
architecturalement, conu pour
faire transiter efficacement le
code vers des hardware
diffrents et/ou plateformes
diffrentes
Le bytecode ne peut-tre
interprt que par le
processeur de la JVM
Java Compiler
MyProgram.class
= bytecode
JVM
Mac
JVM
Windows
JVM
Unix
Java comme langage de programmation
Ouvert et distribu
Support intgr dInternet
La Class URL
Communication rseaux TCP et UDP
RMI, CORBA, Servlets
Connectivit aux bases de donnes
JDBC: Java DataBase Connectivity
Offre des facilits de connexions la plupart des BD du march
Offre un pont vers ODBC
Support des caractres internationaux
Java utilise le jeu de caractres UNICODE
JVM quipe de tables de conversion pour la plupart des caractres
JVM adapte automatiquement les paramtres rgionaux en fonction de
ceux de la machine sur laquelle elle tourne
Java comme langage de programmation
Performant
Considration basique
Excution ralentie cause de linterprteur ?
Le code natif gnr par linterprteur est-il aussi rapide
que celui ralis par un compilateur classique (par ex C)?
Plusieurs processus peuvent tre excuts en mme
temps
Comparable au multitche dun OS
Le temps du CPU est divis (sliced)
Toutes les bibliothques Java
Edition de lien effectue lexcution du programme
Codes excutables chargs depuis un serveur distant
permet la mise jour transparente des applications
Java comme Plateforme
Plateforme = environnement hardware ou software sur
lequel le programme est excut.
La Java Platform se compose de:
la Java Virtual Machine (Java VM)
la Java Application Programming Interface (Java API)
Java comme Plateforme
Java Application Programming Interface (API)
LAPI Java est structur en libraires (packages). Les packages
comprennent des ensembles fonctionnels de composants (classes)..
Le noyau (core) de lAPI Java (incluse dans toute implmentation
complte de la plateforme Java) comprend notamment :
Essentials (data types, objects, string, array, vector, I/O,date,)
Applet
Abstract Windowing Toolkit (AWT)
Basic Networking (URL, Socket TCP or UDP-,IP)
Evolved Networking (Remote Method Invocation)
Internationalization
Security
..
Java comme Plateforme
Java Virtual Machine (1/2)
An imaginery machine that is implemented by emulating
it in software on a real machine. Code for the JVM is
stored in .class files, each of which contains code for at
most one public class
Dfinit les spcifications hardware de la plateforme
Lit le bytecode compil (indpendant de la plateforme)
Implmente en software ou hardware
Implmente dans des environnements de
dveloppement ou dans les navigateurs Web
Java comme Plateforme
Java Virtual Machine (2/2)
La JVM dfinit :
Les instructions de la CPU
Les diffrents registres
Le format des fichiers .class
Le tas ( Heap ) des objets garbage-collects
Lespace mmoire
Java comme Plateforme
Java Runtime Environment
Trois tches principales :
Charger le code (class loader)
Vrifier le code (bytecode verifier)
Excuter le code (runtime interpreter)
Dautres THREAD sexcutent :
Garbage collector
Dploiement dun programme (1/2)
Paradigme classique de la compilation
MyProgram.c
Excut une seule fois
Mais diffrent pour
chaque environnement
Compiler
MyProgram.o
010110
Gnre du code natif directement
excutable, mais spcifique
chaque environnement
Dploiement dun programme (2/2)
Changement de la vision traditionnelle de la compilation
Chaque programme est compil et interprt
Write once run everywhere
MyProgram.java
Excut une seule fois
Compiler
Traduit le programme en un code intermdiaire
Appel bytecode indpendant de la machine
MyProgram.class
Chaque fois que le
programme est excut
Interpreter
010110
Lit le bytecode et excute sur la machine
Bref Historique
1991: Dveloppement de OAK
langage simple, portable et orient objets
pour la programmation dappareils lectroniques mnagers
emprunte la portabilit du Pascal (VM) et la syntaxe de C++
1994: Abandon du projet OAK
Peu denthousiasme pour lide
1995 : Intgration de la JVM dans Netscape
Apparition des Applets
Explosion dInternet attrait grandissant pour Java
1999 : Apparition de JINI
Nouvelle technologie base sur Java
Reprend lambition de dpart dun plug and play universel
Distribu sur tous les appareils munis dun processeur
Introduction Java
II. Premire application en Java
Comment dvelopper une application?
Deux faons dcrire des programmes Java:
En crivant le code dans un simple diteur de texte
Compilation et excution du code en ligne de commande DOS
En utilisant un environnement de dveloppement (IDE)
Netbeans (http://www.netbeans.com)
Borland JBuilder (http://www.borland.com/jbuilder)
IBM WebSphere Studio (http://www.ibm.com/software/awdtools)
Sun ONE Studio (http://wwws.sun.com/software/sundev)
Microsoft .Net Studio (http://msdn.microsoft.com/vstudio)
Une premire application
Application versus Applet
Une application Java
est compose dune classe possdant une mthode main() :
public static void main (String[] args){
//code excuter pour initialiser lapplication
}
Lenvironnement dexcution dpend de lOS de la machine
Pas de restriction au niveau des API
Une applet Java
Comprend une classe publique drivant de java.applet.Applet
Lenvironnement dexcution dpend du browser Web
Restrictions au niveau des API
Gnralement pas autorise lire ou crire sur des fichiers locaux.
Interdiction douvrir des connections rseaux vers dautres systmes que la machine
hte qui a charg lapplet
Une premire application
EX 2.1
Application HelloWorld
Crer un fichier texte : HelloWorld.java
Rgle de bonne pratique : 1 classe par fichier et 1 fichier par classe
public class HelloWorld
{
public static void main (String[]args)
{
La premire ligne du programme doit tre la
dclaration de la classe
Tout programme doit contenir une mthode
main qui porte la signature ci-contre
System.out.println("Hello the World");
}
}
crire lcran Hello the World
Fermer les accolades
Compiler le programme : javac HelloWorld.java
Le compilateur gnre le bytecode dans le fichier : HelloWorld.class
Excuter lapplication : java HelloWorld
Hello the World saffiche lcran
Une premire application
EX 2.2
Applet HelloWorldApplet (1/2)
Crer un fichier texte : HelloWorldApplet.java
Rgle de bonne pratique: 1 classe par fichier et 1 fichier par classe
import java.applet.Applet;
import java.awt.Graphics;
public class HelloWorldApplet extends Applet
Importation des classes externes
ncessaires (issues des API Java)
Dclaration de la classe qui hrite de la
classe prdfinie Applet
{
public void paint(Graphics g)
{
g.drawString("Hello the World", 50, 25);
La mthode paint dtermine laffichage
dans la fentre de lApplet
crire lcran Hello the World
}
}
Fermer les accolades
Compiler le programme : javac HelloWorldApplet.java
Le compilateur gnre le bytecode dans le fichier :
HelloWorldApplet.class
Une premire application
EX 2.2
Applet HelloWorldApplet (2/2)
Les applets sexcutent dans une page HTML
Pour intgrer lapplet dans une page HTML, il suffit dutiliser la balise <APPLET>
Le paramtre CODE de la balise <APPLET> indique le nom de la classe
principale de lapplet
<HTML>
<HEAD>
<TITLE> A Simple Program </TITLE>
</HEAD>
<BODY> Here is the output of my program:
<APPLET CODE="HelloWorldApplet.class" WIDTH=150 HEIGHT=75>
</APPLET>
</BODY>
</HTML>
Ouvrir la page HTML dans un navigateur, lapplet se lance automatiquement au
sein de la page
Introduction Java
III. Syntaxe du langage Java
Survol du chapitre
Conventions dcriture
Commentaires dans le code source
Identificateurs
Mots-cl
Types primitifs et types de rfrences
Les tableaux ( Array )
La classe String
Arithmtique et oprateurs
Instructions de contrle
If, then, else
For
While
Do While
Break et Continue
Packages
Conventions dcriture
Classes
class BankAccount
class RacingBike
Interfaces
interface Account
Mthodes
deposit()
getName()
Packages
package coursTechnofutur3.bank ;
Variables
int accountNumber
Constantes
MAXIMUM_SIZE
Commentaires dans le code source
Trois faons dinclure des commentaires :
Tout texte entre // et la fin de la ligne
// Commentaires sur une seule ligne
Tout texte entre /* et */
/* Commentaires
sur un nombre important voire trs important
de lignes */
Les textes entre /** et */ sont utiliss pour crer des commentaires que
lexcutable JAVADOC pourra traiter afin de produire une documentation (cf.
documentation de lAPI Java)
/** Commentaires destins
la documentation */
Identificateurs
Un identificateur (identifier) permet de dsigner une classe, une
mthode, une variable
On ne peut utiliser ce que lon veut :
Interdiction dutiliser les mots-cls
Commencent par :
Une lettre
Un $
Un _ (underscore)
Ne commencent pas par :
Un chiffre
Un signe de ponctuation autre que $ ou _
Mots-cl
abstract
boolean
break
byte
case
catch
char
class
const *
continue
default
do
double
else
extends
final
finally
float
for
goto *
if
implements
import
instanceof
* Indique un mot cl qui est peu utilis
** A partir de la plate-forme Java2
int
interface
long
native
new
package
private
protected
public
return
short
static
strictfp **
super
switch
synchronized
this
throw
throws
transient
try
void
volatile
while
Types primitifs et types de rfrence
Java est un langage fortement typ
Le type de donnes prcise
les valeurs que la variable peut contenir
les oprations que lon peut raliser dessus
Deux types de donnes:
Donne primitive: contient physiquement la valeur
(caractre, nombre, boolen)
Rfrence: contient ladresse mmoire o linformation relative lobjet,
linterface, etc. est rellement stocke
Rfrence:
Adresse
Types primitifs et types de rfrence
Types de donnes primitifs (1/4)
P r im it iv e D a t a T y p e s
In te g ra l
b y te
8 b it s - 1 2 8 t o 1 2 7
s h o r t 1 6 b it s - 3 2 7 6 8 t o 3 2 7 6 7
in t
3 2 b it s - 2 ^ 3 1 t o 2 ^ 3 1 -1
lo n g 6 4 b it s - 2 ^ 6 3 t o 2 ^ 6 3 -1
T e x tu a l
c h a r 1 6 b its 0 t o 6 5 5 3 5
F lo a t in g
f lo a t 3 2 b it s 1 .4 E - 4 5 3 . 4 E 3 8
d o u b le 6 4 b it s 4 .9 E - 3 2 4 1 . 8 E 3 0 8
L o g ic a l
o n e b it : t ru e o r fa ls e
Types primitifs et types de rfrence
Types de donnes primitifs (2/4)
Explication:
byte : cod sur 8 bits 28 valeurs (27) to (271) = -128 127
int : cod sur 32 bits 232 valeurs (231) to (2311)
Dclaration et initialisation :
int
short
int x=12;
long
byte
long x= 200L; // Nombre accol un L
double
float
double x=23.2323;
char
boolean
char c=a; char c=\u0061; char c=(char)97;
short x= 32; (short x=33000; // Hors limite)
byte x=012; // Nombre commenant avec un 0
float x= 23.233F; // Nombre accol un F
boolean b=true;
Types primitifs et types de rfrence
Types de donnes primitifs (3/4)
Dclaration, Initialisation et Assignation des types primitifs
int t;
Dclaration dun entier t (t est lidentificateur)
int u = 3;
Dclaration et initialisation dun entier
t=7;
Initialisation de t la valeur 7
u=t;
Assignation (affectation) de la valeur de t u
m=9;
Erreur dclaration pralable ncessaire
char c;
Dclaration
c=a;
Initialisation
Types primitifs et types de rfrence
Types de donnes primitifs (4/4)
Exemple:
int a = 5;
Dclaration et initialisation de 2 entiers: a et b
int b = 8;
Affectation de la valeur de b a
a=b;
a=8
b=8
Dsormais, il existe deux variables en mmoire qui ont la
mme valeur
Types primitifs et types de rfrence
Types de rfrence
Tous les types hormis les types primitifs
Pointeur implicite sur un objet
Rfrence:
Adresse
Les tableaux (Array) (1/3)
Un tableau est utilis pour stocker une collection de variables de
mme type
On peut crer des tableaux de types primitifs ou de types de
rfrences
(cf. argument de la fonction main : String[] args)
Un tableau doit tre
Dclar
Cr
Ses variables initialises
int[] nombres;
nombres = new int[10];
int[] nombres = new int[10];
nombres[0] = 28;
// dclaration
// cration
// dclaration et cration
Les tableaux (Array) (2/3)
On peut construire des tableaux plusieurs dimensions
Des tableaux plusieurs dimensions sont en fait des tableaux de tableaux
int[][] matrice = new int[3][];
matrice[0] = new int[4];
matrice[1] = new int[5];
matrice[2] = new int[3];
matrice[0][0] = 25;
matrice est une rfrence vers
un tableau contenant lui-mme 3
tableaux de taille non dfinie
Le premier lment de la matrice
est une rfrence vers un tableau
de 4 entiers,
Le premier lment du premier
tableau de la matrice est un entier
de valeur 25
Exemple:
Crer et initialiser une matrice contenant deux tableaux de 2 et 3 points respectivement
Crer 5 objets de type Point
Affecter ces 5 objets aux 5 lments de la matrice
Les tableaux (Array) (3/3)
Point[][] matriceDePoints;
matriceDePoints
matriceDePoints = new Point[2][];
matriceDePoints[0] = new Point[2];
matriceDePoints[1] = new Point[3];
Point p1, p2, p3, p4, p5;
p1 = new Point(10,15);
10,15
[0]
ox0adfc12
p1
[1]
p2 = new Point(11,16);
p3 = new Point(12,17);
[0]
11,16
ox0adfc43
p2
12,17
dy0adfc14
p3
p4 = new Point(13,18);
p5 = new Point(14,19);
matriceDePoints[0][0] = p1;
matriceDePoints[0][1] = p2;
[0]
13,18
ox0fdfc17
p4
matriceDePoints[1][0] = p3;
matriceDePoints[1][1] = p4;
matriceDePoints[1][2] = p5;
[1]
[1]
[2]
14,19
ox0agrc57
p5
La classe String
String nest pas un type primitif, cest une classe
Dclaration de deux String:
String s1, s2;
Initialisation :
s1 = "Hello";
s2 = "le monde";
Dclaration et initialisation :
String s3 = "Hello";
Concatnation :
String s4 = s1 + " " + s2;
Arithmtique et oprateurs
Arithmtique lmentaire
Quelle est la valeur de : 5+3*4+(12/4+1)
Rgles de prcdences sur les oprateurs:
Niveau
Symbole Signification
()
Parenthse
*
/
%
Produit
Division
Modulo
+
-
Addition ou concatnation
Soustraction
Arithmtique et oprateurs
Oprateurs de comparaison
Pour comparer deux valeurs:
Oprateur
Exemple
Renvoie TRUE si
>
>=
v1 > v2
v1 >= v2
v1 plus grand que v2
Plus grand ou gal
<
<=
v1 < v2
v1 <= v2
Plus petit que
Plus petit ou gal
==
!=
v1 == v2
v1 != v2
gal
diffrent
Oprateurs logiques:
Oprateur
Usage
Renvoie TRUE si
&&
&
expr1 && expr2
expr1 & expr2
expr1 et expr2 sont vraies
Idem mais value toujours les 2 expressions
||
|
expr1 || expr2
expr1 | expr2
Expr1 ou expr2, ou les deux sont vraies
idem mais value toujours les 2 expressions
! expr1
!=
expr1 != expr2
expr1 est fausse
si expr1 est diffrent de expr2
Arithmtique et oprateurs
Oprateurs dassignation (daffectation)
Loprateur de base est =
Il existe des oprateurs dassignation qui ralisent la fois
une opration arithmtique, logique, ou bit bit
et lassignation proprement dite
Oprateur
Exemple
quivalent
+=
expr1 += expr2
expr1 = expr1 + expr2
-=
expr1 -= expr2
expr1 = expr1 expr2
*=
expr1 *= expr2
expr1 = expr1 * expr2
/=
expr1 /= expr2
expr1 = expr1 / expr2
%=
expr1 %= expr2
expr1 = expr1 % expr2
Instructions et structures de contrle
Dclarations, instructions, blocs
Une instruction
Ralise un traitement particulier:
Renvoie ventuellement le rsultat du calcul
Est comparable une phrase du langage naturel
Constitue lunit dexcution
Est toujours suivie de ;
Instruction daffectation (dassignation), instruction de dclaration
Un bloc
Est une suite dinstructions entre accolades { et }
Dlimite la porte des variables qui y sont dclares
Une dclaration
Constitue la signature dun lment (classe, variable ou mthode)
Annonce la dfinition de cet lment
Est (normalement) toujours suivie dun bloc dinstructions
Instructions et structures de contrle
Structures de contrle
Les structures de contrles permettent darrter lexcution linaire
des instructions (de bas en haut et de gauche droite)
Elles permettent dexcuter conditionnellement une instruction, ou de
raliser une boucle
Type dinstruction
Dcision
Boucle
Traitement dexceptions
Branchement
Mots cls utiliss
if() else switch() case
for( ; ; ) while () do while()
try catch finally throw
label : -- break continue -- return
Instructions et structures de contrle
Structures de contrle
IF THEN ELSE
if (expression)
{
//instructions
}
if (expression)
{
//instructions
}
else
{
//instructions dans les autres cas
}
Instructions et structures de contrle
Structures de contrle
SWITCH CASE
switch (number)
{
case 1 : instructions;
break;
case 2 : instructions;
break;
default : instructions;
}
Instructions et structures de contrle
Structures de contrle
FOR
for (initialisation; condition; mise jour de valeurs){
// instructions
}
Initialisation: excuter lorsque le programme rentre pour la premire
fois dans la boucle
Condition : remplir pour recommencer le bloc dinstructions
Mise jour: instruction excute chaque fois que la boucle est termine
Exemples:
for (int i=0 ; i<10 ; i++) {
System.out.println("The value of i is : " + i);
}
Instructions et structures de contrle
Structures de contrle
WHILE DO WHILE
while (test logique) {
//instructions
}
Si le code de la boucle doit tre excut la premire fois de toute faon:
do {
// code to perform
} while (logical_test)
Boucle infinie:
while (true) {
//instructions
}
Instructions et structures de contrle
Structures de contrle
BREAK / CONTINUE
BREAK: achve immdiatement la boucle
CONTINUE: ignore le reste des instructions et recommence au dbut
de la boucle
for (int i=0; i<10 ;i++){
if (i==5) continue; // Si i=5, on recommence au dbut
if (i==7) break;
/* Si i=7, on sort de la boucle et
les instructions suivantes sont
excutes */
System.out.println("The value of i is : " + i);
}
Instructions et structures de contrle
Structures de contrle
BREAK [LABEL]
CONTINUE [LABEL]
outer:
for (int i=0 ; i<10 ; i++)
for(int j=20;j>4;j--){
if (i==5) continue;
if (i==7)
// if i=5, you jump to the beginning of the loop
break outer; // if i=7, you jump outside the loop and continue
System.out.println(The value of i,j is :+i+
}
,+j);
Les packages et les importations
Les packages offrent une organisation structure des classes
La rpartition des packages correspond lorganisation physique
Les packages conditionnent les importations de classes
La variable CLASSPATH indique le chemin daccs aux packages
Les packages permettent la coexistence de classes de mme nom
Les mots-cl associs sont package et import
package bank
Exemple:
class NormalAccount
class SparingAccount
class BankAccount
package technofutur3.bank
class SparingAccount
class NormalAccount
package technofutur3.mediatheque
import technofutur3.bank.NormalAccount
package mediatheque
class NormalAccount
Exercices
Ding Ding Bottle
Ecrire un programme qui compte de 1 100
Affiche ces nombres lcran
EX 3.1
Remplace les multiples de 5 par Bottle
Remplace les multiples de 7 par Ding Ding
Calcul de factorielle
Ecrire un programme qui calcule la factorielle dun nombre
Dessiner une Pyramide
*
**
***
Dcoder une chane de caractre
Compiler et excuter les programmes cr
EX 3.2
Exercices
Etudiants
EX 3.3
Vous recevez une une les notes de vos N tudiants (/10). N est donn par
lutilisateur au dbut.
Notez pour chaque tudiant sil russit ou choue et, la fin, indiquez le
nombre de ceux qui chouent, le nombre de ceux qui russissent, la moyenne
totale et les deux moyennes de ceux qui chouent et russissent
Excuter les programmes et observer le rsultat
Introduction Java
IV. Premiers concepts orients objets
Les concepts de lOO
Orient objet?
Un programme orient objet est uniquement
constitu de classes interagissant par envoi de
messages
Lintgralit du code dun programme orient objet
se trouve donc lintrieur de classes
package bank;
Les concepts de lOO
import java.lang.*;
Orient objet?
Dclaration
de la classe
Class Body
public class BankAccount {
Variables dinstance
ou champs
Dfinition du
constructeur
Mthodes daccs
Dfinition
des
mthodes
}
private String name ;
private int solde ;
private int interest ;
public BankAccount(String n,int s,int i) {
name=n ;
solde=s;
interest=i;
}
public String getName() { return name; }
public void setName (String n) {name= n;}
public void deposit (int amount) {
solde += amount ;
}
public void withdrawal (int amount ){
solde-=amount ;
}
Exercices
Les GSM
Crer une classe GSM
Quelles sont les variables dtats accessibles et non accessibles?
Quelles sont les fonctionnalits offertes lutilisateur?
EX 4.1
Les concepts de lOO
Hritage
En quoi consiste lhritage?
Supposons quil existe dj une classe qui dfinit un certain nombre
de messages et quon aie besoin dune classe identique mais pourvue
de quelques messages supplmentaires
Comment viter de rcrire la classe de dpart?
Regrouper les classes en super-classes en factorisant et spcialisant
La sous-classe hrite des attributs et mthodes et peut en rajouter de
nouveaux
Quid du multi-hritage?
Appareil de Communication
Tlphone
GSM
Fixe
Walkie-Talkie
Tlfax
Les concepts de lOO
Hritage
Ex: Dans lcosystme
La classe Faune regroupe les animaux
La classe Ressource regroupe leau et la plante
Les concepts de lOO
Hritage
Quid du multi-hritage?
Possible ou non dun langage un autre
Les concepts de lOO
Hritage
Quest-ce que le polymorphisme?
Concept bas sur la notion de redfinition de mthodes
Permet une tierce classe de traiter un ensemble de classes sans connatre
leur nature ultime
Permet de factoriser des dnominations dactivit mais pas les activits ellesmmes
Consiste permettre une classe de sadresser une autre en sollicitant un
service gnrique qui sappliquera diffremment au niveau de chaque sousclasse du destinataire du message
En dautres termes, permet de changer le comportement dune classe de base
sans la modifier Deux objets peuvent ragir diffremment au mme appel
de mthode
Uniquement possible entre classes relies par un lien dhritage
Exemple dans lcosystme?
Demander tous les animaux de se dplacer (selon leurs propres rgles) en
leur adressant un message en tant quobjets de type Faune
Exercices
Les tres vivants
Subdiviser les tre vivants en une hirarchie de classes
A chaque niveau dans la hirarchie, indiquer:
Quelles sont les variables dtats accessibles et non accessibles aux autres ?
Quelles sont les comportements exploitables par les autres ?
Quelles sont les comportements internes, cachs aux autres ?
Quelle hirarchie de classes pourrait-on proposer ?
Raliser un diagramme de classes UML du rsultat
EX 4.2
Les concepts de lOO
La modlisation devient la rfrence
Pourquoi la modlisation?
La conception OO est entirement batie sur une modlisation des objets
intervenant dans le problme
Avant de programmer quoi que ce soit, il faut donc modliser les classes et
leurs relations au minimum
Comment?
Sur base dUML (Unified Modeling Language)
Notation standardise pour toute le dveloppement OO de la conception au
dploiement
Dfinition de 9 diagrammes
1. Identifier les classes
Attributs, comportements, polymorphisme
2. Dterminer les relations entre les classes
Associations / Dpendance / Hritage
3. Construire les modles
Les concepts de lOO
La modlisation devient la rfrence
Creating the UML
UML 1.3
OMG Acceptance, Nov 1997
UML 1.1
Final submission to OMG, Sep 97
public
feedback
First submission to OMG, Jan 97
UML 1.0
UML partners
UML 0.9
Web - June 96
OOPSLA 95
Other methods
Unified Method 0.8
Booch method
OMT
30
OOSE
Les concepts de lOO
La modlisation devient la rfrence
Quest-ce quUML?
UML est un langage objet graphique - un formalisme orient objet,
bas sur des diagrammes (9)
UML permet de s abstraire du code par une reprsentation des
interactions statiques et du droulement dynamique de lapplication.
UML prend en compte, le cahier de charge, larchitecture statique, la
dynamique et les aspects implmentation
Facilite linteraction, les gros projets
Gnrateur de squelette de code
UML est un langage PAS une mthodologie, aucune dmarche nest
propose juste une notation
Les concepts de lOO
La modlisation devient la rfrence
Design View
Classes, interfaces,
collaborations
Implementation View
Components
Use cases
Use Case View
Process View
Active classes
Deployment View
Nodes
Les concepts de lOO
La modlisation devient la rfrence
Diagrammes UML
Les diagrammes des cas dutilisation: les fonctions du systme, du
point de vue de lutilisateur ou dun systme extrieur - lusage que lon
en fait
Les diagrammes de classes: une description statique des relations
entre les classes
Les diagrammes dobjet: une description statique des objets et de
leurs relations. Une version instancie du prcdent
Les diagrammes de squence: un droulement temporel des objets et
de leurs interactions
Les diagrammes de collaboration: les objets et leurs interactions en
termes d envois de message + prise en compte de la squentialit
Les concepts de lOO
La modlisation devient la rfrence
Diagrammes UML
Les diagrammes dtats-transitions: scrute les cycles
de vie dune classe dobjet, la succession d tats et les transitions
Les diagrammes dactivit: le comportement des diffrentes oprations
en termes dactions
Les diagrammes de composants: reprsente les composants
physiques d une application
Les diagrammes de dploiements: le dploiement des composants sur
les dispositifs et les supports matriels
Les concepts de lOO
La modlisation devient la rfrence
Diagramme de cas dutilisation
Cela rpond aux spcifications du systme:
Ses fonctionnalits, son utilisation, les attentes de l utilisateur
Ex: Distributeur MisterCash
Effectuer
un virement
La Banque
Grer le
distributeur
Le client
Retirer
de l argent
Effectuer la
Consulter
un compte
maintenance
Un
employ
Les concepts de lOO
La modlisation devient la rfrence
Exemple de diagramme de cas dutilisation dtaill
paul : Client
le systme
Insrer carte
Demander code
Vrifier carte
Entrer code 1234
Message derreur
Demander code
Entrer code 6622
...
Vrifier code
Les concepts de lOO
La modlisation devient la rfrence
Diagramme de classes
Le but du diagramme de classes est de reprsenter les classes au sein dun
modle
Dans une application OO, les classes possdent:
Des attributs (variables membres)
Des mthodes (fonctions membres)
Des relations avec dautres classes
Cest tout cela que le diagramme de classes reprsente
Lencapsulation est reprsente par:
- (private), + (public), # (protected)
Les attributs scrivent:
+/-/# nomVariable : Type
Nom Classe
Attributs
Mthodes()
Les mthodes scrivent:
+/-/# nomMethode(Type des arguments) : Type du retour ou void
Les concepts de lOO
La modlisation devient la rfrence
Les relations dhritage sont reprsentes par:
A
B signifie que la classe A hrite de la classe B
Lagrgation faible est reprsente par:
A
B signifie que la classe A possde
un ou plusieurs attributs B
Lagrgation forte (ou composition) est reprsente par:
A
B signifie que les objets de la classe B ne peuvent exister
quau sein dobjets de type A
Les concepts de lOO
La modlisation devient la rfrence
Exemple de diagramme de classes
BankAccount
MyProgram
- owner : String
- number : String
- solde : int
- interest : double
deposit(int):int
withdraw(int):int
addALoan(Loan l):void
payYourLoans():void
calculInterest():int
isReimbursed(int):void
Bank
Loan
- amount : int
- mensuality : int
NormalAccount
calculInterest():int
SparingAccount
calculInterest():int
Loan(int,int,BankAccount)
reimbourse():void
Les concepts de lOO
La modlisation devient la rfrence
Exemple de diagramme de squence
paul
le distrib.
la carte de P.
la reserve
la banque
le compte de P.
retirer(500)
lireNCompte()
retirerDeLArgent(500,88219)
dbiter(500)
sortirDesBillets(5)
sortirBillets ()
Les concepts de lOO
Les avantages de lOO
Les programmes sont plus stables, plus robustes et plus faciles
maintenir car le couplage est faible entre les classes
(encapsulation)
elle facilite grandement le r-emploi des programmes: par petite
adaptation, par agrgation ou par hritage
mergence des design patterns
il est plus facile de travailler de manire itre et volutive car les
programmes sont facilement extensibles. On peut donc
graduellement rduire le risque plutt que de laisser la seule
valuation pour la fin.
lOO permet de faire une bonne analyse du problme suffisamment
dtache de ltape dcriture du code - on peut travailler de manire
trs abstraite UML
lOO colle beaucoup mieux notre faon de percevoir et de dcouper
le monde
Les concepts de lOO
Les avantages de lOO
Tous ces avantages de lOO se font de plus en plus vidents avec le
grossissement des projets informatiques et la multiplication des
acteurs. Des aspects tels lencapsulation, lhritage ou le
polymorphisme prennent vraiment tout leur sens. On apprhende
mieux les bnfices de langage plus stable, plus facilement
extensible et plus facilement r-employable
JAVA est un langage strictement OO qui a t propuls sur la scne
par sa complmentarit avec Internet mais cette mme
complmentarit (avec ce rseau compltement ouvert) rend encore
plus prcieux les aspects de stabilit et de scurit
Les concepts de lOO
Langages et plateformes
Quels sont les principaux langages orient objet aujourdhui?
C++
Hybride, permet la coexistence dOO et procdural
Puissant et plus complexe
Pas de ramasse-miettes , multihritage, etc.
Java
Trs pur et strictement OO
Neutre architecturalement (Multi-plateformes)
Ramasse-miettes, pas de multihritage, nombreuses librairies disponibles
C#
Trs proche de Java
Conu par Microsoft
Les concepts de lOO
En rsum
Tout est un objet
Lexcution dun programme est ralise par changes de messages entre
objets
Un message est une demande daction, caractrise par les paramtres
ncessaires la ralisation de cette action
Tout objet est une instance de classe, qui est le moule gnrique des
objets de ce type
Les classes dfinissent les comportements possibles de leurs objets
Les classes sont organises en une structure arborescente racine unique :
la hirarchie dhritage
Tout le code des programmes de trouve entirement et exclusivement dans le
corps des classes
A lexception toutefois de deux instructions:
package dfinit lensemble auquel la classe appartient
import permet lutilisation de classes extrieures au package
UML permet la reprsentation graphique des applications
Introduction Java
V. Programmation oriente objets en Java
Survol du chapitre
La cration dobjets: Constructeurs et mot-cl new
Les variables: Dclaration et porte
Les mthodes: Dclaration, interface et surcharge
Lencapsulation: public , private et protected
Les membres dinstance et de classe: static
Utilisation de lhritage: this et super
Conversion de types
Polymorphisme
Classes abstraites
Interfaces
La cration dobjets (1/2)
Le constructeur
A le mme nom que la classe
Quand un objet est cr, on invoque tout
dabord le constructeur de la classe
Un constructeur utilise comme arguments
des variables initialisant son tat interne
On peut surcharger les constructeurs, i.e
dfinir de multiples constructeurs
Il existe toujours un constructeur. Sil nest
pas explicitement dfini, il sera un
constructeur par dfaut, sans arguments
Signature dun constructeur:
Modificateur daccs ( en gnral public)
Pas de type de retour
Le mme nom que la classe
Les arguments sont utiliss pour initialiser les
variables de la classe
public BankAccount(String
n,int s,int i)
{
name=n ;
solde=s;
interest=i;
}
public BankAccount(String n)
{
name=n ;
solde=0;
interest=10;
}
La cration dobjets (2/2)
Lappel au constructeur
Se fait pour initialiser un objet
Provoque la cration relle de lobjet en mmoire
Par linitialisation de ses variables internes propres
Se fait par lemploi du mot cl new
BankAccount ba1, ba2;
ba1 = new BankAccount("Bersini", 10.000, 7);
ba2 = new BankAccount("Bersini");
Les variables
Dclaration des variables membres (1/2)
Une variable est un endroit de la mmoire laquelle on a donn un
nom de sorte que lon puisse y faire facilement rfrence dans le
programme
Une variable a une valeur, correspondant un certain type
La valeur dune variable peut changer au cours de lexcution du
programme
Une variable Java est conue pour un type particulier de donne
Les variables
Dclaration des variables membres (2/2)
Rappel: toute variable doit tre dclare et initialise
Les variables membres sont des variables dclares
lintrieur du corps de la classe mais lextrieur dune
mthode particulire, elles sont donc accessibles depuis
nimporte o dans la classe.
optionnel
La signature de la variable :
Les modificateurs daccs: indiquent le niveau daccessibilit de la variable
[static]: permet la dclaration dune variable de classe
[final]: empche la modification de la variable
[transient]: on ne tient pas compte de la variable en srialisant lobjet
[volatile]: pour le multithreading
Le type de la variable (ex: int, String, double, RacingBike,)
Le nom de la variable (identificateur)
Les variables
Porte dune variable et des attributs
Porte = Section du programme dans laquelle une variable existe
La variable ne peut donc pas tre utilise en dehors de cette section
La porte est dfinie par les accolades qui lentourent directement
Exemple:
if(solde < 0){
String avertissement = "Attention, solde ngatif !"
}
else{
String avertissement = "Tutti va bene !"
}
System.out.println(avertissement);
// Une erreur apparatra ds la compilation, car la variable
// avertissement nexiste pas en dehors du bloc IF
Avantages
Rend les programmes plus faciles corriger
Limite le risque derreurs lies au remploi dun nom pour diffrentes variables
Exercices
Analyser la classe Point
EX 5.1
Que se passe-t-il lexcution du programme?
Excuter le programme pour vrifier
Analyser la classe Scope
Que se passe-t-il lexcution du programme?
Excuter le programme pour vrifier
Mme question si la mthode job() est redfinie comme suit:
public void job() {
i=5;
for(int i=0;i<10;i++) {
System.out.println(++this.i);
}
}
EX 5.2
Les variables
Types de rfrence (1/3)
Tous les types hormis les types primitifs
Pointeur implicite sur un objet
Rfrence:
Adresse
class Point{
int x=7, y=10;
Point(int x,int y){this.x=x;this.y=y;}
void move(int dx,int dy){x+=dx;y+=dy;}
}
Les variables
Types de rfrence (2/3)
Dclaration et cration dobjets
Dclaration : Point p;
????
Cration : p = new Point(2,3);
1. Cherche une place
????
x
y
0
0
2. Assignation dune valeur
????
x
y
7
10
3. Excution du constructeur
????
2
3
4. Cration du pointeur
p ox0123abcd
y
x
y
2
3
Les variables
Types de rfrence (3/3)
Assignation dun type de rfrence
Point start=new Point(4,3);
Point end=new Point(23,32);
Il ny a dsormais plus de
rfrence vers lancien
Point start , il sera donc
dtruit par le Garbage
Collector
Point p=end;
p.x=12;
start=p;
start ox0123abcd
x
y
4
3
end
oxcafebabe
x
y
23 12
32
oxcafebabe
Exercice
Classe MyPoint
Lire le code et prvoir ce qui apparatra lcran lexcution
Observer en particulier les mcanismes de cration et dassignation de
variables de rfrences dans la classe
EX 5.3
Les mthodes (1/4)
Dclaration dune mthode
Une mthode est compose de:
public void deposit (int amount) {
solde+=amount ;
Signature dune mthode:
Sa dclaration
Son corps
Signature
Modificateurs daccs : public, protected, private, aucun
[modificateurs optionnels] : static, native, synchronized, final, abstract
Type de retour : type de la valeur retourne
Nom de la mthode (identificateur)
Listes de paramtres entre parenthses (peut tre vide mais les parenthses sont
indispensables)
[exception] (throws Exception)
Au minimum:
La mthode possde un identificateur et un type de retour
Si la mthode ne renvoie rien le type de retour est void
Les paramtres dune mthode fournissent une information depuis
lextrieur du scope de la mthode (idem que pour le constructeur)
Les mthodes (2/4)
Passage darguments
Les arguments dune mthode peuvent tre de deux types
Variable de type primitif
Objet
Lorsque largument est une variable de type primitif, cest la valeur de
la variable qui est passe en paramtre
Lorsque largument est un objet, il y a, thoriquement, deux lments
qui pourraient tre passs en paramtre:
La rfrence vers lobjet
Lobjet lui-mme
A la diffrence de C++, Java considre toujours que cest la valeur de
la rfrence et non la valeur de lobjet qui est passe en argument
Les mthodes (3/4)
Linterface dune mthode
Linterface dune mthode, cest sa signature
Cette signature, qui dfinit linterface de la mthode, correspond en
fait au message chang quand la mthode est appele
Le message se limite de fait uniquement la signature de la mthode
Type de retour
Nom
Arguments
Lexpditeur du message na donc jamais besoin de connatre
limplmentation ou corps de la mthode
On a donc:
Dclaration = Signature = Message de la mthode
Bloc dinstruction = Corps = Implmentation de la mthode
Les mthodes (4/4)
La surcharge de mthodes
La surcharge est un mcanisme qui consiste a dupliquer une
mthode en modifiant les arguments de sa signature
Exemple:
int solde ;
public void deposit(int amount){
solde+=amount;
}
public void deposit(double amount) {
solde +=(int) amount;
}
Lencapsulation (1/2)
Raisons dtre
Les modificateurs daccs qui caractrisent lencapsulation sont
justifies par diffrents lments:
Prservation de la scurit des donnes
Les donnes prives sont simplement inaccessibles de lextrieur
Elles ne peuvent donc tre lues ou modifies que par les mthodes daccs
rendues publiques
Prservation de lintgrit des donnes
La modification directe de la valeur dune variable prive tant impossible,
seule la modification travers des mthodes spcifiquement conues est
possible, ce qui permet de mettre en place des mcanismes de vrification et
de validation des valeurs de la variable
Cohrence des systmes dvelopps en quipes
Les dveloppeurs de classes extrieures ne font appel quaux mthodes et,
pour ce faire, nont besoin que de connatre la signature. Leur code est donc
indpendant de limplmentation des mthodes
Lencapsulation (2/2)
Accs aux membres dune classe
En java, les modificateurs daccs sont utiliss pour protger
laccessibilit des variables et des mthodes.
Les accs sont contrls en respectant le tableau suivant:
Mot-cl
classe
package
sous classe
private
protected
public
[aucun]
Une classe a toujours
accs ses membres.
Les classes dun mme
package protgent
uniquement leurs
membres privs (
lintrieur du package)
world
Seul les membres publics
sont visibles depuis le
monde extrieur.
Une classe fille (ou
drive) na accs quaux
membres publics et
protected de la classe
mre.
Exercice
EX 5.4a
VilleCapitale (1re partie)
1. Crer une classe Ville correspondant au schma UML indiqu. Ecrivez la
mthode decrisToi() qui affiche lcran le nom de la ville et le nombre
dhabitants
2. Crez une classe Monde qui utilise la classe Ville. La fonction main dans
Monde comprendra les lignes suivantes:
Ville[] mesVilles=new Ville[5];
mesVilles[0]= new Ville( Gosselies );
mesVilles[1]= new Ville( Namur );
...
3. Compilez et excutez en ligne de commande
4. Surchargez le constructeur de la classe Ville.
Dfinissez un constructeur, deux arguments
(un String et un entier), utilisant celui dfini en (1)
5. Peut-on modifier la variable dinstance nomVille
depuis lextrieur de la classe ? et depuis
lintrieur ?
Ville
- nbHabitants : int
- nomVille : String
+ Ville(String)
+ decrisToi(): void
+ getNomVille(): String
+ getNbHabitants(): int
+ setNbHabitants(int): void
Membres dinstance et membres de classe (1/2)
Le mot-cl static
Chaque objet a sa propre mmoire de ses variables dinstance
Le systme alloue de la mmoire aux variables de classe ds quil
rencontre la classe. Chaque instance possde la mme valeur dune
variable de classe.
variable dinstance
class BankAccount {
int solde;
static int soldePrim;
variable de classe
void deposit(int amount){
solde+=amount;
soldePrim+=amount;
}
}
solde
solde
soldePrim
Account1
Account2
Membres dinstance et membres de classe (2/2)
Le mot-cl static
Variables et mthodes statiques
Initialises ds que la classe est charge en mmoire
Pas besoin de crer un objet (instance de classe)
Mthodes statiques
Fournissent une fonctionnalit une classe entire
Cas des mthodes non destines accomplir une action sur un objet
individuel de la classe
Exemples: Math.random(), Integer.parseInt(String s), main(String[] args)
Les mthodes statiques ne peuvent pas accder aux variables dinstances
(elles sont au-dessus des variables dinstances)
class AnIntegerNamedX {
x est une variable
int x;
dinstance, donc
static public int x() { return x; }
inaccessible pour la
static public void setX(int newX) { this.x = newX; }mthode static setX
}
Exercice
EX 5.5
Cercles et leurs surfaces
1. Crer une classe Cercle modlisant des ronds destins safficher
lcran
1. Quels attributs devraient tre dinstance ou de classe?
2. Quelles pourraient tre ses mthodes dinstance?
3. Crer les mthode de calcul du primtre et de la surface
Ne peut-on pas en faire des mthodes de classe?
Quel avantage y aurait-il faire cela?
2. Crer une classe Dessin qui contient la mthode main
1. La mthode main instanciera un Cercle, en affichera les coordonnes et en
calculera le primtre et laire
Utilisation de lhritage (1/5)
Java noffre pas la possibilit dhritage multiple
La super super classe, est la classe Object (parente de toute
classe)
Une sous-classe hrite des variables et des mthodes de ses classes
parentes
La clause extends apparat dans la dclaration de la classe
class BankAccount {
protected int solde;
BankAccount
int solde
}
class NormalAccount extends BankAccount {
public void job(){solde+=1000;}
}
NormalAccount
job(): void
Utilisation de lhritage (2/5)
Cacher des donnes membres
La variable aNumber du compte normal cache la variable aNumber de
la classe gnrale compte en banque. Mais on peut accder la
variable aNumber dun compte en banque partir dun compte
normal en utilisant le mot-cl super :
super.aNumber
class BankAccount{
Number aNumber;
}
class NormalAccount extends BankAccount{
Float aNumber;
}
Utilisation de lhritage (3/5)
Les mots-cl this et super
Dans une mthode
this est une rfrence sur lobjet en cours lui-mme
super permet daccder aux membres de la superclasse (peut tre
ncessaire en cas de redfinition, par ex.)
Dans le constructeur
Il existe toujours un constructeur. Sil nest pas explicitement dfini, il sera un
constructeur par dfaut, sans arguments
this est toujours une rfrence sur lobjet en cours (de cration) lui-mme
super permet dappeler le constructeur de la classe parent, ce qui est
obligatoire si celui-ci attend des arguments
class MyClass{
int x;
MyClass(int x){
this.x=x;// constructeur
}
}
parent
class Child extends MyClass {
Child(){
super(6); // appel du constructeur
}
}
parent
Utilisation de lhritage (4/5)
Les mots-cl this et super
En cas de surcharge du constructeur:
class Employee {
String name,firstname;
Address a;
int age;
Employee(String name,String firstname,Address a,int age){
super();
this. firstname= firstname;
this.name=name;
this.a=a;
this.age=age;
}
Employee(String name,String firstname){
this(name,firstname,null,-1);
}
Utilisation de lhritage (5/5)
Redfinition de mthodes
La redfinition nest pas obligatoire !! Mais elle permet dadapter un comportement et de
le spcifier pour la sous-classe.
class BankAccount {
public void computeInterest(){
solde+=300;
//annual gift
}}
class NormalAccount extends BankAccount {
public void computeInterest(){
super.computeInterest();//call the overriden method
solde*=1.07;
//annual increase
}}
Obligation de redfinir les mthodes dclares comme abstraites (abstract)
Interdiction de redfinir les mthode dclares comme finales (final)
Exercice
EX 5.4b
VilleCapitale (2me partie)
1. Crez une classe Capitale qui hrite de la classe Ville. Celle-ci comprendra
une variable dinstance supplmentaire : nomPays. Expliquez le mcanisme
de construction dune classe drive. Testez diffrents cas : appel explicite ou
non au constructeur de la classe mre ; existence ou non dun constructeur
sans arguments.
2. Redfinissez la mthode decrisToi(), en faisant appel la mthode de la
classe mre. (decrisToi() affichera lcran Capitale de nomPays: nomVille ;
nbHabitants). Testez.
3. Changez les modificateurs daccs des donnes membres de la classe mre,
en remplaant private par protected. Peut-on accder ces variables depuis
lextrieur de la classe Ville ? Quel danger cela prsente-t-il (en termes
dencapsulation)?
Conversion de types (1/2)
Dfinition
Java, langage fortement typ, impose le respect du type dun objet
Toutefois, il est possible de convertir le type dun objet vers un type
compatible
Un type A est compatible avec un type B si une valeur du type A peut tre
assigne une variable du type B
Ex: Un entier et un double
La conversion de type peut se produire
Implicitement (conversion automatique)
Explicitement (conversion force)
La conversion explicite sobtient en faisant prcder la variable du
type vers lequel elle doit tre convertie entre parenthses (casting)
double d = 3.1416;
int i = (int) d;
Conversion de types (2/2)
Application
Appliquer un oprateur de cast au nom dune variable
Ne modifie pas la valeur de la variable
Provoque le traitement du contenu de la variable en tant que variable du type
indiqu, et seulement dans lexpression o loprateur de cast se trouve
Sapplique aux variables de types primitifs et aux variables de types
de rfrences
Types primitifs:
Seulement vers un type plus large (ou risque de perte de donnes)
Interdit pour le type boolean
Ex: Short Integer Long
Types de rfrences:
Vers une classe parent ou une interface implmente (ou risque derreur)
Dans ce cas, loprateur de cast nest pas ncessaire (en fonction du contexte)
Peuvent toujours tre casts vers OBJECT
Ex: Voiture VhiculesMotoriss Vhicules Object
Exercice
EX 5.6
Conversion de types
Analyser le code de lapplication Circulation
Observer les mcanismes de conversion de types
Dterminer les conversions valides et celles qui provoqueront une
erreur la compilation
Corriger la classe Circulation pour que lapplication puisse tre
compile et excute correctement
Analyser ensuite la mme application avec cette fois la classe
Circulation2 pour classe principale (sans erreurs) et en observer
les mcanismes de conversion de types
Quels risques pourraient se prsenter en utilisant ces techniques sur
des collections htrognes?
Polymorphisme (1/2)
Dfinition
Concept bas sur la notion de redfinition de mthodes
Consiste permettre une classe de sadresser une autre en
sollicitant un service gnrique qui sappliquera diffremment au
niveau de chaque sous-classe du destinataire du message
En dautres termes, permet de changer le comportement dune classe
de base sans la modifier Deux objets peuvent ragir diffremment
au mme appel de mthode
Uniquement possible entre classes relies par un lien dhritage et
suppose un cast vers le haut des objets des classes enfants
class Bank{
BankAccount[] theAccounts = new BankAccount[10];
public static void main(String[] args){
theAccounts[0] = new NormalAccount("Joe",10000);
theAccounts[0].computeInterest();
}}
Polymorphisme (2/2)
Utilisation du polymorphisme sur des collections htrognes
BankAccount[] ba=new BankAccount[5];
ba[0] = new NormalAccount("Joe",10000);
ba[1] = new NormalAccount("John",11000);
ba[2] = new SpecialAccount("Jef",12000);
ba[3] = new SpecialAccount("Jack",13000);
ba[4] = new SpecialAccount("Jim",14000);
for(int i=0;i<ba.length();i++)
{
ba[i].computeInterest();
}
Exercice
EX 5.4c
VilleCapitale (3me partie)
1. Montrez que lhritage permet le polymorphisme. Pour ce faire crez un
tableau de Ville comprenant des villes et des capitales.
2. Soit une Capitale londres. Que se passe-t-il lexcution de la commande
System.out.println(londres) ? Changez le nom des methodes decrisToi() en le
remplaant par toString(). Que se passe-t-il a lexcution de
System.out.println(londres) ? Expliquez.
3. Peut-on rendre decrisToi() polymorphique ds la conception de la classe
mre. Utilisez les mthodes getClass() et getName()
Les classes abstraites (1/2)
Une classe abstraite
Peut contenir ou hriter de mthodes abstraites (des mthodes sans corps)
Peut contenir des constantes globales
Peut avoir des mthodes normales, avec corps
Une classe abstraite ne peut tre instancie
On peut seulement instancier une sous-classe concrte
La sous-classe concrte doit donner un corps toute mthode abstraite
La dclaration dune classe abstraite contenant une mthode
abstraite ressemble ceci:
abstract class Animal {
abstract void move();
}
Les classes abstraites (2/2)
Animal
int age
move():void
eat():void
runAway():void
Si cette mthode appelle des mthodes
abstraites, alors on parle
dune classe abstraite template
Cat
Dog
move():void
eat():void
move():void
eat():void
runAway():void
Les interfaces (1/3)
Dfinition
Linterface dune classe = la liste des messages disponibles
= signature des mthodes de la classe
Certaines classes sont conues pour ne contenir prcisment que la
signature de leurs mthodes, sans corps. Ces classes ne
contiennent donc que leur interface, cest pourquoi on les appelle
elles-mmes interface
Ne contient que la dclaration de mthodes, sans dfinition (corps)
Permet des constantes globales
Une classe peut implmenter une interface, ou bien des interfaces
multiples
public interface Runnable {
public void run();
}
public interface GraphicalObject {
public void draw(Graphics g);
}
Les interfaces (2/3)
Raisons dtre
Forcer la redfinition / limplmentation de ses mthodes
Permettre une certaine forme de multi-hritage
Faciliter et stabiliser la dcomposition de lapplication logicielle
Dune classe qui drive dune interface, on dit quelle implmente
cette interface
Le mot cl associ est donc logiquement: implements
Exemple:
public class monApplet extends Applet implements Runnable, KeyListener
Les interfaces (3/3)
Exemple
<<interface>>
GraphicalObject
draw(Graphics g):void
intersects(Object o):boolean
Rectangle
Oval
int width,height,x,y
int width,height,x,y
Rectangle(int x,int y,int width,int height)
draw(Graphics g):void
intersects(Object o):boolean
Oval(int x,int y,int width,int height)
draw(Graphics g):void
intersects(Object o):boolean
Square
Square(int x,int y,int size)
Exercice
EX 5.7
Gestion de comptes en banque
Une banque gre un ensemble de comptes de diffrents types :
comptes courant, comptes dpargne Les comportements et les
caractristiques lis un compte sont un niveau abstrait fort
similaires : chacun possde un propritaire, un solde, un numro, un
taux dintrt ; on peut y dposer de largent, retirer de largent (sil en
reste suffisamment)
La banque propose galement un systme demprunts. Chaque
emprunt est caractris par le montant total rembourser, la valeur
des mensualits et le compte duquel les mensualits doivent tre
dbites
Le but de lexercice consiste crer une banque et tenir jour ltat
des comptes en fonction des retraits, des intrts et des
remboursements demprunts sur chaque compte
Exercice
EX 5.7
BankAccount
MyProgram
- String owner
- String number
- int solde
- double interst
deposit(int):int
withdraw(int):int
addALoan(Loan l):void
payYourLoans():void
calculInterest():int
isReimbursed(int):void
Bank
Loan
- int amount
- int mensuality
NormalAccount
calculInterest():int
SparingAccount
calculInterest():int
Loan(int,int,BankAccount)
reimbourse():void
Exercice
EX 5.8
Envoi de messages
Ecrire un programme le plus simple possible pour envoyer un message dun
objet A un objet B, en plaant nanmoins le main dans une classe
spcialement ddie cet effet
Introduction Java
VI. Structure des API Java
Survol du chapitre
Introduction
Organisation gnrale des API
Packages
JAVA
JAVAX
ORG
Introduction
Organisation gnrale des API Java
Les diffrentes API Java sont regroupes en packages
Ces packages sont eux-mmes rassembls dans trois grands
groupes, JAVA, JAVAX et ORG
JAVA
Contient tous les API dorigine de Java 1.0 dont la plupart sont toujours utiliss
JAVAX
Contient des API rcrits depuis Java 2 et qui sont destins les remplacer
ORG
API provenant de spcifications dfinies par des organismes internationaux
La documentation complte des API est toujours disponible sur le
site Web de Java
http://java.sun.com/
Packages
JAVA
Package
Description
java.applet
Classes ncessaires la cration dapplets
java.awt
Abstract Windowing Toolkit Interfaces graphiques, vnements
java.beans
Pour le dveloppement de composants JavaBeans
java.io
Pour la gestion des IO systmes (systme de fichiers, etc.)
java.lang
Classes fondamentales du langage (toujours importes par dfaut)
java.math
Pour les traitements arithmtiques demandant une grand prcision
java.net
Pour les connexions et la gestion rseau
java.nio
Dfinit des tampons
java.rmi
Toutes les classes lies au package RMI (Remote Method Invokation)
java.security
Classes et interfaces du framework de scurit Java
java.sql
Pour laccs et la gestion des bases de donnes JDBC
java.text
Pour la manipulation de texte, dates, nombres et messages
java.util
Collections, modle vnementiel, dates/heures, internationalisation
Packages
JAVAX
Package
Description
javax.accessibility Dfinit un contrat entre lU.I. et une technologie dassistance
javax.crypto
Pour les oprations lies la cryptographie
javax.imageio
Pour la gestion des IO lies aux images
javax.naming
Pour la gestion de la Java Naming and Directory Interface (JNDI)
javax.net
Pour les connexions et la gestion rseau
javax.print
Pour les services lis limpression
javax.rmi
Toutes les classes lies au package RMI (Remote Method Invokation)
javax.security
Classes et interfaces du framework de scurit Java
javax.sound
Pour le dveloppement dapplication grant le son (Midi / Sampled)
javax.sql
Pour laccs et la gestion des bases de donnes JDBC
javax.swing
Interfaces graphiques lgres , identiques sur toutes plateformes
javax.transaction
Exceptions lies la gestion des transactions
javax.xml
Parseurs et autres classes lies au format XML
Packages
ORG
Package
Description
org.ietf
Framework pour le dveloppement dapplications avec
services de scurit provenant de mcanismes comme le
Kerberos
org.omg
Contient tous les packages lis aux spcifications de lObject
Management Group tels que CORBA, IDL et IOP
org.w3c
Contient un parseur DOM pour XML
org.xml
Contient des parseurs SAX pour XML
Introduction Java
VII. Interfaces graphiques et Gestion dvnements
Survol du chapitre
Introduction
Le modle Model-View-Control (MVC)
Les interfaces graphiques (GUI): Le package AWT
AWT v/s SWING
La structure de lAWT
Les Components
Les Containers
Les LayoutManagers
Gestion dvnements
Mcanismes et structure
Mise en uvre
Graphisme 2D en Java
La classe Rectangle
Introduction
Le modle MVC
Fondement: Sparer
Les responsabilits relatives la saisie des vnements
Celles relatives lexcution des commandes en rponse aux vnements
Sparer au mieux
La gestion de laffichage
Le contrle du composant
Les informations intgres dans le composant
Avantages:
Un mme vnement peut tre envoy plusieurs objets couteurs
Utile si un vnement est potentiellement intressant pour plusieurs couteurs
Facilite la rutilisation des composants
Permet le dveloppement de lapplication et de linterface sparment
Permet dhriter de super-classes diffrentes suivant les fonctionnalits
Rgle essentielle en OO: modulariser au plus ce qui est modularisable
Les interfaces graphiques
AWT v/s SWING
Les composants des interfaces graphiques sont fournis en Java par
deux packages particuliers (et concurrents):
Java 1: AWT (Abstract Window Toolkit)
Composants graphiques lourds
Chaque composant est reli son quivalent dans lOS par un peer
Look & Feel dpendant de lOS
Java 2: SWING
Nouveau package
Composants graphiques lgers , en pur Java
Tous les composants sont dtachs de lOS
Look & Feel indpendant de lOS
Les interfaces graphiques
Structure de lAWT (1/2)
LAWT offre trois types dlments graphiques
Les Containers (contenants)
Les Components (composants ou contenus)
Les LayoutManagers (disposition des objets dun contenant)
Les Containers
Sont destins accueillir des composants
Grent laffichage des composants
Ex: Frame, Panel, Window
Les Components
Constituent diffrents lments de laffichage (boutons, barres de menus, etc.)
Ex: Button, Canvas, Label, Scrollbar, Checkbox
Les LayoutManagers
Grent la disposition des composants au sein dun conteneur
Les interfaces graphiques
Structure de lAWT (2/2)
*
Component
add
1
Canvas
Button
LayoutManager
Container
1
Frame
BorderLayout
FlowLayout
Panel
Les interfaces graphiques
Les Components
Hritage de mthodes:
paint(Graphics g) : Affiche le composant
repaint() : Rafrachit laffichage du composant (rappelle la mthode paint)
getGraphics() : Cre un contexte graphique pour le composant
Etc. voir documentation Java en ligne
Composants de formulaires (exemples)
Button (bouton)
CheckBox (case cocher)
Label (case de texte)
Composants de fentre (exemples)
Menu (Menu dune barre de menus)
MenuItem (Elment dun menu)
Les interfaces graphiques
Les Containers
Hritage de mthodes:
add(Component c) : Intgre le composant spcifi la fin du container
setLayout(LayoutManager l) : Configure le LayoutManager du container
Etc. voir documentation Java en ligne
La classe Frame
Composant du plus haut niveau
La fentre dune application est une instance de cette classe
Le Frame contient les diffrents composants graphiques de lapplication
Ne peut tre intgr dans un autre conteneur
Les classes Panel , Window , ScrollPane , etc.
Contenants essentiels
Peuvent tre intgrs au sein dun Frame
Les interfaces graphiques
Les LayoutManagers (1/5)
Rle
Grer la disposition des composants au sein dun conteneur
Types principaux:
BorderLayout: divise le conteneur en 5 zones
FlowLayout: rajoute les composants au fur et mesure
GridLayout: applique une grille au conteneur pour aligner les composants
CardLayout: pour un conteneur qui contient plusieurs cartes
GridBagLayout: grille de cellules lmentaires
Les interfaces graphiques
Les LayoutManagers (2/5)
BorderLayout
Principe
Positionne les composants suivants les points cardinaux
Layout par dfaut des Frame
Rpartition
La largeur lemporte pour le Nord et le Sud
La hauteur lemporte pour lEst et lOuest
Le centre occupe tout ce qui reste
Utilisation
add(unBouton, BorderLayout.NORTH)
new BorderLayout(int, int)
Intervalles horizontal et vertical entre les lments
NORTH
WEST CENTER
SOUTH
EAST
Les interfaces graphiques
Les LayoutManagers (3/5)
FlowLayout
Principe
Rajoute les composants au fur et mesure
La taille des composants lemporte
Utilisation
new FlowLayout (int alignment)
alignment: LEFT, CENTER, RIGHT
new FlowLayout (int alignment, int hintervalle,int vintervalle)
alignment: LEFT, CENTER, RIGHT
hintervalle: Lintervalle horizontal entre les composants
vintervalle: Lintervalle vertical entre les composants
Les interfaces graphiques
Les LayoutManagers (4/5)
GridLayout
Principe
Dfinit une grille a 2 dimensions
Utilisation
new GridLayout (int, int)
Dfinit le nombre de lignes et de colonnes
new GridLayout (int, int, int, int)
Dfinit le nombre de lignes et de colonnes
Dfinit lalignement horizontal et vertical
CardLayout
Principe
Pour un container qui contient plusieurs cartes
Seule une carte est visible chaque fois
Lutilisateur peut passer dune carte lautre
Les interfaces graphiques
Les LayoutManagers (5/5)
GridBagLayout
Principe
Le plus compliqu et le plus flexible
Une grille de cellules lmentaires
Les composants graphiques peuvent staler indiffremment sur ces cellules
Pour positionner un composant, il faut utiliser un objet GridBagConstraints
On peut spcifier le comportement des composants quand on tire la fentre
Utilisation
new GridBagLayout()
new GridBagConstraints();
Exercice
Une premire application graphique (1/2)
Crer une classe Fenetre hritant de Frame
Construire la fentre dapplication en ajoutant:
Au Nord: un Label
Au Centre: un Panel
Contenant lui-mme trois Button
A placer dans un vecteur
Au Sud: un Button
Crer une classe principale contenant uniquement le main:
public static void main(String args[]) {
Fenetre f = new Fenetre();
}
EX 7.1a
Gestion dvnements
Mcanismes et structure (1/4)
Une source dvnements
Gnre des objets vnements
Les fait couter par un ensemble dcouteurs dvnements
En gnral: un composant ou conteneur graphique
Les objets vnements
xxxEvent
Contiennent la description et les caractristiques dun vnement
Les objets couteurs
xxxListener ou xxxAdapter
Concrtisent des mthodes dfinies dans les Interfaces
Indiquent leur raction en rponse aux vnements
Sont des interfaces implmentables dans les classes
Peuvent tre implments par les sources dvnements elles-mmes
(Une source dvnements peut scouter elle-mme)
Gestion dvnements
Mcanismes et structure (2/4)
1. Un vnement se produit
2. La source dvnement dans laquelle il se produit gnre un objet
de type vnement
3. La source transmet lvnement son (ses) couteur(s)
4. Lcouteur appelle la mthode correspondant au type dvnement
et lui passe en argument lobjet vnement
5. La mthode en question spcifie les traitements raliser lorsquun
vnement du type correspondant se produit
6. Dans ses traitements, la mthodes peut examiner les
caractristiques de lvnement (position du curseur de la souris,
code de la touche presse au clavier) et adapter son
comportement en fonction de ces caractristiques
Gestion dvnements
Mcanismes et structure (3/4)
Evnements
ActionEvent, AdjustmentEvent, ComponentEvent, ContainerEvent,
FocusEvent, ItemEvent, KeyEvent, MouseEvent, TextEvent, WindowEvent
Les Interfaces Ecouteurs
ActionListener, AdjustmentListener, ComponentListener, ContainerListener,
FocusListener, ItemListener, KeyListener, MouseListener,
MouseMotionListener, WindowListener
Les Adapteurs correspondants
ActionAdapter, WindowAdapter, KeyAdapter, MouseAdapter, etc.
Les Sources dvnements
Button, List, MenuItem, TextField, ScrollBar, CheckBox, Component, Container,
Window
Gestion dvnements
Mcanismes et structure (4/4)
XXXListener
Component
XXXAdapter
1
addXXXListener
contrle
*
J VM
Exemples :
XXXEvent
OS
public void actionPerformed (ActionEvent e)
public void windowClosing (WindowEvent e)
Contrle
Souris
MyXXXListener
Clavier
public void mouseClicked (MouseEvent e)
Gestion dvnements
Mise en uvre
Par implmentation de linterface
Usage
public class MaClasse implements MouseListener
Avantages et inconvnients
Meilleur sur le plan orient objet
La classe peut hriter dune autre classe
Consistance
Par hritage de ladapteur
Usage
A chaque interface correspond un adapteur qui limplmente lui-mme
public class MaClasse extends MouseAdapter
Avantages et inconvnients
Code simple (ladapteur redfinit dj les mthodes, etc.)
La classe ne peut plus hriter dune autre classe
Gestion dvnements
Mise en uvre Clics de souris
class MonFrame extends Frame implements MouseListener
{
public MonFrame()
{
addMouseListener(this);
}
public void mousePressed(MouseEvent e) {}
public void mouseClicked(MouseEvent e)
{
if(e.getX()>50 && e.getY()<100){...}
}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited{MouseEvent e) {}
}
Gestion dvnements
Mise en uvre Dplacements de souris
class MonFrame extends Frame implements MouseMotionListener
{
public MonFrame()
{
addMouseMotionListener(this);
}
public void mouseDragged(MouseEvent e) {}
public void mouseMoved(MouseEvent e)
{
if(e.getX()>50 && e.getY()<100){...}
}
}
Gestion dvnements
Mise en uvre Clavier
class MonFrame extends Frame implements KeyListener
{
public MonFrame()
{
addKeyListener(this);
}
public void keyPressed(KeyEvent e) {}
public void keyTyped(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_Q){System.exit(0)}
}
public void keyReleased(KeyEvent e) {}
}
Gestion dvnements
Mise en uvre Evnements de fentre
class MonFrame extends Frame implements WindowListener
{
public MonFrame()
{
addWindowListener(this);
}
public
public
public
public
public
public
public
}
void
void
void
void
void
void
void
windowClosed(WindowEvent e) {}
windowIconified(WindowEvent e) {}
windowOpened(WindowEvent e) {}
windowClosing(WindowEvent e) {System.exit(0);}
windowDeiconified(WindowEvent e) {}
windowActivated(WindowEvent e) {}
windowDeactivated(WindowEvent e) {}
Gestion dvnements
Mise en uvre Actions
public class MonPanel extends Panel implements ActionListener
{
// MonPanel devient un couteur dvnements
public void actionPerformed(Action evt)
{
// Ce qui est fait en rponse lvnement.
// je peux extraire de linformation sur lvnement
// transmis par evt
// je suis oblig de re-dfinir cette mthode abstraite
// dans ActionListener
}
}
MonPanel panel = new MonPanel();
JButton button = new Jbutton("OK");//
//
button.addActionListener(panel)
//
//
Cre un bouton qui est source
dvnements de type ActionEvent
Associer un couteur
dvnements panel au bouton
Exercice
EX 7.1b
Une premire application graphique (2/2)
Implmenter linterface WindowListener dans la classe Fenetre
Redfinir les mthodes de linterface et en particulier
windowClosing(WindowEvent e) pour quelle provoque la fermeture de la
fentre et la sortie de lapplication lorsque lutilisateur clique sur la croix de
fermeture
Exercice
EX 7.2
Calculatrice
Crer une classe Calculette hritant de Frame et y ajouter:
Un Label pour lcran daffichage
Un Panel pour le clavier
Ajouter un GridLayout au Panel, le divisant en 4 x 4 zones
Un tableau de 16 Button qui safficheront dans le Panel en fonction du GridLayout
Instancier les boutons du tableau dans une boucle FOR
Crer une classe GestionnaireDeFenetre hritant de WindowAdapter
Redfinir sa mthode windowClosing(WindowEvent e) pour quune bote de
dialogue souvre pour demander la confirmation de la fermeture
Crer une classe GestionnaireDeBoutons implmentant linterface
ActionListener
Redfinir sa mthode actionPerformed(ActionEvent e) pour quelle identifie la touche
presse et dclenche laction correspondante
Crer une classe Arithmetique effectuant les calculs et renvoyant le rsultat
qui sera affich dans le Label de la fentre principale
Crer enfin une classe StartCalculatrice qui contiendra uniquement le main
Graphisme 2D
Fonctionnement
Tout ce qui est ncessaire aux graphismes en 2D est fourni par la
classe Graphics
Chaque composant est toujours dot dun objet de ce type
Graphics g
On peut donc invoquer, sur cet objet graphique g , toutes les
mthodes de graphisme:
g.drawLine(int, int, int, int)
g.drawRect(int, int, int, int)
g.fillOval(int, int, int, int)
g.setColor(Color)
Etc.
Graphisme 2D
Classe java.awt.Rectangle
Classe fournie dans le package java.awt
Idale pour servir de squelette la plupart des objets graphiques
On peut inscrire toutes les formes dans un rectangle
Attributs publics:
int x,y, width, height
Mthodes publiques
contains(int x, int y): boolean
Renvoie true si les coordonnes (x,y) sont contenues dans le rectangle
contains(Rectangle r): boolean
Renvoie true si le rectangle r est contenu dans le rectangle en cours
intersects(Rectangle r): boolean
Renvoie true si le rectangle r touche le rectangle en cours
Exercice
EX 7.3
Paint (1/4)
Lobjectif du projet est la ralisation dun diteur graphique permettant
de dessiner des segments de droites colors
(une version BETA de Paint 1.0)
La ralisation de lditeur graphique commencera par la construction
dune fentre (Frame), support de lapplication, que nous
personnaliserons grce divers lments : boutons (Button), listes
droulantes (Choice), zone de dessin (Canvas), etc.
Ensuite nous grerons les vnements gnrs par lutilisateur (clic de
souris, ) pour donner vie cette application
Enfin en utilisant le contexte graphique fourni par la JVM, nous
aborderons les mcanismes de construction graphique en 2D
Introduction Java
VIII. Les collections
Survol du chapitre
Introduction
Quest-ce quune Collection?
Le Java Collections Framework
Interfaces
Collections Set et List
Maps Map et SortedMap
Itrateurs Iterator
Comparateurs Comparable et Comparator
Implmentations
HashSet et TreeSet
ArrayList et LinkedList
Algorithmes
Tri
Autres: Recherche, Mlange, etc.
Introduction
Quest-ce quun collection?
Collection
Un objet utilis afin de reprsenter un groupe dobjets
Utilis pour:
Stocker, retrouver et manipuler des donnes
Transmettre des donnes dune mthode une autre
Reprsente des units de donnes formant un groupe
logique ou naturel, par exemple:
Une main de poker (collection de cartes)
Un dossier demails (collection de messages)
Un rpertoire tlphonique (collection de correspondances NOM N)
Introduction
Java Collections Framework
Dfinit toute la structure des collections en Java
Constitue une architecture unifie pour
la reprsentation des collections
la manipulation des collections
Contient des:
Interfaces
Types de donnes abstraits reprsentant des collections
Permettent de manipuler les collections indpendamment de leur reprsentation
Organises en une hirarchie unique
Implmentations
Implmentations concrtes des interfaces Structures de donnes rutilisables
Fournies pour acclrer le dveloppement
Algorithmes
Mthodes standards fournissant des oprations comme le tri, la recherche, etc.
Interfaces
Structure
Il existe 4 groupes dinterfaces lies aux collections
Collection
Racine de la structure des collections
Reprsente un groupe dobjets (dits lments )
Peut autoriser ou non les duplicats
Peut contenir un ordre intrinsque ou pas
Map
Un objet qui tablit des correspondances entre des cls et des valeurs
Ne peut en aucun cas contenir des duplicats
Chaque cl ne peut correspondre qu une valeur au plus
Interfaces de comparaison
Permettent le tri des objets du type implmentant linterface
Deux versions: Comparator et Comparable
Iterator
Permet de grer les lments dune collection
Interfaces
Collection (1/2)
La racine de la structure des collections
Sans ordre spcifique
Duplicats permis
Dfinit les comportements standards des collections
Vrification du nombre dlments
size(), isEmpty()
Test dappartenance dun objet la collection
contains(Object)
Ajout et suppression dlments
add(Object), remove(Object)
Fournir un itrateur pour la collection
iterator()
Bulk Operations
addAll(Collections), clear(), containsAll(Collections)
Interfaces
Collection (2/2)
Trois variantes principales:
Set
Duplicats interdits
Sans ordre spcifique
List
Duplicats permis
Contient un ordre spcifique intrinsque
Parfois appel Squences
Permet 2 mthodes daccs particulires:
Positional Access: manipulation base sur lindex numrique des
lments
Search: recherche dun objet en particulier dans la liste et renvoi
de son numro dindex (sa position dans la liste)
SortedSet
Duplicats interdits
Contient un ordre spcifique intrinsque
Interfaces
Map
Map = Objet qui contient des correspondances Cl Valeur
Ne peut contenir de doublons (cls sont primaires)
Fournit des oprations de base standards:
put(key,value)
get(key)
remove(key)
containsKey(key)
containsValue(value)
size()
isEmpty()
Peut gnrer une collection qui reprsente les couples Cl Valeur
Il existe aussi
des Map permettant de faire correspondre plusieurs valeurs chaque cl
des SortedMap fournissant des Map naturellement tris
Interfaces
Iterator
Permet de grer les lments dune collection
Toute collection peut fournir son Iterator
Permet galement de supprimer des lments dune collection au
cours dune phase ditration sur la collection
Contient 3 mthodes essentielles:
hasNext(): boolean Indique sil reste des lments aprs llment en cours
next(): Object Fournit llment suivant de la collection
Remove(): void Supprime llment en cours
Exemple:
static void filter(Collection c) {
for (Iterator i = c.iterator(); i.hasNext(); )
if (! cond(i.next()))
i.remove();
}
Interfaces
Comparaison (1/3)
Deux interfaces
Comparable
Fournit une mthode de comparaison au sein dune classe
Impose de redfinir une seule mthode public int compareTo(Object o)
qui renvoie un entier:
1 si lobjet courant > lobjet o fourni dans la mthode
0 si lobjet courant = lobjet o fourni dans la mthode
-1 si lobjet courant < lobjet o fourni dans la mthode
Comparator
Permet de dfinir une classe servant de comparateur une autre
Impose de redfinir une seule mthode
public int compare(Object o1, Object o2) qui renvoie un entier:
1 si o1 > o2
0 si o1 = o2
-1 si o1 < o2
Interfaces
Comparaison (2/3)
Exemple dimplmentation de Comparable
import java.util.*;
public class Name implements Comparable {
private String firstName, lastName;
public Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public int compareTo(Object o) {
Name n = (Name) o;
int lastCmp = lastName.compareTo(n.lastName);
if(lastCmp!=0)
lastCmp = firstName.compareTo(n.firstName);
return lastCmp;
}
}
Interfaces
Comparaison (3/3)
Les types primitifs contiennent toujours un ordre naturel
Implmentations
Structure
Les implmentations sont les types dobjets rels utiliss pour
stocker des collections
Toutes les classes fournies implmentent une ou plusieurs des
interfaces de base des collections
Implmentations
Sets (1/3)
Deux principales implmentations de linterface Set
HashSet (Set)
Plus rapide
Noffre aucune garantie en termes de dordre
TreeSet (SortedSet)
Contient une structure permettant dordonner les lments
Nettement moins rapide
A nutiliser que si la collection doit tre trie ou doit pouvoir tre parcourue
dans un certain ordre
Implmentations
Sets (2/3)
Exemple dutilisation de HashSet
public class FindDups {
public static void main(String args[]){
Set s = new HashSet();
for (int i=0; i<args.length; i++)
if (!s.add(args[i]))
System.out.println("Duplicate
detected: "+args[i]);
System.out.print(s.size()+" distinct words : "+s);
}
}
Produira le rsultat suivant:
C:> java FindDups i came i saw i left
Duplicate detected: i
Duplicate detected: i
4 distinct words detected: [came, left, saw, i]
Implmentations
Sets (3/3)
Exemple dutilisation de TreeSet
public class FindDups {
public static void main(String args[]){
Set s = new TreeSet();
for (int i=0; i<args.length; i++)
if (!s.add(args[i]))
System.out.println("Duplicate
detected: "+args[i]);
System.out.print(s.size()+" distinct words : "+s);
}
}
Produira le rsultat suivant:
C:> java FindDups i came i saw i left
Duplicate detected: i
Duplicate detected: i
4 distinct words detected: [came, i, left, saw]
Implmentations
Lists (1/2)
Deux principales implmentations de linterface List
ArrayList (et Vector)
La plus couramment utilise
Offre un accs positionnel vitesse constante Particulirement rapide
LinkedList
A utiliser pour
Ajouter rgulirement des lments au dbut de la liste
Supprimer des lments au milieu de la liste en cours ditration
Mais plus lent en termes daccs positionnel
Implmentations
Lists (2/2)
Oprations spcifiques aux listes:
Obtenir la position dun objet
indexOf(Object o): int
lastIndexOf(Object o): int
Rcuprer lobjet en position i
get(int i) Renvoie un objet de type Object Devra tre converti (cast)
Placer un objet une certaine position
set(int i, Object o)
Supprimer lobjet en position i
remove(int i)
removeRange(int fromIndex, int toIndex)
Algorithmes
Tri
On peut trier un tableau/collection au moyen de mthodes simples:
Trier un tableau mthode sort de la classe Arrays
Arrays.sort(<type>[])
Trier une collection mthodes sort de la classe Collections
Ne fonctionne quavec les collections drivant de List
Si les lments de la collection sont comparables (implmentent linterface
Comparable )
Collections.sort(List)
Si les lments de la collection ne sont pas comparables, il faut alors indiquer quelle
classe servira de comparateur
Collections.sort(List, Comparator)
Algorithmes
Autres
Dautres oprations sont fournies par le Java Collections Framework:
Recherche binaire
Collections.binarySearch(liste, cl)
Mlange
Collections.shuffle(liste)
Inversion de lordre
Collections.reverse(liste)
Rinitialisation des lments (remplace tous les lmnts par lobjet spcifi)
Collections.fill(liste, objetParDefaut)
Copie des lments dune liste dans une autre
Collections.copy(listeSource, listeDestination)
Recherche dextrema
Sur base de la position des lments min(liste) et max(liste)
Sur base dun comparateur min(liste, comparateur) et max(liste, comparateur)
Exercice
EX 8.1
Paint (2/4)
Dfinissez les classes Droites et Dessin permettant dassurer la persistance de
votre uvre malgr les redimensionnements de la fentre, rductions,
changements de focus Utilisez pour ce faire la classe java.util.Vector.
Redfinissez la mthode paint(Graphics g) hrite de la classe abstraite
Component.
Adaptez aussi les mthodes lies au boutons Dfaire et Annuler afin
quils suppriment respectivement la dernire droite traces et toutes les droites
du dessin.
Implmentez linterface Comparable au sein de la classe Dessin afin de
permettre le tri des droites sur base de leur longueur et redfinissez cette fin
la mthode compareTo(Object o)
Ajoutez un bouton permettant de trier les droites du dessin dans le vecteur et
vrifiez que la commande Dfaire supprime dsormais les droites par ordre
de longueur et non plus en fonction de lordre dans lequel elles ont t traces.
Introduction Java
IX. Gestion des exceptions
Survol du chapitre
Introduction
Hirarchie des exceptions
Traitement des exceptions
Interception dexceptions: bloc try catch finally
Lancement (gnration) par une mthode: throws et throw
Introduction
La gestion des exceptions en Java
Sapproche du C++
Des erreurs surviennent dans tout programme
Distinction entre Exception et Error: deux classes apparentes
La classe Exception traite les erreurs prvisibles qui apparaissent
dans lexcution dun programme:
Panne du rseau
Fichier inexistant
Problme propre la logique business
La classe Error traite les conditions srieuses que le programmeur
nest pas cens traiter
Hirarchie des exceptions
On ne peut pas traiter
les Error
On doit traiter ces exceptions-ci
T h r o w a b le
E x c e p t io n
R u n T im e E x c e p t io n
E rro r
I O E x c e p t io n
N u llP o in t e r E x c e p t io n
F ile N o t F o u n d E x c e p t io n
A r it h m e t ic E x c e p t io n
E O F E x c e p t io n
A W T E rro r
V ir t u a lM a c h in e E r r o r
O u tO fM e m o ry E rro r
On nest pas oblig de traiter ces exceptions-ci
Traitement des exceptions
Principes
Le traitement des exceptions contient deux aspects:
Linterception des exceptions
Utilisation du bloc try catch finally pour rcuprer les exceptions
Et raliser les actions ncessaires
Le lancement (la gnration) dexceptions
Automatiquement par lenvironnement run-time ou la machine virtuelle pour
certaines exceptions prdfinies par Java
Explicitement par le dveloppeur dans une mthode avec throws et
throw (en tout cas pour les exceptions cres par le dveloppeur
Traitement des exceptions
Interception par bloc try catch finally (1/2)
try
{
// quelques actions potentiellement risques
}
catch(SomeException se)
{
// que faire si une exception de ce type survient
}
catch(Exception e)
{
// que faire si une exception dun autre type survient
}
finally
{
// toujours faire ceci, quelle que soit lexception
}
Traitement des exceptions
Interception par bloc try catch finally (2/2)
Implmentation
public ExampleException() {
for(int i=0;i<3;i++) {
test[i]=Math.log(i);
}
try {
for(int i=0;i<4;i++) {
System.out.println("log("+i+") = "+test[i]);
}
} catch(ArrayIndexOutOfBoundsException ae) {
System.out.println( Arriv la fin du tableau );
}
System.out.println( Continuer le constructeur );
}
Traitement des exceptions
Lancement avec les mots-cls throws et throw (1/4)
Si une exception peut survenir, mais que la mthode nest pas cense
la traiter elle-mme, il faut en lancer une instance
Il faut prciser que la mthode peut lancer ces exceptions
ajouter une clause throws la signature de la mthode
public void writeList() {
PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt"));
for (int i = 0; i < vector.size(); i++)
out.println("Valeur = " + vector.elementAt(i));
}
Peut lancer une IOException doit tre attrape
Peut lancer une ArrayIndexOutOfBoundsException
public void writeList() throws IOException,
ArrayIndexOutOfBoundsException {
Traitement des exceptions
Lancement avec les mots-cls throws et throw (2/4)
Une mthode avec une proprit throws peut lancer des exceptions avec
throw
Toute exception ou erreur lance pendant lexcution provient dun throw
Fonctionne avec les exceptions qui hritent de Throwable (la classe de base)
Le dveloppeur peut crer de nouvelles classes dexceptions
et les lancer avec throw
class MyException extends Exception {
MyException(String msg){
System.out.println("MyException lancee, msg =" + msg);
}
}
void someMethod(boolean flag)throws MyException {
if(!flag) throw new MyException(someMethod);
Traitement des exceptions
Lancement avec les mots-cls throws et throw (3/4)
Une fois lexception lance avec throw, il faut soit lattraper (avec catch), soit
la re-lancer. Si vous la re-lancez, votre mthode doit le dclarer
public void connectMe(String serverName) throws ServerTimedOutException {
boolean success;
int portToConnect = 80;
success = open(serverName, portToConnect);
if (!success) {
throw new ServerTimedOutException("Connection impossible", 80);
}
}
public void connectMe(String serverName) {
boolean success;
int portToConnect = 80;
success = open(serverName, portToConnect);
if (!success) {
try{ throw new ServerTimedOutException("Connection impossible ", 80);
} catch(ServerTimedOutException stoe){ }
}
}
Traitement des exceptions
Lancement avec les mots-cls throws et throw (4/4)
Si la mthode redfinir lance une exception
On ne peut pas lancer une autre exception
Mais on peut utiliser lhritage
Animal
Exception
int age
RuntimeException
move():void
eat() throws RuntimeException:void
runAway():void
Cat
BadFoodException
move():void
eat() throws Exception:void
Dog
move():void
eat() throws BadFoodException:void
Exercice
EX 9.1
Paint (3/4)
Prvoir linterception dexceptions de type
ArrayIndexOutOfBoundsException dans les mthodes de la classe
Dessin et provoquer dlibrment une sortie des limites du vecteur
pour vrifier son bon fonctionnement
Crer une nouvelle exception DroiteTropLongueException , qui
devra tre lance chaque fois que lutilisateur tente de tracer une
droite dont la longueur dpasse une certaine limite
Lancer cette exception dans la mthode termineDroite(int, int) de la
classe ZoneGraphique
Intercepter cette nouvelle exception dans la mthode
mouseReleased(MouseEvent) de la classe GestionSouris et faire en
sorte quelle provoque laffichage dun message derreur dans la barre
dtat
Introduction Java
X. Multithreading
Survol du chapitre
Introduction
Dfinition
Raison dtre
Cration de Thread
Par implmentation
Par hritage
Gestion de Thread
Mthodes de gestion
Diagrammes dtat
Introduction
Quest-ce quun Thread?
Un ordinateur qui excute un programme :
Possde un CPU
Stocke le programme excuter
Possde une mmoire manipule par le programme
Multitasking gr par lOS
Un thread ( file ) a ces mmes capacits
A accs au CPU
Gre un processus
A accs la mmoire, quil partage avec dautres files
Multithreading gr par la JVM
Introduction
Pourquoi le multithreading?
Un programme moderne est compos de
Une interface graphique
Quelques composantes pouvant agir de manire autonome
Sans multithreading
Les composantes ne pourraient agir que lorsque linterface est suspendue
Plus gnralement, le multithreading
Permet de raliser plusieurs processus indpendants en parallle
Permet de grer les files dattente
Permet au besoin de synchroniser les diffrents processus entre eux
Cration de Thread
Mise en uvre (1/3)
Par implmentation de linterface
Usage
public void MaClasse implements Runnable
Avantages et inconvnients
Meilleur sur le plan orient objet
La classe peut hriter dune autre classe
Consistance
Par hritage de la classe Thread elle-mme
Usage
public void MaClasse extends Thread
Avantages et inconvnients
Code simple (lobjet est un Thread lui-mme)
La classe ne peut plus hriter dune autre classe
Cration de Thread
Mise en uvre (2/3)
public class MaFile implements Runnable {
public void run(){
byte[] buffer=new byte[512];
int i=0;
while(true){
if(i++%10==0)System.out.println(""+i+" est divisible par 10");
if (i>101) break;
}
}
}
public class LanceFile {
public static void main(String[]arg){
Thread t=new Thread(new MaFile());
t.start();
}
}
Le constructeur de la classe Thread
attend un objet Runnable
en argument
Cration de Thread
Mise en uvre (3/3)
public class MyThread extends Thread {
public void run(){
byte[] buffer=new byte[512];
int i=0;
while(true){
if(i++%10==0) System.out.println(""+i+" est divisible par 10");
if(i>101) break;
}
}
}
public class LaunchThread{
public static void main(String[]arg){
Grce lhritage, un objet de type
MyThread t=new MyThread();
MyThread est lui-mme Runnable,
t.start();
on peut donc appeler un constructeur
}
sans argument
}
Gestion des Thread
Mthodes de gestion (1/4)
t.start()
Appeler cette mthode place le thread dans ltat runnable
Eligible par le CPU
t.yield() throws InterruptedException
La VM arrte la file active et la place dans un ensemble de files
activables. (runnable state)
La VM prend une file activable et la place dans ltat actif (running
state)
t.sleep(int millis) throws InterruptedException
La VM bloque la file pour un temps spcifi (tat dattente )
t.join() throws InterruptedException
Met la file en attente jusquau moment o la file t est termine
(a fini sa mthode run()). Le thread appelant redevient alors activable.
Gestion des Thread
Mthodes de gestion (2/4)
Thread.yield() throws InterruptedException
La VM arrte la file active et la place dans un ensemble de files
activables. (runnable state)
La VM prend une file activable et la place dans ltat actif (running
state)
Thread.sleep(int millis) throws InterruptedException
La VM bloque la file pour un temps spcifi (tat d attente )
t.join() throws InterruptedException
Met la file en attente jusquau moment o la file t est termin (a fini sa
mthode run()). Le thread appelant redevient alors activable.
Gestion des Thread
Mthodes de gestion (3/4)
public class ExJoin {
public static void main(String[]arg){
Thread t=new Thread(new FileSecondaire());
t.start();
for(int i=0;i<20;i++){
System.out.println("File principale en cours dexcution "+i);
try{
Thread.sleep(10);
} catch(InterruptedException ie){}
}
try {
t.join();
} catch (InterruptedException ie) {}
System.out.println(t termine son excution, fin programme");
}
}
Gestion des Thread
Mthodes de gestion (4/4)
class FileSecondaire implements Runnable{
public void run(){
for(int i=0;i<40;i++){
System.out.println("File secondaire en execution "+i);
try{
Thread.sleep(10);
} catch (InterruptedException ie) {}
}
System.out.println("Fin de file secondaire");
}
}
Gestion des Thread
Diagrammes dtat
Object.notify()
Object.notifyAll()
t.sleep()
En attente
dbut
fin
Object.wait()
Fin du sleep()
t.yield()
t.start()
Active
Activable
Scheduler
Ensemble de files ligibles
Fin de run()
Une des files ligibles, pas
ncessairement celle avec la plus
grande priorit.
Exercice
EX 10.1
Paint (4/4)
Crer une classe Balle hritant de Thread
Dfinir ses variables et ses mthodes daffichage paint(Graphics g) et
deplaceToi()
Redfinir la mthode run() contenant une boucle infinie dans laquelle
le dplacement de la balle est provoqu
Instancier deux balles dans la zone graphique et lancer leurs Thread
associs
Implmenter linterface Runnable dans la classe ZoneGraphique
afin que lcran soit automatiquement rafrachi intervalles rguliers.
Redfinir la mthode run() et lancer le Thread dans le constructeur de
la classe
Introduction Java
XI. Annexes
Survol du chapitre
Java et ses concurrents
Java v/s CGI
Java v/s Microsoft .Net
Java v/s Perl
Les utilitaires de Java
Javac
Java
Javadoc
Jar
Java et ses concurrents
Java v/s CGI
CGI est une interface, non un langage
Convention pour invoquer des excutables partir dun serveur Web
En CGI: program?Hello%21+Here%20I%20come%21
En Java: args[0] = "Hello!", args[1] = "Here I come!
Un programme CGI peut tre implment dans diffrents langages
C
Perl
C++
Java
VB
Etc.
Java et ses concurrents
Java v/s Microsoft .Net
Fonctionnalit quivalente
Pages Web dynamiques: JSP ASP
Objets distribus: DCOM RMI, EJB
Accs DB: ODBC JDBC
Java
Code Java Bytecode Multiples OS
.NET
Tout Code MS IL Windows
Java et ses concurrents
Java v/s Perl
Aspects communs:
Langages usage gnral
Interprts
Portables
Larges librairies disposition
Diffrences
Perl: pour administrateurs systmes, faiblement typ, intgration facile avec le
shell
Java: pour dveloppeurs dapplications, fortement typ, objets distribus avec
les EJB
Modle Client/Serveur:
Java peut tre utilis sur un client en tant quapplet et sur un serveur
Perl peut tre utilis sur un serveur, mais pas en tant quapplet
Les utilitaires de Java
javac
Compilateur, traduit fichier source .java en fichier bytecode .class
java
Interprteur java, lance des programmes
javadoc
Gnrateur de documentation dAPI
jar
Utilitaire darchivage et de compression
javah
Gnrateur de fichiers C/C++ .h
Les utilitaires de Java
Javac et Java
Javac
Compile un fichier source .java ou un package entier
Exemples:
javac MyBankAccount.java
compile le fichier mentionn, qui doit se trouver dans le package par dfaut
javac be\newco\*.java d c:\classes
compile tout le package be.newco et gnre du code compil dans c:\classes, qui
doit exister
Java
Lance un programme principal
Exemples:
java bankStream.MyProgram
Lance le programme spcifi par la mthode public static void main(String[]
args) dans la classe MyProgram qui se trouve dans le package bankStream.
Possibilit de spcifier un classpath: un chemin de recherche o java est cens
de trouver ses classes
Les utilitaires de Java
Javadoc Gnrateur de documents
Ncessit dune documentation suffisante
pour aider les membres de lquipe
pour saider soi-mme
javadoc: une partie de votre documentation
Intgrer code et documentation
rsoudre problme de maintenance de la documentation
informations dans le code lui-mme
Lancer Javadoc
Se mettre dans le rpertoire parent de vos packages
Pour crer la javadoc, taper javadoc -d c:\mydir\html
Conditions
javadoc dans le PATH
rpertoire destination (-d) doit exister
demo est le nom dun package
Commentaires dlimits par /** et */
demo
Les utilitaires de Java
Jar Utilitaire darchivage
Permet de grouper et compresser des fichiers utiliss par un
programme Java
Syntaxe dutilisation similaire tar
jar cf myjarfile.jar *.class
archivage de tout fichier .class, trouv dans le rpertoire courant et tout sousrpertoire, dans le fichier myjarfile.jar
jar xf myjarfile.jar
Extrait tout fichier contenu dans myjarfile.jar vers une structure de rpertoires
linterprteur java reconnat les fichiers .jar et peut les traiter comme
un rpertoire.
java cp myarchive.jar be.newco.MyMain
Lance le main() contenu dans be.newco.MyMain, tout en ajoutant les fichiers
de myarchive.jar dans le classpath