描述ruby中的类关系

时间:2010-02-09 12:45:59

标签: ruby oop class object

我从未做过任何直接的ruby编码 - 只能使用Rails框架。

我不确定如何描述类之间的关系,而不是继承关系。

例如,School对象可能有许多Student对象。 我希望能够拨打电话,例如“myschool.student [2] .first_name”和“mystudent.school.address”

可能是因为OOP与关系数据库的元素混淆,所以如果我离开的话,很抱歉。

2 个答案:

答案 0 :(得分:9)

我不是100%确定这里的问题是什么......

对于第一个示例myschool.students[2].first_name,您的School类需要students字段的访问者,该字段需要是一个数组(或其他支持下标的内容),例如

class School
  attr_reader :students

  def initialize()
    @students = []
  end
end

以上允许myschool.students[2]返回一些内容。假设students包含Student类的实例,该类可能是这样的:

class Student
  attr_reader :first_name, :last_name

  def initialize(first, last)
    @first_name = first
    @last_name = last
  end
end

现在您的示例myschool.students[2].first_name应该有效。

对于第二个示例mystudent.school.address,您需要school类中的Student字段和address类中的School字段。

棘手的一点是SchoolStudent实例相互指向,因此您需要在某些时候设置这些引用。这将是一个简单的方法:

class School
  def add_student(student)
    @students << student
    student.school = self
  end
end

class Student
  attr_accessor :school
end

你仍然需要添加address字段以及其他一些我错过的内容,但这应该很容易。

答案 1 :(得分:1)

通常,在大多数OO语言中,默认情况下,类成员不会暴露给外部世界。即使它(如在某些语言中),直接访问类成员被认为是不好的做法。

将成员添加到班级时(例如,将学生班级添加到学校),您需要添加访问者函数以向外界提供对这些成员的访问权限。

如果您想了解更多信息(通过googling找到: ruby​​ accessors ),这里有一些有用的资源:

http://juixe.com/techknow/index.php/2007/01/22/ruby-class-tutorial/

http://www.rubyist.net/~slagell/ruby/accessors.html