这是我图表的链接。
他们是3个班级。(任命,每月任命,和OneTimeAppointment)。我迷失在这一点上。我曾多次重复我的讲座,但我无法超越这一点。这只是一个练习题。任何一步一步的帮助都会非常有帮助。
这是我到目前为止的代码。
class Appointment
attr_accessor :location, :purpose, :hour, :min
def initialize the_location, the_purpose, the_hour, the_min
@location = the_location
@purpose = the_purpose
@hour = the_hour
@min = the_min
end
def to_s
end
end
class MonthlyAppointment
attr_accessor :location, :purpose, :day, :hour, :min
def initialize the_location, the_purpose, the_day, the_hour, the_min
@location = the_location
@purpose = the_purpose
@hour = the_hour
@min = the_min
end
def occurs_on?(the_year, the_month, the_day)
return @day == the_day
end
end
class OneTimeAppointment
attr_accessor :year, :month, :day
def initialize the_year, the_month, the_day
@year = the_year
@month = the_month
@day = the_day
end
def occurs_on?(the_year, the_month, the_day)
return @year == the_year &&
@month == the_month &&
@day == the_day
end
end
编辑后的帖子:我想这样实现它......
class Item
def initialize(item_name, quantity)
@item_name = item_name
@quantity = quantity
end
def quantity=(new_quantity)
@quantity = new_quantity
end
def quantity
@quantity
end
end
答案 0 :(得分:1)
让我们以每月约会为例。 (我将为你留下另一个,所以我没有做你所有的功课:))
这里的顶级课程是约会,其中包含常用的字段和方法 到其他两个班级。所以我们可以从那里开始。
让我们定义班级
class Appointment
end
它需要一个带有几个字段的初始化程序
class Appointment
def initialize(the_location, the_purpose, the_hour, the_min)
end
end
现在,由于我们有一个我们已经定义了初始化程序的类,因此ruby会免费为我们提供新方法。
这个类中有几个字段,位置,目的,小时,分钟。我们可以将初始化程序中的那些保存到 实例变量。
class Appointment
def initialize(the_location, the_purpose, the_hour, the_min)
@location = the_location
@purpose = the_purpose
@hour = the_hour
@min = the_min
end
end
有。我们现在拥有所有字段,新方法和初始化方法。接下来我们需要location()。 这是一个getter,一种获取该字段值的方法。
class Appointment
def initialize(the_location, the_purpose, the_hour, the_min)
@location = the_location
@purpose = the_purpose
@hour = the_hour
@min = the_min
end
def location
return @location
end
end
我们走了。但事实上,因为写这样的吸气剂是一项常见的任务(我们必须做5次才能完成 这个类),ruby有一个更短的方法来做到这一点。如果我们说attr_reader:location,ruby知道定义一个方法 就像上面那个。所以使用它,我们的新课程是这样的:
class Appointment
attr_reader :location
def initialize(the_location, the_purpose, the_hour, the_min)
@location = the_location
@purpose = the_purpose
@hour = the_hour
@min = the_min
end
end
我们也可以为其他四个领域做同样的事情。
class Appointment
attr_reader :location, :purpose, :hour, :min
def initialize(the_location, the_purpose, the_hour, the_min)
@location = the_location
@purpose = the_purpose
@hour = the_hour
@min = the_min
end
end
好的,现在我们拥有除了to_s()之外的所有东西。 to_s是一个返回约会的字符串版本的方法。 基本上是一个粗略的人类可读描述。让我们来定义
class Appointment
attr_reader :location, :purpose, :hour, :min
def initialize(the_location, the_purpose, the_hour, the_min)
@location = the_location
@purpose = the_purpose
@hour = the_hour
@min = the_min
end
def to_s
"<Appointment #{@hour}:#{@min} at #{@location} for #{@purpose}>"
end
end
这将给我们一个类似于&#34;在办公室预约2:34的描述,用于进度更新&#34;。 这对我来说很好看!
现在我们已经完成了Appointment类,让我们来做MonthlyAppointment类。 它显然应该是约会的子类,即使你的图表没有显示出来。
class MonthlyAppointment < Appointment
end
到目前为止一切顺利。它有一个初始化器。让我们来定义
class MonthlyAppointment < Appointment
def initialize(the_location, the_purpose, the_day, the_hour, the_min)
end
end
在那里,它符合UML为初始化接口指定的内容。 现在,我们看到有一个名为&#34; @ day&#34;的字段,因为初始化程序有一天的参数, 我们可以保存初始化程序的值。我们还想保存超类的一切 我也很关心,所以我们打电话给super来让父类的初始化程序也运行起来。
class MonthlyAppointment < Appointment
def initialize(the_location, the_purpose, the_day, the_hour, the_min)
super(the_location, the_purpose, the_hour, the_min)
@day = the_day
end
end
我们需要一个白天吸气剂
class MonthlyAppointment < Appointment
attr_reader :day
def initialize(the_location, the_purpose, the_day, the_hour, the_min)
super(the_location, the_purpose, the_hour, the_min)
@day = the_day
end
end
最后,我们需要定义happen_on?。 occurs_on?需要一年零一天,并将返回真或假。 带问号的方法应始终返回true或false。 现在,每月都会进行一次预约,所以我们现在可以忽略它。 它也发生在每个月,所以我们可以忽略它。但它只发生在特定的一天 每个月,让我们比较一下被问及我们保存的那一天。 如果它们匹配,那么我们应该返回true。如果您每月预约15日, 你只需要知道它是否是第15个或者不知道它是否发生在约会。
class MonthlyAppointment < Appointment
attr_reader :day
def initialize(the_location, the_purpose, the_day, the_hour, the_min)
super(the_location, the_purpose, the_hour, the_min)
@day = the_day
end
def occurs_on?(the_year, the_mon, the_day)
if @day == the_day
return true
else
return false
end
end
end
瞧!那应该是你的MonthlyAppointment课程。你能尝试实现OneTimeAppointment吗? 如果你在这里发布,我会给出指示。