1.1.1 Scala是一种面向对象的语言

Java、C#和Ruby等编程语言的盛行,使面向对象编程(OOP)得到了大多数程序员的广泛接受。 面向对象编程,正如它名字中描述的那样,是一种使用对象的编程范式。 面向对象可以让你使用类和对象来结构化应用程序。 同时,它也是一种项目架构的方法,能够让你从很小的构建单元开始,一步一步创建出比较大的应用程序。 市面上有很多面向对象语言,但是只有其中很少一部分可以被称为纯面向对象语言。

什么样的语言是纯面向对象语言呢?对这个问题回答其实是仁者见仁,智者见智的,但是大多数人都同意以下几个特点:

  • 封装/信息隐藏
  • 继承
  • 多态/动态绑定
  • 所有预定义类型都是对象
  • 所有的操作都表现为向对象发送消息
  • 所有自定义类型都是对象

Scala使用的是一种类似于Smalltalk(由Alan Kay于1980左右创建的一种纯面向对象语言)的纯面向对象模型,支持以上所有特性。 它的每个值都是对象,每个操作都是一个消息发送。比如下面一个简单表达式:

  1. 1 + 2

在Scala中,这个表达式被Scala编译器解释为1.+(2)。 这意味着你向一个整数对象(例子中的1)传递了一个参数2,调用了它的+操作。 操作符和普通标识符在Scala中是被同等看待的。 进一步讲,在Scala世界里,一个标识符要么是一串儿以字母开头的字母和数字,要么是一串儿操作符。 除了+之外,<=-*等操作符都能被定义为方法。

除了遵循纯面向对象的特性之外,Scala还对面向对象编程做出了一新创新:

  • 模块化的混入组合(Modular mixin composition)——Scala的这个特性(一般称为特质(trait))同时拥有Java接口(interface)和抽象类这两种事物的特点。你可以定义一个或多个特质做为基(contract),选择实现它的某些或全部方法。
  • 自身类型(Self-type)——一个混入(minix)并不依赖于被混入类中的任何域(field)和方法(method),但有些时候,使用被混入类的域和方法其实是很有用的,Scala对这一特性的支持被称为自我类型。
  • 类型抽象(Type abstraction)——编程语言中存在两种形式的抽象:参数化和抽象成员。Scala做到了对所有类型和值都支持这两种形式的抽象。

以上内容的细节将在第3-8章继续讨论。

定义 混入是一个类以继承的方式为子类提供某些功能,这个类本身一般不会实例化。 混入也可以看作是有实现(非抽象)方法的接口。

链接