来进入这一系列课程的最后一 Part 啦!
\(P1\) 我们介绍了 \(ML\),一种 static typing 的 functional language
\(P2\) 我们介绍了 \(Racket\),一种 dynamic typing 的 functional language
回顾一下 函数式编程 的特点
这一 Part 我们介绍 \(Ruby\) ,它是一种 dynamic typing 的 object-oriented language
Roby features most interesting for a PL course
- \(Ruby\) 是一个 纯粹的面向对象语言 (pure object-oriented language),这意味着,所有的值都是对象 (all values in the language are objects)
- \(Ruby\) 是基于类 (class-based) 的语言,也就是说,每一个对象都是类的实例 (Every object is an instance of class),一个对象的类的定义决定了它有哪些方法 (method)
The rules of class-based OOP
基于类的面向对象语言有如下特点:
- 所有 值 (value, the result of evaluating expressions) 都是对象的引用 (reference to objects)
- 代码与对象交互的方式是 调用其的方法 (calling its method)
- 每个对象都有其私有域 (private state)
- 每个对象都是类的实例 (instance of a class)
- 对象的类决定其行为 (behavior)
对大多数 OOP 语言,这些规则是成立的,但也有例外
比如,在 \(Java\) 与 \(C#\) 中,有些值 (例如数) 并不是对象,并且存在方法使对象的私有域暴露
Objects, classes, methods, variables, etc.
- 定义类
class Foo
def m1
...
end
def m2 (x, y)
...
end
...
def mn z
...
end
end
以上代码定义了一个具有方法 m1...mn 的类 Foo
类名必须以大写字母开头,类中含有方法的定义
方法的最后一个表达默认为其返回值,也可以使用 return 关键字 (将 return 放在末尾是 bad style,因为默认最后一个表达就是返回值)
方法的参数可以有 default,同样只能集中在左侧
