ruby系列教材(12):Virtual Attributes

来源:百度文库 编辑:神马文学网 时间:2024/07/08 10:39:38
为了阐述 “Virtual Attributes” 这个概念我先总结一下 accessor methods,accessor methods(也被叫做attribute methods)有2种:
1)读取 instance variables
2)写入 instance variables
注意accessor methods操作的是instance varibles,它处理的是一个state的问题,下面引出一个问题,先看代码:
class Song
defduration_in_minutes
@duration/60.0                                           # force floating point
end
def duration_in_minutes=(new_duration)
@duration = (new_duration*60).to_i          # to_i 表示转化成整数型,至于详细对应于转换成什么类型的object,这里不详细说明
end
end
song = Song.new("Bicylops", "Fleck", 260)
song.duration_in_minutes→4.33333333333333
song.duration_in_minutes = 4.2
song.duration→252
关键问题出现在使用上,我们使用duration_in_minutes的时候,使得我们认为,的确是有 duration_in_minutes 这个instance variables,就像我们前面说过的,这时我们把duration_in_minutes这样的不存在的variable 叫做 virtual instance variables。这是一个巨大的胜利,因为,2种不同的实现,使用同种形式表现,而这样的表现,建立在用户对class的构造不了解的情况下,假如使用的是不同的表现形式,用户将被迫使去了解class的结构,结果使得内部信息被刺穿,增加了复杂度,这种方式在程序设计里面被叫做:Uniform Access Principle,即,不同的实现,统一的外表,外表用于accesses