0% ont trouvé ce document utile (0 vote)
171 vues

Introduction À Java

Ce document présente un plan détaillé pour un cours d'introduction à Java. Le cours couvrira les concepts de base du langage Java ainsi que les principes de la programmation orientée objet. Le document décrit également les objectifs pédagogiques de chaque chapitre.

Transféré par

07031981
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
171 vues

Introduction À Java

Ce document présente un plan détaillé pour un cours d'introduction à Java. Le cours couvrira les concepts de base du langage Java ainsi que les principes de la programmation orientée objet. Le document décrit également les objectifs pédagogiques de chaque chapitre.

Transféré par

07031981
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPT, PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 220

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

Vous aimerez peut-être aussi