详谈软件工程之系统设计模式

详谈软件工程之系统设计模式

  • 一:人机界面设计
      • 1、至于用户控制之下:
      • 2、减少用户的记忆负担
      • 3、保持界面的一致性:
  • 二、结构化设计
      • 1、结构化设计需要遵循的原则:
        • (1)抽象化
        • (2)自顶向下、逐步求精
        • (3)信息隐蔽
        • (4)模块独立(高内聚、低耦合)
  • 三、面向对象设计
      • 1、面向对象设计的基本过程
      • 2、设计原则
      • 3、设计模式的概念
      • 4、设计模式的分类
        • (1)创建型模式:
        • (2)结构型模式:
        • (3)行为性模式:

题外话:本博客讲的是软件工程中的系统设计部分,其中软件架构设计放到后面板块来详细说明,这里主要讲的是系统设计中的界面设计、结构化设计以及面向对象设计。

一:人机界面设计

详谈软件工程之系统设计模式_第1张图片

人机界面设计说的就是人与机器(电脑、手机等)的交互。人机界面设计需要遵循三个原则(又称黄金三原则),即至于用户控制之下减少用户的记忆负担保持界面的一致性

1、至于用户控制之下:

  • 以不强迫用户进入不必要的或不希望的动作的方式来定义交互方式;
  • 提供灵活的交互;
  • 允许用户交互可以被中断或者撤销;
  • 当技能级别增加时可以便交互流水化并允许定制交互;
  • 使用户隔离内部技术细节;
  • 设计应允许用户和出现在屏幕上的对象直接交互;

2、减少用户的记忆负担

  • 减少对短期记忆的要求;
  • 建立有意义的缺省;
  • 定义直觉性的捷径;
  • 界面的视觉布局应该基于真实世界的隐喻;
  • 以不断进展的方式揭示信息;

3、保持界面的一致性:

  • 允许用户将当前任务放入有意义的语境;
  • 在应用系列内保持一致性;
  • 如过去的交互模型已建立了用户期望,除非有迫不得已的理由,不要改变它

二、结构化设计

详谈软件工程之系统设计模式_第2张图片
从工程管理角度来看,软件设计可分为概要设计和详细设计两个阶段

概要设计:做的是子系统的划分,子系统接口的设计,模块划分等工作。概要设计也称为高层设计或总体设计,即将软件需求转化为数据结构和软件的系统结构。
详细设计:是指对某一功能点的具体设计。详细设计也称为低层设计,即对结构图进行细化,得到详细的数据结构与算法。
概要设计偏架构一点,详细设计是单个模块的设计。
总的来说,在整个软件设计过程中,需完成以下工作任务:
(1)制定规范,作为设计的共同标准。
(2)完成软件系统结构的总体设计,将复杂系统按功能划分为模块的层次结构,然后确定模块的功能,以及模块间的调用关系和组成关系。
(3)设计处理方式,包括算法、性能、周转时间、响应时间、吞吐量和精度等。
(4)设计数据结构。
(5)可靠性设计。
(6)编写设计文档,包括概要设计说明书、详细设计说明书、数据库设计说明书、用户手册和初步的测试计划等。
(7)设计评审,主要是对设计文档进行评审。

1、结构化设计需要遵循的原则:

(1)抽象化

对软件进行模块设计的时候,可以有不同的抽象层次。在最高的抽象层次上,可以使用问题所
处环境的语言描述问题的解法。而在较低的抽象层次上,则宜采用过程化的方法。抽象化包括对过
程的抽象、对数据的抽象和对控制的抽象。

(2)自顶向下、逐步求精

将软件的架构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个架构。

(3)信息隐蔽

信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,并且尽可能少地暴露其内部的处理过程。

(4)模块独立(高内聚、低耦合)

强调每个模块之间是相互独立的,每个模块做到单一职责,并且与其他模块之间的联系最简单。通常用耦合(模块之间联系的紧密程度)和内聚(模块内部各元素之间联系的紧密程度)两个标准来衡量,我们的目标是“高内聚、低耦合”。
高内聚:指的是一个模块内部的联系紧密程度较高;
低耦合:模块之间的联系较少。

详谈软件工程之系统设计模式_第3张图片

三、面向对象设计

面向对象设计是把分析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。

1、面向对象设计的基本过程

详谈软件工程之系统设计模式_第4张图片

2、设计原则

  • 单一职责原则:设计目的单一的类;
  • 开发-封闭原则:对扩张开放,对修改封闭;
  • 李氏(Liskov)替换原则:子类可以替换父类;
  • 依赖倒置原则:要依赖于抽象,而不是具体实现;要面向接口编程,不要针对实现编程;
  • 接口隔离原则:使用多个专门的接口比使用一个总接口要好;
  • 组合重用原则:要尽量使用组合,而不是继承关系达到重用目的;
  • 迪米将(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解

3、设计模式的概念

架构模式:软件设计中的高层决策,例如C/S结构就属于架构模式 架构模式反映了开发软件系统过程中所作的基本设计决策
设计模式:主要关注软件系统的设计 与具体的实现语言无关
惯用法:是最低层的模式,关注软件系统的设计与实现 实现时通过某种特定的程序设计语言来描述构件与构件之间的关系。每种编程语言都有它自己特定的模式 即语言的惯用法。例如引用计数就是 C++语言中的一种惯用法

4、设计模式的分类

详谈软件工程之系统设计模式_第5张图片
书籍推荐:《head first》 、《大话设计模式》这两本书写的不错,通俗易懂。有兴趣的同行者可以去看看。

(1)创建型模式:

主要的作用就是创建对象,在有些场景中不是简单的new能够解决创建对象的问题,如单例、多态等。

详谈软件工程之系统设计模式_第6张图片

(2)结构型模式:

详谈软件工程之系统设计模式_第7张图片

(3)行为性模式:

详谈软件工程之系统设计模式_第8张图片详谈软件工程之系统设计模式_第9张图片

  • 例题
    ()的选择是开发一个软件系统时的基本设计决策; ()是最低层的模式,关注软件系统的设计与实现,描述了如何实现构件及构件之间的关系。引用一计数是C++管理动态资源时常用的一()。
    (1) A. 架构模式 B. 惯用法 C. 设计模式 D. 分析模式
    (2) A. 架构模式 B. 惯用法 C. 设计模式 D. 分析模式
    (3) A. 架构模式 B. 惯用法 C. 设计模式 D. 分析模式

答案解析:A、B、B。架构模式是软件设计模式中最高级的一层,所以选A;惯用法是系统设计的最底层设计模式,偏向具体,以及若是指定具体语言的也是惯用法,所以二三题选B。

更多资讯请扫描以下二维码或关注微信公号“愿为最亮星”,为您提供更深层次的解答。

详谈软件工程之系统设计模式_第10张图片

你可能感兴趣的:(系统架构设计师)