
|
|
|
|
Comment utiliser les fonctions en JavaChangement au programme : j'ai décidé de faire passer le chapitre sur les listes dans la partie, c'est mieux je crois car il est plus facile de comprendre cette partie en connaissant les notions de l'orienté objet, en même temps je pourrai vous apprendre plus simplement à faire des petites programme utilisant plusieurs classes mais avant cela, attaquons la dernière partie de ce chapitre qui ou nous allons apprendre à utiliser les fonctions.
Sommaire du chapitre :
Les fonctions ou méthodes de classes (méthodes statiques)Partie I (suite et fin)Définition de méthodesCe sont de bêtes fonctions comme en C. On peut leur envoyer des paramètres (ou arguments), qui seront des variables de type primitifs ou de classe et j'insiste, et pas des variables d'instances!! (ou objet) Donc dans les méthodes statique, on ne pourra envoyer que des variables de type primitifs (byte, short, int, long, float, double, char et boolean) ou un objet statique qui est le même pour tout les objets de votre classe) Partie sur les variables (ou objet) static ci dessous. Et plus bas quand je vous parlerai des variables de classe ou statiques, vous verrez que seules ces variables là pourront être modifiée dans une méthode statique. Mais en définitive, c'est quoi une méthode statique ?
C'est une méthode qui à le même comportement pour tout les objets d'une classe, le main est une méthode statique : l'exécution du programme à partir du main (en effet) est commune pour tous les objets de votre programme! C'est logique, on ne va créer à chaque fois un programme exécutable différents pour chaque objet, imaginez, se serait lourd et ça prendrait plus de place!! Donc pour créer des méthodes hors du main, pour l'instant, je vous demanderai à tous d'écrire le mot clef static devant le nom de votre méthode! Des exemples pour mieux comprendreExemple : toutes les méthodes de la classe Math sont statiques, en effet, le but de la classe Math n'est pas de créer des objets de type math, mais d'effectuer des calculs pour ensuite renvoyer par exemple la racine carrée d'un nombre. Comment appelé une méthodes de classe :Il suffit décrire tout bêtement le nom de sa classe suivit de cette méthode, les deux étant séparé par un point. C'est le cas de la fonction Math.random() que je vous ai fait utiliser dans les exercices précédents. Syntaxe d'une méthode statique : Code : Java public static void maMethode (int arg1, int arg2) {...} Et pour appelé la méthode, il suffira d'écrire dans le main : Code : Java maMethode (arg1, arg2); Quelques remarques.Pas nécessaire d'écrire le nom de la classe pour appeler votre méthode statique si celle-ci est définie dans la classe que vous êtes entrain de créer. Par contre si vous devez appelé une méthode statique définie dans une autre classe, là vous devrez mettre le nom de sa classe suivit d'un point pour séparer le nom de la classe et celui de sa méthode. Remarque, c'est encore plus simple que le C/C++ car il est pas nécessaire de définir le prototype de vos méthodes au début de vos classe ou dans un fichier ".h"!!! En mémoire, on aura donc la méthode qui sera stockée dans la mémoire de la classe, et nom dans la mémoire des objets. Ce qui nous donnera comme shéma : ![]() Ou MS1 est une méthode statique stockée dans l'espace mémoire de la classe et non dans l'espace mémoire des objets comme l'est M1! Attention, pointeurs inexistants en JavaAttention, pas de pointeurs en Java!!
Si vous voulez modifier la valeur de variables simples, (pas des tableaux ni des objets) dans une méthode, (hors du main) bah votre programme ne le fera pas, car il va copier la valeur des variables du main dans les arguments de la fonction, c'est donc une copie de valeur, et pas de l'adresse de vos variables, du coup bah la fonction va modifier les valeurs d'une copie de vos variables qui se trouvent à une autre adresse en mémoire. Et donc le programme ne va pas modifier la valeur se trouvant à l'adresse de vos variables dans le main mais des copies et à la fin de la fonction, les copies seront supprimée et donc en fait votre programme va tout simplement ne rien faire du tout!! Exemple : Code : Java public class Test { public static void main (String[] args) { int var1 = 1, var2 = 5; System.out.println("Avant l'appel de la méthode : "+var1+" "+var2); modifier (var1, var5); System.out.println("Après l'appel de la méthode : "+var1+" "+var2); //Nah j'ai corrigé pour le guillemet en trop. Merci pour le signalement. } public static void modifier (int var1, int var2) { var1 += 4; var2 += 7; } } Qu'est ce qui se passe ?
Bah rien.Et pas question de faire des pointeurs car cela n'existe pas en Java. Donc pas question de faire ceci : (pour ceux qui ont fait du c/c++, celà ne marche pas en Java!) A ne pas faire! Code : Java public class Test { public static void main (String[] args) { int var1 = 1, var2 = 5; System.out.println("Avant l'appel de la méthode : "+var1+" "+var2); modifier (&var1, &var5); System.out.println("Après l'appel de la méthode : "+var1+" "+var2); //Nah j'ai corrigé pour le guillemet en trop. Merci pour le signalement. } public static void modifier (int *var1, int *var2) { *var1 += 4; *var2 += 7; } } Les méthodes d'instances (appelée sur un objet)Différences par rapport aux méthodes statiques.A la différence des méthodes statiques, celles-ci nécessitent d'être appelées sur le nom d'un objet et non sur le nom d'une classe. C'est le cas des méthodes contenue dans la classe String. Lorsque vous écrivez par exemple : chaine1.charAt (0); Vous êtes obligé de crée une variable de type chaine de caractère (de type String donc)avant de pouvoir appeler la méthode charAt. Bah là vous faîtes non plus appel à une méthode statique mais à une méthode d'instance car vous devez créer un objet de type String avant de pouvoir appeler cette méthode, hors les méthodes statiques ne le nécessitent pas. Syntaxe d'une méthode d'instance : Code : Java public void modifieCoordonnees (int nvX, int nvY) {...} Appel de la méthode dans le main : Code : Java Là par contre, même s'il n'y a pas de pointeurs, les valeurs de p seront quand même modifiées car elles sont contenues dans la case mémoire de l'objet de type Point, et donc, comme la méthode est aussi dans la classe de l'objet p, elle va donc modifier les variables contenues dans la mémoire de l'objet p et non plus créé des copies de variables comme je vous l'ai montrer dans le tutoriel précédant. Un schéma pour bien comprendre tout celà. (Erf me faudrait un hébergeur d'images) Reprenont notre méthode statique du tuto précédent. Classe du main : ![]() La méthode est obligé de copié la valeur des variables de votre main dans des variable crée ailleurs en mémoire. Et il est impossible d'envoyer l'adresse de var1 et var2 dans des pointeurs car cela n'existe pas en Java!! Maintenant reprenons notre méthode modifieCoordonnees et supposons que l'on a créé un objet Point qui a pour coordonnée 5 et 7. On aura donc dans la mémoire de l'objet point ceci : ![]() Lors de l'appel de la méthode, elle sait qu'elle doit modifier les valeurs contenues dans la mémoire de p1 vu que elle sera appelée sur l'objet p1. Donc la valeur des variables de l'objet seront bien modifiées. Si on écrit le corps de la méthode, en effet on voit que l'ont doit modifier le contenu des variables sur l'objet créé en mémoire dans la classe Point, c'est à dire p1. Code : Java public void modifieCoordonnees (int nvX, int nvY) { p1.x = nvX; p1.y = nvY; } Les méthodes sans retour et celles avec retour.Je vous l'ai peut être déjà dit, et je le répète. Chaque nom de méthode doit être précédé du type de retour qu'elle renvoie. Si elle ne renvoie rien, void précède le nom de la méthode. Exemple d'une méthode avec retour : Code : Java public static int changeTailleDesObjets (int nvTaille) { taille = nvTaille; return taille //return obligatoire!! } Exemple d'une méthode sans retour : Code : Java public void changeCoordonnes (int nvX, int nvY) { p1.x = nvX; p1.y = nvY; } Les méthodes renvoyant des tableaux. Les tableaux sont des objets, leurs valeurs seront donc bien modifiées dans le main à l'appel de votre fonction. On peut demander aisément à une méthode de renvoyer un tableau. Exemple : Code : Java public int[] modifierTableau (int[] tableau) { for (int i = 0; i <= tableau.length; i++) { tableau[i] = i; } return tableau; } Appel de la méthode dans le main : Code : Java iTab = modifierTableau (iTab); Une méthode peut aussi bien sur renvoyer un autre objet que un tableau. Voilà maintenant je crois que je vous ai tout dit sur les méthodes en Java, nous pouvons passez à autre chose =) Les variables de classe et les variables des objetsLes variables d'objets ou d'instances ou encore variables membres :Ce sont des variables dont les valeurs sont différentes pour chaque objet que l'ont crée dans la classe. Par exemple, si l'on veut créer des objets de type voiture, et que l'on veut pouvoir créer des voitures de marques différentes, on définira tout simplement une variable de type String dans la classe Voiture comme ceci : String marque; Cette variable marque pourra prendre des valeurs différentes en fonction de l'objet voiture que l'on veut créer en mémoire. Mais supposons maintenant que l'on vieille créer que des voiture de la marque Peugeot. Bah au lieu de réécrire à chaque fois quand l'on va créer un objet de type voiture, la valeur de marque, on va crée une variable statique ou de classe qui aura la même valeur pour tout les objets de cette classe Voiture. Déclaration d'une variable statique : Code : Java Et voilà, plus besoin de faire autre chose. ExemplesUn exemple pour bien comprendre, une classe qui crée des objets voiture de même marque mais de couleur diffférente. Code : Java Limite des variable statiques.Les variables statiques ne pourront être modifiées que dans des méthodes statiques. On ne peut pas créér d'objet (= instancier) dans des méthodes statiques. Dans des méthodes statiques, on ne pourra faire usage uniquement que de méthodes et variables statiques. Exercices1) Je veux maintenant que vous repreniez l'exercice 3 du tuto sur les tableaux. Là, dans ma solution, j'ai tout mis dans le main, je veux que vous me fassiez une méthode qui génère un tableau de nombre aléatoirement et une autre qui affiche le contenu entier d'un tableau. Solution de l'exercice.1) Code : Java import java.util.Scanner; import java.util.Arrays; public class exercMethodes { public static void main (String[] args) { Scanner lecture = new Scanner (System.in); System.out.println("Entrer la taille du premier tableau : "); int taille1 = lecture.nextInt (); System.out.println("Entrer la taille du second tableau : "); int taille2 = lecture.nextInt (); int[] iTab1 = new int[taille1]; int[] iTab2 = new int[taille2]; int taille3 = taille1 + taille2; int[] iTab3 = new int[taille3]; randomIntArray (iTab1); afficher(iTab1); randomIntArray (iTab2); afficher(iTab1); iTab3 = fusionner (iTab1, iTab2, iTab3); afficher (iTab3); } public static void randomIntArray (int[] tableau) { for (int i = 0; i < tableau.length; i++) { tableau[i] = (int) (Math.random () * 100); } Arrays.sort(tableau); } public static int[] fusionner (int[] tableau1,int[] tableau2, int[] tableau3) { System.arraycopy (tableau1, 0,tableau3 , 0, tableau1.length); System.arraycopy (tableau2, 0, tableau3, tableau1.length, tableau2.length); Arrays.sort (tableau3); return tableau3; } public static void afficher (int[] tableau) { for (int i = 0; i < tableau.length; i++) { System.out.println(tableau[i] + " "); } System.out.print("\n"); } } C'est déjà plus facile à lire que le code d'avant vous ne trouvez pas ? Avec les fonctions/méthodes en Java, le code est donc plus facile à lire. En effet au lieu de tout mettre dans le main ce qui est un peu bourrin, on va utiliser des fonctions/méthodes qui reprendront des bouts de code (les fonctionnalités du programme) qui seront à exécutes beaucoup de fois dans le programme. Rédigé par Lo
|
||
|
Hébergeur du site : 1and1.fr Site de création de Jeux Vidéo Apprenez à créer vos propres Jeux Video A propos de la construction du site... |
352263 pages ont été consultées sur le site ! Dont 257 pages pendant les 24 dernières heures. Page générée en 0.212 secondes Nos partenaires - Otium Production : Aide aux débutants à créer leurs jeux - Construis ton jeu en PHP : Apprenez à créer votre jeu en PHP - A.C.S.E.L. : Club de patinage artistique de Caen |