一、 类方法
1. 定义和使用:定义类方法时,要在方法名前增加类名。通过定义类方法,允许直接通过类名来调用该方法。由于Ruby中的类方法实际上是该类实例的特殊方法,因此该类的实例无法调用类方法,类方法也无法访问该类的实例变量。结论:Ruby的类方法实际上就是Class实例的实例方法。如果我们使用extend将一个模块导入某个类,那么该模块中实例方法将会变成该类的类方法。
2. 单例模式:使用某种手段保证某个类最多只有一个实例。
3. 定义method_missing方法:一旦重写了某类里的method_missing方法,就允许当被调用的方法找不到时,系统自动改为执行method_missing方法。
二、 成员变量和属性
1. 定义实例变量:以“@”符号开头的变量名。顶层和顶层方法里定义的实例变量对于整个程序有效,在顶层和顶层方法里定义的实例变量属于顶层Object实例,因此不可以在其他类中使用。在类范围里定义的实例变量并不是该类所创建实例的实例变量,而是Class类所创建的实例的实例变量。相反,在类的方法里定义的实例变量才是该类所创建实例的实例变量。
2. 定义类变量:以“@@”符号开头。类变量与实例变量最大的差别是类变量并不是属于单个实例的,而是属于某个类的。注意:同一个类的所有实例所引用的类变量指向同一块内存区。但与定义顶层实例变量不同的是,顶层定义的类变量既可以在其他类中访问,也可以在其他类的方法中访问。对于类变量而言,不管是在类中定义,还是在类的方法中定义,他们都是属于该类的。
3. 定义属性:Ruby类里的实例变量和类变量都是通过private修饰的。所谓属性就是用于暴露实例变量或类变量的特殊方法。
4. 存取器:Ruby提供了如下几个方法可以之间将某个实例变量暴露成属性。
attr:用于讲一个实例变量设置成只读属性。
attr_reader: 用于讲一个实例变量设置成只读属性。
attr_writer: 用于讲一个实例变量设置成只写属性。
attr_accessor:用于讲一个实例变量设置成读写属性。
三、 弱类型语言的多态
1. 为什么Ruby没有接口:所有变量的类型是动态变化的。
2. 访问控制:在类定义中所有方法默认都是public访问类型,除了initialize方法和initialize_copy方法默认是private访问类型。和其他语言的不同点:Ruby动态确定访问控制类型,即同一个方法可以在不同时候有不同的访问控制类型。
四、 模块
1. 模块和类很相似,只是模块不能创建实例。Ruby设计类的主要目的是提供基本的面向对象概念,用于创建实例,提供基本继承等功能。Ruby设计模块的主要目的是提供基本的命名空间功能,最重要的是实现多重继承功能。
2. 命名空间。
3. 混入:Ruby提供了混入功能,通过使用混入功能,可以无须使用显示多重继承而实现多重继承的功能。让一个类继承父类采用“符号,将一个模块混入一个类则采用include关键字。
4. 导入其他文件:两个指令分别是load和require。load加载的Ruby文件必须增加rb后缀,而require可以省略后缀。