La lecture en ligne est gratuite
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
Télécharger Lire

Fonctions – Procédures – Méthodes Plan Fonctions en ...

De
13 pages
  • mémoire - matière potentielle : des fonctions en cours d' exécution ƒ
  • mémoire - matière potentielle : la méthode main
  • mémoire - matière potentielle : la fonction ƒ
  • mémoire
  • mémoire - matière potentielle : la méthode echanger
  • cours - matière potentielle : sur les paquetages
1Fonctions – Procédures – Méthodes Université de Nice - Sophia Antipolis Richard Grin Version 1.0.4 – 5/10/11 Richard Grin Fonctions - Méthodes page 2 Plan ƒ Définition ƒ Écrire ses propres méthodes ƒ Paramètres, pile d'exécution ƒ Appels récursifs ƒ Surcharge ƒ Exception/erreur pendant l'exécution Fonctions en mathématiques ƒ En mathématiques on utilise des fonctions qui prennent un paramètre et qui renvoient une valeur : sin(x), log(x) ƒ Pour utiliser ces fonctions, il suffit de passer un argument en paramètre : sin(0) Richard Grin Fonctions - Méthodes page 3 Fonctions en informatique ƒ En informatique on utilise aussi des fonctions
  • pile d'exécution
  • return ƒ
  • int max
  • public static void
  • static void
  • max
  • code
  • codes
  • classes
  • classe
  • méthodes
  • méthode
Voir plus Voir moins

ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Plan
Définition
Écrire ses propres méthodes
Fonctions – Procédures Paramètres, pile d’exécution
–Méthodes Appels récursifs
Surcharge
Université de Nice - Sophia Antipolis
Exception/erreur pendant l’exécution
Richard Grin
Version 1.0.4 – 5/10/11
Richard Grin Fonctions - Méthodes page 2
Fonctions en mathématiques Fonctions en informatique
En mathématiques on utilise des fonctions qui En informatique on utilise aussi des fonctions
prennent un paramètre et qui renvoient une Elles correspondent à des morceaux de
valeur : sin(x), log(x) programmes paramétrés par des valeurs
Pour utiliser ces fonctions, il suffit de passer un
argument en paramètre : sin(0)
Richard Grin Fonctions - Méthodes page 3 Richard Grin Fonctions - Méthodes page 4
Fonctions en Java Exemple de calcul en Java
double v = Math.cos(x);En Java, les fonctions s’appelle des méthodes
Notation « pointée » : on envoie un message à la Comme Java est un langage objet à classes, il
classe Math pour lui demander de calculer le faut envoyer un message à un objet ou à une
cosinus pour la valeur x ; la valeur renvoyée est classe pour lui demander de calculer la valeur
rangée dans la variable vd’une fonction (c’est-à-dire d’exécuter le code
La classe Math est le destinataire du message d’une méthode)
«cos(x) »Par exemple, on peut s’adresser à la classe Math
Qu’est-ce qui sera exécuté ?pour lui demander de calculer des fonctions
mathématiques
Richard Grin Fonctions - Méthodes page 5 Richard Grin Fonctions - Méthodes page 6

ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Comment connaître
Quelques méthodes de la classe Math
les méthodes d’une classe ?
double cos(double x) : prend un paramètre de type
Toutes ces méthodes correspondent à des et renvoie une valeur de type double
messages qu’on peut envoyer à la classe Math
double sin(double x)
Comme pour toutes les classes du JDK, les
double exp(double x) méthodes de la classe Math peuvent se trouver
double log(double x) dans une documentation en ligne appelée la
javadoc de la classelong round(double x) : arrondit au plus proche long
Démo de consultation de la javadoc de la classe double floor(double x) : tronque au plus grand
Mathentier inférieur ou égal à x
L’outil javadoc permet de générer facilement la double random() : retourne au hasard un nombre
javadoc de ses propres classescompris entre 0.0 (compris) et 1.0 (non compris)
Richard Grin Fonctions - Méthodes page 7 Richard Grin Fonctions - Méthodes page 8
Commentaires « javadoc »
Tous les commentaires entourés de /** et */
sont pris en compte par l’outil javadoc
Exemple :
/** Écrire ses propres méthodes
* Calcule la TVA d’un produit.
* @param produit le produit
* @return la TVA sur le produit
*/
public double calculeTva(Produit produit) {
...
}
Richard Grin Fonctions - Méthodes page 9 Richard Grin Fonctions - Méthodes page 10
Ses propres méthodes Exemple : fonction max
En plus de la méthode main, on peut écrire ses Programme qui met dans la variable max le plus
propres méthodes, par exemple pour faire grand de 3 nombres contenus dans les variables
x, y et zexécuter facilement le même code à plusieurs
endroits, sans recopier le code à ces différents
endroits
Il n’est jamais bon de recopier un même code à
plusieurs endroits (il faudra le modifier à plusieurs
endroits si on veut l’adapter ou le corriger)
Richard Grin Fonctions - Méthodes page 11 Richard Grin Fonctions - Méthodes page 12

ƒ
ƒ
ƒ
Code pour trouver le max Méthode max
int max; Si on veut utiliser plusieurs fois cet algorithme
if (x >= y) dans un programme, il est intéressant de
max = x; regrouper ces instructions dans une méthode qui
else prend 3 entiers en paramètre et qui renvoie le
max = y; plus grand
if (z >= max)
max = z;
Richard Grin Fonctions - Méthodes page 13 Richard Grin Fonctions - Méthodes page 14
Définition de la fonction Structure de la classe
public class Test {Il faut déclarer le type des paramètres et de la
int max(int x, int y, int z) {valeur retour dans la signature de la méthode :
int max(int x, int y, int z) ...
}Remarque : il n’est pas possible de déclarer les
public static void main(String[] args) {paramètres ainsi :
...int max(int x, y, z)
}Il faut aussi choisir dans quelle classe mettre la
}méthode ; pour simplifier on la met dans la même
classe que la méthode main
Richard Grin Fonctions - Méthodes page 15 Richard Grin Fonctions - Méthodes page 16
Code de la méthode max Utilisation de max dans main
int max(int x, int y, int z) {
public static void main(String[] args) {
int max;
int x = 3, y = 15, z = 9;
if (x > y)
int m = max(x, y, z);
max = x;
System.out.println(m);
else
}
max = y;
if (z > max)
• Quel est le destinataire du message max ?max = z;
Indique la valeur renvoyée ; • Par défaut, c’est la classe qui contient le codereturn max; arrête l’exécution de la méthode
• On aurait pu écrire :}
int m = Test.max(x, y, z);
Richard Grin Fonctions - Méthodes page 17 Richard Grin Fonctions - Méthodes page 18

ƒ
ƒ
ƒ
ƒ
ƒ
Utilisation de max dans main Mot-clé static
public static void main(String[] args) { Les messages envoyés à une classe doivent
int x = 3, y = 15, z = 9; correspondre à une méthode qui contient le mot-
int m = max(x, y, z); clé static dans sa définition (comme la
System.out.println(m); méthode main)
}
Ne compile pas. Message d’erreur :
Cannot make a static reference to the non-static
method max(int, int, int) from the type Test
Richard Grin Fonctions - Méthodes page 19 Richard Grin Fonctions - Méthodes page 20
Le bon code Destinataire par défaut
static int max(int x, int y, int z) {
On a pu appeler la méthode max sans la notation int max;
pointée car elle est dans la même classe que la if (x > y)
méthode main qui l’utilisemax = x;
else Quand il n’y a pas de destinataire, le destinataire
max = y; par défaut est la classe qui contient le code (ou
if (z > max) l’objet courant quand on travaillera sur les objets)
max = z;
return max;
}
Richard Grin Fonctions - Méthodes page 21 Richard Grin Fonctions - Méthodes page 22
Variante du codereturn
static int max(int x, int y, int z) {
return peut être suivi d’une expression complexe : if (x >= y) {
return Math.cos(x * 2);
if (z >= x) { return z; }
L’expression qui suit le return doit être du type else { return x; }
retour défini dans la définition de la méthode }
Une méthode peut contenir plusieurs return else {
if (z >= y) { return z; }
else { return y; }
}
}
Richard Grin Fonctions - Méthodes page 23 Richard Grin Fonctions - Méthodes page 24

ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Exemple de procédureLes procédures
static void afficherMax(int x, int y, int z) {
En informatique on appelle procédure une
int max;
« fonction » qui ne renvoie aucune valeur
if (x > y)
Une procédure peut par exemple afficher une
max = x;
message à l’écran
else
Java ne fait pas vraiment de distinction entre les max = y;
fonctions et les procédures ; une procédure est if (z > max)
tout simplement une méthode qui ne renvoie max = z;
aucune valeur et qui déclare le type void (vide System.out.println(max);
en anglais) comme type retour }
Richard Grin Fonctions - Méthodes page 25 Richard Grin Fonctions - Méthodes page 26
return et procédures
Une procédure ne contient souvent aucune
instruction return
Elle peut contenir une instruction return (suivie
d’aucune expression) pour terminer l’exécution de Paramètres
la procédure en milieu de code :
void afficherMax(int x, int y, int z) {
if (x == y && y == z) {
System.out.println("Tous égaux");
return;
}
// La suite du code de la procédure…
Richard Grin Fonctions - Méthodes page 27 Richard Grin Fonctions - Méthodes page 28
Types de paramètres Types de paramètres (2)
En mathématiques un paramètre n’est jamais On appelle paramètre d’entrée « in » un
modifié par une fonction paramètre dont la valeur du code appelant est
seulement lue par la fonction (idem maths)En informatique peut être modifié
par une fonction On appelle paramètre « out » un paramètre dont
la valeur du code appelant n’est pas lue par la Ainsi, la valeur de x pourrait être différente de 10
fonction mais peut être modifiée par la fonctionaprès l’exécution du code suivant :
x = 10; Il existe aussi des paramètres « in/out » : un
y = f(x); paramètre dont la valeur du code appelant peut
être lue et modifiée par la fonctionOn parle alors d’une fonction à « effet de bord »
Richard Grin Fonctions - Méthodes page 29 Richard Grin Fonctions - Méthodes page 30

ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Utilisation des paramètres « out » Paramètres en Java
La fonction doit être appelée avec un paramètre En Java un paramètre ne peut être que de type
qui désigne un emplacement mémoire (« lvalue » «in»
pour left value qui désigne une expression qui D’autres langages comme les langages C++, Ada
peut se mettre à gauche du signe « = » de ou Pascal utilisent les autres types de paramètres
l’affectation)
En effet, on comprend que dans « y = f(x); », la
valeur mise à l’emplacement mémoire désigné
par la variable x puisse être modifiée par la
fonction, mais ça n’aurait pas de sens avec le
code « y = f(10); »
Richard Grin Fonctions - Méthodes page 31 Richard Grin Fonctions - Méthodes page 32
Espace mémoire d’une fonction 2 façons de passer les paramètres
Chaque fonction a son propre espace mémoire 2 possibilités pour passer la valeur d’un
qu’elle utilise pendant son exécution paramètre à une fonction :
Cet espace mémoire peut servir passage par valeur
pour les variables locales à la fonction (celles passadresse
qui sont déclarées dans la fonction)
pour conserver les valeurs des paramètres
passés à la fonction
Richard Grin Fonctions - Méthodes page 33 Richard Grin Fonctions - Méthodes page 34
Passage par valeur Passage par adresse
Uniquement pour les paramètres de type out ou Au début de l’exécution de la fonction, les valeurs
in/outdes paramètres sont recopiées dans l’espace
Au début de l’exécution de la fonction, l’adressemémoire de la fonction
(en mémoire) du paramètre est passée à la Java n’utilise que le passage par valeur
fonction
En ce cas, la fonction peut modifier la valeur qui
est enregistrée à cet endroit, qui est utilisée par le
code appelant (effet de bord)
Richard Grin Fonctions - Méthodes page 35 Richard Grin Fonctions - Méthodes page 36

ƒ
ƒ
ƒ
ƒ
ƒ
Java : échanger les valeurs de 2 variables
static void echanger(int a, int b) { Pour répondre à la question nous allons simuler
inttemp= a; l’exécution du programme
a = b;
b = temp;
}
public static void main(String[] args) {
int x = 10, y = 20;
Que sera-t-il affiché ?
echanger(x, y);
System.out.println(x + " ; " + y);
}
Richard Grin Fonctions - Méthodes page 37 Richard Grin Fonctions - Méthodes page 38
Pile d’exécution Passage de paramètres par valeur
Une pile en mémoire est utilisée pour empiler les Nous allons donc simuler le passage par valeur
espaces mémoire des fonctions en cours (la seule possibilité en Java) sur l’exemple
d’exécution précédent (méthode echanger)
Dès qu’une fonction est appelée, son espace Nous verrons ensuite ce qu’aurait donné un
mémoire est empilé passage par adresse
Quand son exécution est terminée, son espace dépilé
Richard Grin Fonctions - Méthodes page 39 Richard Grin Fonctions - Méthodes page 40
... main(...) { ... main(...) {
int x = 10, y = 20; int x = 10, y = 20;Pile d’exécution Pile d’exécutionechanger(x, y); echanger(x, y);
…println(x + y); …println(x + y);
temp
Espace mémoire de la méthode echanger
ba
10 20
x y x y
Espace mémoire de la méthode main
10 20 10 20
Richard Grin Fonctions - Méthodes 41 Richard Grin Fonctions - Méthodes 42

ƒ
void echanger(a, b) { void echanger(a, b) {
int temp = a; int temp = a;
a = b; Pile d’exécution a = b; Pile d’exécution
b = temp; b = temp;
} }
temp temp
10
b ba a
10 20 10 20
x xy y
10 20 10 20
Richard Grin Fonctions - Méthodes 43 Richard Grin Fonctions - Méthodes 44
void echanger(a, b) { ... main(...) {
int temp = a; int x = 10, y = 20;Pile d’exécution Pile d’exécutiona = b; echanger(x, y);
b = temp; …println(x … y);
}
temp
10
10 ; 20
a b
20 10
x y x y
10 20 10 20
Richard Grin Fonctions - Méthodes 45 Richard Grin Fonctions - Méthodes 46
... main(...) {
int x = 10, y = 20;Passage de paramètres par adresse Pile d’exécutionechanger(x, y);
…println(x + y);
Voyons maintenant le comportement si le
passage de paramètres se faisait par adresse
Attention, ce type de passage de paramètre est
impossible en Java (mais possible dans d’autres
langages informatiques)
x y
10 20
Richard Grin Fonctions - Méthodes page 47 Richard Grin Fonctions - Méthodes 48

ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
void echanger(a, b) {... main(...) {
int temp = a;int x = 10, y = 20;
Pile d’exécution a = b; Pile d’exécutionechanger(x, y);
b = temp;…println(x + y);
}
temp temp
10
b ba a
x xy y
10 20 10 20
Richard Grin Fonctions - Méthodes 49 Richard Grin Fonctions - Méthodes 50
void echanger(a, b) { ... main(...) {
int temp = a; int x = 10, y = 20;Pile d’exécution Pile d’exécutiona = b; echanger(x, y);
b = temp; …println(x … y);
}
temp
10
20 ; 10
a b
x y x y
20 10 20 10
Richard Grin Fonctions - Méthodes 51 Richard Grin Fonctions - Méthodes 52
Structure de données Pile
En informatique une structure de données est un Une pile est une structure de données qui
ensemble de données sur lequel on ne peut ressemble à une pile d’assiettes
effectuer qu’un certain nombre d’opérations Pour modifier cette structure on peut seulement
Le fait de limiter les opérations possibles permet empiler une nouvelle donnée
d’optimiser les vitesses d’accès aux données (ou dépiler (lire et enlever) la dernière donnée
d’optimiser la mémoire utilisée) et d’obliger les ajoutée
utilisateurs de la structure à l’utiliser d’une
C’est une structure dite LIFO (Last In First Out)certaine façon
Richard Grin Fonctions - Méthodes page 53 Richard Grin Fonctions - Méthodes page 54

ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Autre exemple de structure de données
Une file ressemble à une file d’attente
Pour modifier cette structure on peut seulement
ajouter de nouvelles données Visibilité d’une méthode
lire et enlever la première donnée ajoutée
C’est une structure dite FIFO (First In First Out)
Richard Grin Fonctions - Méthodes page 55 Richard Grin Fonctions - Méthodes page 56
Visibilité par défaut Autres visibilités
Si on ne précise rien, la méthode est utilisable par Si on ajoute public, toutes les classes pourront
la classe qui contient et aussi par utiliser la méthode :
public statictoutes les autres classes du même paquetage
(voir cours sur les paquetages) int max(int a, int b, int c) {
Si la méthode n’est utilisée que par la classe qui
la contient, on peut restreindre son utilisation en
ajoutant private :
privatestatic
int max(int a, int b, int c) {
Richard Grin Fonctions - Méthodes page 57 Richard Grin Fonctions - Méthodes page 58
Définition
La définition d’une fonction ou procédure peut
s’écrire en fonction d’elle-même
Par exemple, on peut définir la fonction factorielle
Récursivité (n! = 1 x 2 x 3 x … x n) par :
Exercice : démontrer que 0! = 1
n! = 1 x 2 x 3 x … x nn! = (n – 1)! x n
Ainsi, 4! = 3! x 4 = (2! x 3) x 4 = ((1! x 2) x 3) x 4
= (((0! x 1) x 2) x 3) x 4
= (((1 x 1) x 2) x 3) x 4 = ((1 x 2) x 3) x 4
= (2 x 3) x 4 = 6 x 4 = 24
Richard Grin Fonctions - Méthodes page 59 Richard Grin Fonctions - Méthodes page 60
10

Un pour Un
Permettre à tous d'accéder à la lecture
Pour chaque accès à la bibliothèque, YouScribe donne un accès à une personne dans le besoin