全部博文(2065)
分类:
2010-10-18 21:42:25
第三章节 类、对象、变量
示例
class Song #跟python定义一样
def initialize(name,artist,duration) #与__init__一样构造方法
@name = name #self.name = name 实例变量以@开头
@artist = artist
@duration = duration
end
end
song = Song.new("Z","e","desc") #初始化 myobj = Song(“”,””,””)
类继承示例
class KaraoSong < Song
def initialize(name,artist,duration,lyrice)
super(name,artist,duration)
@lyrics = lyrice
end
end
实现类里面的属性操作
class KaraoSong < Song
def initialize(name,artist,duration,lyrice)
super(name,artist,duration)
@lyrics = lyrice
end
def name
@name
end
def artist
@artist
end
def duration
@duration
end
end
调用示例:
song = KaraoSong.new("Z","e","desc","e")
puts song.name #实现类似于GET与SET操作功能
另外实现类似于Delphi里面的属性功能
class Song
def initialize(name,artist,duration)
@name = name
@artist = artist
@duration = duration
end
attr_reader :name,:artist,:duration
end
song = Song.new("Z","e","desc")
puts song.name
PS:python里面是如何实现属性的快速访问的?查一下
实现类似set方法
class Song
def initialize(name,artist,duration)
@name = name
@artist = artist
@duration = duration
end
attr_writer :duration #表示set操作
attr_reader :duration #表示有get操作
end
song = Song.new("Z","e","desc")
song.duration = 257
puts song.duration
内部状态保存在实例变量中,通过方法暴露出来的外部状态就属性!类可以执行的其他动作我们称为方法。通常我们是把一个对象的外部状态称之为属性。
@property 这就是表示属性
变量关联到类的某个特定的实例及操作这些变量的方法那这些就是所谓的实例变量和实例方法了。有些时候类本身需要自己的状态即与类本身是相关联起来的这就是类变量的概念了!
类变量是与所有对象所共享的。即它不是实例变量。类变量由两个@开头。如@@count。类变量在使用之前必须要始化。通常所谓的初始化其实就是在类定义中简单赋值
class Song
@@plays = 0 #不放在构造函数中的!
def initialize(name,artist,duration)
@name = name #self.name
@artist = artist
@duration = duration
end
attr_writer :duration
attr_reader :duration
end
说明:类变量对其类与实例都是私有的。即只能在一个类的内部去使用了!
类方法:函数构造
Ruby的静态方法如下
class Song
def initialize(name,artist,duration)
@name = name
@artist = artist
@duration = duration
end
attr_writer :duration
attr_reader :duration
end
class SongList
MAX_TIME = 5*60
def SongList.is_too_long(song) #静态方法表示法
return song.duration > MAX_TIME
end
end
song = Song.new("Z","e",852)
puts SongList.is_too_long(song)
类的权限控制
当我们在设计类的接口时,要考虑类想要向外部世界暴露何种程序的访问。如果你的类允许过度的访问就会增加应用中的耦合的风险----------类的用户可能会依赖于类实现的一些细节而非逻辑的接口。
方法1.
Private
Def aaaa()
End
Def bbbb()
End
方法2
Public :method1,:method4
其中方法二跟python一样的。非常类似