Chapitre 2 : Concepts OO en JAVA
Concepts Orient s Objets en
JAVA
Objectifs sp cifiques :
1.
Introduire le concept de classe et sa notation (1/2 heure)
2. Ma triser la d finition des attributs et m thodes dune classe (1 heure 30)
3. Ma triser linstanciation des objets et lacc s aux membres dun objet (2 heures 30)
4. Comprendre le concept des classes internes (1 heure 30)
5. Ma triser latout dorganisation package (1 heure 30)
El ments de contenu :
-
-
-
Notion de classe
Attributs et m thodes
Objets et Instanciation
- Membres statiques et mots cl s final, this et null
-
-
Les classes internes
Les packages
Volume horaire : 7h30
Page | 1
Chapitre 2 : Concepts OO en JAVA
1. Notion de classe
1.1.
D finition :
En Java : tout appartient une classe sauf les variables de types primitifs (int, float&).
Une classe comporte sa d claration, des variables et la d finition de ses m thodes.
Une classe se compose de deux parties : un en-t te et un corps. Le corps peut tre divis
en 2 sections : la d claration des donn es et des constantes et la d finition des m thodes.
Les m thodes et les donn es sont pourvues d'attributs de visibilit qui g re leur
accessibilit par les composants hors de la classe.
On ne peut acc der une classe qu partir dune instance de cette classe (un objet).
Les acc s sont sp cifi s travers des modificateurs plac s par le concepteur de la classe
qui d finissent la possibilit de restreindre l'acc s certaines donn es, ou plus
g n ralement certains l ments (m thodes, classes, ...). En effet, les classes sont
pr vues pour tre diffus es (parfois de fa on payante) afin de pouvoir tre r utilis es
par certains programmeurs.
1.2.
D claration dune classe :
1.2.1. Syntaxe g n rale
<modificateurs de visibilit > class nom_de_classe {
//d claration des donn es membres de la classe
//d claration des m thodes de la classe et du corps des m thodes
}
1.2.2. Modificateurs de visibilit de classe
Les modificateurs de classe sont :
public : La classe est accessible pour nimporte quelle autre classe. Certaines classes
(comme la classe principale contenant la fonction main) doivent obligatoirement tre
d clar es publiques.
private : la classe n'est accessible qu' partir du fichier o elle est d finie.
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 d riv es.
abstract : La classe est d finie en tant que classe abstraite. C'est- -dire, contenant une
ou des m thodes abstraites, qui n'ont pas de d finition explicite. Une classe abstraite ne
Page | 2
Chapitre 2 : Concepts OO en JAVA
peut pas tre instanci e : elle ne peut tre instanci e qu travers des classes d riv es
(Cette notion serait vue plus en d tail prochainement dans le cours.
Remarque
- Par convention, en Java les noms de classes commencent par une lettre
majuscule, si elle est compos de plusieurs mots, ces mots doivent tre
li s par _ et commencent par une lettre majuscule.
- Les modificateurs : abstract et final ainsi que public et private sont
mutuellement exclusifs.
- L'ordre des m thodes dans une classe n'a pas d'importance. Si dans
une classe, on rencontre d'abord la m thode A puis la m thode B, B
peut tre appel e sans probl me dans A.
Exemple
public class Hello {
public static void main (String [] args) {
System.out.println ( bonjour le monde ) ;
}
}
2. Membres dune classe
Cest lensemble des l ments d finissant les propri t s structurelles ou fonctionnelles des
instances dune classe : attribut (variable dinstance, variable de classe), m thode (m thode
dinstance, m thode de classe), constructeur, destructeur, classe imbriqu e.
2.1.
Attributs
Les donn es d'une classe sont contenues dans des variables nomm es propri t s ou attributs. Ce
sont des variables qui peuvent tre des variables d'instances, des variables de classes ou des
constantes.
2.1.1. Syntaxe g n rale
< modificateur de visibilit > <type> <nom_attribut> [=<expression>] ;
2.1.2. Modificateurs de visibilit des attributs
Les modificateurs des attributs sont :
Page | 3
Chapitre 2 : Concepts OO en JAVA
public : Lattribut est visible pour nimporte quelle autre classe. Il est pr f rable de ne
pas d clarer un attribut public car cest contradictoire avec la philosophie objet qui
prot ge les donn es des objets.
private : lattribut n'est accessible qu' lint rieur de la classe o il est d fini. Cest le
niveau de protection le plus fort.
protected : Seules les m thodes pr sentes dans le m me package ou dans les sous
classes pourront acc der cet attribut.
Sans modificateur (friendly) : Si aucun modificateur nest sp cifi , alors cet attribut est
visibles pour toutes les classes se trouvant dans le m me package. Le mot friendly n'est
pas officiel : il est emprunt e au langage C++.
Exemple
public class MaClasse {
public int valeur1 ;
int valeur2 ;
protected int valeur3 ;
private int valeur4 ;
}
Exercice
D finir dans la classe Rectangle les attributs longueur et largeur de type entier. Ces attributs ne
doivent tre accessibles qu lint rieur de la classe elle-m me.
class Rectangle {
private int longueur ;
private int largeur ;
}
2.1.3. Variable dinstance (Attribut dobjet)
Une variable dinstance pr cise l' tat d'un objet auquel elle se r f re.
Deux objets diff rents, appartenant la m me classe, peuvent avoir des valeurs
diff rentes dans leurs variables dinstance respectives.
Exemple
Les attributs longueur et largeur d clar s dans la classe Rectangle sont des variables dinstances,
en effet chaque objet de type Rectangle cr poss de ses propres variables initialis par des
valeurs qui diff rent dun objet un autre.
Page | 4
Chapitre 2 : Concepts OO en JAVA
2.1.4. Variable de classe (Attribut de classe)
Une variable de classe est une variable repr sentant des propri t s dont la valeur est
partag e par toutes les instances dune m me classe.
Elles ne sont d finies qu'une seule fois quel que soit le nombre d'objets instanci s de la
classe. Leur d claration est accompagn e du mot cl static.
Chaque instance de la classe partage la m me variable.
Exemple
public class MaClasse {
static int compteur ;
}
Exercice
Ajouter la classe Rectangle pr c demment d finit, un attribut permettant de compter le
nombre de rectangle cr es.
Public class Rectangle {
private int longueur ;
private int largeur ;
static int count ;
}
2.1.5. Constantes
Les constantes sont d finies avec le mot cl final : leur valeur ne peut pas tre modifi e
une fois qu'elles sont initialis es.
Exemple
public class MaClasse {
final double pi=3.14 ;
Publicité
}
2.2.
M thode
Les m thodes sont des fonctions qui impl mentent les traitements de la classe. Les m thodes
repr sentent l quivalent des proc dures ou fonctions dans les langages classiques de
programmation. Les m thodes agissent sur les attributs d finis lint rieur de la classe.
2.2.1. Syntaxe g n rale
<Modificateur> type_de_retour nom_de_la_m thode(liste des param tres>)
{
//d clarations des variables locales
&&&.
// code de la m thode
&&&. }
Exemple
Page | 5
Chapitre 2 : Concepts OO en JAVA
public int add(int a, int b) {
return a + b;
}
Param tre :
Un param tre qui apparait dans la d finition de la m thode est un param tre formel.
Un param tre effectif un param tre qui apparait dans lappel de la m thode
Les param tres sont s par s les uns des autres par une virgule.
Le type de chaque param tre doit tre sp cifi .
Le nom des param tres nest pas forc ment le m me que le nom de la variable du
programme qui sera utilis e lors de lappel, mais il peut tre le m me, car le param tre
est propre la m thode, comme une variable locale.
Lordre des param tres effectifs doit correspondre celui des param tres formels.
Valeur de retour :
Le type retourn peut tre l mentaire ou correspondre un objet. Si la m thode ne
retourne rien, alors on utilise void.
Toutes les m thodes sauf les constructeurs doivent avoir un type de retour.
Ce type doit correspondre au type de ce qui sera retourn la m thode appelante par
l nonc return .
Une seule valeur de retour peut tre retourn e. Cependant, une m thode peut ne pas
avoir de valeur de retour, dans ce cas on crit void la place du type et on ne met pas
de return dans le code.
D s que l nonc return est rencontr , lex cution de la m thode se termine.
Si la m thode retourne un tableau alors les [] peuvent tre pr cis s apr s le type de
retour ou apr s la liste des param tres :
Exemple :
int[] getValeurs() { ... }
int getValeurs()[] { ... }
2.2.2. Modificateurs de visibilit des m thodes
public : la m thode est accessible aux m thodes des autres classes
private : l'usage de la m thode est r serv aux autres m thodes de la m me classe
protected : la m thode ne peut tre invoqu e que par des m thodes de la classe
ou de ses sous classes.
Sans modificateur : la m thode peut tre appel e par toutes autres m thodes des
classes du package auquel appartient la classe.
final : la m thode ne peut tre modifi e (red finition lors de l'h ritage interdite)
Page | 6
Chapitre 2 : Concepts OO en JAVA
static : la m thode appartient simultan ment tous les objets de la classe (comme
une constante d clar e l'int rieur de la classe). Il est inutile d'instancier la classe
pour appeler la m thode mais la m thode ne peut pas manipuler de variable
d'instance. Elle ne peut utiliser que des variables de classes.
Exemple
class MaClasse{
public int valeur ;
public void afficheValeur() {
System.out.println(" nombre entier = " + valeur);
}
public boolean estPositif (){
if (valeur>0) return true ;
else return false ;
}
}
Exercice
Compl tez la classe rectangle par les m thodes suivantes :
- La m thode Affiche() permettant dafficher les caract ristique dun rectangle.
- La m thode calcul_surface() retournant la surface dun rectangle
class Rectangle {
private int longueur ;
int largeur ;
public void affiche( ) {
System.out.println( " la longueur est : "+longueur+ "la largeur est" : +largeur) ;
}
public int calcul_surface ( ) {
return (longueur*largeur) ;
}
}
M thode main()
La m thode main de la classe principale, est ex cut e la premi re lors de l'ex cution d'un
programme Java. Elle doit avoir obligatoirement la signature suivante :
public static void main(String args[])
ou
public static void main(String[] args)
Le nom de l'argument args peut tre quelconque. C'est un tableau de cha nes de caract res
repr sentant les arguments de la ligne de commande.
Passage de param tres
Page | 7
Chapitre 2 : Concepts OO en JAVA
Les arguments sont pass s par valeur : la m thode fait une copie de la variable qui lui est locale.
Lorsqu'un objet est transmis comme argument une m thode, ce n'est pas l'objet lui m me qui
est pass mais une r f rence sur l'objet qui d signe son emplacement m moire d'origine. La
r f rence est bien transmise par valeur et ne peut pas tre modifi e mais l'objet peut tre
modifi via un message (appel d'une m thode).
Pour transmettre des arguments par r f rence une m thode, il faut les encapsuler dans un
objet qui pr voit les m thodes n cessaires pour les mises jour.
Si un objet O transmet sa variable d'instance var en param tre une m thode mmm, deux
situations sont possibles :
si var est une variable primitive alors elle est pass e par valeur : il est impossible
de la modifier dans mmm pour que var en retour contienne cette nouvelle valeur.
si var est un objet alors mmm pourra modifier l'objet en utilisant une m thode de
l'objet pass en param tre.
Envoi de messages
Lorsqu'on demande un objet d'ex cuter l'une de ses m thodes, un message est envoy .
Syntaxe :
nom_objet.nom_m thode(parametre, & ) ;
Si la m thode appel e ne contient aucun param tre, il faut laisser les parenth ses vides.
2.3.
Constructeurs
Un constructeur est une m thode particuli re permettant lors de la cr ation des objets,
dattribuer aux variables des valeurs initiales. Elle est syst matiquement invoqu e lors de la
cr ation d'un objet.
Le nom dun constructeur, doit obligatoirement correspondre celui
de la classe.
Le constructeur est la seule m thode qui na pas de type de retour,
pas m me void, donc il ne peut pas y avoir d'instruction return dans
un constructeur.
Page | 8
Chapitre 2 : Concepts OO en JAVA
La d finition d'un constructeur est facultative. Si il n'est pas d fini, la machine virtuelle appelle
un constructeur par d faut vide cr automatiquement. D s qu'un constructeur est
explicitement d fini, Java consid re que le programmeur prenne en charge la cr ation des
constructeurs et que le m canisme par d faut, qui correspond un constructeur sans
param tres, est supprim . Si on souhaite maintenir ce m canisme, il faut d finir explicitement
un constructeur sans param tres.
Il existe plusieurs diff rents types de constructeurs :
Le constructeur simple (par d faut) : ce type de constructeur ne n cessite pas de
d finition explicite: son existence d coule automatiquement de la d finition de la classe.
Il attribue des valeurs par d faut.
Type de lattribut
Valeur par d faut
boolean
char
int, byte, short, int long
float, double
objet
Exemple :
false
Caract re de code null
0
0.f ou 0.0
null
public class MaClasse {
private int nombre ;
Publicité
public MaClasse() {} // constructeur simple
}
Le constructeur avec initialisation fixe : il permet dattribuer des valeurs pr d finies
Exemple :
public class MaClasse {
private int nombre ;
public MaClasse() { nombre = 5;} // constructeur avec initialisation fixe
}
Le constructeur avec initialisation des variables : pour ne pas attribuer les m mes
valeurs aux attributs des objets lors de leur cr ation, on peut les passer en param tres
au constructeur.
Page | 9
Chapitre 2 : Concepts OO en JAVA
Exemple :
public class MaClasse {
private int nombre ;
// constructeur avec initialisation des variables
public MaClasse(int valeur) {
nombre = valeur;
}
}
Remarque :
On peut d finir plusieurs constructeurs dans une m me classe
Exemple :
public class MaClasse {
private int nombre ;
public MaClasse() { nombre = 5;}
public MaClasse(int valeur) {
nombre = valeur;
}
}
Exercice :
D finir 3 constructeurs pour la classe Rectangle :
- Un constructeur sans param tres permettant dinitialiser la longueur 10 et la largeur
5.
- Un constructeur deux param tres qui permettent dinitialiser successivement la
longueur et la largeur du rectangle.
- Un constructeur un param tre, qui fait en sorte que la largeur re oive la valeur du
param tre pass au constructeur et que la longueur fasse deux fois la valeur de celui-ci.
class Rectangle{
private int longueur ;
private int largeur ;
Rectangle () {longueur =10 ; largeur = 5 ;} // constructeur sans param tres
Rectangle (int x, int y) {longueur =x ; largeur = y ;} // constructeur avec 2 param tres
Rectangle (int x) {longueur =2*x ; largeur = x ;} // constructeur avec 1 param tre
public int calcul_surface ( ) {return (longueur*largeur) ;}
}
2.4.
Destructeurs
En Java, nous navons pas r ellement besoin dun destructeur. Un destructeur permet la
lib ration de la place m moire occup e par un objet, Or, en java, le garbage collector appelle
automatiquement les destructeurs appel s finaliseurs (finalizers). Pour cr er un finaliseur, il
faut red finir la m thode finalize() h rit e de la classe Object.
Page | 10
Chapitre 2 : Concepts OO en JAVA
3. Objets et Instanciation
Une classe peut tre consid r e comme un "moule", et on cr e des objets par "moulage" partir
du mod le donn par la classe.
Cette op ration s'appelle l'instanciation, car l'objet cr repr sente une instance de sa classe.
Celle-ci permet donc de reproduire autant d'exemplaires -- d'instances -- que n cessaire.
Notation UML
Rectangle
Repr sentation explicite
de la classe
Instance of
Relation dinstanciation
R1 : Rectangle
Nom de la classe
Longueur =10
Largeur =5
Nom de lobjet
Chaque instance ainsi cr e poss de son propre exemplaire de chacune des variables d finies
dans la classe ; on les appelle ses variables d'instance.
Exemple
Si je cr e deux objets de type Rectangle, ils auront chacun leur propre variable longueur et leur
propre variable largeur, etc.
Rectangle
R1 : Rectangle
R2 : Rectangle
R3 : Rectangle
Longueur =10
Largeur =5
Longueur =7
Largeur =3
Longueur =9
Largeur =4
Un objet se caract rise par :
ses attributs : ceux-ci portent des valeurs attach es lobjet. Lensemble de ces
valeurs un instant donn constitue l tat de lobjet cet instant.
ses m thodes : ceux-ci permettent lobjet deffectuer des actions et de changer
son tat. Elles d finissent son comportement et ses r actions.
Page | 11
Chapitre 2 : Concepts OO en JAVA
Une identit qui permet de le distinguer des autres objets, de mani re unique.
3.1.
Cr ation dobjet (Instanciation)
La cr ation dun objet partir dune classe est appel e instanciation. Cet objet est une instance
de sa classe.
Une instanciation se d compose en trois phases
1) Allocation de lespace m moire n cessaire et initialisation des attributs en m moire,
limage dune structure.
2) Appel des m thodes particuli res : les constructeurs qui sont d finies dans la classe
3) Renvoi dune r f rence sur lobjet (son identit ) maintenant cr et initialis .
R f rence (handles)
Pour d signer des objets on utilise des variables dun type particulier : les r f rences.
Une r f rence contient ladresse dun objet : pointeur vers la structure de donn es
correspondant aux attributs (variables dinstance) propres lobjet.
Comme un pointeur une r f rence contient ladresse d une structure. Mais la
diff rence des pointeurs la seule op ration autoris e sur les r f rences est laffectation
dune r f rence de m me type.
Par d faut, la d claration une r f rence vaut null : elle ne pointe sur aucun objet.
D clarer une r f rence ne cr e pas dobjet : une r f rence nest pas un objet, cest un
nom pour acc der un objet.
Un objet peut poss der plusieurs r f rences. Mais un handle ne peut par contre d signer
qu'un seul objet.
Pour cr er une r f rence d'objet il suffit de faire pr c der le nom que l'on donne un
objet par le nom de la classe que l'on instancie.
Exemple :
Rectangle r1 ; Rectangle r1=null ;
Syntaxe g n rale de cr ation dobjet
Nom_Classe nom_Objet ;
nom_Objet=new nomClasse(<liste darguments>) ;
Ou en une seule d claration
Nom_Classe nom_Objet = new nomClasse(<liste darguments>) ;
Pour instancier un objet on passe par les 2 tapes suivantes :
1. D clarer une r f rence sur lobjet que lon veut cr er. Java y stockera ladresse de lobjet.
Page | 12
Chapitre 2 : Concepts OO en JAVA
2. Allouer la m moire n cessaire lobjet et linitialiser. cette op ration se fait par
linterm diaire de lop rateur new auquel on passe lappel au constructeur de la classe
d sir e.
Exemple
MaClasse m;
m = new MaClasse();
ou en une seule d claration
MaClasse m = new MaClasse();
Exercice
Cr ez deux rectangles, ayant comme longueur 10 et comme largeur 5, lun en vous basant sur le
constructeur sans param tres pr c demment d finit et lautre en se basant sur le constructeur
2 param tres.
Rectangle r 1; Rectangle r2 ;
r1 = new Rectangle (10,5); r2 = new Rectangle ();
Ou bien, effectuer les deux tapes en m me temps :
Rectangle r1= new Rectangle (10, 5);
Rectangle r2= new Rectangle ();
Remarque :
L'affectation de l'op rateur new la r f rence ne signifie en aucun cas que l'on stocke
l'objet dans la r f rence, cela indique que la r f rence pointe vers l'objet nouvellement
Publicité
cr !
En Java, tous les objets sont instanci s par allocation dynamique. Dans l'exemple, la
variable r1 contient une r f rence sur l'objet instanci .
Si r1 d signe un objet de type Rectangle l'instruction r2 = r1 ne d finit pas un nouvel
objet mais r2 et r1 d signent tous les deux le m me objet.
Si l'op rateur new n'obtient pas l'allocation m moire n cessaire, il l ve l'exception
OutOfMemoryError.
Si on utilise le type String, un objet String est automatiquement cr lors de l'utilisation
d'une constante cha ne de caract res sauf si celle-ci est d j utilis e dans la classe. Ceci
permet une simplification dans l' criture des programmes.
Page | 13
Chapitre 2 : Concepts OO en JAVA
public class TestChaines1 {
public static void main(String[] args) {
String chaine1 = "bonjour";
String chaine2 = "bonjour";
System.out.println("(chaine1 == chaine2) = " + (chaine1 == chaine2) );
}
}
R sultat :(chaine1 == chaine2) = true
public class TestChaines2 {
public static void main(String[] args) {
String chaine1 = "bonjour";
String chaine2 = new String("bonjour");
System.out.println("(chaine1 == chaine2) = " + (chaine1 == chaine2) );
}}
R sultat :(chaine1 == chaine2) = false
Lobjet est d truit lorsque il n y a plus des r f rences pour cet objet (sortie dun bloc de
visibilit , etc....).
La cr ation des objets se fait g n ralement dans les classes qui utilisent la classe
instancier et plus particuli rement dans la m thode qui constitue le point dentr e
main . On va distinguer 2 cas :
cas1 : la classe instancier ne poss de pas des constructeurs
class Rectangle {
private int longueur ;
private int largeur ;
public int calcul_surface ( ) {return (longueur*largeur) ;}
public void initialise (int x, int y) { longueur =x ; largeur = y ;}
public void initialise (int x) { longueur =2*x ; largeur = x ;}
}
public class Test_Rect {
public static void main (String [] argv) {
Rectangle r1, r3;
Rectangle r2 = new Rectangle ();
r1 = new Rectangle ();
r3 = new rectangle (5); /erreur car la classe ne d finit pas des constructeurs/ &&& } }
Page | 14
cas2 : la classe instancier poss de au moins un constructeur
Chapitre 2 : Concepts OO en JAVA
class Rectangle{
private int longueur ;
private int largeur ;
Rectangle (int x, int y) {longueur =x ; largeur = y ;} // constructeur avec 2 param tres
Rectangle (int x) {longueur =2*x ; largeur = x ;} // constructeur avec 1 param tre
public int calcul_surface ( ) {return (longueur*largeur) ;}
}
Rectangle r1 = new Rectangle (10,4) // juste car on a un constructeur avec 2 param tres.
Rectangle r1 = new Rectangle (10) // juste car on a un constructeur avec 1 param tre.
Rectangle r1 = new Rectangle ()
// faux car on a pas un constructeur sans param tres. Le constructeur par d faut nest plus valable
car la classe poss de au moins un constructeur.
3.2.
La cr ation d'objets identiques
Exemple :
MaClasse m1 = new MaClasse();
MaClasse m2 = m1;
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.
Pour cr er une copie d'un objet, il faut utiliser 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 toutes les classes en Java.
Exemple :
MaClasse m1 = new MaClasse();
MaClasse m2 = m1.clone();
m1 et m2 ne contiennent plus la m me r f rence et pointent donc sur des objets diff rents.
3.3.
Les r f rences et la comparaison d'objets
Les variables d clar s de type objet ne contiennent pas un objet mais une r f rence vers cet
objet. Lorsque l'on crive c1 = c2 (c1 et c2 sont des objets), on copie la r f rence de l'objet c2
Page | 15
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 :
Chapitre 2 : Concepts OO en JAVA
Exemple :
Rectangle r1 = new Rectangle(100,50);
Rectangle r2 = new Rectangle(100,50);
if (r1 == r1) { ... } // vrai
if (r1 == r2) { ... } // faux
Pour comparer l' galit des variables de deux instances, il faut munir la classe d'une m thode
cet effet : la m thode equals h rit e de Object.
Pour s'assurer que deux objets sont de la m me classe, il faut utiliser la m thode getClass()
de la classe Object dont toutes les classes h ritent.
Exemple :
(obj1.getClass().equals(obj2.getClass())
3.4.
Manipulation des objets
Manipuler signifie acc der aux donn es d'un objet ou appeler une m thode de cet objet (lui
envoyer un message). Dans les deux cas, on utilise en Java l'op rateur "." s parant le nom de
l'objet du nom du membre auquel on veut acc der.
3.4.1. Lacc s aux attributs
- Pour acc der aux attributs de lint rieur de la classe, il suffit dindiquer le nom de
lattribut que lon veut y acc der.
- Pour acc der de lext rieur de la classe, on utilise la syntaxe suivante :
<nom_Objet>.<nom_attribut>
3.4.2. Lacc s aux m thodes
- A lint rieur dune classe, les m thodes de cette classe seront appel es en indiquant le
nom et la liste des param tres effectifs de la m thode.
- A lext rieur de la classe, linvocation dune m thode se fait comme suit :
<nom_Objet>.<nom_m thode> ( [<liste des arguments effectifs>] ) ;
- La liste des arguments effectifs doit concorder en nombre et en type avec la liste des
arguments formels.
Page | 16
Chapitre 2 : Concepts OO en JAVA
Exemple
Dans la m thode main de la classe Test_Rect, on peut appeler les m thodes ainsi :
Rectangle r = new Rectangle (10,5) ;
r.affiche() ; // Appel de la m thode affiche
int s = r.calcul_surface() ; //Appel de la m thode calcul_surface
r.setlong(20) ; //Appel de la m thode setlong pour modifier la longueur
3.5.
Membres statiques et Autres mots cl s (final, this, null)
3.5.1. Les attributs statiques
Les attributs statiques sont des attributs marqu s par le mot cl static , ils d signent les
attributs communs entre tous les objets.
On acc de un attribut statique via :
- Une instance quelconque de la classe.
- Le nom de la classe directement.
Exemple :
public class MaClasse() {
static int compteur = 0;
}
Public class Test{
public static int main(String[] args) {
MaClasse m = new MaClasse();
int c1 = m.compteur;
int c2 = MaClasse.compteur;// c1 et c2 poss dent la m me valeur.
}}
Exercice :
On souhaite sauvegarder le nombre des objets cr es et attribuer chaque objet son num ro
dordre. Pour satisfaire cet objectif, on a certainement besoin dun attribut de type statique qui
est commun tous les objets et qui sauvegarde le nombre dobjets d j cr es.
On va reformuler lexemple de la classe Rectangle, en ajoutant un attribut statique appel count
qui va indiquer le nombre dobjets cr es et un attribut qui sappelle num qui indique le num ro
dordre dun objet, cet attribut nest pas statique car sa valeur est propre chaque objet.
Page | 17
Chapitre 2 : Concepts OO en JAVA
class Rectangle
{static int count =0;
private int longueur, larg;
private int num;
Rectangle (int x, int y) {
Publicité
Count++ ; num = count ; longueur = x ; largeur = y ;}
&&. }
class Test_Rec {
public static void main (String [] args)
{System.out.println (Nombre des objets = + Rectangle.count) ; // affiche 0
Rectangle r = new Rectangle (10,5);
System.out.println (Nombre des objets = + Rectangle.count) ; // affiche 1
System.out.println (Num ro de lobjet cr e = + r.num) ; //affiche 1
Rectangle r3= new Rectangle (14);
System.out.println (Nombre des objets = + Rectangle.count) ; //affiche 2
System.out.println (Numero de lobjet cr e = + r3.num) ; //affiche 2
Rectangle r2 = new Rectangle();
System.out.println (Nombre des objets = + Rectangle.count) ; //affiche 3
System.out.println (Numero de lobjet cr e = + r2.num) ; //affiche 3
}}
3.5.2. Les m thodes statiques
Sappellent aussi m thodes de classe, elles d signent les m thodes dont les actions concernent la
classe enti re et non pas un objet particulier.
De m me, lacc s ces m thodes ne n cessite pas la cr ation dun objet de la classe, car on peut
appeler directement la m thode travers le nom de la classe. On peut utiliser aussi ces
m thodes statiques pour manipuler des donn es statiques
Exemple
On va d finir une classe Math qui peut contenir des fonctions math matiques. De pr f rence, on
d clare ces m thodes comme tant statiques pour pouvoir les utiliser sans instancier des objets
de cette classe.
Page | 18
Chapitre 2 : Concepts OO en JAVA
Public class Math {
static double PI = 3.14 ; //cest un attribut statique
static double getPI () {Return (PI) ;} // La m thode statique manipule des attributs statiques
static double diametre (double r) {return (PI2r)} // cest une m thode statique
static double puissance (double x) {return (x*x);} // cest une m thode statique
}
class Test_Math {
public static void main (String [] args) {
double i= Math.puissance (6);
System.out.println (I= + i);
Math m = new Math ();
double d = m.diametre (5.1);
System.out.println (Le diametre = + d) ;}}
On remarque que lacc s une m thode se fait de deux mani res soit travers le nom de la
classe (le premier appel de la m thode power), soit travers un objet de la classe (Le deuxi me
appel de la m thode statique rayon).
3.5.3. Le mot cl final
Le mot cl final s'applique aux variables, aux m thodes et aux classes.
Une variable qualifi e de final signifie que la variable est constante. Une variable d clar e final
ne peut plus voir sa valeur modifi e. On ne peut d clarer de variables final locales une
m thode. Les constantes sont qualifi es de final et static.
Exemple :
public static final float PI = 3.1416f;
Une m thode final ne peut pas tre red finie dans une sous classe. Une m thode
poss dant le modificateur final pourra tre optimis e par le compilateur car il est garanti
qu'elle ne sera pas sous class e.
Lorsque le modificateur final est ajout une classe, il est interdit de cr er une classe qui
en h rite.
Page | 19
Chapitre 2 : Concepts OO en JAVA
Il existe 2 types dutilisations des attributs finaux : ou bien on initialise la valeur de la
variable d s la d claration, ou bien on initialise plus tard cette variable et son contenu ne
sera jamais modifi .
Remarque : Le mot cl final peut aussi tre utilis avec les m thodes et les classes. Cette
utilisation va tre d taill e dans les autres chapitres.
3.5.4. Le mot cl this
Cette variable sert r f rencer dans une m thode l'instance de l'objet en cours d'utilisation. this
est un objet qui est gale l'instance de l'objet dans lequel il est utilis .
La r f rence this peut tre utile :
- Lorsquune variable locale (ou un param tre) cache, en portant le m me nom, un attribut
de la classe.
- Pour appeler un constructeur depuis un autre constructeur.
Exemple
public maclasse{
private int nombre1;
private int nombre2;
public maclasse(int nombre1) {
this.nombre1 = nombre1; // variable de classe = variable en param tre du constructeur
}
public maclasse(int nombre1, int nombre2) {
this(nombre1)
this.nombre2 = nombre2;
}
}
This est aussi utilis quand l'objet doit appeler une m thode en se passant lui-m me en
param tre de l'appel.
Exercice
class Rectangle {
private int longueur, largeur ;
private String couleur ;
Rectangle (int lo, int largeur)
{ longueur = lo ;
this.largeur = largeur ;
//1er cas : m me nom entre le param tre et lattribut
}
Rectangle (int lo, int lar, String coul) {
this (lo, lar);// 2 me cas : appel dun constructeur partir dun autre
couleur = coul;}
}
Page | 20
Chapitre 2 : Concepts OO en JAVA
3.5.5. Le mot cl null
L'objet null est utilisable partout. Il n'appartient pas une classe mais il peut tre utilis la
place d'un objet de n'importe quelle classe ou comme param tre. Il permet de repr senter la
r f rence qui ne r f rence rien. Cest aussi la valeur par d faut dinitialisation des attributs
repr sentant des r f rences.
null ne peut pas tre utilis comme un objet normal : il n'y a pas d'appel de m thodes et aucune
classe ne puisse en h riter.
Le fait d'initialiser une variable r f rent un objet null permet au ramasseur de miettes
(garbage collector) de lib rer la m moire allou e l'objet.
Exemple
class Test_Rec {
public static void main (String [] args) {
Rectangle r;
if (r==null)
r= new Rectangle (10,12);
r.affiche();}}
4. Classe interne
Java autorise la d finition de classes dans une classe.
Une classe interne peut avoir acc s aux m thodes et attributs de la classe englobante
public class A {
int a ;
class B {
&
A.this.a = 12 ;
}
}
Une classe interne est d finie lint rieur dune autre classe au m me niveau quune m thode ou
attribut.
Les classes internes sont visibles uniquement par les m thodes de la classe dont laquelle
sont d finies.
Les l ments de la classe qui englobe les classes internes m me priv s sont accessibles
aux classes internes (Sauf les classes internes statiques nont pas ce privil ge).
Page | 21
Chapitre 2 : Concepts OO en JAVA
On ne peut pas acc der directement aux attributs et aux m thodes de la classe interne.
Toutefois, on peut les appeler indirectement travers la classe externe qui lenglobe.
Exemple :
La classe Point pr sentant le centre dun rectangle est une classe interne la classe Rectangle.
Class Rectangle {
private int longueur;
private int larg;
Rectangle(int l, int a){
longueur= l;
larg= a; }
class Point {
int x, y;
Point ( int x1, int y1)
{x=x1; y=y1;}
void affichep ()
<...