IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

modification objet méthode


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 108
    Par défaut modification objet méthode
    Bonjour, comment allez vous?
    en plus de ce temps bien gris (en Alsace) il se trouve que j'ai un petit soucis en Java qui me bloque depuis un petit moment.

    Je vous explique:

    je construit des arbres pour un projet. Un arbre étant constitué de nœud et certains noeud sont des variables d'autres des opération binaires (ayant alors 2 noeud comme fils) et d'autre encore des opération unaire (ayant alors 1 seul fils).
    Jusque la tout va bien.

    Cependant j'aurais besoin de pouvoir changer le type d'un noeud a certain moment. et dons j'ai une méthode Etape1(Noeud r) qui prend un Noeud en paramètre. cependant quand je modifie ce nœud ds la méthode il n'est pas modifier a la sortie de cette méthode..

    et donc je craque ! lol

    Si vous pouvez m'expliquer pourquoi ?
    Pck je pensai que java passai les objets par référence...

    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Peux tu poster ton code?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 108
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public void Etape1(Noeud r){
    		System.out.println(r.getClass());
    		if(r.getClass().getSuperclass()==OpérateurBinaire.class){
    			if(r.getClass()==OpérateurOu.class||r.getClass()==OpérateurET.class){
    				OpérateurBinaire t = (OpérateurBinaire) r;
    				Etape1(t.nG);
    				Etape1(t.nD);
    			}
    			if(r.getClass()==OpérateurImplique.class){
    				OpérateurBinaire t = (OpérateurBinaire) r;
     
    				OpérateurOu t1 = new OpérateurOu('v');
    				OpérandeUnaire non = new OpérandeUnaire('-');
     
    				non.n = t.nG;
    				t.nG = non;
     
    				r = t1;
     
    				((OpérateurBinaire)r).nG = t1.nG;
    				((OpérateurBinaire)r).nD = t1.nD;
     
     
    			}
    		}
    		if(r.getClass()==OpérandeUnaire.class){
    			OpérandeUnaire t = (OpérandeUnaire) r;
    			Etape1(t.n);
    		}
    	}
    Pour expliquer un peu jai une classe noeud abstraite dont 3 sous classes héritent :
    -Variable
    -opérateurBinaire (abstraite)
    -opérandUnaire

    et les sous classe de opérateur binaire sont
    -OpérateurOu
    -OpérateurET
    -OpérateurImplique
    -OpérateurEquivalent

    et ce que je ve faire dans la méthode c'est changer les opérateur implique en opérateur ou (pour un projet en logique) changer le A=>B en |A v B

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par raph-68i Voir le message
    cependant quand je modifie ce nœud ds la méthode il n'est pas modifier a la sortie de cette méthode..
    Cela dépend ce que tu veux dire par "modifier".
    En Java une affectation ne modifie pas un objet mais seulement sa référence...


    Citation Envoyé par raph-68i Voir le message
    Pck je pensai que java passai les objets par référence...
    Non ! En Java tous les paramètres sont passés par copie.

    Mais on ne manipule jamais d'objet directement, mais seulement des primitifs ou des références (on copie donc uniquement la référence).


    a++

  5. #5
    Membre éprouvé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 108
    Par défaut
    Citation Envoyé par adiGuba Voir le message

    En Java une affectation ne modifie pas un objet mais seulement sa référence...

    Non ! En Java tous les paramètres sont passés par copie.
    Merci tout d'abord de ta réponse.

    donc dans ma méthode etape1(noeud r), si je crée un nouveau noeud n et que je fait r=n je change la référence de r qui est une copine de mon noeud initiale.. donc je fait rien sur le noeud initial...

    comment "contourner" ce probleme ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Si tu as déclaré ton noeud public, tu pourrais faire simplement,
    noeud.r = ...
    Mais attention à ne pas modifier une autre instance de noeud.

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    En modifiant réellement le noeud, via des setter() par exemple...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void method(Noeud n) {
        n.setValue( xxx );
    }
    a++

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    l'autre solution étant de retourner le nouveau noeud et de laisser l'appelant faire ce qu'il a à faire avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public Noeud etape1(Noeud r){
    .....
        return t1;
    .....
    }
     
    Noeud x = .parent.getfilsUnique();
    x = etape1(x);
    x = etape2(x);
    parent.setFilsUnique(x);

  9. #9
    Membre éprouvé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 108
    Par défaut
    J'ai aussi peur de perdre mon chainage dans mon arbre. Parce que je stock que la racine de mon arbre et la racine ayant O 1 ou 2 fils contient les éléments suivant etc...

    et le but de ma méthode Etape1(noeud n) et de regarde le noeud n et si il est de type opérateurImplique je ve le remplacer par un opérateurOU sans pour autant perdre mon chainage, c'est a dire que le nouveau noeud ainsi créé soit bien pointé par le parent.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 108
    Par défaut
    je vois bien oui pour les setter mais il y a un petit soucis.

    Mon noeud n est de type OpérateurImplique. je veux un noeud n2 de type opérateurOU qui a les meme fils gauche et fils droit que n et ensuite je voudrais que n point vers n2 et sans dans le setter je vois pas comment le faire . . .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Procédural dans l'objet (méthodes versus fonctions)
    Par Jimalexp dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 23/01/2009, 14h32
  2. [Objet] Méthode de classe
    Par jimay dans le forum Général Python
    Réponses: 2
    Dernier message: 25/05/2007, 22h38
  3. Réponses: 6
    Dernier message: 05/02/2007, 20h49
  4. Réponses: 4
    Dernier message: 16/02/2006, 17h45
  5. [VB6] Modification objet OLE dans Word sous VB
    Par zworg dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 23/02/2004, 08h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo