UML用例

用例图

用例图是被称为参与者的外部用户所能观察到的系统功能的模型图,呈现了一些参与者和一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。用例图指定处理外部业务事件的基本进程。

用例图包含了四种基本的概念:用例、角色(参与者)、参与者与用例的关联和系统或子系统边界。

1.用例        表示用例的图标是一个椭圆。用例名称显示在椭圆的内部(也可以使下面)。

2.参与者    表示参与者的图标是一个人形。人形图形表示有参与者的名称。

3.关联        一条直线将每个参与者连接至该参与者加入的用例。从参与者到用例的箭头意味着,该参与者是该用例的发起者。

4.系统或子系统边界    矩形代表系统(或子系统)边界。在只定义了一个子系统的情况下,该矩形通常被省略。

用例

用例是一组连续的操作,在参与者使用系统来完成某个过程时出现。起初,用例是用于测试在系统响应来自环境的消息时会发生何种情况。可以利用系统对事件的响应来标识用例,它显示了对事件的完整响应。尤其是,它着重于系统为参与者生成的值。用例不是计算机进程或计算机进程的模型,而是一个需求模型。该模型由于系统的用户利益而存在。他们还指定处理时序事件的进程。此时,用户并不关心标准系统的功能,如系统的启动和维护。每个事件响应一个或多个用例。用例通过向系统用户提供服务来响应事件。

    存在多种用例命名的方法。比较好的命名方法是:使用动词短语来强调用例是用于描述过程的这一事实。用例名通常由两到三个单词组成。第一个是动词,第二个是名词,其后一般为形容词。而用例名中插入介词,通常是为了使其名称更符合语法规范。通常,从参与者而非系统角度来命名用例。例如"购买物品"源自参与者"客户",而"出售物品"则是从系统角度看待用例。

参与者

参与者被定义为与系统交互的某个人、组织或系统,参与者将消息发送至系统或从系统接收消息。参与者可以是在外部业务事件出现时将消息发送至系统的某个人(或多个人)。参与者还可以是网络中的计算机系统(如应收款项系统、信用卡确认系统等)或计算机设备。最后,诸如学校、公司之类的组织也可以使参与者。但是,最常见的参与者是体现某种角色的人。一个人可以再不同的时间或不同的系统中具有不同的角色。

询问如下六个问题对找到参与者会有帮助:

1.谁初始化每个外部事件

2.谁作为每个事件的一部分,从系统获取信息或者将信息输入系统

3.谁来更新系统中作为每个事件一部分的信息

4.谁启动和停止系统

5.每个用例与什么计算机系统通信

6.每个用例与什么组织通信

请使用单数形式来表示参与者,如顾客而不是顾客们。请勿使用参与者本身的名称,如顾客的名字Andrew。

用例间的关联

UML提供了用例间的三种不同类型的关联:<>、<>和<>。

共性:都是从现有的用例中抽取出公共的那部分信息,作为一个单独的用例,然后通后过不同的方法来重用这个公共的用例,以减少模型维护的工作量。

不同之处:用例之间的<>关联意味着,包含的用例将始终出现,而无论包含它的用例何时出现。<>关联扩充其扩展的用例的行为。扩展的出现是有条件的,并且每次并不一定出现。<>关联意味着子用例包含父用例的所有属性、行为顺序及扩展。

    "包含"比较好理解,就是指把多个用例(UseCase A'加撇号表示是在提取公共部分之前的原UseCase , UseCase C')都使用到的相同的部分提取出来单独作为一个用例(UseCase B),然后再在分离之后的用例A, C调用B,画上连线。是"HAS A"关系。

    "泛化"是一般的"抽象和具体"之间的关系,子用例(较特殊用例)完整包含了父用例(较一般用例),是一个"IS A"关系。"用邮件报告错误"和"用短信报告错误"都是一种具体的"报告错误"。

    "扩展"的扩展用例和基用例之间既不是"HAS A"关系也不是"IS A"关系,而是"以模块化的方法递增地修改基用例",以提供一些附加的功能。

泛化类似于OO术语"继承"或"多态"。UML中的Use Case泛化过程是将不同Use Case之间的可合并部分抽象成独立的父Use Case,并将不可合并部分单独成各自的子Use Case;包含以及扩展过程与泛化过程类似,但三者对用例关系的优化侧重点是不同的:泛化侧重表示子用例间的互斥性;包含侧重表示被包含用例对Actor提供服务的间接性;扩展侧重表示扩展用例的触发不定性;详述如下:

既然用例是系统提供服务的UML表述,那么服务这个过程在所有用例场景中是必然发生的,但发生按照发生条件可分为如下两种情况:

⒈无条件发生:肯定发生的;

⒉有条件发生:未必发生,发生与否取决于系统状态;

因此,针对用例的三种关系结合系统状态考虑,泛化与包含用例属于无条件发生的用例,而扩展属于有条件发生的用例。进一步,用例的存在是为Actor提供服 务,但用例提供服务的方式可分为间接和直接两种,依据于此,泛化中的子用例提供的是直接服务,而包含中的被包含用例提供的是间接服务。同样,扩展用例提供的也是直接服务,但扩展用例的发生是有条件的。另外一点需要提及的是:泛化中的子用例和扩展中的扩展用例均可以作为基本用例事件的备选择流而存在。

关联用例

包含

作为<>的一个示例,酒店房间的状态在登记住宿和结账离开期间必须进行更改。

扩展

员工的特殊折扣可能适用于销售点应用程序中的支付步骤。体育生可以注册满员的班级。赞助者可以不用缴纳罚金。

包含、扩展和泛化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值