
|
|
|
|
Comment utiliser les fonctions en JavaChangement au programme : j'ai décidé de faire passer le chapitre sur les listes dans la partie II, c'est mieux je crois car il est plus facile de comprendre cette partie en connaissant bien les notions de l'orienté objet, en même temps je pourrai vous apprendre plus simplement à faire des petits programme utilisant plusieurs classes mais avant cela, attaquons le dernier chapitre de cette partie ou nous allons apprendre à créer des fonctions.
Sommaire du chapitre :
![]() Les méthode liées à une classe (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ées dans une méthode statique. Mais en définitive, c'est quoi une méthode statique ? C'est une méthode qui a le même comportement pour tout les objets d'une classe, par exemple, 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érent 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 clé 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 appeler 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 coder. Par contre si vous devez appeler 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 fichiers 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 non 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 { 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++, cela ne marche pas en Java!) A ne pas faire! Code : Java public class Test { Le mot clé static n'est pas utilisable lors d'une déclaration de classe, une classe est déjà statique car si vous vous rappelez de sa définition, elle permet de décrire un type d'objet précis et cette description est commune pour tout les objets créés à partir de la même classe! Remarque : il y a un raccourcis possible si on veut récupérer pas exemple le première élément d'une méthode qui renvoie un tableau. Au lieu d'écrire tout ça Code : Java On peut écrire ceci directement : Code : Java String sChaine = getString()[0]; Les liée à un type d'objet précis (méthode d'instances)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 cela. Reprenons notre méthode statique du tutoriel précédent. Classe du main : ![]() La méthode est obligé de copier la valeur des variables de votre main dans des variables crées 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. Le référence l'objet sur lequel on a appeler la méthode. (this référence p1 ici!) Il est facultatif ici car x et nvX ont des noms différents, on verra l'utilisation de ce mot clé plus loin, retenez juste ici qu'il fait bien référence à p1, et modifie donc bien les variables de l'objet p1. Code : Java public void modifieCoordonnees (int nvX, int 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) { Exemple d'une méthode sans retour : Code : Java public void changeCoordonnes (int nvX, int 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) { Appel de la méthode dans le main : Code : Java iTab = modifierTableau (iTab); Une méthode peut aussi bien sûr renvoyer un objet ou un tableau d'objets. Voila 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 grâce à sa 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 static String marque = "Peugeot"; 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 différente. Code : Java public class Voiture () { Limite des variables 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. Par contre, l'inverse est possible : on peut faire appel à des méthodes statiques, et modifier le contenu de variables statiques, dans des méthodes d'instances. 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. Et une qui fusionne les deux tableaux aussi. 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 principales fonctionnalités standards du programme) qui seront à exécuter 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... |
594163 pages ont été consultées sur le site ! Dont 337 pages pendant les 24 dernières heures. Page générée en 0.478 secondes Nos partenaires - Otium Production : Aide aux débutants à créer leurs jeux - Site de dessins d'enfants |