IFT 1015 - Fonctions 1
Professeur:
Stefan Monnier
B. K ´egl, S. Roy, F. Duranleau, S. Monnier
D ´epartement d’informatique et de recherche op ´erationnelle Universit ´e de Montr ´eal
Au programme
[Tasso:5]
•
Algorithme param ´etr ´e•
Utilisation des m ´ethodes•
D ´efinition des m ´ethodes•
Conception des m ´ethodesLes m ´ethodes de style “recette”
Muffin aux raisins
•
ingr ´edients: farine, lait, oeuf, beurre, sucre, raisins•
recette:1. M´ elanger la farine et le sucre.
2. Incorporez le lait, les oeufs et le beurre.
3. Ajoutez les raisins.
4. Verser dans des moules et cuire.
Muffin au dattes/bleuets/chocolat?
Le muffin param ´etr ´e
Muffin `a
x
•
ingr ´edients: farine, lait, oeuf, beurre, sucre,x
•
recette(x)
:1. M´ elanger la farine et le sucre.
2. Incorporez le lait, les oeufs et le beurre.
3. Ajoutez x.
4. Verser dans des moules et cuire.
Le raisin est l’ingr ´edient qui varie
=
le param `etre On r ´eutilise le codeChoix des param `etres
•
Extension simple: muffin au ma¨ıs, muffin au son, etc.•
Certains ingr ´edients et commandes de base ne changent pas•
Les param `etres sont seulement les ingr ´edients que l’on a l’intention de changerM ´ethodes
Terminologie:
•
algorithme param ´etr ´e=
m ´ethode ou fonction Attributs:•
nom (muffin, g ˆateau, soupe,. . .
)•
param `etres (fruit,. . .
)•
corps: s ´equence d’instructions qui impl ´emente l’algorithme•
valeurs de retourLe r ´esultat d ´epend des valeurs des param `etres
M ´ethodes
Vue “boˆıte noire”:
•
nom=
nom de la boˆıte•
entr ´ee(s)=
param `etre(s)•
sortie(s)=
valeur(s) de retour•
impl ´ementation=
s ´equence d’instructionsElles sont parmi nous...
Grille-pain
•
Param `etres– tranche de pain
– dur ´ee de chauffage
•
R ´esultat – un toastLaveuse `a linge, s ´echeuse, lave-vaisselle, four micro-onde, etc...
Pourquoi les m ´ethodes?
•
Eviter la r ´ep ´etition´=
r ´eutilisation du code•
Premier niveau d’abstraction et d’encapsulation•
Programme plus simple `a comprendre•
Faciliter la d ´etection/correction d’erreur•
Facilite le travail d’ ´equipeAbstraction/encapsulation
Les d ´etails de l’implantation ne sont pas n ´ecessaires pour l’utilisation
•
n ´ecessaires: le nom et les types de param `etres=
la signature•
l’implantation est cach ´ee M ´ethodes pr ´ed ´efiniesMath.random();
Integer.parseInt(<String>);
System.out.println(<String>);
Math.pow(<double>, <double>);
http://java.sun.com/j2se/1.4.2/docs/api/
Utilisation des m ´ethodes
Syntaxe:
• nomDeClasse.nomDeMethode(<liste des param` etres actuels>)
•
l’ordre des param `etres est important:Math.pow(<double>,<double>)
)Param `etre actuel:
•
une expression dont le type est convertible au type du param `etre formelUtilisation des m ´ethodes
Param `etres formels se trouvent
•
dans la d ´efinition de la m ´ethode (plus tard. . .
)•
dans la documentation de la m ´ethode Une m ´ethode peut retourner une valeur•
le type de la valeur retourn ´ee se trouve dans la d ´efinition/documentation•
typevoid
= pas de sortie/valeur retourn ´ee•
la valeur retourn ´ee est utilis ´ee lorsque l’appel de m ´ethode apparaitUtilisation des m ´ethodes
Terminologie
•
la m ´ethode/fonction est invoqu ´ee ou appel ´ee ExemplesSystem.out.println("Hello");
System.out.println(100);
int nombreADeviner = (int)(Math.random() * 100) + 1;
double n = floating * Math.pow(10,power);
double diagonale = Math.sqrt(c1 * c1 + c2 * c2);
double entree = Keyboard.readInt();
int max = Math.max(2 * a,b - 3);
Exemples & Exercices
<double> f(<double>)
:f (x) = −x
2+ 3x − 2
•
calculerf (0)
•
afficherf (x)
pour lesx
entiers sur l’intervalle−5 < x ≤ 5
•
trouver la valeur def (f (...f (0.4)...))
avec 10f
•
trouver le maximum def (x)
sur les entiers0 < x ≤ 10
.Extraire une m ´ethode: avant
public static void main(String [] args) {
// rayon: le rayon lu; perim: le p´erim`etre du cercle.
double rayon, perim;
// Lecture du rayon.
rayon = Double.parseDouble(args[0]);
// Calcul du p´erim`etre.
perim = 2 * Math.PI * rayon;
// Afficher le r´esultat.
System.out.println("Le cercle de rayon " + rayon
Extraire une m ´ethode: apr `es
public static void main(String [] args) {
// rayon: le rayon lu; perim: le p´erim`etre du cercle.
double rayon, perim;
// Lecture du rayon.
rayon = Double.parseDouble(args[0]);
// Calcul du p´erim`etre.
perim = perimetre(rayon);
// Afficher le r´esultat.
System.out.println("Le cercle de rayon " + rayon + " a le p´erim`etre " + perim);
Extraire une m ´ethode: pendant
public class Cercle {
public static void main(String [] args) {
...
}
public static double perimetre(double rayon) {
return 2 * Math.PI * rayon;
} }
D ´efinition des m ´ethodes
Syntaxe
public static <typeDeRetour>
nomDeMethode(<liste des param`etres formels>) {
<s´equence d’instructions>
}
Param `etre formel
•
syntaxe:<type> nomDeParam` etre
•
comme une d ´efinition de variable•
initialis ´e par le param `etre actuel quand la m ´ethode est invoqu ´eeD ´efinition des m ´ethodes (2)
L’instruction
return
•
syntaxe:return expressionARetourner;
•
le type deexpressionARetourner
doit ´egaler (ou ˆetre convertible `a) letypeDeRetour
de la m ´ethode•
le typevoid
: pas de sortie (e.g.:System.out.println()
)O `u placer la d ´efinition
•
dans le corps d’une classe•
l’ordre est arbitraireD ´efinition des m ´ethodes
O `u placer la d ´efinition public class Cercle {
public static void main(String[] args) { ... }
public static double perimetre(double rayon) { ... }
public static double aire(double rayon) { ... }
}
Invocation des m ´ethodes
Comment invoquer
•
en g ´en ´eral:nomDeClasse.nomDeMethode(<liste des param` etres actuels>)
•
dans la m ˆeme classe:nomDeMethode(<liste des param` etres actuels>)
La m ´ethode
main()
• public static void main(String[] args)
•
ne peut ˆetre appell ´ee que par l’ex ´ecuteur JavaConception des m ´ethodes
Pourquoi construire des m ´ethodes
•
´eviter des r ´ep ´etitions•
repr ´esenter les niveaux d’abstraction du probl `eme•
simplifier le d ´eveloppement et la v ´erification Etape 1:´ identifier des op ´erations qui•
repr ´esentent des unit ´es naturelles du probl `eme•
sont probablement utilis ´ees plusieurs fois•
sont simples et peuvent ˆetre test ´ees individuellementConception des m ´ethodes (2)
Etape 2: choisir un´ nom
•
en g ´en ´eral, une m ´ethode fait qqchose: verbes•
si le verbe est “calcul”, on le supprime•
exemples:getProperty
,equals
,pow
,substring
Etape 3: choisir les´ param `etres
•
nomm ´es comme des variablesConception des m ´ethodes (3)
Etape 5: D ´ecrire l’algorithme´
•
param `etres→
valeur de retour•
pseudocode Etape 6: Coder´ Etape 7:´ Tester!!•
cas diff ´erents≡
param `etres diff ´erents•
cas simples, sp ´eciaux, extr ˆemesExemple: calculer le prix brut
Op ´erations
•
calculer la TVQ•
calculer la TPS•
calculer le prix brut•
arrondir un prix arbitraire Signaturespublic static double arrondi(double prix) public static double tvq(double prix)
Solution finale
public class PrixBrut {
public static final double TAUX_TPS = 0.07;
public static final double TAUX_TVQ = 0.08;
public static double arrondi(double prix) { return Math.round(prix * 100) / 100.0; } public static double tps(double prix)
{ return arrondi(prix * TAUX_TPS); } public static double tvq(double prix) {
double base = prix + tps(prix);
return arrondi(base * TAUX_TVQ);
}
public static double prixBrut(double prix)
{ return arrondi(prix + tps(prix) + tvq(prix)); }