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

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

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

一:人机界面设计

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

1、至于用户控制之下:

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

2、减少用户的记忆负担

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

3、保持界面的一致性:

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

二、结构化设计


从工程管理角度来看,软件设计可分为概要设计和详细设计两个阶段

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

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

(1)抽象化

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

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

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

(3)信息隐蔽

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

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

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

三、面向对象设计

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

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

2、设计原则

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

3、设计模式的概念

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

4、设计模式的分类


书籍推荐:《head first》 、《大话设计模式》这两本书写的不错,通俗易懂。有兴趣的同行者可以去看看。

(1)创建型模式:

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

(2)结构型模式:

(3)行为性模式:

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

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

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

详谈软件工程之系统设计模式相关推荐

  1. 时间触发嵌入式系统设计模式 读书笔记

    1 下载地址: https://download.csdn.net/download/longzitailang8/10496129 本书前所未有地提出一整套软件模式,为开发嵌入式软件系统提供帮助.书 ...

  2. NLP产品级系统设计模式

    摘要: 在本文中,作者从六个方面描述了一些生产NLP系统的常见设计和部署模式.这些是团队为了使产品开发与技术.业务.战略和操作目标保持一致而必须做出的选择或权衡. 摘要:在本文中,作者从六个方面描述了 ...

  3. 软件工程23种设计模式全解析

    23种设计模式全解析 一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代 ...

  4. 软件工程-23种设计模式和7大设计原则

    一.前言 软件工程这一个大的学习章节中,其中有23种软件设计模式和七种设计原则需要掌握,下面为大家梳理出相关的知识点. 二.面向对象软件设计原则 1.单一职责原则(Single responsibil ...

  5. 软件工程之系统顺序图

    1.描述外部参与者发送给系统的事件. 2.描述系统与系统之间的通信. 一个用例有一个系统顺序图,在系统顺序图中画的箭头都是按照用例描述的main flow画的: 系统顺序图从上到下代表时间顺序,顺序按 ...

  6. 软件工程 选课系统的uml类图_想成为高级程序猿,面向对象建模和UML你不应该知道?...

    一.面向对象 1.基本概念 软件对象,是一种将状态和行为有机集合起来形成软件构造模型 对象和类 对象是状态和行为构成的 类是相同属性和操作的一组对象的组合 消息和事件 消息是指描述事件发生的信息,是对 ...

  7. 软件工程 选课系统的uml类图_UML建模学生选课系统(类图+对象图+用例图+部署图)...

    UML建模学生选课系统(类图+对象图+用例图+部署图) UML建模学生选课系统(类图+对象图+组件图+部署图) 录 1.项目简介 3 1.1. 学生选课系统 3 1.2. 项目主题 3 1.3. 设计 ...

  8. java编程题目农夫果园_UML 农夫果园 小系统 设计模式

    [实例简介] 系统名称:农夫果园游戏系统 人物角色:农夫(Farmer).市场调查员(Inquirer).农场主(Boss) 系统实物:各种果树(Fruit).果园(Garden) 功能需求: (1) ...

  9. 详谈软件工程之需求工程(一)

    题外话:需求工程是系统架构设计师中最为重要的一个知识环节,无论是综合知识考试还是案例分析和论文,都会考到这一点.这次我从以下四点整理了关于这个章节的知识内容,若有遗漏请多多指教. 需求工程主要从以下五 ...

  10. 软件工程点菜系统的需求分析

    点菜系统需求分析 一.目标 1.实现顾客根据价格不同点菜:通过前台可视化界面实现顾客多方面选择. 2.点菜完毕后,实现对顾客所点菜品价格的统计,以免使顾客花费超出预算.本系统还可以实现顾客的退选或补选 ...

最新文章

  1. Chrome浏览器禁止缓存
  2. linux中关闭报警音
  3. ptr = (char *)malloc(0)
  4. linux rz xshell
  5. 面试中如何剔除“鱼目混珠”程序员?
  6. oracle复杂密码,如何配置 Oracle 11g 复杂密码校验设置
  7. linux驱动开发框架
  8. 训练集、验证集和测试集的概念及划分原则
  9. 占用率_有问有答:任务管理器里面的GPU占用率到底是怎么算的?
  10. Ubuntu 11.04 下安装配置 JDK 7
  11. TP框架log日志使用方法
  12. 【leetcode-652】寻找重复的子树
  13. 测试从零开始-No.9-软件配置管理介绍
  14. 深度学习常用算子(一)
  15. excel上下标录入技巧
  16. 读书笔记:《招聘面试新法》
  17. Opencv中flip函数讲解
  18. 神威OpenFOAM——最流行的开源CFD软件与神威·太湖之光的珠联璧合
  19. 一笔画问题 nyist42
  20. matlab找特定点,matlab编程取特定点坐标

热门文章

  1. 有哪些好用的电脑桌面分类管理软件?这3款软件让你的效率秒杀小伙伴!
  2. 联想笔记本卸载McAfee
  3. ha rose server安装 sql_Rose HA for SQL2008的安装之一
  4. android添加一层半透明,android – 在imageview上添加半透明叠加层
  5. codeblock的下载
  6. django ajax 简书,Django中ajax上传图片详细步骤
  7. python检测屏幕亮点_Python+OpenCV检测灯光亮点的实现方法
  8. matlab有限元分析杆单元,有限元实验1-杆单元有限元分析
  9. 全面讲解 Handler机制原理解析 (小白必看)
  10. 虚拟大师怎么修改手机_怎么修改手机应用名称