[课业] 22 | 软工 | 模块化与信息隐藏

模块化与信息隐藏思想

动机

好的软件指的是什么?

Parnas 1972

  1. 可管理、灵活、 可理解
  2. 特征
    模块之间关联少,模块不太依赖别的模块
    模块的独立替换、装配,不会波及到整个系统

Stevens 1974

  1. 简洁性(Simplicity):易于调试,易于分解
  2. 可观察性(Observability):易于修改

Beohm 1976

可维护,可扩展,可理解,可重用

发展

概述

  1. 软件工程整体发展背景
    1960年代:“软件不是硬件”的观点
    1970年代:“软件 = 数据 + 算法”的观点,瀑布过程模型,形式化方法
    1980年代:重用的概念,对象的概念,人件的概念
  2. 模块化与信息隐藏思想的历史发展
    萌芽期:Wirth 1971年论文;Parnas 1972年论文
    形成期:Stevens 1974年论文;Parnas 1978年论文;Parnas 1985年论文
    发展期:Eder 1992年论文;Hitz 1995年论文
    反思:McConnell 1996年论文;Demarco 2002年论文
    注意:其中,萌芽期与形成期的成果主要是在结构化范式方面的思考;后面的主要是在面向对象方面的研究

Wirth 1971

  1. 程序的优化与数据结构并行
  2. 程序模块化:决定了程序可以应对未来的修改和扩展
  3. 每一步进化都意味着一些列新的设计决策
  4. 小心编程不容易做到

Parnas 1972

  1. 什么是模块化
    模块化不仅仅是将程序分成各个子程序,是职责的分配(将系统分成相对独立的模块)
    如何分配职责也是设计决策
    模块化设计决策层次高于模块的内部实现
  2. 如何进行模块化
    如何进行模块化(分配模块)在于要看模块隐藏了什么信息;根据要隐藏的信息来模块化是模块化的指导原则
  3. 模块或程序之间存在的关系(将模块联系起来的关系)主要是使用依赖
    好的封装将处理控制的逻辑藏在模块内,其他人并不需要知道,只知道如何调度即可

Stevens 1974

  1. 结构化设计的奠基文章
  2. 首次阐述了“耦合”:模块之间联系强度的度量
  3. 定义了模块和内聚,首次提出耦合
  4. 结构化设计的流程
    Step 1: 描述问题功能

    Step 2: 识别交互的数据流
    Step 3: 识别哪里是输入、处理、输出(参考数据流图像结构图转化的过程)

    Step 4: 将数据流图转化为结构图,确定各模块间的信息传递(出入)

    A为控制模块,BCD分别为输入、处理、输出模块
    Step 5: 具体地对每个模块做的事进行描述(如何调用、需要哪个模块),对模块之间的关系进行细化和描述
  5. 讨论了两个概念
    模块的控制范围:模块们之间以树状结构的形式组装起来,每个模块的子树就是其控制范围;如果要改动什么东西,在其控制范围内的改动是可以的;超出控制范围则会有麻烦(如B,C下都有改动就超出了B的控制范围)
    模块的影响范围:决策影响在控制范围之内的系统是更简单的

Parnas 1978

  1. 模块之间的使用关联:什么时候A用B
    A 使用 B如果B的执行对A完成自己的任务来说是必要的话
    当满足下列所有条件后,允许A使用B
    A因为使用B本质上变得简单
    B因为不使用A免于变得相对复杂
    有包含B而不需要A的子集
    没有包含A而不包含B的子集

Parnas 1985

  1. 这篇论文类似于做项目之后的报告
  2. 归功于Module Guide:是对每个模块的说明,包括了主要、次要秘密、角色、分配模块职责时的条件(当时系统设计是和硬件一起的)
  3. 不同层次的Module,分别论述每层要解决的问题:一层、二层、三层……分解
  4. 秘密
    主要秘密:模块内隐藏的信息(如潜在变更)
    次要秘密:实现模块的实现决策
  5. 最顶层分解
    屏蔽硬件细节的模块
    Behavior-Hiding Module
    包含软件设计决策的模块
  6. 意义:1985年文章之后,对结构化中的内聚、耦合、如何做模块化和信息隐藏等问题有了充分阐述

Eder 1992

  1. 面向对象设计中的内聚和耦合
  2. 对内聚与耦合的定性分析

Hitz 1995

  1. 对内聚与耦合进行定量分析
  2. 两类耦合:类层次的耦合和对象层次的耦合

McConnell 1996

  1. 提醒大家一个被忽视的武器:信息隐藏
  2. 信息隐藏<
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值