结构化设计

一. 简介

1. 结构化设计的内容

结构化的系统设计主要考虑:模块的层次化、模块之间的接口、数据库设计、用户界面设计

为每个模块设计内部逻辑

采用自顶向下方法进行设计:具有系统自动化边界的DFD、结构图

2. 自动化系统边界划分

  • 将数据流图划分为手工处理部分和系统能自动完成的部分

  • 程序的处理过程可以在系统边界内部或外部

  • 数据流可以在系统边界内部或外部

  • 穿过系统界线的数据流代表了系统的输入和输出

  • 在最终的系统中,数据流将成为用户界面中的表单、报表、供其他系统使用的数据文件等

image-20211227195118410

二. 结构图

1. 简介

结构图的定义:模块为基础、以模块间的调用为关联所构成的图称为模块结构图,简称结构图。

结构图的作用: 层次化的方法来描述系统每部分的功能和子功能、展示计算机程序模块之间的联系

结构图符号:

image-20211227195507138

image-20211227211539863

2. 结构图创建

主要步骤:

  • 确定主要信息流
  • 代表输入和输出间最基本变化的过程
  • 重画数据流,将输入放左边,输出放右边
  • 初步建立一个结构图草图
  • 加入其他模块实现功能:数据输入、数据处理、数据输出
  • 使用结构化语言或决策树添加模块间逻辑
  • 进一步求精

image-20211227212112660

image-20211227212121164

image-20211227212133605

image-20211227212147684

三. 结构化设计——DFD到系统结构图

image-20211227212620548

  • 事务性:几条路径不全用
  • 复杂变换型:几条路径全部使用

image-20211227212812043

扇入扇出度限定

image-20211227212931304
image-20211227212938391
image-20211227212948151
image-20211227212955886

面向对象设计

一. 面向对象设计概述

1. 面向对象的设计

  • 传统结构化方法:分析阶段和设计阶段分得特别清楚,两套不同的建模符号和建模方法
  • 面向对象设计(OOD):采用统一的“对象”的概念,阶段区分不明显,仍然使用“类、属性、操作”等概念,是在OOA(面向对象分析)基础上的进一步细化,更加接近底层的技术实现。

2. 面向对象设计中的基本元素

  • 基本单元:设计类——对应于OOA中的分析类
  • 为了系统实现和维护过程中的方便些,将多个设计类按照关联的紧密程度聚合到一起,形成大颗粒度的“包”
    • image-20211227215755785
  • 一个包或多个包聚集在一起,形成“子系统”
  • 多个子系统构成完整的“系统”

3. 面向对象设计的两个阶段

  • 系统设计: 概要设计(体系结构),选择解决问题的基本途径(框架、平台、工具等),系统结构风格
  • 对象设计: 详细设计(具体实现),细化新的对象,识别新对象,在系统所需的应用对象与可复用的商业构件之间建立关联

image-20211227215831023

二. 系统设计

见上图

  • 系统体系结构
  • 识别设计元素:类、包、子系统
  • 部署子系统
  • 数据的存储策略
  • 检查系统设计

三. 包的设计

  • 分析类简单,逻辑抽象单一,一对一映射为设计类
  • 分析类复杂,分解为多个设计类,映射为包或子系统
  • 子系统/包的划分符合高内聚低耦合的特性(对外清晰)

一般来说,把在语义上接近且倾向于一起变化的类组织在一起形成包(业务和逻辑上联系)

  • 概念语义相近
  • 功能相关性:变更联系、删除后另一个变多余、频繁交互通信、一般/特殊关系、激发创建另一个类

包之间的关系:依赖(<>、<>等)、泛化(继承)

包图:

  • 类似于文件夹的符号
  • 组织元素的方式,组织任何事物:类、其他包、用例等

四. 对象设计

1. 概述

  • 对象设计:细化需求分析和系统设计阶段产生的模型、确定新的设计对象、消除问题域和实现域之间的差异
  • 主要任务:精细化属性(参数和基本实现结构)和操作(类型和可见性)、明确类之间的关系、整理优化设计模型

2. 基本步骤

2.1. 创建初始的设计类

分析类 设计类

2.2. 细化属性

  • 具体说明属性的名称、类型、缺省值、可见性:visibility attributeName: Type = Default
  • 属性来源:实体基本信息、状态信息、其他类之间关联信息、派生属性(需要计算其他属性的值才能得到,属性前加“/”)
  • 可见性尽可能private,调用函数set更新、get访问
  • 状态属性:大部分由其他属性值进行逻辑判断得到,状态值变迁是由实体类操作导致的
  • 关联属性:关联属性不只是一个ID,而是关联的一个或多个完整的对方类的对象和数据库中的外键区分,在程序运行空间实现object之间导航,无需经过数据库层存取

2.3. 细化操作

  • 给出完整的操作描述:确定操作的名称、参数、返回值、可见性等,遵从程序设计语言命名规则
  • 详细说明操作的内部实现逻辑:伪代码或者绘制程序流程图/活动图
  • 提取公共部分

image-20211227224436013

2.4. 定义状态

2.5. 细化类之间的关系

细化关系:关联关系、依赖关系、继承关系、组合和聚合关系

关联关系(Association/Composition/Aggregation)

辅助实体类,是对从用例中识别出的核心实体的补充描述,目的是使每个实体类的属性均为简单数据类型——目的:使用起来更容易

五. 面向对象设计总结

image-20211227225330430

数据库设计

一. 数据库系统及关系数据库简介

数据库系统=数据库(DB)+数据库管理系统(DBMS)

  • 数据库DB:集中控制和管理的存储数据完整集合
    • 概念(名字)、逻辑(名字、属性)、物理(名字、属性、属性类型、主键外键)
  • 数据库系统DBMS:对数据库的访问进行管理和控制
    • 允许同时访问数据库
    • 无需应用程序就可以访问
    • 管理已存储数据
  • 关系数据库
    • 关系数据库管理系统将数据存储为表(关系)的结果
    • 元组:表中的行(也称为一条数据记录),域:表中的列(也成为属性)
    • 表包含关键字(关键属性,key fields),用来唯一标识一条记录
    • 关键字是表间关系的基础

二. 数据库逻辑模型设计——ERD

  • 识别自然数据实体(Entity):DFD中全部数据存储,分析类图中部分类
  • 数据实体命名
  • 给出实体属性
  • 实体间关联关系和关联重数(1:1、1:M、M:N)
  • 建立关联实体来消除M:N重关系
  • 实体规范化(3NF,第三范式
  • 评价ERD质量并改进

三. ERD模型及质量评价

好的ERD标准:结构清晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余(重复性冗余)

数据库的规范化

  • 1NF:没有重复的属性或属性组,同样的内容不重复(e.g. 课程1、课程2、课程3)
  • 2NF:是1NF且每个非主属性均函数依赖于主属性(主键)(e.g. ID)
  • 3NF:是2NF且非主属性间均不存在函数依赖

为了提高运行效率,必须适当降低范式标准,保留冗余数据。

四. 物理数据库设计及建立

根据ERD建立物理数据库

  • 为每个实体创建一个二维表
  • 为每个字段选择适当的数据类型和取值范围
  • 定义每个表的主键(PK-Primary Key)
  • 针对1:M关联关系的子表添加外键(FK-Foreign Key)
  • 定义三个方面完整性约束
    • 域的完整性:字段取值范围
    • 参照完整性:PK、FK、表级触发器来实现
      • image-20211227234227397
    • 用户定义完整性:定义一些业务规则,用存储过程和触发器来实现

五. 物理数据库提高效率的技巧

image-20211227234249918

六. 描述分布式数据库的不同的体系结构模型

单数据库服务器体系结构

带备份的数据库服务器体系结构

将数据库模式划分为多个客户访问子集

分区数据库服务器体系结构

联合数据库服务体系结构

七. OO分析类图映射到ERD

1. 类和关系数据表的关系

  • OOP以class为基本单位,所有的object都是运行在内存空间当中

  • 若某些object的信息需要持久化存储,那么就需要用到database,将object的属性信息写入关系数据表

  • 在进行OO分析和设计时完全可以将database忘掉,后续再加以考虑

2. 数据存储设计

  • 数据文件:由操作系统提供的存储形式,应用系统将数据按字节顺序存储,并定义如何以及何时检索数据

  • 关系数据库:数据是以表的形式存储在预先定义好的成为Schema的类型中

  • 面向对象数据库:将对象和关系作为数据一起存储

  • 存储策略的选择:取决于非功能性的需求

数据存储策略权衡 tradeoff

  • 文件:大容量、临时数据、低信息密度数据
  • 数据库:并发访问要求高、系统跨平台、多个应用使用相同数据
  • 关系数据库:复杂数据查询、数据集规模大(子系统来完成应用系统中的对象和数据库中数据的映射与转换
  • 面向对象数据库:中等规模、频繁使用对象间联系来读取数据(提供接口供应用系统访问)

3. OO设计中的数据库设计

核心问题:对那些需要永久性存储的数据,如何将UML类图映射为数据库模型

本质:把一个类、类之间的关系分别映射到一张表或多张表(UML class diagram Relation DataBase, RDB)

两方面:类映射到表,关联关系映射到表

对象关系映射(Object Relational Mapping, ORM):解决面向对象与关系数据库存在的互不匹配的现象

image-20211228103356868

image-20211228103414345

基于关联类的关联关系:

image-20211228103514676

将继承关系映射到关系数据库:

image-20211228103933414

image-20211228104303671

1:1

image-20211228104340003

image-20211228104404106

1: *

image-20211228104446035

image-20211228104500807

*** ***

image-20211228104523457

一般来说,关联表一定有两个外键,并且会增加属性才有意义

image-20211228104532909

循环:* *

image-20211228104731516

image-20211228104740676

继承关系

image-20211228104842964

image-20211228104921527

image-20211228104932113

还可以只建立一张表

思考

image-20211228105048360

image-20211228105102095

image-20211228105113360

八. 关系型数据库规范化示例

image-20211228105136929

image-20211228105146035

image-20211228105153880

image-20211228105201668

image-20211228105208947

image-20211228105217848

用户界面设计

一. 用户界面设计的基本概念

广义人机界面:人和机器、设备之间存在的一个相互作用的“面“,e.g. 键盘、显示器、音响、方向盘、仪表等

狭义人机界面:计算机系统,又称为人机接口、用户界面

软件用户界面包含:界面元素的样式、大小、布局;界面的美观效果(色彩、风格、图像)声音/触觉等;操作序列或功能的隐喻,e.g. 视觉引导;交互信息(输入、输出、提示)

用户界面设计:用户界面完成结构设计、交互设计和视觉设计,从而使软件达到易学、易用、美观、高效的目的

用户界面设计基本过程:分析软件需求 用户界面结构设计(低保真) 用户界面交互设计(高保真,有内容,比如点击跳转等) 设计方案评审(需求、交互等) 迭代修改

用户界面设计标准:可学性、效率性(缺省值)、记忆性、容错性、满意度

二. 用户界面形式及设计原则

1. 用户界面分类

第一代:CUI——字符用户界面,character user interface

第二代:GUI——图形用户界面,graphics user interface(鼠标为主、键盘为辅) WIMP

第三代:MUI——多通道用户界面,multimodal user interface(多媒体,麦克风、手写板、摄像头、音响等)

从软件功能角度分类:

  • 操作系统用户界面
  • 文字处理软件用户界面
  • 工业控制系统用户界面
  • 管理信息系统用户界面
  • 网页用户界面
  • 移动工具用户界面
  • 游戏软件用户界面

2. 用户界面风格

从视觉观感上,图形化界面风格:

  • 一致性风格

  • 个性化风格

  • 传统式风格

  • 古典式风格

  • 现代派风格

  • 高科技风格

  • 卡通式风格

  • 插画式风格

3. 用户界面形式及设计原则

用户界面形式(五种):

  • 命令语言界面
    • 优点:功能强大(一条命令完成多次转移或多次问答),灵活性好,效率高,占用屏幕空间少
    • 缺点:难以学习记忆、需要键盘输入技巧、出错可能性大
    • 结构:关键词(+参数)、基于语法、基于自然语言
  • 菜单界面
    • 形式:单一菜单、线状序列菜单、树状结构菜单、非循环网络菜单、循环网络菜单
    • 式样:全屏幕文本菜单、条形菜单(屏幕顶部或底部)、弹出菜单、工具栏、下拉式菜单、图标菜单、滚动菜单、浮动菜单
  • 数据输入界面
    • 数据输入方式:问答式对话输入、菜单选择输入、填表输入、直接操作输入界面(点击对话,单选复选框等)、关键词数据输入(关键词+参数,类似于命令行)、条形码和光学字符识别(OCR)、声音数据输入
    • 交互式数据输入界面设计原则:数据输入一致性、用户输入减少至最少(缺省、系统复制)、信息反馈、灵活输入、错误检测和修改机制
    • 填表输入数据方式:填表界面系统驱动,输入字段同时显示在屏幕上,同时进行多字段输入,上下文信息
    • 集中数据项布局及显控协调问题(集中数据项布局原则)
      • 随意布局image-20211228133026284
      • 接近性原则(物理距离拉开)image-20211228133030885
      • 相似性原则image-20211228133035609
      • 完整性和闭合性原则image-20211228133041305
    • 集中数据项布局及显控协调问题(显控协调布局原则)
      • 重要性原则
      • 操作频率原则
      • 功能分组原则
      • 操作次序原则
  • 直接操纵和WIMP界面
    • 所见及所得
    • WIMP: Windows-down menu(图形方式)
    • 窗口的分类:滚动式窗口(上下翻动可看全部信息)、开关式窗口(只能显示一个)、分列式窗口(水平分区)、瓦片式窗口(水平或垂直规则划分为不重叠子屏幕)、重叠式窗口、弹出式窗口
  • 提示、帮助和出错界面
    • 出错设计原则:错误预防、错误恢复(undo、redo)

用户界面设计总原则(12条):

  • 一致性原则

  • 提供信息提示与反馈

  • 合理利用空间、保持界面简洁

  • 合理利用颜色与显示效果

  • 实现内容与形式的统一

  • 恰当使用图形和形象比喻

  • 用户出错宽容性

  • 尽量提供快捷方式

  • 尽量允许操作可逆性(Undo与Redo)

  • 尽量减少用户的记忆性要求

  • 合理的系统响应和低的系统成本

  • 良好的联机帮助(Help功能)

三. WIMP用户界面设计

1. 窗口设计

标题、图标,可缩放,可最大化、最小化,可移动,有滚动条,边框风格,光标风格,背景图案

2. 菜单设计

下拉式菜单、弹出式菜单、线性菜单、快捷方式、动态菜单项(涉及到权限,灰显菜单项、隐藏菜单项、位置可变菜单项、内容可变菜单项)、菜单项图标

3. 填表输入界面设计

提示(标签、提示信息)、输入与编辑、选择(单选radiobutton、多选checkbox)、帮助功能

4. 操作控制元素设计

按钮(普通按钮、位图按钮-带图标)、控制焦点(方法SetFocus)、滚动条、进度条

5. 声音输出界面设计

调用Delphi一个音频播放函数

PlaySound(pchar(filename),0,snd_async);//异步 等一定的时间,不管前一个音频是否完成,播放下一个

PlaySound(pchar(filename),0,snd_synch);//同步 等待前一个音频播放结束

6. 图标设计

用已经设计好的*.ICO文件

读入已有的图片(.bmp, .jpg等)进行再编辑或修改

抓取屏幕局部图像再编辑或修改

纯像素画设计

7. 个性化界面设计

.bmp

界面换肤

8. UnDo/ReDo设计

建立一个数据结构,保护每个对象产生前的现场:操作序列和结果数据;

该数据结构是个环形栈(栈底不固定);

  • UnDo时做类退栈操作,恢复现场;

  • ReDo时,将由于UnDo退出的栈元素再压入栈(只有当UnDo后无新的操作产生才可做)

四. 网页界面设计

五. 缺省设计问题

场合:文本编辑框、输入选择框(列表框、组合框、单选框、多选框)、功能按钮(其上的焦点)

目的:减少用户输入数据,提高系统使用效率

原则:考虑使用效率,从统计结果看输入平均量(含清除缺省值的输入量)< 无缺省值情况下的平均输入量

缺省值设计方法

  • 用户操作设置缺省值(强制值输入)
  • 经验值作为缺省值
  • 统计方法确定出现几率大的值作缺省值
  • 安全需要设置缺省值
  • 最近使用的值作缺省值
  • 输入数据的上下文关联缺省值
  • 当前状态值
  • 逻辑强制关系互为缺省值
  • 正常操作序列选择作为缺省值
  • 树状隶属关系约束选项列表
  • 智能焦点

六. 输入验证设计问题

场合:文本编辑框、功能菜单或按钮

目的:可能的情况下,保证数据有效性、合理性,减少错误,提高效率,保证安全

输入验证的内容及方法:

  • 数据位数验证
  • 字符集验证
  • 范围验证
  • 合理性验证
  • 数据格式验证
  • 安全性验证
  • 异常性验证

七. 系统响应及信息反馈问题

系统响应内容及方法:

  • 立即确认用户的输入
  • 提供忙状态提示(静态图标,等待动画:动态沙漏等)
  • 任务进度指示器
    • 虚拟进度(只是忙反馈)
    • 非精度进度(近似估计)
    • 动态调整显示进度(进/退)
    • 进度显示的任务粒度(最小进度单位表示任务量)
    • 时间方式显示进度(剩余时间)
    • 百分百形式显示进度
    • 工作任务动态(正在处理某文件,正在计算第X个单元)
    • 趣味进度:沙漏形式、广告倒计时
  • 首先反馈重要信息
  • 处理任务分解、化整为零

信息反馈的内容及方法:

  • 反馈信息明确具体
  • 建设性指导原则与积极的基调
  • 以用户为中心的措辞
  • 非拟人化的设计