INF1563 Programmation I


Méthodes de classe


Une méthode de classe ou une méthode statique est une méthode qui n'agit pas sur des variables d'instance mais uniquement sur des variables de classe.

Exemple : la méthode main

Exemple :

i = Math.abs(j);  // valeur absolue
Modélisation avec une méthode non-statique Modélisation avec une méthode statique
public class Cercle1 {
  double rayon = 1;
  double x = 0, y = 0;

  double perimetre(){
    return this.rayon * 2 * Math.PI;
    // this correspond à la variable cercle
  }

  public static void main(String[] args) {
    Cercle1 cercle = new Cercle1();
    System.out.println(cercle.perimetre());
  }
}
    
public class Cercle2 {
  double rayon = 1;
  double x = 0, y = 0;

  static double perimetre(Cercle2 c){
    return c.rayon * 2 * Math.PI;
    // c correspond à la variable cercle
  }

  public static void main(String[] args) {
    Cercle2 cercle = new Cercle2();
    System.out.println(perimetre(cercle));
  }
}
    

Résumé :


/**
 * Classe créée par Valérie Levasseur pour illustrer la différence
 * entre instance et classe.
 * 
 * Illustre aussi le masquage 
 * (portée des variables)
 *
 */
public class InstanceClasse {
  
  //Chaque instance possède SA copie
  private int varInstance = 1;
  
  //Variable commune à toutes les instances de type InstanceClasse
  private static int varClasse = 3;
  
  public int methodeInstance1(){
    //Variable locale à cette méthode
    int varInstance = 2;
    /**
     * Masquage de la variable d'instance :
     * on retourne la définition locale
     */
    return varInstance;
  } 
  
  //Mot clé static - méthode de classe
  public static int methodeClasse() {
    //retour de la variable de classe
    return varClasse;
  }
  
  public int methodeInstance2 () {
    //La définition la plus proche est la variable d'instance
    return varInstance;
  }
  
  public int methodeInstance3(){
    int varInstance = 4;
    //Le mot clé this permet de retourner la variable d'instance
    return this.varInstance;
  }
  
  public String toString() {
    return "[varInstance=" + varInstance + ", varClasse=" + varClasse +"]";
  }

  //Accesseur de la variable d'instance
  public int getVarInstance() {
    return varInstance;
  }

  //Mutateur de la variable d'instance
  public void setVarInstance(int varInstance) {
    this.varInstance = varInstance;
  }

  //Accesseur de la variable de classe
  public static int getVarClasse() {
    return varClasse;
  }

  //Mutateur de la variable de classe
  public static void setVarClasse(int varClasse) {
    InstanceClasse.varClasse = varClasse;
  }

  public static void main(String[] args) {
    //Création des instances
    InstanceClasse instance1= new InstanceClasse();
    InstanceClasse instance2= new InstanceClasse();
    System.out.println("instance1 :"+instance1);
    System.out.println("instance2 :"+instance2);
    
    //Modification de l'instance 2
    instance2.setVarInstance(-1);
    instance2.setVarClasse(-10);
    
    //Observer l'instance1 - elle n'a pas été modifiée
    System.out.println("Après modification de l'instance 2 \n(varInstance = -1, varClasse=-10)");
    System.out.println("instance1 :"+instance1);
    System.out.println("instance2 :"+instance2);
  }

}