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

avec Java Discussion :

Constructeur par copie ?


Sujet :

avec Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Points : 631
    Points
    631
    Par défaut Constructeur par copie ?
    Bonjour,

    J'avais fait un wrapper sur l'objet socket, pour y ajouter quelques fonctionnalités , et j'avais fait ça n'importe comment : mon objet possédait un champ socket, et mes fonctions utilisaient la socket.

    Maintenant que j'y reflechit, je me dis que c'est plus malin de faire dériver mon wrapper de socket, et de simplement ajouter les fonctions.

    L'idée, c'est que dans la version précédente, j'avais un constructeur qui prenait une socket en argument.

    Avec la deuxième méthode, je ne sais pas comment faire (super(mysocket) n'existe pas).

    Donc :
    1) comment on pourrait faire ce constructeur ?
    2) quelle est la meilleure technique pour le wrapper en réalité : un champ socket ou un héritage de socket ?

    Merci

  2. #2
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Bonjour,

    Moi, je ferais les deux :
    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
     
    public class MaSocket extends Socket {
      private Socket s;
     
      // Mes attributs persos
      .....
     
      public MySocket(Socket s) {
        this.s = s;
      }
     
      // Mes méthodes persos
      .....
     
      // Méthodes delegate de Socket
      public void bind(SocketAddress bindpoint) {
         s.bind(bindpoint);
      }
     
      publlic void close() {
         s.close();
      }
     
     public InetAddress getInetAddress() {
        return s.getInetAddress();
     }
     
      .............
    }
    Avantages :
    - Ta classe est toujours une Socket
    - Tu t'appuis sur l'implémentation de Socket et évite ton problème de constructeur.

    Il s'agit du Pattern Decorator.

    A+
    Gronono

  3. #3
    Membre expérimenté
    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
    Points : 1 419
    Points
    1 419
    Par défaut
    Voilà un exemple typique de clonage et de constructeur par recopie.

    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
    public class ClasseMere implements Cloneable {
      private int abc;
      private MaClasseSpeciale xyz;
      public ClasseMere (ClasseMere objetACopier) throws NullPointerException {
        if (objetACopier == null)
          throw new NullPointerException("objetACopier ne peut être null");
        this.abc = objetACopier.abc;
        if (objetACopier.xyz != null) {
          this.xyz = objetACopier.xyz.clone();
        }
      }
     
      public ClasseMere clone () {
        return new ClasseMere(this);
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class ClasseFille extends ClasseMere implements Cloneable {
      private double valeur;
      public ClasseFille (ClasseFille objetACopier) {
        super(objetACopier);
        this.valeur = objetACopier.valeur;
      }
     
      public ClasseFille clone () {
        return new ClasseFille(this);
      }
    }
    C'est bien plus facile que l'utilisation native de clone. Moins rapide sans doute, mais tellement plus compréhensible

Discussions similaires

  1. [POO] Constructeur par copie
    Par kacedda dans le forum C++
    Réponses: 16
    Dernier message: 05/05/2007, 12h38
  2. [Debutant] Problème avec un constructeur par copie
    Par Drannor dans le forum Débuter
    Réponses: 5
    Dernier message: 12/03/2007, 09h15
  3. Réponses: 5
    Dernier message: 03/12/2006, 15h55
  4. Constructeur par copie et std::list
    Par Captain_JS dans le forum SL & STL
    Réponses: 5
    Dernier message: 13/12/2005, 19h15
  5. [deb.]Constructeur par copie
    Par Marc_3 dans le forum Débuter
    Réponses: 4
    Dernier message: 19/11/2005, 13h33

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