Você está na página 1de 133

COURS DE PROGRAMMATION

ORIENTE OBJET
JAVA

Mr SYLLA. Ingenieur en informatique

Plan du Cours

Chapitre 1 : Introduction Java


Chapitre 2 : Techniques de base du langage
Chapitre 3 : Les types primitifs
Chapitre 4 : Les structures de contrle
Chapitre 5 : Programmation Oriente Objet
Chapitre 6 : Les tableaux
Chapitre 7: Les chanes de caractres

Mr SYLLA. Ingenieur en informatique

Plan du cours (fin)

Chapitre 8 : Lhritage
Chapitre 9 : Gestion des exceptions
Chapitre 10 : Threads
Chapitre 11: Les Swing GUI
Chapitre 12 : Entres Sorties
Chapitre 13: Collections et algorithmes
Chapitre 14 : Applets
Chapitre 15 : JDBC
Mr SYLLA. Ingenieur en informatique
3

Chapitre 1

Introduction Java

Historique :Origines de Java


1990
Internet trs peu connu, World Wide Web inexistant .
boom des PCs (puissance)
Projet Oak de SUN Microsystems
Langage pour la communication des appareils lectroniques .
1993
mars : le NCSA lance MOSAIC, le premier navigateur internet
(protocole http, langage html), le web dcolle...
t : Oak change dorientation et sadapte la technologie internet
1995
mai 1995 : projet HotJava,, navigateur WEB, crit par SUN en Java .

Mr SYLLA. Ingenieur en informatique

Les gnrations des langages de programmation

Plusieurs langages de programmation ont vu le jour :


Langage machine
Spcifique aux UAL
Langage assembleur
Langage algorithmique

C, pascal,cobol,

Langage orient objet

C++, smalltalk,
java
-PORTABILIT
- FIABILIT

EVOLUTIBITE
REUTISABILITE

Mr SYLLA. Ingenieur en informatique

Java : un langage objet


Imprgn du C++ mais amliorant ses insuffisances
-> gestion automatique de la mmoire (Garbage Collector)
-> facilit de stockage des fichiers sur disque (srialisation)
Une gigantesque API (Application Programming Interface)
- une librairie de classes trs importante (interface graphique,
rseau, web, base de donnes, )
- portabilit sans mesure
- langage de plus en plus utilis et voluant rapidement.

Mr SYLLA. Ingenieur en informatique

Programme interprt et compil


Interprtation

Compilation

Programme crit en X

Programme crit en X

Interprteur de X

Compilateur de X
en langage machine

Programme en langage
machine

Interprtation & Compilation

Programme crit en X
Compilateur de X en Y
(plus proche du langage
Machine)
Programme en
Langage de Y
Interprteur de Y

Mr SYLLA. Ingenieur en informatique

La Machine Virtuelle java ( JVM)


Code
source
cot
dvelop
peur

..
.

Compilation en
PSEUDO-CODE
(byte-code)

processeurs cot
utilisateurs

java-compiler( javac)
Interprtation par la
Machine virtuelle Java pour
les
Systmes dexploitation

PC

Macintosh
Mr SYLLA. Ingenieur en informatique

.....
..

Le pseudo-code est
universel cest dire
indpendant du
compilateur et de
lordinateur o a lieu
cette compilation.
UNIX
8

La Programmation Oriente Objet (P.O.O)


Procdures

Programmation structure

Structures
de donnes
( indpendantes
des procdures)

Constitu

Champs
Programmation objet

Constitu

objets

( donnes)

Mthodes
Mr SYLLA. Ingenieur en informatique

Concept de classe

Le concept de classe correspond simplement la


gnralisation de type que lon rencontre dans les langages
classiques. En effet, une classe nest rien dautre que la
description dun ensemble dobjets ayant une structure de
donnes commune et disposant des mmes mthodes.
Les objets apparaissent alors comme des variables dun
tel type classe (en P.O.O, on dit aussi quun objet est une
instance de sa classe ).Bien entendu, seule la structure est
commune , les valeurs des champs tant propres chaque
objet. En revanche, les mthodes sont communes lensemble
des objets dune mme classe.
Mr SYLLA. Ingenieur en informatique

10

La P.O.O :l encapsulation

Principe dencapsulation
des donnes
respect du

Mr SYLLA. Ingenieur en informatique

Impossible
dagir
directement
sur les
donnes

11

JRE (Java Runtime Environnment)

Le JRE contient uniquement l'environnement d'excution de programmes Java. Le JDK


contient lui mme le JRE. Le JRE seul doit tre install sur les machines ou des
applications java doivent tre excutes.
Depuis sa version 1.2, Java a t renomm Java 2. Les numros de versions 1.2 et 2
dsignent donc la mme version.
Le JDK a t renomm J2SDK (Java 2 Software Development Kit) mais la
dnomination JDK reste encore largement (Bibliotque de base, compilateur Javac,
Interpreteur) utilise.
Le JRE a t renomm J2RE (Java 2 Runtime dition).
Trois ditions de Java existent :
J2ME : Java 2 Micro dition
J2SE : Java 2 Standard dition
J2EE : Java 2 Entreprise dition
Sun fourni le JDK, partir de la version 1.2, sous les plateformes Windows, Solaris et
Linux.

Mr SYLLA. Ingenieur en informatique

12

Java 2 en trois ditions diffrentes

J2ME( Java2 Micro dition)

- Applications sur environnement


limit
- systmes portables
-systmes de navigation embarqus

-Applications
J2SE( Java2 Standard dition)
-Applet

J2EE( Java2 Entreprise dition)

-API pour applications dentreprise


( accs bases de donnes)
- EJB( composants mtiers)
-JSP(Java Server Pages)
-Servlet (HTML dynamique)
Mr SYLLA. Ingenieur en informatique

13

L API
L'A.P.I. (Application Programming Interface) est un ensemble de classes et
interfaces prdfinies utilisables par le programmeur .Elles sont prsentes
dans des packages (java.lang, java.math, java.util, etc..
Un programme JAVA est constitu d'un certain nombre de classes :
- des classes prdfinies de l'API (environ un millier de classes)
(Application Programming Interface) .
- des classes dfinies par l'utilisateur

Un programme utilise
au maximum
les fonctionnalits
prsentes dans l'A.P.I.

PROGRAMME
classes dfinies
pour ce
programme

classe : type de
donnes
+ fonctions pour
les manipuler

API
Mr SYLLA. Ingenieur en informatique

14

Application standalone et Application WEB


Les applications rentrent gnralement dans le cadre des
applications standalone ou des applications web destines l
internet.
Les applications autonomes sont des programmes
Application Standalone

Application WEB

excuts sous le contrle du systme


d'exploitation.
Les programmes C, C++ sont des applications de
ce type.

Les applications web sont excutes lors de la


visualisation par un navigateur WEB d'une page
HTML. En gnral elles sont hberges par des
serveurs web comme Apache Tomcat. Elles sont
trs rpandues avec la technologie JEE.
Mr SYLLA. Ingenieur en informatique

15

Applications :la console vs G.U.I

Programme interface
console

Programme interface
graphique : GUI
(Graphical User Interface)

FIN DU CHAPITRE

Lutilisateur fournit des infos au clavier


sous forme de lignes de texte. Le
programme dcide du squencement
des oprations. Loprateur est sollicit
au moment voulu.

Linteraction programme-oprateur se
fait essentiellement via des composants
graphiques. Cest la programmation
vnementielle :le programme ragit
des vnements provoqus par lutilisateur.
Mr SYLLA. Ingenieur en informatique

16

Chapitre 2

Techniques de base du langage

Premier programma Java.


package home.user.java.essai;
// un premier programme // Ceci est un commentaire finissant en fin de ligne
/* la version JAVA du classique
/* ceci est un commentaires pouvant encadrer
Hello World
un nombre quelconques de caractres
*/
sur un nombre quelconque de lignes */
public class HelloWorld {
public static void main(String [ ] args) {
System.out.println("Hello World !");
}
}
Hello World !

Mr SYLLA. Ingenieur en informatique

17

Structure du programme (1/2)

package home.user.java.essai ;
public class HelloWorld
{
public static void main(String [ ] args)
{
System.out.println("Hello World !");
}
}

Mr SYLLA. Ingenieur en informatique

en-tte de la classe
Dfinition de la classe
avec une seule mthode
(la mthode main)

18

Structure du programme (2/2)


Le mot cl static prcise que la mthode main nest pas lie une instance (objet)
particulire de la classe.
Le paramtre String[ ] args est un tableau de chanes de caractres qui permet de
rcuprer des arguments transmis au programme au moment de son lancement.
Ce paramtre est OBLIGATOIRE en Java.
Le mot cl public dans public class sert dfinir les droits daccs des autres Classes
(en fait de leurs mthodes) la classe . [ A voir].
Le mot cl public dans public static void main est obligatoire pour que votre programme
sexcute. Il sagit dune convention qui permet la machine virtuelle daccder
la mthode main .

Mr SYLLA. Ingenieur en informatique

19

Paquetage de la classe
La notion de paquetage se dfinit comme tant un regroupement ( ensemble) de classes
en une structure commune.
La classe dfinit ici (HelloWorld ) appartient au paquetage nomm :
home.user.java.essai
La classe a un nom simple : HelloWorld
Le nom complet de la classe est : home.user.java.essai.HelloWorld

On prcisera quune classe appartient un paquetage en plaant en dbut de fichier


linstruction package nom_du_paquet ;
Pour utiliser des classes de l API, il faut prciser leur package. On pourra utiliser
linstruction import nom_package.nom_de_la_classe .
Mr SYLLA. Ingenieur en informatique

20

Contenu du programme

Le programme est constitu dune seule instruction :


System.out.println ("Hello World !");
Affiche la valeur de argument puis
passe la ligne

System.out.println (argument)

Classe
System du
package
java.lang

Variable de classe ( rfrence


un objet de type PrintStream)

System.out.print (argument)

Mthode dinstance de la
classe PrintStream du package
java.io

Affiche la valeur de argument sans


passer la ligne
Mr SYLLA. Ingenieur en informatique

21

Excution du programme (1/2)

La sauvegarde du programme se fait imprativement dans un fichier qui


porte le nom HelloWorld.java
extension
nom de la classe

Le code source dune classe publique doit toujours se trouver dans un


fichier portant le mme nom et possdant l extension .java.

La classe contenant la mthode main est appele la classe principale


du programme. Cest cette classe quil faut excuter. EN FAIT ON EXECUTE
QUE LES INSTRUCTIONS DE LA METHODE main.

Mr SYLLA. Ingenieur en informatique

22

Excution du programme (2/2)


On procde la COMPILATION de ce programme pour la gnration du byte code.
Si elle se passe bien( sans erreurs) on obtient un fichier dextension .class . Ici, il sagit
de HelloWorld.class .

javac HelloWorld.java

HelloWorld.class
extension indispensable

Commande javac pour compiler le source

java HelloWorld
aucune extension ne doit figurer
Commande java pour excuter le byte
code
ATTENTION: en pratique, on tiendra toujours
compte
des variables denvironnement
Mr SYLLA. Ingenieur
en informatique
23
PATH et CLASSPATH (cf. diapos suivantes).

Les commandes de base du langage

javac :

pour la compilation ( gnrer le .class).

java :

pour lexcution ( du main).

appletviewer : pour excuter une applet.


javadoc :

pour gnrer une documentation


automatique.

Mr SYLLA. Ingenieur en informatique

24

Catgories dinstructions

package info.fst.sylla.pro;
public class TypesInstructions
{ public static void main(String args [] )
Instruction simple termine
{ System.out.print("instruction simple" );
par un point-virgule
int i = 0;
if ( i > 1000)
System.out.print("instruction de structuration ");
Instruction de structuration
( if, for,.)
static { int tab[ ] = new int[12] ;
for (i = 0;i < tab.length; i++)
Instruction en bloc
tab[i] = i +10;
(prsence des { } )
}
}
Mr SYLLA. Ingenieur en informatique

25

Rgles dcriture en Java (1/3)


Les diffrentes entits utilises dans un programme ( mthodes, variables,
classes, objets, .) sont manipules au travers didentificateurs .
Un identificateur est form de lettres ou de chiffres, le premier caractre tant
obligatoirement une lettre. Les lettres comprennent les majuscules A-Z et les
minuscules a-z, ainsi que le caractre soulign ( _ ) et le caractre $
Exemple :
ligne

Clavier

valeur_5

_total

_56

$total

2nombre

Remarque trs importante :


Java est trs sensible la casse : ligne =

Ligne .

Mr SYLLA. Ingenieur en informatique

26

Rgles dcriture en Java (2/3)

Un identificateur ne peut pas appartenir la liste des mots rservs du


langage Java :
abstract
assert
case
catch
continue
default
extends
false
for
if
int
interface
null
package
return
short
synchronized this
true
try

boolean
char
do
final
implements
long
private
static
throw
void

break
class
double
finally
import
native
protected
super
throws
volatile

Mr SYLLA. Ingenieur en informatique

byte
const
else
float
instanceof
new
public
switch
transient

27

Rgles dcriture en Java (3/3)


Voici quelques conventions de codage en java
public class MaPremiereClasse

{ public void affiche( int argument )


{

int

nombreEntier =12

, i =1;

final float NOMBRE =100;


while ( i >100)

Nom de classe commence par


une majuscule.
Nom de mthode , de variables
ou dattributs commence par
une minuscule.
Nom de constante crit tout en
majuscule.

{ System.out.println (" i = "+ i ) ;


}
}
}

structures de contrle: mettre


des accolades

Indenter votre programme pour plus de lisibilit


Mr SYLLA. Ingenieur en informatique

28

Documentation en ligne et utilisation de classes


Pour pouvoir utiliser une classe,
il faut et il suffit de connatre son interface
(la dclaration commente de tous les membres publics)
consultable grce la documentation en ligne
// extrait de la documentation en ligne de Terminal
/** cre un Terminal de titre 'titre' et de taille en pixels 'w' * 'h' */
public MyFrame (String titre, int w, int h){...}
/** Affiche un 'message' et rend l'entier lu partir de la console*/
public int readInt (String message)
/** affiche l'entier 'i' dans la console */
public void println (int i) {...}
MyFrame fen = new MyFrame ("Tri fusion",300,300);
int taille = fen.readInt ( "Donner un entier");
fen.println (taille*taille);
Mr SYLLA. Ingenieur en informatique

29

La documentation des programmes

Pour pouvoir utiliser une classe,


il faut et il suffit de connatre son interface
(la dclaration commente de tous les membres publics)
consultable grce la documentation en ligne
La documentation en ligne peut tre gnre partir des fichiers sources par
l'utilitaire javadoc.
Cette documentation est organise et gnre de la mme manire pour toutes
les classes que ce soit les classes de l'API ou les classes que nous dfinissons
nous mme

Mr SYLLA. Ingenieur en informatique

30

A propos des commentaires


Commenter toujours les enttes de fonctions
Un bon commentaire permet de pouvoir utiliser la fonction
sans consulter le code.

il indique l'aide d'une phrase le rle de la fonction en faisant


intervenir le nom de tous les paramtres

il prcise le rle de chaque paramtre


il indique la signification du rsultat retourn
il indique les restrictions sur la valeur des paramtres
Commenter si ncessaire des fragments de codes difficiles
(un bon programme en contient gnralement peu)
viter les commentaires inutiles
A =5; /* a prend la valeur 5 */
Mr SYLLA. Ingenieur en informatique

31

Types de commentaires en Java


package home.user.java.essai;
/**
* @param autor Lahatt
* @since 1.0
*/

/* ceci est un commentaire de documentation


automatique javadoc */

// un premier programme
// Ceci est un commentaire sur une seule ligne
/* la version JAVA du classique /* ceci est un commentaire pouvant encadrer
Hello World
un nombre quelconques de caractres
*/
sur un nombre quelconque de lignes */
public class HelloWorld {
public static void main(String [ ] args) {
System.out.println("Hello World !");
}
}
Mr SYLLA. Ingenieur en informatique

32

Les commentaires JAVADOC


Les commentaires javadoc /** */
sont des commentaires spciaux
permettant la production automatique de documentation
au format html.
Ils sont placs juste avant ce qu'ils commentent.
balises de commentaires
JAVADOC
de classe
@see <une autre classe>
@author <nom de l'auteur>
@version <n de version>

balises de commentaires
JAVADOC
de fonction
@param <nom paramtre> <description>
@return <description>
@exception <nom exception> <description>
@since <n de version>
@deprecated
Mr SYLLA. Ingenieur en informatique

33

Contenu d'une documentation javadoc

Description gnrale de la classe


Description des attributs (FIELD)
Description des constructeurs (CONSTRUCTOR)

Description des mthodes (METHOD)


La description des attributs, des constructeurs et des mthodes publics est donne
- brivement en dbut de document
- en dtail dans la suite du document.
Mr SYLLA. Ingenieur en informatique
34

La commande javadoc
GENERATION DE LA DOCUMENTATION
javadoc -d <rpertoire o doivent tre mis les fichiers gnrs>
-sourcepath <rpertoire(s) de base des fichiers sources>
<nom du paquetage>

- sourcepath
le(s) rpertoire(s) de base des sources
(s'il y en a plusieurs, sparer par des ; (Windows) ou : (linux))

La documentation est ensuite consultable partir du fichier index.html du rpertoire


mentionn avec l'option -d .

Mr SYLLA. Ingenieur en informatique

35

La commande javadoc: exemple

Pour gnrer la documentation des classes du paquetage essai


javadoc -d D:\allsylla\javaprog\doc
-sourcepath C:\sylla\src
essai
Pour gnrer la documentation des classes des paquetages essai (dans C:\sylla)
et exemple.test (dans D:\allsylla)
javadoc -d D:\allsylla\javaprog\doc
-sourcepath C:\sylla\src;D:\allsylla\src
essai exemple.test

FIN DU CHAPITRE

Mr SYLLA. Ingenieur en informatique

36

Chapitre 3

Les Types Primitifs

Java dispose dun certain nombre de types de base dits primitifs, permettant de
manipuler des entiers, des flottants, des caractres et des boolens.
Ce sont les seuls types du langage qui ne sont pas des classes.
Les types primitifs(au nombre de 8) se rpartissent en quatre grandes catgories
selon la nature des informations quils permettent de manipuler:
- nombres entiers,
- nombres flottants,
- caractres
- boolens

Mr SYLLA. Ingenieur en informatique


37

Le type entier
Ils servent reprsenter les nombres entiers relatifs, ils sont au nombre de 4.
BYTE (1 octet) SHORT (2 octets) INT (4 octets) LONG (8 octets)
byte 8 bits : 128
127
short 16 bits : 32768
32767
int
32 bits : 2147483648
2147483647
long 64 bits : 9223372036854775808
9223372036854775807

Les types lmentaires ont une taille idenique quelque soit la plateforme
d'excution.

Mr SYLLA. Ingenieur en informatique


38

Le type flottant

Ils permettent de reprsenter , de manire approche, une partie des nombres


rels.
Java prvoit deux types de flottants correspondant chacun des emplacements
mmoire de tailles diffrentes: float et double.
Double : 64 bits
Float : 32 bits

Exemple :
float pi = 3.141f; // ncessaire de suffixer par la lettre f sinon erreur de compilation
double v = 3d ;

// suffixe d non ncessaire 3d = 3

float f = +1.1f , d = 1e10f; // dclaration de plusieurs variables de mme type


Mr SYLLA. Ingenieur en informatique
39

Le type caractre

CHAR ( 2 octets) et STRING


char : caractre isol
-codage unicode sur 16 bits non sign
-expression littral char entre apostrophes
+, a ,\t , \u???
Une variable de type caractre se dclare:
char c1; char c1,c2 ; // c1 et c2 sont 2 variables caractre
String : chane de caractres
-une expression littrale de type String
String s1 = "bonjour", s2 = new String( );

ATTENTION : String est une classe du paquetage java.lang .

Mr SYLLA. Ingenieur en informatique

40

Le type boolen

Ce type sert reprsenter une valeur logique du type vrai/faux


BOOLEAN
-Deux tats: true / false
-Exemples:
boolean ok=false;
if (n<p) //n<p est expression boolenne valant vrai ou faux
boolean ordonne ; // dclaration dune variable de type boolenne

ordonne =n<p; //ordonne reoit la valeur de lexpression n < p

Mr SYLLA. Ingenieur en informatique

41

Initialisation des variables

(1/2)

Exemple :
int nombre;
// dclaration de la variable nombre
nombre = 100; //initialisation de la variable nombre
int nombre = 100; //dclaration et initialisation de la variable nombre
valeur

nom

= oprateur daffectation
type

( associatif de droite gauche)

Remarque :
Une variable manipule dans une mthode (variable locale) ou un bloc devra
toujours tre initialise avant toute utilisation.
La dclaration dune variable rserve de la mmoire pour stocker sa valeur .
Mr SYLLA. Ingenieur en informatique

42

Initialisation des variables

(2/2)

En java, toute variable appartenant un objet (dfinie comme tant un attribut de


l'objet) est initialise avec une valeur par dfaut en accord avec son type au moment
de la cration.
Cette initialisation ne s'applique pas aux variables locales des mthodes de la classe
(cf :remarque prcdente).
TYPE

VALEUR PAR DFAUT

boolean

false

byte, short, int, long

float, double

0.0

char

u\000

classe

null
Mr SYLLA. Ingenieur en informatique

43

Utilisation des variables


package home.user.java.essai ;
public class UtilVariable
{ String chaine ; // variable de type (class ) String, valeur par dfaut null
double solde ; // valeur par dfaut 0.0 assigne solde
public static void main(String [ ] args)
{
System.out.println(" valeur de solde =" +solde);
new pour
}
crer un objet
public void affiche( )
{ chaine = new String(" bonjour" ); // objet de type String initialise
long nombre ; // erreur de compilation car nombre non initialise
System.out.println(" valeur de nombre= "+nombre);

}}
Mr SYLLA. Ingenieur en informatique

44

variables finales
(le mot cl final)
Java permet de dclarer que la valeur dune variable ne doit pas tre
modifie pendant lexcution du programme

package home.user.java.essai ;
Une fois convenablement
public class VariableFinale
initialise une variable finale
ne peut pas voir sa valeur volue .
{ final long NOMBRE ;
final double MAX = 100 ; // variable finale = constante
public static void main(String [ ] args)
{
System.out.println(" utilisation de variable constante" );
}
public void affiche( )
{ NOMBRE = 1000 ; // initialisation diffre de la variable NOMBRE
System.out.println(" valeur de MAX= "+MAX);

}
}

Mr SYLLA. Ingenieur en informatique

45

Les Oprateurs
(arithmtiques binaires)
package home.user.java.essai ;
public class Op_Arith_Binaire
{ public static void main(String [ ] args)
{ int a =100, b = 50 ;
int addit = a + b ,
soustr = a b ,
div

/ b,
a*b;

= a

+ - * / sont des
oprateurs arithmtiques
binaires qui portent sur deux
oprandes de mme type et
renvoient un rsultat du mme
type que le type des oprandes ..

multi =
System.out.println(" addit =" +addit );
System.out.println(" soustr =" +soustr );
System.out.println(" div =" +div );
System.out.println(" multi =" +multi );

}
}

Mr SYLLA. Ingenieur en informatique

addit
soustr
div
multi

= 150
= 50
= 2
= 5000

46

Les Oprateurs
(unaire et modulo)
package home.user.java.essai ;
public class Op_Unaire_et_Modulo
Oprateur modulo:
{ public static void main(String [ ] args)
fournit le reste de la
{ int a =100, b = 50 ;
division de deux
oprandes.
int _modulo = 100 % 50 ;
System.out.println(" le reste de la division de " +a+" par" +b+" est" +_modulo );
float x =

+ 10.2f ;

double d=

- 50.2 ;

System.out.println (" x et d sont des oprateurs unaires portant sur un seul oprande" );

}
}

le reste de la division de 100 par 50 est 0


x et d sont des oprateurs unaires portant sur un seul oprande
47
Mr SYLLA. Ingenieur en informatique

Les Oprateurs
(priorit)

Lorsque plusieurs oprateurs apparaissent dans une mme expression, il


est ncessaire de savoir dans quel ordre ils sont mis en jeu

Les oprateurs unaires + et ont la priorit la plus leve.


On trouve ensuite au mme niveau, les oprateurs *, / et %.
Au dernier niveau, se retrouvent les oprateurs binaires + et -.
En cas de priorit identique , les calculs seffectuent de gauche
droite. On dit que lon a une associativit de gauche droite.

Mr SYLLA. Ingenieur en informatique

48

Exception sur la manipulation


des oprateurs(1/2)

package home.user.java.essai ;
/* test sur la division par zero de nombres entiers */
public class Test {
public static void main (String args[])
{
int valeur=10;
double rsultat = valeur / 0;
System.out.println("index = " + rsultat);
}
}
Exception in thread main
java.lang.ArithmeticException:/
by zro at Test.main ( Test.java:9

Mr SYLLA. Ingenieur en informatique

49

Exception sur la manipulation


des oprateurs(2/2)
Pour les entiers, la division par zro (par / ou %) conduit une erreur
dexcution. Plus prcisment, il y a dclenchement de ce que lon nomme une
exception de type ArithmeticException.
Nous verrons plus tard comment traiter les excceptions.
Si nous ne le faisons pas, nous aboutissons larrt de lexcution du
programme, avec un message de ce type:
Exception in thread main java.lang.ArithmeticException:/ by zro at
Test.main ( Test.java:9)
REMARQUE :

Pour les flottants, aucune opration ne conduit un arrt de


lexcution (pas mme une division par zro ) ; seulement
on a une valeur non exploitable.
Mr SYLLA. Ingenieur en informatique

50

Conversions implicites(1/5)
Les oprateurs arithmtiques ne sont dfinis que lorsque leurs deux oprandes
sont de mme type. Mais, vous pouvez crire des expressions mixtes dans
lesquelles interviennent des oprandes de types diffrents.
public class ConversionLegale01 {
public static void main(String args [])
{ int a = 10 ;

float p =14 ;
double d= p + a;
System.out.println("la valeur de l'expression mixte (p+a) est :"+d);
}
}
La valeur de lexpression mixte (p+a) est : 24.0
Mr SYLLA. Ingenieur en informatique

51

Conversions implicites(2/5)

double d= p + a;
tape 1: a est converti en float, p reste float

Ces 4 tapes sont


ralises par le
compilateur do
conversions
implicites

+
tape 2: on effectue p+a qui sera de type float
tape 3: le rsultat est converti
en double
tape 4: le rsultat est stock (affectation)dans la variable d
Mr SYLLA. Ingenieur en informatique

52

Conversions implicites(3/5)

Conversions dajustement de type


Une conversion telle que int en float est appele ajustement de type .
Elle ne peut se faire que suivant une hirarchie qui permet de ne pas
dnaturer la valeur initiale, savoir :
int -> long ->float ->double
NB : une conversion de double en float ( par exemple) nest pas lgale .
pour lexemple prcdent on ne peut pas faire :
int k = p + a ; // erreur de compilation

Mr SYLLA. Ingenieur en informatique

53

Conversions implicites(4/5)

Promotions numriques
les oprateurs numriques ne sont pas dfinis pour les types byte, char
et short.
Toute opration qui utilise lun de ces types ncessite une conversion
pralable dans le type int
Cette conversion porte le nom de promotion numrique .

Mr SYLLA. Ingenieur en informatique

54

Conversions implicites(5/5)

public class ConversionLegale02 {


public static void main(String args [])
{ char c = d ; // le code du caractre d est converti en int

short s =0 ; // la variable s est convertie galement en int


int n= c + s; // le rsultat de type int est affect n
System.out.println("la valeur de l'expression mixte (c+s) est :"+n );
}
}
La valeur de lexpression mixte (c+s) est : 100

Mr SYLLA. Ingenieur en informatique

55

Les oprateurs relationnels(1/2)

Oprateur

signification

<
<=
>
>=
==
!=

infrieur
infrieur ou gal
suprieur
suprieur ou gal
gal
diffrent de

Les quatre premiers( <,


<=, >, >=) sont de mme
priorit. Les deux
derniers(= = et !=)
possdent galement la
mme priorit, mais
celle-ci est infrieur
celle des prcdents

Ces oprateurs sont moins prioritaires que les oprateurs arithmtiques.


Ils soumettent eux aussi leurs oprandes aux promotions numriques et
ajustement de type .
Mr SYLLA. Ingenieur en informatique

56

Les oprateurs relationnels(2/2)


Exemple :
public class Oper_Relat {
public static void main(String args [])
{ int n = 10 ;
short s =10 ;
float x = 100;
double d= 200;
System.out.println("Affichage 1 :"+(n = = s) );
System.out.println("Affichage 2 :"+(d <= x) );
}
}
Affichage 1 : true
Affichage 2 : false

Mr SYLLA. Ingenieur en informatique

57

Les oprateurs logiques(1/3)

Java dispose doprateurs logiques classes par ordre de priorits


dcroissantes (il nexiste pas deux oprateurs de mme priorit).

Le rsultat est
toujours un
boolen.

Oprateur

Signification

!
&
^
|
&&
||

ngation
et
ou exclusif
ou inclusif
et(avec cout-circuit)
Ou inclusif(avec court-circuit

Mr SYLLA. Ingenieur en informatique

58

Les oprateurs logiques (2/3)

(a<b) && (c<d) ou (a<b) & (c<d)


prend la valeur true (vrai) si les deux expressions a<b et c<d sont toutes les
deux vraies (true), la valeur false (faux) dans le cas contraire.
(a<b) || (c<d) ou (a<b) | (c<d)
prend la valeur true si lune au moins des deux conditions a<b et c<d est
vraie, la valeur false dans le cas contraire.
(a<b) ^ (c<d)
prend la valeur true si une et une seule des deux conditions a<b et c<d est
vraie, la valeur false dans le cas contraire.
!(a<b)
prend la valeur true si la condition a<b est fausse, la valeur false
dans le
cas contraire. Cette expression possde la mme valeur que a>=b.

Mr SYLLA. Ingenieur en informatique

59

Les oprateurs logiques (3/3)

Les oprateurs de cout-circuit && et || .


Ces deux oprateurs reclent une proprit trs importante:
leur second oprande (figurant droite de loprateur) nest
valu qui si la connaissance de sa valeur est indispensable
pour dcider si lexpression correspondante est vraie ou
fausse.
Exemple :

( 15 <10 ) && ( 10 > 4) //on value 15 <10 , le rsultat


// est faux donc on n value pas
// 10 > 4

Mr SYLLA. Ingenieur en informatique

60

Oprateurs
dincrmentation et de dcrmentation(1/2)
incrmentation
int i = 10 ;

post incrmentation

i++ ; // cette expression vaut 10

En fait en crivant :
int n= i++ ;
on a :

//mais i vaut 11
int j = 10 ;

n= i ;
i = i+1 ;

++j ; // cette expression vaut 11

Et en crivant :
int p= ++j ;
on a:

//et j vaut aussi 11


pr incrmentation

j = j+ 1 ;
p =j ;

Il existe un oprateur de dcrmentation note - Mr SYLLA. Ingenieur en informatique

61

Oprateurs
dincrmentation et de dcrmentation(2/2)
Les oprateurs dincrmentation et de dcrmentation permettent dallger lcriture
de certaines expressions et ils nappliquent aucune conversion leur oprande.
package home.user.java.essai ;
public class TestIncrementation {
public static void main(String args [])
{ byte n = 10 ;
int s =n +1 ; // ici on ne peut pas crire n = n+ 1
System.out.println("Affichage 1 :" + ++n); // n reste byte
System.out.println("Affichage 2 :"+ s); // n est converti en int
}
}

Affichage 1 : 11
Affichage 2 : 11
Mr SYLLA. Ingenieur en informatique

62

Oprateurs
daffectation largie
int i= 20 ;

i = i + 1 ; // i vaut 21
i += 1 ; //i vaut aussi 21

Leur rle =
condenser les
expressions.
Pas de conversion.

byte b = 2 ;
b *=2 ; // on value b * 2 en int
// mais le rsultat est
//converti en byte

variable = variable oprateur expression

variable oprateur = expression

Liste complte des oprateurs d affectation largie :

+= -= *= /= |= ^=

&= <<=

>>=

Mr SYLLA. Ingenieur en informatique

>>>=
63

Oprateur
de cast
On a vu quil ntait pas possible dcrire :
byte b = 10;

b = b + 1 ; //erreur de compilation
// incompatible type for =. Explicit cast
//needed to convert int to short.
Mais on peut faire ceci :
byte b = 10;

b =(byte) (b + 1) ; // OK

b +=1

On force le rsultat dans le type byte


(double) 10/3 = (double)(10/3)
ATTENTION
Mr SYLLA. Ingenieur en informatique

64

Oprateurs
de manipulation de bits (1/3)

Ils travaillent sur le motif binaire dun ENTIER, avec possibilit de


conversions implicites.

Oprateur Signification
&
|
^
<<
>>
>>>
~(unaire)

Oprateurs bit bit

Et (bit bit)
Ou inclusif(bit bit)
Ou exclusif(bit bit)
Dcalage gauche
Dcalage arithmtique droite
Dcalage logique droite
Complment un (bit bit)

Oprande 1
Oprande 2

0
0

0
1

1
0

1
1

&

Mr SYLLA. Ingenieur en informatique

65

Oprateurs
de manipulation de bits (2/3)
Oprateur de dcalage <<
n (de type int)
n<<2
On dcale
de deux bits
vers la gauche

Rsultat :

0111001101111111011101001110111
0111001101111111011101001110111
011100110111111101110100111011100
deux bits zro droite
perdus

1100110111111101110100111011100

Mr SYLLA. Ingenieur en informatique

66

Oprateurs
de manipulation de bits (3/3)
Oprateur de dcalage >> et >>>
n (de type int)
n>>3

rsultat
n>>>3
rsultat

1111001101111111011101001110111
1111001101111111011101001110111
1110111001101111111011101001110
0000111001101111111011101001110

Les bits de gauche sont des bits identiques au bit de signe.


>>> identique >> sauf que tous les bits de gauche sont zro.

Mr SYLLA. Ingenieur en informatique

67

Oprateur
Conditionnel

?:

if(ciel == bleu)
temps ="beau"
else
temps=" mauvais"

temps =ciel==bleu ?"beau" : " mauvais"

Mr SYLLA. Ingenieur en informatique

68

Priorit des oprateurs (1/2)


(ordre de priorit dcroissante)
les parenthses

()

les oprateurs d'incrmentation

++ -- --

les oprateurs de multiplication, division, et * / %


modulo
les oprateurs d'addition et soustraction

+ -

les oprateurs de dcalage

<< >>

les oprateurs de comparaison

< > <= >=


Mr SYLLA. Ingenieur en informatique

69

Priorit des oprateurs (2/2)


(ordre de priorit dcroissante)

les oprateurs d'galit

==

l'oprateur OU exclusif

l'oprateur ET

&

l'oprateur OU

l'oprateur ET logique

&&

l'oprateur OU logique

||

les oprateurs d'assignement

FIN DU CHAPITRE

!=

+=

-=

Mr SYLLA. Ingenieur en informatique

70

Chapitre 4

Les structures de contrle

Les instructions dun programme (main) sont priori excutes de faon


squentielle.
Les instructions de contrle permettent de saffranchir de cet ordre pour
effectuer des choix et des boucles.

CHOIX :

if .. else

Branchement inconditionnel

switch

BOUCLES :

for ,
while
do while

Mr SYLLA. Ingenieur en informatique

break
continue

71

Choix :
if else
switch
package home.user.java.essai ;
public class Exemple_If_Else{
int final MIN = 100;
int final Max = 1000;
int solde ;
public static void main(String args [ ])
{ if ( solde < MIN)
System.out.println("solde insuffisant" ) ;
else
if (solde = = MAX)
System.out.println("solde suffisant" ) ;
}
}

package home.user.java.essai ;
public class Exemple_Switch{
int final MIN = 100;
int final Max = 1000;
int choix , solde;
public static void main(String args [ ])
{ switch(choix)
{ case 1: solde = MIN;
System.out.println("solde insuffisant" ) ;
break;
case 2: solde = MAX ;
System.out.println("solde suffisant" ) ;
break;
default : break
} }}

Mr SYLLA. Ingenieur en informatique

72

Syntaxes :
if else
switch
if (condition)
Condition boolenne ( true / false )
instruction_1

[ else
instruction_2 ]

Expressions quelconques
Les crochets renferment des instructions
facultatives.

switch (expression)
{

case constante_1 : [suite_dinstruction_1 ]


case constante_2 : [suite_dinstruction_2 ]
..
case constante_n : [suite_dinstruction_n ]
[ default : suite_dinstructions ]

Expression de type byte, char,


short ou int .

Expression constante d un
type
compatible par affectation
avec
Mr SYLLA. Ingenieur en informatique
le type de expression
73

Linstruction
do while
package home.user.java.essai ;
import java.util.Scanner ; // importation de classe de l API
public class Exemple_Do_While{
public static void main (String args [ ])
{ Scanner clavier = new Scanner (System.in) ;
do
{ System.out.println ("saisir un entier strictement positif " ) ;
n = clavier.nextInt ( ) ; // saisir partir du clavier
if ( n < 0) System.out.println ("la saisie est invalide: recommencez" ) ;

}
while ( (n < 0) || (n = = 0) );
}}

do

instruction

while (condition) ;

Expression quelconque
Condition boolenne
Mr SYLLA. Ingenieur en informatique

74

Linstruction
while

package joseph.cours.java ;
public class Exemple_While{
public static void main(String args [ ])
{ while ( n < = 0)
{ System.out.println ("saisir un entier strictement positif " ) ;
n = clavier.nextInt( ) ; // saisir partir du clavier
if ( n < 0) System.out.println ("la saisie est invalide: recommencez" ) ;

}
}
}

while (condition) ;

instruction

Condition boolenne
Expression
Mr SYLLA. Ingenieur en
informatique
quelconque

75

Linstruction
for

package joseph.cours.java ;
public class Exemple_For{
public static void main (String args [ ])
{ int tab [ ] = new int [ 100] ; // tableau dentiers de taille 100
for( int i = 0 ; i < 100 ; i ++ )

{
tab [ i ] = i + 1;

}
}
}

for ( [initialisation] ;[condition] ; [incrmentation])


instruction
Mr SYLLA. Ingenieur en informatique

76

Branchement inconditionnel
break / continue

Ces instructions semploient principalement au sein des boucles.


Elle sert interrompre le droulement de la boucle, en passant
linstruction suivant la boucle.

break

package joseph.cours.java ;
public class Exemple_Break{
public static void main (String args [ ])
{ int tab [ ] = new int [ 10] ; // tableau dentiers de taille 10
for( int i = 0 ; i < 10 ; i ++ )
{ if ( i = = 5 ) break ;// initialiser seulement les 5 premiers elts du tableau
tab [ i ] = i + 1;

//

le break nous branche la sortie du for pour continuer

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


System.out.println (" lments du tableau:" +" "+tab [ i] );
}
}

lments du tableau:

1 2 3 4 5 0 0 0 0

Mr SYLLA. Ingenieur en informatique

0
77

break avec imbrication de boucles


package home.user.java.essai;
public class Essai_Break_Imbr {
public static void main (String args [ ])
{ int tab [ ] = new int [ 10] ; // tableau dentiers de taille 10
for( int i = 0 ; i < 10 ; i ++ )
{
for ( int j =i;j <10;j++)
{ if ( j == 3 || j == 4 || j == 5 ) break ;
tab [ j ] = j+1;
} //
le break branche ici
}
for ( int i = 0 ; i < 10 ; i ++ )
System.out.println (" lments du tableau:" +" "+tab [ i] );
}
lments du tableau:
1 2 3
0 0 0 7 8 9 10
}
Mr SYLLA. Ingenieur en informatique

En cas de boucles
imbriques,
linstruction break
fait sortir uniquement
de la boucle la plus
interne.

78

break avec tiquette


package joseph.cours.java;
public class Essai_Break_Etiq {
public static void main (String args [ ])
{ int tab [ ] = new int [ 10] ; // tableau dentiers de taille 10
repeat: for( int i = 0 ; i < 10 ; i ++ )
{
for ( int j =i;j <10;j++)
{ if ( j == 3 || j == 4 || j == 5 ) break repeat;
tab [ j ] = j+1;
tiquette : pour sortir
}
de deux boucles imbriques
} //
cette fois le break branche ici
for ( int i = 0 ; i < 10 ; i ++ )
System.out.println (" lments du tableau:" +" "+tab [ i] );
}
lments du tableau:
1 2 3
0 0 0 0 0 0 0
}
Mr SYLLA. Ingenieur en informatique

79

Continue ordinaire

continue

Linstruction continue permet de passer prmaturment au


tour de boucle suivant.

package joseph.cours.java ;
public class Exemple_Continue_Ord{
public static void main (String args [ ])
{ int tab [ ] = new int [ 10] ; // tableau dentiers de taille 10
for( int i = 0 ; i < 10 ; i ++ ) //
ici
{ if ( i = = 5 ) continue ;// on poursuit la boucle for
tab [ i ] = i + 1;

}
for ( int i = 0 ; i < 10 ; i ++ )
System.out.println (" lments du tableau:" +" "+tab [ i] );
}
}

lments du tableau:

1 2 3 4 5 0 6 7 8 9 10

Mr SYLLA. Ingenieur en informatique

80

Continue avec tiquette


package home.user.java.essai;
public class Essai_Continue_Etiq {
public static void main(String args [ ])
{ int tab [ ] = new int [ 10] ; // tableau dentiers de taille 10
again: for( int i = 0 ; i < 10 ; i ++ ) // cette fois le continue branche ici
{
for ( int j =i;j <10;j++)
{ if ( j == 3 || j == 4 || j == 5 ) continue;
tab [ j ] = j+1;
ATTENTION: on ne mentionne pas
}
le nom de l tiquette avec continue.
} for( int i = 0 ; i < 10 ; i ++ )
System.out.println(" lments du tableau:" +" "+tab [ i] );
}
lments du tableau:
1 2 3
0 0 0 7 8 9 10
}

FIN DU CHAPITRE

Mr SYLLA. Ingenieur en informatique

81

Chapitre 5

Programmation Oriente Objet

Le concept de classe
Une classe est la description dun ensemble de donnes et de fonctions
regroupes au sein dune mme entit (appele objet).
On peut dfinir une classe comme tant aussi une description abstraite
dun objet du monde rel.
Un objet sera dfini comme tant une entit concrte ou abstraite du
monde rel. Les objets contiennent des attributs et des mthodes.
Chaque objet sera caractris par son jeu de donnes( on parlera d
attributs ou aussi de champs). Les fonctions qui agissent sur les
donnes de lobjet sont aussi appeles mthodes.

Mr SYLLA. Ingenieur en informatique

82

Objet = identit + tat + comportement


Chaque objet possde :
- une identit qui lui est propre :
Mme si deux personnes ont des noms identiques, elles dsignent deux
individus distincts. Elles ont une identit distincte .
- un tat : les informations qui lui sont propres
Il est dfini par les valeurs associes chacun des champs de la classe.
Pour une personne : nom ,prnom, age, sexe, race
- un comportement : les mthodes applicables lobjet
Pour une personne : respirer, marcher, mourir
Mr SYLLA. Ingenieur en informatique

83

Dfinition dune classe


Les champs x et y ne sont visibles

La mthode est accessible depuis n


q lintrieur de la classe et non
importe quel programme.

lextrieur :
principe de lencapsulation des
donnes. Les donnes ne seront
public class Point
accessibles que par lintermdiaire
{
private int x ; // champ x dun objet Point de mthodes prvues cet effet.
private int y ; // champ y dun objet Point
public void initialise ( int abs, int ord )
{ x = abs ;
y = ord ;
}
Une mthode qui ne
} // fin de la classe
fournit aucun rsultat:

void

Permet dattribuer des valeurs initiales


aux champs de lobjet.
NB :on verra que cest au constructeur
deffectuer ce travail.

Mr SYLLA. Ingenieur en informatique

84

Remarques
Une mthode peut tre dclare private : dans ce cas elle nest visible
qu lintrieur de la classe o elle est dfinie. Pour pouvoir lutiliser dans
un autre programme, il faut ncessairement passer par une mthode
publique de sa classe ayant lappele.
Il est fortement dconseill de dclarer des champs avec lattribut public ,
cela nuit lencapsulation des donnes.

Mr SYLLA. Ingenieur en informatique

85

Crer un objet = instancier une classe


int a = 10 ; // rservation de lemplacement mmoire pour une variable de type int
float x ; // rservation de lemplacement mmoire pour une variable de type float
Point a ; // cette dclaration ne rserve pas demplacement pour un objet de type Point
// mais simplement une rfrence un objet de type Point.
La cration dun objet (on parle dinstanciation ) se fait avec loprateur

new Point ( ) ;

new :

// cre un emplacement pour un objet de type Point et


// fournit sa rfrence comme rsultat

on pourra crire :

a= new Point ( ) ; // cre un objet de type Point et on met sa reference dans


rfrence
a

// la variable a

Mr SYLLA. Ingenieur en informatique

?
?

x
y

objet
Point
86

Manipulation dobjets
Une fois qune rfrence un objet est convenablement initialise,
on peut appliquer nimporte quelle mthode lobjet correspondant .

a.initialise ( 2,4 ) ; //appelle la mthode initialise du type Point en


// lappliquant lobjet de rfrence a, et en lui transmettant
// les arguments 2 et 4
Oprateur daccs.

Mr SYLLA. Ingenieur en informatique

87

Petit programme de test


class Point01
On a deux classes dans le
{
private int x ; // champ x dun objet Point mme fichier source. Seule
private int y ; // champ y dun objet Point la classe contenant le
public void initialise ( int abs, int ord ) programme principal( main)
doit tre dclare avec
{ x = abs ;
lattribut public.
y = ord ;
}
} // fin de la classe Point01
public class TestPoint01
{ public static void main( String args [ ] )
{ Point01 a = new Point01 ( ) ;
a.initialise( 10,12 ) ; // le champ x aura la valeur 10 et y 12
}
} // fin de la classe TestPoint01
Mr SYLLA. Ingenieur en informatique

88

Le constructeur (1/3)

En Java, la cration dobjet se fait par allocation dynamique grce


loprateur new qui appelle une mthode particulire : le constructeur.
Dans lexemple prcdent, il ny avait pas de constructeur mais plutt ctait
la mthode initialise qui se chargeait dinitialiser correctement les champs
dun objet de type Point. La dmarche propose suppose que lutilisateur fera
appel de cette mthode au moment opportun pour initialiser correctement un
objet.
En fait un constructeur permet dautomatiser linitialisation dun objet.

Un constructeur est une mthode qui porte le mme nom que le


nom de la classe et qui est sans valeur de retour. Il peut disposer
dun nombre quelconque darguments.
Mr SYLLA. Ingenieur en informatique

89

Le constructeur (2/3 )
class Point02
{
private int x ; // champ x dun objet Point
private int y ; // champ y dun objet Point
public Point02 ( int abs, int ord ) // un constructeur deux
arguments
{ x = abs ;
y = ord ;
}
public void deplace (int dx, int dy )
{ x += dx ; y += dy ;
}
public void affiche( )
{ System.out.println("Point de coordonnes" + x + " et " +y);
}
} //fin de la classe Point02
Mr SYLLA. Ingenieur en informatique

90

Le constructeur ( 3/3)
public class TestPoint02
{ public static void main( String args [ ] )
{ Point02 a = new Point02 ( 10, 12 ) ; // le champ x aura la valeur 10 et
y 12
a.affiche( ) ;
a.deplace( 10,12 ) ;
a.affiche( ) ;
Point de coordonnes : 10 et 12
} // fin de la classe TestPoint02
Point de coordonnes : 20 et 24

Mr SYLLA. Ingenieur en informatique

91

Quelques rgles sur les constructeurs

Une classe peut disposer de plusieurs constructeurs: ils se diffrencieront par le nombre
et le type de leurs arguments.
Une classe peut ne pas disposer de constructeur; dans ce cas on peut instancier des
objets comme sil existait un constructeur par dfaut sans arguments et ne faisant rien.
Mais ds quune classe possde au moins un constructeur, ce constructeur par dfaut
ne peut plus tre utilis, dans le dernier exemple on ne pouvait pas faire :
Point a = new Point ( ) ;// incorrect sil ya un constructeur
Une classe peut disposer dun constructeur sans arguments qui est bien diffrent du
constructeur par dfaut (appel souvent pseudo-constructeur).
Un constructeur peut appeler un autre constructeur de la mme classe (A VOIR).
Un constructeur peut tre dclar public ou priv.
Mr SYLLA. Ingenieur en informatique

92

Construction dun objet

La construction et linitialisation des champs dun objet se font en 3 tapes :


linitialisation par dfaut de tous les champs une valeur "nulle",
linitialisation explicite lors de la dclaration du champ,
lexcution des instructions du constructeur.
public class TestInit
{ private int nombre ;
private int diviseur = 12 ;
nombre =24 nombre = 0
public TestInit( ) { nombre = 24 ;}
diviseur =12 diviseur =12
public float diviser( )
{ return (float) nombre / diviseur ;
}
}
Rsultat : 2.0
Mr SYLLA. Ingenieur en informatique

nombre = 0
diviseur =0

93

Valeur "nulle" suivant le type


du champ

Type du champ

Valeur par dfaut

boolen
char
entier(byte, short, int, long)
flottant( float, double)
objet

false
caractre de code nul
0
0.f ou 0
null

Initialisation par dfaut des champs dun objet

Mr SYLLA. Ingenieur en informatique

94

Champ dclar avec lattribut

final
public class ChampFinal
{ private final int NOMBRE ;// initialisation diffre
private final float MAX ; // initialisation diffre
private final int DIVISEUR = 12 ;// valeur fixe la dclaration
public ChampFinal( int nbre)
{ NOMBRE = nbre ;// la valeur de NOMBRE dpendra de celle de nbre
MAX = 20 ;
// la valeur de MAX est fixe 20 une seule fois.
}
public float diviser( )
{ return (float) NOMBRE / DIVISEUR ;
}
ATTENTION: chaque objet possdera son propre champ NOMBRE,
}
malgr que ce dernier est dclar final.
Mr SYLLA. Ingenieur en informatique

95

Contrat et implmentation

Une bonne conception oriente objets sappuie sur la


notion de contrat , qui revient considrer qune classe est
caractrise par un ensemble de services dfinis par :
-- les en-ttes de ses mthodes publiques ,
-- le comportement de ses mthodes .
Le reste, cest--dire les champs et les mthodes privs
ainsi que le corps des mthodes publiques, na pas tre
connu de lutilisateur . Il constitue ce que lon appelle
souvent limplmentation de la classe .
En quelque sorte, le contrat dfinit ce que fait la classe
tandis que limplmentation prcise comment elle le fait .
Le grand mrite de lencapsulation des donnes est de
permettre au concepteur dune classe den modifier
limplmentation sans que lutilisateur nait modifier les
programmes qui lexploitent .
Mr SYLLA. Ingenieur en informatique

96

Affectation dobjets

Point a ;

12
10

a = new Point (12,10 ) ;

11
14

Point b = new Point ( 11, 14 );


b
affectation dobjet

a=b;
Sera candidat au
ramasse-miettes
sil nest plus rfrenc

12
10

11
14

Dsormais a et b dsignent le mme objet.


Mr SYLLA. Ingenieur en informatique

97

Rfrence nulle: le mot cl

null
class Point03
{
private int x ; // champ x dun objet Point
private int y ; // champ y dun objet Point
public Point03 ( int abs, int ord ) // un constructeur deux arguments
{ x = abs ;
Les variables locales doivent
y = ord ;
toujours tre initialises avant toute
}
utilisation.
public Point03 coincide (Point03 p )
{ Point03 t = null ; // t est locale donc il est ncessaire de linitialiser
if ((p.x = = this.x) && ( p.y = = this.y ))
t = this;
else
t = null;
return t ;
}
} //fin de la classe Point03
Mr SYLLA. Ingenieur en informatique

98

Comparaison dobjets (1/2):


= = versus equals
public class Point03
{ private int x ; // champ x dun objet Point
private int y ; // champ y dun objet Point
public Point03 ( int abs, int ord ) // un constructeur deux arguments
{ x = abs ;
y = ord ;
}
public static void main(String args [ ] )
{
Point03 a = new Point03 ( 1,1 );
Point03 b = new Point03 ( 1,1 );
System.out.println ("avec = = :
" + a == b);
System.out.println ("avec equals :" + a.equals ( b ));
}
Rsultat
avec = = : false
} //fin de la classe Point03
avec equals : false
Mr SYLLA. Ingenieur en informatique

99

Comparaison dobjets (2/2)

==

teste sil sagit du mme objet ( pas dune copie ).


equals teste lgalit de contenu de deux objets .

ATTENTION :
dans lexemple prcdent la mthode equals dont il sagit est celle
de la classe Object (la super classe de toutes les classes en Java).
Souvent, vous serez emmen redfinir cette mthode.
Elle a pour en-tte:
public boolean equals (Object o )
Loprateur != sapplique galement des rfrences dobjet pour tester la diffrence.
Mr SYLLA. Ingenieur en informatique

100

Champs et mthodes de classe:


le mot cl static .
Champs de classe
Les champs de classe ou champs statiques existent en un seul exemplaire pour
toutes les instances de la classe. On les dclare avec le mot cl static .
public class ChampStatic
{
int n ;
static int k ;
}

ChampStatic a = new ChampStatic( ) ;


ChampStatic b = new ChampStatic( ) ;
a.n
b.n
a.k
b.k

a.k et b.k peuvent tre remplacs par ChampStatic.k . Mais si k est priv, on ne
peut faire ceci.
Mr SYLLA. Ingenieur en informatique

101

Exemple dutilisation de champs de classe

public class ChampStatic {


private static int nombreInstanceCrees; // champ static pour stocker le nombre
public ChampStatic ( )
// dobjets crs
{ nombreInstanceCrees++;// on incrmente de 1 chaque cration dun objet
}
public void affiche ( )
{
System.out.println ("nombre dobjets crs :" + nombreInstanceCrees );
}
public static void main (String args [ ])
{
ChampStatic a = new ChampStatic ( );
a.affiche ( );
ChampStatic b = new ChampStatic ( );
b.affiche ( );
}
nombre dobjets crs : 1
}
nombre dobjets crs : 2
Mr SYLLA. Ingenieur en informatique

102

Mthodes de classe
Une mthode dune classe ayant un rle indpendant de toute instance de la classe doit
tre dclare avec le mot cl static et elle ne pourra tre applique aucun objet de cette
classe, contrairement aux mthodes dinstances.
Lappel de la mthode ne ncessitera que le nom que de la classe.

ATTENTION :

Une mthode statique ne peut pas agir sur des champs usuels,
cest--dire non statiques.

Mr SYLLA. Ingenieur en informatique

103

Exemple dutilisation de mthodes de classe

public class MethodeStatic {


private long n;
private static long nombreInstanceCrees; // champ static pour stocker le nombre
public MethodeStatic( long k)
// dobjets crs
{ nombreInstanceCrees++ ;
n=k;
}
public void affiche ( )
{
System.out.println ("nombre dobjets crs :" + nombreObjet( ) );
}
public static long nombreObjet( )
return
nombreInstanceCrees;
{
}
}
Mr SYLLA. Ingenieur en informatique

104

Bloc dinitialisation statique

Remarque :
linitialisation dun champ statique se limite uniquement :
- linitialisation par dfaut,
- linitialisation explicite ventuelle.
Les blocs statiques sont souvent utiliss pour initialiser des variables complexes dont l
initialisation ne peut tre faite par une simple instruction.
Les instructions nont accs quaux champs statiques de la classe.
Les instructions dun bloc statique sont excutes de faon automatique et une seule fois
lorsque la classe est charge.

Mr SYLLA. Ingenieur en informatique

105

Exemple dutilisation de bloc statique

public class BlocStatic {


private double solde;
private static int [ ] tab ;
static

tab = new int[10]; // bloc dinitialisation dlimit par des accolades


for ( int i = 0; i < tab.length; i++)
tab[ i ] = i + 1;

} // fin du bloc static


public BlocStatic (double solde) {
this.solde = solde;
}
public static void main(String[] args) {
BlocStatic a = new BlocStatic( 12000 ); for (int i=0;i < tab.length; i++)
System.out.print (tab[i]+" ");
}
}// fin de la classe
Mr SYLLA. Ingenieur
1 2en informatique
3 4 5 6 7 8 9 10
106

Surdfinition de mthodes

La surdfinition de mthodes signifie quun mme nom de mthode


peut tre utilis plusieurs fois dans une mme classe . Dans ce cas,
le nombre et/ou le type des arguments doit ncessairement chang.
On peut parler indiffremment de surdfinition, surcharge ou
overloading (en Anglais).

Mr SYLLA. Ingenieur en informatique

107

Exemple de surdfinition de mthode

public class ExempleSurdefinition {


private int x ;
private int y ;
public ExempleSurdefinition (int abs, int ord ) { x=abs; y=ord; }
public void deplace (int dx, int dy) { x += dx ; y += dy ;
}
public void deplace (int dx ) { x += dx ;
}
public void affiche(){ System.out.println(" Point de coordonnees :"+ x+ " "+y);}
public static void main(String[] args) {
ExempleSurdefinition ex = new ExempleSurdefinition(10,10);
ex.deplace ( 10 );// appel de deplace ( int )
ex.affiche ( );
ex.deplace( 10, 10 );// appel de deplace (int , int )
ex.affiche( );
Point de coordonnes : 20 10
}
Point de coordonnes : 30 20
}
Mr SYLLA. Ingenieur en informatique

108

ATTENTION :

Il peut y avoir des cas dambigut :


public void deplace (int dx, short dy)
{ x += dx ;
y += dy ;
}
public void deplace (short dy, int dx )
{ x += dx ;
}
avec : ExempleSurdefinition a = new
ExempleSurdefinition( 10, 12) ; short b;
lappel a.deplace( b ,b) causera une erreur.

Mr SYLLA. Ingenieur en informatique

109

Surdfinition de constructeurs
Les constructeurs peuvent tre surdfinis comme toute autre mthode.
public class Individu {
private String nom;
private String prenom;
private Compte c;
/* constructeur deux arguments*/
public Individu ( String lenom, String leprenom ) {
nom = lenom;
prenom = leprenom;
}
/* constructeur trois arguments */
public Individu (String lenom, String leprenom, Compte cp) {
nom = lenom;
prenom = leprenom;
c = cp; } }
Mr SYLLA. Ingenieur en informatique

Attribut de type
objet. Il doit exister
obligatoirement une
classe Compte.

110

Transfert dinformations
avec les mthodes
En Java, la transmission dinformations se fait toujours par valeur.
La transmission, par exemple dun argument une mthode ou
dune valeur de retour se fait toujours par valeur.
A RETENIR

RAPPEL

Cette transmission a des consquences totalement


diffrentes, selon que lon manipule des types primitifs ou
bien des types objet ( c--d des rfrences).
Transmission par valeur : la mthode reoit une copie de la
valeur de largument effectif sur laquelle elle travaille. Pas de
possibilit dagir sur la valeur de largument effectif.
Transmission par rfrence ( par adresse): la mthode reoit
ladresse de largument effectif sur laquelle elle travaille
directement. Ici, possibilit de modifier donc la valeur de
largument effectif.
Mr SYLLA. Ingenieur en informatique

111

Illustration de la transmission de messages avec


les mthodes (1/2)
public class TransValeurTypePrimitif {
private double res;
public TransValeurTypePrimitif (double n) {
Argument muet.
res = n;
2
}
public double add ( double p )
10
p
{
p contient
return res += p;
une copie
4
}
3 de la valeur
public static void main(String[] args) {
de largument
TransValeurTypePrimitif trans = new TransValeurTypePrimitif (12);
effectif.
System.out.println ( trans.add ( 10 ) );
}

10

1
}
Mr SYLLA. Ingenieur en informatique

Argument effectif.
112

Illustration de la transmission de messages avec


les mthodes (2/2)
public class Point {
private int x;
private int y;
public Point (int abs, int ord) {
x = abs;
y = ord;
}
public boolean coincide ( Point p)
p
{
return ( p.x == x && p.y == y);
}
public static void main (String [ ] args) {
Point a = new Point(10,12);
Point b = new Point(12,12);
System.out.println( a.coincide ( b ) );
}}

Rfrence un objet de type Point


transmise en argument dune
Mthode.

12
12
b
a

Mr SYLLA. Ingenieur en informatique

10
12
113

Autorfrence : this

( )

Dans un appel de la forme a.coincide ( b ), la mthode reoit une information lui


permettant didentifier lobjet ayant fait lappel. Si linformation est transmise, la
mthode pourra agir sur les champs spcifiques de lobjet.
Cette transmission est gre automatiquement par le compilateur.
Mais on peut vouloir agir sur lobjet globalement au lieu dagir sur les champs.
Dans ce cas Java utilise le mot cl this. Dans lexemple prcdent, on peut remplacer
la mthode coincide par celle-ci:
public boolean coincide ( Point p)
{ // this reference ici lobjet courant ie celui ayant fait lappel de coincide
return ( p.x == this.x && p.y == this.y);
}
Dans un appel a.coincide (b) a dsigne lobjet courant.
Mr SYLLA. Ingenieur en informatique

114

Autorfrence : this

( 2/2)

Lutilisation de this est trs pratique dans lcriture des mthodes et surtout des
constructeurs.

// noms de champs et noms dattributs


//diffrents
public Point ( int abs, int ord ) {
x = abs;
y = ord;
}

// noms de champs et noms dattributs


//identiques
public Point ( int x, int y ) {
this.x = x;
this.y = y;
}

Mr SYLLA. Ingenieur en informatique

115

Appel dun constructeur dans un


autre constructeur. (1/2)
Un constructeur peut appeler un autre constructeur de la mme classe en utilisant le
mot cl this. Lobjectif majeur est la simplification du code et aussi pour des
problmes de scurit.
public class Individu {
Cette classe peut tre
private String nom;
crite de faon plus
private String prenom;
sophistique comme
private Compte c;
suit
public Individu ( String lenom, String leprenom ) {
nom = lenom;
prenom = leprenom;
}
public Individu (String lenom, String leprenom, Compte c1) {
nom = lenom;
prenom = leprenom;
c = c1;
116
} }
Mr SYLLA. Ingenieur en informatique

Appel dun constructeur dans un


autre constructeur. (2/2)
public class Individu2 {
private String nom;
private String prenom;
private Compte c;
public Individu2 ( String nom, String prenom ) {
this.nom = nom;
this.prenom = prenom;
}
public Individu2 (String nom, String prenom, Compte c) {
// appel du constructeurs a deux arguments

this (nom, prenom);


this. c = c;
} }

ATTENTION :

Lappel this () doit ncessairement tre la premire instruction


du constructeur appelant.
Mr SYLLA. Ingenieur en informatique

117

Objet membre
Objet membre = rfrence un objet
public class Point {
private int x;
private int y;
public Point (int abs, int ord) {
x = abs;
y = ord;
}
public void affiche ( )
{
System.out.println(" Point :" +x " " +y);
}
}

public class Cercle {


private double r; //rayon du cercle
private Point p;// objet membre
public Cercle (double r, int x, int y) {
this.r = r;
p = new Point (x, y);
}
public void affiche ( )
{System.out.println("Cercle de rayon :" +r);
System.out.print(" et de centre:" );
p.affiche());
}
}
118

Mr SYLLA. Ingenieur en informatique

Les classes internes


Une classe est dite interne lorsque que sa dfinition est situe
lintrieur de la
dfinition dune autre classe. Les classes internes (inner classes)
peuvent tre situes diffrent niveau d'une classe normale.
Il existe quatre types de classes imbriques :
- les classes internes simples, dfinies au niveau des classes,
- les classes internes statiques, reprsentant une classe de sommet
intrieure,
- les classes locales, dfinies au niveau des mthodes,
- les classes
anonymes, dfinies
au niveau
d'une instance.
Les classes
internesinternes
sont particulirement
utiles pour
:
- permettre de dfinir une classe l'endroit ou une seule autre en a besoin
- dfinir des classes de type adapter (essentiellement partir du JDK 1.1 pour traiter
des venements mis par les interfaces graphiques)
- dfinir des mthodes de type callback d'une faon gnrale.
Mr SYLLA. Ingenieur en informatique

119

Classes internes simples(1/5)


package essai01;
public class ClasseParente {
private int x = 10, static int y = 20;
public int addition ( ) { return (x + y);
}
public class ClasseInterne
//DEBUT CLASSE INTERNE
{ static int p = 20; //erreur de compilation,
static final int k = 12; //constante statique
public int multiplier ( )
{ return x*y + addition ( );
}
} //FIN CLASSE INTERNE
public static void main (String [ ] args) {
ClasseParente ob_out = new ClasseParente ( );
//ClasseInterne ob_in0 = new ClasseInterne ( ); IMPOSSIBLE
ClasseInterne ob_in = ob_out.new ClasseInterne ( );
System.out.println (ob_in.multiplier ( ));
// System.out.println (ob_out.multiplier ( ));//ERREUR
// System.out.println (ob_in.addition ( )); IMPOSSIBLE
Mr SYLLA. Ingenieur en informatique
}}

120

Classes internes simples(2/5)

Quelques remarques importantes:

Une classe interne peut tre dclare avec nimporte quel modificateur daccs ((
(public, protected, par dfaut ou private) et les modificateurs abstract, final, static.
Elles sont membres part entire de la classe qui les englobe et peuvent accder tous les
membres de cette dernire.
Les classes internes ne peuvent pas tre dclares l'intrieur d'initialiseurs
statiques (blocs statiques).
Les classes internes ne doivent pas dclarer de membres statiques, sauf s'ils
comportent le modificateur final, dans le cas contraire, une erreur de compilation se
produit. Toutefois, les membres statiques de la classe externe peuvent tre hrits
sans problme par la classe interne.
Les classes imbriques sont capables d'accder toutes les variables et mthodes de
la classe parente, y compris celles dclares avec un modificateur private.
121
Mr SYLLA. Ingenieur en informatique

Classes internes simples (3/5)

On retient:
La notation particulire:

ClasseInterne ob_in = ob_out.new ClasseInterne();


spcifie que l'objet cr est une instance de la classe interne
associe l'objet rsultant de l'instanciation d'une classe de plus haut niveau.

L'instanciation de la classe interne passe obligatoirement par une instance


pralable de la classe d'inclusion.
La classe parente est d'abord instancie, puis c'est au tour de la classe interne de l'tre
par l'intermdiaire de l'objet rsultant de la premire instance.

Mr SYLLA. Ingenieur en informatique

122

Classes internes simples (4/5)

Il est possible d'utiliser une mthode de la classe parente pour crer directement
une instance de la classe interne. Toutefois, lors de l'appel de la mthode, il sera
ncessaire de crer une instance de la classe d'inclusion.
package essai0;
public class ClasseParente02 {
private int x = 10, int y = 20;
public int addition ( )
{ ClasseInterne02 obj_in = new ClasseInterne02( );
return (x + y)+ obj_in .multiplier ( );
}
public class ClasseInterne02
{ public int multiplier ( )
{ return x*y ;
}
}
}
Mr SYLLA. Ingenieur en informatique

123

Classes internes simples (5/5)


public class ClasseParente03 {
private int x = 10, int y = 20 ;
public int addition( )
{ ClasseInterne03 obj_in= new ClasseInterne03 (10,10);
return (x + y)+ obj_in.multiplier();
}
public class ClasseInterne03
{ private int x = 12;

private int y = 14;

public ClasseInterne03 (int x, int y)


{ this.x =

x + ClasseParente03.this.x;
this.y = y + ClasseParente03.this.y;

Parfois, il peut
tre ncessaire
de
distinguer les
variables
situes dans les
classes
interne et
externe.

}
public int multiplier( )
{ return x*y ;
} }}
Mr SYLLA. Ingenieur en informatique

124

Classes internes statiques


Elles sont membres part entire de la classe qui les englobent et peuvent
accder uniquement aux membres statiques de cette dernire.
public class Parente04 {
private static int x = 1, y = 2;
private int z = 3;
public int addition ( ){ return x + y + z;}
public static int multiplier( ){ return x*y;}
public static class Interne04{
private static int k = 1;
private int p = 2;
public void diviser ( )
{ System.out.println (new Parente04( ).addition ( )/p+x+y);}
}
public static void imprimer(){
System.out.println ( multiplier ( ) / x+y+k );} }
public static void main(String [ ] args) {
Parente04.Interne04( ).imprimer ( );
new Parente04.Interne04( ).diviser ( )}
Mr}SYLLA. Ingenieur en informatique

Les classes internes


statiques peuvent
accder l'ensemble
des membres
statiques de leur
classe parente,
l'instar des mthodes
de classe.

125

Classes locales

Une classe locale est dfinie l'intrieur d'une mthode ou un bloc, et agt
librement et essentiellement au sein de cette dernire.
Elles peuvent tre static ou non.
Il n'est possible de dclarer des classes locales, dont la porte est limite au bloc,
qu'avec les modificateurs final ou abstract. Les modificateurs suivants : public,
protected, private et static, sont interdits.
Les donnes membres d'une classe externe peuvent tre accds par la classe locale.
Seules les variables locales et les paramtres de la mthode d'inclusion, dclares
avec le modificateur final, peuvent tre exploites par les classes internes locales,
sinon une erreur se produit lors de la compilation. De plus, ces variables doivent
tre imprativement initialises avant leur emploi dans la classe locale.
Mr SYLLA. Ingenieur en informatique

126

Classes locales
public class ClasseExterne {
private int x,y; private static int z;
public void addition( int p){
final int k = 9;
int u = 121;// inutilisable dans
ClasseLocale
class ClasseLocale {
boolean verif ( )
{if (x+ y+ k = = z) return true;
else
return false;
}
}
}// fin bloc de mthode
}

p et u ne peuvent pas
tre utiliss dans ClassLocale.
Par contre , k est dclare final
donc on peut lutiliser.
REMARQUE:
Lorsqu'une classe est
dclare dans une mthode
statique, alors les variables
d'instances de la classe externe
ne sont plus accessibles pour la
classe imbrique.
L'utilisation d'une classe locale
ne dpend pas de l'instanciation
d'une classe externe.

Mr SYLLA. Ingenieur en informatique

127

Classes anonymes

Les classes anonymes (anonymous classes) sont dclares immdiatement aprs


l'expression d'instanciation d'une classe, permettant directement d'tendre ou
d'implmenter respectivement la classe ou l'interface instancie.
Elles sont dfinies et instancies la vole sans possder de nom.
new Classe ([Liste d'arguments]) { // Instructions de la classe anonyme... };
new Interface ( ) { // Instructions de la classe anonyme... };
Les classes anonymes obissent aux mmes restrictions que les classes locales et de plus,
ne peuvent ni tre abstraites (abstract) ni tre statiques (static).
Par contre, elles portent toujours implicitement le modificateur final.
En fait, aucun modificateur n'est permis dans une dclaration de classe anonyme
On verra lutilit des classes anonymes en programmation vnementielle.
Mr SYLLA. Ingenieur en informatique

128

Gros plan sur les packages


Un package regroupe un ensemble de classes sous un mme espace de nomage.
Les noms des packages suivent le schma : name.subname
Une classe Watch appartenant au package time.clock doit se trouver
obligatoirement dans le fichier time/clock/Watch.class.
Les packages permettent au compilateur et la JVM de localiser les fichiers
contenant les classes charger.
Linstruction package indique quel paquetage appartient la ou les classe (s) de
lunit de compilation (le fichier).
Les rpertoires contenant les packages doivent tre prsents dans la variable
denvironnement CLASSPATH.
En dehors du package, les noms des classes sont: packageName.className.
Linstruction import packageName permet dutiliser des classes sans les
prfixer par leur nom de package.
Les API sont organises en package (java.lang, java.io, javax.swing,.)
Mr SYLLA. Ingenieur en informatique

129

Droits daccs et paquetage


En Java, il y a quatre types de droits daccs aux mthodes et aux champs dun objet
dune classe. Autrement dit, la porte de la visibilit des mthodes et champs
est assure par les mots cls: private, protected, vide (droit de paquetage), et public.
Nous dcrivons ici, la notion de droit daccs paralllement la notion de paquetage.
Nous sparons la visibilit des champs et celle des mthodes.

Mr SYLLA. Ingenieur en informatique

130

Paquetage et visibilit des champs


(encapsulation des membres)

class c1{
public

class c4 extends c1{


. a c
}

int a;
int b;
protected int c;
private
int d; }

package B
package A
class c2 extends c1{

a bc

class c3 {

class c5 {

a bc
.
}

..
}

Mr SYLLA. Ingenieur en informatique

131

Exemple daccs aux membres

sylla/classes/ graph/2D/ Circle.java


package graph.2D;
public class Circle {
..
}

sylla/classes/ graph/3D/ Sphere.java


package graph.3D;
public class Sphere {
..
}

sylla/classes/ TestPackage/ MainClass.java


package testpackage;
import graph.3D.Sphere, //ncessaire
import graph.2D.*;
public class MainClass {
public static void main (String args [ ]){
graph.2D.Circle c1= new graph.2D.Circle (50);
Circle c2 = new Circle (80);
graph.3D.Sphere s1 = new graph.3D.Sphere (100); //OK
Sphere s2 = new Sphere (50), // error: class testpackage.Sphere not
found
Mr SYLLA. Ingenieur en informatique
}

132

Paquetage et visibilit des mthodes

class c1{
public void f( );
void g( );
protected void h( );
private
void k( );

class c4 extends c1{


. f( ) h( )
}
}
package B

package A
class c2 extends c1{

f( ) g( ) h( )

FIN DU CHAPITRE

class c3 {

class c5 {

f( ) g( ) h( )
.
}

..
}

f( )

Mr SYLLA. Ingenieur en informatique

133

Você também pode gostar