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 :

Equivalence Java C++


Sujet :

Java

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 1
    Par défaut Equivalence Java C++
    Bonjour,
    Je suis actuellement en train de préparer un partiel de programmation qui aura lieu cette semaine. Cependant, j'ai un problème pour les équivalences entre le Java et le C++. Pourriez-vous m'expliquer comment transformer, ligne par ligne, ces lignes de codes (qui sont en C++) en java ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CClass1* var1 = NULL;
    CClass1* var2 = NULL;
    CClass1 var3(30);
    var1 = new CClass1();
    var2 = new CClass1();
    var3 = *var1;
    var1->meth1(var3);
    var1->meth2(var3);
    var1->meth3(var2);
    void meth1(CClass1 x){..}
    void meth2(CClass1& y){..}
    void meth3(CClass1* z){..}
    CClass1* var1 = new CClass1[4];
    delete[] var1;
    Merci d'avance,

    Kappab

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Pour les trois quarts de ces lignes, il n'y a pas d'équivalence : Java est un langage qui ne travaille que par référence en interne. Il n'a pas de de méthode destroy non plus.

  3. #3
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    salut,

    Pour les trois quarts de ces lignes, il n'y a pas d'équivalence : Java est un langage qui ne travaille que par référence en interne. Il n'a pas de de méthode destroy non plus.
    Je plussoie. Disons que ce qui suit est à voir comme des équivalences en termes de 'fonctionnalités', pas en termes d'équivalence stricte.


    //CClass1* var1 = NULL;
    CClass1 var1 = null;

    //CClass1* var2 = NULL;
    CClass1 var2 = null;

    //CClass1 var3(30);
    CClass1 var3 = new CClass1(30);

    //var1 = new CClass1();
    var1 = new CClass1();

    //var2 = new CClass1();
    var2 = new CClass1();

    //var3 = *var1;
    var3 = var1.clone();

    //var1->meth1(var3);
    var1.meth1(var3);

    //var1->meth2(var3);
    var1.meth2(var3);

    //var1->meth3(var2);
    var1.meth3(var2);

    //void meth1(CClass1 x){..}
    Pas vraiment d'équivalence: on ne peut pas passer un objet par copie en Java en dehors des types primitifs (int, boolean, ...). La solution serait de faire systématiquement un "CClcass1 monX = x.clone();" en début de code de la méthode et d'utiliser monX ensuite.

    //void meth2(CClass1& y){..}
    void meth2(CClass1 y) {..}

    //void meth3(CClass1* z){..}
    Equivaut exactement à la précédente si on remplace dans le code de la méthode les z->methode() par z.methode (comme en C++, la différence entre pointeur '*' et référence '&').

    //void meth2(CClass1 y);
    Idem que pour void meth1(CClass1 x){..}

    //CClass1* var1 = new CClass1[4];
    CClass1[] var1 = new CClass1[4];

    //delete[] var1;
    Pas d'équivalent puisqu'on a un garbage collector en java, mis à part 'var1 = null;' qui amènera le GC à faire un 'delete' de ton tableau à un moment ou à un autre.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Est-ce que la dernière ligne ne signifie pas supprimer chacun des éléments du tableau ? (J'ai pas fait beaucoup de C++)

    Si c'est le cas, voici l'équivalent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // delete[] var1;
    java.util.Arrays.fill(var1, null);

  5. #5
    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 dingoth Voir le message
    Est-ce que la dernière ligne ne signifie pas supprimer chacun des éléments du tableau ? (J'ai pas fait beaucoup de C++)

    Si c'est le cas, voici l'équivalent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // delete[] var1;
    java.util.Arrays.fill(var1, null);
    Le delete[] détruit les éléments du tableau, mais également le tableau en lui-même. Donc cela reviendrait à mettre le tableau à null :
    Le Arrays.fill() est optionnel et n'apporte rien de plus...



    Citation Envoyé par nouknouk Voir le message
    //void meth2(CClass1& y){..}
    void meth2(CClass1 y) {..}

    //void meth3(CClass1* z){..}
    Equivaut exactement à la précédente si on remplace dans le code de la méthode les z->methode() par z.methode (comme en C++, la différence entre pointeur '*' et référence '&').
    Pas exactement. La différence entre passage par pointeur et par référence est un peu plus subtile. Lorsqu'on passe un pointeur on passe en réalité une copie du pointeur, et donc les modifs faites sur la valeur du pointeur ne sont pas répercuté en sortie de la méthode.

    De ce point de vue là, le passage de méthode en Java se rapprocherait plus du passage par pointeur puisqu'on effectue en réalité une copie de la référence...




    Maintenant ces correspondances C++ / Java n'ont pas trop de sens, car les philosophies des deux langages sont très différentes...


    a++

  6. #6
    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
    Citation Envoyé par adiGuba Voir le message
    Maintenant ces correspondances C++ / Java n'ont pas trop de sens, car les philosophies des deux langages sont très différentes...
    +1

    et un partiel cette semaine sans connaitre le language, mal barré


    pour faire simple, en java

    -> tous les paramètres des méthodes sont passé par copie
    -> le gc s'occupe de nettoyer les références qui ne sont plus utilisé
    -> toutes les variables de type Objet ou dérivé sont des références vers l'objet
    -> Il n'existe pas d'arithmétique sur les pointeurs
    -> On ne surcharge pas les opérateurs

    Avec ça tu peux traiter le plus gros des "correspondances"

Discussions similaires

  1. Equivalent java de StreamTransport
    Par pepse dans le forum Internet
    Réponses: 2
    Dernier message: 25/09/2011, 14h32
  2. Equivalent Java d'une signature de fonction C++
    Par rimas2009 dans le forum Langage
    Réponses: 12
    Dernier message: 24/04/2009, 12h42
  3. Equivalent Java de Visual C#
    Par aandre2937 dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 25/11/2007, 15h41
  4. Equivalent Java du "char & entier"
    Par danyboy85 dans le forum C++
    Réponses: 11
    Dernier message: 06/02/2007, 17h13
  5. [Language]Equivalent Java des pointeurs de fonctions du C/C++
    Par Thierry Chappuis dans le forum Langage
    Réponses: 1
    Dernier message: 25/11/2005, 15h14

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