Vous êtes sur la page 1sur 94

CHAPITRE 3: SYNTAXE DE JAVA

Plan du chapitre3
2

1. La structure d’un programme simple en java


2. Les commentaires
3. Les identificateurs
4. Les Mots réservés
5. Les types de données
6. Les opérateurs
7. Les structures conditionnelles
8. Les structures itératives
9. Les tableaux
La structure d’un programme java
3
 Un programme java simple qui ne contient que la fonction
principale main() doit être défini sous forme d’une classe:
public class Test{
public static void main(String args[ ])
{
…// code du programme
}
}
 La fonction main() est la première méthode exécutée dans un
programme java. Elle doit avoir obligatoirement la signature
suivante:
public static void main(String args[])
ou
public static void main(String[] args)
 le tableau args correspond à la liste des arguments passé depuis la
ligne de commandes.
Les commentaires
4

 // commentaire sur une seule ligne


 /* commentaire sur une ou plusieurs lignes */
 /** commentaire d ’explication */
Les identificateurs (1)
5

 Un identificateur sert à nommer les classes, les


méthodes, les variables, les constantes, etc.
 Un identificateur doit suivre les règles suivantes:
 Commencer par une lettre, _ ou $
 Contient des chiffres et des lettres.
 ne doit pas être un mot clé

Attention : Java est sensible à la casse : Il distingue les


majuscules des minuscules
Les identificateurs (2)
6

Conventions sur les identificateurs :


 Dans un attribut, si plusieurs mots sont accolés, mettre une
majuscule à chacun des mots sauf le premier.
 exemple : uneVariableEntiere
 La première lettre est majuscule pour les classes et les
interfaces.
 exemples : MaClasse, UneJolieFenetre
 La première lettre est minuscule pour les méthodes, les attributs

et les variables
 exemples : setLongueur, i, uneFenetre
 Les constantes sont entièrement en majuscules

 exemple : LONGUEUR_MAX
Les Mots réservés
7

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
Les types de données
8

 Java est un langage fortement typé


 Le type de données précise :
 les valeurs que la variable peut contenir
 les opérations que l’on peut réaliser dessus

 Les types de données de Java sont divisés en deux


grands groupes
 Les types primitifs
 Les types objets (tableaux, classes, interfaces)
Types primitifs(1)
9

Les entiers:
Type primitif Signification Place occupée en
mémoire
byte Entier très court allant de 1 octet
-128 (–27) à 127 (27–1)
short Entier court allant de 2 octets
-32768 à +32767
int Entier allant de -2 147 483 4 octets
648 à +2 147 483 647
long Entier long allant de -263 à 8 octets
+263 
Types primitifs(2)
10

Les réels

Type primitif Signification Place occupée en


mémoire
Nombre réel allant de -1.4 * 10-45 à +3.4 *
float 4 octets
1038
Nombre réel double précision allant de -4.9
double 8 octets
* 10-324 à +1.7 * 10308
Types primitifs(3)
11

Caractères et Booléens

Type primitif Signification Place occupée en


mémoire
Caractère unicode
char (65536 caractères 2 octets
possibles)

variable booléenne
boolean (valeurs : vrai ou 1 octet
faux)
Types primitifs(4)
12

Conversions implicites légales:

Byteshort intlongfloat  double

charint longfloat  double
Constantes
13

 Une constante est déclarée final ne peut plus être


modifiée une fois qu’elle a été initialisée.

 Une constante est par convention écrite en


majuscules

 Exemple :
final int MAX=15;
MAX=MAX+2 ; // erreur
Opérateurs
14

 Mêmes opérateurs que le langage C

 Même ordre de priorité que le langage C:

 Exercice: donnez l'expression complètement parenthésée des


expressions suivantes:
 2 + 3 - 5 + 12 * 2 / 8 - 0

 5 + 2 == 4 * 5 + 1 / 2

 5 <= 8 % 2

 5 <= 9 == 3 >= 6 – 3
Opérateurs arithmétiques
15

Opérateur Dénomination Effet Exemple Résultat (int x=7)


+ opérateur d'addition Ajoute deux x+3 10
valeurs
- opérateur de Soustrait deux x-3 4
soustraction valeurs
* opérateur de Multiplie deux x*3 21
multiplication valeurs

/ opérateur de Calcul le quotient x/3 2


division de la division de
deux valeurs
% opérateur de Calcul le reste de la x%3 1
congruence division de deux
valeurs
= opérateur Affecte une valeur x=3 Met la valeur 3
d'affectation à une variable dans la variable x
Opérateurs d’assignation
16

Opérateur Effet
+= addition deux valeurs et stocke le
résultat dans la variable (à gauche)
-= soustrait deux valeurs et stocke le
résultat dans la variable (à gauche)

*= multiplie deux valeurs et stocke le


résultat dans la variable(à gauche)

/= divise deux valeurs et stocke le quotient


dans la variable (à gauche)

%= divise deux valeurs et stocke le reste


dans la variable (à gauche)
Opérateurs d’incrémentation
17

Opérateur Dénomination Effet Syntaxe Résultat (int


x=7)
++ Incrémentation Augmente x++ ou + 8
d'une unité +x
la variable
-- Décrémentatio Diminue x-- ou --x 6
n d'une unité
la variable

Exemples (pour x=7)


int  y=x++;  y est affecté à 7, puis x est incrémenté à 8
int  y=++x;  x est incrémenté à 8, puis y est affecté à 8
Opérateurs de comparaison
18

Opérateur Dénomination Effet Exemple Résultat


==  opérateur d'égalité Compare deux valeurs et x==3 Retourne true si x est
À ne pas confondre vérifie leur égalité égal à 3, sinon false
avec le signe
d'affectation =

< opérateur d'infériorité Vérifie qu'une variable x<3 Retourne true si x est


stricte est strictement inférieure inférieur à 3, sinon false
à une valeur

<= opérateur d'infériorité Vérifie qu'une variable x<=3 Retourne true si x est


est inférieure ou égale à inférieur ou égal à 3,
une valeur sinon false

> opérateur de supériorité Vérifie qu'une variable x>3 Retourne true si x est


stricte est strictement supérieure supérieur à 3, sinon false
à une valeur

>= opérateur de supériorité Vérifie qu'une variable x>=3 Retourne true si x est


est supérieure ou égale à supérieur ou égal à 3,
une valeur sinon false

!= opérateur de différence Vérifie qu'une variable x!=3 Retourne true si x est


est différente d'une différent de 3, sinon false
valeur
Opérateurs logiques
19

Opérateur Dénomination Effet Syntaxe


|| OU logique Retourne true si au moins condition1||condition2
une des deux conditions
vaut true (ou false sinon)

&& ET logique Retourne true si les deux condition1&&


conditions condition2
valent true(ou false sinon)

! NON logique Retourne true si la variable ! condition


vaut false, et false si elle
vaut true)
Opérateurs bit à bit
20

Opérateur Dénomination Effet Syntaxe Résultat

& ET bit-à-bit Retourne 1 si les 9 & 12 (1001 & 8 (1000)


deux bits de même 1100)
poids sont à 1

| OU inclusif Retourne 1 si l'un 9 | 12 (1001 | 1100) 13 (1101)


ou l'autre des deux
bits de même poids
est à 1 (ou les deux)

^ OU exclusif Retourne 1 si l'un 9 ^ 12 (1001 ^ 5 (0101)


des deux bits de 1100)
même poids est à 1
(mais pas les deux)
Les opérateurs de rotation de bits
21

Opérateur Dénomination Effet Syntaxe Résultat


<< Rotation à gauche Décale les bits vers la gauche 6 << 1 12 (1100)
(multiplie par 2 à chaque (0110 << 1)
décalage). Les bits qui sortent à
gauche sont perdus, tandis que
des zéros sont insérés à droite

>> Rotation à droite avec Décale les bits vers la droite 6 >> 1 3 (0011)
conservation du signe (divise par 2 à chaque décalage). (0110 >> 1)
Les bits qui sortent à droite sont
perdus, tandis que le bit non-nul
de poids plus fort est recopié à
gauche
cast implicite
22

 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.
cast explicite
23

 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.
Bloc d'instructions
24

 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.
Exemple
25

{
int i;
… Bloc externe
{
int j=0;
… i
double x = 3.5; Bloc interne

} j
} x
Affichage sur la sortie standard (1)
26

 Méthodes de java.io.PrintStream
 print() et println() permettent d'afficher
une valeur primitive ou un objet :
 Tout primitif ou objet en Java peut être
transformé automatiquement en une chaîne
de caractères
 Exemple :
System.out.print("x = "+x+" et y =
"+y);
Affichage sur la sortie standard (2)
27

 Méthodes de java.io.PrintStream
 format() et printf() permettent d'afficher
une donnée formatée :
 Premier paramètre : une chaîne de caractère
avec le formatage des valeurs (Exemples :
%d pour les entier, %f pour les réel, \n pour
le retour à la ligne
 Suite des paramètres : les valeurs à afficher
 Exemple :
System.out.printf("%09.3f\n",
Math.PI);
Lecture de l'entrée standard (1)
28

 Créer une instance de la classe java.util.Scanner


qui permet de lire l'entrée standard :
Scanner sc=new Scanner(System.in);
 Méthodes
– nextInt(), nextDouble(), etc.
• Permet de récupérer un token pour chaque type de
données (sauf char)
– nextLine()
• Retourne les caractères saisis de la position actuelle du
buffer d'entré jusqu'à un retour à la ligne sous forme d'une
chaîne de caractères
 Fermer un Scanner
– close()
Lecture de l'entrée standard (2)
29

Exemple:
import java.util.Scanner;
public class Addition
{
public static void main( String args[] )
{
Scanner input = new Scanner( System.in );
int n1,n2,somme;
System.out.print(" Donner le premier entier: " );
n1 = input.nextInt();
System.out.print(" Donner un deuxième entier: " );
n2 = input.nextInt();
somme = n1 + n2;
System.out.printf( "Somme est %d\n", somme ); } }
Structures Conditionnelles (1)
30

if
 Syntaxe:
if (condition)
instruction1 ;(ou bloc d’instructions)
else instruction 2; (ou bloc d’instructions)
 Exemple:

if (i<1) return i * 100;


else return i * 10;
Structures Conditionnelles (2)
31

switch:
 switch (variable) {
case valeur_1 : Liste d'instructions;
break;
case valeur_2: Liste d'instructions;
break;
……..
case valeur_n: Liste d'instructions ;
default: Liste d'instructions;
}
Remarque:
 On ne peut utiliser switch qu'avec les types primitifs : byte, short, int, char.
 Si une instruction case ne contient pas de break alors les traitements associés au
case suivant sont exécutés.
Les structures itératives (1)
32

 boucle while:
while (condition)

instruction ;//ou bloc d’instructions


 Exemple:
public class WhileTest {
public static void main(String args[]) {
double r = 0;
while (r < 0.99)
{ r = Math.random();
System.out.println(r);
}
}
}
Les structures itératives (2)
33

 boucle do while
// Exécuter tant que la condition est vérifiée.
do {
instructions;
}
while (condition);

 Exemple
int i = 100, j = 0, somme = 0 ; 
do { 
    somme += j; 
    j++; } 
while (j <= i);
Les structures itératives (3)
34

 Boucle for
for (e1; e2; e3)

instructions;

 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


Les structures itératives (4)
35

 Boucle for
 Exemple
int somme = 0; 
for (int i=0; i<=100; i++) //la portée de i est limitée au bloc for 

    somme+= i;
 La structure suivante est également correcte :
int somme = 0; 
for (int i=0; i<=100; ) { 
    somme += i; 
    i++ ; }
Etiquette, break, continue et return
36

 Etiquette : N’importe quelle instruction peut être


étiquetée.
 Syntaxe:
Nom_etiquette: instruction ou bloc d’instruction;
 Exemple:
boucle1:
for (int i=0; i<10; i++){
for (int j=0; j<15; j++){
System.out.println(i+“/“+j);
}
}
Etiquette, break, continue et return
37
 Break:
 Sans branchement : sortir de la boucle
 Avec branchement: sortir de la boucle qui porte l’étiquette
 Exemple: externe: while ( ) // étiquette :Boucle externe
{
while ( )
{
...
break externe ; // avec branchement (*)
}
while ()
{
..
break; // sans branchement(#)
}
…… // (#)
}
….. // (*)

}
…..
Etiquette, break, continue et return
38

 continue
 sans branchement: permet de passer

prématurément à l’itération suivante.


 avec branchement: permet de passer

prématurément vers l’étiquette d’une boucle


Etiquette, break, continue et return

39

// BreakAndContinue.java
/** les clauses break et continue */
Résultat:
public class BreakAndContinue { 0
public static void main(String args[]) { 9
System.out.println(("Résultat :" ); 18
for(int i = 0; i < 100; i++) 27
{ if(i == 74) break; // quitter boucle 36
if(i % 9 != 0) continue; // iter.suiv. 45
System.out.println(i); 54
63
}
72
int i = 0; // 10
while(true) 20
{ i++; 30
int j = i * 27; 40
if(j == 1269) break; // quitter
boucle
if(i % 10 != 0) continue; // Top
System.out.println(i);
} }}
Etiquette, break, continue et return
40

 return: permet de quitter une fonction avec une


valeur de retour.

return Expression;
Les tableaux
41

 Tableau est un objet référencé


 Une variable de type tableau n’est pas un type primitif (c’est une référence à un tableau)

 Déclaration

int T1[]; //ou int[] T1

 Allocation
T1=new int[8]; //allocation de 8 entiers pour T1

ou
 Déclaration et allocation
int T1[]=new int[8];
int T2[]={5,7,-12,8}; //avec initialisation

 L’attribut length : retourne la taille d’un tableau


Les tableaux
42

 Java ne supporte pas directement les tableaux à plusieurs dimensions : il faut


déclarer un tableau de tableau.
Exemple :
float tableau[][] = new float[10][10];
La taille du tableau de la seconde dimension peut ne pas être identique pour
chaque occurrence.
Exemple:
int dim1[][] = new int[3][];
dim1[0] = new int[4];
dim1[1] = new int[9];
dim1[2] = new int[2];
 Chaque élément du tableau est initialisé selon son type par l'instruction new : 0
pour les numériques, \0 pour les caractères, false pour les booléens et null pour les
chaînes de caractères et les autres objets.
Les tableaux
43

Exemple :

int T1[]=new int[8]; //allocation de 8 entiers pour T1

T1 0 0 0 0 0 0 0 0 …
Les tableaux
44

public class Tab1D {


public static void main(String args[]){ Résultat :
int[] tabent={1,2,3}; 123
int[] tab2ent= new int [5]; 0 0 20 0 50
boolean [] tbool= new boolean[3]; false false false
System.out.println("Résultat:" );
for (int i=0; i<tabent.length;i++){
System.out.print(tabent[i] + " " );}
System.out.println();
tab2ent[2]=20; tab2ent[4]=50;
for (int i=0; i<tab2ent.length;i++){
System.out.print(tab2ent[i] + " " );}
System.out.println();
for (int i=0; i<tbool.length;i++){
System.out.print(tbool[i] + " ");}
}}
tableau d’objets
45

 Point [ ] tab=new Point[6]; //un tableau de 6 objets de type Point


 La déclaration du tableau ne crée pas les objets référencés

tab null null null null null null

 Les références des objets crées doivent être affectés au tableau par
la suite:
 tab[0]= new Point(1,2);

 tab[1]= new Point(4,7);

 …
Les types de données : Chaîne de caractères
46

 La classe String
 déclaration:
String prenom = new String("Pierre");
String prenom = "Pierre"; // identique à la ligne précédente
 Comparaison:
if (str1.equals(str2))
 La concaténation:
String str1 = "Bonjour ! ";
String str2 = null;
str2 = "Comment vas-tu ?";
String str3 = str1.concat(str2);
ou
String str3 = str1 + str2; //str3 contient " Bonjour ! Comment vas-tu ?"
CHAPITRE 4: CONCEPTS ORIENTÉS
OBJETS DE JAVA
Plan du chapitre4: Concepts orientés objets de java
48

1. Classe
2. Modificateurs de classes
3. Objets
4. Constructeurs
5. Membres d’instance
6. Membres de classe
7. Surcharge de méthodes
Classe(1)
49

Définition:
 Une classe permet de modéliser des objets du

monde Réel.

 Une classe permet de présenter des objets qui sont


conceptuellement similaires.

 Les objets sont des instances de classe.


Classe (2)

50

 Chaque classe est écrite dans un fichier (.java) qui


porte le même nom que la classe.

 Il est possible d’écrire plusieurs classes dans un


même fichier ( Condition: Une seule doit être publique
et le nom du fichier java doit porter le nom de cette
classe.)
Classe(3)

51

 Si plusieurs classes sont définies dans un même


fichier, une seule doit être publique.

 Le nom du fichier source doit être obligatoirement


le même que celui de la classe publique.

 Si un fichier source contient plusieurs classes, le


compilateur va créer un fichier .class pour chaque
classe.
Classe(4)

52

La syntaxe de déclaration d'une classe:

[ modificateurs] class Nom_classe [ extends nom_superclasse ]


[ implements interface_1, interface_2,... ]
{
//Attribut et Méthodes
}
Classe(5)
53

• Exemple de définition de
Déclaration d’une classe
classe accessible à tous nommée
public class Point{ Point
private int x ; // abscisse
private int y ; // Déclaration de variables
ordonnee d’instances non accessibles
public void initialise (int abs, int ord) de l’extérieur de la classe
{
x = abs ;
y = ord ;
}
public void deplace (int dx, int dy)
{ Déclarations de
x += dx ; méthodes
y += dy ; accessibles à tous
}
public void affiche (){
System.out.println ("Je suis un point de coordonnees " + x + " " +
y) ;
}
}
Classe(6)
54

• Utilisation des méthodes d’une classe


– Créer une instance de cette classe : créer un objet
– Appeler les méthodes de cette objet
• Exemple
public class TestPoint{
public static void main (String args[]) {
Point a ; // Variable de type référence sur un objet Point
a = new Point() ; // Construction d’un nouveau objet et assignation
a.initialise(3, 5) ; // Usage des méthodes de l’objet créer et
a.affiche() ; // référencé par la variable a
a.deplace(2, 0) ;
a.affiche() ;

Point b = new Point() ; // deuxième objet instance de la classe


b.initialise (6, 8) ; b.affiche() ; // Point
}
Classe(6)
55

• Mise en œuvre d’un programme


– Chaque classe dans un fichier (.java) toutefois il est
possible de mettre plusieurs classes dans un même
fichier (condition : une seule doit être publique et le
nom de fichier java doit porter le nom de cette
classe).
– Exemple :
• Deux fichiers sources : Point.java et TestPoint.java
• Puis compiler pour obtenir : Point.class et TestPoint.class
• Puis exécuter (la classe qui contient la méthode main()) :
java TestPoint
Modificateurs de classe(1)
56

 Les modificateurs de classe (ClassModifiers) sont :


Modificateurs de classe(2)
57

 public
La classe est accessible
package
partout
Public
public class Point { pa
class
point

int x ; // abscisse du point


int y ; // ordonnée du point

} package2
package3 package4

pa
pa pa
Modificateurs de classe(3)
58

 par défaut: Si aucun modificateur


d'accès n'est déclaré,  la classe  sera accessible par package
l'ensemble des classes et sous-classes situées dans
class
le paquetage parent mais en aucun cas, pa
point

à l'extérieur de ce dernier.
class Point {

int x ; // abscisse du point


int y ; // ordonnée du point
package2 package3 package4
}

pa pa pa
Objets=instances des classes (1)
59

 Déclaration:

Nom_classe nom_objet;

 La déclaration ne crée pas l’objet mais permet de créer une


référence qui ne pointe au départ aucun objet.

Exemple: Point originOne;


Objets=instances des classes (2)
60

Instanciation:
L’opérateur new instancie une classe par:
 Allocation de mémoire pour le nouvel objet et
 Retour d’ une référence à cette mémoire.
 L’opérateur new invoque le constructeur de l'objet

Point originOne=new Point(23, 94);


Constructeur (1)
61

 Définition
un constructeur est une méthode qui porte le même
nom que la classe sans valeur de retour et qui peut
disposer d’arguments.
Le constructeur permet de:
 allouer de la mémoire pour l’objet
 initialiser les attributs de l’objet

 Une méthode exécutée lors de la création d’un objet


(instanciation de la classe à travers le mot clé new)
Constructeur (2)
62

 Exemple :
 L’usage d’un objet Point nécessite l’appel
de la méthode void initialise(int, int) qui
permet d’initialiser l’abscisse et l’ordonnée
du Point.
 Problème :
• Et si celui qui utilise l’objet oublie d’appeler en
premier lieu cette méthode ?
 Solution :
• Utiliser un constructeur
Constructeur (3)
63

 Exemple :
public class Point {
private int x, y ;

public Point (int abs, int ord){


x = abs ;
y = ord ;
}

public void deplace (int dx, int


dy) {
x += dx ;
y += dy ;
}

public void affiche () {


System.out.println ("Je suis
un point de coordonnees " +
x + " " + y) ;
}
}
Constructeur (4)
64

 Exemple (suite) :
public class TestPoint {

public static void main(String[] args) {


Point a ;
a = new Point(3, 5) ;
a.affiche() ;
a.deplace(2, 0) ;
a.affiche() ;

Point b = new Point(6, 8) ;


b.affiche() ;
}
}
Constructeur (5)
65

 Constructeur par défaut


Si aucun constructeur n’est défini, java offre pour chaque
classe un constructeur par défaut, implicite et sans
arguments qui instancie par défaut les attributs:
 Entiers et Réels à 0

 Objets à null

 Boolean à false

Remarque: Si on définit un constructeur, le constructeur


par défaut ne peut plus être appelé.
Constructeur (6)
66

 Exemple :
public class Point {
private int x, y ;

public Point (int abs, int ord)


{
x = abs ;
y = ord ;
}

public void deplace (int dx, int


dy) {
x += dx ;
y += dy ;
}

public void affiche () {


System.out.println ("Je suis
un point de coordonnees " +
x + " " + y) ;
}
}
Constructeur (7)
67

 Exemple (suite) :
public class TestPoint {

public static void main(String[] args) {


Point a, c ;
c=new Point(); // Erreur de compilation
c.affiche() ;
a = new Point(3, 5) ;
a.affiche() ;
a.deplace(2, 0) ;
a.affiche() ;

Point b = new Point(6, 8) ;


b.affiche() ;
}
}
Constructeur (8)
68

 Surcharge de constructeurs: Une classe peut avoir


plusieurs constructeurs qui diffèrent par le nombre et la
nature de leurs paramètres.
 Exemple:
public class Point {

int x; // x: abscisse du point,


int y; // y: ordonnée du point.

public Point(int a, int b){ x=a; y=b;} deux constructeurs


public Point(){x=0; y=0; }

public double distance(Point p){


return (Math.sqrt((Math.pow(x,2)+Math.pow(y, 2))));
}}
Constructeur (8)
69

 Suite Exemple:
public class TestPoint {
public static void main(String args[])
{
Point p1=new Point();
Point p2=new Point(2,5);
p1.affiche();
p2.affiche();
}

}
Accesseurs / Modificateurs
70

En général, on évite de modifier directement les attributs


à l’extérieur du programme (de toute manière un attribut
privé ne peut être modifié à l'extérieur ;
On utilise plutôt le principe d’encapsulation (c’est-à-dire
que l’on utilise une méthode pour positionner un attribut ) :
 Méthodes d’altération (Eng. Mutator)
 Nomenclature : setXXXXX

 Méthodes d’accès (Eng. Accessor)


 Nomenclature : getXXXXX

Exemples :
public void setCoordonnees(int a, int b){x=a; y=b;};
public int getAbscisse() {return x;}
public int getOrdonnee() {return y;}
La référence this
71

 this désigne l’objet courant(c’est une référence sur l’objet


courant).
 lever l’ambiguité de nom . Lorsqu’une variable locale
ou paramètre d’une méthode porte le même nom d‘un
attribut de la classe.
 Exemple : 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 an cache l’attribut an*/}
Date(int an, int mois, int jour)
{
this(an); /* Appel du deuxième constructeur*/
this.jour=jour;
this.mois=mois;
}}
Création d’objets identiques
72

 m1 et m2 contiennent la même référence


et pointent donc tous les deux sur le
MaClasse m1 = new MaClasse();
même objet : les modifications faites à
MaClasse m2 = m1;
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 MaClasse m1 = new MaClasse();
classes en Java. MaClasse m2 = m1.clone();
 m1 et m2 ne contiennent plus la même
référence et pointent donc sur des objets
différents.
Création d’objets identiques
73

 Les variables de type objet que l'on


déclare ne contiennent pas un objet
mais une référence vers cet objet. Rectangle r1 = new Rectangle(100,50);
Rectangle r2 = new Rectangle(100,50);
 c1 = c2 : copie la référence de l'objet
if (r1 == r1) { ... } // vrai
c2 dans c1  c1 et c2 réfèrent au if (r1 == r2) { ... } // faux
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
Membres d’instance(1)
74

Définition:
 On désigne par membres d’instance les attributs et

les méthodes non statiques qui ne sont accessibles


qu’à partir d’une instance de classe (objet).
 L’accès aux membres nécessite l’instanciation de la

classe les contenant.


 La valeur d’un attribut d’instance est différente pour

chaque instance.
Membres d’instance(2)
75

Exemple:
public class Point {

int x; // abscisse
int y; // ordonnée
Membres
public Point(int a, int b){ D’instances
x=a; y=b;}

public void deplace(int dx,int dy){


x=x+dx; y=y+dy; }

public double distance(Point p){


return (Math.sqrt((Math.pow(x,2)+Math.pow(y, 2))));
}

}
Membres d’instance(3)
76

 l’accès aux membres se fait par un « . » précédé par


le nom de l’instance

public class TestPoint {


public static void main(String args[])
{
Point p=new Point(2,5);
p.deplace(2, 2);
System.out.print("x="+p.x+"y="+p.y);
}

}
Membres d’instance(4)
77

 L’accès à des parties de class Individu{


String nom;
variables s’effectue à l’aide de int age;
float salaire;
l’opérateur “. “  int calculer () {
return salaire-100;}
nomObjet.membre; }

Individu X; // X est une référence


X= new Individu(); // X est un objet
 l’invocation d’une méthode X.nom=“Ali“;
X.salaire=1000;
s’effectue par :
int a = X.calculer();
nomObjet.nomMéthode();
Membres de classe(1)
78

Un membre (attribut ou méthode) déclaré avec le modificateur static


est un membre de classe.

 Les attributs statiques sont communs à toutes les instances de classe

static int n; // variable statique

Les attributs statiques sont initialisés par défaut à 0 pour les nombres
entier et réels, à false pour les booléens et à null pour les références.

Il n’est pas nécessaire d’instancier une classe pour accéder à un des


membres statiques. On peut y accéder sans création d’instance de la


classe: NomClasse.membre

Un membre qui n’est pas statique est dit d’instance



Membres de classe(2)
79

Variable de classe:
C’est une variable qui, au lieu d’exister dans chaque
instance de classe, n’existe qu’en un seul exemplaire
pour toutes les instances de classe.
public class C {

static int n; n
float x;
}
class E{ x x
C a1=new C();
C a2=new C();}
Objet a1 Objet a2
Membres de classe(3)

80

Exercice : Quel est le résultat d’exécution du


programme suivant:
class T{
static int nombre;
static final int nb=5;
T(){nombre++;
System.out.println(« Je suis l’objet numéro"+ nombre);}}

public class Test1(){


public static void main(String args[]){
T t1= new T();
T t2= new T();
System.out.println("le nombre d'objets est "+ T.nombre);
System.out.println("le nombre total d'objets est "+ T.nb);
}
}
Membres de classe(4)

81

Je suis l’objet numéro1


Je suis l’objet numéro2
le nombre d'objets est 2
le nombre total d'objets est 5

 Remarque: Une variable de classe doit être


initialisée avant l’appel au constructeur. En effet,
cette variable peut être utilisée sans même qu’une
instance de classe n’est crée, et donc sans appel au
constructeur.
Membres de classe(5)
82

Méthode de classe:
 Méthode indépendante des instances de classe

crées.
 Exemple: main(), Math.sqrt()..

 Déclarée avec le mot static

 Une méthode qui n’agit que sur les variables de

classe

Exercice: Ecrivez une méthode de la classe T qui


permet d’accéder au nombre d’objets crées.
Membres de classe(6)
83

Exemples :

Le comportement d’une méthode statique ne dépend


pas de la valeur des variables d'instance
Utilisation:
class MaClassMath { L'appel à une méthode statique se fait en
utilisant le nom de la classe.
static int min (int a , int b) {
if(a<b){
return a; class Test {
} else { public static void main ( String [] args ){
return b; int x = MaClassMath.min (21 ,4);
} System.out.println (x);
} }
} }
-21-
Classe interne (1)
84

 C’est une classe défini dans une autre


classe
 Un objet de la classe interne est toujours associé à
un objet de classe externe (qui lui a donné
naissance)
 Un objet de la classe interne a accès aux variables
et méthodes (même privés) de l’objet de la classe
externe qui lui a donné naissance
 Un objet de la classe externe a accès aux variables
et méthodes (même privés) de l’objet de la classe
interne auquel il a donné naissance
Classe interne (2)
85

 Exemple
public class Cercle {
private double rayon;
private Point centre;
public Cercle(int abs, int ord, double rayon){
centre = new Point(abs, ord);
this.rayon= rayon;
}
public void afficheCercle() {
System.out.println ("Centre :"+ centre.x+ " , "+ centre.y);

System.out.println ("Rayon : "+rayon);}


class Point {
private int x , y;
Point (int x, int y) {//? public
this.x = x;
this.y = y;
}
}
Paquetage (1)
86

 Regroupement logique d’un ensemble


de classe
 Porte un identificateur (par convention en
miniscule)
 Conventionnellement il doit avoir un root parmi :
com, edu, gov, mil, net, org ou des lettres
d’identification du pays
• Exemple : edu.monpackage
 Pour indiquer qu’une classe appartient à un
package :
package nom_de_ package;
 Si rien n’est indiqué la classe appartient au package
par défaut (default package)
Paquetage (2)
87

 Pour
faire référence à une classe qui
appartient à un autre package :
 1ère méthode :
nom_package.nom_classe
• Exemple :
edu.monpackage.Point p = new
edu.monpackage.Point();
 2ième méthode :
import nom_paquetage.Nom_ classe OU *;
• Exemple :
import edu.monpackage.Point;

import edu.monpackage.*;
Paquetage (3)
88

 Exercice :
 Créez deux classes publiques A et B appartenant chacune
à un package différent. Puis dans la classe A fait appel
dans une méthode nommée a() à une méthode publique b()
de la classe B. la méthode b() doit afficher le message
‘’Hello package !’’.
Modificateurs d’accès (1)
89

 Objectif :
 Fixer la visibilité d’une classe ou d’un membre
d’une classe par rapport aux autres classes.
 Autoriser ou non l’accès à une classe
 Instancier la classe
 Hériter de la classe
 Accéder aux membre de la classe
 Modificateurs d’accès pour les classes :
 public : visible à toutes les classes
 default : visible uniquement aux classes du même
package
Modificateurs d’accès (2)
90

 Modificateurs d’accès pour les


membres (variables et méthodes)
d’une classe :
 public
 protected
 default
 private
 Remarque : si une classe n’est pas visible
alors quelque soit le type du modificateur
d’accès des membres ils ne seront pas
visibles.
Modificateurs d’accès (3)
91

Même package Autre package


Même Classe Sous-classe Autre classe Sous-classe Autre Classe

private X
default X X X
(package)
protected X X X X
(seulement par héritage)

public X X X X X

Par accès : créer un objet et accéder à un de ses membres


Par héritage : utiliser un membre hérité
Surcharge de méthodes (1)
92

• Nomenclature
– Surcharge ou Surdéfinition (overloading)
• Principe
– Plusieurs méthodes peuvent porter le même
nom mais avec impérativement une différence
au niveau des paramètres formels (nombre,
type ou ordre)
– Le type de retour n’intervient pas dans le
surcharge des méthodes
Surcharge de méthodes (2)
93
Exemple :
class Point {
private int x, y ; public class TestSurcharge {
// constructeur public static void main
(String args[]) {
public Point (int abs, int ord) { Point a = new Point (1, 2)
x = abs ; y = ord ; ;
} // appelle deplace (int,
int)
// deplace (int, int) a.deplace (1, 3) ;
public void deplace (int dx, int dy) { // appelle deplace (int)
a.deplace (2) ;
x += dx ; y += dy ;
short p = 3 ;
} // appelle deplace
// deplace (int) (short)
a.deplace (p);
public void deplace (int dx) {
byte b = 2 ;
x += dx ; /* Quelle méthode ? */
} a.deplace (b) ;

// deplace (short) }
public void deplace (short dx){
}
x += dx ;
}
}
Surcharge de méthodes (3)
94

Exercice: Définissez une classe Point qui surcharge le


constructeur comme suit:
 créer un objet Point dont les coordonnées sont égaux à 0.
 créer un objet Point dont les coordonnées sont initialisés à un
entier donné en paramètres.
 créer un objet Point dont les coordonnées sont initialisés avec
deux valeurs données en paramètres
 créer un objet Point dont les coordonnées sont identiques à ceux
d’un autre objet Point donné en paramètres.

 Créer la classe TestPoint qui permet de tester la classe Point.

Vous aimerez peut-être aussi