学习如何画图,如类图,顺序图,流程图,E-R图和类代码等
一个一个来
起始
数据流图(功能模型)
基本符号
加工:命名要用动宾词组;
外部实体、数据存储、数据流:命名要用名词;
题目说明解法
下面用个题来说明:
假设一家工厂的采购部每天需要一张定货报表,报表按零件编号排序,表中列出所有需要再次定货的零件。对于每个需要再次定货的零件应该列出下述数据:零件编号、零件名称、定货数量、目前价格、主要供应者和次要供应者。零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给定货系统。当某种零件的库存数量少于库存量临界值时就应该再次定货。
采购部是数据起点,然后最后仓库是数据终点。中间是订货系统。
所以基本的画图是
然后确定好目标后再进行细化:
确定处理 :
- 原文中:
零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给定货系统。当某种零件的库存数量少于库存量临界值时就应该再次定货。
“事务的后果是改变零件库存量,实时统计定货情况” →必须有一个用于处理事物的处理
工厂的采购部每天需要一张定货报表,报表按零件编号排序,表中列出所有需要再次定货的零件。对于每个需要再次定货的零件应该列出下述数据:零件编号、零件名称、定货数量、目前价格、主要供应者和次要供应者。
“采购部需要报表”→必须有一个用于产生报表的处理
确定数据存储:
- 原文中
对于每个需要再次定货的零件应该列出下述数据:零件编号、零件名称、定货数量、目前价格、主要供应者和次要供应者。
当某种零件的库存数量少于库存量临界值时就应该再次定货。
“在某个地方要有零件库存量和临界值数据” →必须有一个用于保存库存清单
的数据存储
“产生报表和处理事务这两个处理在时间上明显不匹配”→必须有一个用于存放定货信息
的数据存储
分析完上面画图
刚开始画出来框架:(把系统,起始点和终点画好)
然后把处理和数据流和数据结构画上
这里解答下为啥库存清单是双向的,因为处理事务(进货)需要看库存清单,所以会产生一个指向处理事务的箭头
细化(第二层)
到这里还可以继续细化
因为你看
当某种零件的库存数量少于库存量临界值时就应该再次定货。
这句话中缺货-》订货-》修改库存量等没有体现出来
所以:
细化处理事务
接收事务
- 按照事务去
修改库存清单
- 如果更新后的库存量少于临界值,则应填写订货信息,这就需要一个
处理定货
的加工
我画的不太好,我用下ppt的
这里说明下定货信息(货物的名字啥的,数量)。因为处理事务(需要看数量)
和生成报表(需要看货物信息)
都用上,所以这样画。
然后二层要进行合并
合并
数据流图中的信息提取
结束其他
我感觉这个视频讲解的还行:
软件工程数据流图画法 我在tyut
链接:
其他例题:
高考录取统分子系统
软件结构图(模块层次图(H图)和模块结构图)
模块结构图
模块结构图三大成分:模块、调用、接口数据(纯数据和控制信息)
基本符号
三大成分:模块,调用,数据(纯数据◎、控制信息◉)
模块结构图中的主要成分有:
模块
:用长方形表示调用
:从一个模块指向另一模块的箭头表示前一个模块调用后一个模块。有循环调用和条件调用纯数据
:用带圆圈的小箭头表示从一个模块传递给另一模块的数据(有实义)控制信息
:带涂黑圆圈的小箭头表示一个模块传送给另一模块的控制信息
所以模块结构图中的调用是有箭头指向的
题目分析解法
高考录取统分子系统有如下功能:
(1) 计算标准分:根据考生原始分计算,得到标准分,存入考生分数文件;
(2) 计算录取线分:根据标准分、招生计划文件中的招生人数,计算录取线,存入录取线文件。
看上面视频链接,数据流图已经画出来了。。(后面加个数据终点(->考生))
那么看结构图
先画一个基本结构:
一般上面三个是输入,处理,输出
他把原始分传过去,那么下面咋样计算原始分之类的还要细分
根据原始分得到标准分,说明在分数处理里面使用了,再细分
那么如果使用分数处理,也得细分。
下面加个计算标准分,把原始分传过去,再标准分传给分数处理
我们还要计算录取线等
我们看右边,先把标准分传过来
结果输出要把标准分存入考生分数文件
还差个录取线,要计算录取线。
根据标准分、招生计划文件中的招生人数,计算录取线,存入录取线件。
招生人数传给分数处理
然后根据标准分和招生人数计算录取线
分数处理得到录取线,返回给系统
分数处理如何得到录取线?
要来个计算录取线模块
传入标准分
传入招生人数
传回录取线给分数处理模块
系统把录取线,存入录取线文件。
加一个存入录取线文件模块
把从系统来的录取线0-》结果输出-》存入录取线文件
最后自己美化下
标准答案见这篇文章高考录取统分子系统
其他东西
标准答案见这篇文章高考录取统分子系统
借用视频:
数据流图转软件结构图方法tyut
其他例题:
也可以不像上面那样输入输出处理三个模块
自己设置模块
比如这个题:
“工资处理”子系统的结构图
模块层次图(H图)
这个就比较简单了
就按照功能模块往下分层
注意: 模块层次图(H图)二大成分:模块和调用(调用不要画箭头)
还是拿上面那个题为例:
这样写就行,如果还有得话可以细化
数据流图+结构图综合题
高考录取统分子系统
基于Web的房屋中介系统
N-S图(盒图)+类C语言PDL
五种结构:顺序结构、条件选择、多重分支选择、当循环、直到循环。
详细看这篇文章:
N-S图详解
注意:盒图没有开始和结束标志,默认从图的顶部开始,到图的底部结束,单入口单出口。注意直到循环until的条件,千万不要搞反了。
题目分析解法
N-S图
阅读下面的程序流程图,试分别用N-S图和PDL(类C语言描述)表示。
其实前面的都好看,就最后那个结束时候要注意下
你看这个题目
直到i>=50条件成立时候才结束循环
所以使用直到型循环结构
(先执行后判断,当P1条件不成立的情况下,反复执行A语句,直到P1条件成立为止)
下面画好:
! 注意
:
盒图没有开始和结束标志,默认从图的顶部开始,到图的底部结束,单入口单出口。注意直到循环until的条件,千万不要搞反了。
PDL类c语言
注意:使用类C语言的伪代码形式,注意,直到循环do…while,直到循环的条件,千万不要搞反了。
比如上面这题
i = 1
do
{
if ( g >=80 )
输出n、 g
i = i + 1
}while(i<50)
比较难的也就是最后一点,直到循环do…while
关键在于这里的条件
学过C其实懂的
直到循环do…while
只要后面那个while的条件符合就继续执行那个框{}里面的内容
所以是while(i<50)
其他题目可以仿照这个写
其他
其他例子:
例子1
这里举个他俩一般结合的例子:
阅读下面的程序算法,试分别用程序流程图和N-S图表示。
void SortNum(int num , int flag) {
int x = 0;
int y = 0;
while (num > 0)
{
if (flag = = 0)
x = y +2;
else if (flag = = 1)
x = y + 3;
else x = y +4;
num--
} }
画出程序流程图
画出盒图
这里使用当型循环,先判断后执行
,当P1条件成立的情况下,反复执行A语句,直到P1条件不成立为止
例子2
下面举下PDL伪代码:
阅读下面的程序流程图,试分别用N-S图和PDL(类C语言描述)表示
这里使用直到型循环,先执行后循环,当P1条件不成立的情况下,反复执行A语句,直到P1条件成立为止
然后伪代码:
这里使用do while循环,可以看着上面的盒图画,基本一致
i = 1
do
{
if(g>=80)
输出n、g
i = i + 1
}
while(i<50)
基本路径测试
这个我就直接用题目讲解了
int isLeap(int year){
if ( year % 4= =0) ----------------------------------------1
{
if ( year % 100= =0) -------------------------------- 2
{
if ( year %400= =0) ----------------------------- 3
leap=1; ----------------------------- 4
else
leap=0; ------------------------------5
//endif -----------------------------6
}
else
leap=1; --------------------------------7
//endif -------------------------------8
}
else
leap=0; -------------------------------- 9
// endif ---------------------------------10
return leap; ---------------------------------11
}
请用基本路径测试技术完成该程序的测试,分别实现:
(1)画出上述程序的有向流图,并计算该程序的环形复杂度。(各占5分,共10分)
(2)给出基本路径集,并给出测试用例。(各占5分,共10分)
注:不能修改程序中已有的程序行号,否则不给分。
流图
注意:
- 一般流图给的序号都要用上,
- 记得画T,F (对错)
- 那些没用的当作中转节点,还要最后终点,最后一个,且路径一定要写到程序结束,不要漏掉最后的节点,否则独立路径写不完整。
- 有向流图的路径一定要画箭头
或者这样:
环形复杂度
看有几个环
最后+1(整体是一个环)
或者:注意画T F
这里 V(G)=边数13-11节点数+2=4
V(G)=判定节点3个+1=4
基本路径集+测试
测试用例设计既要写输入数据,也要写预期的输出数据,
其他
可以见我的另一篇概念文章,
或者ppt:
下面的是UML图,即顺序,类,用例,
用例图
基本符号
-
参与者(Actor)(活动者)
——与应用程序或系统进行交互
的用户、组织或外部系统。用一个小人表示。
-
用例(Use Case)
——用例就是外部可见的系统功能,对系统提供的服务进行描述。(用户能做什么事情
)用椭圆表示。
-
子系统(Subsystem)
——用来展示系统的一部分功能,这部分功能联系紧密。
关系
用例图中涉及的关系有:关联、泛化、包含、扩展。
借用这篇博客的图片
UML建模——用例图(Use Case Diagram)
关于它们的具体介绍一定要看上面那篇文章,理解很清楚
这里要特别说明下,我们老师讲的关联是有箭头指向的,指向用例。
还是要看具体情况的(一般关联实线无箭头)
然后来画用例图
题目分析解法
可以看一下上面链接的文章下面的例题
下面我们看道例题:
学生成绩管理系统
需求陈述:
某高校欲开发学生成绩管理系统,其基本功能包括:
(1) 基本信息管理
管理员登录系统后,输入或修改教学计划、学生名单和教师名单。
(2) 学生选课
学生登录系统后,根据教学计划进行选课。
(3) 分配任课教师
管理员为符合条件的课程分配教师,并打印任课通知单给教师。
(4) 成绩管理
每门课程的教师在考试评分结束后,登录系统录入成绩;管理员维护成绩,系统可生成成绩单(发给学生),成绩统计分数表(发给管理员)。
附:学生成绩管理系统的“分配任课教师”用例的描述。
主事件流:
(1) 管理员登录到“学生成绩管理”系统的分配任课教师页面,如果登录失败,转A1。
(2) 管理员查询课程库,查询符合条件的课程,然后查询教师信息,为符合条件的课程分配任课教师,并打印任课通知单给教师。如果没有合适的人选,则放弃则转入A2。用例结束。
扩展事件流:
A1:管理员身份验证不合法
若管理员账号不存在或无效,显示提示信息,可以重新输入或终止该用例。。
A2:取消
如果没有符合条件的课程,则放弃;没有合适的教师,则按取消按钮放弃。
要求:用面向对象方法学对该成绩管理系统进行分析与设计,分别完成以下工作:
(1) 给出成绩管理系统的用例模型 (10分)
1. 先找参与者,从题目中看出有三个参与者(教师,管理员,学生)
先画上三个小人
2. 一个一个参与者分析用例
先分析管理人员:
这里要从大方面考虑,所以从题目主事件流看出
(1) 基本信息管理
管理员登录系统后,输入或修改教学计划、学生名单和教师名单。
(3) 分配任课教师
管理员为符合条件的课程分配教师,并打印任课通知单给教师。
(4) 成绩管理
每门课程的教师在考试评分结束后,登录系统录入成绩;管理员维护成绩,系统可生成成绩单(发给学生),成绩统计分数表(发给管理员)。
是管理信息,分配任课教师,管理成绩
再分析教师:
看题目得到,好像也就这句话提到过教师干嘛
成绩管理
每门课程的教师在考试评分结束后,登录系统录入成绩;
所以教师用例为录入成绩
最后分析学生:
看题目得到,好像也就这句话提到过学生干嘛
(2) 学生选课
学生登录系统后,根据教学计划进行选课。
所以学生用例为选课
这样基本的用例和参与者画好了
3. 补全关系和漏的东西
看题目:
这几个功能都涉及到了登录
某高校欲开发学生成绩管理系统,其基本功能包括:
(1) 基本信息管理
管理员登录系统后,输入或修改教学计划、学生名单和教师名单。
(2) 学生选课
学生登录系统后,根据教学计划进行选课。
(3) 分配任课教师
管理员为符合条件的课程分配教师,并打印任课通知单给教师。
(4) 成绩管理
每门课程的教师在考试评分结束后,登录系统录入成绩;管理员维护成绩,系统可生成成绩单(发给学生),成绩统计分数表(发给管理员)。
那么这些用例中包含了登录系统,就选用包含关系
这里为啥录入成绩不包含登录系统呢?我们往下看就知道了
看题目:
(4) 成绩管理
每门课程的教师在考试评分结束后,登录系统录入成绩;管理员维护成绩,系统可生成成绩单(发给学生),成绩统计分数表(发给管理员)。
成绩管理包含了录入成绩
所以它们二个是包含关系
但是我们还有其他漏的关系,还有扩展事件流
继续分析
(3) 分配任课教师
管理员为符合条件的课程分配教师,并打印任课通知单给教师。
这里说明分配任课教师包含打印任课通知单
/
继续分析
(4) 成绩管理
每门课程的教师在考试评分结束后,登录系统录入成绩;管理员维护成绩,系统可生成成绩单(发给学生),成绩统计分数表(发给管理员)。
这里说明管理成绩包含生成成绩单,成绩统计表
最后画出大致:
其他
-
注意参与者和用例规范化的图形表示,用例之间的《include》、《extend》关系的识别和表示,不要搞反了。尤其虚线箭头的方向,表示依赖关系,《include》、《extend》的依赖关系是相反的,所以箭头的指向也是相反的,画图时不要画反了。
-
参与者
要命名成名词,用例
要命名成动宾词组。 -
参与者与用例之间用实线连接。
文章:UML建模——用例图(Use Case Diagram)
其他题目:
图书馆系统的用例图
用例图——门诊挂号
用例图——客户提出申请要求贷款…
用例图——空调公司维修服务流程
类图
借鉴教学视频:
uml图做题方法(上)tyut
基本符号
类
这里简单介绍下
详细的看类图详解
名称
特性
(类似于string name这种)操作
(类似于函数方法 void add()这种)
注意类特性操作前面有符号的 + -
”+
“ :Public 公有
”-
“ : Private 私有
”#
“:Protected 保护
接口《interface》
一组操作的集合,只有操作的声明而没有实现
接口名称
接口方法
例如: 飞翔接口
public 飞方法()
或者还有另外一种写法(”棒棒糖表示法“)关联其他接口
例如:唐老鸭接口
public 讲话
但是它会讲话是讲人话的,需要接口讲人话
关系
继承关系
就是泛化关系,这里叫做继承关系
- 三角形连接大的方向
比如鸟类属于动物类
实现关系(类和接口)
实现关系——对应于类和接口之间的关系
例如:大雁飞方法需要接口飞翔
关联关系(类与类)
关联关系——描述了类的结构之间的关系。具有方向、名字、角色和多重性等信息。一般的关联关系语义较弱。
例如:大雁下单与气候关联
其实这样的关联很弱,如果不确定可以不写
聚合关系(整体部分)
特殊关联关系,指明一个聚集(整体)和组成部分之间的关系
- 菱形:连接
大的方向
例如:雁阵飞包含大雁飞
组合关系(拥有)(声明周期一样)
组合关系——语义更强的聚合,部分和整体具有相同的生命周期
- 菱形:连接大的方向
严谨的按照声明周期一样
例如:鸟的翅膀和鸟
依赖关系
依赖关系——※描述了一个类的变化对依赖于它的类产生影响的情况
。有多种表现形式, 例如绑定(bind)、友元(friend)等
比如:动物依赖水
多重性
题目分析解法
一本书有一个封面、一个目录、一个前言、若干章、每章有若干节、每节有若干段,有若干句子,有0个或多个插图,还有0个或多个表格,书最后有一个附录。试建立该书的对象模型。
- 找出所有的类
书,封面,目录、前言,前言,节,段,句子,插头,表格,附录
- 建立关系
组合关系
书包含封面,目录,前言,章,附录
章包含节
节包含段
段包含句子,插图,表格 - 多重性加上
多重性加上:这里书有若干章,一对多- 1… 1…*
章有若干节 ,一对多- 1… 1…*
节有若干段,一对多- 1… 1…*
段有若干句子,一对多- 1… 1…*
有0个或多个插图,1… 0… * …
还有0个或多个表格 1… 0… * …
其他
使用的ppt
上面那题书的题目视频讲解:
uml图解法(下)tyut
其他题目举例:
更具体的图书馆系统的类图
学生成绩管理系统:
顺序图(时序图)
显示一组按时间排列的对象之间进行交互的图
组成元素
顺序图的元素:
- 参与者
- 对象
- 生命线
- 激活框
- 消息
- 控制框架(分支、循环、可选)
举例:
下面一个一个讲解:
参与者
参与者(Actor)
: 实例是一个交互过程(用例)的发起者,通常放置在最左边。
比如上面的图书管理员。
对象
对象就是类的一个实例
,在顺序图中上方以和类相同的图形符号表示,并带有一条叫做“生命线
”的垂直虚线
。
生命线上的矩形条
表示对象在特定时间的生存期。
例如:
生命线
说明了对象的生命周期。对象如果被销毁了,其生命线就会中断。
激活框
表明交互中对象何时起作用,激活框在顺序图中是可选的。
消息
消息是对象之间的通信
,消息传递的同时对应活动随之发生。
→→→→→→→→→→
在顺序图中,消息被表示为从一个对象的生命线到另一个对象的生命线的水平箭头。
箭头通过消息名称及消息参数
来标记,箭头自上至下的垂直位置来表示时间的先后顺序
。
消息响应后可能会回送结果,发送请求
的消息采用实线箭头
,返回结果
的消息采用反向的虚线箭头
。
如果事件流较多,可备选流单独绘制
如果用例的备选事件流的步骤较多,可另外为备选事件流单独绘制一个顺序图。
利用交互框架
来标示.
- 框架可以将顺序图中的某个区域框起,并划分成若干片断
- 每个框架有一个
操作符
。 - 对于循环操作,可以使用
loop
操作符,条件操作则使用alt
操作符 - 每个分支片断有一个监护条件,满足该条件才会执行该片断内的事件流
举例:
其他
可以看我的另外一篇文章
见ppt
例子:图书馆结借书顺序图:
还书顺序图:
备选事件流可以使用opt框架
表示可选
手机拨号顺序图
学生成绩管理系统顺序图
活动图
活动图描述系统中各种活动的执行顺序
,通常用于描述一个操作中所要进行的各项活动的执行流程(如业务过程、工作流程等)。
它常被用来描述一个用例的处理流程,具有交互性(利用泳道)。
活动图由一些活动组成,图中同时包括了对这些活动的说明。当一个活动执行完毕之后,控制将沿着控制转移箭头转向下一个活动。
活动图中还可以方便地描述控制转移的条件以及并行执行等要求。
活动图是另一种描述交互的方式,它描述采取何种动作,动作的结果是什么(动作状态改变),何时发生(动作序列),以及在何处发生(泳道)。
组成元素
!注意:一张活动图只有一个开始,可以有多个终止。
举例画图:
其他
可以看我的另外一篇文章
见ppt
学生成绩管理系统活动图
状态图
在UML2.0命名为状态机图(state machine diagram),它是表述系统行为的一种技术,在面向对象方法中,对单一的类绘制一个状态机图以表示该对象的生命期行为和状态转换
。
对象可能存在的状态:
初态
:是状态图的起始点,表示对象的初始状态,初态只有一个,用实心圆●
表示。终态
:是状态图的终点,表示一个对象完成必要操作后的最终状态,终态不能是复合状态
。实心圆外加一个圆圈◉
来表示终态。复合状态
:一种状态中还嵌套有其它多个状态(子状态)。
组成元素
-
状态
-
转换(transition):指出由一种状态到另一种状态的运动。每个转换上有
可选标记
,标记含有三部分内容事件
:
事件[监护条件]/活动(event[guard]/activity)
- 只有发生指定的事件后才有可能引发状态的改变
- 需要监护条件为真时转换才会生效
活动
是在转换执行中的行为
- 内部活动:对象在某个状态内部执行的操作
举例画图:读者借书&归还
其他
可以看我的另外一篇文章
见ppt