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 :

Compréhension des Object


Sujet :

avec Java

  1. #21
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Par défaut
    j'ai du mal à comprendre. Dans les 2 cas je crée une tortue des galapagos?
    Donc ma tortueDesGalapagos héritera de toute les caractéristique de animal et tortue. Enfin bref je suis assez perdu

  2. #22
    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
    Oui, mais dans un cas tu mets cette tortue dans une variable de type Animal. Donc ça veut dire que le programme qui utilise cette variable, marche avec n'importe quel Animal : n'importe quelle tortue, mais aussi un Lièvre.

    Dans l'autre cas tu le mets dans une variable de type Tortue. Donc ça veut dire que le programme ne marcherait pas avec un Lièvre, mais il marche avec n'importe quelle Tortue, de floride, des galapagos ou d'ailleurs.

    L'objet que tu as mis dans cette variable, il se trouve qu'en réalité c'est une TortueDeFloride. Mais c'est pas important. Le type de la variable dit que ça marche avec n'importe quel Tortue, tu aurais pu y mettre une autre Tortue si tu voulais.
    Et dans le deuxième cas, la variable étant de type Animal, ça marcherait même avec n'importe quel Animal.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #23
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Par défaut
    Allez une dernière question à propos de la question 8 car je suis simple d'esprit

    Comment puis
    public static void main(String[] args){
    Tortue t = new TortueDeFloride() ;
    int i = compareVitesse(t,t);
    }

    public static int compareVitesse(Animal a, Animal b) { …} fonctionne
    public static int compareVitesse(Animal a, Tortue b) { …} fonctionne
    public static int compareVitesse(Tortue a, Animal b) { …} fonctionne
    public static int compareVitesse(Lievre a, Animal b) { …} fonctionne pas
    public static int compareVitesse(Animal a, TortueDeFloride b) { …} fonctionne pas

    Pour la dernière vu que le type est tortue le compilateur n’acceptera pas même si en pratique le programme pourrait tourner dans ce cas. J'ai raison?


    En tout cas je tiens à vous remerciez pour toute vos réponse en espérant ne pas trop vous embêtez.. Je fais passer les explications à toute ma classe sa sauvera surement quelque personne
    L'an dernier cette examen à eu un tôt d’échec de 80% en 1er session

  4. #24
    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 Linquisiteur Voir le message
    public static int compareVitesse(Animal a, Animal b) { …} fonctionne
    public static int compareVitesse(Animal a, Tortue b) { …} fonctionne
    public static int compareVitesse(Tortue a, Animal b) { …} fonctionne
    public static int compareVitesse(Lievre a, Animal b) { …} fonctionne pas
    public static int compareVitesse(Animal a, TortueDeFloride b) { …} fonctionne pas
    On ne te demande pas si elles fonctionnent. On te dit qu'elles sont toutes là, le compilateur doit donc choisir laquelle il va appliquer. On te demande si le compilateur est capable de choisir la bonne méthode à appliquer, autrement dit, l'appel est-il ambigu, oui ou non ?

    Pour la dernière vu que le type est tortue le compilateur n’acceptera pas même si en pratique le programme pourrait tourner dans ce cas. J'ai raison?
    En effet, elle ne s'applique pas aux paramètres indiqués (Tortue, Tortue.) Le compilateur ne la retient pas comme candidate applicable, il ne l'appellerait pas même si c'était la seule méthode de ce nom.
    Mais il n'y a pas de "en pratique." Si la variable passée était de type TortueDeFloride, les paramètres (TortueDeFloride, TortueDeFloride) s'appliqueraient et elle serait une candidate. Ce n'est pas le cas, la variable est de type Tortue, pas TortueDeFloride. Fin de l'histoire.

    Citation Envoyé par Linquisiteur Voir le message
    En tout cas je tiens à vous remerciez pour toute vos réponse en espérant ne pas trop vous embêtez.. Je fais passer les explications à toute ma classe sa sauvera surement quelque personne
    L'an dernier cette examen à eu un tôt d’échec de 80% en 1er session
    Il est clair que ces exercices te dépassent complètement. Tu ne réalises clairement pas la distance. Apparemment ça ne vient pas de toi mais du cours lui-même, s'il y a 80% d'échec.

    "Faire passer" ça, ne sauvera personne qui n'aurait pas su y répondre facilement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #25
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Par défaut
    Il n'est jamais trop tard pour le réussir

    public static int compareVitesse(Animal a, Animal b) { …}
    public static int compareVitesse(Animal a, Tortue b) { …}
    public static int compareVitesse(Tortue a, Animal b) { …}
    public static int compareVitesse(Lievre a, Animal b) { …}
    public static int compareVitesse(Animal a, TortueDeFloride b) { …}

    Bon j'ai réfléchis, c'est ambigu entre la 2eme et la 3eme méthode.
    Le compilateur va prendre ce qui est le plus proche des types donner mais ne pourras pas choisir entre la seconde et la troisième car elle se valent entre elle.

    Sinon la 1er est possible mais la 4 et 5 ne sont pas possible

  6. #26
    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
    Exactement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #27
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Par défaut
    merci beaucoup. Je commence à sortir de l'eau grâce a vous

  8. #28
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Par défaut
    De retour, bon 1er semaine d'examen passer. Mardi exam de java qui contiendra plus d'objet que prévu. j'ai relu toute vos réponse attentivement et j'ai eu plusieurs déclic sur plein de point

    Mais j'ai encore des questions que je vais poster dans l'ordre après j'aurais presque comprit la matière sur cette partie

    Il y a une chose qui ma interpeller

    dans la question 1 pour créer une classe d'instance on fait
    a = new A
    tandis que dans la question 5 on a
    Object fruit = new Fruit

    Bon d'après mon idée le "Object" est le type de la variable (pour le compilateur) comme expliquer avec les tortues de la question 8 mais je me pose la question dans l'exercice 1 a est de type A ?
    on voit A x;
    x = new A();
    donc si j'ai bien comprit on peut spécialiser avant de crée l'instance de classe.

    Ensuite je reviens à l'exercice 4 car en relisant j'ai remarqué qu'il y avait un piège dans l’énoncer qui ma sûrement faussé mes réponses donc je le refais

    1. Non car fruit est l'instance de GoldenDelicious qui hérite de Apple et dont Apple hérite de Fruit, donc Orange n'est pas une précision de GoldenDelicious
    2.Oui car fruit est la précision de Apple
    3.Oui mais seulement si Fruit orange = new Orange
    4.Non car Apple est une sous classe fils au même niveau que Orange
    5. fruit peut utiliser cette méthode seulement si fruit et déclaré de type Apple ou Fruit orange ne pourra pas l'utiliser sauf si orange est de type Fruit
    6.fruit peut l'utiliser seulement si fruit est déclarer comme suit
    (Fruit fruit = new GoldenDelicious)
    pour orange il n'y aura aucun problème qu'il soit de type Fruit ou de type Orange

    pour la suite j'ai réfléchie à la question 9 poster précédemment (c'est super tordu et malsain)

    l'output sera:

    2 2 6
    2 2 6 70
    4 5 6 70

    80 80 80
    9 9 9
    9 9 9 9
    80 80 80

    Malheureusement j'ai oublier mon chargeur en classe donc je me retrouve juste avec mon petit lenovo sous linux ou je n'ai rien installer permettant de compiler du java --' pratique quand on as même pas le temps d'aller au toilette en paix... (j'ai étudier le shell en plein examen )

  9. #29
    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 Linquisiteur Voir le message
    dans la question 1 pour créer une classe d'instance on fait
    "Instance de classe," pas "classe d'instance."

    Citation Envoyé par Linquisiteur Voir le message
    Bon d'après mon idée le "Object" est le type de la variable (pour le compilateur) comme expliquer avec les tortues de la question 8 mais je me pose la question dans l'exercice 1 a est de type A ?
    La variable c'est x, pas a. Mais x est de type A, oui.

    Citation Envoyé par Linquisiteur Voir le message
    on voit A x;
    x = new A();
    donc si j'ai bien comprit on peut spécialiser avant de crée l'instance de classe.
    Spécia-quoi ?

    C'est exactement la même chose que :

    Sauf qu'au lieu de int on a A, et que les int n'étant pas des objets, ce qu'on assigne à une variable int n'est pas des instances d'objets, donc pas besoin de new.

    Citation Envoyé par Linquisiteur Voir le message
    1. Non car fruit est l'instance de GoldenDelicious qui hérite de Apple et dont Apple hérite de Fruit, donc Orange n'est pas une précision de GoldenDelicious
    Dis juste que GoldenDelicious n'est pas une classe descendante d'Orange. (ou qu'Orange n'est pas un type ascendant de GoldenDelicious.)

    Citation Envoyé par Linquisiteur Voir le message
    2.Oui car fruit est la précision de Apple
    préci-quoi ? Ça veut rien dire.
    Est-ce que la variable fruit contient une instance d'une classe qui est une classe descendante de Apple ? C'est la seule question qu'on te pose.

    Citation Envoyé par Linquisiteur Voir le message
    3.Oui mais seulement si Fruit orange = new Orange
    Et vu que l'énoncé n'indique pas la déclaration de la variable orange, mais indique que cette variable est assignée orange = new Orange();, oui tout court, sans condition.

    Citation Envoyé par Linquisiteur Voir le message
    4.Non car Apple est une sous classe fils au même niveau que Orange
    Mouais. Même niveau donc aucune est sous-type de l'autre, ok.

    Citation Envoyé par Linquisiteur Voir le message
    5. fruit peut utiliser cette méthode seulement si fruit et déclaré de type Apple ou Fruit orange ne pourra pas l'utiliser sauf si orange est de type Fruit
    Non. La méthode est ajoutée au type Apple, Fruit est ascendant de Apple, pas descendant, donc ne dispose pas de cette méthode. Donc tout ce qui est de type Fruit ne peut pas s'en servir.

    Citation Envoyé par Linquisiteur Voir le message
    6.fruit peut l'utiliser seulement si fruit est déclarer comme suit
    (Fruit fruit = new GoldenDelicious)
    pour orange il n'y aura aucun problème qu'il soit de type Fruit ou de type Orange
    Non, même raisonnement.

    Citation Envoyé par Linquisiteur Voir le message
    pour la suite j'ai réfléchie à la question 9 poster précédemment (c'est super tordu et malsain)

    l'output sera:

    2 2 6
    2 2 6 70
    4 5 6 70
    Complètement pas. Aucun objet n'a été créé avec les paramètres 2, 2, 6, alors pourquoi ça s'afficherait ?
    L'exercice est difficile à suivre je suis d'accord. Mais de là à inventer des données venant de nulle part...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #30
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
         ClasseA a = new ClasseA(2,2);
    		ClasseB b = new ClasseB(4,5,6);
    		ClasseC c = new ClasseC(70,70,70,70);
    		a = b; a.affiche();							
    		a = c; a.affiche();							
    		b = c; b.affiche();	
     
    		ClasseB b2 = new ClasseB(80,80,80); b2.affiche();	
    		ClasseB b3 = new ClasseC(9,9,9,9); b3.affiche();	
    		ClasseA a2 = (ClasseC)b3; a2.affiche();			
    		ClasseA a3 = (ClasseC)b2; a3.affiche();
    Et bien mon raisonnement devait être fausser
    je retente

    a=b;afficher(); //on met b dans une classe a on va donc généraliser ce qui fait que on perdre la 3eme valeur: 2 2

    a=c;a.afficher(); //idem: 2 2

    b=c;b.afficher(); 70 70 70

  11. #31
    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
    Non, il y a application du polymorphisme.

    La variable b a été assignée avec new ClasseB(). L'objet qu'elle contient est donc de type concret ClasseB.

    Comme ClasseB est une sous-classe de ClasseA, on peut assigner une variable type ClasseB à une variable de type ClasseA. C'est tout le principe des classes et de l'héritage.

    Mais cela ne change strictement rien à l'objet assigné. Il ne subit aucune modification, il reste toujours le même. Il garde les mêmes propriétés et le même comportement. C'est le même, juste le même.

    Cet objet étant de classe concrète ClasseB, il se comportera comme un objet de classe ClasseB.
    Et donc, a.affiche() appelle la méthode affiche() de ClasseB, ce qui est en fait la même chose que ce qu'aurait fait b.affiche().

    Faut réviser le cours sur le polymorphisme et la redéfinition de méthode.

    ... Et tu n'arriveras à rien si tu n'essaies pas de vérifier toi-même ce que disent tes cours. Un langage de programmation ne s'apprend pas qu'avec un livre. Il faut se mettre devant l'ordinateur et essayer des trucs. Ce que tu fais ne sert à rien, tu ne comprendras jamais quoi que ce soit.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. JAVA - Passer des Objects à des méthodes
    Par canou94 dans le forum CORBA
    Réponses: 2
    Dernier message: 15/11/2005, 22h39
  2. [DEBUTANTE][ECLIPSE] Pb de compréhension des package SERVLET
    Par fchafia dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 18/02/2005, 16h55
  3. [FLASH MX] Prob de compréhension des bouttons
    Par WriteLN dans le forum Flash
    Réponses: 13
    Dernier message: 16/10/2003, 17h01
  4. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

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