使用
**💡**
标记的是期末考点!
软件需求的基本概念
UML的基本概念
UML
是一种统一建模语言,通过图形化的表示机制进行面向对象分析和设计。由如下四个部分构成:
- 视图
- 图
- 模型元素
- 通用机制
UML的特点如下:
- 统一标准
- 实现和过程的独立性
- 可视化
- 易学易用性
- 面向对象特征
- 可编程性
UML的图和模型元素
💡用例图
用例图是由参与者
、用例
和它们之间的关系共同构成的,是一种用于描述系统功能的图。用例图的图形元素介绍如下:
参与者
参与者指的不仅是系统的用户,实际上反之软件系统外部的、所有与系统交互的角色,(比如用户,再比如系统的管理员)。参与者可以是人,也可以是与系统进行信息交换的其他外部系统。
用例
用例是对一组动作序列的抽象描述,系统执行这些抽象序列,产生相应的结果,这些结果要么反馈给用户,要么反馈给其他用例作为参数。
用例通常用**椭圆**
表示,有如下特点:
- 用例是从参与者角度出来描述系统功能的
- 用例粒度由需求分析人员确定,只要能清楚地表示用户功能即可(等于用例没有标准答案)
- 用例不描述多个用例在操作上、时间上的执行顺序
- 一个用例对应用户的一个具体功能目标
举个例子,比如一个网站,对于用户来说有一个搜索功能,这个功能可能包含了多个动作,比如:
- 获取搜索的关键词
- 查询数据库
- 匹配相应的关键词
- 获取相应数据库内容
- 返回内容给用户
系统边界
系统边界用划分系统的内部功能和外部参与者,使用矩形框
进行表示。在没有歧义的情况下,系统框可以省略。
关系
用例和用例之间的关系有如下几种:
**<<uses>>**
:使用关系,表示参与者对用例的操作,一般都可以省略。**<<include>>**
:包含关系,表示一个用例的行为包含了另一个用例的行为,前者一般称为基本用例
,后者一般称为扩展用例
。**<<extend>>**
:扩展关系,表示一个用例对于另一个用例的补充,不影响基本用例的独立性。**泛化关系**
:一般表示参与者和参与者之间或者用例和用例之间的继承关系。举个例子
💡类图
类图用于描述类的属性
,方法
,类和类之间的关系
。类的内部结构包含如下:
**类名**
:类名是对象集合的名称。**可见性**
:定义了对象对类的属性
和方法
的访问权限public
:公有修饰符,类图中使用+
表示private
:私有修饰符,类图中使用-
表示protect
:保护修饰符,类图中使用#
表示- 一般情况下只会使用前两种,属性一般都是私有,方法一般都是公有
属性
:值能体现整体对象特征的集合- 在UML中表示为:
**[可见性] 属性名 [:类名] [=初始值]**
- 例如:
- str:char* = null
,表明有一个**私有**
的**char***
类型的名字叫**str**
的属性,其初始值为null
- 在UML中表示为:
方法
:为类提供的服务,体现类的功能- 在UML中表示为:
**[可见性] 方法名 ([参数列表]) [:返回值类型]**
- 例如:
+Find(char):int
表示的就是一个**公有**
的,方法名为Find
,参数为char
,返回值为int
类型的方法
- 在UML中表示为:
整体举例如下:
C++代码
class String{
private:
char* str;
unsigned size;
public:
String(){str=NULL;size=0;}
String Strcpy(String);
int Find(char);
};
String(){str=NULL;size=0;}
用于赋初始值。
包图
包图是对UML中用例图、类图、UML关系等模型元素的封装。看图就可以理解:
C++语言
namespace System{
namespace Windows{
namespace UI{
class Button{...};
class RichText{...};
class TextBox{...};
class CheckBox{...};
}
}
}
这里实际对应的包名就是
System.Windows.UI
UML包图
包和包之间同样存在关系:
依赖关系
:一个包需要引入另一个包的输出信息泛华关系
:一个包需要继承另一个包
💡状态图
💡活动图
活动图主要用于描述用例或者场景的活动顺序。描述一个活动到另一个活动的控制流。
其中包含以下的几个主要的组成部分:
起点
:黑色实心圆表示终点
:黑色实心圆外包含一个小圆对象
:指的是触发活动的对象活动约束
:也就是触发活动的先决条件控制流
:使用带箭头的线表示分支
:使用菱形表示,一般用于做条件判断并发
:并发的图形元素用一条加粗的横线表示异常处理
:使用折现表示泳道
:把不同对象分割开来的线
举个例子:
顾客
购买多项货物的时候,需要填写货物清单。销售部门
生成订单并确认之后,提交给仓库
进行配货,顾客
同时付款。如果清单上的货物有缺货,那么仓库
会补货。如果仓库
有货,并且顾客
已经付款,仓库
会根据顾客
的地址进行发货,如果地址错误,顾客
确定地址后重新发货。
重点都已经标出,对应的活动图如下:
UML的关系
关联关系和泛化关系
不重要,看下面的文档了解即可。
UML类图几种关系的总结
💡依赖关系
依赖关系用于描述有较强关联的,多个事物之间的联系。这里重点需要介绍的是友元依赖关系。
友元关系最重要的点在于:一个类的对象或者成员方法能访问另一个类的私有部分成员。
举个例子:
C++语言
class Line{
private: Point P;
public:void Draw(){
P.x=1;
P.y=2;
}
}
class Point{
private: double x,y;
public: friend Line;
}
“友元”的依赖关系
上面这个例子中,Line
就是Point
的友元类。在Line
类的方法中,可以直接调用P的私有属性x
和y
。同时Line
类需要依赖于Point
才能存在。