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

Langage Java Discussion :

Parlons un peu de pointeurs : C -> Java


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut Parlons un peu de pointeurs : C -> Java
    Bonjour,

    je souhaiterai avoir quelques précisions concernant des cas particuliers de convertion de pointeurs C en Java. je n'ai pas trouvé les réponses dans les différents tutoriaux sur le suejt.

    Tout dabord dans le cas suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void main(void)
    	{
    	int *a = 0 ;
    	toto(a) ;
    	}
    ...
    void toto(int *a)
    	{
    	*a = 1
    	}
    Y a t'il une bonne façon de le convertir en java ?
    Etant donné que je souhaite garder ce type de structure, je vois deux solutions :
    - Convertir mon pointeur en un tableau à une seule case : int[] a = new int[1] ; c'est moche mais ça fonctionne car le tableau est passé par adresse et non par valeur.
    - Créer une Classe A qui contient une variable publique unique "a" et je passe A au lieu de "a" en paramètre.


    Deuxième problème dans le cas suivant, les fonctions passées en paramètres d'autres fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void mafonction(int x, void (*funcs)(float, int), float y)
    Je pense que le mieux est de passer à la place une Interface qui oblige a implementer une fonction bien particulière.
    Est ce la bonne solution ?


    Merci par avance...
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Pour répondre à tes deux questions:

    - en java, la notion de pointeur est implicite: tous les objets (java.lang.Object) sont des pointeurs: ainsi, si tu passes un objet en paramètre d'une méthode et que tu appliques une méthode dessus, l'objet original (avant appel de la méthode) sera modifié.

    - le passage de paramètres par référence n'existe pas. Si tu passes un type de base à une méthode, tu ne peux lui demander de le modifier. En revanche, chaque type de base a un type objet associé (int -> Integer, float -> Float, etc.). Or, comme les objets sont des pointeurs, tu peux ainsi émuler le fonctionnement d'un passage d'argument par référence.

    Si tu as besoin de passer une méthode en paramètre, c'est possible (réflexivité de java => cf. le package java.lang.reflect), mais ce n'est pas conseillé, d'autant plus qu'il y a de nombreuses exceptions possibles à gérer.
    Dans 95% des cas, passer une interface en paramètre de ta méthode sera plus propre et plus indiqué.

    En espérant que ça t'aidera...
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Merci...
    J'avais lu les tutoriaux sur les pointeurs et ça fait maintenant un an que j'utilise Java, mais je ne m'étais jamais penché sur ces problèmes de conversion, je faisais toujours autrement.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  4. #4
    Membre expérimenté Avatar de xv-mnt
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 142
    Par défaut
    @CyberChouan : Les objets de types Integer, etc... sont immutables. Donc même s'ils sont passés en paramètre d'une méthode, ils ne peuvent être modifiés dans cette méthode.

    La question que l'on doit se poser, c'est pourquoi ne pas vouloir changer de structure, puisque l'on passe d'un langage procédural pur à un langage OO.
    Autant en profiter pour refactoriser en passant par des objets.
    Le code en sera d'autant plus clair ! Si la raison est le coût en temps, on pourra rétorquer que le coût de maintenance sera astronomique, car on voudra continuer la logique procédurale dans de l'OO. A terme, le "saut" programmatique devra être fait. Il vaut mieux le faire dès le début...

  5. #5
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Citation Envoyé par xv-mnt Voir le message
    @CyberChouan : Les objets de types Integer, etc... sont immutables. Donc même s'ils sont passés en paramètre d'une méthode, ils ne peuvent être modifiés dans cette méthode.
    C'est exact, autant pour moi : j'ai écrit trop vite: ce que j'ai dit n'est donc vrai que pour les objets dont les classes ne sont pas déclarées "final"
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Final, c'est plutôt pour empecher l'héritage.

  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
    Citation Envoyé par CyberChouan Voir le message
    ce que j'ai dit n'est donc vrai que pour les objets dont les classes ne sont pas déclarées "final"
    C'est vrai pour toutes les classes qui ne sont pas immuable/immutables (vous pouvez choisir le terme de votre choix ). Le mot clef final n'est qu'une des conditions

    a++

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 155
    Par défaut
    pour la "double indirection", on peut creer une classe Pointeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Pointer<Type>{
      private Type data;
      Pointer(){data=null}
      Pointer(Type t){data=t;}
      Type get(){ return data;}
      void set(Type o){ data=o;}
    }
    et tu fait ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Pointer<Node> tempNode=new Pointer<Node>(_objet);
    //pour le faire aller dans ca:
    fonction(Pointer<Node> node);

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

Discussions similaires

  1. Pointeurs supprimés en Java ?
    Par Invité dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 05/05/2012, 21h18
  2. pointeur c++ en java
    Par rimas2009 dans le forum Général Java
    Réponses: 4
    Dernier message: 20/04/2009, 12h39
  3. Pointeur c/c++ et java
    Par vincent0 dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2005, 03h40
  4. [debutant] correspondance JAVA C++ pour pointeur de fonction
    Par davidoff_tls dans le forum Langage
    Réponses: 7
    Dernier message: 15/04/2004, 09h13

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