Disons que j'ai deux classes. Une classe, "parent", a beaucoup d'une autre classe "enfant". Ce n'est pas l'héritage, je ne veux pas que les méthodes parentes agissent sur les objets enfants. Ce que je veux, c'est que l'objet enfant puisse référencer l'objet parent, en obtenir des variables (child.parent.var) et appeler des méthodes parentes qui modifient le parent (child.parent.update
). Je voudrais qu'un objet (qui pourrait être considéré comme un enfant-mais-pas-enfant-parce-que-ce-n'est-pas-héritage) soit passé une référence à un autre objet quand il est initialisé. Je compare cela à une relation parent-enfant dans une base de données où nous stockons des informations sur le parent afin que nous ne devions pas le dupliquer sur chaque enfant."Parent", "Enfant" Classes en rubis (pas d'héritage)
Exemple:
class Parent
attr_accessor :var
def initialize(num)
@var = num
end
def increase
@var += 1
end
end
class Child
attr_accessor :var, :parent
def initialize(parent, num)
@parent = parent
@var = num
end
def sum
@parent.increase
@parent.var + var
end
end
parent1 = Parent.new(1)
child1 = Child.new(parent1, 2)
child2 = Child.new(parent1, 3)
child1.parent.increase # update the parent variable
child2.parent.var # get the parent variable
Le code ci-dessus fonctionne, mais est-il une meilleure (plus concis, plus ou rubis Esq) façon d'y parvenir?
Merci beaucoup pour votre aide/pensées.
Bienvenue sur Stack Overflow. C'est une très bonne première question. À l'avenir, essayez de décrire un peu plus les détails de votre problème. "Cela semble étrange" est une description assez vague. Cela étant dit, alors que Stack Overflow tend vers des questions de code dur ces derniers temps, les questions de conception et de structure de code sont toujours abordées ici. Assurez-vous simplement de décrire votre problème réel. Souvent, http://softwareengineering.stackexchange.com/ ou http://codereview.stackexchange.com/ sont d'excellents endroits pour ce genre de questions aussi. –
@HolgerJuste lors de la référence d'autres sites, il est souvent utile de souligner que [cross-posting est désapprouvé] (http://meta.stackexchange.com/tags/cross-posting/info) – gnat
@HolgerJe vous remercie de votre sagesse mon ami! Encore un débutant donc je vais prendre votre avis sur la question suivante :-) –