Classe Complexe

Voici une classe Complexe avec quelque méthodes simples.

Attention à la différence entre méthode d'objet et méthode de classe ...

/*

 * Main.java
 *
 * Created on March 6, 2008, 10:29 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package complexe;

class Complexe
{
    /* attributs */
    /* un bon conseil: toujours mettre les attributs en "private" */
    private double reel;
    private double imaginaire;

    /**

     * Constructeur de la classe Complexe
     */
    Complexe(double reel, double imaginaire)
    {
        /* attention: à droite: l'argument du constructeur; à gauche: l'attribut (this. ...) 

         * c'est le this qui permet a Java de faire la difference entre les deux
         */
        this.reel = reel;
        this.imaginaire = imaginaire;
    }

    /** accesseur get pour l'attribut reel

     */
    public double getReel()
    {
        return reel; // ici pas besoin de this car il n'y a pas d'ambiguite
    }
    /** accesseur get pour l'attribut imaginaire

     */
    public double getImaginaire()
    {
        return this.imaginaire; // plus long, mais plus clair a lire aussi
    }
    /** accesseur set pour l'attribut reel

     */
    public void setReel(double reel)
    {
        this.reel = reel; // la par contre, oblige ...
    }
    /** accesseur set pour l'attribut imaginaire

     */
    public void setImaginaire(double img)
    {
        this.imaginaire = img; 
    }

    /** 

     * methode qui retourne le complexe conjugue d'un complexe (celui courant auquel s'applique la methode)
     */
    public Complexe conjugue()
    {
        // on cree un nouveau complexe
        Complexe c;
        c = new Complexe(this.getReel(), -this.getImaginaire()); // penser a utiliser directement les accesseurs
                                                                 // plutot que les attributs ...
        return c;
    }

    /*

     * deux facons de faire l'addition de deux complexes:
     * soit a.additionne(b) ou a et b sont deux objets Complexe
     * soit Complexe.addition(a, b)
     * Dans le premier cas, "additionne" est une methode d'objet
     * Dans le deuxieme case, "addition" est une methode de classe (on rajoute le mot-clé "static")
     */

    /**

     * methode d'addition d'un complexe à un autre
     */
    public Complexe additionne(Complexe b)
    {
        Complexe somme;
        somme = new Complexe(this.getReel()+b.getReel(), this.getImaginaire()+b.getImaginaire());
        return somme;
    }

    /**

     * methode de classe d'addition de deux complexes
     */
    static public Complexe addition(Complexe a, Complexe b)
    {
        Complexe somme;
        somme = new Complexe(a.getReel()+b.getReel(), a.getImaginaire()+b.getImaginaire());
        return somme;
    }

    /**

     * une petite routine pour l'affichage d'un complexe
     * @return une chaine de caractere du type "(reel, imaginaire)"
     */
    public String voir()
    {
       String representation;

       representation = String.format("(%f, %f)", this.getReel(), this.getImaginaire());
       return representation;
    }
}

/**

 *
 * @author gmonard
 */
public class Main
{

    /** Creates a new instance of Main */
    public Main()
    {
    }

    /**

     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        Complexe c1, c2, c3, c4, c5; // definition des types de variables
                                     // attention: elles ne contiennent encore aucune valeur

        c1 = new Complexe(1.0, 2.0);
        c2 = new Complexe(2.0, -5.0);
        c3 = c1.conjugue();
        c4 = c1.additionne(c2);            // noter les differences d'appel entre ces deux lignes
        c5 = Complexe.addition(c1, c2);

        System.out.printf(" c1 = %s\n", c1.voir());
        System.out.printf(" c2 = %s\n", c2.voir());
        System.out.printf(" c3 = %s\n", c3.voir());
        System.out.printf(" c4 = %s\n", c4.voir());
        System.out.printf(" c5 = %s\n", c5.voir());
    }

}