• Aucun résultat trouvé

IFT 1015 - M´ethodes 2

N/A
N/A
Protected

Academic year: 2022

Partager "IFT 1015 - M´ethodes 2"

Copied!
27
0
0

Texte intégral

(1)

IFT 1015 - M ´ethodes 2

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]

Passage des param `etres

Port ´ee (visibilit ´e) des variables

Variables locales

Variables de classe

(3)

Passage des param `etres: 0 param `etres

public static void affiche() { System.out.println("Hello");

}

public static void main(String[] args) { affiche();

}

Peut se r ´e ´ecrire...

public static void main(String[] args) { // DEBUT m´ethode r´e-´ecrite affiche().

System.out.println("Hello");

// FIN m´ethode r´e-´ecrite.

}

(4)

Passage des param `etres: 2 params

Exemple avec param `etres mais sans valeur de retour:

public static void affiche(int a,int b) { System.out.println(a);

System.out.println(b);

}

public static void main(String[] args) { affiche(3,4);

}

param `etres formels:

a

and

b

param `etres actuels:

3

and

4

(5)

Passage des param `etres: 2 params (r ´e ´ecrit)

Equivalence,´ sans m ´ethode:

public static void main(String[] args) {

// DEBUT m´ ethode r´ e-´ ecrite affiche(3,4) int a = 3;

int b = 4;

System.out.println(a);

System.out.println(b);

// FIN m´ ethode r´ e-´ ecrite }

R `egle 2: avant l’ex ´ecution du corps, les valeurs des param `etres actuels

(6)

Passage des param `etres: exemple 3

Exemple lorsque les param `etres actuels sont des variables:

public static void affiche(int a,int b) { System.out.println(a);

System.out.println(b);

}

public static void main(String[] args) { int i = 1, j = 2;

affiche(i,j);

}

param `etres formels:

a

and

b

param `etres actuels:

i

and

j

(7)

Passage des param `etres: exemple 3 (suite)

sans m ´ethode:

public static void main(String[] args) { int i = 1, j = 2;

// DEBUT m´ethode r´e-´ecrite affiche(i,j) int a = i;

int b = j;

System.out.println(a);

System.out.println(b);

// FIN m´ethode r´e-´ecrite }

(8)

Passage des param `etres: exemple 3 (suite)

sans m ´ethode:

public static void main(String[] args) { int i = 1, j = 2;

// DEBUT m´ethode r´e-´ecrite affiche(i,j) int a = i;

int b = j;

System.out.println(a);

System.out.println(b);

// FIN m´ethode r´e-´ecrite }

Seulement les valeurs sont pass ´ees `a la m ´ethode.

(9)

Passage des param `etres: exemple 4

Exemple lorsque les param `etres actuels et formels sont identiques:

public static void affiche(int a,int b) { System.out.println(a);

System.out.println(b);

}

public static void main(String[] args) { int a = 1, b = 2;

affiche(a,b);

}

param `etres formels:

a

and

b

param `etres actuels:

a

and

b

(10)

Passage des param `etres: exemple 4’

sans m ´ethode:

public static void main(String[] args) { int a = 1, b = 2;

// DEBUT m´ethode r´e-´ecrite affiche(a,b) int aAffiche = a;

int bAffiche = b;

System.out.println(aAffiche);

System.out.println(bAffiche);

// FIN m´ethode r´e-´ecrite }

(11)

Passage des param `etres: exemple 4’

sans m ´ethode:

public static void main(String[] args) { int a = 1, b = 2;

// DEBUT m´ethode r´e-´ecrite affiche(a,b) int aAffiche = a;

int bAffiche = b;

System.out.println(aAffiche);

System.out.println(bAffiche);

// FIN m´ethode r´e-´ecrite }

M ˆeme si les noms sont identiques, ils ne sont pas les m ˆemes variables.

(12)

Passage des param `etres: exemple 5

Exemple lorsque les param `etres actuels sont des expressions:

public static void affiche(int a,int b) { System.out.println(a);

System.out.println(b);

}

public static void main(String[] args) { int i = 2;

affiche(i+2,i*i);

}

param `etres formels:

a

and

b

param `etres actuels:

i+2

and

i*i

(13)

Passage des param `etres: exemple 5’

sans m ´ethode:

public static void main(String[] args) { int i = 2;

// DEBUT m´ethode r´e-´ecrite affiche(i+2,i*i) int a = i+2;

int b = i*i;

System.out.println(a);

System.out.println(b);

// FIN m´ethode r´e-´ecrite }

(14)

Passage des param `etres: exemple 5’

sans m ´ethode:

public static void main(String[] args) { int i = 2;

// DEBUT m´ethode r´e-´ecrite affiche(i+2,i*i) int a = i+2;

int b = i*i;

System.out.println(a);

System.out.println(b);

// FIN m´ethode r´e-´ecrite }

Le r ´esultat de l’´evaluation des param `etres actuels est affect ´e aux param `etres formels.

(15)

Passage des param `etres: affectation

Exemple lorsque la m ´ethode change son param `etre formel

public static void sommeAffiche(int a,int b) { a = a + b;

System.out.println(a);

}

public static void main(String[] args) { int i = 1, j = 2;

sommeAffiche(i,j);

// i est encore 1!!

}

(16)

Passage des param `etres: affectation’

sans m ´ethode:

public static void main(String[] args) { int i = 1, j = 2;

// DEBUT m´ethode r´e-´ecrite sommeAffiche(a,b) int a = i;

int b = j;

a = a + b;

System.out.println(a);

// FIN m´ethode r´e-´ecrite

// i est encore 1, personne ne l’a change!!!

}

(17)

Passage des param `etres: affectation’

sans m ´ethode:

public static void main(String[] args) { int i = 1, j = 2;

// DEBUT m´ethode r´e-´ecrite sommeAffiche(a,b) int a = i;

int b = j;

a = a + b;

System.out.println(a);

// FIN m´ethode r´e-´ecrite

// i est encore 1, personne ne l’a change!!!

}

(18)

Passage des param `etres: retour

Exemple d’une m ´ethode avec une valeur de retour:

int somme(int a,int b) { int somme = a + b;

return somme;

}

public static void main(String[] args) { int i = 1, j = 2;

i = i + somme(i,j);

}

param `etres formels: a and b, param `etres actuels: i and j

(19)

Passage des param `etres: retour’

sans m ´ethode:

public static void main(String[] args) { int i = 1, j = 2;

// DEBUT m´ethode r´e-´ecrite i = i + somme(i,j);

int a = i;

int b = j;

int somme = a + b;

i = i + somme;

// FIN m´ethode r´e-´ecrite }

(20)

Passage des param `etres: retour’

sans m ´ethode:

public static void main(String[] args) { int i = 1, j = 2;

// DEBUT m´ethode r´e-´ecrite i = i + somme(i,j);

int a = i;

int b = j;

int somme = a + b;

i = i + somme;

// FIN m´ethode r´e-´ecrite }

R `egle 3: Une invocation de m ´ethode est une expression. On peut dire que sa “valeur actuelle” est la valeur de retour, calcul ´ee avec les

param `etres actuels de la m ´ethode.

(21)

Port ´ee (visibilit ´e) des variables locales

Variables locales

elles existent `a partir de leur d ´eclaration jusqu’ `a la fin du bloc

une variable ne peut pas ˆetre red ´efinie dans la port ´ee de la m ˆeme variable

(22)

Port ´ee des variables locales: exemple

{

int i = 0;

if (true) {

int i = 1; // illegal int j = 0;

}

if (true) {

int j = 0; // legal }

int j = 1; // legal

}

(23)

Port ´ee des variables static s de classe

elles existent pendant toute l’ex ´ecution du programme

elles sont d ´eclar ´ees dans le bloc de la classe

r ´ef ´erence dans les m ´ethodes de la m ˆeme classe:

nomDeVariable

(ex.:

TAUX TPS

)

r ´ef ´erence hors de la classe:

nomDeClasse.nomDeVariable

(ex.:

Math.PI

)

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

static

s

(24)

Port ´ee des variables statiques: exemple

public class Test {

public static final int ZERO = 0; // legal

public static int a = 0; // legal mais deconseille public static void d(double d) {

System.out.println(a); // affiche 0

double a = 1.0; // legal mais deconseille System.out.println(a); // affiche 1

} }

(25)

Ce qu’il ne faut pas faire

public class PrixBrutMauvais { public static double prix;

public static double arrondi() { double prixEnSous = prix * 100;

double prixEnSousArrondi = (int)(prixEnSous + 0.5);

return prixEnSousArrondi / 100.0;

}

public static double prixNet() { return arrondi();

}

public static void main(String[] args) { prix = 34.589;

System.out.println(prixNet());

}

(26)

Port ´ee des variables non- static s de classe

elles existent pendant l’existence d’un objet de la classe

elles sont d ´eclar ´ees dans le bloc de la classe

r ´ef ´erence dans les m ´ethodes de la m ˆeme classe:

nomDeVariable

r ´ef ´erence dehors de la classe:

nomDObjet.nomDeVariable

en principe, elles peuvent ˆetre red ´eclar ´ees dans les m ´ethodes, mais c’est fortement d ´econseill ´e

normalement, elles sont

private

s, les variables non-

final

es

public

s sont fortement d ´econseill ´ees

(27)

for : exception

Programme avec

while int i = start;

while (i < end) {

<s´ equence d’instructions>

i++;

}

M ˆeme programme(?) avec

for

for (int i = start; i < end; i++) {

<s´ equence d’instructions>

}

Références

Documents relatifs

Une m´ ethode statique n’a pas acc` es ` a l’´ etat de la classe, il s’agit d’une fonction utilitaire rattach´ ee ` a la classe (attention aux faux amis avec d’autres

But : R´ esoudre un probl` eme d’optimisation num´ erique Trouver une des meilleures solution selon le crit` ere :. =

Ajouter le deuxi `eme nombre de la m ´emoire au nombre qui se trouve dans l’accumulateur, et placer le r ´esultat dans l’accumulateur. Stocker le nombre qui se trouve

– nombre entier, nombre `a virgule flottante (“r ´eel”), caract `ere – adresse m ´emoire. – strings, comptes bancaires, objets g

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

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

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