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 :

A quoi ça sert l'instanciation dynamique ?


Sujet :

Langage Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 197
    Points : 225
    Points
    225
    Par défaut A quoi ça sert l'instanciation dynamique ?
    Bonjour,
    J'ai découvert qu'il est possible d'instancier un objet sans utiliser l'opérateur new, et on appelle ça l'instanciation dynamique.
    Je n'arrive pas à comprendre en quoi c'est plus dynamique qu'un new, et quel est l'intérêt.
    Si quelqu'un a un exemple simple et concret ?
    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2013
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2013
    Messages : 191
    Points : 472
    Points
    472
    Par défaut
    Lorsque tu fais un new, tu décides a la compilation quelle classe tu vas instancier.
    Avec java.lang.refect, tu peux par exemple a partir d'un chaine de caractère charger dynamiquement une classe inconnue à la compilation, puis l'instancier.
    Ce genre de procédé peut servir par exemple, lorsque tu fais des applications modulaires.
    cf. http://baptiste-wicht.developpez.com.../?page=Modules

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 197
    Points : 225
    Points
    225
    Par défaut
    D'accord merci !

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2018
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    a quoi sert l'instanciation dans java svp

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Instancier, c'est créer une nouvelle instance d'objet.

    Java est un langage orienté objets, c'est-à-dire qu'on manipule des objets. Comment est constitué un objet (ses propriétés et ses comportements) est décrit dans ce qu'on appelle une classe. C'est comme un plan de maison. Instancier un objet, c'est créer un nouvel objet à partir d'une classe, comme quand on bâtit une nouvelle maison à partir d'un plan.

    On peut donc avoir plus plans différents, et pour chacun de ces plans, avoir plusieurs maisons différentes, comme on peut avoir plusieurs classes différentes, et créer plusieurs instances d'objets pour chacune de ces classes.

    On instancie habituellement un objet en Java avec l'opérateur new (il y a d'autres moyens, dont l'un d'eux est évoqué dans la question initiale) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Objet objet = new Objet(); // on instancie une nouvelle instance de classe Objet dont on met la référence dans une variable appelée objet, et typée Objet
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Prenons un exemple simple, tu te créer une interface qui permet d'utiliser le GPS.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface GPS {
       double getLongitude();
       double getLatitude();
    }

    Cette interface permet de récupérer les coordonnées de ta position de manière unifiée et ce quelque soit la plateforme sur laquelle ton application va tourner.

    Cependant, suivant que tu sois sur un PC, un téléphone sous Android ou un téléphone iOS, tu ne va pas accéder au service GPS de l'OS de la même manière (si tant est qu'il y ait un service de localisation sur cet OS). Cela veut dire que tu vas devoir coder 3-5 implémentations concrètes différents qui étendent cette interface pour chacune des plateformes cibles.

    Cependant tu n'as pas non plus envie dans ton code de devoir écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    GPS gps = null;
    si Windows
       gps = new WindowsGPS();
    si Linux
       gps = new LinuxGPS();
    si macOS
       gps = new MacOSGPS();
    si Android
       gps = new AndroidGPS();
    si iOS
       gps = new IOSGPS();
    finsi
    C'est certes portable mais pas très facile a maintenir (ajout/suppression d'OS supportés) ou même a compiler. Les portions propres a certains systèmes ne pourront pas se compiler sur les autres.

    Par contre ca serait cool si tu pouvais écrire un truc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GPS gps = FabriqueDeGPS.nouveauGPS();
    Mais tu n'as pas non plus envie de retrouver ton grosbloc if écrit en dur, dans le code de la fabrique a GPS. Ça ne ferai que déplacer le problème ailleurs sans le resoudre.

    Comme le dit EyZox, en Java il existe des moyens d'instancier une classe via une chaîne de texte, soit a mano par la réflexion, soit par l'API des services. Le code a utiliser est flexible et très générique et donc peut être utilisé pour plusieurs solutions. Ce faisant tu n'as plus de références en dur vers la classe concrète qui est utilisée, ça te permet entre autres :
    • De compiler plus facilement ton module indépendamment de la plateforme sur laquelle tu te trouves.
    • De changer les implémentations concrètes si besoin sans avoir a bidouiller le code partout ailleurs dans les autres classes.
    • De rajouter des supports de nouvelles plateformes sans rajouter plus de code ici et la.


    Par contre évidement en introduisant un tel découplage, tu perds certains avantages que pouvais t'apporter la compilation et donc tu vas devoir d'autant plus tester chaque plateforme séparément pour bien vérifier que tout fonctionne car désormais les erreurs peuvent se produire a l’exécution. Ex : une faute de frappe dans le fichier de déclaration du service fera que la classe concrète ne sera pas trouvée par la fabrique et donc une exception sera lancée lors de la tentative d'instanciation.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. [VB.NET] instanciation dynamique
    Par lucie.houel dans le forum ASP.NET
    Réponses: 1
    Dernier message: 21/11/2005, 12h54
  2. SPI_GETPOWEROFFACTIVE à quoi ca sert??
    Par marco62118 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/11/2005, 13h51
  3. Instanciation dynamique d'ActiveX
    Par cathar_rhythm dans le forum MFC
    Réponses: 12
    Dernier message: 28/06/2005, 08h11
  4. [Collections] L'interface "Iterator" à quoi ça sert
    Par Samanta dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 07/04/2005, 17h51
  5. [VB6] [TWIPS] A quoi ça sert ?!
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 18/09/2003, 09h04

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