NormanZyq
发布于 2020-03-20 / 425 阅读
0
0

3.20 周五 面向对象风格、数据流风格

2.3.1 面向对象风格

  • 系统 ≈ 对象的集合
  • 对象有自己的操作集合,数据及作用在数据上的操作被封装成ADT
  • “obj is a manger”, “obj is an invocation”

基本构成

  • OO风格的构件:类和对象
  • 连接件: 函数调用

类的内部

  1. 属性:描述对象静态特性——数据项
  2. 操作:动态特征——动作

类图中描述类要用:

G8TjQP.jpg

类名 属性 操作

面向对象特点

  1. 封装:限制对某些信息的访问
  2. 交互:通过过程调用或类似协议
  3. 多态:在运行时选择具体操作
  4. 继承:对共享的接口保持唯一的接口
  5. 动态绑定:运行时决定实际调用的操作? —— what
  6. 复用、维护

优点

  1. 复用和维护,利用封装和聚合提高生产力。改变内部实现不影响外部接口调用
  2. 反映现实世界
  3. 容易分解一个系统

缺点

  1. 管理大量的对象,需要一个数据结构管理大量的对象
  2. 必须知道对象的身份标识
  3. 继承引起复杂度

KWIC 面向对象的应用

特点:

  1. 数据不再被构件直接共享,而是被封装在了对象中
  2. 每个对象提供一个接口,允许其他对象通过接口调用/访问自己的数据

优点:

  1. 某一构件的算法与数据结构的修改不会影响其他的构件
  2. 构件之间的依赖降低,提高了复用度

缺点:

  1. 不适合功能的扩展
  2. 为了增加新功能,要么修改已有模块,要么增加新的模块

数据流风格

基本构件

基本构件:数据处理
连接件:数据流()

  • 构件接口:输入端口和输出端口

拓扑结构:任意的拓扑结构(多种)

  1. 数据的流向是无序的——乱七八糟
  2. 近似线性流动——存在并行、单方向
  3. 有限度的循环数据流——

管道-过滤器

构件、中间件

构件:过滤器(处理数据流)

连接件:管道(连接一个源和一个目的过滤器)

拓扑结构:由连接器定义

场景

适用场景:数据源源不断产生,系统需要对这些数据进行若干处理

解决方案:

  1. 把系统分解为几个顺序的处理步骤,这些步骤之间通过数据流连接,一个步骤的输出是另一个步骤的输入;
  2. 每个处理步骤由一个过滤器构件(Filter)实现;
  3. 处理步骤之间的数据传输由管道(Pipe)负责。

展开介绍:过滤器

作用:将源数据递增的变化成目标数据。变换:数据流 ⇨ 数据流。输入输出都是数据流。

特征:

  1. 无上下文信息
  2. 不保留状态
  3. 对上下游的其他过滤器无任何了解

管道

作用:在过滤器之间传送数据

特点:

  • 单向
  • 可能有缓冲区(可以是文件、数组、字典、树等集合类型)
  • 管道的先后顺序不影响输出的结果

不同的管道中流动的数据流,可能有不同的数据格式

注意:从管道读数据是一次性的,读完了就不能再读上一次的数据了

管道影响拓扑结构,可以是:

  1. 线性
  2. 并行
  3. 树形
  4. 不可以成环

管道-过滤器风格优缺点

优点:

  1. 隐蔽性、高内聚、低耦合
  2. 支持软件复用
  3. 容易维护和增强系统性能(加入、一处管道、过滤器)
  4. 允许加入一些操作来实现对吞吐、死锁等东西的分析
  5. 支持并行

缺点:

  1. 通常导致进程成为批处理的结构
  2. 每个过滤器都有解析、合成数据的操作,导致性能下降

评论