Java jar

De The Linux Craftsman
Révision datée du 18 mars 2014 à 10:11 par Jc.forton (discussion | contributions) (→‎Introduction)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Introduction

Reprenons notre objet Rectangle créé précédemment.

Les attributs

Maintenant que notre objet est créé, on va lui ajouter des attributs:

package com.epsi.rectangle;

public class Rectangle {

	private int x, y, largeur, hauteur;
	
}

Le constructeur

On va demander à Eclipse de générer un constructeur grâce au menu contextuel

New java constructor.png
New java constructor options.png

Le code suivant doit être généré:

public Rectangle(int x, int y, int largeur, int hauteur) {
	super();
	this.x = x;
	this.y = y;
	this.largeur = largeur;
	this.hauteur = hauteur;
}

Les mutateurs

Enfin, on va demander à Eclipse de générer les getters et setters

New java mutators.png
New java mutators options.png

Le code suivant doit être généré:

public int getX() {
	return x;
}

public void setX(int x) {
	this.x = x;
}

public int getY() {
	return y;
}

public void setY(int y) {
	this.y = y;
}

public int getLargeur() {
	return largeur;
}

public void setLargeur(int largeur) {
	this.largeur = largeur;
}

public int getHauteur() {
	return hauteur;
}

public void setHauteur(int hauteur) {
	this.hauteur = hauteur;
}

Objet complet

package com.epsi.rectangle;

public class Rectangle {
    int x, y, largeur, hauteur;

    public Rectangle(int x, int y, int largeur, int hauteur) {
        super();
        this.x = x;
        this.y = y;
        this.largeur = largeur;
        this.hauteur = hauteur;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getLargeur() {
        return largeur;
    }

    public void setLargeur(int largeur) {
        this.largeur = largeur;
    }

    public int getHauteur() {
        return hauteur;
    }

    public void setHauteur(int hauteur) {
        this.hauteur = hauteur;
    }

}

Surcharge des méthodes de la classe java.lang.Objet

Vous pourrez remarquer que lorsque l'on utilise la surcharge, le petit symbole Override symbole.png apparaît à coté du nom de la méthode. Cela signifie que la méthode est héritée d'une classe parente et que vous redéfinissez son contenu.

Pour les exemples suivants, les trois méthodes sont déjà déclarées dans la classe java.lang.Objet. Cependant, les méthodes de la classe java.lang.Objet se basent uniquement sur les adresses mémoires des objets instanciés... ce qui risque de rapidement nous limiter !

toString()

Utilisation

La fonction toString() offre un aperçu d'un objet instancié sous forme de chaîne de caractères.

Génération

On peut la générer grâce au menu contextuel:

Generate toString.png

L'assistant vous propose les attributs que vous voulez afficher dans la représentation graphique

Generate toString attributes.png

Enfin, le code suivant doit être généré:

@Override
public String toString() {
    return "Rectangle [x=" + x + ", y=" + y + ", largeur=" + largeur
        + ", hauteur=" + hauteur + "]";
}

La fonction toString() ainsi définie, affichera les attributs x, y, largeur et longueur de l'objet Rectangle.

hashcode() et equals()

Utilisation

La fonction hascode() est utilisée pour ordonner les objets lorsqu'il sont manipulés dans des tables ou des listes.

La fonction equals() permet de comparer deux objets entre eux pour savoir s'il sont égaux ou non.

Génération

Comme pour la méthode toString() nous allons utiliser le menu contextuel Generate equals.png pour générer la méthode equals().

L'assistant nous propose de sélectionner les attributs qui vont nous servir d'éléments de comparaisons Fichier:Generate equals attributes.png Enfin, le code suivant doit être généré:

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + hauteur;
    result = prime * result + largeur;
    result = prime * result + x;
    result = prime * result + y;
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Rectangle other = (Rectangle) obj;
    if (hauteur != other.hauteur)
        return false;
    if (largeur != other.largeur)
        return false;
    if (x != other.x)
        return false;
    if (y != other.y)
        return false;
    return true;
}

Utilisation

Maintenant que nous avons créé un objet, nous allons vouloir le manipuler. Pour cela, nous allons créer une nouvelle classe que nous appellerons Launcher et qui va nous servir uniquement à instancier des objets Rectangle.

Création de la méthode main()

Cette classe Launcher() devra posséder au moins la méthode main() car c'est elle qui nous permettra d'exécuter du code.

Au moment de la création de la classe, on peut demander à Eclipse de nous créer la méthode main()

Generate class main.png

Dans la classe nouvellement créée, le code suivant est déjà généré

public static void main(String[] args) {
    // TODO Auto-generated method stub
}

Et c'est à nous de compléter le contenu de la méthode main().

Écriture de la méthode main()

Placez le code suivant dans le corps de la méthode main()

public static void main(String[] args) {
    // Création de deux objets Rectangle
    Rectangle rectangle1 = new Rectangle(2, 3, 20, 10);
    Rectangle rectangle2 = new Rectangle(2, 3, 20, 10);
		
    // Test de toString()
    System.out.println(rectangle1);
		
    // Test de equals
    if(rectangle1.equals(rectangle2)){
        System.out.println("Les rectangles sont égaux !");
    }else{
        System.out.println("Les rectangles sont différent !");
    }
}

Ce code:

  • crée deux objets "rectangle"
  • appelle la fonction toString();
  • appelle la fonction equals();

Exécution du code

Vous pouvez exécuter la classe Launcher grâce au menu contextuel.

Execute main.png

Le résultat s'affiche sur la console

Execute main result.png

Allez plus loin

Ajout de la méthode draw()

Il serait intéressant que notre objet Rectangle se dessine dans la console. Pour cela nous allons ajouter une méthode draw() qui va retourner la chaîne de caractère qui représente l'objet Rectangle.

public String draw() {
    String result = "";
    for (int i = 1; i < this.y; i++) {
        result += ".\n";
    }
    for (int i = 0; i < this.hauteur; i++) {
        for (int j = 1; j < this.x; j++) {
            result += ".";
        }
        for (int j = 0; j < this.largeur; j++) {
            result += "*";
        }
        result += "\n";
    }
    return result;
}

Modification de la méthode main()

Il faut modifier le code de la méthode main() pour y ajouter la ligne suivante

//Test de draw
System.out.println(rectangle1.draw());

Et voila le résultat

Rectangle draw.png