组件复用——组合器

来源:互联网 发布:淘宝怎么会封号 编辑:程序博客网 时间:2024/06/14 06:51

      • 组件模型概述
      • 面向对象没有带来大规模组件复用的原因
      • 组件复用在Scala中的尝试

组件模型概述

从广泛的领域来看,成功的组件模型都依赖于非常简单的基础,这个基础使得组件能够创建、生成更复杂的结构,进而形成适用的高层协议。由此可知在软件领域中,恰当、通用的代码或二进制交互协议是复用组件的基础。如:

  1. 数字集成电路(IC)2n根信号线与信号总线相连,每个信号线是一个布尔值,取值为开或关。
  2. HTTP组件模型中,服务间通过狭小但定义良好的接口进行交互,相互传输少量有关数据类型的信息,其中关于数据本身格式的规定则非常简单。

面向对象没有带来大规模组件复用的原因

恰当、通用的代码或二进制交互协议是复用组件的基础,但这个基础并没有在面向对象中被建立起来。

在各个面向对象语言社区中,组件的基础单位就是对象(也包含模板)。如对于常见的Customer类,开发者为了满足其具体需求,均会为其创建或制定一个新的标准,由此可知对于复用来说对象还不够底层,因此我们需要比对象更底层的东西

跨语言、跨进程的标准组件近年才出现(类似CORBA的模型非常复杂),但大部分模型定义了二进制标准,而代码级的标准。受制于“版本地狱“,这使得交互性变得非常脆弱。组件复用方案的失败,不在于选择二进制标准而非代码级标准,而在于所定义的二进制标准太过复杂,导致模型的失败


组件复用在Scala中的尝试

在Scala中,高阶函数的概念与离散数据中的组合器概念非常接近。对于特定问题,可以将数据和行为分离开来,使用很少的代码将组合器串联起来以完成复杂的功能。而在面向对象中的典型做法则是,将数据和行为绑定在一起,在自定义类中创建所需逻辑的实现。

在Scala中使用高阶函数(组合器)数据结构来形成组件复用的基础


参考《Scala程序设计》第二版

原创粉丝点击