Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1105 connectés 

  FORUM HardWare.fr
  Programmation
  Ruby/Rails

  Problème d'héritage multiple

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème d'héritage multiple

n°1608048
esox_ch
Posté le 04-09-2007 à 13:37:59  profilanswer
 

Bonjour,
 
J'ai une classe Element, qui serait une classe abstraite en java.
Elle contient des méthodes génériques (ajout, suppression, édition ,... ) et a des classes filles (Utilisateur par exemple).
Je voudrais que toutes les classes filles héritent de ActiveRecord::base pour pouvoir bénéficier des mécanismes de rails, mais j'aimerais en même temps pouvoir utiliser les méthodes de la classe mère de manière générique. À ce que j'ai compris, Element ne peut pas hériter d' ActiveRecord::base car il n'y a pas de table elements. J'ai donc pensé utiliser le "mixin" de ruby en créant un module Element (bien que ça me semble pas top car on perd un peu la notion d'héritage).
Problème :
Comment faire pour utiliser le polymorphisme (par exemple Element.find(:all) pour récupérer tous les elements de la table) alors que Element ne derive pas d'active record?
 
Merci d'avance


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
mood
Publicité
Posté le 04-09-2007 à 13:37:59  profilanswer
 

n°1609209
masklinn
í dag viðrar vel til loftárása
Posté le 07-09-2007 à 10:12:22  profilanswer
 

J'ai rien compris.

 

En gros, tu as un mixin Element, tu as des classes que tu vas faire hériter d'ActiveRecord::Base et dans lesquelles tu vas mixer Element, et tu voudrais savoir comment -- dans les méthodes définies dans Element, et qui seront donc après mixage accessibles dans tes classes -- utiliser les méthodes d'AR::Base genre #find?

 

Ben tu le fais, tout simplement. Je rappelle que Ruby c'est du late binding toussa, donc la résolution des noms et des méthodes se fait au moment de leur appel et pas avant:

 
Code :
  1. #element.rb
  2. module Element
  3.  def mixed_in
  4.    self.foo
  5.  end
  6. end


Code :
  1. #test.rb
  2. require 'element'
  3.  
  4. class Foo
  5.  def foo
  6.    "This will appear in Baz"
  7.  end
  8. end
  9.  
  10. class Bar < Foo
  11.  def mixed_in
  12.    "no mixin in Bar"
  13.  end
  14. end
  15.  
  16. class Baz < Foo
  17.  include Element
  18. end
  19.  
  20. class Buzz < Foo
  21.  include Element
  22.  def foo
  23.    "redefined foo in Buzz"
  24.  end
  25. end
  26.  
  27. puts "Bar: ", Bar.new.mixed_in
  28. puts "Baz: ", Baz.new.mixed_in
  29. puts "Buzz: ", Buzz.new.mixed_in


$ ruby test.rb
Bar:
no mixin in Bar
Baz:
This will appear in Baz
Buzz:
redefined foo in Buzz
$


La classe Foo correspond à ActiveRecord::Base (j'aurais pu la mettre dans un autre fichier, mais ça n'aurait rien changé), le module Element correspond à ton mixin, et les classes Bar, Baz et Buzz correspondent aux classes que tu vas dériver de Foo.

 

edit: et accessoirement, Element ne correspondrait absolument pas à une classe abstraite java, il n'y a pas moyen d'exprimer facilement un héritage de comportement en java, tu serais obligé de créer une interface soir pour Element soit pour AR:Base et tu aurais à réimplémenter tout le comportement de l'un des deux.


Message édité par masklinn le 07-09-2007 à 10:16:07

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1609279
esox_ch
Posté le 07-09-2007 à 13:33:58  profilanswer
 

Ok merci beaucoup :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ruby/Rails

  Problème d'héritage multiple

 

Sujets relatifs
Problème d'import de dllPROBLEME STREAM PHP
[PHP] Form a choix d adresse multiple - problemepreg_match et retour chariot ? (problème de base inside)
Probleme excel/vbProblème d'encodage
[Résolu] Problème d'addition complétement imbécile!probleme forum php niceboard
Plus de sujets relatifs à : Problème d'héritage multiple


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR