使用**💡**标记的是期末考点!

软件需求的基本概念

UML的基本概念

UML是一种统一建模语言,通过图形化的表示机制进行面向对象分析和设计。由如下四个部分构成:

  1. 视图
  2. 模型元素
  3. 通用机制

UML的特点如下:

  1. 统一标准
  2. 实现和过程的独立性
  3. 可视化
  4. 易学易用性
  5. 面向对象特征
  6. 可编程性

UML的图和模型元素

💡用例图

用例图是由参与者用例和它们之间的关系共同构成的,是一种用于描述系统功能的图。用例图的图形元素介绍如下:

参与者

参与者指的不仅是系统的用户,实际上反之软件系统外部的、所有与系统交互的角色,(比如用户,再比如系统的管理员)。参与者可以是人,也可以是与系统进行信息交换的其他外部系统

用例

用例是对一组动作序列的抽象描述,系统执行这些抽象序列,产生相应的结果,这些结果要么反馈给用户,要么反馈给其他用例作为参数。
用例通常用**椭圆**表示,有如下特点:

  1. 用例是从参与者角度出来描述系统功能的
  2. 用例粒度由需求分析人员确定,只要能清楚地表示用户功能即可(等于用例没有标准答案)
  3. 用例不描述多个用例在操作上、时间上的执行顺序
  4. 一个用例对应用户的一个具体功能目标

举个例子,比如一个网站,对于用户来说有一个搜索功能,这个功能可能包含了多个动作,比如:

  1. 获取搜索的关键词
  2. 查询数据库
  3. 匹配相应的关键词
  4. 获取相应数据库内容
  5. 返回内容给用户

这五个动作集合就是一个用例

系统边界

系统边界用划分系统的内部功能和外部参与者,使用矩形框进行表示。在没有歧义的情况下,系统框可以省略。

关系

用例和用例之间的关系有如下几种:

  1. **<<uses>>**:使用关系,表示参与者对用例的操作,一般都可以省略
  2. **<<include>>**:包含关系,表示一个用例的行为包含了另一个用例的行为,前者一般称为基本用例,后者一般称为扩展用例
  3. **<<extend>>**:扩展关系,表示一个用例对于另一个用例的补充,不影响基本用例的独立性。
  4. **泛化关系**:一般表示参与者和参与者之间或者用例和用例之间的继承关系

    举个例子

    第七章:UML - 图1

    💡类图

    类图用于描述类的属性方法类和类之间的关系。类的内部结构包含如下:
  • **类名**:类名是对象集合的名称。
  • **可见性**:定义了对象对类的属性方法的访问权限
    • public:公有修饰符,类图中使用+表示
    • private:私有修饰符,类图中使用-表示
    • protect:保护修饰符,类图中使用#表示
    • 一般情况下只会使用前两种,属性一般都是私有,方法一般都是公有
  • 属性:值能体现整体对象特征的集合
    • 在UML中表示为:**[可见性] 属性名 [:类名] [=初始值]**
    • 例如:- str:char* = null,表明有一个**私有****char***类型的名字叫**str**的属性,其初始值为null
  • 方法:为类提供的服务,体现类的功能
    • 在UML中表示为:**[可见性] 方法名 ([参数列表]) [:返回值类型]**
    • 例如:+Find(char):int表示的就是一个**公有**的,方法名为Find,参数为char,返回值为int类型的方法

整体举例如下:
C++代码

  1. class String{
  2. private:
  3. char* str;
  4. unsigned size;
  5. public:
  6. String(){str=NULL;size=0;}
  7. String Strcpy(String);
  8. int Find(char);
  9. };

String(){str=NULL;size=0;}用于赋初始值。

UML显示
第七章:UML - 图2

包图

包图是对UML中用例图、类图、UML关系等模型元素的封装。看图就可以理解:
C++语言

  1. namespace System{
  2. namespace Windows{
  3. namespace UI{
  4. class Button{...};
  5. class RichText{...};
  6. class TextBox{...};
  7. class CheckBox{...};
  8. }
  9. }
  10. }

这里实际对应的包名就是System.Windows.UI

UML包图
包和包之间同样存在关系:

  • 依赖关系:一个包需要引入另一个包的输出信息
  • 泛华关系:一个包需要继承另一个包

例如:
第七章:UML - 图3

💡状态图

第二章:软件需求工程

💡活动图

活动图主要用于描述用例或者场景的活动顺序。描述一个活动到另一个活动的控制流。
其中包含以下的几个主要的组成部分:

  1. 起点:黑色实心圆表示
  2. 终点:黑色实心圆外包含一个小圆
  3. 对象:指的是触发活动的对象
  4. 活动约束:也就是触发活动的先决条件
  5. 控制流:使用带箭头的线表示
  6. 分支:使用菱形表示,一般用于做条件判断
  7. 并发:并发的图形元素用一条加粗的横线表示
  8. 异常处理:使用折现表示
  9. 泳道:把不同对象分割开来的线

举个例子:

顾客购买多项货物的时候,需要填写货物清单销售部门生成订单并确认之后,提交给仓库进行配货顾客同时付款如果清单上的货物有缺货,那么仓库会补货。如果仓库有货并且顾客已经付款,仓库会根据顾客的地址进行发货,如果地址错误顾客确定地址后重新发货。

重点都已经标出,对应的活动图如下:
第七章:UML - 图4


UML的关系

关联关系和泛化关系

不重要,看下面的文档了解即可。
UML类图几种关系的总结

💡依赖关系

依赖关系用于描述有较强关联的,多个事物之间的联系。这里重点需要介绍的是友元依赖关系。
友元关系最重要的点在于:一个类的对象或者成员方法能访问另一个类的私有部分成员
举个例子:
C++语言

  1. class Line{
  2. private: Point P;
  3. public:void Draw(){
  4. P.x=1;
  5. P.y=2;
  6. }
  7. }
  1. class Point{
  2. private: double x,y;
  3. public: friend Line;
  4. }

“友元”的依赖关系
第七章:UML - 图5
上面这个例子中,Line就是Point友元类。在Line类的方法中,可以直接调用P的私有属性xy。同时Line类需要依赖于Point才能存在。