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 Perl Discussion :

Héritage et casting


Sujet :

Langage Perl

  1. #1
    Membre habitué

    Homme Profil pro
    Statisticien
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Points : 134
    Points
    134
    Par défaut Héritage et casting
    Bonjour,

    J'aimerais savoir comment on peut "caster" un objet.
    C'est à dire que si j'ai dans le programme qui suit un point, je puisse le transformer en Pixel, sans devoir passer (ligne 17) les attributs 1 à 1.

    Les 4 dernières lignes ne fonctionnant évidemment pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/usr/bin/env perl6
     
    use v6;
     
    class Point2D {
        has $.x;
        has $.y;
    }
     
    class Pixel is Point2D {
        has $.c;
    }
     
    my Point2D $p2 .= new(x => 1, y => 2);
    dd $p2;
     
    my Pixel $pi .= new(x => $p2.x, y => $p2.y, c => 'red');
    dd $pi;
     
    #my Pixel $pi2 =  $p2;
    #my Pixel $pi2 =  $p2.clone();
    #my Pixel $pi2 =  $p2.Pixel;
    #my Pixel $pi2 =  Pixel.new($p2);

  2. #2
    Membre habitué
    Homme Profil pro
    Master Data Manager
    Inscrit en
    Février 2017
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Master Data Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 113
    Points : 148
    Points
    148
    Par défaut
    Bonjour.

    Je ne suis pas un expert de perl6 mais j'imagine qu'avec une méthode on arrive à peu près à ça :

    Code perl6 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #!/usr/bin/env perl6
     
    use v6;
     
    class Point2D {
        has $.x;
        has $.y;
    }
     
    class Pixel is Point2D {
        has $.c;
        method from_point( Point2D $p, Str $c ) {
            Pixel.new(
                x => $p.x,
                y => $p.y,
                c => $c,
            )
        }
    }
     
    my $p2 = Point2D.new(x => 1, y => 2);
    dd $p2;
     
    my $pi = Pixel.from_point($p2, 'red');
    dd $pi;

    Sinon j'ignore s’il y a une formulation toute faite dans perl6 pour faire ça

  3. #3
    Membre habitué

    Homme Profil pro
    Statisticien
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Points : 134
    Points
    134
    Par défaut
    Oui, c'est sûr que c'est possible.
    Mais on passe quand même les attributs un à un. Donc si je rajoute un attribut à la classe Point2D, je dois aussi rajouter une ligne dans la méthode from_point.
    Bon, en pratique mon objet a une dizaine d'attribut, donc si je n'ai pas d'autres solutions, je le ferai, mais bon, je me dit qu'il doit exister quelque chose d'autre...

  4. #4
    Membre habitué
    Homme Profil pro
    Master Data Manager
    Inscrit en
    Février 2017
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Master Data Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2017
    Messages : 113
    Points : 148
    Points
    148
    Par défaut
    Bonjour.

    Alors peut être partir sur une composition plutôt qu'un héritage ?:

    Code perl6 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #!/usr/bin/env perl6
     
    use v6;
     
    class Point2D {
        has $.x;
        has $.y;
    }
     
    class Pixel {
        has Point2D $.coord;
        has $.c;
    }
     
    my $p2 = Point2D.new(x => 1, y => 2);
    dd $p2;
     
    my $pi = Pixel.new(coord => $p2, c => 'red');
    dd $pi;
     
    say "le pixel est (x=", $pi.coord.x, " y=", $pi.coord.y, ") avec la couleur ", $pi.c;

  5. #5
    Membre habitué

    Homme Profil pro
    Statisticien
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Points : 134
    Points
    134
    Par défaut
    Oui, si ce n'est que là, je vais devoir mettre des .coord un peu partout...
    A priori, plutôt la première proposition...

Discussions similaires

  1. [POO] héritage et cast
    Par mikekiche dans le forum Langage
    Réponses: 8
    Dernier message: 04/08/2010, 11h11
  2. Héritage, Généricité, Cast?!
    Par aroussi_sanaa dans le forum Général Java
    Réponses: 1
    Dernier message: 04/05/2009, 12h10
  3. Héritage et casting en java
    Par menzlitsh dans le forum Langage
    Réponses: 3
    Dernier message: 04/07/2007, 13h23
  4. héritage et casting
    Par dinver dans le forum Langage
    Réponses: 3
    Dernier message: 05/12/2005, 00h23
  5. [DP][héritage]sous-casting dynamique
    Par Le prophete dans le forum Général Java
    Réponses: 4
    Dernier message: 20/08/2004, 12h56

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