5. 抽象(Abstraction)
在组件系统中,一个重要的议题就是如何抽象所需的组件。编程语言当中有两种最主要的抽象方式:参数化和抽象成员。前一种主要是函数式抽象方式,而后一种主要是面向对象的方式。传统意义上,Java对值提供函数式抽象,而对操作提供面向对象的抽象。Java 5.0所支持的泛型,对类型也提供了一定的函数式抽象。
Scala对于值和类型提供上述两者抽象模式的统一支持,值和类型都可以作为参数,也可以作为抽象成员。本节对这两种模式进行讨论,并且对Scala类型系统的很大一部分进行回顾。
5.1. 函数式抽象(Functional Abstraction)
下面这个类定义了一个可以读取和写入数值的单元(cell):
class GenCell[T](init: T) {
private var value: T = init
def get: T = value
def set(x: T): unit = { value = x }
}
这个类用一个类型参数T抽象了cell的值的类型,因此我们称GenCell为泛型(generic)。
与类相近,方法也可以有类型参数,下面这个swap方法交换两个cell的内容,只要它们包含的值类型相同:
def swap[T](x: GenCell[T], y: GenCell[T]): unit = {
val t = x.get; x.set(y.get); y.set(t)
}
下面这段程序创建两个整数单元,并且交换它们的值:
val x: GenCell[int] = new GenCell[int](1)
val y: GenCell[int] = new GenCell[int](2)
swap[int](x, y)
参数的实际类型用方括号括起来,用于替代类和方法定义中的形式参数。Scala定义了一套复杂的类型推理(type inference)系统,使得这两种情况下参数的实际类型都可以省略。类的方法和构造函数的类型参数对应的实际类型,可以通过局部类型推理(local type inference[41, 39])根据预期的返回值以及参数类型推理出来。因此,上面的程序可以写成这种省略参数类型的方式:
val x = new GenCell(1)
val y = new GenCell(2)
swap(x, y)
分享到:
相关推荐
Scala支持抽象类和抽象成员,抽象类可以包含抽象方法和抽象字段,用于定义类的公共接口。 #### 继承与覆盖(override) Scala支持继承,子类可以通过覆盖父类的方法来自定义行为。覆盖时需要使用`override`关键字。 ...
#### 二、Scala概述 ##### 2.1 什么是Scala Scala是一种多范式编程语言,它结合了面向对象编程与函数式编程的特点。Scala语言的设计目标之一就是尽可能地提高代码的可读性和简洁性,同时保持高性能。由于Scala运行...
Scala编程语言概述第二版马丁·奥德斯基,菲利普·阿尔瑟,文森特·克雷梅,伊利亚斯·德洛斯吉尔·杜波切,布尔卡·艾米尔,肖恩·麦克迪尔米德,斯特凡·米歇尔乌德,尼古拉·米海洛夫,米歇尔·辛茨,埃里克·...
**Scala概述**: - **定义**:Scala是一种功能强大的编程语言,旨在集成面向对象编程和函数式编程的特点。它运行在Java平台上,并且与Java高度兼容。 - **为何选择Scala**: - **优雅性**:良好的API设计可以极大...
- 类是面向对象编程的基本单元,而特质类似于接口和抽象类的结合体。 - 通过组合多个特质,可以实现类的功能复用;或者通过混合特质,在实例化时添加新功能。 #### 结论 《Learning Scala》这本书不仅介绍了...
Scala是一种多范式编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种更高级别的抽象,使代码更加简洁、优雅。由于其与Java虚拟机(JVM)的紧密集成,Scala程序可以直接在Java平台上运行,这也是它被标记...
#### 一、Scala编程语言概述 Scala是一种现代的多范式编程语言,它结合了面向对象编程和函数式编程的特点。Scala的设计目标是解决Java等传统面向对象语言在扩展性和灵活性方面的局限性,同时保持与现有Java生态系统...
#### 五、Scala特性与设计模式结合 Scala作为一种功能强大的语言,支持多种高级特性,如类型推断、隐式转换、特质等,这使得设计模式在Scala中的应用更为高效和简洁。例如,使用Scala的特质可以轻松实现策略模式中...
#### 一、概述 在软件开发领域,设计模式是解决特定问题的一种通用可重用方案。本书《Scala设计模式》由John Hunt撰写,旨在为读者提供一系列实用的设计模式,并通过Scala语言进行实现。这些模式不仅能够帮助开发者...
本文探讨的主题——安全的类型级抽象在Scala中的应用,是理解该语言高级特性的关键所在。类型抽象是指在程序设计中,通过定义泛型或参数化类型来实现代码的复用性和灵活性。而类型级抽象则进一步将这种抽象概念应用...
#### 一、Scala语言概述 Scala是一种多范式编程语言,结合了面向对象编程和函数式编程的特点,运行在Java平台(JVM)上。它既能够提供静态类型检查的安全性,又能实现动态语言的灵活性。Scala的设计目标是解决Java的...
而“Scala编程语言”则可能是对Scala语言本身的一个概述,包括其设计理念和特性。 进一步的章节,如“变量的两种类型”、“可选类型”、“内置类型”、“字符串相关的注释”、“命令行I/O”、“控制结构”、“if/...
1. **第1章:Scala——一种混合型语言** - **1.1 函数式编程与面向对象编程的结合**:本节探讨了Scala如何将函数式编程和面向对象编程完美地融合在一起,使其成为一种强大的多范式编程语言。 - **1.2 静态类型系统...
1. 概述和入门: - Akka是什么?它是一个开源的工具集,用来简化在Java虚拟机(JVM)上构建并发、分布式和容错的高性能应用程序。 - 为什么使用Akka?它能够帮助开发者避免常见的并发编程陷阱,如死锁、竞态条件等,...
### 一、教程概述 该教程是一本详尽介绍Scala编程语言的书籍,共计15章,旨在帮助读者掌握Scala的基础语法及进阶内容。教程由Scala语言的设计者Martin Odersky及其团队成员Lex Spoon和Bill Venners共同编写,由...
1. **基础语法**:Scala的基础语法与Java类似,但更简洁。包括变量定义(val和var)、常量、数据类型(如Int、Double、String等)以及基本操作符。 2. **模式匹配**:Scala的模式匹配是其独特之处,允许开发者以一...
- **抽象类与接口**:Scala支持抽象类和trait,trait类似于其他语言中的接口,但功能更为强大。 **4\. 函数式编程** - **不可变性**:Scala鼓励使用不可变的数据结构,这有助于编写无副作用的纯函数。 - **高阶函数...