Chapitre 2 : Concepts OO en JAVA

Institut Supérieur des Études Technologiques
1/28
100%
Rendu du PDF...
Page 1 sur 28Lecteur de document UniversityLib

Chapitre 2 : Concepts OO en JAVA

Institut Supérieur des Études Technologiques · Programming - Object-Oriented Concepts in Java · notes

Voir tous les documents en programmation

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

<...