1、UML简介+用例及用例图,2,一、基本概念,1 什么是UML 2 UML的构成,3,1 什么是UML,数学家用数学符号来学习或推演数学 音乐家用五线谱记录乐谱 建筑师会将其设计的建筑物画成蓝图 软件工程师用的就是,4,1 什么是UML,The Unified Modeling Language (UML),不是一种可视化编程语言,而是一种可视化建模语言。,5,为什么要建模?,1 什么是UML,修建大厦和修建狗窝的区别是建设狗窝不需要设计 -Grady Booch,建模是对现实的简化 建模就是把复杂的系统变成小的系统,采用“各个击破”的原则逐一解决。,6,UML发展历史,1 什么是UML,UML
2、2.0,7,Booch,Jacobson,Rumbaugh,1 什么是UML,8,UML则统一了Booch、OMT 和OOSE 的表示方法,而且对其作了进一步的发展。 1997 年,UML 被国际对象组织OMG采纳为面向对象的建模语言的国际标准,它溶入了软件工程领域的新思想、新方法和新技术。 UML不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。,1 什么是UML,9,1 什么是UML,目前,在多数大型企业的正规化开发流程中,开发人员普遍使用UML进行模型的建立。 作为一名软件开发人员,我们必须学会UML。 喻因为UML就是那个统一的“文字“,统一的“度“、“量“、“衡
3、“,不理解UML,作为软件设计统一王国的国民,将是艰难而痛苦的。,10,1 什么是UML,图书管理系统用例图,11,2 UML的构成,基本构造块(basic building block)事物(thing)关系(relationship)图(diagram) 公共机制(common mechanism)规范说明(specification) 修饰(adornment)公用分类(common division)扩展机制(extensibility mechanism) 架构,12,2 UML的构成,图,13,2 UML的构成,14,2 UML的构成,(1)类图(Class Diagram):类图
4、描述系统所包含的类、类的内部结构及类之间的关系; (2)对象图(Object Diagram):对象图是类图的一个具体实例; (3)包图(Package Diagram):包图表明包及其之间的依赖类图; (4)组件图(Compoment Diagram,也称构件图):组件图描述代码部件的物理结构以及各部件之间的依赖关系; (5)部署图(Deployment Diagram):部署图定义系统中软硬件的物理体系结构;,15,2 UML的构成,(6)用例图(Usecase Diagram):用例图从用户的角度出发描述系统的功能、需求,展示系统外部的各类角色与系统内部的各种用例之间的关系; (7)顺序
5、图(Sequence Diagram):顺序图表示对象之间动态合作的关系; (8)协作图(Collaboration Diagram):合作图描述对象之间的协作关系; (9)状态图(Statechart Diagram):状态图描述一类对象的所有可能的状态以及事件发生时状态的转移条件; (10)活动图(Activity Diagram):活动图描述系统中各种活动的执行顺序。,16,二、用例,1 用例与用例图 2 建立用例模型 3 用例图和用例描述设计实例,17,1 用例与用例图,用例实际上就是从用户的角度去定义具有交互过程的系统功能。 每个功能与一个或多个参与者(actor)相连接。 参与者是
6、指处于系统之外,需要使用用例的人或事物。 一个系统的用例一般有多个,用例图就是用来组织这些用例的。 例如,整个RUP流程都是“用例驱动“的。,18,1 用例与用例图,用例是需求分析中最重要的概念。 需求获取(Requirement Elicitation) 是需求工程的主体,其主要工作是建立待开发系统的模型,而用例就是用于建立这种模型的良好方法。 用例最初由Ivar Jackboson博士提出,后被综合到UML规范之中,成为需求表述的标准化体系。,19,1 用例与用例图,在用例图中主要涉及到参与者(又称角色、执行者)、用例以及二者之间的通讯关联。,图书管理系统用例图,20,1 用例与用例图,系
7、统边界 系统边界是用来表示正在建模系统的边界。 边界内表示系统的组成部分,边界外表示系统外部。 系统边界在画图中方框来表示,同时附上系统的名称,参与者画在边界的外面,用例画在边界里面。,21,1 用例与用例图,参与者 参与者是与系统、子系统或类发生交互的外部用户、进程或其他系统。 参与者可以是人、另一个计算机系统或一些可运行的进程。 在图1中,“读者“和“管理员“即为参与者。,22,1 用例与用例图,参与者之间可以存在泛化关系。 例如,在图1所示图书馆管理系统用例图中,可以认为“读者”是“学生读者”和“教师读者”的泛化,而“学生读者”还可以具体化为“本科生读者”和“研究生读者”;同样,“图书管
8、理人员”也是“采购员”、“编目员”及“借阅人员”的泛化。,图2表示出了参与者之间的泛化关系。,23,1 用例与用例图,用例 用例是外部可见的一个系统功能,这些功能由系统所提供,并通过与参与者之间消息的交换来表达。 用例的用途是在不揭示系统内部构造的情况下定义行为序列,它把系统当作一个黑箱,表达整个系统对外部用户可见的行为。 鉴于用例的特点,用例一般被命名为一个能够说明目标的动名词组。如图1中的“借书“、“还书“和“管理图书“皆为动名词组。,24,1 用例与用例图,用例之间也可以存在包含、扩展和泛化等关系: (1)包含关系:用例可以简单地包含其他用例具有的行为,并把它所包含的用例行为做为自身行为
9、的一部分,这被称作包含关系。,25,1 用例与用例图,(2)扩展关系:扩展关系是从扩展用例到基本用例的关系,它说明为扩展用例定义的行为如何插入到为基本用例定义的行为中。它是以隐含形式插入的,也就是说,扩展用例并不在基本用例中显示。在以下几种情况下,可使用扩展用例: a.表明用例的某一部分是可选的系统行为(这样,您就可以将模型中的可选行为和必选行为分开); b.表明只在特定条件(如例外条件)下才执行的分支流; c.表明可能有一组行为段,其中的一个或多个段可以在基本用例中的扩展点处插入。所插入的行为段和插入的顺序取决于在执行基本用例时与主角进行的交互。,26,1 用例与用例图,图3给出了一个扩展关
10、系的例子,在还书的过程中,只有在例外条件(读者遗失书籍)的情况下,才会执行赔偿遗失书籍的分支流。,27,1 用例与用例图,(3)泛化关系:用例可以被特别列举为一个或多个子用例,这被称做用例泛化。当父用例能够被使用时,任何子用例也可以被使用。如在图4中,管理图书是添加图书和修改图书信息的抽象。,28,1 用例与用例图,通讯关联 通讯关联用于表示参与者和用例之间的对应关系,它表示参与者使用了系统中的哪些用例(或者说系统所提供的用例被哪些参与者使用)。 通讯关联以箭头或实线表示。 若使用箭头,箭头所指方将是对话的被动接受者; 如果不强调对话中的主动与被动关系,则可以使用不带箭头的关联实线。,29,大
11、学的用例图,30,2 建立用例模型,知道了用例与用例图的概念,我们还需要懂得怎样建立用例模型,即怎样找出参与者、用例以及定义用例的过程。 一般来说,建立用例模型的步骤为:,31,2 建立用例模型,(1)确定谁会直接使用该系统,即参与者(Actor),为了发现参与者,我们可以尝试问如下问题: a. 谁/什么使用系统? b. 谁/什么从系统获得信息? c. 谁/什么向系统提供信息? d. 谁/什么支持、维护系统? e. 哪些其它系统使用此系统? f. 公司的哪个部门使用系统? ,32,2 建立用例模型,(2)选取其中一个参与者; (3)定义该参与者希望系统做什么,参与者希望系统做的每件事成为一个用
12、例,为了发现用例,我们可以尝试问如下问题: a. 为什么该参与者想要使用此系统? b. 该参与者是否要创建、保存、更改、移动或读取系统的数据?如果是,为什么? c. 该参与者是否要通知系统外部事件或变化? d. 该参与者是否需要知道系统内部的特定事件? ,33,2 建立用例模型,(4)对每件事来说,何时参与者会使用系统,通常会发生什么,这就是用例的基本过程; (5)描述该用例的基本过程; (6)考虑一些可变情况,把他们创建为扩展用例; (7)复审不同用例的描述,找出其中的相同点,抽出相同点作为共同的用例; (8)重复步骤2-7找出每一个用例。,34,2 建立用例模型,参与者检查的参考标准如下:
13、 (1)是否您已找到所有的参与者?也就是说,是否您已经对系统环境中的所有参与者都进行了说明和建模? (2)每个参与者是否至少涉及到一个用例? (3)您能否列出至少两名可以作为特定参与者的人员? (4)是否有参与者担任与系统相关的相似参与者?如果有,您应该将他们合并到一个参与者中。,35,2 建立用例模型,用例检查的参考标准如下: (1)用例模型的简介部分简明清晰地概述此系统的目的和功能; (2)所有的用例已确定,这些用例共同说明所有的必要行为; (3)所有的功能性需求都至少映射到一个用例; (4)该用例模型不包含多余的行为,所有的用例都可回溯到某个功能性需求来证明其合理性。,36,2 建立用例
14、模型,用例规约 用例图从总体上大致描述了系统所能提供的各种服务,让我们对于系统的功能有一个总体的认识,仅此还是不够的,我们还需要描述每一个用例的详细信息,即用例规约。 用例模型正是由用例图和每一个用例的详细描述用例规约所组成的。,37,2 建立用例模型,RUP中提供了用例规约的模板,包含以下内容: (1)简要说明 (Brief Description):简要介绍该用例的作用和目的; (2)事件流 (Flow of Event):包括基本流和备选流,事件流应该表示出所有的场景; (3)用例场景 (Use-Case Scenario) :包括成功场景和失败场景,场景主要是由基本流和备选流组合而成的
15、; (4)特殊需求 (Special Requirement):描述与该用例相关的非功能性需求(包括性能、可靠性、可用性和可扩展性等)和设计约束(所使用的操作系统、开发工具等); (5)前置条件 (Pre-Condition):执行用例之前系统必须所处的状态; (6)后置条件 (Post-Condition):用例执行完毕后系统可能处于的一组状态。,38,2 建立用例模型,用例规约基本上是用文本方式来表述的,为了更加清晰地描述事件流,也可以选择使用状态图、活动图或序列图来辅助说明(状态图有助于描述与状态相关的系统行为,活动图有助于描述复杂的决策流程,序列图适合于描述基于时间顺序的消息传递)。 另外,只要对简洁明了地表达用例有帮助,可以在用例中任意粘贴用户界面、流程的图形化显示方式及其他图形。,39,3 用例图和用例描述设计实例,这里用一个家教网站来简单的分析用例图的画法和用例描述的写法。 这个网站用UML进行完整的分析,以下是提取用例图和用例描述的部分。 这个家教网站分为前台客户系统和后台管理系统。,40,3 用例图和用例描述设计实例,前台客户系统的用例图如下:,41,3 用例图和用例描述设计实例,后台管理系统用例图如下:,42,3 用例图和用例描述设计实例,对于用例描述,篇幅有限,在这里只列了后台管理系统中的网站公告发布这个用例的描述。,43,