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 :

Personne p= new Utilisateur dans quel but?


Sujet :

avec Java

  1. #1
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut Personne p= new Utilisateur dans quel but?
    Bonjour je voudrai seulement savoir pourquoi par moment quand on déclare un objet, on met ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personne p= new Utilisateur

    l'objet sera une instance de quelle classe, pourquoi nous faisons cela?, merci d'avance pour votre aide...

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Personne est une interface et Utilisateur une classe qui l'implémente.

    A+.

  3. #3
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut
    Pourais-je avoir plus d'explication svp...

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est ce que l'on appelle le polymorphisme.
    Cela permet de créer des méthode commune à un ensemble d'objets différents, mais possédant des trait communs.
    C'est une des grandes notions de base de la programmation objet.
    Je te conseille la lecture suivante: http://bruce-eckel.developpez.com/li...?chap=8&page=0

  5. #5
    Membre régulier Avatar de 0redd
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 141
    Points : 79
    Points
    79
    Par défaut
    EDIT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personne p= new Utilisateur();
    bah on voudrai une personne (donc on la choisi comme type pour la reference p)
    et puisque Utilisateur EST une personne, ça passe
    s'il y'a une autre classe qui implémente Personne, disons Administrateur
    alors on pourra faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personne p= new Administrateur()
    sinon comme a dit sinok va plutôt essayer de comprendre le polymorphisme, dans un bouquin, ça te serai plus intéressant.

    juste pour exemple
    tu peux avoir une méthode qui te retourne soit un Administrateur soit un Utilisateur, si tu écris le truc sans polymorphisme ça serai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if( maMethode() instanceof Utilisateur ) {
     Utilisateur u = new Utilisateur();
     //et tu continues le traitement
    } else {
     Administrateur  a = new Administrateur  ();
     //et tu continues le traitement
    }
    ça serai plus simple de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Personne p= maMethode();
    //et tu continues le traitement
    et là sans ce soucier si j'ai un admin ou un user, puisque la référence peut contenir les 2 types
    voilà

  6. #6
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut
    la dans le cas que vous avez donné quel est le type de l'objet est ce admin ou personne? et pour pouvoir faire ca il faut donc qu'admin soit une class fille de personne c'est ca? et on peux meme utiliser les méthodes de personnes?

    Est ce qu'on peut utiliser aussi les méthode d'admin?

  7. #7
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Il faut distinguer deux choses:

    le type déclaré à la compilation:
    Personne p = .....
    Ici le type est Personne. Donc à partir de p on peux accéder à n'importe quelle méthode de Personne

    Et le type réel au moment de l'exécution (qui est beaucoup plus variable)
    .... = new Administrateur().

    Ce qui compte pour que le code compile, c'est que les types déclarés soient correct par rapport aux méthdes invoquées
    Ce qui compte pour que le code fonctionne sans erreur, c'est que les types réels soient compatbibles avec les types déclarés.

    Si je reviens sur le code, je peux faire
    p.uneMethodeDePersonne()
    mais pas
    p.uneMethodeDeAdministrateur(), car le compilateur va dire "Personne n'a pas de méthode uneMethodeDeAdministrateur"

    Pour accéder aux méthodes spécifiques à l'administrateur on fera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((Administrateur)p).uneMethodeDeAdministrateur()
    C'est à dire qu'on informe le compilateur qu'on suppose que p est en fait un Administrateur. Ca compilera mais si, a l'exécution, p est un Utilisateur plutot qu'un Administrateur, par exemple, les code se vautrera avec un exception.

  8. #8
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut
    Merci beaucoup pour votre aide, c'est très gentil de votre part, en résumé il n'y a que l'admin qui peut accéder aux méthodes de personne vu que c un fille de personne et pas l'inverse, merci beaucoup



    est ce que vous entendez par ils doivent etre compatible qu'il faut qu'il y ai un héritage entre les deux?

    voici un exemple de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ObjetGraphique o = new Cercle();
    o.draw(); // de Cercle ou de ObjetGraphique ?
    si les deux classes possèdent la méthode draw la quelle des deus sera appelée ?

  9. #9
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    j'entend que si t'as une variable de type Personne et qu'au runtime t'essaie d'y foutre un Animal, ca marchera pas

    Pour ce qui est des méthodes appelée, java fait du late binding, c'est à dire que c'est au runtime qu'on cherche après la méthode sur base de son nom. Donc, dans ton cas, ce sera Cercle.draw() qui sera appelé.

  10. #10
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut
    oui donc il cherche d'abord dans les méthode de la référence s'il trouve pas il cherche dans le type déclaration...

  11. #11
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    non il prend l'instance réelle et cherche une méthode avec cette signature. Cette méthode est cherchée en remontant progressivement dans la hierarchie des parents jusqu'à Object.

  12. #12
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut
    Donc c'est comme je vous ai dit il commence par la référence vu que notre objet a une référence de type cercle il commence par cercle et il remonte, merci beaucoup pour aide, c'est très gentil...

Discussions similaires

  1. Quel est la syntaxe exact pour ajouter un utilisateurs dans plusieurs groupes
    Par pierrot10 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 27/02/2014, 14h32
  2. UML : Qui s'en sert ? Pourquoi ? Dans quels cas ? Où ?
    Par Matthieu Brucher dans le forum UML
    Réponses: 83
    Dernier message: 10/06/2013, 17h13
  3. XML dans quel but l'utilise-on
    Par zemzoum89 dans le forum Format d'échange (XML, JSON...)
    Réponses: 12
    Dernier message: 05/10/2010, 00h53
  4. Installer apr utils dans le but de compiler apache
    Par Slein dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 04/06/2004, 20h07
  5. [corba] débutant : dans quels cas l'utiliser
    Par jmturc dans le forum CORBA
    Réponses: 2
    Dernier message: 10/10/2002, 09h58

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