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 :

Les objets de la classe Class


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Par défaut Les objets de la classe Class
    On sait que les seules manières de récupérer une instance de classe Class sont de passer par la méthode forName ou la méthode getClass () de la classe Object, suite à l'absence du constructeur. Le résultat de l'intanciation est une classe ou une interface.
    D'habitude, quand une classe est intanciée, je mets tout de suite un visage à l'objet créé; je pense à la mémorisation de ses attributs. C'est du concret!
    Quand je crée des objets de type Class, je n'arrive pas à mettre un visage. De plus lors de la représentation graphique de la class Class, il n'y a que des méthodes et donc aucun attribut même pas le nom de la classe...

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par wafiwafi Voir le message
    On sait que les seules manières de récupérer une instance de classe Class sont de passer par la méthode forName ou la méthode getClass () de la classe Object, suite à l'absence du constructeur.
    Ou alors le pseudo-membre statique class de toutes les classes. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Class<String> clazz = String.class;
    Le résultat de l'intanciation est une classe ou une interface.
    Il n'y a pas d'instanciation. Un objet Class est instancié au moment où la classe correspondante est chargée par la JVM. Raison pour laquelle il est accessible avec un membre statique.

    D'habitude, quand une classe est intanciée, je mets tout de suite un visage à l'objet créé; je pense à la mémorisation de ses attributs. C'est du concret!
    Eh bien il est temps d'oublier le concret. La programmation orientée objet, c'est le polymorphisme, la programmation par interface, etc. Tu n'es pas censé savoir ce qu'il y a dans les objets, tu es censé savoir ce que leurs méthodes promettent de faire.

    Quand je crée des objets de type Class
    Tu n'en crées pas, tu y accèdes.

    De plus lors de la représentation graphique de la class Class, il n'y a que des méthodes et donc aucun attribut même pas le nom de la classe...
    Quelle "représentation graphique" ?

    De toute façon, besoins de réflectivité et limites de Java oblige, la plupart de l'implémentation de Class est faite de méthodes natives, pas de méthodes Java. Il est normal que cette classe ait peu d'attributs.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Tu peux lire, si tu ne connais pas déjà, ces articles sur le principe d'introspection.

  4. #4
    Membre éclairé
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Par défaut
    Si si j'ai fais pas mal de réflexion; je ne me suis simplement jamais posé cette question. D'où mon post.

    Quelle "représentation graphique" ?
    La simple et classique représentation d'une classe par les compartiments (attributs, méthodes).


    La programmation orientée objet, c'est le polymorphisme, la programmation par interface, etc.
    C'est ce que je fais tout le temps. Je suis entièrement d'accord.

    Tu n'es pas censé savoir ce qu'il y a dans les objets, tu es censé savoir ce que leurs méthodes promettent de faire.
    Cette citation m'interpelle énormément! puisque je définissais mes types d'objets en une classe en me basant sur les caractéristiques communes (attributs) et bien entendu les opérations que peuvent subir ces derniers.

    D'après la citation, on se base sur les méthodes pour définir un type d'objets.
    (je ne parle pas des classes abstraites).

    J'aimerais bien voir le code de cette classe Class !!!! et surtout comment ce code mène à une classe ou une interface!!!! On ne passe certainement pas par un code avec une déclaration classique d'une classe.

    Pour l'instant, je suis incapable d'imaginer un tel truc (Une classe qui est à l'origine des objets (classe ou interface) mais qui n'est pas instanciée).
    Je vous avoue que j'ai du mal. Je mets de l'ordre dans tout cela et je reviens poster mon raisonnement que j'aimerais que vous critiqueriez pour validation.

    Merci de m'avoir mis en question.

  5. #5
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    La classe Class est une classe Java tout ce qu'il y a de plus normale. Par contre, une bonne partie de ses méthodes sont natives.

    Si tu veux vraiment comprendre comment ça fonctionne en interne, il faut que tu te plonges dans le code de Class et l'implémentation native des méthodes, mais c'est pas si trivial...

    Par contre pour créer une instance (newInstance()), ce n'est pas bien compliqué. Si tu regardes le code source, il suffit simplement de récupérer le constructeur par défaut de la classe et de l'appeller. Le constructeur est une méthode spéciale qui retourne une nouvelle instance de la classe. En plus de cela, il y a un système de sécurité et de cache, mais c'est pas trop difficile à comprendre.

  6. #6
    Membre éclairé
    Avatar de wafiwafi
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 500
    Par défaut
    Tout d'abords, Merci pour ton intervention.
    Néanmoins, tout cela, je le connais bien.
    Si tu veux vraiment comprendre comment ça fonctionne en interne, il faut que tu te plonges dans le code de Class et l'implémentation native des méthodes, mais c'est pas si trivial...
    Le principe me suffit!
    Je sais simplement que si une classe est appelée, la JVM crée un objet qui contient tout ce qu'il faut comme caractéristiques de la classe appelée. Ce même objet peut faire appel à une multitude de méthodes natives ou non opérant sur ces caractéristiques. La classe Class regroupe tout simplement ces objets. C'est d'ailleurs pour cette raison qu'on ne doit pas parler d'instanciation de la classe Class.
    quand on crée un objet de type Class, ce dernier est prêt à accueillir n'importe quelles caractéristiques de type (chaine de caractères, entiers, .... et tout ce qu'on veut).
    L'objet de type class créé pour contenir des informations relatives à une classe nommée c, n'est pas c elle même.
    Class est un moule avec bel et bien des caractéristiques et des méthodes.
    Sa seule particularité et la non instanciation. L'objet est crée par la JVM mais pas par instanciation.
    Pour le moment j'en suis là;

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

Discussions similaires

  1. ArrayList<Class> class class.setString()
    Par Onelove dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/08/2014, 19h42
  2. Retourner les objets declaré dans une classe
    Par slix_alex dans le forum Général Java
    Réponses: 2
    Dernier message: 24/03/2011, 19h00
  3. [Doctrine] récupérer les objets trouvés depuis actions.class
    Par jfsenechal dans le forum ORM
    Réponses: 7
    Dernier message: 13/01/2011, 10h15
  4. Accèder les objets d'une form à partir d'une classe
    Par xyron_x dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/04/2007, 14h49
  5. Réponses: 15
    Dernier message: 19/06/2006, 19h25

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