Vous êtes sur la page 1sur 327

Introduction Java

Hugues Bersini
Code/IRIDIA Universit Libre de Bruxelles
Objectifs du cours (1/2)

Dcrire les lments-cl de la plate-forme Java


Compiler et excuter une application Java
Prendre en mains lenvironnement de dveloppement
Eclipse
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

Cours Java 2013 Bersini


Objectifs du cours (2/2)

Etre capable, au terme de la formation, de dvelopper de


petites applications OO comprenant une dizaine de
classes et mettant en uvre les principaux concepts OO
et structures Java.
Le cours couvre lessentiel de la matire des examens
OO for Java Basic , Java SE Basic et Java SE
Core Intermed de Java BlackBelt
(www.javablackbelt.com)

Cours Java 2013 Bersini


Plan du cours (1/4)
1. Introduction gnrale et historique
Le langage de programmation Java
La plateforme Java
Les versions de Java
2. Premire application en Java
Ecriture du code, compilation et excution
Application v/s Applet
Utilitaires 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

Cours Java 2013 Bersini


Plan du cours (2/4)

4. Programmation oriente objets en Java


Programmation procdurale v/s Programmation OO
Concepts de lOO
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

Cours Java 2013 Bersini


Plan du cours (3/4)

5. Structure des API de Java


6. Les collections
Aperu du Java Collections Framework
La classe ArrayList
7. La gestion des Exceptions
Principes et hirarchie des classes dexceptions
Interception par bloc try catch finally
Lancement par mots-cls throws et throw

Cours Java 2013 Bersini


Quelques sujets non couverts

Dveloppement des applets


Interfaces graphiques (Swing et AWT)
Dveloppement dapplication clients/serveur
TCP/IP
UDP
Enterprise Java Beans (EJB)
Servlets et Java Server Pages (JSP)
Connections des bases de donnes (JDBC)

Cours Java 2013 Bersini


Rfrences Web

The Java Tutorial from Sun


http://java.sun.com/docs/books/tutorial/
Thinking in Java
http://www.thinkinginjava.org/
http://penserenjava.free.fr/
The Java Developer Connection
http://developer.java.sun.com/developer/index.html
Gamelan
http://www.gamelan.com
Java Applet Rating Services
http://www.jars.com

Cours Java 2013 Bersini


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
Les versions de Java
Quelques notions historiques

Cours Java 2013 Bersini


Quest-ce que Java ?

Java est un langage de programmation


Voir le white paper de J.Gosling
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)

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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++

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


Java comme langage de programmation
Neutre architecturalement

Il existe une grande diversit de


MyProgram.java
systmes dexploitation
Le compilateur Java gnre un
bytecode, cest dire un format
Java Compiler
intermdiaire, neutre
architecturalement, conu pour
faire transiter efficacement le
code vers des hardware MyProgram.class
diffrents et/ou plateformes = bytecode
diffrentes
Le bytecode ne peut-tre JVM JVM JVM
interprt que par le
Mac Windows Unix
processeur de la JVM

Cours Java 2013 Bersini


Java comme langage de programmation
Ouvert et distribu
Support intgr dInternet
La Class URL
Communication rseaux TCP et UDP
RMI, CORBA, Servlets
JINI, le must pour construire des applications complexes distribues..
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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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)

Cours Java 2013 Bersini


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
..

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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 stack
Le tas ( Heap ) des objets garbage-collects
Lespace mmoire

Cours Java 2013 Bersini


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
(JIT compiler)

Cours Java 2013 Bersini


Dploiement dun programme (1/2)
Paradigme classique de la compilation

MyProgram.c

Excut une seule fois Gnre du code natif directement


Mais diffrent pour Compiler excutable, mais spcifique
chaque environnement chaque environnement

MyProgram.o

010110

Cours Java 2013 Bersini


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

Traduit le programme en un code intermdiaire


Excut une seule fois Compiler Appel bytecode indpendant de la machine

MyProgram.class

Chaque fois que le


programme est excut Interpreter Lit le bytecode et excute sur la machine

010110

Cours Java 2013 Bersini


Les versions de Java

SE v/s EE, annexes


SDK v/s JRE
1.1 v/s 1.2 et suivantes
Tlcharger lenvironnement Java et Eclipse

Cours Java 2013 Bersini


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
2006: Java devient Open Source
Les sources de la plateformes Java sont dsormais libres sous licence GNU

Cours Java 2013 Bersini


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)


Eclipse (http://www.eclipse.org)
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)

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


Une premire application
Application HelloWorld
Crer un fichier texte : HelloWorld.java
Rgle de bonne pratique : 1 classe par fichier et 1 fichier par classe

public class HelloWorld La premire ligne du programme doit tre la


{ dclaration de la classe

public static void main (String[]args) 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

Cours Java 2013 Bersini


Une premire application
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; Importation des classes externes


import java.awt.Graphics; ncessaires (issues des API Java)

Dclaration de la classe qui hrite de la


public class HelloWorldApplet extends Applet classe prdfinie Applet
{
public void paint(Graphics g) La mthode paint dtermine laffichage dans
la fentre de lApplet
{
g.drawString("Hello the World", 50, 25); crire lcran Hello the World
}
} Fermer les accolades

Compiler le programme : javac HelloWorldApplet.java


Le compilateur gnre le bytecode dans le fichier :
HelloWorldApplet.class
Cours Java 2013 Bersini
Une premire application
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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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 demo
Conditions
javadoc dans le PATH
rpertoire destination (-d) doit exister
demo est le nom dun package
Commentaires dlimits par /** et */

Cours Java 2013 Bersini


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 sous-
rpertoire, 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

Cours Java 2013 Bersini


Lenvironnement Eclipse

Eclipse est un Environnement de Dveloppement Intgr (IDE)


Spcialement conu pour le dveloppement en Java
Cr lorigine par IBM
Puis cd la communaut Open Source
Caractristiques principales
Notion de projet (1 programme 1 projet)
Colore le code en fonction de la signification des mots utiliss
Force lindentation du code
Compile le code en temps rel
Identifie les erreurs en cours de frappe
Peut gnrer des bouts de code automatiquement
Permet de grer le lancement des applications

Cours Java 2013 Bersini


Crer un projet Eclipse Etape 1

Cours Java 2013 Bersini


Crer un projet Eclipse Etape 2

Cours Java 2013 Bersini


Crer un projet Eclipse Etape 3

Le contenu de votre projet


(les classes) apparatra ici

Cours Java 2013 Bersini


Une premire application en Java

Maintenant que notre projet a t cr, nous pouvons commencer


dvelopper une application
Une application Java est compose de Classes
En rgle gnrale, chaque classe correspond un fichier
Chaque fichier source (le code de chaque classe) est sauv avec un nom
de fichier correspondant au nom de la classe et lextension .java
Java est dit case-sensitive Distingue majuscules et minuscules!!!
Notre premire application sera compose dune seule classe
Le nom de cette classe sera HelloWorld
Elle sera donc enregistre dans un fichier nomm HelloWorld.java
Le code de cette classe (fourni plus loin) doit tre recopi tel quel
ATTENTION
Chaque symbole importe
Une majuscule nest pas une minuscule

Cours Java 2013 Bersini


Une premire application en Java

Cours Java 2013 Bersini


Une premire application en Java

public class HelloWorld La premire ligne du programme doit tre la


{ dclaration de la classe

public static void main (String[]args) 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

Cours Java 2013 Bersini


Une premire application en Java

Une fois le programme crit (ici lunique classe), il reste le lancer


Pour lancer une application Java, il faut
La compiler (fait automatiquement par Eclipse)
Lancer la machine virtuelle (JVM) (fait automatiquement par Eclipse)
Ordonner la JVM dappeler la mthode main de la classe principale
Crer une configuration de lancement dans Eclipse
Pour apprendre Eclipse comment lancer notre programme
Une fois cette configuration cre, on pourra relancer le programme en
cliquant simplement sur le bouton

Cours Java 2013 Bersini


Une premire application en Java
Crer une configuration de lancement Eclipse

Cours Java 2013 Bersini


Une premire application en Java
Crer une configuration de lancement Eclipse

Cours Java 2013 Bersini


Une premire application en Java
Crer une configuration de lancement Eclipse
1
Nom de la configuration de lancement

2
Nom de votre projet (indiqu automatiquement)

3
Nom de la classe principale
(normalement indiqu automatiquement)

4
Cliquez sur Run pour lancer le programme

Cours Java 2013 Bersini


Une premire application en Java
Le rsultat de votre application Cliquez sur le bouton Run
pour relancer votre programme

La Console affiche le rsultat


de votre programme

Cours Java 2013 Bersini


Introduction Java

III. Syntaxe du langage Java


Survol du chapitre
Le vocabulaire de Java: Mots-cls et variables
Mots-cl
Identificateurs: Quel nom donner ses variables, mthodes et classes?
Les variables
Variables primitives
Cration et utilisation
Chanes de caractres
La grammaire de Java: Structures et rgles
Arithmtique et oprateurs
Instructions et blocs dinstructions
Structures de contrle
If, then, else
For
While et Do While
Break et Continue
Conventions
Commentaires dans le code source
Conventions dcriture
Trucs et astuces de base
Mthodes essentielles
Les tableaux ( Array )

Cours Java 2013 Bersini


Syntaxe Java

Un langage informatique est compos de


Mots-cls
Constituent le vocabulaire du langage
Structures et rgles
La grammaire du langage (=la forme requise des instructions)
Conventions
En gnral des rgles de notations adoptes par tous les programmeurs

Cours Java 2013 Bersini


Vocabulaire Java
Mots-cl: Le vocabulaire de Java
abstract else interface switch
assert enum long synchronized
boolean extends native this
break false new throw
byte final null throws
case finally package transient
catch float private true
char for protected try
class goto public void
const if return volatile
continue implements short while
default import static
do instanceof strictfp
double int super

Cours Java 2013 Bersini


Vocabulaire Java
Identificateurs
En informatique, on dfinit des variables, des classes et des fonctions (ou
mthodes)
Un identificateur (identifier) permet de dsigner une classe, une mthode,
une variable, cest le nom que vous choisissez de leur donner
On ne peut choisir nimporte quel nom. En Java en particulier:
Interdiction dutiliser les mots-cls
Ne peuvent pas contenir:
Despaces
De caractres internationaux (accents, etc.) (techniquement possible mais dconseill)
Commencent par:
Une lettre
Un $
Un _ (underscore)
Ne commencent pas par:
Un chiffre
Un signe de ponctuation autre que $ ou _

Cours Java 2013 Bersini


Vocabulaire Java
Les variables
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

Cours Java 2013 Bersini


Vocabulaire Java
Types de variables en Java: Types primitifs (1/4)
Les types de donnes primitifs en Java sont prdfinis et en nombre
limit:

Primitive Data Types

Integral Floating

byte 8bits -128 to 127 float 32bits 1.4E-45 3.4E38


short 16bits -32768 to 32767 double 64bits 4.9E-324 1.8E308
int 32bits -2^31 to 2^31-1
long 64 bits -2^63 to 2^63-1

Textual Logical

char 16bits 0 to 65535 boolean:


one bit : true or false

Cours Java 2013 Bersini


Vocabulaire Java
Types de variables en Java: Types 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 int x=12;
short short x= 32; (short x=33000; // Hors limite)
long long x= 200L; // Nombre accol un L
byte byte x=012; // Nombre commenant avec un 0
double double x=23.2323;
float float x= 23.233F; // Nombre accol un F
char char c=a; char c=\u0061; char c=(char)97;
boolean boolean b=true;

Cours Java 2013 Bersini


Vocabulaire Java
Types de variables en Java: Types primitifs (3/4)
Pour pouvoir tre utilise, une variable en Java doit tre
Dclare (dfinir son nom et son type)
Initialise (lui donner une valeur initiale)
Peut se faire en mme temps que la dclaration
Assigne (modifier sa valeur au cours de son cycle de vie)
Syntaxe:
int t; Dclaration dun entier t (t est lidentificateur)
int u = 3; Dclaration et initialisation dun entier u
t=7; Initialisation de t la valeur 7
u=t; Assignation (affectation) de la valeur de t u
m=9; ERREUR: m na pas t dclar
char c; Dclaration
c=a; Initialisation

Cours Java 2013 Bersini


Vocabulaire Java
Types de variables en Java: Types primitifs (4/4)
Fonctionnement:

int a = 5;
Dclaration et initialisation de 2 entiers: a et b
int b = 8;

a=b; Affectation de la valeur de b a

Dsormais, il existe deux variables en mmoire qui ont la


a=8 b=8 mme valeur

Cours Java 2013 Bersini


Vocabulaire Java
Les chanes de caractres
Les chanes de caractres ( String ) sont essentielles et omniprsentes
dans les programmes informatiques
Or il nexiste pas de type primitif string en Java
String nest en fait pas un type primitif, cest une classe (cf. plus loin)
Leur utilisation ressemble nanmoins trs fort celle des autres types:
Dclaration de deux String:
String s1, s2; // On peut toujours dclarer plusieurs variables de mme type
// simultanment en les sparant par des virgules
Initialisation :
s1 = "Hello";
s2 = "le monde";
Dclaration et initialisation :
String s3 = "Hello";
Concatnation :
String s4 = s1 + " " + s2;

Cours Java 2013 Bersini


Grammaire Java
Arithmtique et oprateurs: oprateurs arithmtiques
Quelle est la valeur de : 5+3*4+(12/4+1)
Rgles de prcdences sur les oprateurs:

Niveau Symbole Signification


1 () Parenthse
* Produit
2 / Division
% Modulo
+ Addition ou concatnation
3
- Soustraction

Cours Java 2013 Bersini


Grammaire Java
Arithmtique et oprateurs Oprateurs de comparaison et logiques
Pour comparer deux valeurs:
Oprateur Exemple Renvoie TRUE si
> v1 > v2 v1 plus grand que v2
>= v1 >= v2 Plus grand ou gal
< v1 < v2 Plus petit que
<= v1 <= v2 Plus petit ou gal
== v1 == v2 gal
!= v1 != v2 diffrent

Oprateurs logiques:
Oprateur Usage Renvoie TRUE si
&& expr1 && expr2 expr1 et expr2 sont vraies
& expr1 & expr2 Idem mais value toujours les 2 expressions
|| expr1 || expr2 Expr1 ou expr2, ou les deux sont vraies
| expr1 | expr2 idem mais value toujours les 2 expressions
! ! expr1 expr1 est fausse
!= expr1 != expr2 si expr1 est diffrent de expr2

Cours Java 2013 Bersini


Grammaire Java
Arithmtique et oprateurs Oprateurs dassignation
Loprateur de base est =
Exemple: int a = 5;
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
++ expr1++ expr1 = expr1 + 1
-- expr1-- expr1 = expr1 - 1

Cours Java 2013 Bersini


Grammaire Java
Instructions et blocs dinstruction
Une instruction
Ralise un traitement particulier:
Renvoie ventuellement le rsultat du calcul
Est comparable une phrase du langage naturel
Constitue lunit dexcution
Est (presque) toujours suivie de ;
Il en existe plusieurs types: dclaration, assignation, envoi de message, etc.
Un bloc
Est une suite dinstructions entre accolades { et }
Dlimite la porte des variables qui y sont dclares
Suit (presque) toujours la dclaration des classes et mthodes
Dfinit galement le contenu des boucles et structures conditionnelles
Doit toujours tre referm (autant de { que de } )

Cours Java 2013 Bersini


Grammaire Java
Instructions et blocs dinstruction
Types dinstructions:
Dclaration
Dfinit un lment (variable, mthode ou classe)
Constitue la signature de cet lment
Sil sagit dune dclaration de variable:
Est normalement toujours suivie dun ;
Ex: int unNombreEntier;
Sil sagit dune dclaration de classe ou de mthode:
Est normalement toujours suivie dun bloc dinstructions
Ex: int uneMethodeQuiRenvoieUnEntier(){}
On dfinit alors dans le bloc les traitements (instructions) raliser par la
mthode
Assignation
Sert modifier la valeur dune variable
Est toujours suivie dun ;
Ex: a = 57;
Envoi de message
Sert appeler une mthode (lancer un traitement)
Est toujours suivie dun ;
Ex: monChien.vaChercher(leBaton);

Cours Java 2013 Bersini


Grammaire Java
Structures de contrle
Les structures de contrles permettent darrter lexcution linaire
des instructions (de bas en haut et de gauche droite)
Il en existe 4 grands types:
Les conditionnelles ( SI ALORS SINON )
Les boucles ( TANT QUE JE REFAIS )
Les branchements ( JE SORS DE LA BOUCLE ET JE VAIS A )
Le traitement dexceptions ( JESSAIE MAIS SI CA PLANTE )

Type dinstruction Mots cls associs


Conditionnelle if() else switch() case
Boucle for( ; ; ) while () do while()
Branchement label : -- break continue -- return
Traitement dexceptions try catch finally throw

Cours Java 2013 Bersini


Grammaire Java
Structures de contrle
Les conditionnelles (traditionnellement IF THEN )
if (LA_CONDITION_A_EVALUER)
{
//instructions raliser si la condition est rencontre
}
Les conditionnelles (traditionnellement IF THEN ELSE )
if (LA_CONDITION_A_EVALUER)
{
//instructions raliser si la condition est rencontre
}
else
{
//instructions raliser si elle nest pas rencontre
//Peut contenir elle-mme dautres sous-conditions
}

Cours Java 2013 Bersini


Grammaire Java
Structures de contrle
Une autre forme de conditionnelle: SWITCH CASE
Permet dvaluer une variable numrique entire
Et de provoquer des traitements diffrents selon sa valeur

switch(UNE_VARIABLE_NUMERIQUE_ENTIERE)
{
case 1 : instructions; // A raliser si elle vaut 1
case 2 : instructions; break; // Si elle vaut 2
default : instructions; // Dans tous les autres cas
}

Cours Java 2013 Bersini


Grammaire Java
Structures de contrle
Les boucles FOR (boucles traditionnelles)
for (initialisation; condition; mise jour de valeurs){
// instructions
}
Initialisation: excuter lorsque le programme rentre pour la premire
fois dans la boucle Sert dfinir le compteur de la boucle
Condition: remplir pour recommencer le bloc dinstructions
Mise jour: instruction excute chaque fois que la boucle est termine

Exemple:
for (int i=0 ; i<10 ; i++) {
System.out.println("The value of i is : " + i);
}

Cours Java 2013 Bersini


Grammaire Java
Structures de contrle
Un autre forme de boucle: WHILE DO WHILE

while (CONDITION_A_RENCONTRER_POUR_CONTINUER) {
// Instructions raliser tant que la condition est
// rencontre. A la fin de chaque itration, on
// rvalue la condition et on dcide soit de rester
// dans la boucle avec une nouvelle itration, soit de sortir
}

Exemple:
int i = 0;
while(i<10) {
System.out.println("The value of i is : " + i);
i++;
}

Cours Java 2013 Bersini


Grammaire Java
Structures de contrle
Interrompre une boucle une fois lance: BREAK / CONTINUE
BREAK: achve immdiatement la boucle ou la conditionnelle
CONTINUE: ignore le reste des instructions et passe tout de suite litration
suivante (au dbut de la boucle)

for (int i=0; i<10 ;i++){


if (i==5) continue; // Si i=5, on passe 6 sans afficher
if (i==7) break; // Si i=7, on sort de la boucle
System.out.println("The value of i is : " + i);
}

Cours Java 2013 Bersini


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=5, you jump to the beginning of the loop

if (i==7) break outer; // if i=7, you jump outside the loop and continue
System.out.println("The value of i,j is :"+i+","+j);
}
}

Cours Java 2013 Bersini


Grammaire Java
Structures de contrle
Intercepter les exceptions ( plantages ): TRY CATCH
Certains traitements sont parfois risque , cd que le programmeur ne
peut savoir avec certitude lavance si linstruction quil crit fonctionnera
correctement ou non au moment de lexcution car cela dpendra de
paramtres dont il na pas le contrle
Les blocs TRY CATCH (littralement ESSAIE [ceci] ET SI CELA
PROVOQUE UNE ERREUR FAIS [cela] ) permettent de prvoir le coup
en interceptant lerreur qui pourrait se produire et en prvoyant demble une
action correctrice

try{
// Une ou plusieurs instructions potentiellement risque
} catch(ExceptionXYZ unProblemeDeTypeXYZ){
// Ce quil faut faire si un problme de type XYZ de produit
}

Cours Java 2013 Bersini


Grammaire Java
Porte des 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 = "Tutto 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
Cours Java 2013 Bersini
Grammaire Java
Structure dun programme
Un programme simple en Java doit avoir la structure suivante:

public class NomDeLaClasse {


public static void main(String[] args){
// Le programme commence ici
// Tout se passe lintrieur de ces accolades
}
}

Cours Java 2013 Bersini


Conventions
Rgles de notation pour les identificateurs
Java est case sensitive , il est donc crucial dadopter des rgles de
notation claires et dfinitives en termes de majuscules et minuscules.
Les rgles ci-dessous sont universellement appliques par les dveloppeurs
Java et sont en particulier dapplication dans toutes les classes prdfinies

Classes Packages
class BankAccount package coursSolvay2006;
class RacingBike Variables
Interfaces int accountNumber
interface Account Constantes
Mthodes MAXIMUM_SIZE
deposit()
getName()

Cours Java 2013 Bersini


Conventions
Commentaires dans le code source
Il est hautement conseill de documenter son code
Cela se fait en ajoutant des commentaires
prcisant le rle des instructions
Les commentaires sont ignors dans le code la compilation
Cela permet donc aussi de neutraliser une instruction
sans pour autant leffacer
Pour inclure des commentaires dans le code:
Pour une seule ligne de commentaires:
2 barres obliques // neutralisent tout le code droite sur la mme ligne
System.out.println("Hello"); // Affiche Hello lcran
Pour annuler tout un bloc de lignes: Tout le texte entre /* et */ est
neutralis
public static void main(String[] args){
/* La ligne qui suit sert afficher un message lcran
Le message en question est Hello
Mais il peut tre remplac par nimporte quel autre */
System.out.println("Hello");

Cours Java 2013 Bersini


Trucs et astuces de base
Mthodes essentielles
Afficher quelque chose lcran:
System.out.println("Texte ou donnes afficher");
Choisir un nombre alatoire
Math.random(); // Renvoie un double entre 0 et 1
Convertir un double en entier
int i = (int) d; // A supposer que d est un double
Convertir un entier en chane de caractres
String s = ""+i; // A supposer que i est un int
Obtenir le nombre entier contenu dans une chane de caractre:
int i = Integer.parseInt(s);// Si s est une chane de
// caractres faite d1 entier
Vrifier si une chane de caractres est gale une autre
s1.equals(s2) // Renvoie true si s1=s2 et false sinon
s1.equalsIgnoreCase(s2) // Idem sans prter attention aux
// majuscules/minuscules

Cours Java 2013 Bersini


Trucs et astuces de base
Mthodes essentielles
Manipuler les dates
La classe java.util.Date
Contient en fait un entier long qui correspond un moment dans le temps
exprim en millisecondes depuis le 1/1/1970 0:00:00-000
Pour crer une date:
Date d = new Date();
DateFormat df=DateFormat.getDateInstance(DateFormat.SHORT,Locale.FRANCE);
try {
d = df.parse("13/11/2005");
} catch (ParseException e) {e.printStackTrace();}

Pour obtenir la date et lheure du systme:


Date d = new Date(System.currentTimeMillis());

Pour formater une date:


String s = DateFormat.getDateInstance(DateFormat.SHORT).format(d);
String s = DateFormat.getDateInstance(DateFormat.LONG).format(d);
String s = DateFormat.getDateInstance(DateFormat.MEDIUM).format(d);

Il faut pour cela importer:


java.util.Date, java.util.Locale, java.text.DateFormat

Cours Java 2013 Bersini


Trucs et astuces de base
Mthodes essentielles
Rcuprer les entres au clavier de lutilisateur:
Au dbut du programme (avant la dclaration de la classe):
import java.io.BufferedReader;
import java.io.InputStreamReader;

Au moment dinviter lutilisateur introduire quelque chose au clavier:


BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
String s = "";
try {
s = b.readLine();
} catch(Exception e){System.exit(1);}
n = Integer.parseInt(s);

Cours Java 2013 Bersini


Exercices
Ding Ding Bottle
Ecrire un programme qui compte de 1 100
Affiche ces nombres lcran
Remplace les multiples de 5 par Bottle
Remplace les multiples de 7 par Ding Ding
Remplace les multiples de 5 et 7 par Ding Ding Bottle
Calcul de factorielle
Ecrire un programme qui calcule la factorielle de 15
Et affiche le rsultat lcran ainsi que tous les rsultats intermdiaires
Trouve le nombre
Ecrire un programme qui choisit un nombre entier au hasard entre 1 et 10
Laisse 3 chances lutilisateur pour le trouver (en lindiquant au clavier)
Lui demande ensuite sil souhaite rejouer
Eviter au maximum les redites (ne pas rpter le code)

Cours Java 2013 Bersini


Exercices Bonus

Ecrire un programme qui affiche sur la console un triangle de la


forme suivante :
*
***
*****
En paramtre, fournissez lapplication le nombre de lignes du
triangle

Cours Java 2013 Bersini


Exercices
Comment procder? Pour chaque programme:
Crez une nouvelle classe dans votre projet HelloWorld
Le code de base de la classe est le suivant:
public class NomDeLaClasse{
public static void main(String[] args){
// Cest ici que vous crirez votre programme
}
}
Une fois votre programme crit, crez une nouvelle configuration de lancement
dans Eclipse et lancez-le pour en tester le fonctionnement

Cours Java 2013 Bersini


Trucs et astuces de base
Les tableaux (Array) (1/3)
Il arrive davoir grer un ensemble de variables qui forment un tout
Un tableau est utilis pour stocker une collection de variables de
mme type
Il faut dfinir le type de variables que le tableau va contenir
Les tableaux sont identifis par des crochets [ ]
Les cases du tableau sont identifies par des indices dans les [ ]
Lindexation des tableaux commence toujours 0
Un tableau doit tre dclar, initialis, et rempli

int[] nombres; // dclaration


nombres = new int[10]; // cration
int[] nombres = new int[10]; // dclaration et cration
nombres[0] = 28; // Le 1er lment est 28

La capacit du tableau est fournie par nomDuTableau.length

Cours Java 2013 Bersini


Trucs et astuces de base
Les tableaux (Array) (2/3)
On peut construire des tableaux plusieurs dimensions
Des tableaux plusieurs dimensions sont en fait des tableaux de tableaux

matrice est une rfrence vers


int[][] matrice = new int[3][]; un tableau contenant lui-mme 3
tableaux de taille non dfinie
matrice[0] = new int[4]; Le premier lment de la matrice
matrice[1] = new int[5]; est une rfrence vers un tableau
matrice[2] = new int[3]; de 4 entiers,
Le premier lment du premier
matrice[0][0] = 25; tableau de la matrice est un entier
de valeur 25

Exemple:
Crer et initialiser une matrice contenant deux tableaux de 2 et 3 entiers respectivement
Remplir les 5 cases du tableau avec des valeurs entires

Cours Java 2013 Bersini


Trucs et astuces de base
Les tableaux (Array) (3/3)
matriceDEntiers
int[][] matriceDEntiers;
matriceDEntiers = new int[2][];
matriceDEntiers[0] = new int[2]; [0]
matriceDEntiers[1] = new int[3]; 25
[0]
matriceDEntiers[0][0] = 25;
[1]
matriceDEntiers[0][1] = 76;
76
matriceDEntiers[1][0] = 13;
matriceDEntiers[1][1] = 45;
13 [1]
matriceDEntiers[1][2] = 68;
[0]
45 [1]
[2]

68

Cours Java 2013 Bersini


Exercices
Etudiants
Ecrire un programme permettant dencoder les cotes dtudiants un examen
Et fournissant quelques statistiques de base sur ces cotes
Le programme demande dabord lutilisateur combien de cotes il souhaite
encoder (soit N)
Ensuite il demande lutilisateur dintroduire une une les notes des N
tudiants (/20)
Votre programme mmorise ces rsultats
Les affiche une fois la dernire cote encode
Et affiche quelques statistiques de base:
le nombre de russites et dchecs
la moyenne totale
la cote moyenne des checs
la cote moyenne des succs

Cours Java 2013 Bersini


Utilisation des tableaux de taille dynamique

Les arrays ont pour dfaut davoir une taille fixe priori. Java fourni
des collections plus souples et simples dutilisation. La gestion de la
taille est automatis et allge la tche du programmeur.
Pour dclarer une variable de type tableau dentiers :
ArrayList<Integer> monTableau = nes ArrayList<Integer>();
On peut remplacer Integer par nimporte quelle class
Pour ajouter une donne au tableau :
monTableau.add(3);
Pour rcuprer un lment en position k :
Int elem = monTableau.get(k);

Cours Java 2013 Bersini


Utilisation des tableaux de taille dynamique

Parcours dun tableau


Approche classique :
for(int i=0; i<monTableau.size(); i++)
{
int elemti = monTableau.get(i);
System.out.println(elemti);
}

Approche for each


for(int elemti : monTableau)
{
System.out.println(elemti);
}

Cours Java 2013 Bersini


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:
package technofutur3.bank class BankAccount
class NormalAccount
class SparingAccount class SparingAccount class NormalAccount

package technofutur3.mediatheque
import technofutur3.bank.NormalAccount
package mediatheque

class NormalAccount

Cours Java 2013 Bersini


Introduction Java

IV. Programmation oriente objet en Java


Les concepts de lOO
Introduction lorient objet (OO)
Pourquoi lOO?
Quest-ce que lOO?
Quest-ce quun objet ?
Les principes de lorient objet
Lencapsulation
Pourquoi lobjet est-il une bote noire?
La classe
Comment dfinir un objet?
Comment dfinir les tats? Dclaration des variables membres
Comment initialiser les tats? Le constructeur
Comment dfinir les comportements? Dclaration des mthodes
Interaction entre objets
Envoi de messages
Permettre aux objets de senvoyer des messages Association
Cration dobjets Appeler le constructeur
Hritage
Modliser les classes avec des diagrammes UML

Cours Java 2013 Bersini


Les concepts de lOO
Pourquoi lOO?
Des dcennies durant, on a programm en informatique en se
concentrant prioritairement sur ce qui devait se passer dans le
programme.
On a ainsi structur les programmes en ensembles de traitements ,
dfinis sous forme des fonctions ou procdures, que lon pouvait
appeler tout moment et qui pouvaient manipuler toutes les donnes
du programme.
Mais les problmes que doivent rsoudre les programmes
informatiques sont devenus de plus en plus complexes et ce
dcoupage en fonctions ou traitements est devenu sous-optimal.
De fait, il prsente 3 inconvnients majeurs:
Il rend difficile la rutilisation dun bout de programme hors de son contexte
Il force linformation (autrement dit les donnes, cd la matire premire de
linformatique) se plier aux traitements (on les structure en fonction des
traitements raliser) alors quelles devraient tre le point de dpart
Il est inadapt la faon dont lhomme dcrit les problmes
Cours Java 2013 Bersini
Les concepts de lOO
Un petit cosystme
But du jeu?
Simuler la vie dans une petite jungle compose de prdateurs, de
proies, de plantes et de points deau

Cours Java 2013 Bersini


Les concepts de lOO
Un petit cosystme
Rgles du jeu?
Les proies se dplacent soit vers leau, soit vers une plante, soit pour
fuir un prdateur en fonction du premier de ces objets quelles reprent
Les prdateurs se dplacent soit vers leau, soit vers une proie en
fonction du premier de ces objets quils rencontrent
Les plantes poussent lentement au cours du temps, tandis que leau
svapore peu peu
Les animaux puisent leurs ressources nergtiques peu peu, au fur
et mesure de leurs dplacements
Lorsque les animaux rencontrent de leau, ils sabreuvent et rcuprent
de lnergie tandis que le niveau de leau diminue en consquence
Lorsquun prdateur rencontre une proie, il la dvore et rcupre de
lnergie
Lorsquune proie rencontre une plante, il la dvore et rcupre de
lnergie
Cours Java 2013 Bersini
Les concepts de lOO
Un petit cosystme
Comment procder?
En dcoupant le problmes en quelques grand traitements:
1. La proie et le prdateur doivent se dplacer
On pense/code le dplacement de la proie et du prdateur
ensemble
Chacun des animaux doit pour cela reprer une cible
On conoit une fonctionnalit de reprage commune tous les
acteurs
Les animaux cherchent leau
Le prdateur cherche la proie
La proie cherche la plante et viter le prdateur
2. Les animaux se ressourcent
On conoit une fonctionnalit qui concerne tous les acteurs
3. Les ressources de la plante et de leau voluent
On pense / code une fonction dvolution des ressources
Cours Java 2013 Bersini
Les concepts de lOO
Un petit cosystme
Donnes Traitements

Cours Java 2013 Bersini


Les concepts de lOO
Un petit cosystme
Enseignements?
Les donnes constituent des ensembles globaux traits globalement
Les traitements sont regroups dans quelques grandes fonctions qui
peuvent tre imbriques et faire appel les unes aux autres
Les donnes sont donc partages collectivement et les fonctions sont
interpntres
On a donc pens aux traitements et leur enchanement AVANT de
penser aux donnes
Approche TOP-DOWN
Modus operandi de plus en plus complexe mesure que la complexit
et interdpendances des traitements sintensifient
Difficult de rutiliser les fonctions dans un autre contexte
Difficult de maintenance: toutes les activits impliquant tous les objets
Si on modifie une entit, il faut vrifier lentiret du code

Cours Java 2013 Bersini


Les concepts de lOO
Flashback au temps de lassembleur
Aux origines de linformatique
Programmation des ordinateurs dicte par le fonctionnement des
processeurs
Programme = Succession dinstructions
Organisation du programme et nature des instructions doit tre le plus
proche possible de la faon dont le processeur les excute
Modification des donnes mmorises
Dplacement des donnes dun emplacement un autre
Oprations arithmtiques et de logique lmentaire
Programmation en langage machine
Exemple: c = a + b se programme
LOAD a, REG1
LOAD b, REG2
ADD REG3, REG1, REG2
MOVE c, REG3

Cours Java 2013 Bersini


Les concepts de lOO
Flashback au temps de lassembleur
Langages de programmation procduraux
Mise au point dalgorithmes plus complexes
Ncessit de simplifier la programmation
Distance par rapport au fonctionnement des processeurs
Apparition de langages procduraux
Cobol, Basic, Pascal, C, etc.
Sintercalent entre langage ou raisonnement naturel et instructions
lmentaires
Permettant dcrire les programmes en langage plus verbal
Ex: IF a>b THEN a = a + 5 GOTO 25
Ncessit donc dune traduction des programmes en instructions
lmentaires Compilation
Raisonnement reste nanmoins conditionn par la conception des
traitements et leur succession
Eloign de la manire humaine de poser et rsoudre les problmes
Mal adapt des problmes de plus en plus complexes

Cours Java 2013 Bersini


Les concepts de lOO
Pourquoi lOO?
Lavnement de lobjet, il y a 40 ans
Afin de
Librer la programmation des contraintes lies au fonctionnement des
processeurs
Rapprocher la programmation du mode cognitif de rsolution des
problmes
Mise au point dun nouveau style de langages de programmation
Simula, Smalltalk, C++, Eiffel, Java, C#, Delphi, PowerBuilder, Python
Ide?
Placer les entits, objets ou acteurs du problme la base de la
conception
Etudier les traitements comme des interactions entre les diffrentes
entits
Penser aux donnes AVANT de penser aux traitements
Penser un programme en modlisant le monde tel quil nous apparat
Dfinir des objets et les faire interagir

Cours Java 2013 Bersini


Les concepts de lOO
Quest-ce que lOO?
Comment procder?
Identifier les acteurs du problme: Proie/Prdateur/Plante/Eau
Identifier les actions ou comportements de chaque acteur
Le prdateur:
se dplace en fonction des cibles, peut boire leau et
manger la proie
La proie:
se dplace en fonction des cibles, peut boire leau et
manger la plante
La plante:
pousse et peut diminuer sa quantit
Leau:
svapore et peut diminuer sa quantit

Cours Java 2013 Bersini


Les concepts de lOO
Quest-ce que lOO?

Cours Java 2013 Bersini


Les concepts de lOO
Quest-ce que lOO?
La programmation consistera donc dfinir les diffrents acteurs
(objets), leurs caractristiques et comportements et les faire
interagir.
La programmation OO permet donc de dcouper les problmes
informatiques non en termes de fonctions (que se passe-t-il?) mais en
termes de donnes (qui intervient dans le problme?) et des services
que celles-ci peuvent rendre au reste du programme (les
comportements).
Programmer en OO, cest donc dfinir des objets et les faire interagir.

Cours Java 2013 Bersini


Les concepts de lOO
Quest-ce quun objet?
La programmation OO consiste dfinir des objets et
les faire interagir
Quest-ce quun objet?
Une bote noire qui reoit et envoie des messages

How are
you?

Im
fine!

Cours Java 2013 Bersini


Les concepts de lOO
Quest-ce quun objet?
Que contient cette bote?
Du code Traitements composs dinstructions
Comportements ou Mthodes
Des donnes Linformation traite par les instructions et qui
caractrise lobjet Etats ou Attributs
Donnes et traitements sont donc indissociables
Les traitements sont conus pour une bote en particulier et ne
peuvent pas sappliquer dautres botes

Cours Java 2013 Bersini


Les concepts de lOO
Quest-ce quun objet?
Quelques exemples?
Objet Attributs Mthodes
Chien Nom, race, ge, couleur Aboyer, chercher le
baton, mordre, faire le
beau
Tlphone N, marque, sonnerie, rpertoire, Appeler, Prendre un
oprateur appel, Envoyer SMS,
Charger
Voiture Plaque, marque, couleur, vitesse Tourner, acclrer,
sarrter, faire le plein,
klaxonner

Cours Java 2013 Bersini


Exercices

Comptes en banque
Quelles sont les variables dtats caractristiques dun compte en banque?
Devraient-elles accessibles ou non de lextrieur?
Quels sont les comportements possibles dun compte en banque?
Devraient-elles tre accessibles ou non de lextrieur?

Cours Java 2013 Bersini


Lencapsulation
Pourquoi une bote noire?
Lutilisateur dun objet ne devrait jamais avoir plonger lintrieur de
la bote
Toute lutilisation et linteraction avec lobjet sopre par messages
Les messages dfinissent linterface de lobjet donc la faon dinteragir
avec eux
Il faut et il suffit de connatre linterface des messages pour pouvoir
exploiter lobjet 100%, sans jamais avoir connatre le contenu exact
de la bote ni les traitements qui laniment
Lintgrit de la bote et la scurit de ses donnes peut tre assure
Les utilisateurs dun objet ne sont pas menacs si le concepteur de
lobjet en change les dtails ou la mcanique interne
ENCAPSULATION Comportements
Donnes
Message

Message
Cours Java 2013 Bersini
La classe
Un objet sans classe na pas de classe
Comment les objets sont-ils dfinis?
Par leur classe, qui dtermine toutes leurs caractristiques
Nature des attributs et comportements possibles
La classe dtermine tout ce que peut contenir un objet et tout ce quon
peut faire de cet objet
Classe = Moule, Dfinition, ou Structure dun objet
Objet = Instance dune classe
Une classe peut-tre composite peut contenir elle-mme des objets
dautres classes
Ex: Une voiture contient un moteur qui contient des cylindres
Ex: Un chien possde des pattes

Cours Java 2013 Bersini


La classe
Un objet sans classe na pas de classe
Quelques exemples?
La classe chien dfinit:
Les attributs dun chien (nom, race, couleur, ge)
Les comportements dun chien (Aboyer, chercher le bton, mordre)
Il peut exister dans le monde plusieurs objets (ou instances) de chien

Classe Objets
Chien Mon chien: Bill, Teckel, Brun, 1 an
Le chien de mon voisin: Hector, Labrador, Noir, 3 ans
Compte Mon compte vue: N 210-1234567-89, Courant, 1.734 , 1250
Mon compte pargne: N 083-9876543-21, Epargne, 27.000 , 0
Voiture Ma voiture: ABC-123, VW Polo, grise, 0 km/h
La voiture que je viens de croiser: ZYX-987, Porsche, noire, 170 km/h

Cours Java 2013 Bersini


La classe import java.lang.*;
Un objet sans classe na pas de classe
public class Voiture {
Class Body
Dclaration
de la classe private String marque;
private int vitesse;
Variables dinstance
private double reserveEssence;
ou champs
public Voiture(String m,int v,double e){
marque=m ;
Dfinition du vitesse=v;
constructeur reserveEssence=e;
}
public String getMarque(){return marque;}
Mthodes daccs
public void setMarque(String m){marque=m;}

public void accelere(int acceleration) {
Dfinition vitesse += acceleration;
des }
mthodes public void ravitaille(double quantite){
reserveEssence+=quantite;
}
}
Cours Java 2013 Bersini
La classe
Dclaration des attributs
Les attributs dun objet sont dfinis par ses variables membres
Pour dfinir les attributs dun objet, il faut donc dfinir les variables
membres de sa classe
Les principes suivants gouvernent toutes les variables en Java:
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
Une dclaration typique de variable en Java a la forme suivante:
int unNombre;
String uneChaineDeCaracteres;

Cours Java 2013 Bersini


La classe
Dclaration des attributs
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, cest
ce qui les rend accessibles depuis nimporte o dans la classe.
La signature de la variable :
Les modificateurs daccs: indiquent le niveau daccessibilit de la variable
[static]: permet la dclaration dune variable de classe
optionnels

[final]: empche la modification de la variable ( Cre une constante)


[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)
Exemples:
private int maVitesse; // Je possde un entier maVitesse
private final String maPlaque; // maPlaque est constante

Cours Java 2013 Bersini


La classe
Dclaration des attributs
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

Cours Java 2013 Bersini


La classe
Dclaration des attributs
En java, les modificateurs daccs sont utiliss pour protger
laccessibilit des attributs et des mthodes.
Les accs sont contrls en respectant le tableau suivant:
Mot-cl classe package sous classe world

private Y

protected Y Y Y Seul les membres publics


sont visibles depuis le
public Y Y Y Y monde extrieur.
[aucun] Y Y

Une classe a toujours


accs ses membres. Une classe fille (ou
Les classes dun mme drive) na accs quaux
package protgent membres publics et
uniquement leurs protected de la classe
membres privs ( mre.
lintrieur du package)

Cours Java 2013 Bersini


Bien utiliser les accesseurs et comprendre
lencapsulation
De manire gnrale, on vitera de dclarer un attribut public
Ou alors, nimporte qui pourra modifier la variable.
Il faudra paramtrer les accs en utilisant les packages : seules les
classes du mme package (que vous controllez vous mme!!!)
pourront modifier les variables packages.
Pour packager une variable, une mthode ou une classe. ne mettez
aucun accesseur devant celle-ci. Crez juste un package (cd. un
rpertoire dans le systme de fichiers) et dclarez que votre classe
appartient au package au tout dbut du fichier via :

package nomdepackage;

Cours Java 2013 Bersini


Exercices
Cration dune classe compte en banque package
Crez un nouveau projet Eclipse
Crez un nouveau package banksys
Crez-y une nouvelle classe CompteEnBanque
Dclarez les attributs de la classe

Orient objet et bases de donnes


Quelle analogie peut-on tablir entre orient objet et bases de donnes?
Quelles sont les limites de cette analogie?

Cours Java 2013 Bersini


Exercices
Similitudes avec les bases de donnes?
Classe Table
Attribut Champ / Colonne
Objet Tuple (enregistrement) de la table
Valeur Valeur du champ ou de la colonne

Mais il y a des limites cette analogie (qui apparatront plus tard)

Cours Java 2013 Bersini


La classe
Dclaration des attributs
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
solde solde
class BankAccount {
soldePrim
int solde;
static int soldePrim;
variable de classe void deposit(int amount){
solde+=amount; Account1 Account2
soldePrim+=amount;
}
}

Cours Java 2013 Bersini


La classe
Dclaration des attributs
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
}

Cours Java 2013 Bersini


La classe
Le constructeur
Comme on la vu, les variables doivent tre initialises
Or la dclaration des attributs ninclut gnralement pas dinitialisation
De plus, comment pourrait-on connatre lavance la valeur des
diffrentes variables membres, puisquelle sera propre chaque
instance (objet) de la classe? (Chaque voiture a sa propre marque, sa
propre couleur et sa propre vitesse)
Il faut donc dfinir dans la classe un mcanisme permettant de donner
une valeur aux variables membres (aux tats) de lobjet
Ce mcanisme sappelle le constructeur
Une classe doit toujours avoir au minimum un constructeur
Le constructeur recevra les valeurs attribuer aux variables et les y
affectera
Le constructeur servira ainsi matrialiser la classe et sera donc
appel chaque fois quun objet de la classe doit tre cr
Le constructeur est donc la Recette pour fabriquer un objet

Cours Java 2013 Bersini


La classe
Le constructeur
A le mme nom que la classe
Utilise comme arguments des variables
public Voiture(String m,int
initialisant son tat interne
v,double e)
On peut surcharger les constructeurs, i.e dfinir
{
de multiples constructeurs (plusieurs recettes
existent pour fabriquer un mme objet avec des marque=m ;
ingrdients diffrents) vitesse=v;
Il existe toujours un constructeur. Sil nest pas reserveEssence=e;
explicitement dfini, il sera un constructeur par
}
dfaut, sans arguments
Signature dun constructeur:
Modificateur daccs (en gnral public) public Voiture(String m)
Pas de type de retour {
Le mme nom que la classe marque=m ;
Les arguments sont utiliss pour initialiser les variables vitesse=0;
de la classe
reserveEssence=0;
}

Cours Java 2013 Bersini


Exercices

Comptes en banque
Crer deux constructeurs diffrents dans la classe CompteEnBanque

Cours Java 2013 Bersini


Interaction entre objets
Cration dobjets
Notons toutefois quil ne se passe toujours rien dans notre
programme ce stade
En effet, nous avons conu deux classes, dont nous avons dfini les
caractristiques, les constructeurs et les comportements possibles,
mais nous navons toujours cr aucun objet
Nous navons en fait encore que dfini ce que seraient un compte en
banque ou une personne si nous en crions dans notre programme
Pour quil se passe quelque chose, il faudrait donc que nous
matrialisions nos classes, autrement dit que nous les instancions,
ce qui signifie que nous crions des objets
Pour ce faire, il faut appeler le constructeur de la classe dont nous
souhaitons crer une instance

Cours Java 2013 Bersini


Interaction entre objets
Cration dobjets
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

Voiture v1, v2;

v1 = new Voiture("Peugeot", 120, 35.3);

v2 = new Voiture("Ferrari");

Cours Java 2013 Bersini


Interaction entre objets
Cration dobjets
Dclaration et cration dobjets
Dclaration : Point p; p ????
Cration : p = new Point(2,3);
x 0
1. Cherche une place p ????
y 0

x 7
2. Assignation dune valeur p ????
y 10

x 2
3. Excution du constructeur p ????
y 3

x 2
4. Cration du pointeur p 0123abcd
y 3

Cours Java 2013 Bersini


Exercices

Comptes en banque
Cration dune classe Principale
Crer une classe Principale reprsentant un scnario possible
dutilisation de vos classes.
Mettez cette classe en dehors du package.
Y dfinir une mthode main , dans laquelle dclarer quelques
objets de type CompteEnBanque
Instancier arbitrairement ces quelques comptes
Raliser quelques oprations sur les comptes (retraits, dpts,
virements, calcul dintrts, etc.)
Afficher tous les comptes lcran
Jouez avec les accesseurs et constatez les consquences au
niveau de la mthode main.

Cours Java 2013 Bersini


La classe
Dclaration des mthodes
Quid des comportements?
La classe dfinit aussi les comportements des objets
Les comportements sont les messages que les objets de la classe
peuvent comprendre Aboie , Va chercher , Fais le beau
Les traitements ou instructions raliser lorsquun message en
particulier est envoy un objet sont dfinis dans la classe mais
restent cachs (cf. bote noire)
Certains messages requirent des renseignements complmentaires
Va chercher le bton , Aboie 3 fois trs fort
Une mthode peut renvoyer une valeur ou un objet son expditeur

Cours Java 2013 Bersini


La classe
Dclaration des mthodes
Quid des comportements?
Pour dclencher un traitement, il faut donc envoyer un message
lobjet concern On ninvoque jamais une fonction dans le vide
Loprateur denvoi de messages est le point .
Pour envoyer un message, il faut toujours prciser quel objet en
particulier on le destine
Ex: monChien.vaChercher(leBaton)
Si on ne prcise pas le destinataire, Java considre quon est son
propre destinataire
Ex: vaChercher(leBaton)
Cest celui qui envoie lordre qui le reoit
Ce qui peut aussi scrire: this.vaChercher(leBaton)
this signifie en effet lobjet prsent

Cours Java 2013 Bersini


La classe
Dclaration des mthodes
Une mthode est compose de: public void deposit (int amount) { Sa dclaration
solde+=amount ; Son corps
}
Signature dune mthode:
Modificateurs daccs : public, protected, private, aucun
[modificateurs optionnels] : static, native, synchronized, final, abstract
Type de retour : type de la valeur retourne
Signature

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)

Cours Java 2013 Bersini


La classe
Dclaration des mthodes
Quest-ce que 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

Cours Java 2013 Bersini


Exercices

Comptes en banque
Dclarer et implmenter les mthodes (comportements) de la classe compte
en banque
Dfinissez en particulier une mthode afficheToi qui affiche les
caractristiques du comptes lcran
Utilisez pour cela la mthode System.out.println( );

Cours Java 2013 Bersini


Interaction entre objets
Quest-ce quun envoi de message?
Tout ce qui se produit dans un programme OO est le rsultat dobjets
qui interagissent
Linteraction entre deux objets consiste en lenvoi dun message de
lobjet A lobjet B
Cet envoi de message est comme un ordre ou une question quun
objet adresse lautre
Techniquement, un envoi de message se matrialise par lappel dune
mthode dfinie dans la classe de lobjet destinataire
Exemple:
Soit un objet Matre et un objet Chien
Le matre peut envoyer un message au chien:
monChien.faisLeBeau();

Cours Java 2013 Bersini


Interaction entre objets
Quest-ce quun envoi de message?
Exemple?
Quand le lion sabreuve, il provoque une diminution de la quantit deau
Ce nest pas le lion qui rduit cette quantit
Le lion peut seulement envoyer un message leau, lui indiquant la
quantit deau quil a consomme
Leau gre seule sa quantit, le lion gre seul son nergie et ses
dplacements
Classe Classe
Lion Eau
boire()
diminueQt()

Cours Java 2013 Bersini


Interaction entre objets
Association
Comment le lion connat-il le message envoyer leau?
Pour pouvoir envoyer un message leau, il faut que le lion connaisse
prcisment linterface de leau
La classe lion doit pour cela connatre la classe eau
Cette connaissance sobtient par ltablissement dune communication
entre les deux classes
De tels liens peuvent tre
Circonstanciels et passagers Dpendance
(le lien ne se matrialise que dans une mthode)
Persistants Association
On distingue 3 types de liens dassociation, du + faible au + fort:
Association simple (il y a envoi de messages entre les classes)
Agrgation faible (une classe possde un attribut de lautre type)
Agrgation forte = Composition (lagrg nexiste pas sans son contenant)

Cours Java 2013 Bersini


Interaction entre objets
Association
L association entre classes
Personne Socit
Travaille pour

Fuit
Proie Chasse
Prdateur

Multiplicit des associations

Personne Socit
Employ 0..1

0..* Employeur

Cours Java 2013 Bersini


Interaction entre objets
Association
Exemple:
class Musicien {
private List<Instrument> mesInstruments = new
List<Instrument>();
public Musicien() {}
public void addInstrument(Instrument unInstrument) {
mesInstruments.add(unInstrument);
unInstrument.setMusicien(this);
}
}
class Instrument {
private Musicien monMusicien;
public Instrument() {}
public void setMusicien(Musicien monMusicien) {
this.monMusicien = monMusicien;
}
}

Cours Java 2013 Bersini


Interaction entre objets
Association
Deux types dassociation particuliers:
Lagrgation faible
Lobjet agrgeant contient une ou plusieurs instances de la classe agrge
Lagrgation forte ou Composition
Lobjet compos est cr dans la classe composite et est dtruit si la lobjet
composite est dtruit
Agrgation faible
Conducteur Voiture
1 Moteur Composition
1
1 1

1
1
n 1
Cylindre Carburateur

Cours Java 2013 Bersini


Interaction entre objets
Association
Une classe peut tre associe elle-mme: Auto-association

Subordonn
Salari *

Chef 1
diriger

Lassociation peut tre unidirectionnelle


(les messages ne sont envoys que dune classe vers lautre)

Consulte
Thermostat tempr.
Thermomtre

Cours Java 2013 Bersini


Modliser les classes avec des diagrammes UML
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) Nom Classe
Les attributs scrivent: Attributs

-/+/# nomVariable : Type Mthodes()

Les mthodes scrivent:


-/+/# nomMethode(Type des arguments) : Type du retour ou void

Cours Java 2013 Bersini


Modliser les classes avec des diagrammes UML
Diagramme de classes
Exemple

Joueur

-nom: int
-numero: int
-position: int

+tapeLaBalle: void
+seDeplace: void

Cours Java 2013 Bersini


Modliser les classes avec des diagrammes UML
Reprsenter les relations entre classes
Les relations dhritage sont reprsentes par:

A B signifie que la classe A hrite de la classe B

Lassociation est reprsente par:

A B signifie que la classe A envoie des messages


la classe B grce ses attributs de type B

Lagrgation faible est reprsente par:

A B signifie que la classe A a pour caractristique


un ou plusieurs attributs de type 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 o ils sont crs

Cours Java 2013 Bersini


Exercices
Comptes en banque
Crer une classe Personne avec quelques attributs, mthodes et
constructeurs
Instancier la classe Personne en tant quattribut de la classe
CompteEnBanque
Faites en sorte que le CompteEnBanque, en saffichant lcran,
indique le nom de son titulaire
Une personne peut possder plusieurs compte en banque
Noubliez pas Faites dabord un diagramme de classes!
Dfinissez en particulier les 3 mthodes suivantes dans la classe
Personne:
Une mthode getSoldeTotal(): double qui renverra le solde cumul de tous les comptes de la
personne
Une mthode afficheToi() qui affichera lcran les caractristiques de la personne dont le
nombre de compte quelle possde ainsi que le solde total de ses comptes et puis listera tous
ses comptes
Ajouter une mthode ouvrirCompte(): void dans la classe Personne qui attend un compte
en banque en paramtre et le stocke dans son tableau

Cours Java 2013 Bersini


Interaction entre objets
Association
Lassociation se matrialise donc par la dclaration dobjets dun
certain type en tant que variables membres dune autre classe
Ce faisant, il en rsulte un nouveau type de variable, propre aux
langages OO, et diffrent des variables primitives que lon
manipule traditionnellement en informatique
De fait, au lieu de simples variables numrique, boolennes ou
textuelles, nous pouvons aussi bien dclarer et manipuler des
variables objet comme un chien, une voiture, un client, ou encore
un compte en banque
On appelle ces variables variables de rfrence par opposition
aux variables primitives
Leur caractristique principale est quelles nont pas pour valeur
lobjet quelle dsigne, mais seulement la rfrence de celui-ci, cest-
-dire ladresse laquelle lobjet quelles dsignent se trouve dans la
mmoire du programme On parle de pointeurs (implicites)

Cours Java 2013 Bersini


Interaction entre objets
Variables de rfrence

Mmoire des rfrents Mmoire des valeurs Mmoire des objets

int unNombre 10

double unNombreDecimal 27.33

boolean unBoolen true

Chien monChien ab123d

Chien leChienQueTuAsVu ab123d

Voiture uneVoitureDeCourse e4f5a6

Voiture maVoiture d12e45

Cours Java 2013 Bersini


Interaction entre objets
Variables de rfrence
Il ny a dsormais plus de
Assignation dun type de rfrence rfrence vers lancien
Point start , il sera donc
Point start=new Point(4,3); dtruit par le Garbage
Point end=new Point(23,32); Collector

Point p=end;
p.x=12;
x 4
start=p; start 02caf4
45fe67
y 3

x 23 12
end 45fe67
y 32

p 45fe67

Cours Java 2013 Bersini


Exercices

Analyser la classe Point


Que se passe-t-il lexcution du programme?
Excuter le programme pour vrifier

Cours Java 2013 Bersini


Interaction entre objets
Variables de rfrence
Java est un langage dit fortement typ :
Toute variable doit tre dclare
Ds sa dclaration, une variable se voit attribuer un type donn
Une variable ne peut jamais changer de type
Le type de donnes prcise
les valeurs que la variable peut contenir ou le type dobjet quelle peut
dsigner (une variable de type Chat ne peut pas dsigner un objet de
type Chien
les oprations que lon peut raliser dessus
Sil sagit dune variable primitive, uniquement les opration
arithmtiques ou binaires correspondantes
Sil sagit dune variable de rfrence, uniquement les mthodes
dfinies dans la classe correspondant au type de la variable

Cours Java 2013 Bersini


Interaction entre objets
Quest-ce quun envoi de message?
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 (plus exactement une copie de cette valeur) et non lobjet
qui est passe en argument

Cours Java 2013 Bersini


Exercices

Comptes en banque
Crer une Classe banque
Transformer la classe banque en classe OO
Lui associer un tableau de comptes et un tableau de clients
Instancier quelques comptes et clients dans son constructeur et les
associer les uns aux autres
Noubliez pas Faites dabord un diagramme de classes!
Toutes les oprations sur les comptes devront se faire obligatoirement au
travers de la classe publique Banque (faade) Les compteEnBanque et
les Personne sont invisible en dehors du package!
Implmentez les mthodes : enregsitrerUnClient, ouvririComptePourClient,
depotSurCompte, retraireDeCompte, virement

Cours Java 2013 Bersini


Exercices

Bonus
Que se passe-t-il dans le cas de plusieurs banques?
Quelle consquence cela-a-t-il sur les identifiants des comptes?
Comment assurer de manire transparente un virement interbancaire ?
Quelles solutions proposez-vous?

Cours Java 2013 Bersini


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
CompteEnBanque
CompteCourant CompteEpargne
CptProfessionnel CptBloqu

Cours Java 2013 Bersini


Hritage
En quoi consiste lhritage?
Ex: Dans lcosystme
La classe Faune regroupe les animaux
La classe Ressource regroupe leau et la plante

Cours Java 2013 Bersini


Hritage
Comment mettre en uvre lhritage?
Pour raliser un hritage en Java, il suffit de le dclarer dans la
dclaration de la classe au moyen de la clause extends
Une sous-classe hrite des variables et des mthodes de ses classes
parentes
Java noffre pas la possibilit dhritage multiple
A la racine de lhritage Java se trouve la classe Object dont
toutes les classes hritent automatiquement
BankAccount
class BankAccount {
int solde
protected int solde;

}
class NormalAccount extends BankAccount {
NormalAccount
public void job(){solde+=1000;}
} job(): void

Cours Java 2013 Bersini


Hritage
Comment mettre en uvre lhritage?
Comme une sous-classe hrite des variables de la classe parent, elle
doit ncessairement les initialiser, donc appeler le constructeur de la
classe parent
Cela doit se faire avant la ralisation de son propre constructeur
Concrtement, cela implique que la premire instruction dans le
constructeur dune sous-classe doit tre lappel au constructeur
parent
Cet appel se fait au moyen du mot-cl super
Si la classe parent possde un constructeur vide, lappel ny est alors
plus obligatoire mais implicite

class Child extends MyClass {


Child(){
super(6); // appel du constructeur parent
}
}

Cours Java 2013 Bersini


Hritage
Comment mettre en uvre lhritage?
Le mot-cl this dsigne toujours lobjet en cours (de cration)

class Employee {
String name,firstname;
Address a;
int age;
Employee(String name,String firstname,Address a,int age){
super(); // Comme le constructeur parent nattend pas
// dargument, cet appel nest pas obligatoire
this.firstname=firstname;
this.name=name;
this.a=a;
this.age=age;
}
Employee(String name,String firstname){
this(name,firstname,null,-1);
}
}

Cours Java 2013 Bersini


Hritage
Comment mettre en uvre lhritage?
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{
int aNumber;
}
class NormalAccount extends BankAccount{
float aNumber;
}

Cours Java 2013 Bersini


Exercices

Cration dune hirarchie de compte


Distinguer les comptes courants et les livrets dpargne
Quelle hirarchie de classes pourrait-on proposer?
Quelles mthodes existeraient dans une sous-classe mais pas dans lautre?
Implmenter cette hirarchie dans le programme

Cours Java 2013 Bersini


Hritage
Comment mettre en uvre lhritage?
Une classe abstraite
Peut contenir ou hriter de mthodes abstraites (des mthodes sans corps)
Peut contenir des attributs
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
En dautres termes, on ne peut jamais faire un new sur une classe
abstraite
En revanche on peut parfaitement crer des variables de types abstraits
La dclaration dune classe abstraite contenant une mthode
abstraite ressemble ceci:
abstract class Animal {
abstract void move();
}

Cours Java 2013 Bersini


Hritage
Comment mettre en uvre lhritage?

Animal
int age Si cette mthode appelle des mthodes
move():void abstraites, alors on parle
eat():void dune classe abstraite template
runAway():void

Cat

Dog move():void
eat():void
runAway():void
move():void
eat():void

Cours Java 2013 Bersini


Hritage
Comment mettre en uvre lhritage?

Mmoire des rfrents Mmoire des valeurs Mmoire des objets

Chien monChien ab123d

Animal lAnimalQueTuAsVu ab123d

Objet ceQuElleVientDeVoirPasser ab123d

Cours Java 2013 Bersini


Hritage
Comment mettre en uvre lhritage?
Une mthode peut aussi tre abstraite
Dans ce cas, elle ne peut pas contenir de corps
(elle aura un ; la place des accolades)
Si une classe comprend une mthode abstraite elle est
obligatoirement abstraite elle-mme
Si une sous-classe hrite dune classe abstraite, elle doit redfinir
toutes les mthodes abstraites de sa classe parent (leur donner un
corps)
Si elle ne le fait pas, elle sera condamne tre abstraite elle-mme

Cours Java 2013 Bersini


Exercices

Cration dune hirarchie de compte


Rendre la mthode afficheToi de la classe CompteEnBanque
Rendre la classe CompteEnBanque abstraite
Quest-ce que cela implique?

Cours Java 2013 Bersini


Exercices Bonus

Ajouter un nouveau type de compte : un super compte


Un super compte permet de grer un ensemble de compte par lot.
Chaque super compte est associs un ensemble de compte en
banque.
Une opration sur un super compte est automatiquement redirige
vers les comptes quil contient.
Exemple : Un dpot de 1000 euros sur un Super compte qui contient
5 compte est ralis par 5 dpot de 250 euros sur les comptes
contenus dans le super compte.
Proposez un diagramme de classe

Cours Java 2013 Bersini


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;

Cours Java 2013 Bersini


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
Cours Java 2013 Bersini
Hritage
Redfinition de mthodes
La redfinition de mthode consiste fournir dans une sous-classe une nouvelle
implmentation dune classe dj dclare dans une classe parent
La redfinition nest pas obligatoire !! Mais elle permet dadapter un comportement et
de le spcifier pour la sous-classe
Pour la raliser, il suffit de crer dans la sous-classe une mthode avec lexacte mme
signature que la mthode originale dans la classe parent
On peut rappeler la version dorigine (de la classe parent) avec le mot-cl super
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)

Cours Java 2013 Bersini


Hritage
Le polymorphisme
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
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

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

Cours Java 2013 Bersini


Hritage
Le polymorphisme
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();
}

Cours Java 2013 Bersini


Exercices

Comptes en banque
Redfinir la mthode afficheToi() dans les classes CompteCourant et
CompteEpargne pour quelle prcise le type rel de lobjet
Redfinir galement la mthode calculInteret() pour quelle crdite le solde
dune prime de fidlit arbitraire sur les comptes pargne mais pas sur les
comptes courants.
Modifier la mthode main de la classe Banque pour quelle cre des
comptes courants et des comptes pargne et non plus de simples
CompteEnBanque
Ordonner dans la mthode main tous les comptes de calculer leurs
intrts et de safficher
Que constatez-vous?

Cours Java 2013 Bersini


Exercices Super Bonus

Peut-on viter de modifier la classe Banque chaque ajout dun


nouveau type de compte en Banque?
Pourquoi cela pose-t-il problme?
Quelle solution lgante pouvez-vous proposer?

Cours Java 2013 Bersini


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 interface GraphicalObject {


public abstract void run(); public void draw(Graphics g);
} }

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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) Oval(int x,int y,int width,int height)
draw(Graphics g):void draw(Graphics g):void
intersects(Object o):boolean intersects(Object o):boolean

Square
Square(int x,int y,int size)

Cours Java 2013 Bersini


Modliser les classes avec des diagrammes UML
Pourquoi la modlisation?
La conception OO est entirement btie 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 tout 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 / Hriage
3. Construire les modles

Cours Java 2013 Bersini


Modliser les classes avec des diagrammes UML
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

Cours Java 2013 Bersini


Modliser les classes avec des diagrammes UML
Reprsenter les relations entre classes
Les relations dhritage sont reprsentes par:

A B signifie que la classe A hrite de la classe B

Lassociation est reprsente par:

A B signifie que la classe A envoie des messages


la classe B grce ses attributs de type B

Lagrgation faible est reprsente par:

A B signifie que la classe A a pour caractristique


un ou plusieurs attributs de type 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 o ils sont crs

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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
Cours Java 2013 Bersini
EXERCICES
Un jeu de rles orient objet
Le programme consiste en un combat jusqu la mort opposant gentils et mchants dans lequel
chacun des personnages se bat tour tour.
Les personnages chacun caractris par un ennemi sont capables de se battre au moyen de
leur arme (caractrise par un nom et une certaine force). Quand larme frappe un ennemi, celui-ci
perd une quantit dnergie quivalente la force de larme. Quand lnergie dun personnage
atteint zro, il meurt.
Mais pour pouvoir frapper leur ennemi, les personnages doivent se trouver au mme endroit que
lui, ce qui suppose, lorsquon leur demande de se battre, quils commencent par sassurer que
leur ennemi est proximit de leur arme. Dans le cas contraire, ils doivent se dplacer vers leur
ennemi en avanant dun pas dans sa direction.
Lorsquils se dplacent, les mchants nont quun objectif: rejoindre leur ennemi le plus vite
possible. En revanche, les gentils moins vellitaires ont la sollicitude naturelle de sefforcer
plutt de rejoindre leur ami afin de lui venir en aide (ou de le venger), moins que leur ennemi
soit plus proche et quil leur soit alors impossible dviter laffrontement avec lui. Auquel cas, les
gentils iront eux aussi au devant de leur ennemi.
Quand un gentil parvient rejoindre son ami (mort ou vif), suivant en cela le clbre adage, il fait
sien lennemi de son ami voire de lami de son ami (si ce dernier est dj mort). Les gentils
conservent ainsi lobsession de secourir leur ami tant quils sont menacs ou non vengs. Quant
aux mchants, ils ne sont satisfaits quune fois leur ennemi mort.
Notons encore que les hros (qui sont des gentils) ont de par leur ruse lavantage sur tous les
autres personnages de pouvoir assner en une fois un certain nombre de coups leur ennemi.
A contrario, les volatiles (qui sont des mchants) ont la caractristique dtre capable de
parcourir la distance qui les spare de leur ennemi en un battement dailes.

Cours Java 2013 Bersini


EXERCICES
Un jeu de rles orient objet
Pour cela:
1. Structurer les classes de base et leurs relations (diagramme de classe) pour
raliser ce jeu de rles.
2. Dvelopper les classes.
3. Crer une classe principale qui crera quelques personnages (gentils,
mchants, hros et volatiles), leur ordonnera de safficher en dbut et en fin
de programme, et de se battre tour de rle (jusqu ce quil ne reste plus
quune sorte de personnages (des gentils ou des mchants).
4. La mthode main instanciera cette classe principale et lancera les hostilits.

Cours Java 2013 Bersini


EXERCICES
Rservations de spectacles
Un programme de gestion des rservations dune salle de spectacle:
vend des rservations pour une reprsentation
(un certain jour une certaine heure)
dun spectacle (caractris au minimum par son auteur, son titre et son type)
des clients, identifis par leurs noms, prnoms, adresses et n de tlphone
qui peuvent effectuer autant de rservations quils le souhaitent.
Si le client est abonn (auquel cas on conserve son anne dinscription):
il bnficie dune priorit sur les rservations
il achte ses places crdit (et ne les paie qu la fin de lanne)

Si le client nest pas abonn:


il paie ses rservations par dbit de son porte-monnaie lectronique

Une fois la rservation enregistre, le programme permet la slection des places


dsires
Une fois le choix des places effectu, un ticket est gnr par place

Cours Java 2013 Bersini


EXERCICES
Rservations de spectacles
Pour cela:
1. Structurer les classes de base et leurs relations (diagramme de classe) pour
permettre la rservation de places par les clients
2. Dvelopper les classes
3. Crer une classe principale dont la mthode main crera quelques clients,
quelques spectacles et reprsentations, passera quelques rservations, en
choisira les places et en effectuera le paiement.

Cours Java 2013 Bersini


Introduction Java

V. Structure des API Java


Survol du chapitre

Introduction
Organisation gnrale des API
Packages
JAVA
JAVAX
ORG

Cours Java 2013 Bersini


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/

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


Introduction Java

VI. 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.

Cours Java 2013 Bersini


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)

Cours Java 2013 Bersini


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.

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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)

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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();
}

Cours Java 2013 Bersini


Interfaces
Comparaison (1/4)
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

Cours Java 2013 Bersini


Interfaces
Comparaison (2/4)
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;
}
}

Cours Java 2013 Bersini


Interfaces
Comparaison (3/4)
Depuis Java 1.5, linterface peut tre gnrique:
import java.util.*;
public class Personne implements Comparable<Personne> {
private String firstName, lastName;

public Personne(String firstName, String lastName) {


this.firstName = firstName;
this.lastName = lastName;
}

public int compareTo(Personne n) {


int lastCmp = lastName.compareTo(n.lastName);
if(lastCmp==0)
lastCmp = firstName.compareTo(n.firstName);
return lastCmp;
}
}

Cours Java 2013 Bersini


Interfaces
Comparaison (4/4)
Les types primitifs contiennent toujours un ordre naturel

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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]

Cours Java 2013 Bersini


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]

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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)

Cours Java 2013 Bersini


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)

Cours Java 2013 Bersini


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)

Cours Java 2013 Bersini


Collections
Cas pratique: les ArrayList (types)
ArrayList:
Une classe prdfinie reprsentant une collection dobjets
(un peu comme les Arrays [])
La taille de cette collection nest pas prdfinie et se modifie dans le temps:
Au dpart la collection est de dimension nulle
Chaque fois quon ajoute un objet dans la collection, le vecteur sagrandit
Chaque fois quon supprime un objet de la collection, le trou est supprim et tous
les autres objets sont dcals vers la gauche
La taille de la collection correspond toujours au nombre dobjet quelle contient
Mthodes pour manipuler une collection:
Crer une collection: ArrayList<Classe> al = new ArrayList<Classe>();
Connatre sa taille: al.size();
Ajouter un objet: al.add(new Classe());
Rcuprer le ime objet: al.get(i);
Pour supprimer le ime objet: al.remove(i);
Pour vider compltement la collection: al.clear();

Cours Java 2013 Bersini


Exercice

Spectacles
Remplacez tous les Array par des ArrayList
Implmentez linterface Comparable au sein de la classe Ticket et afin de
permettre le tri des objets sur base de la rprsentation et du numro de la
place et redfinissez cette fin la mthode compareTo(Object o)
Ordonnez le tri de la collection de tickets dans la mthode main et vrifiez que
lordre des tickets a bien t adapt en les affichant

Cours Java 2013 Bersini


Introduction Java

VII. 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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


Hirarchie des exceptions
On ne peut pas traiter
On doit traiter ces exceptions-ci les Error

Throwable

Exception Error

RunTime Exception IOException AWTError VirtualMachineError

NullPointerException FileNotFoundException OutOfMemoryError

ArithmeticException EOFException

On nest pas oblig de traiter ces exceptions-ci

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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
}

Cours Java 2013 Bersini


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 );
}

Cours Java 2013 Bersini


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 {

Cours Java 2013 Bersini


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);

}

Cours Java 2013 Bersini


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){ }
}
}

Cours Java 2013 Bersini


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

Exception Animal
int age
move():void
eat() throws RuntimeException:void
runAway():void
RuntimeException

Cat Dog

BadFoodException move():void move():void


eat() throws Exception:void eat() throws BadFoodException:void

Cours Java 2013 Bersini


Exercice

Spectacles
Gnrer une exception quelconque et lintercepter dans une mthode
au choix au moyen dun bloc try - catch
Crer une nouvelle exception PlaceDejaPriseException , qui devra
tre lance chaque fois que lutilisateur tente crer un ticket alors que
la place nest plus disponible pour la reprsentation choisie
Grer lexception par renvoi (throws) ou interception (try-catch)

Cours Java 2013 Bersini


Introduction Java

VIII. Permanence des objets


Nous allons dans la suite dcouvrir les 3 mcanismes de
permanence: Stream (fichier de bytes), Srialisation, Base de
donnes relationnelles.
Les solutions ce problme sont encore trs controverses.
Nous sauverons nos comptes en banque de ces trois manires

Cours Java 2013 Bersini


Les Stream
import java.io.*;
public void sauveDonnees(PrintWriter maSortie) { /* crit les donnes sur le fichier */
maSortie.println(toString());
maSortie.println(getVitX());
maSortie.println(getVitY());
maSortie.println(getEnergie());
maSortie.println();
}
public void litLesDonnees(BufferedReader monEntree) { /* lit les donnes du fichier */
try{
String s=null;
monEntree.readLine(); /* saute une ligne */
s = monEntree.readLine(); /* lit une ligne */
I nt vitx = Integer.parseInt(s); /* caste en entier */
s = monEntree.readLine();
int vity = Integer.parseInt(s);
s = monEntree.readLine();
double energie = Double.parseDouble(s); /* caste en double */
setVitesse(vitx, vity);
setEnergie(energie);
monEntree.readLine(); /* saute le type */
} catch (IOException e) {System.out.println(e); }
}
}

Cours Java 2013 Bersini


private FileOutputStream fos; /* la connexion au fichier en criture */
private PrintWriter maSortie; /* afin d'utiliser "println()" */
private FileReader fr; /* la connexion au fichier en lecture de texte */
private BufferedReader monEntree; /* lecture "temporise" */

public Jungle(int largeur, int hauteur) {


BufferedReader monEntree = null;
try {
fr = new FileReader("leFichierPredateur.txt"); /* connexion-fichier en
monEntree = new BufferedReader(fr); /* flux filtr pour la lecture tem
} catch (IOException e) {e.getMessage();}
For (int i=0; i<lesLions.length; i++)
lesLions[i].litLesDonnees(monEntree);
try{
monEntree.close(); /* fermeture du tube */
} catch (Exception e) {System.out.println(e);}
try {
fos = new FileOutputStream("leFichierPredateur.txt"); /* connexion s
} catch (IOException e) {e.getMessage();}
maSortie = new PrintWriter(fos, true); /* flux filtr pour l'criture de ligne de te
for(int i=0; i<lesLions.length; i++)
lesLions[i].sauveDonnees(maSortie);
maSortie.close(); /* fermeture indispensable du tube */
Cours Java 2013 Bersini
Pratique qui sonne faux en OO
Lorganisation en objet est perdue
Les connexions entre objets sont perdues
Srialisation

Cours Java 2013 Bersini


La srialisation

import java.io.*;
public class Predateur extends Faune implements Serializable {
private Proie[] lesProies;
public void sauveDonnees(ObjectOutputStream oos) {
try{
oos.writeObject(this); /* on sauve l'objet */
} catch (IOException e) { System.out.println(e); }
}

public void litLesDonnees(ObjectInputStream ois) {


Predateur unPredateur;
try{ /* on lit l'objet puis on le caste dans la classe adquate */
unPredateur = (Predateur)ois.readObject();
} catch (Exception e) { System.out.println(e); }
}

Cours Java 2013 Bersini


try {
fis = new FileInputStream ("leFichierPredateur.ser");
ois = new ObjectInputStream(fis);
/* on installe un tube lecture d'objets sur le fichier */
} catch (IOException e) {e.getMessage();}
for (int i=0; i<lesAnimaux.length; i++)
lesLions[i].litLesDonnees(ois);
try {
ois.close(); /* on ferme le tube */
} catch (Exception e) {}
try {
fos = new FileOutputStream("leFichierPredateur.ser");
oos = new ObjectOutputStream(fos);
/* on installe un tube criture d'objets sur le fichier */
} catch (IOException e) {e.getMessage();}
for(int i=0; i<lesLions.length; i++)
lesLions[i].sauveDonnees(oos);
try {
oos.close(); /* on ferme le tube */
} catch(Exception ex) { System.out.println(ex.getMessage()); }
}

Cours Java 2013 Bersini


Cest la version la plus simple
Cest aussi celle qui sonne le plus OO
A partir du premier objet, on peut sauvegarder et relire
tous ceux qui lui sont connects srialisation.
Mais le fichier srialis est illisible en dehors de
lexcutable Java. Possibilit rcente de srialiser en
soap.
Bases de donnes relationnelles.

Cours Java 2013 Bersini


Connexion DB

import java.io.*;
import java.sql.*;
public class Predateur extends Faune {
public void litLesDonnees(Connection connexion, int i) {
try {
Statement ordre = connexion.createStatement(); /* tablit la connexion */
String requete = "SELECT * FROM Predateur WHERE IdPredateur =" + i;
/* la requte SQL */
ResultSet resultats= ordre.executeQuery(requete);
/* envoie la requte sur la connexion */
resultats.next(); /* itre le rsultat */
setVitX(resultats.getInt("vitx"));
setVitY(resultats.getInt("vity"));
setEnergie(resultats.getDouble("energie"));
ordre.close();
} catch (Exception e) { System.out.println(e.getMessage()); }
}

Cours Java 2013 Bersini


public void sauveDonnees(Connection connexion, int i) {
try {
Statement ordre = connexion.createStatement();
/* la requte SQL */
String requete = "UPDATE Predateur SET vitx= " + getVitX() + " ,vity= " + getVitY()
+ " ,energie= " + getEnergie() + " WHERE IdPredateur =" + i;
System.out.println("j'execute la requete");
int resultat = ordre.executeUpdate(requete); /* envoie la requte sur la connexion */
if (resultat == 1)
System.out.println("la base de donnees est mise a jour");
else
System.out.println("c'est rate");
ordre.close();
} catch (Exception e) { System.out.println(e.getMessage()); }
}
}

Cours Java 2013 Bersini


import java.io.*;
import java.sql.*;
public class Jungle {
private Connection connexion;

public Jungle(int largeur, int hauteur) {


try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); /* va chercher le pilote adquat */
/* tablit la connexion sur la base */
connexion = DriverManager.getConnection("jdbc:odbc:Ecosysteme");
} catch (Exception se) {System.out.println("Connexion Impossible" + se.getMessage());}
for (int i=0; i<lesAnimaux.length; i++)
lesLions[i].litLesDonnees(connexion,i);

for(int i=0; i<lesLions.length; i++)


lesLions[i].sauveDonnees(connexion, i);
}
}

Cours Java 2013 Bersini


Solutions assez lourdes
Bases sur ODBC
Reste entier le problme du mapping OO/relationnel
SQL, OQL, SQL3
Base de donnes OO ??

Cours Java 2013 Bersini


Introduction Java
IX. Interrogation de bases de donnes: SQL
Interrogation de bases de donnes avec SQL

Quest-ce que SQL?


Les types de requtes
Structure des requtes

Cours Java 2013 Bersini


Interrogation de bases de donnes avec SQL
Quest-ce que SQL?
Structured query language (SQL), ou langage structur de requtes
Un pseudo-langage informatique (de type requte) standard et
normalis
Destin interroger ou manipuler une base de donnes relationnelle
Sous rserve de quelques spcificits, toutes les bases de donnes
relationnelles du march peuvent excuter du code SQL
Les requtes crites en SQL sont donc normalement indpendantes
de la base de donnes laquelle elles sadressent

Cours Java 2013 Bersini


Interrogation de bases de donnes avec SQL
Quest-ce que SQL?
SQL (Langage de requtes structur) est :
un langage de dfinition de donnes
Cration des tables et des relations
un langage de manipulation de donnes
Consultation, insertion, modification de tuples
un langage de protection de donnes
Dfinition des permissions au niveau des utilisateurs
pour les bases de donnes relationnelles.

Cours Java 2013 Bersini


Interrogation de bases de donnes avec SQL
Types de requtes SQL
Requtes slection
SELECT Pour extraire des donnes de la BD

Requtes action
INSERT Pour ajouter des enregistrements dans une table
UPDATE Pour modifier des enregistrements dans une table
DELETE Pour supprimer des enregistrements dans une table

Requtes structurelles (sur les tables elles-mmes)


INSERT TABLE Crer une nouvelle table
ALTER TABLE Modifier une table existante
DROP TABLE Supprimer une table existante
Etc.
Cours Java 2013 Bersini
Interrogation de bases de donnes avec SQL
Structure des requtes > SELECT
Requtes SELECT
Corps obligatoire:
SELECT [colonnes extraire]
FROM [tables dont les colonnes seront extraites]

Options:
WHERE [critres de slection]
ORDER BY [champs sur lesquels trier les enregistrements]

Exemples:
SELECT * FROM livres
SELECT nom, prenom, adresse FROM clients WHERE ville=Paris

Cours Java 2013 Bersini


Interrogation de bases de donnes avec SQL
Structure des requtes > SELECT

SELECT Modele, Serie FROM VOITURES

SELECT DISTINCT Modele, Serie FROM VOITURES

Cours Java 2013 Bersini


Interrogation de bases de donnes avec SQL
Structure des requtes > SELECT

SELECT * FROM OCCAZ


WHERE (Compteur < 100000)

SELECT * FROM OCCAZ


WHERE (Compteur <= 100000) AND (Compteur >=
30000)

Cours Java 2013 Bersini


Interrogation de bases de donnes avec SQL
Structure des requtes > SELECT
Lorsqu'un champ n'est pas renseign, le SGBD lui attribue une valeur
spciale que l'on note NULL. La recherche de cette valeur ne peut pas
se faire l'aide des oprateurs standards, il faut utiliser les prdicats
IS NULL ou bien IS NOT NULL.

SELECT * FROM OCCAZ


WHERE Compteur IS NULL

Cours Java 2013 Bersini


Interrogation de bases de donnes avec SQL
Structure des requtes > SELECT
Trier les donnes:
La clause ORDER BY est suivie des mots cls ASC ou DESC, qui prcisent
respectivement si le tri se fait de manire croissante (par dfaut) ou
dcroissante.
Exemple:
SELECT * FROM VOITURE ORDER BY Marque ASC, Compteur DESC

Cours Java 2013 Bersini


Interrogation de bases de donnes avec SQL
Structure des requtes
Requtes INSERT
Corps obligatoire:
INSERT INTO [table](champ1, champ2, champ3, )
VALUES(valeur1, valeur2, valeur3, etc.)

Exemples:
INSERT INTO clients(nom, prenom, adresse, ville)
VALUES(Bersini, Hugues, Avenue Roosevelt 50, Bruxelles)
INSERT INTO livres(titre, auteur, anneeDeParution)
VALUES ("Lorient objet", "Bersini", 2004)
INSERT INTO livres(auteur, titre)
VALUES ("Bersini", "Lorient objet")

Cours Java 2013 Bersini


Interrogation de bases de donnes avec SQL
Structure des requtes
Requtes UPDATE
Corps obligatoire:
UPDATE [table]
SET champ1 = newValeur1, champ2 = newValeur2, etc.

Options:
WHERE [critres de slection]

Exemples:
UPDATE clients SET ville = Brussels WHERE ville = Bruxelles
UPDATE livres SET bestSeller = Oui WHERE auteur = Bersini

Cours Java 2013 Bersini


Interrogation de bases de donnes avec SQL
Structure des requtes
Requtes DELETE
Corps obligatoire:
DELETE FROM [table]

Options:
WHERE [critres de slection]

Exemples:
DELETE FROM clients
Efface tous les enregistrements de la table!!!
DELETE FROM livres WHERE auteur = Bersini

Cours Java 2013 Bersini


Interrogation de bases de donnes avec SQL
Structure des requtes > Oprateurs conditionnels
Oprateurs logiques Comparateurs arithmtiques
AND =
OR !=
NOT >
Oprateurs arithmtiques: <
+ >=
- <=
* <>
/ !>
% !<
& Comparateurs de chane:
| IN
BETWEEN
LIKE

Cours Java 2013 Bersini


Introduction Java

X. Connecter une application Java une BD: JDBC


Connexion aux bases de donnes en Java

Le dfi
La solution: JDBC
Mise en uvre

Cours Java 2013 Bersini


Connexion aux bases de donnes en Java
Le dfi
Une application informatique a le plus souvent (surtout en
informatique dentreprise) besoin dinteragir avec une ou
plusieurs bases de donnes
Exemples:
Lapplication qui permet un agent bancaire deffectuer des oprations
sur le compte de ses clients doit obtenir et enregistrer des donnes sur
la base de donnes de la banque
Les terminaux Bancontact ou Visa doivent envoyer une opration la
banque de donnes des comptes ou cartes et obtenir une confirmation
Un call center dans un service la clientle doit pouvoir obtenir et
modifier les donnes des clients, de leurs factures, etc.

Cours Java 2013 Bersini


Connexion aux bases de donnes en Java
Le dfi
Or les bases de donnes sont en gnral centralises et
servent un grand nombre de clients
Comment stocker linformation un seul endroit et permettre de
multiples utilisateurs dy accder en mme temps et de diffrentes
faons?

Les bases de donnes se contentent donc en gnral de


stocker linformation, ventuellement de la valider, mais
pas de la traiter
Et elles se mettent la disposition des applications pour
leur fournir linformation demande ou pour stocker leurs
modifications (en SQL)
Cours Java 2013 Bersini
Connexion aux bases de donnes en Java
Le dfi
Comment une application Java peut-elle interagir avec
une base de donnes externe (par exemple MS Access)?
Logiquement, en SQL

Mais comment permettre lapplication de se connecter


la base de donnes, de lui envoyer des requtes et den
rcuprer le rsultat?
En rendant la base de donnes Access disponible pour interrogation
par des applications externes (cf. procdure ODBC)
Et en tablissant une connexion entre lapplication et cette source
ODBC

Cours Java 2013 Bersini


Connexion aux bases de donnes en Java
Le dfi

Requtes
Base de
Donnes Rsultats

Cours Java 2013 Bersini


Connexion aux bases de donnes en Java
La solution: JDBC
Dans le monde Windows, il existe une plateforme baptise ODBC
ODBC = Open DataBase Connectivity
Il sagit dune interface standard permettant de mettre des bases de
donnes disposition des applications Windows
Chaque PC quip de Windows possde une liste des DataSources
ODBC qui pointent chacune vers une base de donnes
ODBC connat chaque type de base de donnes Windows et sait
dans quel langage lui parler
Autrement dit, il existe un pilote ODBC pour la plupart des bases de
donnes qui tournent sous Windows.
Microsoft Access en fait partie
Pour quun programme puisse accder une base de donnes, il
suffit donc que celle-ci soit dclare dans la liste des sources ODBC

Cours Java 2013 Bersini


PROJET

Dclarez votre base de donnes MS Access comme une source de


donnes ODBC
1. Ouvrez le menu Dmarrer puis Data Sources ODBC
2. Cliquez sur Ajouter
3. Choisissez Microsoft Access Driver (*.mdb) dans la liste
4. Cliquez sur Finish
5. Donnez un nom (simple) votre source de donnes
6. Cliquez sur Select
7. Reprez et slectionnez votre base de donnes et cliquez sur OK
(Notez que votre BD pourrait trs bien se trouver sur un autre ordinateur)
8. Cliquez sur OK pour fermer le panneau de contrle ODBC
Votre base de donnes MS Access est maintenant reconnue comme
une source accessible via ODBC

Cours Java 2013 Bersini


Connexion aux bases de donnes en Java
La solution: JDBC
Le problme: Java nest pas une plateforme Windows
Java nest donc pas li en soi ODBC
Les applications Java doivent en effet pouvoir dialoguer avec nimporte quelle
base de donnes
Cest pourquoi Java possde son propre systme de communication
avec les bases de donnes: JDBC (Java DataBase Connectivity)
JDBC est un ensemble de classes prdfinies pour chaque type de BD
A linstar dODBC, JDBC peut dialoguer avec un grand nombre de
bases de donnes diffrentes (mais pas Access en tant que tel)
En particulier, JDBC comprend un pilote qui lui permet de dialoguer
avec ODBC
Pour accder une base de donnes ODBC, un programme Java doit
donc tablir une connexion vers ODBC en prcisant la DataSource
dont il a besoin
On parle en gnral dun Pont JDBC-ODBC

Cours Java 2013 Bersini


Connexion aux bases de donnes en Java
La solution: JDBC

Cours Java 2013 Bersini


Connexion aux bases de donnes en Java
La solution: JDBC

Requtes

Pilote Pilote Application


Base de ODBC JDBC Java
Donnes

Rsultats

Cours Java 2013 Bersini


Connexion aux bases de donnes en Java
Mise en uvre de JDBC
Pour tablir une connexion JDBC, quelques lignes de code suffisent:
public static final String jdbcdriver = "sun.jdbc.odbc.JdbcOdbcDriver";
public static final String database = "jdbc:odbc:NomDeLaDataSourceODBC";
private Connection conn;
try{
Class.forName(jdbcdriver);
conn = DriverManager.getConnection(database);
} catch(Exception e) {
e.printStackTrace();
}
Pour envoyer des requtes la BD une fois la connexion tablie, il
faut crer un Statement ;
Statement stmt = conn.createStatement();

Cours Java 2013 Bersini


Connexion aux bases de donnes en Java
Mise en uvre de JDBC
Une fois le Statement cr, on peut alors lui envoyer les
requtes SQL sous la forme de chanes de caractres:
String requete = "DELETE * FROM clients";
stmt.executeUpdate(requete);

Mais dans le cas de requtes SELECT, il faut rcuprer le


rsultat
Les donnes issues de la requte sont rassembles dans
un jeu de rsultats, appel ResultSet :
String requete = "SELECT * FROM client"
ResultSet rs = stmt.executeQuery(requete);

Cours Java 2013 Bersini


Connexion aux bases de donnes en Java
Mise en uvre de JDBC
On peut alors accder aux enregistrements renvoys un un en
demandant chaque fois au ResultSet de nous renvoyer la ligne
suivante:
while(rs.next()){
int c_id = rs.getInt("client_id");
String c_n = rs.getString("client_name");
String c_fn = rs.getString("client_firstname");
String c_ad = rs.getString("client_address");
String c_ph = rs.getString("client_phone");
int c_ab = rs.getInt("client_abonne");
double c_c = rs.getDouble("client_credit");
int c_am = rs.getInt("client_anneemembre");
}
Notez que lon rcupre la valeur de chaque champ en utilisant la
mthode correspondant au type de donnes du champ
(getInt, getString, getDate, etc.)
Cours Java 2013 Bersini
Connexion aux bases de donnes en Java
Mise en uvre de JDBC
Ce faisant, on a alors rcupr les donnes correspondant chaque
enregistrement
Il nous reste donc utiliser ces donnes pour crer un objet du type
souhait:
Client c = new Client(c_id,c_n,c_fn,c_ad,c_ph,c_c,c_am);
Nous pouvons alors stocker ces clients un un dans lArrayList:
clients.add(c); // A supposer que nous ayons une variable membre clients de
// type ArrayList<Client> dans la classe
}
Il faut enfin toujours veiller fermer les connexions:
rs.close();
stmt.close();
conn.close();

Cours Java 2013 Bersini


Introduction Java

XI. Multithreading
Survol du chapitre

Introduction
Dfinition
Raison dtre

Cration de Thread
Par implmentation
Par hritage

Gestion de Thread
Mthodes de gestion
Diagrammes dtat

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


Gestion des Thread
Mthodes de gestion
t.start()
Appeler cette mthode place le thread dans ltat runnable
Eligible par le CPU
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 dattente )

Cours Java 2013 Bersini


Exercice:

Faites dplacer les balles


Cette fois un Thread va sen occuper
La classe AireDeJeu contient lance un Thread
La classe AireDeJeu implements Runnable et donc possede une methode run
Dans la mthode run, on dplace les balles en boule
(pas oublier dappeler le repaint())

Cours Java 2013 Bersini


Introduction Java

XII. Interfaces graphiques Java: SWING et AWT


Interfaces graphiques Java: SWING et AWT

Quest-ce quune interface graphique (GUI)?


Le paradigme Model-View-Control (MVC)
Laffichage et ses composants (SWING)
Structure de lAPI SWING
Composants et conteneurs
Composants et conteneurs utiles
Exemples
Constructeurs
Mthodes utiles
La gestion des vnements (AWT)
Principes
Mise en uvre
Connecter linterface graphique lapplication OO et la BD

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Quest-ce quune interface graphique?
Une interface graphique ou GUI (Graphical User Interface) est:
Une couche applicative destine fournir aux utilisateurs dordinateurs un
moyen attractif et facile pour interagir avec un programme
Linterface dun programme qui profite des capacits graphiques dun
ordinateur pour le rendre plus facile dutilisation. Des interfaces graphiques
bien conues vitent lutilisateur davoir apprendre de complexes langages
de commandes.
Un ensemble dcrans de prsentations qui utilisent des lments graphiques
(tels boutons et icnes) pour rendre un programme plus facile dutilisation.

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Quest-ce quune interface graphique?
Une mme application peut offrir diffrentes interfaces lutilisateur
Une interface graphique stricto sensu qui sexcute sur son ordinateur
Une interface web qui sexcute dans un navigateur Internet
Une interface WAP qui sexcute sur un tlphone
Une interface terminal qui sexcute sur des appareils spcifiques
Des services web qui offrent ses fonctionnalits dautres applications

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Quest-ce quune interface graphique?
Notons que linterface peut:
Etre intgre lapplication (elle forme un tout avec lapplication)
(architecture 2-tiers )

Application

J
Serveur de LOGIQUE G
Bases de
D
APPLICATIVE U
Donnes B
(Modle OO) I
C

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Quest-ce quune interface graphique?
Notons que linterface peut:
Etre indpendante de lapplication (diffrentes interfaces indpendantes
utilisent la mme application sous-jacente) et ne sont que la partie visible
de lapplication (architecture 3-tiers )

Serveur de
Bases de
Serveur
Donnes
dapplication

Clients
Cours Java 2013 Bersini
Interfaces graphiques Java: SWING et AWT
Model-View-Control
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

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Affichage (SWING)
SWING offre trois types dlments graphiques
Les Components (composants ou contenus)
Les Containers (contenants, qui sont eux-mmes des composants)
Les LayoutManagers
Les Components
Constituent diffrents lments de laffichage (boutons, barres de menus, etc.)
Ex: JButton, JLabel, JTextArea, JCheckbox, etc.
Les Containers
Sont destins accueillir des composants
Grent laffichage des composants
Ex: JFrame, JPanel, JScrollPane
Les LayoutManagers
Grent la disposition des composants au sein dun conteneur

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Affichage (SWING)
*
Component

add

1
Container
JButton JLabel 1

1
LayoutManager

JFrame JPanel
BorderLayout FlowLayout

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Affichage (SWING)
JMenu JMenuItem JButton JComboBox
JFrame

JMenuBar

JPanel

Canvas

JPanel

JLabel

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Affichage (SWING)
Exemples de composants:
JTextArea (zone de texte) JCheckBox (case cocher)
Contient une chane de caractres Contient un intitul
JTable (table de donnes) Peut tre slectionne ou non
Contient deux Arrays ([ ]): Peut tre active ou dsactive (on
Les donnes (tableau peut ou non la cocher)
multidimensionnel dobjets) JLabel (tiquette/intitul)
Les intituls des colonnes (vecteur
Contient un intitul
de chanes de caractres)
Gre automatiquement laffichage des JComboBox (liste droulante)
donnes en colonnes Contient une liste dlments sous
Permet le dplacement de colonnes forme de chanes de caractres
Permet ou interdit la modification des Contient un entier reprsentant le
donnes de la table numro de la ligne slectionne

JButton (bouton)
Contient un intitul

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Affichage (SWING)
Exemples de conteneurs
JFrame
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
Peut contenir une barre de menu (JMenuBar)
JPanel
Peut tre lui-mme intgr dans un autre conteneur (par ex. un JFrame)
Peut contenir lui-mme autant de composants que ncessaire
Plusieurs moyens dy disposer les composants
JScrollPane
Peut tre lui-mme intgr dans un autre conteneur (par ex. un JFrame)
Offre une vue sur un seul composant ou conteneur (JTable, JPanel, etc.)
Permet de changer le contenu en cours de route
Offre automatiquement des barres de dfilement si ncessaire

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Affichage (SWING)
Barres et lments de menus
JMenuBar
Une barre de menu (une seule par JFrame)
Contient diffrents menus (JMenu)
JMenu
Reprsente un menu dans une barre de menu
Contient diffrents lments (JMenuItem)
Contient un intitul
JMenuItem
Reprsente un lment de menu
Contient un intitul
Peut tre associ des raccourcis clavier

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Affichage (SWING)
Constructeurs des composants:
JTextArea (zone de texte)
new JTextArea(String texteAAfficher);
JTable (table de donnes)
new JTable(Object[ ][ ] donnees, String[ ] intitules);
Il faut un tableau de chanes de caractres contenant les intituls des colonnes
Et une matrice dobjets dont chaque range est une ligne du tableau
JButton (bouton)
new JButton(String intitule);
JCheckBox (case cocher)
new JCheckBox(String intitule);
JLabel (tiquette/intitul)
new JLabel(String intitule);
JComboBox (liste droulante)
new JComboBox();

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Affichage (SWING)
Constructeurs des conteneurs Constructeurs des menus
JFrame JMenuBar
new JFrame(); new JMenuBar();
JPanel JMenu
new JPanel(); new JMenu(String intitule);
JScrollPane JMenuItem
new JScrollPane(); new JMenuItem(String intitule);

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Affichage (SWING)
Mthodes utiles (composants):
JTextArea (zone de texte)
setText(String) Modifier le contenu
JTable (table de donnes)
setSelectionMode(int) Dfinir le mode de slection (ex: une ligne la fois)
getSelectionModel() Rcuprer le modle de slection dfini
JButton (bouton)
setText(String) Modifier lintitul
JCheckBox (case cocher)
setText(String) Modifier lintitul
setEnabled(boolean) Dterminer si la case est active ou pas (peut tre coche ou non)
setSelected(boolean) Dterminer si la case est coche ou pas
isEnabled() Renvoie true si la case est active et false si elle ne lest pas
isSelected() Renvoie true si la case est coche et false si elle ne lest pas
JLabel (tiquette/intitul)
setText(String) Modifie lintitul
JComboBox (liste droulante)
addItem(String) Ajouter un lment (chane de caractres) dans la liste
getSelectedIndex() Renvoie le numro de la ligne slectionne

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Affichage (SWING)
Mthodes utiles (conteneurs)
JFrame
setSize(int width, int height) Fixe les dimensions de la fentre
setTitle(String titre) Dfinit le titre de la fentre NORTH
setJMenuBar(JMenuBar) Installe la barre de menu
add(Component c) Intgre le composant indiqu WEST CENTER EAST
setVisible(true) Fait apparatre la fentre lcran
JPanel SOUTH
setLayout(new BorderLayout()) Divise le conteneur en 5 zones: N, S, E, W, C
et permet dajouter un composant diffrent dans chaque zone
(il nest pas obligatoire dutiliser les 5 zones)
add(Component c, "North") Ajoute le composant c au Nord
setLayout(new GridLayout(x,y)) Divise le conteneur en x lignes et y colonnes
Les composants ajouts viennent remplir la grille de gauche droite et de ht en bas
add(Component c) Ajoute le composant c dans la premire case disponible
JScrollPane
setViewportView(Component c) Affiche le composant/conteneur indiqu

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Affichage (SWING)
Mthodes utiles (menus)
JMenuBar
add(JMenu) Ajoute un menu dans la barre (de gauche droite)
JMenu
add(JMenuItem) Ajoute un lment dans le menu (de haut en bas)
addSeparator() Ajoute une ligne de sparation dans le menu
JMenuItem
setText(String) Modifie lintitul de llment du menu

Cours Java 2013 Bersini


Interfaces graphiques Java: SWING et AWT
Affichage (SWING)
Comment utiliser les composants et conteneurs prdfinis?
Par hritage
Crer une nouvelle classe qui hrite de la classe prdfinie qui nous intresse
Permet de crer sa propre fentre, sa propre barre de menus, etc.
Gnralement ce quon fait avec les conteneurs
Plus rarement avec les composants
Exemple:
public Fenetre extends JFrame{ }
Par association
Consiste simplement dclarer un objet du type du composant prdfini comme
variable membre dans une classe
On se sert alors des mthodes du composant pour dfinir les proprits du
composant qui nous intressent (intitul, contenu, tat, etc)
Exemple
public ZonePrincipale extends JPanel{
JLabel l = new JLabel("Bonjour");
} Cours Java 2013 Bersini
Exercice

Une premire application graphique


Crer une classe Fenetre hritant de JFrame
Construire la fentre dapplication en ajoutant:
Au Nord: un JPanel
Contenant lui-mme trois JButton
A placer dans un vecteur

Au Centre: un Canvas
Servira daire de jeu qui soccupera de tous les objets du jeu (balle, monstre, avion, princesse,)

Au Sud: un JPanel
Contenant lui-mme deux JLabel

Crer une classe principale contenant uniquement le main:


public static void main(String args[]) {
new Fenetre();
}

Cours Java 2013 Bersini


PROJET

Fentre dapplication (JFrame)

Barre de menus (JMenuBar)

Titre (JLabel)

Zone de dfilement (JScrollPane)


pouvant contenir une table
(JTable) ou un formulaire (JPanel)

Barre dtat (JLabel)

Cours Java 2013 Bersini


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)

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


Gestion dvnements
Mcanismes et structure (4/4)
XXXListener

Component
XXXAdapter
1

addXXXListener
contrle
* MyXXXListener

J VM
Exemples :

XXXEvent public void actionPerformed (ActionEvent e)


OS public void windowClosing (WindowEvent e)
Contrle public void mouseClicked (MouseEvent e)
Souris Clavier

Cours Java 2013 Bersini


Gestion dvnements
Mise en uvre
Par implmentation de linterface
Usage
public class MaClasse implements ActionListener
Ensuite, il faut redfinir la ou les mthode(s) prdfinie(s)
Avantages:
Meilleur sur le plan orient objet
La classe peut hriter dune autre classe
Consistance

Cours Java 2013 Bersini


Gestion dvnements
Mise en uvre Evnements de fentre
class Fenetre extends JFrame implements WindowListener
{
public Fenetre()
{
addWindowListener(this);
}

public void windowClosed(WindowEvent e) {}


public void windowIconified(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
public void windowClosing(WindowEvent e) {System.exit(0);}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}

Cours Java 2013 Bersini


Gestion dvnements
Mise en uvre Slection de menus et boutons
class GereMenus implements ActionListener
{
public void actionPerformed(ActionEvent e) {
// Que faire quand une action est dclenche?
}
}

Cours Java 2013 Bersini


Gestion dvnements
Mise en uvre Slection dans une JTable
class GereTables implements ListSelectionListener
{
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting())
return;
ListSelectionModel lsm;
lsm = (ListSelectionModel) e.getSource();
if(lsm.isSelectionEmpty()){
// Que fait si aucune ligne na t slectionne?
} else {
// La ligne slectionne est :
int i = lsm.getMinSelectionIndex();
// Que faire avec cette information ?
}
}
}

Cours Java 2013 Bersini


Gestion dvnements
Mise en uvre Associer la source et lcouteur
En implmentant ce qui prcde dans la classe concerne, on rend
alors la classe en question capable de prendre en charge les
vnements du type correspondant
Il reste associer chaque source potentielle dvnements (la fentre
principale, chaque lment de menu, chaque bouton, chaque liste
droulante et chaque table) son objet couteur, instance de la
classe correspondante
Cela se fait en gnral pendant ou juste aprs la construction de
lobjet source au moyen dune mthode
addXXXXXXListener(objetEcouteur)

Cours Java 2013 Bersini


Gestion dvnements
Mise en uvre Associer la source et lcouteur
Pour informer la fentre quelle est son propre couteur:
this.addWindowListener(this);
Pour associer un lment de menu son couteur :
clients = new JMenuItem("Liste des clients");
clients.addActionListener(new GereMenus());
Pour associer un bouton son couteur :
bouton = new JButton("Sauver la rservation");
bouton.addActionListener(new GereMenus());
Pour associer une table son couteur :
table = new JTable(dataTable,headersTable);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.getSelectionModel().addListSelectionListener(new GereTables());

Cours Java 2013 Bersini


PROJET
3 types dvnements (ou actions) doivent tre traits :
La fermeture de la fentre (pour quelle entrane la fin du programme)
Les slections dans les menus et les clics sur les boutons
(pour dclencher les actions requises)
La slection dune ligne dans la table (pour savoir quelle rservation traiter)

Classe Source Evnements Interface Classe Ecouteur


FenetrePrincipale Fermeture de la fentre WindowListener FenetrePrincipale
JMenuItem Choix dans un menu ActionListener GereMenus
JButton Clic sur un bouton ActionListener GereMenus
JTable Slection dune ligne ListSelectionListener GereTables

Il faut donc :
Rendre la classe FenetrePrincipale capable de se grer elle-mme
Crer 2 classes dcouteurs spcifiques : GereMenus, GereTables (code fourni)
Instancier ces 2 classes
Associer les couteurs la source dvnements quils doivent grer

Cours Java 2013 Bersini


Connecter linterface graphique lapplication OO

Pour relier linterface graphique lapplication OO, il suffit den


utiliser des objets dans les classes graphiques
Tout dpend naturellement des fonctionnalits requises dans
linterface graphique et donc des besoins de celle-ci en matire
dobjets
Par exemple, pour afficher les clients, linterface graphique aura
besoin dune collection contenant les objets clients gnrs au
dpart de la base de donnes
Linterface graphique devra donc pouvoir obtenir ces objets, ce qui
suppose quelle puisse interagir avec la base de donnes

Cours Java 2013 Bersini


PROJET

Maintenant que la partie visible de votre application est en place et


quelle est capable de prendre en charge les diffrentes actions de
lutilisateur, le moment est venu dincorporer votre application
prcdente (gestion des rservations) lintrieur de votre interface
graphique
Autrement dit, il va falloir connecter votre interface graphique
vos objets clients, spectacles, reprsentations, rservations et tickets
afin dextraire les donnes ncessaires laffichage des tableaux / formulaires
et de pouvoir envoyer les nouvelles informations vers la base de donnes

Cours Java 2013 Bersini


PROJET
Affichage des tableaux de donnes (clients, rservations, etc.)
Rcuprer les donnes de la BD sous forme dobjets. Autrement dit, interroger lobjet
de type DataAccessObject pour quil renvoie la collection des clients ou des
rservations, etc :
ArrayList data = dao.getClients();
Demander chacun des objets (clients, rservations, etc.) de renvoyer ses informations
de faon structure, sous forme dun vecteur [ ] . Autrement dit, il faudra boucler
sur lArrayList renvoye par le DataAccessObject et demander chaque lment de
lArrayList de renvoyer ses donnes pour les stocker dans un Array dObjects
for(int i=0;i<data.size();i++){
dataTable[i] = ((DataObject) data.get(i)).getDataArray();
}
Notez que cela suppose que tous vos objets (clients, spectacles, etc.) possdent un
message (mthode) de type :
public Object[] getDataArray(){...}
Crer la table en lui envoyant ces donnes
table = new JTable(dataTable,headersTable);
headersTable devrait dsigner un tableau de String comprenant les intituls des
diffrentes colonnes.
Afficher la table lintrieur de la zone de dfilement
zoneDefilement.setViewportView(table)

Cours Java 2013 Bersini


PROJET
Crer/modifier des donnes dans la BD
nouvelle rservation, paiement, choix de places
Dans votre classe ZonePrincipale, une mthode correspondra
chaque type dopration possible et sera appele lorsque le bouton
denregistrement du formulaire sera activ
Ces mthodes rcupreront les informations du formulaire (valeurs
choisies dans les listes, cases coches, etc.) et les vrifieront (sont-
elles valables, reste-t-il suffisamment de places disponibles pour la
reprsentation choisie, etc.)
Enfin, la mthode enverra un message la classe DataAccessObjects
pour appeler (comme le faisait votre main avant la cration de
linterface graphique) la mthode correspondant lopration, cette
dernire ayant pour mission deffectuer les modifications dans la base
de donnes.

Cours Java 2013 Bersini


Introduction Java

Annexe - Une brve introduction lUML


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 / Hriage
3. Construire les modles

Cours Java 2013 Bersini


Les concepts de lOO
La modlisation devient la rfrence
Creating the UML

UML 1.3
OMG Acceptance, Nov 1997
Final submission to OMG, Sep 97 UML 1.1
public First submission to OMG, Jan 97
feedback
UML partners UML 1.0

Web - June 96 UML 0.9

OOPSLA 95 Unified Method 0.8

Other methods Booch method OMT OOSE

30

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


Les concepts de lOO
La modlisation devient la rfrence

Design View Implementation View

Classes, interfaces,
collaborations Components
Use cases

Use Case View

Process View Deployment View

Active classes Nodes

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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
La Banque
un virement
Grer le
distributeur
Le client
Retirer
de l argent
Effectuer la
Un employ
Consulter maintenance

un compte

Cours Java 2013 Bersini


Les concepts de lOO
La modlisation devient la rfrence
Exemple de diagramme de cas dutilisation dtaill

paul : Client le systme

Insrer carte

Vrifier carte
Demander code

Entrer code 1234

Vrifier code
Message d erreur

Demander code

Entrer code 6622

...
Cours Java 2013 Bersini
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) Nom Classe
Les attributs scrivent: Attributs

+/-/# nomVariable : Type Mthodes()

Les mthodes scrivent:


+/-/# nomMethode(Type des arguments) : Type du retour ou void

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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 1
withdraw(int):int Bank
addALoan(Loan l):void
payYourLoans():void
calculInterest():int
isReimbursed(int):void Loan
- amount : int
- mensuality : int

Loan(int,int,BankAccount)
reimbourse():void
NormalAccount SparingAccount
calculInterest():int calculInterest():int

Cours Java 2013 Bersini


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 ()

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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

Cours Java 2013 Bersini


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
Eiffel
Le plus pur(itain) des langages OO
Conu par Bertrand Meyer
Autres
PowerBuilder, Delphi, Smalltalk (I.A.), etc.

Cours Java 2013 Bersini


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
Cours Java 2013 Bersini