2.3.1 面向对象风格
- 系统 ≈ 对象的集合
- 对象有自己的操作集合,数据及作用在数据上的操作被封装成ADT
- “obj is a manger”, “obj is an invocation”
基本构成
- OO风格的构件:类和对象
- 连接件: 函数调用
类的内部
- 属性:描述对象静态特性——数据项
- 操作:动态特征——动作
类图中描述类要用:
类名 属性 操作
面向对象特点
- 封装:限制对某些信息的访问
- 交互:通过过程调用或类似协议
- 多态:在运行时选择具体操作
- 继承:对共享的接口保持唯一的接口
- 动态绑定:运行时决定实际调用的操作? —— what
- 复用、维护
优点
- 复用和维护,利用封装和聚合提高生产力。改变内部实现不影响外部接口调用
- 反映现实世界
- 容易分解一个系统
缺点
- 管理大量的对象,需要一个数据结构管理大量的对象
- 必须知道对象的身份标识
- 继承引起复杂度
KWIC 面向对象的应用
特点:
- 数据不再被构件直接共享,而是被封装在了对象中
- 每个对象提供一个接口,允许其他对象通过接口调用/访问自己的数据
优点:
- 某一构件的算法与数据结构的修改不会影响其他的构件
- 构件之间的依赖降低,提高了复用度
缺点:
- 不适合功能的扩展
- 为了增加新功能,要么修改已有模块,要么增加新的模块
数据流风格
基本构件
基本构件:数据处理
连接件:数据流()
- 构件接口:输入端口和输出端口
拓扑结构:任意的拓扑结构(多种)
- 数据的流向是无序的——乱七八糟
- 近似线性流动——存在并行、单方向
- 有限度的循环数据流——
管道-过滤器
构件、中间件
构件:过滤器(处理数据流)
连接件:管道(连接一个源和一个目的过滤器)
拓扑结构:由连接器定义
场景
适用场景:数据源源不断产生,系统需要对这些数据进行若干处理
解决方案:
- 把系统分解为几个顺序的处理步骤,这些步骤之间通过数据流连接,一个步骤的输出是另一个步骤的输入;
- 每个处理步骤由一个过滤器构件(Filter)实现;
- 处理步骤之间的数据传输由管道(Pipe)负责。
展开介绍:过滤器
作用:将源数据递增的变化成目标数据。变换:数据流 ⇨ 数据流。输入输出都是数据流。
特征:
- 无上下文信息
- 不保留状态
- 对上下游的其他过滤器无任何了解
管道
作用:在过滤器之间传送数据
特点:
- 单向
- 可能有缓冲区(可以是文件、数组、字典、树等集合类型)
- 管道的先后顺序不影响输出的结果
不同的管道中流动的数据流,可能有不同的数据格式
注意:从管道读数据是一次性的,读完了就不能再读上一次的数据了
管道影响拓扑结构,可以是:
- 线性
- 并行
- 树形
- 不可以成环
管道-过滤器风格优缺点
优点:
- 隐蔽性、高内聚、低耦合
- 支持软件复用
- 容易维护和增强系统性能(加入、一处管道、过滤器)
- 允许加入一些操作来实现对吞吐、死锁等东西的分析
- 支持并行
缺点:
- 通常导致进程成为批处理的结构
- 每个过滤器都有解析、合成数据的操作,导致性能下降
评论区