0% ont trouvé ce document utile (0 vote)
15 vues15 pages

Methodes Instance

Le document explique les méthodes d'instance en programmation orientée objet, en particulier en Java, où une méthode d'instance est associée à une classe et reçoit un paramètre caché 'this'. Il souligne l'importance de ces méthodes pour simplifier la manipulation des structures de données et éviter les ambiguïtés. En revanche, les méthodes de classe, marquées par 'static', n'ont pas accès à 'this' et ne peuvent manipuler que les paramètres explicites.

Transféré par

Salima Hassairi
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
15 vues15 pages

Methodes Instance

Le document explique les méthodes d'instance en programmation orientée objet, en particulier en Java, où une méthode d'instance est associée à une classe et reçoit un paramètre caché 'this'. Il souligne l'importance de ces méthodes pour simplifier la manipulation des structures de données et éviter les ambiguïtés. En revanche, les méthodes de classe, marquées par 'static', n'ont pas accès à 'this' et ne peuvent manipuler que les paramètres explicites.

Transféré par

Salima Hassairi
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Les méthodes d’instance

Gaël Thomas

1
Petits rappels : l’objet
● Une structure de données (tuple ou tableau) s’appelle un objet

● Un objet possède un type

● Le type d’un objet s’appelle une classe

● Si la classe d’un objet o est C, alors on dit que o est une instance de C

● En Java, les objets ne sont accessibles qu’à travers une référence

2
Limite de la programmation impérative
● Prog. impérative = celle que vous utilisez jusqu’à maintenant dans ce cours

● Un programme est constitué de


○ Structures de données

○ Et de méthodes qui manipulent ces structures

● Pour réutiliser une structure de données dans un autre projet


○ Il faut trouver la structure de données et la copier

○ Mais il faut aussi trouver les méthodes qui manipulent la structure de données et les copier
⇒ nécessite une structure claire du code

3
Solution partielle utilisée jusqu’à présent
● Faire preuve de discipline quand on programme
○ Regrouper les méthodes qui manipulent une structure de données dans la classe qui définit la structure de données
○ Éviter de manipuler directement une structure de données à partir de l’extérieur de la classe

● Solution partiellement satisfaisante car aucune aide fournie par le langage

● Méthode d’instance : aide à faire preuve de discipline

4
La méthode d’instance
● But : simplifier la définition des méthodes qui manipulent une structure de données

● Principe : associer des méthodes aux instances


○ Méthode d’instance = méthode sans mot clé static

○ Méthode qui manipule une structure de données

○ Associée à la classe dans laquelle la méthode est définie

○ Reçoit un paramètre caché nommé this du type de l’instance


⇒ pas besoin de spécifier explicitement ce paramètre
⇒ simplifie le code

5
Méthode d’instance vs de classe

Avec méthode d’instance Avec méthode de classe

class Monster { class Monster {


int health; int health;

void kill() { static void kill(Monster m) {


[Link] = 0; [Link] = 0;
} }
} }

Pas de static
⇒ paramètre Monster this implicitement ajouté

6
Méthode d’instance vs de classe

Avec méthode d’instance Avec méthode de classe

class Monster { class Monster {


int health; On dit que thisintest le receveur
health;

void kill() { de l’appel


static void kill(Monster m) {
[Link] = 0; [Link] = 0;
} }
} }

Pas de static
⇒ paramètre Monster this implicitement ajouté

7
Invocation d’une méthode d’instance

Le receveur d’un appel de méthode d’instance se met à gauche de la méthode d’instance, séparé par un point (.)

Monster aMonster = [Link](aPicture);

[Link]();

Un peu comme si on invoquait


[Link](aMonster);

receveur (i.e., this reçoit la valeur aMonster)

Méthode d’instance
appelée
8
Invocation d’une méthode d’instance

Le receveur d’un appel de méthode d’instance se met à gauche de la méthode d’instance, séparé par un point (.)

Monster aMonster = [Link](aPicture);

[Link]();

Remarque :
Un peu comme si on invoquait
[Link](aMonster);
On appelle le kill de Monster
receveur car la classe du receveur
(i.e., this reçoit la valeur aMonster)
(aMonster) est Monster
Méthode d’instance
appelée
9
Invocation d’une méthode d’instance

Le receveur d’un appel de méthode d’instance se met à gauche de la méthode d’instance, séparé par un point (.)

Monster aMonster = [Link](aPicture);

[Link]();

Remarque :
Un peu comme si on invoquait
[Link](aMonster);
On appelle le kill de Monster
receveur car la classe du receveur
(i.e., this reçoit la valeur aMonster)
(aMonster) est Monster
Méthode d’instance Remarque : si aMonster vaut null
appelée ⇒ erreur de type NullPointerException
10
Omission de this
class Monster { class Monster {
int health; int health;

void kill() { ⇔ void kill() {


[Link] = 0; health = 0;
} }
} }

En l’absence d’ambiguïté, this peut être omis

(health attribut de Monster


⇒ remplacé par [Link] à la compilation)

11
Omission de this
class Monster { class Monster {
int health; int health;
!
ntion void
Atte⇔
void kill() { kill() {
[Link] = 0; health = 0;
}
a
}
un r e c e v e u r
}
i e z p a s q u ’ il y}
N’oubl e s m é t h o d e s
s c a c h é p o u r l
t h i
En l’absence d’ambiguïté, this peut être omisstance
d’in
(health champ de Monster
⇒ remplacé par [Link] à la compilation)

12
En cas d’ambiguïté, utilisez this
Java utilise la portée lexicale : le compilateur cherche le symbole le plus proche en suivant les blocs de code

class Monster {
int health;
int x;
int y;

void move(int x, int y) { this.x = x; this.y = y; }


}

this est nécessaire pour lever l’ambiguïté entre


l’attribut x et l’argument x

13
Notions clés
● Avec static, la méthode s’appelle une méthode de classe
○ Voir le cours sur les méthodes de classe
○ N’accède uniquement qu’aux paramètres explicites, donnés en argument

static void kill(Monster monster)

● Sans static, la méthode s’appelle une méthode d’instance


○ Reçoit un paramètre caché nommé this du type de la classe

void kill()

static void kill(Monster this)
○ Invocation avec receveur à gauche : [Link]();

14
Notions clés

Attention !
Avec static , la méthode s’appelle une méthode de classe

• Marquée par le mot clé static

• Uniquement les paramètres explicites

e n t i el
static void kill(Monster monster)

a i s e s s
Ce cou rs est court, m
Sans static , la méthode s’appelle une méthode d’instance

• Reçoit un paramètre caché nommé this du type de la classe

o d e s d e c l a s s e void kill()

z pa s l es m é t h ⇔

Ne confonde s d ’i n s t a n ce ! static void kill(Monster this)


et les méthode
Invocation avec receveur à gauche : [Link]();

15

Vous aimerez peut-être aussi