一、      面向对象概念

面向对象程序设计语言通常应该具有如下三个特征:封装、继承、多态。与java等不同的是,Ruby可以在类定义表达式中写入任何表达式。

      类:类是定义某些实例应该具有某些共性的概念。

      Ruby中,类也是一个对象,它是Class类的实例。

1.    动态追加类定义:因为Ruby语言是一门动态语言,因此,它允许随时更改类定义。如果我们在定义一个类时,该类已经存在,则此时的定义是对先前类定义的追加,而不是重新定义。

2.    内部类定义:把一个类定义放在其他类定义中,形成类的嵌套。

3.    特殊类定义:Ruby还允许为某个特定对象追加方法和变量。追加的方法和变量并不应用于该对象所属的类,但该对象已经具有了追加的方法。

4.    构造器:当我们调用new方法来创建某个类的实例时,系统会调用该类定义里的initialize方法。Ruby语言的一个类定义中不能包含2个同名的方法。

二、      类的继承

1.    继承(Extends):语法,只需在原有类定义的后面加‘’。如果我们显示指定两个类不属于同一个父类,则前后两次定义类将会引起冲突。Ruby不支持多重继承!!!!

2.    调用父类构造器:我们使用super调用。语法:super(值列表)

3.    覆盖父类的方法:子类从父类那里继承来的方法是先定义的方法,而后面重新定义的方法会覆盖从父类继承来的方法。Ruby不支持重载。

4.    深入方法:我们可以在最后一个参数前面增加(*)或(&)。若最后一个参数的前面有(*),则方法调用时所有剩下的参数值被当作成数组传递给该参数。若最后一个参数前面有(&),则表明传递给该参数的块是一个过程对象(Proc)。

5.    使用Hash对象作为参数。。。通过使用Hash对象作为参数,就可以实现可变长度参数的功能。

6.    可变长度形参的定义方法:定义形参个数不确定的方法。Ruby把长度变化的多个形参当成数组处理。如果我们希望某个形参是长度可变的参数,只需在该形参前增加(*)号即可。

7.    使用数组参数:我们可以在调用一个方法时把一个数组当成多个参数值传入。此时,需要在该数组前增加一个(*)。

三、      在方法中使用块

1.    使用yield调用块:在软件开发领域,有一条重要的DRY规则:不要重复。在调用yield时,还可以将方法里的变量传入代码块。

2.    Proc参数:如果我们在定义方法时,在最后一个形参前增加一个“&”符号,则Ruby把它作为一个过程对象(Proc类的实例)来处理。当Ruby把一个带&的参数当成Proc对象处理时,我们就可以在该方法中把该Proc对象赋给其他变量,或者直接返回给Proc对象。还要一个简单的生成Proc对象的方式,就是调用proc方法。

3.    动态执行代码:eval函数用来动态执行Ruby代码。

12-25 21:42