1
Programmation Orientée
Objet: Java
Sadok Ben Yahia, PhD
Faculté des Sciences de Tunis
sadok.benyahia@fst.rnu.tn
2
Plan
❑Introduction au monde Objet
❑La langage Java: Introduction et caractéristiques
❑Syntaxe et structures de contrôle
❑Héritage
❑Les exceptions
❑Les Entrées/Sorties
❑Connexion Java et les bases de données: l’API JDBC
3
Éléments de base du langage Java
❑Commentaires
❑ Trois notions sont admises pour l ’insertion de commentaires:
❑ // commentaire sur une seule ligne
❑ /* commentaire sur une ou plusieurs lignes */
❑ /** commentaire d ’explication */
❑Les commentaires d’explication sont des commentaires sur plusieurs lignes
permettant de générer automatiquement une documentation avec l’utilitaire javadoc
(générateur automatique de document)
❑ int i; // c ’est une variable entière
4
Vocabulaires Objet…
❑Tout objet sauf :
❑Les types primitifs (int, float,…)
❑Les chaînes sont des objets
❑Il existe pour chaque type simple, une vision objet (classe Integer,…)
5
Éléments de base du langage Java
❑Point virgule, blocs et blancs
❑Dans Java, les instructions se terminent par un point virgule (;)
❑Un bloc d’ instructions est délimité par des accolades { et }
❑Les blancs sont autorisés entre les éléments du code source (espaces,
tabulations et sauts de ligne)
{
int x;
x= 5*8;
}
6
❑Identificateurs : Les identificateurs permettent de nommer les différents éléments
(variables, constantes, classe, méthodes, packages,…) des programmes Java
❑ Un identificateur commence par une lettre, un trait de soulignement (-) ou un signe
dollar ($)
❑ les caractères suivants peuvent également comporter des chiffres
❑ les caractères Unicode supérieurs à 0x00c0, permettent d’introduire dans les
identificateurs des caractères internationaux tels que ç, ü,…
❑Les identificateurs opèrent une distinction majuscules/minuscules et n’ont pas de
longueur maximale
Identificateurs
●$valeur-systeme // identificateur valide
●ça // identificateur non valide (ç premier caractère)
●note# // identificateur non valide (# n’est pas au dessus de 0x00c0)
7
❑identificateurs: sont composés d’un ou de plusieurs mots. Pour faciliter la lisibilité,
la première lettre de chacun des mots est conventionnellement en Majuscule, sauf
pour le premier mot qui est fonction de la nature de l ’identificateur
❑ Classes ou Interfaces : la première lettre de l’identificateur d’une classe doit
conventionnellement être en majuscule
❑Méthodes ou Variables : la convention de nommage indique que la première lettre
du mot doit être en minuscule
❑Constantes : la convention de nommage indique que leur nom doit être en
majuscule
❑Autres conventions
❑Structure de contrôle : utilisez des ({ et }) autour des instructions, même s’il s ’agit
d’une seule, lorsqu’elles font partie d ’une structure de contrôle, telle que if-else ou
for.
❑Placez une seule instruction par ligne, et utilisez une indentation pour que le code
soit plus lisible.
Identificateurs: Conventions de Codage
8
Mots réservés
abstract boolean break byte
switch case catch char
class final continue default
do double else
extends
false finally float for
transient if implements import
instanceof int interface long
native new null package
private protected public return
short static super synchronized
this throw throws true
try void while
9
Les types de données
❑Java est un langage fortement typé : chaque variable et chaque expression
possède un type bien défini
❑Les types de données de Java sont divisés en deux grands groupes
❑Les types primitifs (ou de base) : boolean, int, short, byte, float, long, double,
char
❑Le type référence : chaîne de caractères (String),tableau ou classe
10
boolean
● Type défini sur 1 bit (1 octet ?)
● Valeurs possibles :
{false, true}
● Déclarations possibles de variables:
boolean b;
boolean fini=false;
● Valeur par défaut d’une variable champ de classe : false
11
char
● Type défini sur 16 bits.
● Valeurs possibles :
{' u0000' , …, ' uFFFF' }
● Déclarations possibles de variables:
char c;
char espace=' ';
● Valeur par défaut d’une variable champ de classe : ' u0000'
● Le jeu Unicode (codé sur 2 octets) permet de gérer tous les caractères
de toutes les langues écrites
● Le jeu ASCII/ANSI (codé sur 1 octet) est un sous-ensemble du jeu
Unicode : les 255 premiers caractères.
● http://www.unicode.org/
12
Les littéraux du type char
●Caractères imprimables
▪entre simples quotes (apostrophes) : 'a'
▪mais pas entre doubles quotes (guillemets) : "a"
●Caractères spéciaux
▪entre simples quotes et en utilisant une séquence
d'échappement ( et un caractère)
●Tous les caractères
▪entre simples quotes et en utilisant une notation
hexadécimale de la forme u????
13
Exemples
backspace 'b' 'u0008'
tabulation 't' 'u0009'
new line 'n' 'u000a'
carriage return 'r' 'u000d'
form feed 'f' 'u000c'
Simple quote ''' 'u0027'
Double quote '"' 'u0022'
Antislash '' 'u005c'
14
Les types entiers
01111111
10000000
byt
e
11111111
00000000
shor
t 01111111
10000000
11111111
00000000
11111111
00000000
11111111
01111111
00000000
10000000
in
t
11111111
00000000
11111111
00000000
11111111
11111111
00000000
00000000
11111111
11111111
11111111
01111111
00000000
00000000
00000000
10000000
lon
g
valeur
max
valeur min
Représentation en
complément à 2
15
byte
● Type défini sur 8 bits.
● Valeurs possibles :
{-27
, …, 27
-1} soit de -128 à 127
● Déclarations possibles de variables:
byte b;
byte octetLu=-1;
● Valeur par défaut d’une variable champ de classe : (byte)0
16
short
● Type défini sur 16 bits.
● Valeurs possibles :
{-215
, …, 215
-1} soit de –32768 à 32767
● Déclarations possibles de variables:
short s;
short longueur=100;
● Valeur par défaut d’une variable champ de classe : (short)0
17
int
● Type défini sur 32 bits.
● Valeurs possibles :
{-231
, …, 231
-1} soit de –2 147 483 648 à …
● Déclarations possibles de variables:
int i;
int nbLignes=10;
● Valeur par défaut d’une variable champ de classe : 0
18
long
● Type défini sur 64 bits.
● Valeurs possibles :
{-263
, …, 263
-1} soit –9 223 372 036 854 775 808L à
● Déclarations possibles de variables:
long l;
long capacite=34500;
● Valeur par défaut d’une variable champ de classe : 0L
19
Les littéraux entiers
●Il est possible d'utiliser une notation hexadécimale pour coder
une valeur entière.
byte maxByte = 0x7F;
short maxShort = 0x7FFF;
int i = 0x2a11bc10;
long n = 2011L;
●Par défaut, un littéral entier est de type int.
●Un suffixe L permet d’identifier un littéral long.
●Un préfixe 0 permet d’utiliser une notation octale
20
Les types réels
+/- 3.4E38 avec environ 7 chiffres de précision
float
doubl
e
Norme IEEE 754
+/- 1.7E308 avec environ 15 chiffres de précision
21
float
● Type défini sur 32 bits.
● Valeurs possibles :
Définies par la norme IEEE 754
● Déclarations possibles de variables:
float f;
float volume=34.5;
● Valeur par défaut d’une variable champ de classe : 0.0F
22
double
● Type défini sur 64 bits.
● Valeurs possibles :
Définies par la norme IEEE 754
● Déclarations possibles de variables:
double d;
double surface=100;
● Valeur par défaut d’une variable champ de classe : 0.0D
23
Les littéraux réels
● Par défaut, un littéral réel est de type double.
● Un suffixe F permet d'identifier un littéral float.
● Un suffixe D permet d'identifier un littéral double.
24
Variables, déclarations et affectations
❑L’utilisation d ’une variable dans Java doit toujours être précédée par la
déclaration de celle-ci. Le compilateur va utiliser les informations associées à la
déclaration de la variable pour effectuer des vérifications : compatibilité de
type dans les expressions, visibilité de la variable,…
❑La déclaration d ’une variable s’effectue en préfixant le nom de la variable par
sont type « int i »;
❑On peut préciser (d’une façon optionnelle) un modificateur (qualifier) à une
variable
❑ le modificateur final : précise que la valeur de la variable ne pourra
plus être changée après son affectation initiale
❑Le type d ’une variable est soit un type de base soit une référence
❑Deux façon de décrire des variables, soit en utilisant un type simple comme
int et float
❑un type class, défini par le programmeur
double d =1.3;
final float
f=0.25;
25
Opérateurs
. Membre objet Accède à un membre d’un objet
(<type>) type de données Convertit un type de données
+ chaîne Joint des chaînes (concaténation)
nombre Additionne
- nombre C’est le moins unaire (inverse le signe du
nombre)
nombre Soustrait.
! booléen C’est l’opérateur boolean NOT.
& entier, booléen C’est à la fois l’opérateur au niveau bits (entier) et
boolean AND. Quand il est doublé (&&), c’est le AND
conditionnel boolean.
= la plupart des éléments Affecte un élément à un autre élément
Opérateur Opérande
Comportement
26
Opérateurs…
java.lang
monpackage
. [] ()
++ -- ! ~ instanceof
* / %
+ -
<< >> >>>
< > <= >=
== !=
&
^
&&
||
?:
= Op=
,
Précédence des opérateurs (de la plus grande à la
plus petite). Les opérateurs de même niveau sont
évalués depuis la gauche
27
Opérateurs…
Opérateur Action Exemple
- Négation i=-j;
++ Incrémentation i++;
de 1
-- Décrémentation i--;
de 1
Opérateur Action Exemple
+ Addition i=j+k ;
+= i+=2;
//i=i+2;
- Soustraction i=j-k;
-= i-=j;
* Multiplication x=2*y;
*= x*=x;
/ Division i=j/k;
/= x/=10;
//x=x/10;
% Modulo i=j%k;
%= i%=2;
28
Opérateurs…
< Plus petit que x<i;
> Plus grand que x>i;
<= Plus petit ou égal x<=i;
>= Plus grand ou égal x >=i;
== Egal à i==2;
!= Différent de i!=2;
Opérateur Action Exemple
! Négation !p;
& ET P &(i<1);
| OU p | q;
^ OU exclusif p^false;
&& ET évalué p&&q&&r;
|| OU évalué p||q||r;
!= Nég. Assigné p!=p;
&= ET Assigné p&=q;
|= OU Assigné p|=q;
?: Si alors sinon
(i<10)?(j=2):(j=3);
Opérateur Action Exemple
29
Opérateurs bit à bit
● Et : & Complément : ~
● Ou : | Ou exclusif : ^
● Ces opérateurs s’utilisent avec des entiers.
01101001
a 10101011
b
00101001
a&
b
11101001
a | b
11000010
a^b 10010110
~a
30
Opérateurs de décalage
●Décalage à gauche :
<< (insertion de zéros)
●Décalage à droite :
>> (insertion du bit de signe)
>>> (insertion de zéros)
●Ces opérateurs s’utilisent avec des entiers.
●Décaler d’une position à gauche (resp. à droite) une valeur
entière revient à la multiplier (resp. à la diviser) par 2.
31
Opérateurs de décalage
11101001
a
10010000
a<<
4 insertion de
zéros
bits
éliminés
11101001
a
11111110
a>>
4 insertion du bit de
signe
bits
éliminés
11101001
a
00001110
a>>>
4 insertion de
zéros
bits
éliminés
32
Opérateurs d’affectation
●Opérateur simple d’affectation : =
●Opérateurs d’affectation combinés avec un opérateur
arithmétique :
+= -= *= /= %=
●Opérateurs d’affectation combinés avec un opérateur bit à bit
:
&= |= ~= ^= <<= >>= >>>=
●Equivalence
lhs op= rhs est un raccourci de lhs = lhs op (rhs);
33
Opération de transtypage
●Transtypage (cast) : (typeCast)expression
●Cette opération permet de convertir le type de l’expression
en typeCast.
●L’opération peut diminuer la généralité (downcasting) du type
avec un risque de perte d’informations. Elle peut également
augmenter la généralité (upcasting) du type (sans aucun
risque).
●Du moins général au plus général (pour les types primitifs),
on a :
byte → short → int → long → float → double
34
Cast implicite
●Lors d’une affectation, une opération de upcasting implicite
peut avoir lieu (lorsque la partie droite de l’affectation est d’un
type moins général).
●Par exemple, lors de l’évaluation de :
double x = 15;
la valeur entière 15 est transformée automatiquement en la
valeur réelle (double) 15.0 avant d’être affectée à la variable
x.
35
Cast explicite
●Lors de certaines opérations, il est parfois nécessaire
d’utiliser explicitement une opération de transtypage.
● Par exemple, l’exécution de :
int x=3, y=2;
double z = x/y;
affecte la valeur 1.0 à z
●Pour que la valeur 1.5 soit affectée à z, il faut :
double z = (double)x/y;
afin de convertir x en double et que la division soit ainsi une
division réelle.
36
Instruction
❑ Une instruction est une seule commande. Une commande peut occuper plusieurs
lignes de code, mais le compilateur lit l’ensemble comme une seule commande.
❑ Les instructions individuelles (habituellement sur une seule ligne) se terminent par
un point-virgule (;)
❑Les groupes d’instructions (sur plusieurs lignes) se délimitent par des accolades
❑Les règles de portée déterminent où est reconnue une variable dans un programme.
Les variables appartiennent à deux catégories de portée principales :
❑ Variables globales : Variables reconnues dans toute une classe.
❑ Variables locales : Variables reconnues uniquement dans le bloc de code où
elles sont déclarées.
❑Une variable déclarée dans un bloc de code n’est visible que dans ce bloc et dans les
blocs qui y sont imbriqués.
class Portée {
int x = 0;
void méthode1() {
int y = x; }
void méthode2() {
int z = 1;
z = y; // Cela ne fonctionne pas :
// y est définie hors de la portée de
méthode2.
} }
37
Bloc d'instructions
● Un bloc d'instructions est une séquence d'instructions délimitée par
une paire d'accolades.
● Il est possible de déclarer des variables dans un bloc.
● La portée (visibilité) d'une variable commence à sa déclaration
jusqu'à la fin du bloc.
38
Bloc
externe
Bloc
interne
{
int i;
…
{
int j=0;
…
double x = 3.5;
…
}
}
Exemple
i
j
x
39
Variables homonymes
● En Java, il n'est pas possible déclarer des variables homonymes
dans deux blocs imbriqués.
● En C/C++, il est possible de le faire :
● La variable interne cache la variable externe
● Cela constitue une source d'erreur ☹
40
{
int i;
…
{
int i=0;
…
double x = 3.5;
…
}
}
Bloc
externe
Bloc
interne
Exemple
i
i
x
confli
t
confli
t
41
Les structures de contrôle
42
Les structures de contrôles
❑if (Expr) S1; else S2;
❑ L’instruction S1 est exécutée si
l’expression logique Expr est évaluée à
vraie.
❑L’instruction S2 est exécutée si l’expression
logique Expr est évaluée à fausse
❑ switch (Expr1)
❑ {
❑ case constante_1: statements_1
❑ case constante_2: statements_2
❑ …
❑ case constante_N: statements_N
❑ default: statements_default
❑ }
static int ternary(int i)
{
if (i<1) return i * 100;
return i * 10;
// return i<10 ? i*100 :
i*10;
}
switch (xCursor) {
case milieuEcran:
corpDePage = true;
break;
case basEcran:
case hautEcran:
corpDePage = false;
}
43
Les structures de contrôles
❑ while (condition)
❑ Bs; //une ou un bloc
d’instructions
❑ do S1 while (condition); // Exécuter
S1 tant que l’expression condition est
vraie
❑ for (e1;e2;e3)
❑ Bs;
❑ e1 : initialise l’itérateur (compteur), cette
expression n’est exécutée qu’une seule fois;
❑ e2 : exprime la condition de test (tant qu’elle
est vraie on continue la boucle) ; elle est
vérifiée à chaque itération
❑ e3 : modifie l’itérateur, elle est exécutée à
chaque itération
44
Les structures de contrôles
// WhileTest.java
/** * montre la boucle while
*/
public class WhileTest {
public static void main(String
args[]) {
double r = 0;
while (r <
0.99d)
{
r =
Math.random();
System.out.println(r);
}
}
}
// ListCharacters.java
/** * montre la boucle for" en
listant tous les caractères
ASCII */
public class ListCharacters
{
public static void main(String
args[])
{for ( char c = 0; c < 128; c+
+ )
if (c != 26 ) // ANSI Clear
screen
System.out.println( "value: " +
(int)c + " character: " + c );
}
}
45
Etiquette, break, continue et return
❑Etiquette : N’importe quelle qu’elle instruction
peut être étiquetée.
❑Nom_etiquette: instruction ou bloc
d’instruction;
❑Rupture (break)
break ;
break label;
❑Continuation (continue)
continue;
continue label;
❑Retourner (return)
return;
return Expression;
boucle1:
for (int i=0; i<10; i++){
for (int j=0; j<15 j++){
System.out.println(i+“/“+j);
}
}
class TestBreak{
public static void main (String args[]){
bloc1:
for (int i=0; i<10; i++)
for (int j=0; j<10; j++){
System.out.println(i+“/“+j);
if (J==1) break; // quitte la boucle j
if (i==2) break bloc1; // quitte bloc1
}
}
}
46
Etiquette, break, continue et return
// BreakAndContinue.java
/** les clauses break et continue */
public class BreakAndContinue {
public static void main(String args[]) {
for(int i = 0; i < 100; i++)
{ if(i == 74) break; //
quitter boucle if(i % 9 !=
0) continue; // iter.suiv.
System.out.println(i);
}
int i = 0; //
while(true)
{ i++;
int j = i * 27;
if(j == 1269) break; //
quitter boucle
if(i % 10 != 0)
continue; // Top
System.out.println(i);
}
Résultat : (avec un nombre par
ligne)
0 9 18 27 36 45 54 63 72 10 20 30
40
47
Les types de données : tableau
❑Tableau : est un objet référencé
❑Une variable de type tableau n’est pas un type élémentaire (c’est une
référence sur un tableau)
❑Déclaration
❑type NomTableau[]  ou type [] NomTableau
❑type NomTableau[][]
❑Allocation et initialisation
❑int T1[]=new int[12];
❑int T2[]={5,7,-12,8};
❑ L’attribut length : retourne la taille d’un tableau
48
Les types de données : tableau
❑Allocation et initialisation
❑int T1[]=new int[12]; allocation dynamique de 12 entiers pour T1
0 0 0 0 0 0 0 0 …
T1
49
Les types de données : tableau
Class Tableau1D
{public static void main(String[] args)
{int[] tabent={1,2,3};
for (int i=0; i<tabent.length;i++)
{System.out.println(tabent[i] + “ “ );}
System.out.println ();
int[] tab2ent= new int [5];
boolean [] tbool= new boolean[3];
tab2ent[2]=20; tab2ent[4]=50;
for (int i=0; i<ta2bent.length;i++)
{System.out.println(ta2bent[i] + “ “ );}
for (int i=0; i<tbool.length;i++)
{System.out.println(tbool[i] + “ “ );}
}}
Résultat d’exécution
1 2 3
0 0 20 0 50
false false false
50
Les types de données : tableau d’objets
❑Déclaration identique
❑Balle [ ] tabBalle=new Balle[6]; un tableau d’éléments pouvant
référencer 6 objets de type Balle
❑La déclaration du tableau ne crée pas les objets référencés
null null null null null null
tabBall
e
❑Les références des objets crées doivent être affectés au tableau par
la suite
❑TabBalle[0]= new Balle(4);
❑TabBalle[1]= new Balle(6);
❑…
51
Les notions orientées objets dans JAVA
❑Une classe représente une « famille » d’objets qui partagent les mêmes
propriétés et méthodes.
❑Les objets d’une classe sont aussi appelés les instances de la classe
❑Une classe sert à définir les propriétés des objets d’un type donné
❑Elle décrit l’ensemble des données (attributs, caractéristiques ou
variables d’instance) et des opérations sur les données (méthodes)
❑Elle sert de modèle pour la création d’objets
Public class Point {
int x ; // abscisse du point
int y ; // ordonnée du point
public void translate (int dx, int dy) {
x = x + dx ;
y = y + dy ;
}
// Calcul la distance du point à l’origine
public double distance() {
return Math.sqrt (x * x + y * y) ;
}
}
Variables
d’instances
Méthodes
52
Les notions orientées objets dans JAVA
ClassModifiers class ClassName [extends SuperClass]
[implemenents Interfaces]
{ // insérer ici les champs et les méthodes }
Modificateur Role
abstract la classe contient une ou des méthodes abstraites, qui n'ont
pas de définition explicite. Une classe déclarée abstract ne
peut pas être instanciée : il faut définir une classe qui hérite de
cette classe et qui implémente les méthodes nécessaires pour
ne plus être abstraite.
final la classe ne peut pas être modifiée, sa redéfinition grâce à
l'héritage est interdite. Les classes déclarées final ne peuvent
donc pas avoir de classes filles.
private
la classe n'est accessible qu'à partir du fichier où
elle est définie
public La classe est accessible partout
53
Les notions orientées objets dans
JAVA…
❑Le mot class doit être écrit entièrement en
minuscule
❑Une variable peut être déclarée comme
étant de type Individu
❑L’accès à des parties de variables
s’effectue à l’aide de l’opérateur “. “
nomObjet.membre;
❑l’invocation d’une méthode s’effectue par :
nomObjet.nomMéthode();
class Individu{
String nom;
int age;
float salaire;
int calculer(){
return salaire-100;}
}
Individu X, Y; // X est une référence
X= new Individu(); // X est un objet
X.nom=“Ali“;
X.salaire=1000;
int a = X.calculer();
54
La référence this :
● Le mot clé this représente une référence sur l’objet courant (celui qui est
entrain d’exécuter la méthode contenant le this).
● La référence this peut être utile :
●Lorsqu’une variable locale ou paramètre cache, en portant le même nom, un
attribut de la classe.
●Pour déclencher un constructeur depuis un autre constructeur.
● Ex :
Class Date
{
int jour=1, mois=1, an=1990;
Date()
{an=2000; /* peut s’écrire : this.an=2000*/}
Date(int an)
{this.an=an; /* le paramètre en cache l’attribut an*/}
Date(int an, int mois, int jour)
{this.jour=jour;
this.mois=mois;
this(an); /* Appel du deuxième constructeur*/}
}
Objets, Classes
55
La référence null :
● Le mot clé null permet de représenter la référence qui ne représente rien.
● On peut assigner cette valeur a n’importe quelle variable ou attribut contenant
une référence.
● C’est aussi la valeur par défaut d’initialisation des attributs représentant des
références.
● Ex :
Class Test
{
Voiture v1; //initialisation a null par défault.
void methode()
{
…
if (v1==null) v1=new Voiture();
…
}
}
Objets, Classes
56
Création d’objets identiques
● m1 et m2 contiennent la même référence
et pointent donc tous les deux sur le
même objet : les modifications faites à
partir d'une des variables modifient l'objet.
● Création d’une copie d'un objet : la
méthode clone() :
● cette méthode permet de créer un
deuxième objet indépendant mais
identique à l'original.
● Cette méthode est héritée de la classe
Object qui est la classe mère de toute
les classes en Java.
●
m1 et m2 ne contiennent plus la même
référence et pointent donc sur des objets
différents.
MaClasse m1 = new
MaClasse();
MaClasse m2 = m1;
MaClasse m1 = new
MaClasse();
MaClasse m2 = m1.clone();
57
Création d’objets identiques
● Les variables de type objet que l'on
déclare ne contiennent pas un objet mais
une référence vers cet objet.
● c1 = c2 : copie la référence de l'objet c2
dans c1 c1 et c2 réfèrent au même objet
🡺
(ils pointent sur le même objet).
● L'opérateur == compare ces références.
Deux objets avec des propriétés
identiques sont deux objets distincts
● Pour comparer l'égalité des variables de
deux instances, il faut munir la classe d'un
méthode à cette effet : la méthode equals
héritée de Object.
● Si 2 objets sont de la même classe: la
méthode getClass() de la classe Object
Rectangle r1 = new Rectangle(100,50);
Rectangle r2 = new Rectangle(100,50);
if (r1 == r1) { ... } // vrai
if (r1 == r2) { ... } // faux
(obj1.getClass().equals(obj2.getClass())
58
Méthodes d’instance
❑Les méthodes déterminent le comportement des objets d’une classe donnée
<modificateur> <type> < nom>(<liste_arguments>)<bloc d’instructions>
❑Le type du résultat produit ou void si elle ne produit pas de résultat
❑Le nom de la méthode (identifiant valide)
❑Le type et le nom des paramètres formels, placés entre parenthèses ( ); (les
paramètres sont séparés par des “,“). Le nombre de paramètres est fixe : il n’est
pas possible de définir des méthodes à arguments variables
❑Un bloc d’instructions qui constituent le corps de la méthode
public class Cercle
{
public double x,y; // les coordonnées du centre
public double r; // le rayon
public double circonférence (){ return 2*3.14*r;}
public double surface(){ return 3.14*r*r; }
}
59
Membres de classe
❑ un membre est déclaré avec le
modificateur static : membre de classe
(champ ou méthode)
❑ un membre qui n’est pas de classe est
dit d’instance
NomClasse.membre
public class Count {
private int serialNumber;
private static int counter =0;
public Count(){
counter++;
serialNumber=counter;
}
}
public class Cercle{
public double x,y,r;
…
public Cercle bigger(Cercle c){
if (c.r>r) return c else return this; }
public static Cercle bigger(Cercle a, Cercle b){
if (a.r>b.r) return a else return b; }
…..}
Cercle c=Cercle.bigger(a,b);
60
Modificateurs
❑ Par défaut les classes sont disponibles pour tous les membres qu’elles
contiennent, et ceux-ci sont disponibles les uns pour les autres. Mais, cet accès peut
être grandement modifié.
❑ Les modificateurs d’accès déterminent la visibilité des informations d’une classe
ou d’un membre par rapport aux autres membres et aux autres classes. Les
modificateurs d’accès sont:
❑ public : Un membre public est visible par les membres qui sont hors de sa
portée, tant que la classe parent est visible. Une classe publique est visible par
toutes les autres classes de tous les autres paquets.
❑ private : L’accès à un membre privé est limité à la classe de ce membre
❑ protected : Un membre protégé peut être accédé par les autres membres de
sa classe et par les membres des classes du même paquet (tant que la classe
parent du membre est accessible), mais pas par les autres paquets. Une classe
protégée est accessible aux autres classes du même paquet, mais pas aux
autres paquets.
❑ Si aucun modificateur d’accès n’est déclaré, le membre est disponible pour toutes
les classes se trouvant dans le paquet parent, mais pas à l’extérieur du paquet.
61
Modificateurs…
class tailleFine {
private boolean invitationDonnée = false; //
C’est privé.
private int poids = 75 // C’est privé aussi.
public void accepterInvitation() // C’est
public.
{ invitationDonnée = true;}
//La classe PetitFour est déclarée et l’objet
// petitFour est instancié ailleurs :
public void manger(PetitFour petitFour) {
/* Cet objet n’accepte davantage de petits-
fours que s’il a une invitation * et s’il est
capable d’accepter. Remarquez que
estNourritureAcceptée()
* cherche à vérifier si l’objet est trop gros
pour accepter davantage de
* nourriture :
*/
if (invitationDonnée &&
estNourritureAcceptée())
{poids += petitFour.obtenirPoids();} }
//Seul l’objet sait s’il accepte la nourriture :
private boolean estNourritureAcceptée() {
//Cet objet n’acceptera de la nourriture que
s’il a
return (estTropGros() ? false : true);
}
//Les objets du même paquet peuvent voir si
cet objet
protected boolean estTropGros() {
//Il peut accepter de la nourriture si son poids
est
return (poids > 80) ? true : false;
} }
● estNourritureAcceptée() et invitationDonnée sont
private. Seuls les membres à l’intérieur de cette classe
savent si l’objet est capable d’accepter de la nourriture
ou s’il a une invitation.
● estTropGros() est protected. Seules les classes de ce
paquet peuvent voir si le poids de cet objet excède ou
non sa limite.
●accepterInvitation() et manger(). N’importe quelle
classe peut percevoir ces méthodes.
62
Constructeur
❑ Le mot clé new est utilisé pour créer dynamiquement une nouvelle instance de la
classe : Créer dynamiquement une nouvelle instance de la classe
❑ Toute classe comporte au moins un constructeur
❑ Un constructeur : est une méthode ayant le même nom que la classe n’ayant pas
de type de retour
❑ Si, on n’écrit pas un constructeur, un constructeur est fourni automatiquement. Ce
dernier ne prend aucun argument et son corps est vide
❑ Il est important de réaliser que si vous ajoutez une déclaration de constructeur
comportant des arguments à une classe qui n’avait pas de constructeur explicite
auparavant ; vous perdez le constructeur par défaut. A partir de là, les appels de new
Xxx() causeront des erreurs de compilation
❑ Il peut avoir plusieurs constructeurs pour une même classe (plusieurs façons
d’initialisation)
63
Constructeur…
public class Cercle{
public double x, y, r;
public Cercle (double x, double
y, double r)
{
this.x=x;
this.y=y;
this.r=r;
}
public double circonférence()
{ return 2*3.14*r;}
public double surface(){ return
3.14*r*r;}
}
Cercle c= new Cercle(1.41,-1.0,.25);
public class Cercle {
public double x, y, r;
public Cercle(double x, double y,
double r) {
this.x=x; this.y=y; this.r=r;
}
public Cercle(double r) { x=0.0; y=0.0;
this.r=r;}
public Cercle(Cercle c){x=c.x; y=c.y;
r=c.r;}
public Cercle(){x=0.0; y=0.0; r=1.0;}
public double circonférence(){ return
2*3.14*r;}
public double surface(){ return
3.14*r*r;}
}
64
Surcharge
❑ Plusieurs méthodes peuvent porter le même nom dans une même classe
❑ Les méthodes doivent différer par le nombre des arguments, ou par le type des
arguments
❑ Les constructeurs multiples est un cas particulier de surcharge
❑ Le compilateur ne peut distinguer deux méthodes se différenciant uniquement par
leur type de retour
class Rectangle {
….
void doubler()
{ largeur*=2;
hauteur*=2;
}
void doubler(boolean l, boolean h){
if (l) largeur*=2;
if (h) hauteur*=2;
}
}
class TestRecDisk{
public static void main (String arg[])
{
r.doubler(); // largeur et hauteur
r.doubler(false, true); // uniquement la
//hauteur
}
65
Gestion de la mémoire
❑ MaClasse X, Y; // X et Y ne sont pas des objets mais des références
❑ X= new MaClasse(); // c’est un objet
❑ gC : Garbage Collector ou ramasse-miettes est chargé de détecter les
objets devenus inaccessibles
❑ La récupération de mémoire peut alors être invoquée explicitement par le
programmeur à des moments bien précis avec la méthode System.gc()
66
Transtypage et conversion
❑ Les valeurs des types de données peuvent être convertis dans un autre type.
❑ Les valeurs d’une classe peuvent être converties d’une classe à une autre classe de la même
hiérarchie.
❑ Des restrictions logiques évidentes s’appliquent. Une conversion d’agrandissement — d’un
type petit vers un plus grand — est facile, mais une conversion de raccourcissement — d’un type
grand (par exemple, double ou Mammifère) vers un plus petit (par exemple, float ou Ours) — est
dangereuse pour vos données (sauf si vous êtes certain que les données tiendront dans les
paramètres du nouveau type).
❑ Une conversion de raccourcissement requiert une opération spéciale qu’on appelle le
transtypage.
❑ Les conversions suivantes ne présentent aucun risque pour vos données :
Type initial Converti en type
byte short, char, int, long, float,
double
short int, long, float, double
char int, long, float, double
int long, float, double
long float, double
float double
67
Transtypage et conversion…
❑ Pour transtyper un type de données, placez le type vers lequel transtyper entre parenthèses,
immédiatement avant la variable à transtyper : (int)x.
float x = 1.00; //déclaration de x en float
int y = (int)x; //transtypage de x vers un int nommé y
❑ Il n ’est pas possible de transformer les types primitifs en objets par une opération de
changement de type (cast). Il existe des classes enveloppes dont le seul but est d’encapsuler un
type simple dans un objet (Boolean, Integer, Float, Character, Double, Long)
boolean b= true;
Boolean ObjB= new Boolean(b);
boolean b2= ObjB.booleanValue();
❑ Java fournit des classes qui correspondent aux types de données primitifs.
❑ Pour des conversions de classe en classe correctes autres que celles indiquées ici, les
conversions d’agrandissement sont implicites.
❑ nomObjetATranstyper = (ClasseObjetVersQuiTranstyper)nomObjetVersQuiTranstyper;
❑ Il faut utiliser le transtypage entre les classes se trouvant dans la même hiérarchie d’héritage.
68
Le passage de paramètres
● Le passage des tableaux comme paramètres se fait par adresse (référence): On peut accéder
et modifier les valeurs du tableau passé comme paramètre.
class Tableauparam{
static void listerTab( float[] note, int []coef)
{System.out.println(“/n Notet coefficient“);
for (int i=0; i<note.length;i++)
System.out.println(“note[i]+ “tt“+ coef[i]);}
static void modifCoef (int []coeff, int ind, int
val)
{coeff[ind]=val;}
public static void main( String args[])
{int[] coef={1,3,2};
float[]note={10.75f,12f,8.25f};
listerTab (note,coef);
modifCoef(coef,1,4);
listerTab(note,coef);
}}
Résultat d’exécution
Note Coefficient
10.75 1
12.0 3
8.25 2
Note Coefficient
10.75 1
12.0 4
8.25 2
69
Le passage de paramètres…
❑ Le passage des variables de type primitif comme paramètres se fait par valeur : une
modification de cette variable dans une fonction est locale à cette dernière et non répercutée sur le
programme appelant.
class SomMoyF{
static int somme( int[] tab, float moyenne)
int somme=0;
for (int i=0; i<tab.length;i++)
somme+=tab[i];
moyenne=somme/tab.length;
System.out.println(“dans la Fnt somme moyenne= “+ moyenne};
return somme}
public static void main( String args[])
{int somvect;
float moy=0;
int[]vecteur={10, 15, 20};
Somvect=somme(vecteur,moy);
System.out.println(“dans main somvect=“ somvect + “moyenne“ =
“+ moy);}}
Résultat d’exécution
Dans somme : moyenne =15.0
Dans main : somvect =45,
moy=0.0
70
Le passage de paramètres: Solution
envelopper…
❑ Envelopper le type primitif dans une classe
class reel{
float valeur;}
class SomMoyok{
static int somme( int[] tab, reel moyenne)
int somme=0;
for (int i=0; i<tab.length;i++)
somme+=tab[i];
moyenne.valeur=somme/tab.length;
System.out.println(“dans la Fnt somme moyenne= “ + moyenne};
return somme}
public static void main( String args[])
{int somvect;
reel moy= new reel();
int[]vecteur={10, 15, 20};
Somvect=somme(vecteur,moy);
System.out.println(“dans main somvect=“somvect + “moyenne“ =
“+ moy.valeur);}}
Résultat d’exécution
Dans somme : moyenne =15.0
Dans main : somvect =45,
moy=15.0
71
Manipulations de chaînes
72
Les conversions de type
●Lors de la déclaration, il est possible d'utiliser un cast :
● Exemple: int entier = 5; float flottant = (float) entier;
●La conversion peut entraîner une perte d'informations.
Il n'existe pas en Java de fonction pour convertir : les conversions de type se font par
des méthodes.
●La bibliothèque de classes API fournit une série de classes qui contiennent des
méthodes de manipulation et de conversion de types élémentaires.
pour les nombres à virgule flottante en double précision (double)
Double
pour les nombres à virgules flottante (float)
Float
pour les entiers long signés (long)
Long
pour les valeurs entières (integer)
Integer
pour les chaînes de caractères Unicode
String
Rôle
Classe
73
La Classe java.lang.Integer
● Elle permet de représenter un entier sous la forme d'un objet.
public final class Integer extends Number
{public static final int MAX_VALUE // la valeur max d'un int
public static final int MIN_VALUE
public static final Class TYPE // l'objet classe représentant le type int
public Integer(int value) // constructeur
public Integer(String s) throws NumberFormatException
public static String toString(int i, int radix) //radix est la base
.........
public static String toString(int i)
public static int parseInt(String s) throws NumberFormatException ........
public static Integer valueOf(String s) throws NumberFormatException ........
public int intValue()
74
La Classe java.lang.Boolean
●Elle permet de représenter un booléen sous la forme d'un objet.
public final class Boolean extends Object
{public static final Boolean TRUE
public static final Boolean FALSE
public static final Class TYPE
public Boolean(boolean value)
........
public boolean booleanValue()
........
public String toString()
........
75
La Classe java.lang.Math
● C'est la bibliothèque mathématique de Java.Toutes ses méthodes sont publiques et statiques.
public final class Math extends Object {
public static final double E
public static final double PI
public static native double sin(double a)
public static native double cos(double a)
public static native double tan(double a)
public static native double asin(double a)
public static native double acos(double a)
public static native double atan(double a)
public static native double exp(double a)
public static native double log(double a)
public static native double sqrt(double a)
public static native double ceil(double a) // partie entiere sup
public static native double floor(double a) // partie entiere inf
public static native double pow(double a,double b) throws ArithmeticException // a puissance b
public static int round(float a)
public static synchronized double random()
public static int abs(int a) ....... et les surcharges de abs .......
public static int max(int a,int b) ....... et les surcharges de max .......
public static int min(int a,int b) ....... et les surcharges de min .......
76
Les conversions de type
● Conversion d'un entier int en chaîne de caractère String
int i = 10;
String montexte = new String();
montexte =montexte.valueOf(i);
●valueOf est également définie pour des arguments de type boolean, long, float, double
et char
● Conversion d'une chaîne de caractères String en entier int
String montexte = new String(« 10 »);
Integer nomnombre=new Integer(montexte);
int i = monnombre.intValue(); //convertion d'Integer en int
● Conversion d'un entier int en entier long
int i=10;
Integer monnombre=new Integer(i);
long j=monnombre.longValue();
77
Les conversions de type
● La définition d'une chaîne : Exemple: String texte = "bonjour";
● Remplacement: Exemple : String texte = « Java Java Java ».replace('a','o');// erroné
● => String texte = « Java Java Java »; texte = texte.replace('a','o');
●Addition de chaines: l'opérateur +
● Exemple: String texte = " "; texte += " Hello "; texte += " World3 ";
● Cet opérateur sert aussi à concaténer des chaînes avec tous les types de bases.
●Comparaison de deux chaines : la méthode equals()
● String texte1 = "texte 1 ";
String texte2 = "texte 2 ";
if ( texte1.equals(texte2) )...
●
Détermination de la longueur d'une chaîne : La méthode length()
● Exemple: String texte = "texte"; int longueur = texte.length();
● Modification de la casse d'une chaîne : Les méthodes Java toUpperCase() et
toLowerCase()
● Exemple: String texte = "texte "; String textemaj = texte.toUpperCase();
78
Les Chaines de caractères
enlève les caractères non significatifs de la chaîne
trim()
renvoie la chaîne en majuscule
toUpperCase()
renvoie la chaîne en minuscule
toLowerCase()
renvoie une partie de la chaîne
substring(int,int)
Vérifie si la chaîne commence par la sous chaîne
startsWith(String int)
renvoie la chaîne dont les occurrences d'un caractère
sont remplacées
replace(char,char)
renvoie la longueur de la chaîne
length()
renvoie la dernière position à laquelle l'argument est
contenu dans la chaîne
lastIndexOf(String)
renvoie la position de début à laquelle l'argument est
contenu dans la chaîne
indexOf(String)
compare la chaîne sans tenir compte de la casse
equalsIgnoreCase(String)
vérifie si la chaîne se termine par l'argument
endsWith(String)
ajoute l'argument à la chaîne et renvoie la nouvelle
chaîne
concat(String)
compare la chaîne avec l'argument
compareTo(String)
renvoie le nieme
caractère de la chaîne
charAt(int)
Rôle
Méthodes la classe String
79
La classe Object
80
La Classe Object
● C'est la super classe de toutes les classes Java : toutes ces méthodes sont donc
héritées par toutes les classes.
● La méthode getClass() : getClass() renvoie un objet de la classe Class qui
représente la classe de l'objet.
● Exemple : String nomClasse = monObject.getClass().getName();
● La méthode toString() : renvoie le nom de la classe, suivi du séparateur @, lui
même suivi par la valeur de hachage de l'objet.
● La méthode equals() : implémente une comparaison par défaut.
● Sa définition dans Object compare les références : donc obj1.equals(obj2) ne
renverra true que si obj1 et obj2 désignent le même objet.
● Dans une sous classe de Object, pour laquelle on a besoin de pouvoir dire que
deux objets distincts peuvent être égaux, il faut redéfinir la méthode equals
héritée de Object.
81
La Classe Object
● La méthode clone() : Si x désigne un objet obj1, l'exécution de x.clone()
renvoie un second objet obj2, qui est une copie de obj1 :
● si obj1 est ensuite modifié, obj2 n'est pas affecté par ce changement.
● Par défaut, la méthode clone(), héritée de Object fait une copie variable par
variable : elle offre donc un comportement acceptable pour de très
nombreuses sous classe de Object.
● Cependant comme le processus de duplication peut être délicat à gérer
pour certaines classes (par exemple des objets de la classe Container),
l'héritage de clone ne suffit pas pour qu'une classe supporte le clonage.
● Pour permettre le clonage d'une classe, il faut implémenter dans la classe
l'interface Cloneable.
● La première chose que fait la méthode clone() de la classe Object, quand
elle est appelée, est de tester si la classe implémente Cloneable. Si ce n'est
pas le cas, elle lève l'exception CloneNotSupportedException
82
La classe StringTokenizer
● Permet de découper une chaîne de caractères (objet de type String) en fonction
de séparateurs. Le constructeur de la classe accepte 2 paramètres : la chaîne à
décomposer et une chaîne contenant les séparateurs
● Exemple: import java.util.*;
class test9 { public static void main(String args[])
{ StringTokenizer st = new
StringTokenizer("chaine1,chaine2,chaine3,chaine4",",");
while (st.hasMoreTokens())
{System.out.println((st.nextToken()) } } }
● La méthode hasMoreTokens() fournit un contrôle d'itération sur la collection en
renvoyant un booleen indiquant si il reste encore des éléments.
● La méthode NextToken() renvoie le prochain élément sous la forme d'un objet
String
83
La classe Random
● Permet de générer des nombres pseudo-aléatoires. Après l'appel au
constructeur, il suffit d'appeler la méthode correspondant au type désiré :
nextInt(), nextLong(), nextFloat() ou nextDouble()
● Méthodes valeur de retour
● nextInt entre Integer.MIN_VALUE et Interger.MAX_VALUE
● nextLong entre long.MIN_VALUE et long.MAX_VALUE
● nextFloat ou nextDoubl entre 0.0 et 1.0
● Exemple :
import java.util.*;
class test9 { public static void main (String args[])
{ Random r = new Random(); int a = r.nextInt() %10; //entier entre -9 et 9
System.out.println("a = "+a); } }
84
Les classes Date et Calendar
● En java, la classe Date permet de manipuler les dates.
● Exemple :
● import java.util.*; ...
Date maintenant = new Date();
if (maintenant.getDay() == 1) System.out.println(" lundi ");
● Le constructeur d'un objet Date l'initialise avec la date et l'heure courante du
système.
● Exemple : recherche et affichage de l'heure
● import java.util.*; import java.text.*;
public class TestHeure { public static void main(String[] args)
{ Date date = new Date();
System.out.println(DateFormat.getTimeInstance().format(date)); } }
Résultat : 22:05:21
● La méthode getTime() permet de calculer le nombre de millisecondes écoulées
entre la date qui est encapsulée dans l'objet qui reçoit le message getTime et le
premier janvier 1970 à minuit GMT.
85
● public class TestCalendar
{ public static void main(java.lang.String[] args)
{ Calendar c = Calendar.getInstance();
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY)
System.out.println(" nous sommes lundi ");
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY)
System.out.println(" nous sommes mardi ");
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY)
System.out.println(" nous sommes mercredi "); if
(c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY)
System.out.println(" nous sommes jeudi "); if
(c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) System.out.println("
nous sommes vendrei "); if (c.get(Calendar.DAY_OF_WEEK) ==
Calendar.SATURDAY) System.out.println(" nous sommes samedi "); if
(c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
System.out.println(" nous sommes dimanche "); } }
● Résultat : nous sommes lundi
86
La classe Vector
retourne le premier élément du vecteur (celui
dont l'index est égal à zéro)
Object firstElement()
retourne une enumeration contenant tous
les éléments du vecteur
Enumeration
elements()
retourne l'objet à l'index indiqué
Object elementAt(int)
retourne true si l'objet est dans le vecteur
boolean
contains(Object)
ajouter un objet dans le vecteur
void
addElement(Object)
Rôle
Méthode
●Stocker des objets de classes différentes dans un vecteur mais les
éléments stockés doivent obligatoirement être des objets (pour le type
primitif il faut utiliser les wrappers tel que Integer ou Float mais pas int ou
float).
87
La classe Vector (bis)
nombre d'objets du vecteur
int size()
remplacer l'élément à l'index par l'objet
void
setElementAt(object,
int)
supprime l'objet à l'index indiqué
void
removeElementAt(int)
supprime l'objet du vecteur
void
removeElement(Objec
t)
vider le vecteur
void
removeAllElements()
retourne le dernier élément du vecteur
Objet lastElement()
retourne un booléen si le vecteur est vide
boolean isEmpty()
insérer un objet à l'index indiqué
void
insertElementAt(Obje
ct, int)
renvoie le rang de l'élément ou -1
int indexOf(Object)
Rôle
Méthode
88
La classe vector…Exemple
● Vector v = new Vector();
v.addElement(new Integer(10)); v.addElement(new Float(3.1416));
v.insertElementAt("chaine ",1); System.out.println(" le vecteur contient
"+v.size()+ " elements ");
String retrouve = (String) v.elementAt(1);
System.out.println(" le 1er élément = "+retrouve);
● Exemple : le parcours d'un vecteur
Vector v = new Vector(); ... for (int i = 0; i < v.size() ; i ++)
{ System.out.println(v.elementAt(i)); }
89
La class Stack
● Import java.util.Stack;
● L'image traditionnelle de la pile est celle de la pile d'assiettes, on parle aussi de
liste LIFO (Last In First Out). L'insertion et la suppression d'éléments se fait par
la même extrêmité. Les opérations classiques sur les piles sont PileVide,
Empiler, Depiler.
● La classe java.util.Stack hérite de la classe java.util.Vector, et implémente les
piles.
● un constructeur sans argument : public Stack();
● pour empiler : public Object push(Object item);
● pour dépiler : public synchronized Object pop();
● pour accéder au sommet de la pile (sans le supprimer) : public synchronized
Object peek();
● pour tester si la pile est vide : public boolean empty();
● pour rechercher un objet dans la pile : public synchronized int search(Object
o);

java_partie3jGZDYSDJ.VQZSVCJVJWXCDDS.pptx

  • 1.
    1 Programmation Orientée Objet: Java SadokBen Yahia, PhD Faculté des Sciences de Tunis sadok.benyahia@fst.rnu.tn
  • 2.
    2 Plan ❑Introduction au mondeObjet ❑La langage Java: Introduction et caractéristiques ❑Syntaxe et structures de contrôle ❑Héritage ❑Les exceptions ❑Les Entrées/Sorties ❑Connexion Java et les bases de données: l’API JDBC
  • 3.
    3 Éléments de basedu langage Java ❑Commentaires ❑ Trois notions sont admises pour l ’insertion de commentaires: ❑ // commentaire sur une seule ligne ❑ /* commentaire sur une ou plusieurs lignes */ ❑ /** commentaire d ’explication */ ❑Les commentaires d’explication sont des commentaires sur plusieurs lignes permettant de générer automatiquement une documentation avec l’utilitaire javadoc (générateur automatique de document) ❑ int i; // c ’est une variable entière
  • 4.
    4 Vocabulaires Objet… ❑Tout objetsauf : ❑Les types primitifs (int, float,…) ❑Les chaînes sont des objets ❑Il existe pour chaque type simple, une vision objet (classe Integer,…)
  • 5.
    5 Éléments de basedu langage Java ❑Point virgule, blocs et blancs ❑Dans Java, les instructions se terminent par un point virgule (;) ❑Un bloc d’ instructions est délimité par des accolades { et } ❑Les blancs sont autorisés entre les éléments du code source (espaces, tabulations et sauts de ligne) { int x; x= 5*8; }
  • 6.
    6 ❑Identificateurs : Lesidentificateurs permettent de nommer les différents éléments (variables, constantes, classe, méthodes, packages,…) des programmes Java ❑ Un identificateur commence par une lettre, un trait de soulignement (-) ou un signe dollar ($) ❑ les caractères suivants peuvent également comporter des chiffres ❑ les caractères Unicode supérieurs à 0x00c0, permettent d’introduire dans les identificateurs des caractères internationaux tels que ç, ü,… ❑Les identificateurs opèrent une distinction majuscules/minuscules et n’ont pas de longueur maximale Identificateurs ●$valeur-systeme // identificateur valide ●ça // identificateur non valide (ç premier caractère) ●note# // identificateur non valide (# n’est pas au dessus de 0x00c0)
  • 7.
    7 ❑identificateurs: sont composésd’un ou de plusieurs mots. Pour faciliter la lisibilité, la première lettre de chacun des mots est conventionnellement en Majuscule, sauf pour le premier mot qui est fonction de la nature de l ’identificateur ❑ Classes ou Interfaces : la première lettre de l’identificateur d’une classe doit conventionnellement être en majuscule ❑Méthodes ou Variables : la convention de nommage indique que la première lettre du mot doit être en minuscule ❑Constantes : la convention de nommage indique que leur nom doit être en majuscule ❑Autres conventions ❑Structure de contrôle : utilisez des ({ et }) autour des instructions, même s’il s ’agit d’une seule, lorsqu’elles font partie d ’une structure de contrôle, telle que if-else ou for. ❑Placez une seule instruction par ligne, et utilisez une indentation pour que le code soit plus lisible. Identificateurs: Conventions de Codage
  • 8.
    8 Mots réservés abstract booleanbreak byte switch case catch char class final continue default do double else extends false finally float for transient if implements import instanceof int interface long native new null package private protected public return short static super synchronized this throw throws true try void while
  • 9.
    9 Les types dedonnées ❑Java est un langage fortement typé : chaque variable et chaque expression possède un type bien défini ❑Les types de données de Java sont divisés en deux grands groupes ❑Les types primitifs (ou de base) : boolean, int, short, byte, float, long, double, char ❑Le type référence : chaîne de caractères (String),tableau ou classe
  • 10.
    10 boolean ● Type définisur 1 bit (1 octet ?) ● Valeurs possibles : {false, true} ● Déclarations possibles de variables: boolean b; boolean fini=false; ● Valeur par défaut d’une variable champ de classe : false
  • 11.
    11 char ● Type définisur 16 bits. ● Valeurs possibles : {' u0000' , …, ' uFFFF' } ● Déclarations possibles de variables: char c; char espace=' '; ● Valeur par défaut d’une variable champ de classe : ' u0000' ● Le jeu Unicode (codé sur 2 octets) permet de gérer tous les caractères de toutes les langues écrites ● Le jeu ASCII/ANSI (codé sur 1 octet) est un sous-ensemble du jeu Unicode : les 255 premiers caractères. ● http://www.unicode.org/
  • 12.
    12 Les littéraux dutype char ●Caractères imprimables ▪entre simples quotes (apostrophes) : 'a' ▪mais pas entre doubles quotes (guillemets) : "a" ●Caractères spéciaux ▪entre simples quotes et en utilisant une séquence d'échappement ( et un caractère) ●Tous les caractères ▪entre simples quotes et en utilisant une notation hexadécimale de la forme u????
  • 13.
    13 Exemples backspace 'b' 'u0008' tabulation't' 'u0009' new line 'n' 'u000a' carriage return 'r' 'u000d' form feed 'f' 'u000c' Simple quote ''' 'u0027' Double quote '"' 'u0022' Antislash '' 'u005c'
  • 14.
    14 Les types entiers 01111111 10000000 byt e 11111111 00000000 shor t01111111 10000000 11111111 00000000 11111111 00000000 11111111 01111111 00000000 10000000 in t 11111111 00000000 11111111 00000000 11111111 11111111 00000000 00000000 11111111 11111111 11111111 01111111 00000000 00000000 00000000 10000000 lon g valeur max valeur min Représentation en complément à 2
  • 15.
    15 byte ● Type définisur 8 bits. ● Valeurs possibles : {-27 , …, 27 -1} soit de -128 à 127 ● Déclarations possibles de variables: byte b; byte octetLu=-1; ● Valeur par défaut d’une variable champ de classe : (byte)0
  • 16.
    16 short ● Type définisur 16 bits. ● Valeurs possibles : {-215 , …, 215 -1} soit de –32768 à 32767 ● Déclarations possibles de variables: short s; short longueur=100; ● Valeur par défaut d’une variable champ de classe : (short)0
  • 17.
    17 int ● Type définisur 32 bits. ● Valeurs possibles : {-231 , …, 231 -1} soit de –2 147 483 648 à … ● Déclarations possibles de variables: int i; int nbLignes=10; ● Valeur par défaut d’une variable champ de classe : 0
  • 18.
    18 long ● Type définisur 64 bits. ● Valeurs possibles : {-263 , …, 263 -1} soit –9 223 372 036 854 775 808L à ● Déclarations possibles de variables: long l; long capacite=34500; ● Valeur par défaut d’une variable champ de classe : 0L
  • 19.
    19 Les littéraux entiers ●Ilest possible d'utiliser une notation hexadécimale pour coder une valeur entière. byte maxByte = 0x7F; short maxShort = 0x7FFF; int i = 0x2a11bc10; long n = 2011L; ●Par défaut, un littéral entier est de type int. ●Un suffixe L permet d’identifier un littéral long. ●Un préfixe 0 permet d’utiliser une notation octale
  • 20.
    20 Les types réels +/-3.4E38 avec environ 7 chiffres de précision float doubl e Norme IEEE 754 +/- 1.7E308 avec environ 15 chiffres de précision
  • 21.
    21 float ● Type définisur 32 bits. ● Valeurs possibles : Définies par la norme IEEE 754 ● Déclarations possibles de variables: float f; float volume=34.5; ● Valeur par défaut d’une variable champ de classe : 0.0F
  • 22.
    22 double ● Type définisur 64 bits. ● Valeurs possibles : Définies par la norme IEEE 754 ● Déclarations possibles de variables: double d; double surface=100; ● Valeur par défaut d’une variable champ de classe : 0.0D
  • 23.
    23 Les littéraux réels ●Par défaut, un littéral réel est de type double. ● Un suffixe F permet d'identifier un littéral float. ● Un suffixe D permet d'identifier un littéral double.
  • 24.
    24 Variables, déclarations etaffectations ❑L’utilisation d ’une variable dans Java doit toujours être précédée par la déclaration de celle-ci. Le compilateur va utiliser les informations associées à la déclaration de la variable pour effectuer des vérifications : compatibilité de type dans les expressions, visibilité de la variable,… ❑La déclaration d ’une variable s’effectue en préfixant le nom de la variable par sont type « int i »; ❑On peut préciser (d’une façon optionnelle) un modificateur (qualifier) à une variable ❑ le modificateur final : précise que la valeur de la variable ne pourra plus être changée après son affectation initiale ❑Le type d ’une variable est soit un type de base soit une référence ❑Deux façon de décrire des variables, soit en utilisant un type simple comme int et float ❑un type class, défini par le programmeur double d =1.3; final float f=0.25;
  • 25.
    25 Opérateurs . Membre objetAccède à un membre d’un objet (<type>) type de données Convertit un type de données + chaîne Joint des chaînes (concaténation) nombre Additionne - nombre C’est le moins unaire (inverse le signe du nombre) nombre Soustrait. ! booléen C’est l’opérateur boolean NOT. & entier, booléen C’est à la fois l’opérateur au niveau bits (entier) et boolean AND. Quand il est doublé (&&), c’est le AND conditionnel boolean. = la plupart des éléments Affecte un élément à un autre élément Opérateur Opérande Comportement
  • 26.
    26 Opérateurs… java.lang monpackage . [] () ++-- ! ~ instanceof * / % + - << >> >>> < > <= >= == != & ^ && || ?: = Op= , Précédence des opérateurs (de la plus grande à la plus petite). Les opérateurs de même niveau sont évalués depuis la gauche
  • 27.
    27 Opérateurs… Opérateur Action Exemple -Négation i=-j; ++ Incrémentation i++; de 1 -- Décrémentation i--; de 1 Opérateur Action Exemple + Addition i=j+k ; += i+=2; //i=i+2; - Soustraction i=j-k; -= i-=j; * Multiplication x=2*y; *= x*=x; / Division i=j/k; /= x/=10; //x=x/10; % Modulo i=j%k; %= i%=2;
  • 28.
    28 Opérateurs… < Plus petitque x<i; > Plus grand que x>i; <= Plus petit ou égal x<=i; >= Plus grand ou égal x >=i; == Egal à i==2; != Différent de i!=2; Opérateur Action Exemple ! Négation !p; & ET P &(i<1); | OU p | q; ^ OU exclusif p^false; && ET évalué p&&q&&r; || OU évalué p||q||r; != Nég. Assigné p!=p; &= ET Assigné p&=q; |= OU Assigné p|=q; ?: Si alors sinon (i<10)?(j=2):(j=3); Opérateur Action Exemple
  • 29.
    29 Opérateurs bit àbit ● Et : & Complément : ~ ● Ou : | Ou exclusif : ^ ● Ces opérateurs s’utilisent avec des entiers. 01101001 a 10101011 b 00101001 a& b 11101001 a | b 11000010 a^b 10010110 ~a
  • 30.
    30 Opérateurs de décalage ●Décalageà gauche : << (insertion de zéros) ●Décalage à droite : >> (insertion du bit de signe) >>> (insertion de zéros) ●Ces opérateurs s’utilisent avec des entiers. ●Décaler d’une position à gauche (resp. à droite) une valeur entière revient à la multiplier (resp. à la diviser) par 2.
  • 31.
    31 Opérateurs de décalage 11101001 a 10010000 a<< 4insertion de zéros bits éliminés 11101001 a 11111110 a>> 4 insertion du bit de signe bits éliminés 11101001 a 00001110 a>>> 4 insertion de zéros bits éliminés
  • 32.
    32 Opérateurs d’affectation ●Opérateur simpled’affectation : = ●Opérateurs d’affectation combinés avec un opérateur arithmétique : += -= *= /= %= ●Opérateurs d’affectation combinés avec un opérateur bit à bit : &= |= ~= ^= <<= >>= >>>= ●Equivalence lhs op= rhs est un raccourci de lhs = lhs op (rhs);
  • 33.
    33 Opération de transtypage ●Transtypage(cast) : (typeCast)expression ●Cette opération permet de convertir le type de l’expression en typeCast. ●L’opération peut diminuer la généralité (downcasting) du type avec un risque de perte d’informations. Elle peut également augmenter la généralité (upcasting) du type (sans aucun risque). ●Du moins général au plus général (pour les types primitifs), on a : byte → short → int → long → float → double
  • 34.
    34 Cast implicite ●Lors d’uneaffectation, une opération de upcasting implicite peut avoir lieu (lorsque la partie droite de l’affectation est d’un type moins général). ●Par exemple, lors de l’évaluation de : double x = 15; la valeur entière 15 est transformée automatiquement en la valeur réelle (double) 15.0 avant d’être affectée à la variable x.
  • 35.
    35 Cast explicite ●Lors decertaines opérations, il est parfois nécessaire d’utiliser explicitement une opération de transtypage. ● Par exemple, l’exécution de : int x=3, y=2; double z = x/y; affecte la valeur 1.0 à z ●Pour que la valeur 1.5 soit affectée à z, il faut : double z = (double)x/y; afin de convertir x en double et que la division soit ainsi une division réelle.
  • 36.
    36 Instruction ❑ Une instructionest une seule commande. Une commande peut occuper plusieurs lignes de code, mais le compilateur lit l’ensemble comme une seule commande. ❑ Les instructions individuelles (habituellement sur une seule ligne) se terminent par un point-virgule (;) ❑Les groupes d’instructions (sur plusieurs lignes) se délimitent par des accolades ❑Les règles de portée déterminent où est reconnue une variable dans un programme. Les variables appartiennent à deux catégories de portée principales : ❑ Variables globales : Variables reconnues dans toute une classe. ❑ Variables locales : Variables reconnues uniquement dans le bloc de code où elles sont déclarées. ❑Une variable déclarée dans un bloc de code n’est visible que dans ce bloc et dans les blocs qui y sont imbriqués. class Portée { int x = 0; void méthode1() { int y = x; } void méthode2() { int z = 1; z = y; // Cela ne fonctionne pas : // y est définie hors de la portée de méthode2. } }
  • 37.
    37 Bloc d'instructions ● Unbloc d'instructions est une séquence d'instructions délimitée par une paire d'accolades. ● Il est possible de déclarer des variables dans un bloc. ● La portée (visibilité) d'une variable commence à sa déclaration jusqu'à la fin du bloc.
  • 38.
  • 39.
    39 Variables homonymes ● EnJava, il n'est pas possible déclarer des variables homonymes dans deux blocs imbriqués. ● En C/C++, il est possible de le faire : ● La variable interne cache la variable externe ● Cela constitue une source d'erreur ☹
  • 40.
    40 { int i; … { int i=0; … doublex = 3.5; … } } Bloc externe Bloc interne Exemple i i x confli t confli t
  • 41.
  • 42.
    42 Les structures decontrôles ❑if (Expr) S1; else S2; ❑ L’instruction S1 est exécutée si l’expression logique Expr est évaluée à vraie. ❑L’instruction S2 est exécutée si l’expression logique Expr est évaluée à fausse ❑ switch (Expr1) ❑ { ❑ case constante_1: statements_1 ❑ case constante_2: statements_2 ❑ … ❑ case constante_N: statements_N ❑ default: statements_default ❑ } static int ternary(int i) { if (i<1) return i * 100; return i * 10; // return i<10 ? i*100 : i*10; } switch (xCursor) { case milieuEcran: corpDePage = true; break; case basEcran: case hautEcran: corpDePage = false; }
  • 43.
    43 Les structures decontrôles ❑ while (condition) ❑ Bs; //une ou un bloc d’instructions ❑ do S1 while (condition); // Exécuter S1 tant que l’expression condition est vraie ❑ for (e1;e2;e3) ❑ Bs; ❑ e1 : initialise l’itérateur (compteur), cette expression n’est exécutée qu’une seule fois; ❑ e2 : exprime la condition de test (tant qu’elle est vraie on continue la boucle) ; elle est vérifiée à chaque itération ❑ e3 : modifie l’itérateur, elle est exécutée à chaque itération
  • 44.
    44 Les structures decontrôles // WhileTest.java /** * montre la boucle while */ public class WhileTest { public static void main(String args[]) { double r = 0; while (r < 0.99d) { r = Math.random(); System.out.println(r); } } } // ListCharacters.java /** * montre la boucle for" en listant tous les caractères ASCII */ public class ListCharacters { public static void main(String args[]) {for ( char c = 0; c < 128; c+ + ) if (c != 26 ) // ANSI Clear screen System.out.println( "value: " + (int)c + " character: " + c ); } }
  • 45.
    45 Etiquette, break, continueet return ❑Etiquette : N’importe quelle qu’elle instruction peut être étiquetée. ❑Nom_etiquette: instruction ou bloc d’instruction; ❑Rupture (break) break ; break label; ❑Continuation (continue) continue; continue label; ❑Retourner (return) return; return Expression; boucle1: for (int i=0; i<10; i++){ for (int j=0; j<15 j++){ System.out.println(i+“/“+j); } } class TestBreak{ public static void main (String args[]){ bloc1: for (int i=0; i<10; i++) for (int j=0; j<10; j++){ System.out.println(i+“/“+j); if (J==1) break; // quitte la boucle j if (i==2) break bloc1; // quitte bloc1 } } }
  • 46.
    46 Etiquette, break, continueet return // BreakAndContinue.java /** les clauses break et continue */ public class BreakAndContinue { public static void main(String args[]) { for(int i = 0; i < 100; i++) { if(i == 74) break; // quitter boucle if(i % 9 != 0) continue; // iter.suiv. System.out.println(i); } int i = 0; // while(true) { i++; int j = i * 27; if(j == 1269) break; // quitter boucle if(i % 10 != 0) continue; // Top System.out.println(i); } Résultat : (avec un nombre par ligne) 0 9 18 27 36 45 54 63 72 10 20 30 40
  • 47.
    47 Les types dedonnées : tableau ❑Tableau : est un objet référencé ❑Une variable de type tableau n’est pas un type élémentaire (c’est une référence sur un tableau) ❑Déclaration ❑type NomTableau[] ou type [] NomTableau ❑type NomTableau[][] ❑Allocation et initialisation ❑int T1[]=new int[12]; ❑int T2[]={5,7,-12,8}; ❑ L’attribut length : retourne la taille d’un tableau
  • 48.
    48 Les types dedonnées : tableau ❑Allocation et initialisation ❑int T1[]=new int[12]; allocation dynamique de 12 entiers pour T1 0 0 0 0 0 0 0 0 … T1
  • 49.
    49 Les types dedonnées : tableau Class Tableau1D {public static void main(String[] args) {int[] tabent={1,2,3}; for (int i=0; i<tabent.length;i++) {System.out.println(tabent[i] + “ “ );} System.out.println (); int[] tab2ent= new int [5]; boolean [] tbool= new boolean[3]; tab2ent[2]=20; tab2ent[4]=50; for (int i=0; i<ta2bent.length;i++) {System.out.println(ta2bent[i] + “ “ );} for (int i=0; i<tbool.length;i++) {System.out.println(tbool[i] + “ “ );} }} Résultat d’exécution 1 2 3 0 0 20 0 50 false false false
  • 50.
    50 Les types dedonnées : tableau d’objets ❑Déclaration identique ❑Balle [ ] tabBalle=new Balle[6]; un tableau d’éléments pouvant référencer 6 objets de type Balle ❑La déclaration du tableau ne crée pas les objets référencés null null null null null null tabBall e ❑Les références des objets crées doivent être affectés au tableau par la suite ❑TabBalle[0]= new Balle(4); ❑TabBalle[1]= new Balle(6); ❑…
  • 51.
    51 Les notions orientéesobjets dans JAVA ❑Une classe représente une « famille » d’objets qui partagent les mêmes propriétés et méthodes. ❑Les objets d’une classe sont aussi appelés les instances de la classe ❑Une classe sert à définir les propriétés des objets d’un type donné ❑Elle décrit l’ensemble des données (attributs, caractéristiques ou variables d’instance) et des opérations sur les données (méthodes) ❑Elle sert de modèle pour la création d’objets Public class Point { int x ; // abscisse du point int y ; // ordonnée du point public void translate (int dx, int dy) { x = x + dx ; y = y + dy ; } // Calcul la distance du point à l’origine public double distance() { return Math.sqrt (x * x + y * y) ; } } Variables d’instances Méthodes
  • 52.
    52 Les notions orientéesobjets dans JAVA ClassModifiers class ClassName [extends SuperClass] [implemenents Interfaces] { // insérer ici les champs et les méthodes } Modificateur Role abstract la classe contient une ou des méthodes abstraites, qui n'ont pas de définition explicite. Une classe déclarée abstract ne peut pas être instanciée : il faut définir une classe qui hérite de cette classe et qui implémente les méthodes nécessaires pour ne plus être abstraite. final la classe ne peut pas être modifiée, sa redéfinition grâce à l'héritage est interdite. Les classes déclarées final ne peuvent donc pas avoir de classes filles. private la classe n'est accessible qu'à partir du fichier où elle est définie public La classe est accessible partout
  • 53.
    53 Les notions orientéesobjets dans JAVA… ❑Le mot class doit être écrit entièrement en minuscule ❑Une variable peut être déclarée comme étant de type Individu ❑L’accès à des parties de variables s’effectue à l’aide de l’opérateur “. “ nomObjet.membre; ❑l’invocation d’une méthode s’effectue par : nomObjet.nomMéthode(); class Individu{ String nom; int age; float salaire; int calculer(){ return salaire-100;} } Individu X, Y; // X est une référence X= new Individu(); // X est un objet X.nom=“Ali“; X.salaire=1000; int a = X.calculer();
  • 54.
    54 La référence this: ● Le mot clé this représente une référence sur l’objet courant (celui qui est entrain d’exécuter la méthode contenant le this). ● La référence this peut être utile : ●Lorsqu’une variable locale ou paramètre cache, en portant le même nom, un attribut de la classe. ●Pour déclencher un constructeur depuis un autre constructeur. ● Ex : Class Date { int jour=1, mois=1, an=1990; Date() {an=2000; /* peut s’écrire : this.an=2000*/} Date(int an) {this.an=an; /* le paramètre en cache l’attribut an*/} Date(int an, int mois, int jour) {this.jour=jour; this.mois=mois; this(an); /* Appel du deuxième constructeur*/} } Objets, Classes
  • 55.
    55 La référence null: ● Le mot clé null permet de représenter la référence qui ne représente rien. ● On peut assigner cette valeur a n’importe quelle variable ou attribut contenant une référence. ● C’est aussi la valeur par défaut d’initialisation des attributs représentant des références. ● Ex : Class Test { Voiture v1; //initialisation a null par défault. void methode() { … if (v1==null) v1=new Voiture(); … } } Objets, Classes
  • 56.
    56 Création d’objets identiques ●m1 et m2 contiennent la même référence et pointent donc tous les deux sur le même objet : les modifications faites à partir d'une des variables modifient l'objet. ● Création d’une copie d'un objet : la méthode clone() : ● cette méthode permet de créer un deuxième objet indépendant mais identique à l'original. ● Cette méthode est héritée de la classe Object qui est la classe mère de toute les classes en Java. ● m1 et m2 ne contiennent plus la même référence et pointent donc sur des objets différents. MaClasse m1 = new MaClasse(); MaClasse m2 = m1; MaClasse m1 = new MaClasse(); MaClasse m2 = m1.clone();
  • 57.
    57 Création d’objets identiques ●Les variables de type objet que l'on déclare ne contiennent pas un objet mais une référence vers cet objet. ● c1 = c2 : copie la référence de l'objet c2 dans c1 c1 et c2 réfèrent au même objet 🡺 (ils pointent sur le même objet). ● L'opérateur == compare ces références. Deux objets avec des propriétés identiques sont deux objets distincts ● Pour comparer l'égalité des variables de deux instances, il faut munir la classe d'un méthode à cette effet : la méthode equals héritée de Object. ● Si 2 objets sont de la même classe: la méthode getClass() de la classe Object Rectangle r1 = new Rectangle(100,50); Rectangle r2 = new Rectangle(100,50); if (r1 == r1) { ... } // vrai if (r1 == r2) { ... } // faux (obj1.getClass().equals(obj2.getClass())
  • 58.
    58 Méthodes d’instance ❑Les méthodesdéterminent le comportement des objets d’une classe donnée <modificateur> <type> < nom>(<liste_arguments>)<bloc d’instructions> ❑Le type du résultat produit ou void si elle ne produit pas de résultat ❑Le nom de la méthode (identifiant valide) ❑Le type et le nom des paramètres formels, placés entre parenthèses ( ); (les paramètres sont séparés par des “,“). Le nombre de paramètres est fixe : il n’est pas possible de définir des méthodes à arguments variables ❑Un bloc d’instructions qui constituent le corps de la méthode public class Cercle { public double x,y; // les coordonnées du centre public double r; // le rayon public double circonférence (){ return 2*3.14*r;} public double surface(){ return 3.14*r*r; } }
  • 59.
    59 Membres de classe ❑un membre est déclaré avec le modificateur static : membre de classe (champ ou méthode) ❑ un membre qui n’est pas de classe est dit d’instance NomClasse.membre public class Count { private int serialNumber; private static int counter =0; public Count(){ counter++; serialNumber=counter; } } public class Cercle{ public double x,y,r; … public Cercle bigger(Cercle c){ if (c.r>r) return c else return this; } public static Cercle bigger(Cercle a, Cercle b){ if (a.r>b.r) return a else return b; } …..} Cercle c=Cercle.bigger(a,b);
  • 60.
    60 Modificateurs ❑ Par défautles classes sont disponibles pour tous les membres qu’elles contiennent, et ceux-ci sont disponibles les uns pour les autres. Mais, cet accès peut être grandement modifié. ❑ Les modificateurs d’accès déterminent la visibilité des informations d’une classe ou d’un membre par rapport aux autres membres et aux autres classes. Les modificateurs d’accès sont: ❑ public : Un membre public est visible par les membres qui sont hors de sa portée, tant que la classe parent est visible. Une classe publique est visible par toutes les autres classes de tous les autres paquets. ❑ private : L’accès à un membre privé est limité à la classe de ce membre ❑ protected : Un membre protégé peut être accédé par les autres membres de sa classe et par les membres des classes du même paquet (tant que la classe parent du membre est accessible), mais pas par les autres paquets. Une classe protégée est accessible aux autres classes du même paquet, mais pas aux autres paquets. ❑ Si aucun modificateur d’accès n’est déclaré, le membre est disponible pour toutes les classes se trouvant dans le paquet parent, mais pas à l’extérieur du paquet.
  • 61.
    61 Modificateurs… class tailleFine { privateboolean invitationDonnée = false; // C’est privé. private int poids = 75 // C’est privé aussi. public void accepterInvitation() // C’est public. { invitationDonnée = true;} //La classe PetitFour est déclarée et l’objet // petitFour est instancié ailleurs : public void manger(PetitFour petitFour) { /* Cet objet n’accepte davantage de petits- fours que s’il a une invitation * et s’il est capable d’accepter. Remarquez que estNourritureAcceptée() * cherche à vérifier si l’objet est trop gros pour accepter davantage de * nourriture : */ if (invitationDonnée && estNourritureAcceptée()) {poids += petitFour.obtenirPoids();} } //Seul l’objet sait s’il accepte la nourriture : private boolean estNourritureAcceptée() { //Cet objet n’acceptera de la nourriture que s’il a return (estTropGros() ? false : true); } //Les objets du même paquet peuvent voir si cet objet protected boolean estTropGros() { //Il peut accepter de la nourriture si son poids est return (poids > 80) ? true : false; } } ● estNourritureAcceptée() et invitationDonnée sont private. Seuls les membres à l’intérieur de cette classe savent si l’objet est capable d’accepter de la nourriture ou s’il a une invitation. ● estTropGros() est protected. Seules les classes de ce paquet peuvent voir si le poids de cet objet excède ou non sa limite. ●accepterInvitation() et manger(). N’importe quelle classe peut percevoir ces méthodes.
  • 62.
    62 Constructeur ❑ Le motclé new est utilisé pour créer dynamiquement une nouvelle instance de la classe : Créer dynamiquement une nouvelle instance de la classe ❑ Toute classe comporte au moins un constructeur ❑ Un constructeur : est une méthode ayant le même nom que la classe n’ayant pas de type de retour ❑ Si, on n’écrit pas un constructeur, un constructeur est fourni automatiquement. Ce dernier ne prend aucun argument et son corps est vide ❑ Il est important de réaliser que si vous ajoutez une déclaration de constructeur comportant des arguments à une classe qui n’avait pas de constructeur explicite auparavant ; vous perdez le constructeur par défaut. A partir de là, les appels de new Xxx() causeront des erreurs de compilation ❑ Il peut avoir plusieurs constructeurs pour une même classe (plusieurs façons d’initialisation)
  • 63.
    63 Constructeur… public class Cercle{ publicdouble x, y, r; public Cercle (double x, double y, double r) { this.x=x; this.y=y; this.r=r; } public double circonférence() { return 2*3.14*r;} public double surface(){ return 3.14*r*r;} } Cercle c= new Cercle(1.41,-1.0,.25); public class Cercle { public double x, y, r; public Cercle(double x, double y, double r) { this.x=x; this.y=y; this.r=r; } public Cercle(double r) { x=0.0; y=0.0; this.r=r;} public Cercle(Cercle c){x=c.x; y=c.y; r=c.r;} public Cercle(){x=0.0; y=0.0; r=1.0;} public double circonférence(){ return 2*3.14*r;} public double surface(){ return 3.14*r*r;} }
  • 64.
    64 Surcharge ❑ Plusieurs méthodespeuvent porter le même nom dans une même classe ❑ Les méthodes doivent différer par le nombre des arguments, ou par le type des arguments ❑ Les constructeurs multiples est un cas particulier de surcharge ❑ Le compilateur ne peut distinguer deux méthodes se différenciant uniquement par leur type de retour class Rectangle { …. void doubler() { largeur*=2; hauteur*=2; } void doubler(boolean l, boolean h){ if (l) largeur*=2; if (h) hauteur*=2; } } class TestRecDisk{ public static void main (String arg[]) { r.doubler(); // largeur et hauteur r.doubler(false, true); // uniquement la //hauteur }
  • 65.
    65 Gestion de lamémoire ❑ MaClasse X, Y; // X et Y ne sont pas des objets mais des références ❑ X= new MaClasse(); // c’est un objet ❑ gC : Garbage Collector ou ramasse-miettes est chargé de détecter les objets devenus inaccessibles ❑ La récupération de mémoire peut alors être invoquée explicitement par le programmeur à des moments bien précis avec la méthode System.gc()
  • 66.
    66 Transtypage et conversion ❑Les valeurs des types de données peuvent être convertis dans un autre type. ❑ Les valeurs d’une classe peuvent être converties d’une classe à une autre classe de la même hiérarchie. ❑ Des restrictions logiques évidentes s’appliquent. Une conversion d’agrandissement — d’un type petit vers un plus grand — est facile, mais une conversion de raccourcissement — d’un type grand (par exemple, double ou Mammifère) vers un plus petit (par exemple, float ou Ours) — est dangereuse pour vos données (sauf si vous êtes certain que les données tiendront dans les paramètres du nouveau type). ❑ Une conversion de raccourcissement requiert une opération spéciale qu’on appelle le transtypage. ❑ Les conversions suivantes ne présentent aucun risque pour vos données : Type initial Converti en type byte short, char, int, long, float, double short int, long, float, double char int, long, float, double int long, float, double long float, double float double
  • 67.
    67 Transtypage et conversion… ❑Pour transtyper un type de données, placez le type vers lequel transtyper entre parenthèses, immédiatement avant la variable à transtyper : (int)x. float x = 1.00; //déclaration de x en float int y = (int)x; //transtypage de x vers un int nommé y ❑ Il n ’est pas possible de transformer les types primitifs en objets par une opération de changement de type (cast). Il existe des classes enveloppes dont le seul but est d’encapsuler un type simple dans un objet (Boolean, Integer, Float, Character, Double, Long) boolean b= true; Boolean ObjB= new Boolean(b); boolean b2= ObjB.booleanValue(); ❑ Java fournit des classes qui correspondent aux types de données primitifs. ❑ Pour des conversions de classe en classe correctes autres que celles indiquées ici, les conversions d’agrandissement sont implicites. ❑ nomObjetATranstyper = (ClasseObjetVersQuiTranstyper)nomObjetVersQuiTranstyper; ❑ Il faut utiliser le transtypage entre les classes se trouvant dans la même hiérarchie d’héritage.
  • 68.
    68 Le passage deparamètres ● Le passage des tableaux comme paramètres se fait par adresse (référence): On peut accéder et modifier les valeurs du tableau passé comme paramètre. class Tableauparam{ static void listerTab( float[] note, int []coef) {System.out.println(“/n Notet coefficient“); for (int i=0; i<note.length;i++) System.out.println(“note[i]+ “tt“+ coef[i]);} static void modifCoef (int []coeff, int ind, int val) {coeff[ind]=val;} public static void main( String args[]) {int[] coef={1,3,2}; float[]note={10.75f,12f,8.25f}; listerTab (note,coef); modifCoef(coef,1,4); listerTab(note,coef); }} Résultat d’exécution Note Coefficient 10.75 1 12.0 3 8.25 2 Note Coefficient 10.75 1 12.0 4 8.25 2
  • 69.
    69 Le passage deparamètres… ❑ Le passage des variables de type primitif comme paramètres se fait par valeur : une modification de cette variable dans une fonction est locale à cette dernière et non répercutée sur le programme appelant. class SomMoyF{ static int somme( int[] tab, float moyenne) int somme=0; for (int i=0; i<tab.length;i++) somme+=tab[i]; moyenne=somme/tab.length; System.out.println(“dans la Fnt somme moyenne= “+ moyenne}; return somme} public static void main( String args[]) {int somvect; float moy=0; int[]vecteur={10, 15, 20}; Somvect=somme(vecteur,moy); System.out.println(“dans main somvect=“ somvect + “moyenne“ = “+ moy);}} Résultat d’exécution Dans somme : moyenne =15.0 Dans main : somvect =45, moy=0.0
  • 70.
    70 Le passage deparamètres: Solution envelopper… ❑ Envelopper le type primitif dans une classe class reel{ float valeur;} class SomMoyok{ static int somme( int[] tab, reel moyenne) int somme=0; for (int i=0; i<tab.length;i++) somme+=tab[i]; moyenne.valeur=somme/tab.length; System.out.println(“dans la Fnt somme moyenne= “ + moyenne}; return somme} public static void main( String args[]) {int somvect; reel moy= new reel(); int[]vecteur={10, 15, 20}; Somvect=somme(vecteur,moy); System.out.println(“dans main somvect=“somvect + “moyenne“ = “+ moy.valeur);}} Résultat d’exécution Dans somme : moyenne =15.0 Dans main : somvect =45, moy=15.0
  • 71.
  • 72.
    72 Les conversions detype ●Lors de la déclaration, il est possible d'utiliser un cast : ● Exemple: int entier = 5; float flottant = (float) entier; ●La conversion peut entraîner une perte d'informations. Il n'existe pas en Java de fonction pour convertir : les conversions de type se font par des méthodes. ●La bibliothèque de classes API fournit une série de classes qui contiennent des méthodes de manipulation et de conversion de types élémentaires. pour les nombres à virgule flottante en double précision (double) Double pour les nombres à virgules flottante (float) Float pour les entiers long signés (long) Long pour les valeurs entières (integer) Integer pour les chaînes de caractères Unicode String Rôle Classe
  • 73.
    73 La Classe java.lang.Integer ●Elle permet de représenter un entier sous la forme d'un objet. public final class Integer extends Number {public static final int MAX_VALUE // la valeur max d'un int public static final int MIN_VALUE public static final Class TYPE // l'objet classe représentant le type int public Integer(int value) // constructeur public Integer(String s) throws NumberFormatException public static String toString(int i, int radix) //radix est la base ......... public static String toString(int i) public static int parseInt(String s) throws NumberFormatException ........ public static Integer valueOf(String s) throws NumberFormatException ........ public int intValue()
  • 74.
    74 La Classe java.lang.Boolean ●Ellepermet de représenter un booléen sous la forme d'un objet. public final class Boolean extends Object {public static final Boolean TRUE public static final Boolean FALSE public static final Class TYPE public Boolean(boolean value) ........ public boolean booleanValue() ........ public String toString() ........
  • 75.
    75 La Classe java.lang.Math ●C'est la bibliothèque mathématique de Java.Toutes ses méthodes sont publiques et statiques. public final class Math extends Object { public static final double E public static final double PI public static native double sin(double a) public static native double cos(double a) public static native double tan(double a) public static native double asin(double a) public static native double acos(double a) public static native double atan(double a) public static native double exp(double a) public static native double log(double a) public static native double sqrt(double a) public static native double ceil(double a) // partie entiere sup public static native double floor(double a) // partie entiere inf public static native double pow(double a,double b) throws ArithmeticException // a puissance b public static int round(float a) public static synchronized double random() public static int abs(int a) ....... et les surcharges de abs ....... public static int max(int a,int b) ....... et les surcharges de max ....... public static int min(int a,int b) ....... et les surcharges de min .......
  • 76.
    76 Les conversions detype ● Conversion d'un entier int en chaîne de caractère String int i = 10; String montexte = new String(); montexte =montexte.valueOf(i); ●valueOf est également définie pour des arguments de type boolean, long, float, double et char ● Conversion d'une chaîne de caractères String en entier int String montexte = new String(« 10 »); Integer nomnombre=new Integer(montexte); int i = monnombre.intValue(); //convertion d'Integer en int ● Conversion d'un entier int en entier long int i=10; Integer monnombre=new Integer(i); long j=monnombre.longValue();
  • 77.
    77 Les conversions detype ● La définition d'une chaîne : Exemple: String texte = "bonjour"; ● Remplacement: Exemple : String texte = « Java Java Java ».replace('a','o');// erroné ● => String texte = « Java Java Java »; texte = texte.replace('a','o'); ●Addition de chaines: l'opérateur + ● Exemple: String texte = " "; texte += " Hello "; texte += " World3 "; ● Cet opérateur sert aussi à concaténer des chaînes avec tous les types de bases. ●Comparaison de deux chaines : la méthode equals() ● String texte1 = "texte 1 "; String texte2 = "texte 2 "; if ( texte1.equals(texte2) )... ● Détermination de la longueur d'une chaîne : La méthode length() ● Exemple: String texte = "texte"; int longueur = texte.length(); ● Modification de la casse d'une chaîne : Les méthodes Java toUpperCase() et toLowerCase() ● Exemple: String texte = "texte "; String textemaj = texte.toUpperCase();
  • 78.
    78 Les Chaines decaractères enlève les caractères non significatifs de la chaîne trim() renvoie la chaîne en majuscule toUpperCase() renvoie la chaîne en minuscule toLowerCase() renvoie une partie de la chaîne substring(int,int) Vérifie si la chaîne commence par la sous chaîne startsWith(String int) renvoie la chaîne dont les occurrences d'un caractère sont remplacées replace(char,char) renvoie la longueur de la chaîne length() renvoie la dernière position à laquelle l'argument est contenu dans la chaîne lastIndexOf(String) renvoie la position de début à laquelle l'argument est contenu dans la chaîne indexOf(String) compare la chaîne sans tenir compte de la casse equalsIgnoreCase(String) vérifie si la chaîne se termine par l'argument endsWith(String) ajoute l'argument à la chaîne et renvoie la nouvelle chaîne concat(String) compare la chaîne avec l'argument compareTo(String) renvoie le nieme caractère de la chaîne charAt(int) Rôle Méthodes la classe String
  • 79.
  • 80.
    80 La Classe Object ●C'est la super classe de toutes les classes Java : toutes ces méthodes sont donc héritées par toutes les classes. ● La méthode getClass() : getClass() renvoie un objet de la classe Class qui représente la classe de l'objet. ● Exemple : String nomClasse = monObject.getClass().getName(); ● La méthode toString() : renvoie le nom de la classe, suivi du séparateur @, lui même suivi par la valeur de hachage de l'objet. ● La méthode equals() : implémente une comparaison par défaut. ● Sa définition dans Object compare les références : donc obj1.equals(obj2) ne renverra true que si obj1 et obj2 désignent le même objet. ● Dans une sous classe de Object, pour laquelle on a besoin de pouvoir dire que deux objets distincts peuvent être égaux, il faut redéfinir la méthode equals héritée de Object.
  • 81.
    81 La Classe Object ●La méthode clone() : Si x désigne un objet obj1, l'exécution de x.clone() renvoie un second objet obj2, qui est une copie de obj1 : ● si obj1 est ensuite modifié, obj2 n'est pas affecté par ce changement. ● Par défaut, la méthode clone(), héritée de Object fait une copie variable par variable : elle offre donc un comportement acceptable pour de très nombreuses sous classe de Object. ● Cependant comme le processus de duplication peut être délicat à gérer pour certaines classes (par exemple des objets de la classe Container), l'héritage de clone ne suffit pas pour qu'une classe supporte le clonage. ● Pour permettre le clonage d'une classe, il faut implémenter dans la classe l'interface Cloneable. ● La première chose que fait la méthode clone() de la classe Object, quand elle est appelée, est de tester si la classe implémente Cloneable. Si ce n'est pas le cas, elle lève l'exception CloneNotSupportedException
  • 82.
    82 La classe StringTokenizer ●Permet de découper une chaîne de caractères (objet de type String) en fonction de séparateurs. Le constructeur de la classe accepte 2 paramètres : la chaîne à décomposer et une chaîne contenant les séparateurs ● Exemple: import java.util.*; class test9 { public static void main(String args[]) { StringTokenizer st = new StringTokenizer("chaine1,chaine2,chaine3,chaine4",","); while (st.hasMoreTokens()) {System.out.println((st.nextToken()) } } } ● La méthode hasMoreTokens() fournit un contrôle d'itération sur la collection en renvoyant un booleen indiquant si il reste encore des éléments. ● La méthode NextToken() renvoie le prochain élément sous la forme d'un objet String
  • 83.
    83 La classe Random ●Permet de générer des nombres pseudo-aléatoires. Après l'appel au constructeur, il suffit d'appeler la méthode correspondant au type désiré : nextInt(), nextLong(), nextFloat() ou nextDouble() ● Méthodes valeur de retour ● nextInt entre Integer.MIN_VALUE et Interger.MAX_VALUE ● nextLong entre long.MIN_VALUE et long.MAX_VALUE ● nextFloat ou nextDoubl entre 0.0 et 1.0 ● Exemple : import java.util.*; class test9 { public static void main (String args[]) { Random r = new Random(); int a = r.nextInt() %10; //entier entre -9 et 9 System.out.println("a = "+a); } }
  • 84.
    84 Les classes Dateet Calendar ● En java, la classe Date permet de manipuler les dates. ● Exemple : ● import java.util.*; ... Date maintenant = new Date(); if (maintenant.getDay() == 1) System.out.println(" lundi "); ● Le constructeur d'un objet Date l'initialise avec la date et l'heure courante du système. ● Exemple : recherche et affichage de l'heure ● import java.util.*; import java.text.*; public class TestHeure { public static void main(String[] args) { Date date = new Date(); System.out.println(DateFormat.getTimeInstance().format(date)); } } Résultat : 22:05:21 ● La méthode getTime() permet de calculer le nombre de millisecondes écoulées entre la date qui est encapsulée dans l'objet qui reçoit le message getTime et le premier janvier 1970 à minuit GMT.
  • 85.
    85 ● public classTestCalendar { public static void main(java.lang.String[] args) { Calendar c = Calendar.getInstance(); if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) System.out.println(" nous sommes lundi "); if (c.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) System.out.println(" nous sommes mardi "); if (c.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) System.out.println(" nous sommes mercredi "); if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) System.out.println(" nous sommes jeudi "); if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) System.out.println(" nous sommes vendrei "); if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) System.out.println(" nous sommes samedi "); if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) System.out.println(" nous sommes dimanche "); } } ● Résultat : nous sommes lundi
  • 86.
    86 La classe Vector retournele premier élément du vecteur (celui dont l'index est égal à zéro) Object firstElement() retourne une enumeration contenant tous les éléments du vecteur Enumeration elements() retourne l'objet à l'index indiqué Object elementAt(int) retourne true si l'objet est dans le vecteur boolean contains(Object) ajouter un objet dans le vecteur void addElement(Object) Rôle Méthode ●Stocker des objets de classes différentes dans un vecteur mais les éléments stockés doivent obligatoirement être des objets (pour le type primitif il faut utiliser les wrappers tel que Integer ou Float mais pas int ou float).
  • 87.
    87 La classe Vector(bis) nombre d'objets du vecteur int size() remplacer l'élément à l'index par l'objet void setElementAt(object, int) supprime l'objet à l'index indiqué void removeElementAt(int) supprime l'objet du vecteur void removeElement(Objec t) vider le vecteur void removeAllElements() retourne le dernier élément du vecteur Objet lastElement() retourne un booléen si le vecteur est vide boolean isEmpty() insérer un objet à l'index indiqué void insertElementAt(Obje ct, int) renvoie le rang de l'élément ou -1 int indexOf(Object) Rôle Méthode
  • 88.
    88 La classe vector…Exemple ●Vector v = new Vector(); v.addElement(new Integer(10)); v.addElement(new Float(3.1416)); v.insertElementAt("chaine ",1); System.out.println(" le vecteur contient "+v.size()+ " elements "); String retrouve = (String) v.elementAt(1); System.out.println(" le 1er élément = "+retrouve); ● Exemple : le parcours d'un vecteur Vector v = new Vector(); ... for (int i = 0; i < v.size() ; i ++) { System.out.println(v.elementAt(i)); }
  • 89.
    89 La class Stack ●Import java.util.Stack; ● L'image traditionnelle de la pile est celle de la pile d'assiettes, on parle aussi de liste LIFO (Last In First Out). L'insertion et la suppression d'éléments se fait par la même extrêmité. Les opérations classiques sur les piles sont PileVide, Empiler, Depiler. ● La classe java.util.Stack hérite de la classe java.util.Vector, et implémente les piles. ● un constructeur sans argument : public Stack(); ● pour empiler : public Object push(Object item); ● pour dépiler : public synchronized Object pop(); ● pour accéder au sommet de la pile (sans le supprimer) : public synchronized Object peek(); ● pour tester si la pile est vide : public boolean empty(); ● pour rechercher un objet dans la pile : public synchronized int search(Object o);