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 :

downcasting & upcasting


Sujet :

avec Java

  1. #1
    Membre régulier Avatar de vertebre
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Points : 111
    Points
    111
    Par défaut downcasting & upcasting
    Bonsoir,

    Je voudrai savoir quelle est la conséquence de caster :

    • un objet mère vers un objet fille

      L'objet mère se verra ajouter les attributs de la classe fille ? si oui à quelles valeurs ?
      L'objet fille se verra retirer toutes les méthodes/procédures qu'elle a définies, redéfinies ou qui provenait d'un interface ?
      L’objet mère se verra ajouter les méthodes/procédures définies et redéfinies ou provenant d'interface de la classe fille ?
    • un objet fille vers un objet mère

      L'objet fille se verra supprimer ses attributs ?
      L'objet fille se verra retirer toutes les méthodes/procédures qu'elle a définies, redéfinies ou qui provenait d'un interface ?
      L'objet fille récupéra toutes les méthodes/procédures définies,redéfinies ou qui provienne d'un interface, de l'objet mère


    dans l'attente de vous lire,

    bonne soirée

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    caster des objets d'un type vers un autre est sans conséquence. L'objet visé par le casting reste le même objet sans modification.

    caster un objet sert juste à pouvoir le mettre dans une variable d'un type différent du type qu'on lui connaissait jusque-là. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A var1 = obtenirUnA();
    B var2 = (B)var1;
    var1 et var2 pointent tous les deux vers le même objet. Mais elles ne sont pas de même type.
    var1 est de type A et donc avec elle le compilateur autorise à utiliser les champs et méthodes que contient le type A.
    var2 est de type B et donc avec elle le compilateur autorise à utiliser les champs et méthodes que contient le type B.

    Typiquement ce genre de code n'est utilisé que si B est un sous-type de A. Donc du downcasting. B étant un sous-type de A, il peut avoir des champs ou méthodes que A n'a pas, et caster sert à pouvoir se servir de ces méthodes.

    Caster un objet o vers le type T, sert à dire au compilateur, "hé, tu vois cet objet ? Je t'informe que cet objet est de type T ou d'un sous-type de T. Vérifie, et si je me trompe déclenche une erreur sous forme de ClassCastException. Par contre si j'ai raison, je veux mettre cet objet dans une variable de type T."

    À aucun moment l'objet n'a subi la moindre modification. Sa classe réelle a été vérifiée, et vérifié qu'elle est un sous-type de T. Mais il ne subit pas de changement.

    Upcaster est parfaitement inutile. Si B est un surtype de A alors les objets de type A peuvent lui être assignées directement sans vérification : forcément tout ce que peut faire un surtype, un sous-type peut le faire aussi. Et donc le code serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A var1 = obtenirUnA();
    B var2 = var1;
    Et enfin, s'il n'y a pas de relation d'ascendance entre A et B, alors tenter le cast est refusé par le compilateur : il sait parfaitement qu'un objet qui tenait dans une variable type A n'est pas un sous-type de B. Le programmeur s'est forcément trompé et il n'y a aucune raison de compiler ce programme.

    Si caster un objet ne change pas cet objet, alors à quoi ça sert ? Eh bien, puisque c'est forcément un downcasting, ça sert à pouvoir accéder à des champs et méthodes du sous-type, s'il se trouve que l'objet est de ce sous type.
    Exemple : nous avons une List<String> qui contenait des millions d'objets. Nous venons d'en enlever beaucoup, et elle ne contient plus qu'une centaine d'objets. La partie qui fait ce nettoyage se fiche de quel genre de List elle nettoie. Elle les nettoie toutes, peu importe. Mais, s'il se trouve que cette List est une ArrayList, on aimerait bien appeler trimToSize() dessus pour gagner de la place. Or trimToSize() est une méthode spécifique à ArrayList puisqu'elle n'a aucun sens pour d'autres genres de List.

    Donc on fera quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    List<String> maList = recupererList();
    // nettoyer ...
    // et ensuite
    if(maList instanceof ArrayList) {
      ArrayList<String> monArrayList = (ArrayList<String>)maList;
      monArrayList.trimToSize();
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par vertebre Voir le message
    Je voudrai savoir quelle est la conséquence de caster :
    je vais en profiter un peu pour jouer au vieux ch*** pénible
    quand j'étais plus jeune, la fille d'un copain français qui vivait en Australie a dit un jour: "Papa, j'ai broké ma zipper!" (elle avait 4 ans)
    Au train où vont les choses on va vers ce Franglish (yaka voir le nombre de titres de film non traduits!) .... Maintenant je reconnais que l'on n'a pas pris l'habitude de dire les choses techniques de la programmation en bon français (et donc tout le monde comprend "caster"). Il y a des termes que l'on a de la peine à traduite ("pattern" par ex.) mais vraiment rien pour "cast"?
    (pour la petite histoire: autre exemple vécu -chez feu-SUN- : "Il faut faire remonter le feedback du field au corporate!" ... curieusement les employés parfaitement bilingues de cette boîte ne mélangeaient jamais les langues)

    @vertebre: pardon pour la remarque, ne pas la prendre mal à titre personnel ... c'est juste une remarque générale sur le forum
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  4. #4
    Membre régulier Avatar de vertebre
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Points : 111
    Points
    111
    Par défaut
    merci c'est très utile et bien expliqué

  5. #5
    Membre actif Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Points : 209
    Points
    209
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    Il y a des termes que l'on a de la peine à traduite ("pattern" par ex.) mais vraiment rien pour "cast"?
    Bonjour,
    il me semble que le terme français , plutôt inusité, pour caster c'est transtyper : https://fr.wiktionary.org/wiki/transtyper. Transtyper consiste donc à réaliser une opération de transtypage. Pour l'upcast et le downcast par contre... Du transypage ascendant/descendant peut-être ?

    (et oui, je réponds 2 ans et demi après).

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

Discussions similaires

  1. [WD19] Poo, Héritage, Upcast, Downcast et DataBinding
    Par Donpi dans le forum WinDev
    Réponses: 6
    Dernier message: 03/07/2015, 15h51
  2. Downcasting
    Par Mookie dans le forum C++
    Réponses: 18
    Dernier message: 12/01/2005, 23h21

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