• Aucun résultat trouvé

IFT 1015 - Fonctions 1

N/A
N/A
Protected

Academic year: 2022

Partager "IFT 1015 - Fonctions 1"

Copied!
26
0
0

Texte intégral

(1)

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

(2)

Au programme

[Tasso:5]

Algorithme param ´etr ´e

Utilisation des m ´ethodes

D ´efinition des m ´ethodes

Conception des m ´ethodes

(3)

Les 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?

(4)

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 code

(5)

Choix 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 changer

(6)

M ´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 retour

Le r ´esultat d ´epend des valeurs des param `etres

(7)

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’instructions

(8)

Elles sont parmi nous...

Grille-pain

Param `etres

tranche de pain

dur ´ee de chauffage

R ´esultat un toast

Laveuse `a linge, s ´echeuse, lave-vaisselle, four micro-onde, etc...

(9)

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’ ´equipe

(10)

Abstraction/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 ´efinies

Math.random();

Integer.parseInt(<String>);

System.out.println(<String>);

Math.pow(<double>, <double>);

http://java.sun.com/j2se/1.4.2/docs/api/

(11)

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 formel

(12)

Utilisation 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

type

void

= pas de sortie/valeur retourn ´ee

la valeur retourn ´ee est utilis ´ee lorsque l’appel de m ´ethode apparait

(13)

Utilisation des m ´ethodes

Terminologie

la m ´ethode/fonction est invoqu ´ee ou appel ´ee Exemples

System.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);

(14)

Exemples & Exercices

<double> f(<double>)

:

f (x) = −x

2

+ 3x − 2

calculer

f (0)

afficher

f (x)

pour les

x

entiers sur l’intervalle

−5 < x ≤ 5

trouver la valeur de

f (f (...f (0.4)...))

avec 10

f

trouver le maximum de

f (x)

sur les entiers

0 < x ≤ 10

.

(15)

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

(16)

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

(17)

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;

} }

(18)

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 ´ee

(19)

D ´efinition des m ´ethodes (2)

L’instruction

return

syntaxe:

return expressionARetourner;

le type de

expressionARetourner

doit ´egaler (ou ˆetre convertible `a) le

typeDeRetour

de la m ´ethode

le type

void

: pas de sortie (e.g.:

System.out.println()

)

O `u placer la d ´efinition

dans le corps d’une classe

l’ordre est arbitraire

(20)

D ´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) { ... }

}

(21)

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 Java

(22)

Conception 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 individuellement

(23)

Conception 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:

print

,

getProperty

,

equals

,

pow

,

substring

Etape 3: choisir les´ param `etres

nomm ´es comme des variables

(24)

Conception 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 ˆemes

(25)

Exemple: calculer le prix brut

Op ´erations

calculer la TVQ

calculer la TPS

calculer le prix brut

arrondir un prix arbitraire Signatures

public static double arrondi(double prix) public static double tvq(double prix)

(26)

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)); }

Références

Documents relatifs

– valeurDeConst doit ˆetre ´evaluable pendant la compilation – valeur litt ´erale, une autre constante, une expression contenant.

• Pour ce cours, on fait usage de notre propre biblioth `eque de m ´ethodes pour la lecture de donn ´ees au clavier. IFT-1015 Stefan

Lorsque quelqu’un pourrait ne pas comprendre le sens d’une instruction. – doit d ´ecrire le sens, pas l’instruction – ne pas commenter

si elle est ´egale `a n’importe quelle &lt;constante&gt; , l’ex ´ecution se poursuit `a partir de l’ ´etiquette &lt;constant&gt;:. sinon, l’ex ´ecution se poursuit `a partir

Objectif: r ´ep ´eter un groupe d’instructions tant qu’une condition est satisfaite, mais au moins une

• en principe, elles peuvent ˆetre red ´eclar ´ees dans les m ´ethodes, mais c’est fortement d ´econseill ´e. • normalement, elles sont final es, les variables

Pour tester les m ´ethodes, ´ecrire une classe `a part qui les appelle public class TestTriangle. public static void main(String[]

• les valeurs sorties de ces op ´erateurs sont utilis ´ees rarement Deux types d’op ´erandes: r ´ef ´erence et valeur. IFT-1015 Stefan