Méthodes/objets/ java ....???

Fermé
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 - 7 déc. 2009 à 02:52
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 7 déc. 2009 à 21:57
Bonjour,

svp repondez à mes quelques questions, je comprends plus :

lorsqu'on est en java, et qu'on veut utiliser une méthode de classe située dans une classe MaClasse, telle que la méthode est définie : public static float[] mafonction ( int x)
Lorsqu'on l'apele depuis une autre classe, on fait comme ça :

float tableau ;
int x;
tableau = MaClasse.mafonction(x) ;

est ce que je me trompe???? parce que ailleur, j'ai trouvé pleins pleins d'exemples de méthodes, exemple " lenght" qui calcule la taille d'une chaîne. Alors le problème c que pour les utiliser, au lieu de mettre le paramètre entre les parenthèses, on fait
String objet1 = new String ();
String objet2 = new String();
objet1=objet2.lenght();



Pourquo n'a ton pas passé objet2 en paramètre??? et puis dans tout cela, pour les méthodes d'nstance, lorsqu'on crée un objet, on ne l'applique pas à la méthode n'est ce pas?? je suis perdue et avec l'heure qu'il est je préfère aller m coucher, mais svp repondez moi.
si on considère la méthode

public float[] mafonction ( int x) ;

s on veut la réutilser, on va declarer un objet "objet" puis on va dire par exemple :

float[] tableau;
int x
tableau = objet.mafonction(x);

aidez moi à comprendre

merci.

A voir également:

4 réponses

il faut d abord créer un objet de type MaClasse
MaClass objet = new MaClass();
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 663
7 déc. 2009 à 03:18
mais pas pour une méthode statique.

C'est pour cela qu'il était confu :)

Normalement une méthode s'appelle sur un objet instancié particulier. Mais dans l'exemple que tu montres au début, c'est un cas spécial : c'est une méthode static, qui ne dépend que de la classe, pas d'un certain objet en particulier.
0
j'ai pas bien compri ce que tu veut dire par cela
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 663
7 déc. 2009 à 03:51
je pense qu'il faut mieux essayer de digérer ces concepts l'esprit plus réveillé, tu ferais mieux d'aller te coucher :) si c'est nouveau pour toi autant bien prendre le temps de comprendre.

voici un début de réponse :


lorsqu'on est en java, et qu'on veut utiliser une méthode de classe située dans une classe MaClasse, telle que la méthode est définie : public static float[] mafonction ( int x)
Lorsqu'on l'apele depuis une autre classe, on fait comme ça :
float tableau ;
int x;
tableau = MaClasse.mafonction(x) ;

est ce que je me trompe????


Non, tu ne te trompes pas!
String objet1 = new String ();
String objet2 = new String();
objet1=objet2.lenght(); 


un peu bizarre ça, pour comprendre. Que veux-tu faire dans cet exemple exactement ?
Pourquo n'a ton pas passé objet2 en paramètre??

je ne comprends pas non plus bien cette question, pourquoi objet2 devrait être passé en paramètre? ça va avec ma question précédente.

public float[] mafonction ( int x) ;

s on veut la réutilser, on va declarer un objet "objet" puis on va dire par exemple :

float[] tableau;
int x
tableau = objet.mafonction(x);



oui c'est ça. Mais il faut créer (instancier) l'objet avant, avec un taClasse objet = new taClasse() .
Sinon objet n'est pas encore crée.

Mais tu te demandes peut-être : à quoi ça sert ?

L'utilité des objets est grande, mais le but de tout ça c'est de lier des données avec des fonctions qu'on peut appliquer dessus.

Par exemple
public class Rectangle {
  private int longueur, largeur;

  public int calculerAire() {
    return longueur*largeur;
  }

  public void initialiser(int a, int b) {
    longueur = a;
    largeur = b;
}

et dans ta classe principale de ton programme :
public static main(...) {
  ...
  Rectangle Rect1, Rect2;
  int Aire1, Aire2;

  Rect1 = new Rectangle();
  Rect1.initialiser(3, 8);
  Rect2 = new Rectangle();
  Rect2.initialiser(4, 5)

  Aire1 = Rect1.calculerAire();
  Aire2 = Rect2.calculerAire();

  ...
}


je te laisse essayer de comprendre ça toi -même pour l'instant, je suis fatigué moi aussi :)
0
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 1
7 déc. 2009 à 12:57
voila j'ai trop dormi ( même trop ) :p je suis prête.

J'ai compri l'utilit" des objets. Je vais m'eclaircr les idées en ecrivant :

On a deux cas :

- Les méthodes et attributs de classe : précedés de static, si on veut avoir accès à une méthode de classe, on doit préciser la classe dans laquelles elle se trouve , c pour cela qu'on fait MaClasse.fonction( on lui passe ses paramètres) = paramètre de sortie.

-Les méthodes d'nstance : on a besoin d'objet pour avoir accès à eux. Leur rôle c d'avoir bcp d'objets dont chacun a ses propres carctéristiques ( dans ton exemple, Rect1 a des propriétés ( air + initialisation) differentes que Rect2.


C'est ça?

Mais bon j'aimerai bien que tu m'explique la "philosophie" de cette méthode.

String chaine = new String ( " CouCou Tout Le Monde"), chaine 2 = new String();
chaine2=chaine.length();

sachant que lenght() donne la taille d'une chaine de caractère.
et ce que j'ai pas compri, c que d'après l'expresson " chaine2=chaine.length(); " chaine est appliqué à lenght(). Alors la, si c comme ça, pourquoi on le passe pas en paramètres??

je compte sur votre aide.

Merci
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 663
7 déc. 2009 à 21:57
On a deux cas :

- Les méthodes et attributs de classe : précedés de static, si on veut avoir accès à une méthode de classe, on doit préciser la classe dans laquelles elle se trouve , c pour cela qu'on fait MaClasse.fonction( on lui passe ses paramètres) = paramètre de sortie.

-Les méthodes d'nstance : on a besoin d'objet pour avoir accès à eux. Leur rôle c d'avoir bcp d'objets dont chacun a ses propres carctéristiques ( dans ton exemple, Rect1 a des propriétés ( air + initialisation) differentes que Rect2.


C'est ça?


Oui c'est ça. Enfin ta dernière phrase pas trop en fait : "Leur rôle c'est d'avoir beaucoup d'objets", que veux tu dire par LEUR rôle ? le rôle des méthodes ? non, c'est plutot la volonté du programmeur ;) .

Dans mon exemple, Rect1 à des propriétés différentes : oui
air + intialisation : non, ce ne sont pas des propriétés ça, les propriétés ce sont plutot les variables longueur et largeur.

air et initialisation sont justement les méthodes de la classe. Elle permettent de faire le même calcul mais selon les propriétés de l'objet sur lequel elles sont appelées. Elles sont liés à l'objet lui même, et donc faire Rect1.calculerAire() ou Rect2.calculerAire() appelle la même méthode. Mais dans la méthode tu remarques que j'utilises les variables "longueur" et "largeur". Elles font référence justement aux propriétés de l'objet sur lequel la méthode est appelée ! C'est ça je crois que tu appelais "Passer en paramètre". L'idée c'est qu'en quelque sorte l'objet entier est passé en paramètre d'une méthode. Lorsque je dis "longueur*largeur" c'est la variable longueur et la var. largeur spécifique à Rect1 ou Rect2 selon les deux cas.


Mais bon j'aimerai bien que tu m'explique la "philosophie" de cette méthode.


C'est en fait de clairement séparer les données et les diverses fonctions qui ont trait à ces données.

L'utilité véritable est d'avoir un programme plus clairement porgrammé, avec des "modules" (les classes) qui exécutent certaines taches qui leur sont propres.

Par exemple pour les rectangles, imagine que ce code est dans un gros programme de plusieurs centaines de lignes, et qu'une équipe entière travaille dessus.

Le fait que le code concernant le calcul d'aire soit encapsulé avec une structure d'objet dans la classe rectangle permet de bien voir qu'est ce qu'il se passe, de pouvoir le modifier plus rapidement et plus "proprement" (avec moins de risque d'erreur) par toi ou par tes collègues.

De plus ça permet à des développeurs de créer des modules que d'autres pourront utiliser dans leurs programmes. En quelque sorte tu pourrais imaginer qu'on créer un nouveau "type de donnée" comme Double, Int, String...

L'utilité est difficile à comprendre si tu n'as pas déjà un peu programmé en "procédurial" où il n'y a pas de classes, juste des fonctions.


String chaine = new String ( " CouCou Tout Le Monde"), chaine2 = new String();


Ici c'est comme si tu faisais :
String chaine;
String chaine2;


(déclaration de deux variables objets de type (ou plutot de classe) String.

chaine = new String( " CouCou Tout Le Monde");


Ici on instancie l'objet sur lequel pointe la variable chaine. On appelle le constructeur de prototype : String(String). C'est un constructeur spécial qui est codé de sorte que l'objet String ainsi crée contiennent comme propriété principale la chaine "Coucou tout le monde".

chaine2= new String();

Ici on instancie l'objet sur lequel pointe la variable chaine2. On appelle le constructeur par défaut de prototype String(), qui pour ton info intilise la chaine contenue dans l'objet à la chaine vide "".

chaine2=chaine.length();

Ceci ne compile pas.
le fait d'appeler chaine.length() appelle la méthode length() de la classe String sur l'objet chaine. Cette méthode est de prototype int length(), et donc renvoie un int (qui est en l'occurence la longeur de la chaine contenue dans la variable "chaine":
sachant que lenght() donne la taille d'une chaine de caractère.
Mais ceci ne compile pas car tu ne peux pas faire une variable String = un int. (Erreur : Type mismatch: cannot convert from int to String)

tu pourrais faire par contre :

int taille;
taille = chaine.length();


et ce que j'ai pas compri, c que d'après l'expresson " chaine2=chaine.length(); " chaine est appliqué à lenght().

Donc voilà oui c'est ça.
Alors la, si c comme ça, pourquoi on le passe pas en paramètres??

Je pense donc avoir déjà répondu à ça : c'est le fait de dire "chaine.length()" qui passe "chaine" en "paramètre". Pour appliquer la méthode length avec l'objet chaine2, on aurait écrit : "chaine2.length()".

Voilà!
0