Différences entre versions de « Java jar »
(Page créée avec « = Introduction = Reprenons notre objet ''Rectangle'' <source lang="java"> package com.epsi.rectangle; public class Rectangle { int x, y, largeur, hauteur; publ... ») |
|||
(11 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
= Introduction = | = Introduction = | ||
+ | Reprenons notre [[Java_devel#Ajout_d.27une_classe|objet ''Rectangle'']] créé précédemment. | ||
+ | == Les attributs == | ||
+ | Maintenant que notre objet est créé, on va lui ajouter des attributs: | ||
+ | <source lang="java"> | ||
+ | package com.epsi.rectangle; | ||
+ | |||
+ | public class Rectangle { | ||
+ | |||
+ | private int x, y, largeur, hauteur; | ||
+ | |||
+ | } | ||
+ | </source> | ||
+ | |||
+ | == Le constructeur == | ||
+ | On va demander à ''Eclipse'' de générer un constructeur grâce au menu contextuel | ||
+ | {|align="center" | ||
+ | |- | ||
+ | || [[Fichier:new_java_constructor.png|vignette]] || [[Fichier:new_java_constructor_options.png|vignette]] | ||
+ | |} | ||
+ | Le code suivant doit être généré: | ||
+ | <source lang="java"> | ||
+ | public Rectangle(int x, int y, int largeur, int hauteur) { | ||
+ | super(); | ||
+ | this.x = x; | ||
+ | this.y = y; | ||
+ | this.largeur = largeur; | ||
+ | this.hauteur = hauteur; | ||
+ | } | ||
+ | </source> | ||
+ | == Les mutateurs == | ||
+ | Enfin, on va demander à ''Eclipse'' de générer les ''getters'' et ''setters'' | ||
+ | |||
+ | {|align="center" | ||
+ | |- | ||
+ | || [[Fichier:new_java_mutators.png|vignette]] || [[Fichier:new_java_mutators_options.png|vignette]] | ||
+ | |} | ||
+ | Le code suivant doit être généré: | ||
+ | <source lang="java"> | ||
+ | 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; | ||
+ | } | ||
+ | </source> | ||
+ | ==Objet complet== | ||
<source lang="java"> | <source lang="java"> | ||
package com.epsi.rectangle; | package com.epsi.rectangle; | ||
Ligne 51 : | Ligne 120 : | ||
} | } | ||
</source> | </source> | ||
+ | |||
+ | = Surcharge des méthodes de la classe ''java.lang.Objet'' = | ||
+ | Vous pourrez remarquer que lorsque l'on utilise la surcharge, le petit symbole [[Image: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: | ||
+ | |||
+ | [[Fichier:Generate_toString.png|vignette|centré]] | ||
+ | |||
+ | L'assistant vous propose les attributs que vous voulez afficher dans la représentation graphique | ||
+ | |||
+ | [[Fichier:Generate_toString_attributes.png|vignette|centré]] | ||
+ | |||
+ | Enfin, le code suivant doit être généré: | ||
+ | <source lang="java"> | ||
+ | @Override | ||
+ | public String toString() { | ||
+ | return "Rectangle [x=" + x + ", y=" + y + ", largeur=" + largeur | ||
+ | + ", hauteur=" + hauteur + "]"; | ||
+ | } | ||
+ | </source> | ||
+ | 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 [[Image: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|vignette|centré]] | ||
+ | Enfin, le code suivant doit être généré: | ||
+ | <source lang="java"> | ||
+ | @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; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | = 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()'' | ||
+ | |||
+ | [[Fichier:Generate_class_main.png|vignette|centré]] | ||
+ | |||
+ | Dans la classe nouvellement créée, le code suivant est déjà généré | ||
+ | <source lang="java"> | ||
+ | public static void main(String[] args) { | ||
+ | // TODO Auto-generated method stub | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | 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()'' | ||
+ | <source lang="java"> | ||
+ | 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 !"); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | 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. | ||
+ | |||
+ | [[Fichier:execute_main.png|vignette|centré]] | ||
+ | |||
+ | Le résultat s'affiche sur la console | ||
+ | |||
+ | [[Fichier:execute_main_result.png|centré]] | ||
+ | |||
+ | = 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''. | ||
+ | |||
+ | <source lang="java"> | ||
+ | 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; | ||
+ | } | ||
+ | </source> | ||
+ | == Modification de la méthode ''main()'' == | ||
+ | Il faut modifier le code de la méthode ''main()'' pour y ajouter la ligne suivante | ||
+ | <source lang="java"> | ||
+ | //Test de draw | ||
+ | System.out.println(rectangle1.draw()); | ||
+ | </source> | ||
+ | Et voila le résultat | ||
+ | [[Fichier:rectangle_draw.png|centré]] |
Version actuelle datée du 18 mars 2014 à 09:11
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
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
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 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:
L'assistant vous propose les attributs que vous voulez afficher dans la représentation graphique
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 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()
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.
Le résultat s'affiche sur la console
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