INF1563 Programmation I


Méthodes


Algorithme paramétré

Muffins aux bananes

Muffins aux dates

Muffins aux xxx (une recette "paramétrée")

Remarques

Définition des méthodes

un algorithme paramétré = une méthode (ou une fonction)

Structure d'une méthode

Terminologie Java

Syntaxe

<déclaration de méthode> ::= <en-tête de méthode> <corps de méthode>
<en-tête de méthode> ::=
    [<modificateur d'accès>] [<type de retour>]
        <nom de méthode> "(" <liste de paramètres formels> ")"
<liste de paramètres formels> ::= <paramètre formel> [, <paramètre formel>]*
<paramètre formel> ::= <type> <identificateur>
<corps de méthode> ::= <bloc d'instructions>
<bloc d'instructions> ::= { [<instruction>]* }
exemples :
static double somme(double p1, double p2){
  return p1 + p2;
}
static void somme(double p1, double p2){
  double s = p1 + p2;
  System.out.println("Somme = " + s);
}

Pourquoi les méthodes ?

Utilisation des méthodes

Syntaxe

<appel de méthode> ::=
    [ ( <nom de classe> | <expression de type objet> ) . ]
        <nom de méthode> "(" <liste de paramètres effectifs> ")" ;

Note : la notation nom_de_classe.nom_de_methode (liste_de_parametres_effectifs) s'applique aux méthodes qui ne font pas d'opérations sur un objet; elles sont appelées méthodes statiques ou méthodes de classe

Exemples :

appel de méthode

appel de méthode

Remarques

Quiz

Identifiez les instructions valides pour chaque méthode définie ci-dessous :

void f(int i, int j){
  return;
}
  1. f(0, 1, 2);
  2. f(13, 13);
  3. f(12+1, -4);
  4. f(1, Math.max(0,0));
  5. f(1, Math.sin(1.0));
  6. int i = f(13, 13);

int f(int i, int j){
  return i;
}
  1. f(3, 2/2);
  2. f('a', 'b');
  3. f(0);
  4. int j = f(1, new Integer(1));
  5. int i = f(13, f(1, 2));

Conception des méthodes

Métodes accesseurs vs. métodes mutateurs

Il existe aussi des méthodes appelées constructeurs dont le but est de créer des objets.

Comment construire une méthode ?

  1. identifiez des opérations dans l'algorithme de solution de notre problème
  2. choisir un nom qui reflète la tâche effectuée par la méthode exemples : estEgal, setPerimetre, getPerimetre (perimetre), colorer, inscrire
  3. identifier les paramètres
  4. choisir les noms des paramètres
  5. identifier le type de retour
  6. écrire le pseudocode de l'algorithme
  7. traduire le pseudocode en Java
  8. tester le code

Exemple

Probleme : trouver les solutions d'une équation du second degré

Une équation du second degré se présente sous la forme suivante :

ax2 + bx + c

Les étapes :

  1. nom de la méthode : racine
  2. coefficients de l'équation (de type double)
  3. noms de paramètres : a, b, c
  4. pas de type de retour (la méthode affichera directement les solutions trouvées)
  5. pseudocode :
    racine(a, b, c) {
      delta = "discriminant"  // b2 - 4ac
      si discriminant == 0 alors
        x1 = -b/2a
      si discriminant > 0 alors
        x1 = (-b - "racine carrée"(discriminant))/2a
        x2 = (-b + "racine carrée"(discriminant))/2a
      si discriminant < 0 alors
        System.out.println("Il n'y a pas de solution");
      si discriminant == 0 alors
        System.out.println("Il y a une solution : x = " + x1);
      si discriminant > 0 alors
        System.out.println("Il y a deux solutions : x1 = " + x1 + ", x2 = " + x2);
    }
  6. code :
      static void racine (double a, double b, double c){
        double x1 = 0;
        double x2 = 0;
    
        double delta = b * b - 4 * a * c;
        if (delta == 0)
          x1 = -b / 2.0 / a;
        else if (delta > 0){
          x1 = (-b - Math.sqrt(delta))/(2 * a);
          x2 = (-b + Math.sqrt(delta))/(2 * a);
        }
        if (delta < 0)
          System.out.println("Il n'y a pas de solution");
        else if (delta == 0)
          System.out.println("Il y a une solution : x = " + x1);
        else
          System.out.println("Il y a deux solutions : x1 = " + x1 + ", x2 = " + x2);
      }
  7. tests :
      racine(1, 0, 1);
      racine(1, 2, 1);
      racine(1, 0, -1);