Problème d'héritage multiple - Ruby/Rails - Programmation
Marsh Posté le 07-09-2007 à 10:12:22
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 :
|
Code :
|
$ ruby test.rb |
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.
Marsh Posté le 04-09-2007 à 13:37:59
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