学习Scala的二维布局库和抽象类
创始人
2024-04-19 02:00:45
0

二维布局库

作为本章运行的例子,我们将创造一个制造和渲染二维布局元素的库。每个元素将代表一个填充字符的长方形。方便起见,库将提供名为“elem”的工厂方法来通过传入的数据构造新的元素。例如,你将能通过工厂方法采用下面的写法创建带有字串的元素:

  1. elem(s: String): Element  

51CTO编辑推荐:Scala编程语言专题

正如你所见,元素将以名为Element的类型为模型。你将能在元素上调用above或beside,传入第二个元素,从而得到合并了这两个的新元素。例如,下面的表达式将构建一个包含两列,每列高度为二,的更大的元素:

  1. val column1 = elem("hello") above elem("***")  
  2. val column2 = elem("***") above elem("world")  
  3. column1 beside column2  
打印这个表达式的结果将是:

  1. hello ***  
  2. *** world  
在对象能通过简单的部件及组合操作符的帮助被构建的系统中,布局元素是个好的例子。本章里,我们将定义类使得元素对象能被构建自数组,行记录,以及长方形——简单部件。我们还将定义组合操作符above和beside。这种组合操作符也经常被称为组合子:combinator,因为它们把某些区域的元素组合成新的元素。

以组合子的方式思考问题通常是实现库的设计的好方法:它能回报以考虑在应用域构建对象的基础方法。什么是简单对象?用什么方式能让更多有趣的对象通过简单对象构造出来?组合子是怎么挂在一起的?什么是最通用的组合?它们满足任何有趣的规则吗?如果你对这些问题都有好的答案,你的库设计就在正轨上了。

抽象类

我们的***个任务就是定义代表布局元素的类型Element。由于元素是二维的字符长方形,包括成员,指向布局元素内容的contents,是合情合理的。内容可以被表达成字串数组,这里每个字串代表一行。因此,contents返回的结果类型就是Array[String]。代码10.1展示了它看起来的样子。

这个类里,contents被声明为没有实现的方法。换句话说,方法是类Element的抽象:abstract成员。具有抽象成员的类本身必须被声明为抽象的,只要在class关键字之前加上abstract修饰符即可:

  1. abstract class Element {  
  2. def contents: Array[String]  
  3. }  
代码 10.1 定义抽象方法和类

  1. abstract class Element ...  
abstract修饰符说明类或许有没实现的抽象成员。结果,你不能实例化抽象类。如果你尝试这么做,你会得到编译器错误:

  1. scala> new Element  
  2. < console>:5: error: class Element is abstract;  
  3.  cannot be instantiated  
  4.  new Element  
  5.  ˆ  
本章后面你会看到如何创建类Element的子类,你将能实例化它们因为它们补上了缺失的contents定义。

请注意类Element的contents方法并没带有abstract修饰符。如果方法没有实现(也就是说,没有等号或方法体),它就是抽象的。不像Java,方法的声明中不需要(或允许)抽象修饰符。拥有实现的方法被称为具体的:concrete

另一个术语用法需要分辨声明:declaration定义:definition。类Element声明了抽象方法contents,但当前没有定义具体方法。然而下一节,我们要定义一些具体方法来加强Element。

【相关阅读】

  1. Scala学习:叫名参数by-name parameter
  2. Scala:如何编写新的控制结构
  3. Scala学习:Curry化的函数
  4. Scala学习:简化客户代码
  5. 减少Scala中的代码重复

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...