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

Ruby Discussion :

Appel de méthodes dans les classes filles


Sujet :

Ruby

  1. #1
    Nouveau membre du Club
    Profil pro
    Développeur kobo
    Inscrit en
    Février 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur kobo

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Points : 28
    Points
    28
    Par défaut Appel de méthodes dans les classes filles
    Bonjour,
    Je viens du monde de Java, récemment je me suis mis au Ruby et lors d'un exercice je tombe là-dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Personne
    ...
      def attaque(personne)
        # degats est définie dans les classes filles
        degats_finaux = degats
        personne.subit_attaque(degats_finaux);
        puts "#{personne.nom} a subi #{degats_finaux} dégats"    
      end
    ...
    end
    degats est une méthode qui est définie dans des classes filles (ici joueur et ennemi héritent de la classePersonne), lorsque l'on appelle la methode attaque de la classe Personne cela fonctionne, la méthode degats est appelée, est-ce qu'elle méthode est définie implicitement dans la classe mère ?

    Merci bien.

  2. #2
    Membre actif
    Profil pro
    Problem Solver
    Inscrit en
    Juin 2013
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Problem Solver

    Informations forums :
    Inscription : Juin 2013
    Messages : 138
    Points : 231
    Points
    231
    Par défaut
    Bonjour,
    j'espère que tu apprécies le monde Ruby
    Il n'y a pas vraiment de méthode "de classe fille" ici, mais une méthode "de la bonne classe" ou "du bon objet".

    Je n'ai pas trop ton contexte et j'hésite entre trois réponses :
    - soit tu n'as pas de classe fille, et tu as en fait une classe Personne et deux instances de cette classe, les objets joueur et ennemi

    - soit tu as une classe mère Personne, une classe fille Joueur et une autre classe Ennemi et des instances de chaque,
    auquel cas j'ai deux choses à dire :

    * la modélisation est bizarre et effectivement il vaut mieux une méthode degats dans Personne et pas dans Ennemi ni Joueur.
    (par contre tu peux avoir une classe Sprite qui n'a pas de dégâts,
    un Mur < Sprite qui n'en a pas non plus, et Personne < Sprite qui a degats)

    * à aucun moment tu ne veux appeler degats sur Personne (qui ne sait pas compter les degats)
    mais sur un Joueur ou un Ennemi, qui eux savent le gérer.

    C'est un peu comme une méthode virtuelle en C++ ou une interface en Java (ce sont des concepts un peu vieux pour moi pardon si je me trompe) :
    toutes les classes filles devraient y penser mais pas forcément la classe mère (elle sait qu'il faut faire mais pas comment).
    Mais jamais aucun code ne fera personne.degats, il y aura uniquement ennemi.degats et joueur.degats, donc "pas de problème".

    Bon courage pour la suite !

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/09/2013, 21h38
  2. Appel de méthode protected dans une classe fille
    Par Le Mérovingien dans le forum C++
    Réponses: 11
    Dernier message: 05/06/2012, 16h04
  3. Appeler une méthode dans la classe main
    Par Palsajicoco dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 04/05/2011, 11h40
  4. Appel d'une méthode sur une classe fille
    Par Tipha dans le forum C++
    Réponses: 5
    Dernier message: 29/05/2008, 14h23
  5. Réponses: 1
    Dernier message: 02/05/2008, 20h34

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