你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

Coursera Programming Languages, Part C 华盛顿大学 Week 1

2022/9/15 22:40:18

来进入这一系列课程的最后一 Part 啦!
\(P1\) 我们介绍了 \(ML\),一种 static typing 的 functional language
\(P2\) 我们介绍了 \(Racket\),一种 dynamic typing 的 functional language
回顾一下 函数式编程 的特点
这一 Part 我们介绍 \(Ruby\) ,它是一种 dynamic typingobject-oriented language


Roby features most interesting for a PL course

  1. \(Ruby\) 是一个 纯粹的面向对象语言 (pure object-oriented language),这意味着,所有的值都是对象 (all values in the language are objects)
  2. \(Ruby\) 是基于类 (class-based) 的语言,也就是说,每一个对象都是类的实例 (Every object is an instance of class),一个对象的类的定义决定了它有哪些方法 (method)

The rules of class-based OOP

基于类的面向对象语言有如下特点:

  1. 所有 值 (value, the result of evaluating expressions) 都是对象的引用 (reference to objects)
  2. 代码与对象交互的方式是 调用其的方法 (calling its method)
  3. 每个对象都有其私有域 (private state)
  4. 每个对象都是类的实例 (instance of a class)
  5. 对象的类决定其行为 (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,同样只能集中在左侧