8.软件系统设计


人机界面设计

人机界面设计主要需要遵循 黄金三法则

  1. 置于用户控制之下
  • 以不强迫用户进入不必要的或不希望的动作的方式来定义交互方式

  • 提供灵活的交互

  • 允许用户交互可以被中断和撤销

  • 当技能级别增加时可以使交互流水化并允许定制交互

  • 使用户隔离内部技术细节

  • 设计应允许用户和出现在屏幕上的对象直接交互

  1. 减少用户的记忆负担
  • 减少对短期记忆的要求

  • 建立有意义的缺省

  • 定义直觉性的捷径

  • 界面的视觉布局应该基于真实世界的隐喻

  • 以不断发展的方式揭示信息

  1. 保持界面的一致性
  • 允许用户当前任务放入有意义的语境

  • 在应用系列内保持一致性

  • 如过去的交互模型已建立起了用户期望,除非有迫不得已的理由,不要改变它

结构化设计

软件设计的构成

软件设计包括体系结构设计、接口设计、数据设计 和过程设计。

  1. 结构化设计:定义软件系统各主要部件(系统)之间的关系。

  2. 数据设计:基于E-R图确定软件涉及的文件系统的结构及数据的表结构。好的数据设计将改善程序结构和模块划分,降低过程复杂度。

  3. 接口设计(人机界面设计):软件内部,软件和操作系统间以及软件和人之间如何通讯。

  4. 过程设计:系统结构部件转换成软件的过程描述。确定软件各个组成部分内的算法及内部数据结构,并选定某种过程的表达方式来描述各种算法。

概要设计和详细设计

概要设计(外部设计):功能需求分配给软件模块,确定每个模块的功能和调用关系,形成模块结构图。

详细设计(内部设计):为每个具体任务选择适当的技术手段和处理方法。

结构化设计原则

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

  • 保持模块的大小适中

  • 多扇入,少扇出

  • 深度和宽度均不宜过高

扇入:是指直接调用该模块的上级模块的个数(即被调用)。扇入大表示模块的复用程序高。

扇出:是指该模块直接调用的下级模块的个数(即调用)。扇出大表示模块的复杂度高,需要控制和协调过多的下级模块

高内聚低耦合

模块的四个要素

  1. 输入和输出:模块的输入来源和输出方向都是同一个调用者,即一个模块从调用者那儿取得输入,进行加工后再把输出返回调用者。

  2. 处理功能:指模块把输入转换成输出所做的工作。

  3. 内部数据:指仅供该模块本身应用的数据。

  4. 程序代码:指用来实现模块功能的程序。

面向对象设计

基本过程

面向对象设计 - 七大原则

  1. 单一职责原则:设计目的单一的类。

  2. 开放封闭原则(开闭原则):对扩展开放,对修改封闭。

  3. 里氏替换原则:子类可以替换父类。

  4. 依赖倒置原则:高层模块不应该依赖低层模块,两者都应该依赖其抽象(子类应依赖于父类,子类和父类应依赖抽象类,从高到低进行开发,从父类到子类开发)。要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程。

  5. 接口隔离原则:使用多个专门的接口比使用单一的总接口要好(每个接口只承担功能,避免多个功能共用一个接口,避免一个功能变动导致多个功能受到影响;与单一职责原则(设计原则)相辅相成,接口隔离原则是实现原则)。

  6. 组合重用原则:要尽量使用组合,而不是继承关系达到目的(降低耦合,解耦)。

  7. 迪米特(Demeter)原则(最少知识法则):一个对象应当尽可能少的了解其他对象,类的内部如何实现、如何复杂都与调用者或者依赖者没关系,调用者或者依赖者只需要知道他需要的方法即可,其他的一概不关心。

设计模式

  • 架构模式:软件设计中的高层决策,例如C/S结构就属于架构模式,架构模式反映了开发软件系统过程中所做的基本设计决策。

  • 设计模式:主要关注库系统的设计,与具体的实现语言无关。

  • 惯用法:是最低层的模型,关注软件系统的设计与实现,实现时通过某种特定的程序设计语言来描述构件与构件之间的关系。每种编程语言都有它自己特定的模式,即语言的惯用法。例如引用-计数就是C++语言中的一种惯用法。

(以上高,中,低三层;模式就是解决一系列问题的套路)

面向对象设计模式

既可以是类模式,也可以是对象模式的设计模式:

  1. Factory Method 工厂方法模式

  2. Adapter 适配器模式

  3. Interpreter 解释器模式

  4. Template Method 模板模式

创建型模式

结构型模式

行为型模式(一)

行为型模式(二)

考察点

1.设计模式三种类型的定位;
2.设计模式分类;
3.设计模式应用场景及特点

2024.5.15 更新

PS: 软件设计模式知识点已经从架构师新版教材中移除,考核几率很低

常见软件开发方法

结构化方法SA

自顶向下,逐步分解求精,严格区分阶段

面向对象方法OO

自底向上,阶段界限不明,符合人们的思维习惯,更好的应变和复用

面向服务的方法SO

粗粒度,松耦合,标准化和构件化,抽象级别从低到高包括:操作->服务->业务流程

原型法UI

偏需求阶段,按功能分包括水平原型(界面)和垂直原型(复杂算法);按最终结果分包括抛弃式原型和演化式原型

基于架构的软件开发方法ABSD

ABSD由体系结构驱动,包括:商业、质量和功能需求的组合

统一过程方法UP

三中心、四步骤、九大过程组

敏捷方法

极限编程XP,SCRUM,水晶法

基于构件的开发方法CBSD

形式化方法

净室软件工程,数学模型化

DDD、FDD、TDD,DSSA,OpenSource等

常见软件开发模型

瀑布模型

演化模型

增量模型

螺旋模型

原型模型

喷泉模型

V模型

迭代模型

快速应用开发RAD

构件组装模型CBSD

综上:一个软件开发方法可能对应多个开发模型,根据适用的场景来区分和选择。

– THE END –

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值